MATLAB R2017a でGPUを利用したディープラーニングが実行できるように、CUDAドライバ等のアップデートを行いました。同時にGPU版Tensorflowをインストールしました。
まず、MATLAB R2016b から R2017a にアップデートしたときに、GPUを利用できなくなりました。以下が MATLAB 2017a でのエラー内容です。
>> gpuArray(1)
エラー: gpuArray
CUDA 実行中に予期しないエラーが発生しました。CUDA エラー:
CUDA driver version is insufficient for CUDA runtime version
MATLAB R2017a Parallel Computing Toolboxのリリースノートより、MATLAB 2017a では CUDA toolkit version 8.0 が必要なことが分かります。
PCスペック
OSおよびカーネルの情報。
$ uname -a
Linux temsip01 3.13.0-117-generic #164-Ubuntu SMP Fri Apr 7 11:05:26 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
GPUの情報。NVIDIA Tesla K80 が2台載っています。
$ lspci | grep -i nvidia
04:00.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)
05:00.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)
$ nvidia-smi
Thu May 18 12:31:54 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.51 Driver Version: 375.51 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K80 Off | 0000:04:00.0 Off | 0 |
| N/A 36C P0 61W / 149W | 207MiB / 11439MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla K80 Off | 0000:05:00.0 Off | 0 |
| N/A 24C P8 29W / 149W | 2MiB / 11439MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+—————————————————————————–+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 4907 C /usr/local/MATLAB/R2017a/bin/glnxa64/MATLAB 205MiB |
+—————————————————————————–+
古い CUDA および NVIDIAドライバのアンインストール
`uninstall_cuda_7.5.pl` の場所は CUDA をインストールした場所によって変わります。
# /usr/local/cuda-7.5/bin/uninstall_cuda_7.5.pl
# apt-get --purge remove nvidia*
パッケージ更新
ずっとアップグレードしてなかったので。ただし、`apt-get dist-upgrade` はカーネルに変更を加える場合があるので注意。
# apt-get update
# apt-get dist-upgrade
# apt-get autoremove
NVIDIA Driver のインストール
リポジトリに追加。
# add-apt-repository ppa:graphics-drivers/ppa
# apt-get update
最新のドライバを確認。
# apt-cache search nvidia-3
インストール。
# apt-get install nvidia-381
CUDA 8.0 toolkit のインストール
リポジトリに追加。
# wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/cuda-repo-ubuntu1404_8.0.61-1_amd64.deb
# dpkg -i cuda-repo-ubuntu1404_8.0.61-1_amd64.deb
# apt-get update
インストール。
# apt-get install cuda
CUDAをパスに追加します。以下の内容を.bashrcに書き込み、`source .bashrc`を実行します。
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/lib/nvidia-381"
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:${CUDA_HOME}/bin
R2017aで動作確認
ここまでで、MATLAB R2017a でGPUを利用できるようになります。
>> gpuDevice
ans =
CUDADevice のプロパティ:
Name: ‘Tesla K80’
Index: 1
ComputeCapability: ‘3.7’
SupportsDouble: 1
DriverVersion: 8
ToolkitVersion: 8
MaxThreadsPerBlock: 1024
MaxShmemPerBlock: 49152
MaxThreadBlockSize: [1024 1024 64]
MaxGridSize: [2.1475e+09 65535 65535]
SIMDWidth: 32
TotalMemory: 1.1996e+10
AvailableMemory: 1.1642e+10
MultiprocessorCount: 13
ClockRateKHz: 823500
ComputeMode: ‘Default’
GPUOverlapsTransfers: 1
KernelExecutionTimeout: 0
CanMapHostMemory: 1
DeviceSupported: 1
DeviceSelected: 1
cuDNN 6.0 のインストール
GPU版のTensorflowを使うには、さらにcuDNNというライブラリをインストールする必要があります。cuDNNのダウンロードページから cuDNN v6.0 for CUDA 8.0 をダウンロードし、解凍して`/usr/local/`に置きます。ダウンロードするにはNVIDIAへのユーザ登録が必要です。
# tar xzvf cudnn-8.0-linux-x64-v6.0.tgz
# cp -a cuda/lib64/* /usr/local/cuda-8.0/lib64/
# cp -a cuda/include/* /usr/local/cuda-8.0/include/
# ldconfig
cuDNNについてもパスを追加します。以下の内容をHOMEの.bashrcに書き込み、`source .bashrc`を実行します。
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cudnn-6.0/lib64"
PIP で GPU版Tensorflow をインストール
これでGPU版のTensorflowを動かすことができるようになります。念のため古いtensorflowをアンインストールしてからインストールしました。`pip install tensorflow`だとCPU版のTensorflowが入ってしまうので注意。
pip uninstall tensorflow
pip install --upgrade tensorflow-gpu