Kinaconの技術ブログ

Ubuntuはじめました。

DockerでGPUを使用する

DockerコンテナでGPUを使用するための備忘録

1. PCがGPUを認識しているか確認する

lspci -vv|grep -i nvidia

#####################################################################################################
01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1) (prog-if 00 [VGA controller])
    Kernel modules: nvidiafb, nouveau
01:00.1 Audio device: NVIDIA Corporation GP107GL High Definition Audio Controller (rev a1)


2. 既存のグラフィックドライバ(nouveau)の無効化

nouveauが有効か確認 (何も出なければ無効)

lsmod | grep -i nouveau

##################################################
              1892352  3
mxm_wmi                16384  1 nouveau
ttm                   102400  1 nouveau
drm_kms_helper        180224  1 nouveau
drm                   491520  6 drm_kms_helper,ttm,nouveau
i2c_algo_bit           16384  1 nouveau
wmi                    32768  3 wmi_bmof,mxm_wmi,nouveau
video                  49152  1 nouveau


nouveauを無効化

# /etc/modprobe.d/blacklist-nouveau.confを作成
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

# 以下を入力
#################################################
blacklist nouveau
options nouveau modeset=0

# initramfsの更新
$ sudo update-initramfs -u

# 再起動
$ sudo reboot
# 再起動後、画面の解像度が低くなれば無効化OK


3. cuda-driversのインストール

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
sudo apt-get update
sudo apt-get -y install cuda-drivers

# 再起動
sudo reboot


driverが有効化を確認

nvidia-smi

###############################################################################
Fri Mar 13 21:57:50 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64.00    Driver Version: 440.64.00    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| 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 105...  On   | 00000000:01:00.0  On |                  N/A |
| 41%   36C    P8    N/A /  75W |    223MiB /  4038MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1400      G   /usr/lib/xorg/Xorg                            18MiB |
|    0      1444      G   /usr/bin/gnome-shell                          46MiB |
|    0      1765      G   /usr/lib/xorg/Xorg                            86MiB |
|    0      1893      G   /usr/bin/gnome-shell                          67MiB |
+-----------------------------------------------------------------------------+

4. Dockerをインストール

sudo apt update
sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

# version確認(dockerがインストールできているか確認)
sudo docker --version

########################################
Docker version 19.03.8, build afacb8b7f0

5. Dockerをsudoなしで起動できるようにする

sudo usermod -aG docker kinacon


6. DockerでGPUを起動できるようにする

nvidia-container-runtimeのインストール

curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list

sudo apt update
sudo apt install nvidia-container-runtime

# 再起動
sudo reboot


7. コンテナでGPUの状態を確認

コンテナでGPUを認識できるか確認

docker run --gpus all --rm nvidia/cuda nvidia-smi

###############################################################################
Fri Mar 13 13:49:53 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64.00    Driver Version: 440.64.00    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| 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 105...  On   | 00000000:01:00.0  On |                  N/A |
| 41%   34C    P8    N/A /  75W |    223MiB /  4038MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

以上。