はじめに
ほぼ自分用メモです。OSの入っていないPCにGPUでのディープラーニング開発環境を構築する必要があったのでせっかくなのでと思い記事にしました。
環境
- Ubuntu 18.04 LTS
- Nvidia Geforce GTX1060
- Python 3.6.7
- CUDA9.0
- cuDNN 7.2.1
CUDA、cuDNNはバージョン間の互換を確認する必要があるのですが、この記事が参考になりました。
NvidiaドライバとCUDAとcuDNNとTensorflow-gpuとPythonのバージョンの対応
前準備
Ubuntuの公式リポジトリにはnvidia-driverのバージョン390までしか入っていないようなのでNvidiaのリポジトリを追加します。
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt install -y software-properties-common
$ sudo apt install -y build-essential
$ sudo apt -y update
$ sudo apt -y upgrade
この後、デフォルトでロードされているnouveauドライバーを無効化します。
無効化するとGUIがまともに動作しないのでCUDAのファイルのダウンロード等はこのタイミングで済ませておく方がいいです。
また、CUIだとコピペできないので長いの打ちたくないって方はシェルスクリプトを作成しておいて実行すると楽です。
ここからはCUIで作業していきます。
$ lsmod | grep nouveau
でnouveau
ドライバーが動作していることを確認します。
動いている場合、/etc/modprobe.d/blcaklist-nouveau.conf
に以下を追記します。(無ければ新規作成)
blacklist nouveau
options nouveau modeset=0
追記したあと
$ update-initrmfs -u
$ reboot
で再起動して設定を反映させます。
ここはこのページを参考にしました。
https://www.server-world.info/query?os=Ubuntu_18.04&p=nvidia
CUDAのインストール
ここからが苦戦するポイントだと思います。
私は何度もOSのインストールからやり直したのですが...
私の環境ではCUDAのインストールの際、networkからダウンロードするとTensorFlowとのバージョン互換が上手くいかないようでした。
なので、localからインストールしていきます。
CUDAのダウンロードページで上記の画像のように選択します。CUDA9.0ではUbuntu18.04向けのインストーラーは用意されていないので17.04向けのものを使用します。Installer Typeでdeb(local)
を選択します。
$ sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
$ sudo dpkg -i cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.deb
$ sudo apt update
$ sudo apt install cuda
※公式だとapt-key
とdpkg
の順番が逆ですが私の環境ではどうにも上手くいきませんでした。
でnvidia-driverも同時にインストールされますがこのままでは
$ nvidia-smi
が動作しないので一度再起動します。
再起動後、nvidia-smi
が動作することを確認します。
$ nvidia-smi
Mon May 27 13:46:38 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.116 Driver Version: 390.116 |
|-------------------------------+----------------------+----------------------+
| 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 106... Off | 00000000:01:00.0 On | N/A |
| 33% 34C P0 30W / 120W | 355MiB / 6075MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1053 G /usr/lib/xorg/Xorg 18MiB |
| 0 1223 G /usr/bin/gnome-shell 48MiB |
| 0 3801 G /usr/lib/xorg/Xorg 156MiB |
| 0 3934 G /usr/bin/gnome-shell 105MiB |
+-----------------------------------------------------------------------------+
cuDNNのインストール
こちらはダウンロードするのにNVIDIA Developerに登録する必要があります。今回はCUDA9.0をインストールしたのでfor 9.0と書かれたものをダウンロードします。最新のバージョンを入れるとtensorflow-gpuが対応していない可能性があるのでインストール前に確認しましょう。
$ sudo dpkg -i libcudnn7_7.2.1.38-1+cuda9.0_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.2.1.38-1+cuda9.0_amd64.deb
$ sudo dpkg -i libcudnn7-doc_7.2.1.38-1+cuda9.0_amd64.deb
上のコマンドは順番を間違えると上手くいかないようなので注意しましょう。
tensorflow-gpuのインストール
実際にtensorflow-gpu
をインストールして動作確認をします。
ここでインストールするtensorflow-gpu
のバージョンはCUDA,cuDNNとのバージョン互換を確認してください。pipでインストールする場合、==version
で
バージョンを指定できます。
私はvirtualenvを使ってPython環境を構築するので、以下のようにしました。
$ sudo apt install virtualenv python3-dev python3-pip
$ virtualenv -p python3 myenv
$ source ~/myenv/bin/activate
$ pip install tensorflow-gpu==1.9
※ myenv
の部分は好きな名前で構いません。
※ 追記 tensorflow-gpu
のバージョンが1.12.0でも動作することを確認しました。
virtualenv等を使わない場合は以下のようにします。UbuntuではOSのインストール時に、Python2.7とPython3がインストールされるようなのでpip3と指定しないとPython2.7のpipが動作します。Pythonインタプリタの起動も同様にpython3とする必要があります。
$ pip3 install tensorflow-gpu==1.9.0
動作確認
インストールしたら、Pythonインタプリタで
>>> import tensorflow as tf
>>> tf.Session()
2019-05-27 13:48:09.175814: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2019-05-27 13:48:09.263421: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:897] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-05-27 13:48:09.263727: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1392] Found device 0 with properties:
name: GeForce GTX 1060 6GB major: 6 minor: 1 memoryClockRate(GHz): 1.7085
pciBusID: 0000:01:00.0
totalMemory: 5.93GiB freeMemory: 5.50GiB
2019-05-27 13:48:09.263740: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1471] Adding visible gpu devices: 0
2019-05-27 13:48:09.431030: I tensorflow/core/common_runtime/gpu/gpu_device.cc:952] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-05-27 13:48:09.431057: I tensorflow/core/common_runtime/gpu/gpu_device.cc:958] 0
2019-05-27 13:48:09.431062: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0: N
2019-05-27 13:48:09.431164: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1084] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 5271 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1060 6GB, pci bus id: 0000:01:00.0, compute capability: 6.1)
<tensorflow.python.client.session.Session object at 0x7fee08798dd8>
と入力してみましょう。
ここで動作すればディープラーニングのための環境構築は終了です。
参考記事等
ubuntu18.04にCuda9.0を入れてtensorflow-gpuを使う
NvidiaドライバとCUDAとcuDNNとTensorflow-gpuとPythonのバージョンの対応
直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ
Antonio Gulli (著), Sujit Pal (著), 大串 正矢 (翻訳), 久保 隆宏 (翻訳), 中山 光樹 (翻訳) 付録A GPUを考慮した開発環境の構築