コピペワールド

hirooka.pro

TensorFlow

Ubuntu 18.04 と NVIDIA GeForce GTX 1050 で TensorFlow with GPU support

投稿日:

ビデオのエンコード/トランスコードのために NVIDIA GeForce GTX 1050 を所有しているのですが、TensorFlow を GPU サポートで実行してみました。

Install TensorFlow on Ubuntu の TensorFlow with GPU support を参考に進めます。Docker を使用することが推奨されていますが、ローカルで試してみました。OS は Ubuntu 18.04.1 です。

Install TensorFlow on Ubuntu

全体的な参考資料

NVIDIA Deep Learning SDK

CUDA Toolkit

CUDA Toolkit は 9.0 を使用しました。9.0 は既に最新ではないため、アーカイブから入手します。

CUDA Toolkit 9.0 Downloads

Ubuntu 18.04 向けのものが無かったため、下記のものをダウンロードしました。

[highlight_bash]Linux - x86_64 - Ubuntu - 17.04 - deb (local)
Download Installers for Linux Ubuntu 17.04 x86_64
Base Installer[/highlight_bash]

インストールします。

[highlight_bash]sudo dpkg -i cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.deb
sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install nvidia-libopencl1-340
sudo apt-get -y install cuda-drivers
sudo apt-get -y install ocl-icd-libopencl1
sudo apt-get -y install cuda-drivers
sudo apt-get install cuda-runtime-9-0 cuda-demo-suite-9-0
sudo apt-get install cuda[/highlight_bash]

cuda インストール後、LD_LIBRARY_PATH を設定しておきます。

[highlight_bash]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[/highlight_bash]

LD_LIBRARY_PATH を設定しておかないと、後に恐らく下記のようなエラーとなります。

[highlight_bash]ImportError: libcudnn.so.7: cannot open shared object file: No such file or directory[/highlight_bash]

cuDNN SDK

NVIDIA cuDNN

NVIDIA cuDNN で、まず NVIDIA Developer Program の登録が必要になります。登録後、Archived cuDNN Releases から v7.1.4 をダウンロードしました。

具体的には、下記のアーカイブです。

[highlight_bash]cuDNN v7.1.4 (May 16, 2018), for CUDA 9.0
cuDNN v7.1.4 Library for Linux[/highlight_bash]

アーカイブをダウンロードし、所定のパスに配置します。

[highlight_bash]tar zxvf cudnn-9.0-linux-x64-v7.1.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*[/highlight_bash]

Python

システムにインストールされている Python を確認してみます。デフォルトで、Python 2.7 と Python 3.6 が入っていました。

[highlight_bash]
which python
/usr/bin/python

python -V
Python 2.7.15rc1

which python3
/usr/bin/python3

python3 -V
Python 3.6.5
[/highlight_bash]

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

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

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

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

仮想環境下には、下記のようなフォルダが作成されます。

[highlight_bash]
ls -la dev
total 28
drwxr-xr-x 6 hirooka hirooka 4096 Aug 24 19:58 .
drwxr-xr-x 3 hirooka hirooka 4096 Aug 24 19:57 ..
drwxr-xr-x 2 hirooka hirooka 4096 Aug 24 19:58 bin
drwxr-xr-x 2 hirooka hirooka 4096 Aug 24 19:57 include
drwxr-xr-x 3 hirooka hirooka 4096 Aug 24 19:57 lib
lrwxrwxrwx 1 hirooka hirooka 3 Aug 24 19:57 lib64 -> lib
-rw-r--r-- 1 hirooka hirooka 69 Aug 24 19:58 pyvenv.cfg
drwxr-xr-x 3 hirooka hirooka 4096 Aug 24 19:58 share
[/highlight_bash]

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

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

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

[highlight_bash]
which python
/home/hirooka/python/dev/bin/python

python -V
Python 3.6.5

which pip
/home/hirooka/python/dev/bin/pip
[/highlight_bash]

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

