環境
Ubuntu 18.04
GeForce GTX 1050 (NVIDIA-SMI 390.116)
conda 4.6.14
R version 3.6.0 (2019-04-26)
tensorflow-gpuでGPUが認識されない問題...
conda create -n ml tensorflow-gpu keras
としたところ、GPUが使用できませんでした。
パッケージを確認してみます。
conda list -n ml | grep -e python -e cud -e tensorflow
# python 3.7.1 hd21baee_1001 conda-forge
# tensorflow 1.13.1 py37_0 conda-forge
# tensorflow-estimator 1.13.0 py_0
# tensorflow-gpu 1.13.1 h0d30ee6_0
cudnnとcudatoolkitがインストールされていません...
また、tensorflowとpythonが最新になってしまっているので、
もう少し古いものが欲しいところです。
解決
tensorflowとpython, cuda, cudnnの対応表を見ると、
(https://www.tensorflow.org/install/source#linux)
Python=3.6, tenforflow=1.12, cuda=9.0, cudnn=7が良さそうですので、
明示的にこれらをインストールします。
conda install -y -n ml python=3.6 tensorflow-gpu=1.12.0 keras &&
conda install -y -n ml cudatoolkit=9.0
なお、tensorflow-gpuをインストールするとcudatoolkit=9.2が付いてきます。
私の環境ではcudatoolkit=9.2は使えなかったため、
あとでcudatoolkit=9.0をインストールしています。
改めてインストールされたパッケージを調べます。
目的のバージョンがインストールされたことが確認できました。
conda list -n ml | grep -e python -e cud -e tensorflow
# cudatoolkit 9.0 h13b8566_0
# cudnn 7.3.1 cuda9.0_0
# python 3.6.7 h381d211_1004 conda-forge
# tensorflow 1.12.0 gpu_py36he68c306_0
# tensorflow-base 1.12.0 gpu_py36h8e0ae2d_0
# tensorflow-estimator 1.13.0 py_0
# tensorflow-gpu 1.12.0 h0d30ee6_0
最後に、GPUが認識されているかを確認します。
conda activate ml
python -c "from tensorflow.python.client import device_lib;
print(device_lib.list_local_devices())"
### 中略 ####
# physical_device_desc: "device: 0, name: GeForce GTX 1050, pci bus id: 0000:01:00.0, compute capability: 6.1"
############
GPUが無事認識されました!
Rでも同じです
Rでtensorflow-gpuを使うときにも全く同じ解法が使えました。
library(reticulate)
library(keras)
install_keras(tensorflow = "gpu")
device_lib <- reticulate::import("tensorflow.python.client.device_lib")
device_lib$list_local_devices()
これではCPUしか表示されませんでした。
さきほどのコードでr-tensorflowという仮想環境が作られているので、
その中のパッケージを確認してみます。
conda list -n r-tensorflow | grep -e python -e cud -e tensorflow
# python 3.7.1 hd21baee_1001 conda-forge
# tensorflow 1.13.1 py37_0 conda-forge
# tensorflow-estimator 1.13.0 py_0
# tensorflow-gpu 1.13.1 h0d30ee6_0
conda install tensorflow-gpu keras
の実行結果と全く同じですね。
では、明示的に古いバージョンを指定してインストールします。
system("/$HOME/anaconda3/bin/conda install -y -n r-tensorflow python=3.6 tensorflow-gpu=1.12.0 keras")
system("/$HOME/anaconda3/bin/conda install -y -n r-tensorflow cudatoolkit=9.0")
device_lib <- reticulate::import("tensorflow.python.client.device_lib")
device_lib$list_local_devices()
### 中略 ####
# physical_device_desc: "device: 0, name: GeForce GTX 1050, pci bus id: 0000:01:00.0, compute capability: 6.1"
############
Rでも同様にGPUが認識されました!
これでGPUを使ってゴリゴリ計算を回すことができますね!