MkItYs

MkItYs > ネットワークとサーバを作る > 

images

クラウドのコンテナでGPUを使う:GPC, Docker, nvidia-driver, cuda-toolkit

images

クラウド上に作ったコンテナで、GPUを使えるようにする設定です。

関連


拡張可能なサーバ:クラウドサービス
コンテナを導入する:Docker

検証


クラウド:Google Cloud Platform
GPU:Tesla T4
OS:Ubuntu 20.04
コンテナ:Docker 20.10.10
グラフィックス・ドライバ:cuda-drivers 515.65.07-1
並列計算ツールキット:cuda 11.8.0-1 - 11.0.3-1
クラウド:Google Cloud Platform
GPU:Tesla T4
OS:Ubuntu 18.04
コンテナ:Docker
グラフィックス・ドライバ:nvidia-driver-495
並列計算ツールキット:cuda-toolkit-11-5

設定:Linux (Ubuntu 20.04)


確認

次のサイトで、対象のシステムと希望のインストレーション・タイプを選択し、インストレーションに必要なコマンド群を確認します:

https://developer.nvidia.com/cuda-downloads
> Operating System: Linux
> Architecture: x86_64
> Distribution: Ubuntu
> Version: 20.04
> Installer Type: deb (network)

次のサイトで、使用するGPUのタイプから、推奨されるドライバのバージョンを確認します:

https://www.nvidia.co.jp/Download/index.aspx?lang=en
> Product Type: Data Center / Tesla
> Product Series: T-Series
> Product: Tesla T4
> Operating System: Linux 64-bit
> CUDA Toolkit: Any
> Language: English (US)

次のサイトで(対象のシステムのリポジトリのURLに合わせて)、並列計算ツールキット(cuda)の利用可能なバージョン群を確認します:

https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/
...
cuda-11-0_11.0.2-1_amd64.deb 4.0KB 2020-07-02 23:21
cuda-11-0_11.0.3-1_amd64.deb 4.0KB 2020-08-04 21:15
cuda-11-1_11.1.0-1_amd64.deb 4.0KB 2020-09-20 20:17
cuda-11-1_11.1.1-1_amd64.deb 4.0KB 2020-10-16 17:49
cuda-11-2_11.2.0-1_amd64.deb 4.0KB 2020-12-15 17:33
cuda-11-2_11.2.1-1_amd64.deb 4.0KB 2021-02-09 17:14
cuda-11-2_11.2.2-1_amd64.deb 4.0KB 2021-02-26 19:50
cuda-11-3_11.3.0-1_amd64.deb 4.0KB 2021-03-26 22:54
cuda-11-3_11.3.1-1_amd64.deb 4.0KB 2021-05-14 01:12
cuda-11-4_11.4.0-1_amd64.deb 4.0KB 2021-06-24 02:48
cuda-11-4_11.4.1-1_amd64.deb 4.0KB 2021-07-28 19:46
cuda-11-4_11.4.2-1_amd64.deb 4.0KB 2021-08-30 21:01
cuda-11-4_11.4.3-1_amd64.deb 4.0KB 2021-10-29 16:46
cuda-11-4_11.4.4-1_amd64.deb 4.0KB 2022-01-27 22:51
cuda-11-5_11.5.0-1_amd64.deb 4.0KB 2021-10-16 01:11
cuda-11-5_11.5.1-1_amd64.deb 4.0KB 2021-11-19 04:40
cuda-11-5_11.5.2-1_amd64.deb 4.0KB 2022-01-28 01:51
cuda-11-6_11.6.0-1_amd64.deb 4.0KB 2022-01-11 06:04
cuda-11-6_11.6.1-1_amd64.deb 4.0KB 2022-02-14 22:26
cuda-11-6_11.6.2-1_amd64.deb 4.0KB 2022-03-18 17:41
cuda-11-7_11.7.0-1_amd64.deb 4.0KB 2022-05-04 15:54
cuda-11-7_11.7.1-1_amd64.deb 4.0KB 2022-07-29 08:59
cuda-11-8_11.8.0-1_amd64.deb 4.0KB 2022-09-29 18:18
...
準備
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb
$ dpkg -i cuda-keyring_1.0-1_all.deb
$ apt update
グラフィックス・ドライバ(nvidia)
$ apt install cuda-drivers=515.65.07-1
$ reboot
並列計算ツールキット(cuda)
$ apt-mark hold cuda-drivers

$ apt install cuda=11.0.3-1
$ apt install cuda=11.1.1-1
$ apt install cuda=11.2.2-1
$ apt install cuda=11.3.1-1
$ apt install cuda=11.4.4-1
$ apt install cuda=11.5.2-1
$ apt install cuda=11.6.2-1
$ apt install cuda=11.7.1-1
$ apt install cuda=11.8.0-1

設定:Linux (Ubuntu 18.04)


準備
$ cd /var/tmp
$ uname -r
$ apt install linux-headers-$(uname -r)
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID | sed -e 's/\.//g')
$ echo ${distribution}
$ wget https://developer.download.nvidia.com/compute/cuda/repos/${distribution}/x86_64/cuda-${distribution}.pin
$ mv cuda-${distribution}.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/${distribution}/x86_64/7fa2af80.pub
$ echo "deb http://developer.download.nvidia.com/compute/cuda/repos/${distribution}/x86_64 /" | tee /etc/apt/sources.list.d/cuda.list
グラフィックス・ドライバ(nvidia)
$ apt install cuda-drivers
$ apt list --installed | grep nvidia-driver
並列計算ツールキット(cuda)
$ apt install cuda
$ apt list --installed | grep cuda

$ /usr/local/cuda/bin/nvcc --version
$ nvidia-smi
グラフィックス・ドライバ(nvidia)、コンテナ(Docker)
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ echo ${distribution}
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/${distribution}/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ apt update
$ apt install nvidia-docker2

$ systemctl restart docker.service
$ docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi

検証と測定


コンテナ内で、並列計算ツールキット(CUDA)とDNN向けGPUライブラリ(cuDNN )を認識できているかどうかは、次のスクリプトで確認できます:

#!/usr/bin/python

import torch

print(torch.cuda.is_available())
print(torch.backends.cudnn.is_available())

サーバ側のパフォーマンス(プロセッサ/メモリ/GPUの使用率など)を知るには、次のようなコマンド群が使えます:

$ top
$ mpstat -P ALL
$ vmstat -t 1
$ nvidia-smi
$ nvidia-smi --query-gpu=timestamp,name,utilization.gpu,utilization.memory,memory.used,memory.free,memory.used --format=csv -l 1