2024/11/25 Updated by

Ubuntu Docker Image on Windows (GPU)


[Up] Japanese English

前提条件

$ 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を使うコンテナを用意する

  1. nVidia 公式 Web サイト上にある NGC コンテナー User Guide 」を参照する。
  2. nvidia-docker の image の各リリースは「バージョンタグ」で表される。 17.01 は 2017年1月にリリースされたことを意味する
  3. NGC コンテナ レジストリ空間
  4.   nvcr.io/nvidia ... nVidia GPU (single and multi) を 活用するコンテナ
      nvcr.io/nvidia-hpcvis ... HPC 視覚化コンテナ
      nvcr.io/hpc ... パートナー各社から提供されているサードバーティ製 HPC アプリケーションコンテナ
    
  5. 前提条件
  6. コンテナイメージは NGC Catalog で選択する。
  7. 左のメニューから Containers を選択し、"NVIDIA Platform" で TensorFlow にチェックをつける。
    docker run --gpus all -it --rm -v local_dir:container_dir nvcr.io/nvidia/tensorflow:xx.xx-tf2-py3
    
  8. tensorflow のコンテナに関して、全リストが見たければ TensorFlow Release Notes を参照する。
  9. 探しているのは 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
    
  10. "WSL2 のUbuntu"から以下のコマンドを実行する。
  11. 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
    
  1. cuda ベースのイメージはOpenSource@Nvidia に存在する。
  2. cuda 11.8 を使うイメージは Index of /compute/cuda/opensource/image/11.8.0 にある。
  3. nvidia-cuda-11.8.0-base-ubuntu22.04-x86_64 のイメージをダウンロードした。
  1. nVidia 公式の Installing Docker and the Docker Utility Engine for nVidia GPUs を参考にする。
  2. 上記のページ中に3種類のリンクがある。
  3. まず、2番目のリンクに記述されている手順にしたがって、nVidia Container Toolkit をインストールしてみる
  4. docker で WSL2 を有効にする。
  5. Microsoft Store で "Ubuntu 20.04.4 LTS" をインストールする。
  6. "Ubuntu 20.04.4 LTS" を起動し次の操作を行う。
  7. $ 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
    
  8. Docker's official GPG key を入手する
  9. $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
  10. fingerprint をチェックする。
  11. $ sudo apt-key fingerprint 0EBFCD88
    
  12. stable repository をセットアップする。
  13. $ sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"
    
  14. docker の「設定」 → "Resoruces" → "WSL Integration" → 一覧に "Ubuntu-20.04" がリストされているのでトグルスイッチを on にする。



  15. ここで "Docker Desktop" と"WSL2 の Ubuntu" を再起動する。
  16. "WSL2 の Ubuntu" にDocker Engine をインストールする。
  17. $ sudo apt-get update
    $ sudo apt-get install -y docker-ce docker-ce-cli containerd.io
    
  18. "WSL2 の Ubuntu" のDocker Engine をテストする。
  19. $ sudo docker run hello-world
    
  20. "WSL2 の Ubuntu" から、Docker を使用して GPU が利用できる環境を構築する。
  21. $ 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
    
  22. "Docker Desktop" の Containers から "eager_northcutt" を選択して、"GPU 対応版 Ubuntu" を起動できる。 起動後、"Docker Desktop" の "eager_northcutt" Image を選択してから、Dockerウィンドウの右上にある "CLI" を選択すると、 Command Line Interface で shell にアクセスできる。
  23. 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# 
    
    
    
  24. "WSL2 の Ubuntu" からも docker にアクセスできる。
  25. 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
    
  26. ターミナルソフト (teraterm とか cygwin とか) から ssh で接続できる。
  27. $ ssh -D 6006 nitta@localhost
    
  28. コンテナ内で venv を用いて jupyter notebook を利用する。