Ubuntu 16.04 に NVIDIA の CUDA のインストール方法です。私は主に Amazon EC2 の GPU インスタンスを使っているので、それ前提で書きます。Amazon EC2 の GPU インスタンス、g3, p2, p3 などで使えます。完全仮想化の hvm の方を使ってます。ストレージは20GB程度必要です。

前準備

sudo apt update
sudo apt upgrade

CUDA 9.0 のインストール

CUDA 7.5 はなかったのですが、CUDA 8.0 と 9.0 は Ubuntu 16.04 向けが https://developer.nvidia.com/cuda-downloads で配布されるようになりました。以下は、Installer Type で deb(network) を選択する場合の流れです。

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.0.176-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
sudo apt update

sudo apt install cuda cuda-drivers
sudo reboot

rm cuda-repo-ubuntu1604_9.0.176-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.0 のインストール

NVIDIA のサイトからダウンロードします。https://developer.nvidia.com/rdp/cudnn-download の Download cuDNN v7.0.4 (Nov 13, 2017), for CUDA 9.0 の cuDNN v7.0.4 Library for Linux をダウンロードします。

tar xzf cudnn-9.0-linux-x64-v7.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.0-linux-x64-v7.tgz

シンボリックリンクがシンボリックリンクとしてコピーされるように cp には -a をつける必要があります。

cuDNN 4, 5, 5.1, 6.0, 7.0 あたりは全てダウンロードするファイル名が違うだけでインストール方法は同じです。

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