nvidia-dockerの環境が立ち上がらなくなってしまったので、更新した際のメモです。
行ったこと
こちらの記事を参考に、「Docker 19.03 以降の環境で前だけを見て生きる場合」にしたがって以下の手順ですすめます。
- 最新の NVIDIA ドライバーをインストール
- Docker の最新バージョン (19.03) をインストール
- nvidia-container-toolkit パッケージをインストール
環境
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"
$ lspci -vv|grep -i nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1) (prog-if 00 [VGA controller])
Kernel driver in use: nvidia
Kernel modules: nvidiafb, nouveau, nvidia_396, nvidia_396_drm
01:00.1 Audio device: NVIDIA Corporation GP102 HDMI Audio Controller (rev a1)
1. 最新の NVIDIA ドライバーをインストール
おすすめの「cuda-driversパッケージを使う」方法に従う。
$wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-ubuntu1604.pin
$sudo mv cuda-ubuntu1604.pin /etc/apt/preferences.d/cuda-repository-pin-600
$sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/ /"
$sudo apt-get update
$sudo apt-get -y install cuda-drivers
但し、3行目のkeyの取得のところで以下のエラーがでたため、以下のサイトを参考に処理を追加。
$sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
Executing: /tmp/tmp.AxRPl9JGE0/gpg.1.sh --fetch-keys
https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
gpgkeys: protocol `https' not supported
gpg: 鍵サーバ・スキーム「https」用のハンドラがありません
gpg: *警告*: URI https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub からデータを取れません: 鍵サーバのエラー
$sudo apt-get install gnupg-curl
$sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos
Executing: /tmp/tmp.kbe6EjNXFn/gpg.1.sh --fetch-keys
https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
gpg: 鍵7FA2AF80:"cudatools <cudatools@nvidia.com>"変更なし
gpg: 処理数の合計: 1
gpg: 変更なし: 1
さらに、5行目のupdateのところでも、公開鍵が利用できないというエラーが出たため、こちらの記事などを参考に処理を追加。
$sudo apt-get update
エラー:13 https://nvidia.github.io/libnvidia-container/ubuntu16.04/amd64 InRelease
公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 6ED91CA3AC1160CD
$sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [エラーとして表示された鍵(NO_PUBKEYの後)]
例)$sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6ED91CA3AC1160CD
2. Docker の最新バージョン (19.03) をインストール
こちらの公式サイトにしたがってインストールします。前提条件を確認した上で、古いdockerをアンインストールします。以下のようなメッセージがでたので、autoremoveによりアンインストールを行いました。
$sudo apt-get remove docker docker-engine docker.io containerd runc
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージ 'docker-engine' はインストールされていないため削除もされません
パッケージ 'docker' はインストールされていないため削除もされません
パッケージ 'containerd' はインストールされていないため削除もされません
パッケージ 'docker.io' はインストールされていないため削除もされません
パッケージ 'runc' はインストールされていないため削除もされません
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
containerd.io docker-ce docker-ce-cli libnvidia-container-tools libnvidia-container1 libvdpau-dev linux-headers-4.15.0-38
linux-headers-4.15.0-38-generic linux-image-4.15.0-38-generic linux-modules-4.15.0-38-generic
linux-modules-extra-4.15.0-38-generic
これを削除するには 'sudo apt autoremove' を利用してください。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 367 個。
$sudo apt autoremove
次に、dockerのインストールには以下の3種類の方法があるそうですが、その中で1のリポジトリによる方法を選択しました。それ以外の方法については、上記の公式サイトに記載があります。
・リポジトリを用いる方法
・手動による方法
・スクリプトを用いる方法。
リポジトリを用いたインストール
####2.1 aptがHTTPSを通じてリポジトリを使えるようにする。
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
####2.2 dockerの公式鍵を追加して、確認する。
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
pub 4096R/0EBFCD88 2017-02-22
フィンガー・プリント = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid Docker Release (CE deb) <docker@docker.com>
sub 4096R/F273FCD8 2017-02-22
####2.3 stableなリポジトリを設定し、公式リポジトリとして etc/apt/sources.list に登録されていることを確認する。
$sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
(確認)$grep download.docker.com /etc/apt/sources.list
####2.4 dockerのインストール
$sudo apt-get update
$sudo apt-get install docker-ce docker-ce-cli containerd.io
####2.5 インストールの確認
$sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:***
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
...(省略)...........
3. nvidia-container-toolkit パッケージをインストール
こちらのquickstartに基づき、toolkitをインストールする.
####3.1 公式鍵の追加。
$distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
####3.2 リポジトリの追加。
$curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
deb https://nvidia.github.io/libnvidia-container/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-docker/ubuntu16.04/$(ARCH) /
####3.3 インストール
$sudo apt-get update
$sudo apt-get install -y nvidia-container-toolkit
$sudo systemctl restart docker
$sudo reboot
####3.4 インストールの確認
$docker run --gpus all nvidia/cuda nvidia-smi
Thu Apr 9 07:15:13 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 108... Off | 00000000:01:00.0 On | N/A |
| 33% 44C P8 11W / 250W | 402MiB / 11175MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
4. これまで使っていたイメージの起動
$docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nvcr.io/nvidia/tensorflow 19.12-tf1-py3 af027926c1a0 3 months ago 8.32GB
nvcr.io/nvidia/tensorflow 18.06-py3 0d13c9061269 22 months ago 3.4GB
これまで使っていたimageは、--runtime=nvidia の部分を --gpus all に変更するだけで、問題なく立ち上がりました。
$ docker run --gpus all -it --rm nvcr.io/nvidia/tensorflow:18.06-py3
================
== TensorFlow ==
================
NVIDIA Release 18.06 (build 512350)
Container image Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
Copyright 2017 The TensorFlow Authors. All rights reserved.
Various files include modifications (c) NVIDIA CORPORATION. All rights reserved.
NVIDIA modifications are covered by the license terms that apply to the underlying project or file.
NOTE: The SHMEM allocation limit is set to the default of 64MB. This may be
insufficient for TensorFlow. NVIDIA recommends the use of the following flags:
nvidia-docker run --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 ...