GPU,CUDAを使ったディープラーニング実行基盤を整備する


概要

なぜかは分からないが、開発に使用しているCUDAの環境が壊れており、tensorflow,keras,chainerといったのディープラーニング系フレームワークが一切使えない状況になっていた。

仕方なく再設定を行ったもののせっかくなのでメモを残すことにする。
なおnvidia-driver,CUDA,cuDNN,tensorflowの設定はバージョンによる整合性のために毎回ハマるため、組み合わせのセットをストックしておきたい。

環境

環境は以下の組み合わせ。組み合わせが違うと正しく動作しないので注意。

  • nvidia-driver:418 (前の環境では384で動いた)
  • CUDA:8.0
  • cuDNN:6.0
  • tensroflow-gpu:1.3.0

なおこの記事執筆時にはtensor-flow2.0やCUDA10.0も登場しており、少し古いバージョン環境となる。tendorflowでは対応するCUDAやcuDNNも公開されているので、こちらも参考にしていただきたい。
https://www.tensorflow.org/install/source#common_installation_problems

手順

driverの削除

$ dpkg -l | grep nvidia
$ sudo apt-get --purge remove nvidia-*
$ dpkg -l | grep cuda
$ sudo apt-get --purge remove cuda-*

driverインストール

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo apt install nvidia-384     #384を指定したが418が入った
sudo shutdown  -r now

CUDAインストール

CUDAは以下で公開されているのでwgetで取得する。

http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/

$ wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
$ sudo apt update
$ sudo apt-get install cuda-8-0
$ shutdown  -r now

cuDNNインストール

cuDNNは以下で公開されているので,直接サイトよりダウンロードする。(要登録)

https://developer.nvidia.com/rdp/cudnn-archive
ダウンロードするのは以下3つ

  • cuDNN v6.0 Runtime Library for Ubuntu16.04 (Deb)
  • cuDNN v6.0 Developer Library for Ubuntu16.04 (Deb)
  • cuDNN v6.0 Code Samples and User Guide for Ubuntu16.04 (Deb)

各ファイルに対して以下を実行

$ sudo dpkg -i libcudnn6_6.0*+cuda8.0_amd64.deb  
$ sudo dpkg -i libcudnn6-dev_6.0*+cuda8.0_amd64.deb  
$ sudo dpkg -i libcudnn6-doc_6.0*+cuda8.0_amd64.deb  

インストールの確認

$ cd /usr/local/cuda-8.0/bin/
$ bash cuda-install-samples-8.0.sh ~ 
$ cd ~/NVIDIA_CUDA-8.0_Samples/
$ make
$ cd bin/x86_64/linux/release   
$ ./smokeParticles

以下によりmakeに失敗ことがある

/usr/bin/ld: -lnvcuvid が見つかりません
collect2: error: ld returned 1 exit status
make[1]: *** [cudaDecodeGL] エラー 1

3_Imaging/cudaDecodeGL/findgllib.mkの61行目でUBUNTU_PKG_NAME = "nvidia-375"
を"nvidia-384"や "nvidia-418"に変更し、nvidia-driverと整合性を合わせることで解決した。

その他

nvidia-driverやcudnnは数年前と比べてインストーラーが日々整備されてきており、参考サイトによってもインストール手順が違うので注意されたし。