Ubuntu 16.04 に NVIDIA の CUDA のインストール方法です。私は主に Amazon EC2 の GPU インスタンスを使っているので、それ前提で書きます。Amazon EC2 の GPU インスタンス、g3, p2, p3 などで使えます。完全仮想化の hvm の方を使ってます。ストレージは20GB程度必要です。
なお記事の都合上、最新の CUDA および cuDNN をインストールしていますが、TensorFlow などの各種ライブラリを動作させるためには、タイミングによっては少し古いのをインストールしないと対応していない場合が多いです。
Ubuntu 18.04 へのインストール方法は https://qiita.com/yukoba/items/4733e8602fa4acabcc35 をご覧ください。
前準備
sudo apt update
sudo apt upgrade
CUDA 9 のインストール
CUDA 7.5 はなかったのですが、CUDA 8.0 ~ 9.2 は Ubuntu 16.04 向けが https://developer.nvidia.com/cuda-downloads で配布されるようになりました。以下は、Installer Type で deb(network) を選択する場合の流れです。ここで apt install で cuda だと最新版がインストールされ、cuda-9-0 とか cuda-9-2 のようにバージョン指定も出来ます。CUDA 9.2 の deb ですが 9.0 や 9.1 もインストールできます。
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.2.88-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604_9.2.88-1_amd64.deb
sudo apt update
sudo apt install cuda cuda-drivers
sudo reboot
rm cuda-repo-ubuntu1604_9.2.88-1_amd64.deb
その後、~/.bashrc の末尾にこれを追加する必要があります。
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
そして一度ログオフして再度ログインしてください。
nvidia-smi で動作確認です。cuBLAS など cuDNN 以外は一通りついてきます。
Amazon EC2 での Linux カーネル
2016年の時点では Amazon EC2 の Ubuntu16.04 の AMI には linux-virtual というカーネルが入っていて、これだと GPU が動作しなく、カーネルを linux-generic に切り替える必要があったのですが、2017年3月29日より AWS 専用カーネルが導入され https://insights.ubuntu.com/2017/04/05/ubuntu-on-aws-gets-serious-performance-boost-with-aws-tuned-kernel/ これが AWS の GPU に対応しています。なので、現在は、カーネルは AWS 専用 Linux カーネルをそのまま使うのが最善になりました。
古いイメージを使っている人は、この方法で linux-generic から linux-aws に切り替えられます。
sudo apt install linux-aws
sudo reboot
sudo apt purge linux-generic
sudo apt autoremove
デバイスドライバ
2017年10月9日現在、元々 Ubuntu 16.04 では nvidia-375 でデバイスドライバをインストールするのですが、NVIDIA 側が配布している cuda-drivers でインストールするとより新しいデバイスドライバ nvidia-384 がインストールされるのでこちらの方が良いと思います。上記の apt install では cuda-drivers を使っています。なお、nvidia-375 には https://bugs.launchpad.net/ubuntu/+source/nvidia-graphics-drivers-375/+bug/1662860 で報告されているシンボリックリンクに関するバグがあります。
CUDA 8.0 の場合
CUDA 8.0 の場合ダウンロードアドレスが http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb になります。
cuDNN 7.1 のインストール
cuDNN は NVIDIA のサイト https://developer.nvidia.com/rdp/cudnn-download からダウンロードできるのですが、ここでは NVIDIA の再配布用のアドレスからダウンロードします。もし、上記の NVIDIA のサイトからダウンロードする場合は、Download cuDNN v7.1.4 (May 16, 2018), for CUDA 9.2 の cuDNN v7.1.4 Library for Linux です。
wget http://developer.download.nvidia.com/compute/redist/cudnn/v7.1.4/cudnn-9.2-linux-x64-v7.1.tgz
tar xzf cudnn-9.2-linux-x64-v7.1.tgz
sudo cp -a cuda/lib64/* /usr/local/lib/
sudo cp -a cuda/include/* /usr/local/include/
sudo ldconfig
rm -R -f cuda cudnn-9.2-linux-x64-v7.1.tgz
シンボリックリンクがシンボリックリンクとしてコピーされるように cp には -a をつける必要があります。
cuDNN 4 ~ 7.1 あたりは全てダウンロードするファイル名が違うだけでインストール方法は同じです。例えば CUDA 9.0 の cuDNN 7.0.5 は http://developer.download.nvidia.com/compute/redist/cudnn/v7.0.5/cudnn-9.0-linux-x64-v7.tgz です。
CUDA 7.5 のインストール
CUDA 8.0 がリリースされましたが 7.5 の方もここに残しておきます。7.5 は Ubuntu 16.04 のパッケージからインストールする必要があります。
sudo apt install nvidia-cuda-toolkit nvidia-384
sudo reboot
ただし、この方法は Ubuntu 16.04 である限り、ずっと CUDA 7.5 です。
LightDM を止める
上記のやり方で nvidia-cuda-toolkit をインストールすると、ディスプレイマネージャーの LightDM が動いてしまいます。普通のパソコンでは動くべきですが、クラウドで動かしている場合は無意味です。しかも、Ubuntu 16.04 では、gst-plugin-scanner が1コア分 CPU 使用率 100% になるというバグが付いてきます。
止めるには、/etc/default/grub を編集して、12行目をこれにします。
GRUB_CMDLINE_LINUX="systemd.unit=multi-user.target"
保存して、
sudo update-grub
sudo reboot
後始末
sudo apt autoremove
sudo apt clean