CentOS7にDocker CE / nvidia-dockerのインストール

GPUをコンテナから使わない場合

CentOS7上にDocker環境を整えます。GPUを載せていないコンピュータではDocker CEをインストールするだけでOKです。CEはCommunity Editionのことで、有償サポート付きのEE (Enterprise Edition)と区別されています。

Docker CEのインストール

sudo yum upgrade -y
sudo yum update -y
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
yum list docker-ce.x86_64 --showduplicates | sort -r
sudo yum install docker-ce
sudo systemctl start docker
sudo systemctl enable docker
# dockerをsudoなしで実行できるようにする
sudo groupadd docker           # すでにdocker groupが存在すれば不要
sudo gpasswd -a $USER docker
sudo systemctl restart docker
exit

GPUをコンテナから使う場合

CentOS7上にGeForceのCUDAドライバをインストールし、CUDAを利用できるDocker環境を整えます。使用したGPUはGeForce GTX750Tiです。ドライバをCentoOS7にインストールし、CUDA ToolkitはDockerコンテナ上でインストールされるので、コンテナごとに異なるバージョンのCUDA Toolkitを導入できます。BIOSのセキュアブートはOFFにしないとうまく行きませんでした。最新のドライバでないとうまくいかないことがあります。必ずNVidiaのページで最新のドライバを確認してください。

GPUドライバのインストール

sudo yum upgrade -y
sudo su -
lsmod | grep nouveau
------------------------------
nouveau              1622010  3 
video                  24520  1 nouveau
mxm_wmi                13021  1 nouveau
wmi                    19070  2 mxm_wmi,nouveau
i2c_algo_bit           13413  1 nouveau
drm_kms_helper        159169  1 nouveau
ttm                    99345  1 nouveau
drm                   370825  5 ttm,drm_kms_helper,nouveau
i2c_core               40756  5 drm,i2c_i801,drm_kms_helper,i2c_algo_bit,nouveau
------------------------------

mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
dracut --omit-drivers nouveau /boot/initramfs-$(uname -r).img $(uname -r)

echo 'blacklist nouveau' >> /etc/modprobe.d/modprobe.conf
echo 'blacklist nouveau' >> /etc/modprobe.d/nouveau_blacklist.conf

reboot now

lsmod | grep nouveau
------------------------------
(何も表示されない)
------------------------------

yum -y install pciutils gcc tmux git
yum -y install kernel-devel-$(uname -r) kernel-headers-$(uname -r)

lspci | grep -i nvidia
------------------------------
01:00.0 VGA compatible controller: NVIDIA Corporation GM107 [GeForce GTX 750 Ti] (rev a2)
01:00.1 Audio device: NVIDIA Corporation Device 0fbc (rev a1)
------------------------------

# http://www.nvidia.co.jp/Download/index.aspx?lang=jpからGPUに合った最新のドライバを探す
mkdir tmp && cd tmp
init 3
wget http://us.download.nvidia.com/XFree86/Linux-x86_64/384.98/NVIDIA-Linux-x86_64-384.98.run
sh NVIDIA-Linux-x86_64-384.98.run
# 上のコマンドで「unable to locate the kernel source」というようなエラーが出るときには
# sh NVIDIA-Linux-x86_64-390.67.run --kernel-source-path /usr/src/kernels/3.10.0-862.6.3.el7.x86_64/
# というようにkernelの場所を指定する

Docker CEのインストール

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
yum list docker-ce.x86_64 --showduplicates | sort -r
sudo yum install docker-ce
sudo systemctl start docker
sudo systemctl enable docker
# dockerをsudoなしで実行できるようにする
sudo groupadd docker           # すでにdocker groupが存在すれば不要
sudo gpasswd -a $USER docker
sudo systemctl restart docker
exit

nvidia-dockerのインストールと確認

wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker-1.0.1-1.x86_64.rpm
sudo rpm -i /tmp/nvidia-docker-1.0.1-1.x86_64.rpm
sudo systemctl start nvidia-docker
sudo systemctl enable nvidia-docker
nvidia-docker run --rm nvidia/cuda nvidia-smi #テスト
[root@localhost ~]# nvidia-docker run --rm nvidia/cuda nvidia-smi
Using default tag: latest
latest: Pulling from nvidia/cuda
ae79f2514705: Pull complete 
c59d01a7e4ca: Pull complete 
41ba73a9054d: Pull complete 
f1bbfd495cc1: Pull complete 
0c346f7223e2: Pull complete 
9bb3751211fc: Pull complete 
a0499c04e592: Pull complete 
9c9a6ef89c66: Pull complete 
6d0d5b4a91b4: Pull complete 
2225646729dc: Pull complete 
Digest: sha256:8868904d5a8c36440af1f168ace58a044cb7df73404d9f303bdf8ef158f1a727
Status: Downloaded newer image for nvidia/cuda:latest
Sun Nov  5 12:14:13 2017       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.98                 Driver Version: 384.98                    |
|-------------------------------+----------------------+----------------------+
| 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 750 Ti  Off  | 00000000:01:00.0 Off |                  N/A |
| 40%   32C    P8     1W /  38W |     11MiB /  2000MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+