PC

Ubuntu 20.04にNVIDIA Container ToolkitをインストールしてDockerfileを作成

Ubuntu 20.04上のdockerでGPUを使うためには、NVIDIA Container Toolkitが必要です。この記事ではNVIDIA Container Toolkitのインストール方法を紹介します。また、nvidia/dockerイメージを利用した最小限レベルのDockerfileも作成します。

基本的には公式のgithubのQuickstartに従います。また、Docker 19.03からNVIDIA GPUがネイティブにサポートされるようになったので、今回はDocker 19.03以降を想定しています。

NVIDIA Driverは既に導入済みであることを想定しているので、導入していない方はこちらを参照ください。

Dockerのインストール

まずDockerをインストールします。Dockerの公式ドキュメントに従います。下記では必要なコマンドだけ書いています。

※この記事を書いた段階(2020/05/22)では、Ubuntu20.04は正式サポートされていないようですが、とりあえず問題なく動きます。

# 既存パッケージの削除
$ sudo apt-get remove docker docker-engine docker.io containerd runc 
# 必要なパッケージをインストール 
$ sudo apt-get update 
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 
# 公式のGPG keyを追加 
$ 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" 
# dockerのインストール 
$ sudo apt-get update 
$ sudo apt-get install docker-ce docker-ce-cli containerd.io 
# 動作確認 
$ docker --version 
Docker version 19.03.9, build 9d988398e7 
$ sudo docker run hello-world

NVIDIA Container Toolkitをインストール

ここは、先程のQuickstartを参考にします。

# インストール
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ 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
$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl restart docker
# 動作確認(nvidia-smiコマンドをコンテナ上で実行してみる)
$ sudo docker run --gpus all --rm nvidia/cuda nvidia-smi
...
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64 Driver Version: 440.64 CUDA Version: 10.2 |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce RTX 2070 Off | 00000000:06:00.0 On | N/A |
| 25% 31C P8 16W / 215W | 834MiB / 7979MiB | 32% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================| 
+-----------------------------------------------------------------------------+

無事コンテナがGPUを認識しているようです。

nvidia/cudaを利用したDockerfileの作成

nvidia/cudaを利用したDockerfileの簡単なサンプルを作成したいと思います。下記の手順で行います。

  1. Dockerfileの作成
  2. docker imageの作成
  3. docker containerの起動と確認
# 適当なディレクトリを作成
$ mkdir workdir
$ cd workdir
# Dockerfileの作成
$ cat Dockerfile
FROM nvidia/cuda:latest
LABEL maintainer="keita"
WORKDIR /app
RUN apt update && apt install -y \
  vim \
  python3 \
  python3-pip
RUN python3 helloworld.py
$ cat helloworld.py
if __name__ == "__main__":
    print("Hello World in docker")
# docker imageの作成
$ sudo docker build -t sample_docker:1.0 .
...
Hello World in docker
...
# docker containerの起動と確認
# --gpus allを忘れないこと!
$ sudo docker run -it --gpus all --rm sample_docker:1.0
root@5318e0262d06:/app# nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64       Driver Version: 440.64       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 RTX 2070    Off  | 00000000:06:00.0  On |                  N/A |
| 26%   31C    P8    10W / 215W |   1112MiB /  7979MiB |      1%      Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+
root@5318e0262d06:/app# python3 helloworld.py 
Hello World in docker

これで色々開発が行えそうです。

  • この記事を書いた人

たかけの夫。IT系コンサルティング会社に勤務し、主にクラウドや機械学習に関するコンサルティング業務を行う三十路男。IT技術・投資に興味を持ち、家族と楽に人生を楽しみたい人。

-PC
-, , ,