勉強不足で至らんブログ

勉強不足ですが色々と書いていきます。

magentaセットアップをwslでしたら躓いてDockerの良さを再認識したメモ

音の自動生成を試したい!

ということでgoogleさんが作っているmagentaというツールを使おうと思いセットアップをしてみました。結構躓いたのでメモ

github.com

↓の手順で触っていきました。

qiita.com

1 Windowsで行うためwslの設定から

www.kkaneko.jp

pipでインストールすると新しいtensorflowのサポートがされておらず以下の公式サイトをみつつ情報をあつめ進めていきました。

www.tensorflow.org

2 ハンズオンを触っていく

ここから出会ったエラーと解決を書いていますが 3 本番はここからだった へ飛べばスキップできるものです。さくさくセットアップしたい場合は飛ばしてください。

省略可能領域

python scripts/data/create_note_sequences.py を行おうとするとそもそもtensorflowのバージョンに合っていないので

    def log_statistics_list(stats_list, logger_fn=tf.logging.info):
AttributeError: module 'tensorflow' has no attribute 'logging'

みたいなエラーとなる

pipには既にtensorflow1系は提供されていないのでpipでインストールした場所 /home/{ユーザー名}/.local/lib/python3.8/site-packages/magenta/ に行って中身の必要箇所を置き換える手段をとりました

すると

    class NoteSequenceRecordWriter(tf.python_io.TFRecordWriter):
AttributeError: module 'tensorflow' has no attribute 'python_io'

という別のエラーが出てきたので、さっきの箇所は通ったようです、同じようにエラーに対応していきます。

基本的には tf.hogetf.compat.v1.hoge にすれば通ります。

この調子で進めると

‘‘‘ AttributeError: module 'tensorflow' has no attribute 'contrib' ‘‘‘

というエラーで行き詰ってしまいました。調べると Migrate your TensorFlow 1 code to TensorFlow 2  |  TensorFlow Core

一切のサポートが切られていて、tensorflow-addonというのも試しましたがうまくいきませんでした。

3 本番はここからだった

そこで、ふとmagentaのReleaseを確認したらtensorflow2のサポートのsourcecodeが貼ってあり

Releases · magenta/magenta · GitHub

ひとまず Magenta v2.0.1 をダウンロードして、pipでインストールしていた場所 /home/{ユーザー名}/.local/lib/python3.8/site-packages/magenta/ で中身を全部置き換えると違うエラーとなり進んだようです。

pipでインストールしたmagenta自体を置き換えたので 2 ハンズオンを触っていく の労力は意味なかったようです。pipのパッケージ更新してくれんかな…

ModuleNotFoundError: No module named 'tensorflow_probability'

pipで tensorflow_probability をインストールすれば解決

ModuleNotFoundError: No module named 'tensor2tensor'

pipで tensor2tensor をinstallしようとすると

Collecting pygame
  Using cached pygame-1.9.6.tar.gz (3.2 MB)
    ERROR: Command errored out with exit status 1:

となりpygameというものでコケてしまう 調べると Python - pythonのライブラリをインストールしたいのですが、エラーが出てしまい進みません|teratail

を発見、Python3.8を使っているから良くないみたいなのでpyenvを使ってPython3.7に切り替えると無事成功

そして最初のコマンドは通ったので python scripts/data/convert_to_melody_dataset.py --config attention_rnn を実行していく

AttributeError: module 'tensorflow' has no attribute 'app'

が再び浮上、今回はmagenta_sessionの方で出ているようだったのでmagenta_sessionのディレクトリを全検索して tf.app から tf.compat.v1.app で対処

magenta_session/convert_to_melody_dataset.py at master · icoxfog417/magenta_session · GitHub

    pipeline_instance = md.get_pipeline(config, md.FLAGS.eval_ratio)

get_pipeline が無いと言われるので調べると

    pipeline_instance = md.melody_rnn_pipeline.get_pipeline(config, md.FLAGS.eval_ratio)

にすることで解決

TypeError: 'float' object is not iterable

magenta_session/convert_to_melody_dataset.py at master · icoxfog417/magenta_session · GitHub

        md.pipeline.tf_record_iterator(tgt.SEQUENCE_FILE, pipeline_instance.input_type),

tf_record_iteratorは使われなくなるそうで今後は

tf.data.TFRecordDataset  |  TensorFlow Core v2.3.0

を使うようにするのが良いそうでした

        tf.data.TFRecordDataset(tgt.SEQUENCE_FILE, pipeline_instance.input_type),

に置き換えて通った

2020-08-10 19:54:24.507256: E tensorflow/stream_executor/cuda/cuda_driver.cc:314] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected

が出てきて初CUDA実行の気配

ここで色々躓いて、そもそも環境のセットアップがきちんと行えておらずwsl側でgpuを認識していないようでした。driverのインストール/アンインストールなどもしたのですが改善せず。

待ってました CUDA on WSL2 - Qiita

を頼りに色々やってみたのですがWindowsがプレビューじゃないからぽいのでWindowsのダウンロードを待ちながらmagentaにはdockerもあるので、そちらを試したところ秒で処理が動いたのっでもうDockerでいいんじゃないかと思いました。wslでgpuを使いたい気持ちがあったものの結構格闘してすり減っていたのでDocker万歳ということで動かしていきます。(Windowsプレビューでも動かなかったのでもうわからないからやっぱDocker最高)

追記 (2020/08/12) wslのバージョンが足りてなかった、MicrosoftStoreからインストールが何故かできなかったのでマニュアルインストールの手段をとる docs.microsoft.com

dockerのセットアップがうまくいかず

Windows Subsystem for Linux(WSL)で Docker を利用する - simplestarの技術ブログ

Repository configuration | nvidia-docker

この2つの記事を参考にセットアップして動くことを確認

docker runするとエラーが出ていて

cgroups: cannot find cgroup mount destination

Docker command でドッカー練習する時のメモ | Hapicode

を参考に解決

TensorFlowからGPUが認識できているかを2行コードで確認する - 動かざることバグの如し

などをみてgpuの認識を確認

sudo mkdir /sys/fs/cgroup/systemd
sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd

すると動いた

以下のサイトでDockerfileのベースを探すとcuda周りのセットアップをしなくていいので最高

docs.nvidia.com

おわり

セットアップまでにかなり引っかかるポイントがあり折れました。自分の環境、セットアップの順番で起こったことなので他の人の環境だとまた違うことが起こる可能性は高いですが、何か参考になればと思います。(最初からDocker使う方が時短にはなる)

また個人的にjetbrains系のエディターをかなりつかうのでwsl環境と同期する方法があるのか調べると Configure an interpreter using WSL - Help | PyCharm あったのでjetbrainsを使ってwslで環境構築が終わった人