こんにちは.changです.
Tensorflow ver. 1.14.0を長く使っていますが,Tensorflow 3D*1を試す為にv2を導入することにしました. 今までに書いたソースは同じ環境で使い続けたいので,v1とv2を共存させます.
Pythonの開発環境を複数持つ方法はいくつか在ります.
(1) ハードディスクを分ける
古臭いやり方ですが,ドライバレベルから環境を分ける一番確実な方法です. 僕の場合,システムファイル用とデータファイル用にHDDを分けているので,システムファイル側だけを変えればソースは共有できます. 500GBのSDDも5000円位で買える時代ですし,僕的にはプランAです.
これをやるつもりでSDDも買ったのですが,「一度は今風の仮想環境を試そう」と思い立ったので見送りにします.
(2) Dockerを使う
王道のやり方という事は知っているのですが,恥ずかしながらやったことがありません. これもどこかで試すつもりですが,今回はより簡単な(3)を採用します.
(3) vertualenvを使う
Pythonを複数ver.持つための仮想環境です. 今回はこれを試します.
Tensorflow ver.1.14.0の対応CUDAは ver. 10.0,今回導入するTensorflow ver. 2.3.0の対応CUDAはver. 10.1です*2. vertualenvの中にCUDAを入れることは出来ません. ですので,複数ver.のCUDAを同一PC内に入れ,かつ干渉させないことが,今回の一つのポイントになります.
(4) GCPを使う
インスタンスを複数立てる事で,簡単に実現出来ます. これも流行りの方法ですが,一応,自作PCブログですので...
0. 今回やること
ベース環境
- Ubuntu 18.04 LTS
基本方針
- vertualenvを使って,Tensorflow ver 1.14.0とTensorflow ver 2.3.0を同一PCで使用する
- Tensorflow ver. 1.14.0ではCUDA 10.0を,Tensorflor ver. 2.3.0ではCUDA 10.1を使用する
- NVidiaドライバはver. 450.102.04で統一とする(ドライバver.を分ける必要がある場合には,vertualenvでは出来ません)
1. CUDAのインストール
既に10.0が入っている状態から初めます.
ここ*3からCUDA10.1を,ここ*4からcuDNN 7.6.5をダウンロードします. この方*5によると,ver.違いのCUDAはそれぞれ別のディレクトリにインストールされて干渉しないそうです. 別々に入っていれば,Tensorflow側で適合ver.を勝手に選ぶとのこと. なので,このままインストールしていきます.
CUDA 10.0へのシンボリックリンクを消す
$ sudo unlink /usr/local/cuda
CUDA10.1をインストールする
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub $ sudo dpkg -i cuda-repo-ubuntu1804-10-1-local-10.1.105-418.39_1.0-1_amd64.deb $ sudo apt update $ sudo apt install cuda-toolkit-10-1 $ reboot
cuDNN 7.6.5をインストールする
$ sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.1_amd64.deb $ sudo dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.1_amd64.deb $ sudo dpkg -i libcudnn7-doc_7.6.5.32-1+cuda10.1_amd64.deb
入ったか確認すると...何故かCUDA 10.2も入っとる???ここでまたシンボリックリンクを消しておく
$ ls /usr/local $ sudo unlink /usr/local/cuda
.bashrcを編集して環境変数を追加
export PATH="/usr/local/cuda-10.0/bin:$PATH" export PATH="/usr/local/cuda-10.1/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH="/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH"
nvcc を打ってみると...10.1に変わっている
CUDA 10.0が無事か試す
$ python3 >>> from tensorflow.python.client import device_lib >>> device_lib.list_local_devices()
2. Tensorflow v2のインストール
$ sudo apt update $ sudo apt install virtualenv $ cd ~/Python $ mkdir tf2_env $ virtualenv -p python3 tf2_env $ source ./tf2_env/bin/activate
pipでインストールする
$ pip3 install tensorflow==2.3.0
CUDA 10.1が呼び出されるか試すと,なんか失敗しているっぽい
$ python3 >>> from tensorflow.python.client import device_lib >>> device_lib.list_local_devices()
先刻何故か入っていると言ったCUDA 10.2の中に在るっぽいので,.bashrcにパスを追加する
export LD_LIBRARY_PATH="/usr/local/cuda-10.2/targets/x86_64-linux/lib:$LD_LIBRARY_PATH"
こんどは行けたっぽい
仮想環境から抜ける
$ deactivate
取り敢えず,これで使ってみようと思います...(^^).
*1:https://ai.googleblog.com/2021/02/3d-scene-understanding-with-tensorflow.html
*2:https://www.tensorflow.org/install/source?hl=ja#gpu_support_2
*3:https://developer.nvidia.com/cuda-10.1-download-archive-base?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=deblocal