LoginSignup
12
11

More than 3 years have passed since last update.

[Python] [R] tensorflow-gpuでGPUを認識させるまで

Last updated at Posted at 2019-05-18

環境

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を使ってゴリゴリ計算を回すことができますね!

12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11