CUDA 10.0 で TensorFlow GPU (Ubuntu 18.04.1 + NVIDIA GeForce GTX 1050)

スポンサーリンク
TensorFlow

はじめに

2018-12-23 時点、TensorFlow の GPU support ページ https://www.tensorflow.org/install/gpu では、CUDA 9.0 をサポートしていると記載されています。一方で、現時点での CUDA の最新バージョンは 10.0 です。CUDA 10.0 でも動作しないかな、ということで調べて動作確認してみました。

なお、過去の投稿にあるように、既に CUDA 9.0, Ubuntu 18.04, NVIDIA GeForce GTX 1050 で、TensorFlow GPU を動かしています。

[st-card id=”9845″]

公式情報

Install TensorFlow
https://www.tensorflow.org/install/

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

NVIDIA Deep Learning SDK
https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html

CUDA Toolkit

まず、CUDA Toolkit をインストールします。

CUDA Toolkit
https://developer.nvidia.com/cuda-toolkit

CUDA Toolkit 10.0 からは、これまで提供されていなかった Ubuntu 18.04 向けの deb ファイルが提供されるようになっています。(CUDA 9.0 では、Ubuntu 17.04 向けの deb ファイルを Ubuntu 18.04 にインストールしていました)

CUDA Toolkit 10.0 Download

Download Installer for Linux Ubuntu 18.04 x86_64 をダウンロードします。1.6GB あります。ダウンロード後、deb ファイルをインストールし、パスの設定を行い、OS を再起動します。

sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
echo '' >> ~/.profile
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.profile
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.profile
source ~/.profile
sudo reboot

OS 再起動後、nvidia-smi コマンドで、ドライバのバージョン等を確認してみます。

Wed Dec 19 22:49:42 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.48                 Driver Version: 410.48                    |
|-------------------------------+----------------------+----------------------+
| 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 1050    Off  | 00000000:01:00.0  On |                  N/A |
| 45%   45C    P0    N/A /  75W |    402MiB /  1999MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0       907      G   /usr/lib/xorg/Xorg                            40MiB |
|    0       955      G   /usr/bin/gnome-shell                          49MiB |
|    0      1210      G   /usr/lib/xorg/Xorg                           160MiB |
|    0      1352      G   /usr/bin/gnome-shell                         149MiB |
+-----------------------------------------------------------------------------+

NVIDIA cuDNN

次に、NVIDIA cuDNN をインストールします。

NVIDIA cuDNN
https://developer.nvidia.com/cudnn

cuDNN をダウンロードするためには、NVIDIA Developer Program のメンバーシップが必要となります。そのため、まずメールアドレスとパスワードを登録します。その後、ダウンロードページにてダウンロードを行います。

Download cuDNN v7.4.2 (Dec 14, 2018), for CUDA 10.0 の cuDNN Library for Linux をダウンロードしました。cudnn-10.0-linux-x64-v7.4.2.24.tgz というファイル名でダウンロードされました。

ダウンロードしたファイルを解凍し、適切なパスにコピーします。https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installcuda を参考にしました。

tar zxvf cudnn-10.0-linux-x64-v7.4.2.24.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

Python の設定

OS にデフォルトでインストールされている Python を確認してみます。Ubuntu 18.04.1 の場合、Python 2.7 と Python 3.6 が入っていました。

which python
/usr/bin/python

python -V
Python 2.7.15rc1

which python3
/usr/bin/python3

python3 -V
Python 3.6.5

ここでは Python 3.6 を使用します。なお、Python 3.6 時代の仮想環境は、python3 -m venv とのことです。

28.3. venv — 仮想環境の作成 — Python 3.6.5 ドキュメント

pyvenv スクリプトは Python 3.6 で非推奨となり、代わりに python3 -m venv を使い、仮想環境を動かす Python インタープリタを取り違える可能性を防ぎやすくします。

python3-venv をインストールし、適当なフォルダを作成し、その中に dev という仮想環境を作成してみます。

sudo apt-get -y install python3-venv
mkdir ~/python
cd python
python3 -m venv dev

仮想環境を有効化させてみます。コンソールの先頭に仮想環境名 (ここでは (dev)) が付くようになります。

cd dev
source bin/activate
(dev) hirooka@dev:~/python/dev$ 

python コマンドのパスとバージョン、pip コマンドのパスを確認してみます。

which python
/home/hirooka/python/dev/bin/python

python -V
Python 3.6.5

which pip
/home/hirooka/python/dev/bin/pip

システムの Python ではなく、仮想環境の Python が使用されていることがわかります。pip についても同様です。

Tensorflow GPU

pip で TensorFlow GPU をインストールします。しかし、TensorFlow の最新のリリースバージョンでは CUDA 10.0 をサポートしていません。

一方、TensorFlow の GitHub を見ると、ナイトリービルドでは 2018 年 12 月に CUDA 10.0 に対応したとのことです。正式なリリースバージョンでは、2019 年 1 月に対応する予定とのこと。

CUDA 10 #22706
https://github.com/tensorflow/tensorflow/issues/22706
pip install -U tf-nightly-gpu

[DONE] CUDA 10 in the nightly builds mid-DEC 2018 if testing goes well
CUDA 10 in official in mid-JAN-2019 as TF 1.13.

というわけで、ナイトリービルドの TensorFlow GPU をインストールします。

pip install tf-nightly-gpu

軽く動作確認をしてみます。ワーニングとエラーは出ていないようです。

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
2018-12-19 23:34:06.606512: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2018-12-19 23:34:06.716794: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2018-12-19 23:34:06.717188: I tensorflow/compiler/xla/service/service.cc:161] XLA service 0x3453d50 executing computations on platform CUDA. Devices:
2018-12-19 23:34:06.717204: I tensorflow/compiler/xla/service/service.cc:168]   StreamExecutor device (0): GeForce GTX 1050, Compute Capability 6.1
2018-12-19 23:34:06.735917: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 3691345000 Hz
2018-12-19 23:34:06.736237: I tensorflow/compiler/xla/service/service.cc:161] XLA service 0x38d6920 executing computations on platform Host. Devices:
2018-12-19 23:34:06.736268: I tensorflow/compiler/xla/service/service.cc:168]   StreamExecutor device (0): <undefined>, <undefined>
2018-12-19 23:34:06.736481: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1434] Found device 0 with properties: 
name: GeForce GTX 1050 major: 6 minor: 1 memoryClockRate(GHz): 1.455
pciBusID: 0000:01:00.0
totalMemory: 1.95GiB freeMemory: 1.48GiB
2018-12-19 23:34:06.736506: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1513] Adding visible gpu devices: 0
2018-12-19 23:34:06.737869: I tensorflow/core/common_runtime/gpu/gpu_device.cc:985] Device interconnect StreamExecutor with strength 1 edge matrix:
2018-12-19 23:34:06.737889: I tensorflow/core/common_runtime/gpu/gpu_device.cc:991]      0 
2018-12-19 23:34:06.737897: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1004] 0:   N 
2018-12-19 23:34:06.737999: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1116] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1288 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1050, pci bus id: 0000:01:00.0, compute capability: 6.1)
>>> print(sess.run(hello))
b'Hello, TensorFlow!'

TensorFlow
スポンサーリンク
コピペワールド