Jupyter Notebook

pip でインストールできます。

[highlight_bash]
pip install jupyter
[/highlight_bash]

パスとバージョンは下記の通りです。jupyter notebook を実行することで、ウェブブラウザで Jupyter Notebook が起動します。デフォルトでは TCP:8888 を使用しているようです。

[highlight_bash]
which jupyter
/home/hirooka/python/dev/bin/jupyter

jupyter --version
4.4.0

jupyter notebook
[/highlight_bash]

TensorFlow with GPU support

pip でインストールできます。

[highlight_bash]
pip install -U tensorflow-gpu
[/highlight_bash]

なお、U オプションを付けない場合、下記のようなエラーとなるかもしれません。

[highlight_bash]
pip install tensorflow-gpu
error: invalid command 'bdist_wheel'
[/highlight_bash]

テストコードを実行し、問題ないことを確認します。

[highlight_python]import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))[/highlight_python]

個別事情

自分の環境では、既に ubuntu-drivers autoinstall で NVIDIA のドライバをインストールしていました。後に cuda-drivers をインストールする際にエラーとなるるため、アンイストールしておきました。

ただし、普通に apt-get remove すると

[highlight_bash]dpkg: error processing archive /var/cache/apt/archives/nvidia-340_340.106-0ubuntu3_amd64.deb (--unpack):
trying to overwrite '/lib/udev/rules.d/71-nvidia.rules', which is also in package nvidia-kernel-common-390 390.48-0ubuntu3
dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)[/highlight_bash]

のようなエラーとなるため、強制的に行いました。

[highlight_bash]sudo apt-get -o Dpkg::Options::="--force-overwrite" --fix-broken install
sudo apt autoremove[/highlight_bash]

その過程で出て悩まされたエラーなど。

[highlight_bash]
launchpadlib 1.10.6 requires testresources, which is not installed.

The following packages have unmet dependencies:
cuda : Depends: cuda-9-0 (>= 9.0.176) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

>>> sess = tf.Session()
2018-06-18 23:07:31.865841: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2018-06-18 23:07:31.870356: E tensorflow/stream_executor/cuda/cuda_driver.cc:406] failed call to cuInit: CUDA_ERROR_NO_DEVICE
2018-06-18 23:07:31.870502: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:158] retrieving CUDA diagnostic information for host: ubuntu
2018-06-18 23:07:31.870548: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:165] hostname: ubuntu
2018-06-18 23:07:31.870709: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:189] libcuda reported version is: 390.48.0
2018-06-18 23:07:31.872627: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:193] kernel reported version is: 390.67.0
2018-06-18 23:07:31.872707: E tensorflow/stream_executor/cuda/cuda_diagnostics.cc:303] kernel version 390.67.0 does not match DSO version 390.48.0 -- cannot find working devices in this configuration

nvidia-smi
Failed to initialize NVML: Driver/library version mismatch

>>> sess = tf.Session()
2018-06-18 23:20:23.229910: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2018-06-18 23:20:23.814176: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:898] 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-06-18 23:20:23.814500: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1356] 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.90GiB
2018-06-18 23:20:23.814518: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1435] Adding visible gpu devices: 0
2018-06-18 23:20:24.834085: I tensorflow/core/common_runtime/gpu/gpu_device.cc:923] Device interconnect StreamExecutor with strength 1 edge matrix:
2018-06-18 23:20:24.834125: I tensorflow/core/common_runtime/gpu/gpu_device.cc:929] 0
2018-06-18 23:20:24.834131: I tensorflow/core/common_runtime/gpu/gpu_device.cc:942] 0: N
2018-06-18 23:20:24.835548: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1053] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1667 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1050, pci bus id: 0000:01:00.0, compute capability: 6.1)
[/highlight_bash]

-TensorFlow

Copyright© hirooka.pro , 2018 All Rights Reserved.