CUDAとは
CUDAとは、NVIDIAが開発・提供している、GPU向けの汎用並列コンピューティングプラットフォームおよび プログラミングモデルを提供する開発環境およびライブラリーのことです。
インストールに必要なこと
CUDAを活用するには対応するNVIDIA GPUが必要です。
CUDAをインストールするにはGPUカードに対応する、CUDAと互換性のあるGPUドライバーおよび、 それらをインストールできるOSが必要です。
CUDAと互換性のあるGPUドライバーが入らないと、GPUリソースを利用できません。 現在最新版のCUDA 9.1を使う場合はnvidia-390をインストールする必要があります。 このnvidia-390バージョンで認識するGPUカードが必要になります。
情報源
最新版のダウンロード
NVIDIA GPU Driver一覧で、GPUカードに必要なドライバーのバージョンを確認
公式の一覧でcompute capabilityを確認できる
レガシーGPU 旧CUDAをサポートしていたGPU。このリストに出ているGPUはCUDA 9.1では使えない。
参考情報
英語版Wikipediaはかなり詳しい情報がまとまっている。参考情報として。
実行環境を理解する
家にあったHPE ML110 G6を使いました。久しぶりに使いました。 メインストレージがHDDだし、CPUもCeleron(R) G1101なので遅いです。 CPUやストレージが速いと、最後に示した結果より差の開きは小さいと思います。
GPUは対応するGPU一覧からGeForce GTX 1050をセレクトしました。 (とりあえずメモリー2GBのモデルでも動きましたが、 本格的に使うにはもう少しメモリーサイズの大きいものを採用したほうがいいかもしれません。)
CUDA 8.x は compute capability 2.0以上 CUDA 9.x は compute capability 3.0以上 が必要だそうです。GPUのcompute capabilityはcuda-gpusで確認できます。
調べた結果GeForce GTX 1050のcompute capabilityは6.1なので、しばらく大丈夫そうです。
GPU Driverを調べると、390.48(nvidia-390)以降をインストールすれば良いことがわかりました。
CUDA 9.1をインストール後、せっかくなのでChainer、CuPyをインストールしてMNISTを動かしてみます。 インストールの容易さから、Chainerを選択しました。
マシンにOSのインストール
今回はCUDA 9.1を動かすので対応するOSの中から、Ubuntu 16.04を選択しました。 Ubuntu Server 16.04.4をインストールして、事前にアップデート、最新のカーネルで起動した状態にします。
CUDAをインストール
基本的に公式の手順に従ってインストールします。
% wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb % sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub % sudo dpkg -i cuda-repo-ubuntu1604_9.1.85-1_amd64.deb % sudo apt-get install cuda-9-1 nvidia-390 ... % nvidia-smi Wed May 2 20:36:36 2018 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 390.30 Driver Version: 390.30 | |-------------------------------+----------------------+----------------------+ | 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 Off | N/A | | 40% 32C P0 N/A / 75W | 0MiB / 2000MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
Python3とChainer,CuPyをインストール
ChainerでGPUを扱うには、1.3未満はPyCuda、1.3以降はCuPyを利用する。 今回インストールしたChainerは4.0なので、CuPyをインストールします。
% sudo apt install python3 python3-pip % pip3 install chainer cupy
MNISTテスト
MNISTのテストプログラムはChainerのソースにサンプルが用意されているのでそれを使います。 -g0をつけるとGPUモードで解析処理を行ってくれます。
% wget https://github.com/chainer/chainer/archive/v4.0.0.tar.gz % tar zvxf v4.0.0.tar.gz % python3 chainer-4.0.0/examples/mnist/train_mnist.py #cpuモードで処理 % python3 chainer-4.0.0/examples/mnist/train_mnist.py -g0 #gpuモードで処理
結果、処理時間はCPUモードでは17分、GPU では1分40秒程度でした。