2024/11/25 Updated by
Ubuntu Docker Image on Windows (GPU)
[Up]
前提条件
$ nvidia-smi
nitta@galleria:~$ nvidia-smi
Mon Nov 25 14:42:14 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 565.72 Driver Version: 566.14 CUDA Version: 12.7 |
|-----------------------------------------+------------------------+----------------------+
| 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 GTX 980M On | 00000000:01:00.0 On | N/A |
| N/A 57C P0 26W / 1000W | 866MiB / 8192MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 26 G /Xwayland N/A |
| 0 N/A N/A 35 G /Xwayland N/A |
| 0 N/A N/A 41 G /Xwayland N/A |
+-----------------------------------------------------------------------------------------+
$ nvcc --version ←これを起動したいがインストールに失敗する。
Command 'nvcc' not found, but can be installed with:
sudo apt install nvidia-cuda-toolkit
$ sudo apt install nvidai-cuda-toolkit
エラー
Docker 上にGPUを使うコンテナを用意する
- nVidia 公式 Web サイト上にある
NGC コンテナー User Guide
」を参照する。
- nvidia-docker の image の各リリースは「バージョンタグ」で表される。
17.01 は 2017年1月にリリースされたことを意味する
- NGC コンテナ レジストリ空間
nvcr.io/nvidia ... nVidia GPU (single and multi) を 活用するコンテナ
nvcr.io/nvidia-hpcvis ... HPC 視覚化コンテナ
nvcr.io/hpc ... パートナー各社から提供されているサードバーティ製 HPC アプリケーションコンテナ
- 前提条件
- コンテナイメージは NGC Catalog で選択する。
左のメニューから Containers を選択し、"NVIDIA Platform" で TensorFlow にチェックをつける。
docker run --gpus all -it --rm -v local_dir:container_dir nvcr.io/nvidia/tensorflow:xx.xx-tf2-py3
- tensorflow のコンテナに関して、全リストが見たければ
TensorFlow Release Notes
を参照する。
探しているのは tensorflow2.13, cuda 11.8,cuDNN 8.6。
TensorFlow
Release TensorFlow CUDA cuDNN Ubuntu Python
23.12 2.14.0 12.3.2 8.9.7.29 22.04 3.10.6
23.11 2.14.0 12.3.0 8.9.6 22.04 3.10.6
23.10 2.13.0 12.2.2 8.9.5 22.04 3.10.6
23.09 2.13.0 12.2.1 8.9.5 22.04 3.10.6
23.08 2.13.0 12.2.1 8.9.4 20.04 3.10.6
23.07 2.12.0 12.1.1 8.9.3 20.04 3.10.6
23.02 2.11.0 12.0.1 8.7.0 20.04
22.11 2.10.0 11.8.0 8.7.0 20.04
22.09 2.9.1 11.8.0 8.6.0.163 20.04 3.8
22.08 2.9.1 11.7.1 8.5.0.96 20.04 3.8
-
"WSL2 のUbuntu"から以下のコマンドを実行する。
docker run --shm-size=1g \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
--gpus all \
-p 8888:8888 \
-it nvcr.io/nvidia/tensorflow:22.09-tf2-py3
- cuda ベースのイメージはOpenSource@Nvidia
に存在する。
-
cuda 11.8 を使うイメージは
Index of /compute/cuda/opensource/image/11.8.0
にある。
- nvidia-cuda-11.8.0-base-ubuntu22.04-x86_64 のイメージをダウンロードした。
- nVidia 公式の Installing Docker and the Docker Utility Engine for nVidia GPUs を参考にする。
- 上記のページ中に3種類のリンクがある。
- まず、2番目のリンクに記述されている手順にしたがって、nVidia Container Toolkit をインストールしてみる
-
- docker で WSL2 を有効にする。
- Microsoft Store で "Ubuntu 20.04.4 LTS" をインストールする。
- "Ubuntu 20.04.4 LTS" を起動し次の操作を行う。
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https
$ sudo apt-get install -y ca-certificates
$ sudo apt-get install -y curl
$ sudo apt-get install -y gnupg-agent
$ sudo apt-get install -y software-properties-common
- Docker's official GPG key を入手する
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- fingerprint をチェックする。
$ sudo apt-key fingerprint 0EBFCD88
- stable repository をセットアップする。
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
- docker の「設定」 → "Resoruces" → "WSL Integration" → 一覧に "Ubuntu-20.04" がリストされているのでトグルスイッチを on にする。
- ここで "Docker Desktop" と"WSL2 の Ubuntu" を再起動する。
- "WSL2 の Ubuntu" にDocker Engine をインストールする。
$ sudo apt-get update
$ sudo apt-get install -y docker-ce docker-ce-cli containerd.io
- "WSL2 の Ubuntu" のDocker Engine をテストする。
$ sudo docker run hello-world
- "WSL2 の Ubuntu" から、Docker を使用して GPU が利用できる環境を構築する。
$ docker run --shm-size=1g \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
--gpus all \
-p 8888:8888 \
-it nvcr.io/nvidia/tensorflow:21.08-tf2-py3
1行で書くと次の通り。
docker run --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all -p 8888:8888 -it nvcr.io/nvidia/tensorflow:21.08-tf2-py3
- "Docker Desktop" の Containers から "eager_northcutt" を選択して、"GPU 対応版 Ubuntu" を起動できる。
起動後、"Docker Desktop" の "eager_northcutt" Image を選択してから、Dockerウィンドウの右上にある "CLI" を選択すると、
Command Line Interface で shell にアクセスできる。
root@22d367464908:/workspace# nvidia-smi
Mon Sep 5 02:31:03 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.65.01 Driver Version: 516.94 CUDA Version: 11.7 |
|-------------------------------+----------------------+----------------------+
| 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 ... On | 00000000:01:00.0 On | N/A |
| N/A 56C P0 27W / N/A | 929MiB / 8192MiB | 1% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
root@22d367464908:/workspace#
- "WSL2 の Ubuntu" からも docker にアクセスできる。
nitta@galleria:~$ docker --version
Docker version 20.10.17, build 100c701
nitta@galleria:~$ docker version
Client: Docker Engine - Community
Cloud integration: v1.0.29
Version: 20.10.17
API version: 1.41
Go version: go1.17.11
Git commit: 100c701
Built: Mon Jun 6 23:03:17 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Desktop
Engine:
Version: 20.10.17
API version: 1.41 (minimum version 1.12)
Go version: go1.17.11
Git commit: a89b842
Built: Mon Jun 6 23:01:23 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.8
GitCommit: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
nitta@galleria:~$ docker --version
Docker version 20.10.17, build 100c701
nitta@galleria:~$ docker version
Client: Docker Engine - Community
Cloud integration: v1.0.29
Version: 20.10.17
API version: 1.41
Go version: go1.17.11
Git commit: 100c701
Built: Mon Jun 6 23:03:17 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Desktop
Engine:
Version: 20.10.17
API version: 1.41 (minimum version 1.12)
Go version: go1.17.11
Git commit: a89b842
Built: Mon Jun 6 23:01:23 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.8
GitCommit: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
nitta@galleria:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
22d367464908 nvcr.io/nvidia/tensorflow:21.08-tf2-py3 "/usr/local/bin/nvid…" 29 minutes ago Up 26 minutes 6006/tcp, 6064/tcp, 0.0.0.0:8888->8888/tcp eager_northcutt
- ターミナルソフト (teraterm とか cygwin とか) から ssh で接続できる。
$ ssh -D 6006 nitta@localhost
- コンテナ内で venv を用いて jupyter notebook を利用する。