tensorflow1.15系と2.0系を同居させておくには?(ubuntu, GPU環境)
シグナル・コンポーズの大和です。
さて。書くべき記事が他にも色々あるのですがここのところ更新が止まってしまっているのでライトな TIPs 記事をアップしたいと思います。
表題にもありますが、機械学習環境を手元のPC 上のubuntu にインストールしてそれを macOS から使うと言う記事を以前に書いています。
で、色々やっているうちにGPU が使えなくなってみたり、環境がゴチャゴチャして来たりと言うのを経験して「とりあえずこうやっておけば問題はないだろう」と言う自分なりのベストプラクティス(というほどでもないかな、、、)が判ったのでそれを纏めておきたいと思います。
前提
さていつものように前提です。
・ tensorflow2.0でのkeras環境と、tensorflow1.15系環境でのmagenta環境を使い分けたい。
・ GPU は有効にしたい
を達成したいと思います。ちなみにGPUを使わないという選択肢に読み替えていけばmacOSでも同じようにして環境構築が可能です。
GPUについて
GPU については以下の一言で言うと以下の通りです。
「 CUDA 10.1 の環境を用意する」
これに合わせて、nvidia のドライバーやcuDNN などを揃えていけばいいのですが、ハンズオン的にここはやるより調べながらやってもらった方がいいと思います。参考になるリンクは tenforflow のインストールについての本家ページが参考になりますが、実際は読み替えたりして nvidia からドライバなどを落として来てインストールすることになります。
頑張ってください!! 参考までに僕のnvidia-smi コマンドの結果も載せておきます。
(base) yamato@dev2:~$ cd tf2
(base) yamato@dev2:~/tf2$ conda activate tf2
(tf2) yamato@dev2:~/tf2$ nvidia-smi
Sun Feb 23 08:51:16 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.50 Driver Version: 430.50 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 1080 Off | 00000000:01:00.0 Off | N/A |
| 28% 31C P8 6W / 180W | 70MiB / 8117MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1162 G /usr/lib/xorg/Xorg 28MiB |
| 0 1291 G /usr/bin/gnome-shell 39MiB |
+-----------------------------------------------------------------------------+
(tf2) yamato@dev2:~/tf2$
pyenv で conda コマンドが使えるようにする
pyenv をインストールするために僕はanyenv を使っていますがそこは割愛してpyenv が使える状態である、と言うのを前提に話を進めます。基本的以下の流れです環境を作っていきます。
0) miniconda3-latestをインストールする
1) 作業ディレクトリで miniconda3-latest を有効にして conda コマンドが使えるようにする
2)condaコマンドでpython環境を「完全に独立した形で」用意する
3)pip コマンドでインストールしていく
です。よくpip とcondaは混ぜるな危険、的な話も見かけますが 「 conda で基盤を作って、追加ライブラリは pip で管理」が一番安心かつ世の中の情報との相性が良さそうです。少なくとも magenta 入れるにはそれしかないので、、、
では具体的なコマンドは以下の感じです。
$ pyenv install miniconda3-latest
$ cd <working dir>
$ pyenv local miniconda3-latest
$ conda create -n <env name> python=3.7 anaconda
<working dir> や <env name> はお好みで。僕は magenta, tf2 とか名前をつけて切り分けてます。
で。これでpip -v するとそれぞれのconda でインストールされている pythonの pip にパスが通っていることがわかるので、これで「混ぜても安心(基本的には pip だけ使うんですが)」です。
その上で tensorflow2.0系とkeras をインストールする場合
こっちは特にひねりも無いです。
$ conda activate <env name>
$ pip install tensorflow
$ pip install keras
で、インストールができます。以前は miniconda3-latest をそのまま使ってたのですが、 conda で環境作るときにanaconda を入れてしまった方が確実なので、今は富豪的に物事を解決して安定するならその方がいい、と言うことでanacondaも入れた環境に tensorflowと keras をインストールしています。
で。 magenta をtenforflow1.15 系のGPU対応版と共に入れる場合。
magenta は最新リリースでは GPU 版を特に指定しないでもいいはずなので、 pip install magenta といきなりしてしまいたいところですが、以下のようにして入れます。ubuntuの場合ははじめに下記のapt-getをやらないとrtmidiのインストールでエラーがでます。
$ sudo apt-get install build-essential libasound2-dev libjack-dev portaudio19-dev
$ conda activate <env name>
$ pip install tensorflow-gpu==1.15.3
$ pip install magenta
この順番で入れないと pip install magenta で tensorflowのCPU 版が入ってしまうと思ってたのですが、あらためていま(2020/05/27)やったらmagentaでもtensorflowがはいります。でも確認した限りGPUも認識していそうなので問題ないはずです。
実際に有効になっているかはそれぞれの環境でコマンドを打つといいのですが、「tensorflow gpu 確認」みたいにググるとコマンドの内容はすぐに見つかります。 jupyter notebook はanaconda を入れたときに入っているので、それをそのまま使えば大丈夫です。
これでsystem のpython を汚染することなくそれぞれの環境の切り分けができました。この方法なら基本的に環境の作り替えも容易ですし、今のところ僕はこれが一番シンプルな環境構築の解かなあ。とおもってます。
おまけ。ubuntu のシステムアップデートには注意
始めの頃に書きましたがある日突然GPU が magenta 環境でサポートされなくなりました。そこから紆余曲折したんですけど、理由は簡単です。
「不用意にubuntu のシステムアップデートをしたら nvidia 関連が CUDA 10.2 系の内容に置き換わってしまうから」でした。
なので、今は「自動アップデートは切る」「nvidia関連のものはアップデート対象から外す(まだやってないので今後やる)」などで対策してます。ちゃんと見ろって、という話ではあるんですけど普段macOSを使っててあまりこの手のトラブルと無縁だったので迂闊でした。一度安定したシステムは基本動かさない、が吉ですね、、、。
ご依頼/相談/お問い合わせ
シグナル・コンポーズでは音楽制作、Max/Max for Liveデバイス制作など、各種テクニカルなコンサルティングやディレクション、R&D、プロトタイピング、制作などお受けしています。何かあればお気軽に `info[at]signalcompose.com` にお問い合わせください。よろしくお願いします。会社概要等は以下のサイトをご覧ください。
また、昨年はこんなアルバムのリリースもしています。
次のM3(3月)にも参加の予定で、ボーカリストさんに今回はお願いして歌の入れ直しをやったり曲を追加したりします。音楽としてのオズは一応の完成系を見ることになるかな。
下記に音楽系のポートフォリオも以下で纏めてありますので、ぜひご覧ください。音楽制作は広くやっていきますのでお気軽にご連絡ください。