Dockerコンテナ内でGPUを使うための環境構築方法をご紹介します。
【Ubuntu】DockerでGPUを使うまでの環境構築
先日、プログラミング用にデスクトップPCを購入して、Ubuntuをインストールしました。
▶機械学習用にゲーミングPCを購入した(選び方、購入理由を紹介)
▶【安全にデュアルブート】増設SSDにUbuntuをインストール
ここから本格的にプログラミングを始めるために、Dockerをインストールしました。さらに、機械学習を行うために、DockerでGPUを使うための環境構築も実施しました。
この記事にその過程を記録します。
※コマンド内の「円マーク」は「バックスラッシュ」に置き換えてください。
概要
DockerでGPUを使うために、以下3つをインストールします。
- Docker
- Nvida driver
- Nvidia Container Runtime
私のPC環境
- Ubuntu 20.04
- GeForce RTX 3060
補足
一昔前までは、Dockerコンテナ内でGPUを使うためには、NvidiaDockerまたはNvidiaDocker2を使う必要がありました。しかし、バージョン19.03以降のDockerでは、通常の「docker run」コマンドでGPUが使えるようになっています。
Dockerのインストール
公式ページ[Install Docker Engine on Ubuntu]の[Install using the repository]に従ってDockerをインストールします。
私が実際に実行したコマンドを以下に載せます。ただし、インストール方法が変わる可能性もあるため、常に公式ページの手順に従うことが無難です。公式ページを読むのが面倒くさい場合は、以下を参考にしてみてください。
- (過去にDockerをインストールしている場合は、それを削除します。)
sudo apt-get remove docker docker-engine docker.io containerd runc
- インストールに必要なパッケージを準備をします。
sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
- Dockerのkeyを追加します。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- 「stable」リポジトリを指定します。
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 最新版のDockerをインストールします。
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
- 動作確認します。
sudo docker run hello-world
sudoなしでDockerコマンドを実行するための設定
必須ではありませんが、sudoなしでDockerコマンドを実行するための設定をすると便利です。公式ページ[Post-installation steps for Linux]の[Manage Docker as a non-root user]に従って設定します。
実際に私が実行したコマンドは以下のとおりです。
sudo groupadd docker sudo usermod -aG docker $USER sudo reboot
DockerだけではGPUを使用できないことを確認
Dockerをインストールしただけでは、コンテナ内でGPUを使えません。以下のコマンドで確認してみましょう。
docker run --gpus all nvidia/cuda:10.0-base nvidia-smi
この時点でGPUを使用しようとすると、以下のようなエラーが表示されます。
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
これでは困るので、以下でNvida driverとNvidia Container Runtimeをインストールしていきます。
Nvida driverのインストール
私はaptを利用してNvidia driverをインストールしました。
ホームページからダウンロードすることもできますが、本記事では省略します。
自身のPCに合ったバージョンを調べます。
sudo apt install -y ubuntu-drivers-common ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:03.1/0000:07:00.0 ==
modalias : pci:v000010DEd00002487sv000019DAsd00004630bc03sc00i00
vendor : NVIDIA Corporation
driver : nvidia-driver-470-server - distro non-free
driver : nvidia-driver-510 - distro non-free recommended
driver : nvidia-driver-470 - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin- 上記で「recommended」と表示されたバージョンをインストールします。
sudo apt install --no-install-recommends nvidia-driver-510
- 再起動します。
sudo reboot
- 動作確認します。
nvidia-smi
Mon Mar 14 22:29:28 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.47.03 Driver Version: 510.47.03 CUDA Version: 11.6 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:07:00.0 On | N/A |
| 0% 46C P8 15W / 170W | 774MiB / 12288MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 979 G /usr/lib/xorg/Xorg 101MiB |
| 0 N/A N/A 1650 G /usr/lib/xorg/Xorg 258MiB |
| 0 N/A N/A 1778 G /usr/bin/gnome-shell 145MiB |
| 0 N/A N/A 2763 G ...860182582202185772,131072 255MiB |
+-----------------------------------------------------------------------------+
Nvidia Container Runtimeのインストール
NVIDIA/nvidia-container-runtime/README.mdの[Ubuntu distributions]に従って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-get update
- インストールします。
sudo apt-get install nvidia-container-runtime
- 再起動します。
sudo reboot
補足
[NVIDIA Container Toolkit (NVIDIA Docker) は何をしてくれるか]によると、Nvidia Container Runtimeをインストールすると、依存しているnvidia-container-toolkitとlibnvidia-containerもインストールされるそうです。
動作確認
上記のインストールを終えたら動作確認してみましょう。以下のコマンドで、Dockerコンテナ内でGPUを認識できていたらOKです。
docker run --gpus all nvidia/cuda:10.0-base nvidia-smi
GPUを使うためには上記コマンドのように「--gpus all」オプションをつけるだけです。
さいごに
Dockerコンテナ内でGPUを使うために、私が実行したコマンドを記録として残しました。このあたりの環境構築はややこしいので、この記事が皆さんの役に立てば幸いです。
以上です。
コメント