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 が使える状態である、と言うのを前提に話を進めます。基本的には以下の流れで環境を作っていきます。
- miniconda3-latestをインストールする
- 作業ディレクトリで miniconda3-latest を有効にして conda コマンドが使えるようにする
- condaコマンドでpython環境を「完全に独立した形で」用意する
- 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、プロトタイピング、制作などお受けしています。何かあればお気軽にお問い合わせください。お待ちしております。
執筆:大和 比呂志
関連記事
-
Blog
Expressで作ったNode.jsアプリでhttpsを有効にするには?
-
Blog
これからのリベラルな音楽のためのアカデミー
-
Blog
Music Transformerを動かしてみる
-
Blog
自前サーバで HTTP Live Streaming 配信をする
-
Blog
MacBook Proをクラムシェルにした時iPhoneをウェブカムの代わりにして使うには?と、あと少しのTips
-
Blog
unityを始めてみようか。
-
Blog
ORCΛでMIDI音源を鳴らす(IAC Busの場合)
-
Blog
マジで最初から Swift で iOS アプリ作る(TextView)
-
Blog
マジで最初から Swift で iOS アプリ作る (Hello SwiftUI!)