tensorflow1.15系と2.0系を同居させておくには?(ubuntu, GPU環境)

シグナル・コンポーズの大和です。

以前、機械学習環境を手元のPC 上のubuntu にインストールしてそれを macOS から使う記事を書きました。

機械学習をやるのにGPUベースでやりつつもmacOSの画面で作業はしたい
https://si-partners.net/blog/machinelearning-gpu-macos.html

色々やっているうちにGPU が使えなくなってみたり、環境がゴチャゴチャして来たりと言うのを経験して「とりあえずこうやっておけば問題はないだろう」と言う自分なりのベストプラクティス(というほどでもないかな…)が判ったのでそれを纏めておきたいと思います。

前提

さていつものように前提です。

  • tensorflow2.0でのkeras環境と、tensorflow1.15系環境でのmagenta環境を使い分けたい。
  • GPU は有効にしたい

を達成したいと思います。
ちなみにGPUを使わないという選択肢に読み替えていけばmacOSでも同じようにして環境構築が可能です。

GPUについて

GPU  については以下の一言で言うと以下の通りです。

「 CUDA 10.1 の環境を用意する」

これに合わせて、nvidia のドライバーやcuDNN などを揃えていけばいいのですが、ここは調べながらやってもらった方がいいと思います。参考になるリンクは  tenforflow のインストールについての本家ページが参考になりますが、実際は読み替えたりして nvidia からドライバなどを落として来てインストールすることになります。

GPU support | TensorFlow:
https://www.tensorflow.org/install/gpu

頑張ってください!! 参考までに僕の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 が使える状態である、と言うのを前提に話を進めます。基本的には以下の流れで環境を作っていきます。

  1. miniconda3-latestをインストールする
  2. 作業ディレクトリで miniconda3-latest を有効にして conda コマンドが使えるようにする
  3. condaコマンドでpython環境を「完全に独立した形で」用意する
  4. 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

GPUも認識していそうなので問題ないはずです。

実際に有効になっているかはそれぞれの環境でコマンドを打つといいのですが、「tensorflow gpu 確認」みたいにググるとコマンドの内容はすぐに見つかります。 jupyter notebook はanaconda を入れたときに入っているので、それをそのまま使えば大丈夫です。

これでsystem のpython を汚染することなくそれぞれの環境の切り分けができました。この方法なら基本的に環境の作り替えも容易ですし、今のところ僕はこれが一番シンプルな環境構築の解かなあ。とおもってます。

ubuntu のシステムアップデートには注意

始めの頃に書きましたがある日突然GPU が magenta 環境でサポートされなくなりました。
そこから紆余曲折したんですけど、理由は簡単です。

「不用意にubuntu のシステムアップデートをしたら nvidia 関連が CUDA 10.2 系の内容に置き換わってしまうから」でした。

なので、今は「自動アップデートは切る」「nvidia関連のものはアップデート対象から外す(まだやってないので今後やる)」などで対策してます。
ちゃんと見ろ、という話ではあるんですけど普段macOSを使っててあまりこの手のトラブルと無縁だったので迂闊でした。一度安定したシステムは基本動かさない、が吉ですね、、、。

ご依頼/相談/お問い合わせ

シグナル・コンポーズでは音楽制作、Max/Max for Liveデバイス制作など、各種テクニカルなコンサルティングやディレクション、R&D、プロトタイピング、制作などお受けしています。何かあればお気軽にお問い合わせください。お待ちしております。

  

執筆:大和 比呂志

関連記事

前の記事へ

マジで最初から Swift で iOS アプリ作る(TextView)

次の記事へ

ORCΛでMIDI音源を鳴らす(IAC Busの場合)