2023/08/18 Updated by

Custom Image (GPU) of Docker on Windows 11


[Up] Japanese English

Nvidia-Container-Toolkit の setup

  1. Windows10 上に GPU を使う Docker Desktop がインストールされていて、コンテナ内でGPUが使える状況である。
  2. docker: Install on Windows10 GPU
    docker: venvで操作する jupyter 環境を作成する
  3. 以下の情報を参考にすると、docker コンテナの中で GPU を使う場合は Nvidia-Container-Toolkit を使う方法があるようだ
  4. WSL2+Docker Desktop で Pytorch の GPU 環境を構築する方法
  5. NVIDIA Container Toolkit をダウンロードする。
  6. github
    nvidia-docker-main.zip
  7. docker ホスト側でコマンドを順に実行する。
  8. https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#docker
    [repository と GPG key のsetup]
    $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
          && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
          && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
                sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
                sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
    
    [sudo] password for nitta:
    deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/$(ARCH) /
    #deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/experimental/deb/$(ARCH) /
    #deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/experimental/ubuntu18.04/$(ARCH) /
    
    [パッケージの更新]
    $ sudo apt-get update
    
    [docker デーモンの再起動]
    $ sudo systemctl restart docker
    
    これはエラーとなる。 docker desktop と ubuntu20.04LST を再起動した。
  9. インストールする
  10. sudo apt-get install -y nvidia-docker2
    
  11. OSにインストールされているCUDA (11.2)のバージョンに合うイメージをダウンロードする。
  12. https://hub.docker.com/r/nvidia/cuda
    11.2.2-devel-ubuntu20.04            2.49 GB
    11.2.2-runtime-ubuntu20.04          1.06 GB
    11.2.2-base-ubuntu20.04            44.34 MB
    11.2.2-cudnn8-runtime-ubuntu20.04   1.73 GB
    11.2.2-cudnn8-devel-ubuntu20.04     3.71 GB
    
    11.3.1-devel-ubuntu20.04            2.46 GB
    11.3.1-runtime-ubuntu20.04          1.02 GB
    11.3.1-base-ubuntu20.04            44.61 MB
    11.3.1-cudnn8-runtime-ubuntu20.04   1.73 GB
    11.3.1-cudnn8-devel-ubuntu20.04     4.19 GB
    
  13. コンテナを生成する。
  14. sudo docker run --rm --gpus all nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04 nvidia-smi
    
    nitta@galleria:~$ sudo docker run --rm --gpus all nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04 nvidia-smi
    [sudo] password for nitta:
    Unable to find image 'nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04' locally
    11.2.2-cudnn8-runtime-ubuntu20.04: Pulling from nvidia/cuda
    56e0351b9876: Pull complete
    2863766b5fd4: Pull complete
    827c444d8f44: Pull complete
    0f07d929085f: Pull complete
    95ba63acee01: Pull complete
    ae716de67ab4: Pull complete
    a7476cc8e8fe: Pull complete
    754fa580d193: Pull complete
    16ed58043377: Pull complete
    0bcba66e5b75: Pull complete
    Digest: sha256:1691dd2caa62db17376565c46cb53b07a2f34c8fbc2cd33bd13969b3af921055
    Status: Downloaded newer image for nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04
    
    ==========
    == CUDA ==
    ==========
    
    CUDA Version 11.2.2
    
    Container image Copyright (c) 2016-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
    
    This container image and its contents are governed by the NVIDIA Deep Learning Container License.
    By pulling and using the container, you accept the terms and conditions of this license:
    https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license
    
    A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience.
    
    Sun Aug 20 03:09:33 2023
    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.98.01              Driver Version: 536.99       CUDA Version: 12.2     |
    |-----------------------------------------+----------------------+----------------------+
    | 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   45C    P8              10W / 1... |   1745MiB /  8192MiB |      1%      Default |
    |                                         |                      |                  N/A |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+
    
  15. コンテナを生成して、いろいろ調べる。
  16. $ sudo docker run --gpus all -it nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.;04 bash
    # apt-get update
    # apt-get install -y python3-pip
    # apt-get install -y sudo
    # apt-get install -y wget
    # apt-get install -y git
    # apt-get install -y vim
    
    [sshd 関連]
    # apt-get install -y openssh-server
    # echo 'root:password' | chpasswd
    # sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_config
    # service ssh start
    
  17. ローカルにsshdが動作することはわかる。あとは、docker ホストで port fowarding すればよさそうだ。

Windows 11 (GPU)上のDocker用のカスタムイメージを作成する

  • Docker Desktop を起動する。
  • Docker ホストと接続可能な WSL2 の Ubuntu20.04LST を起動する。以下の作業をこのシェル内で行う。
  • 作業用ディレクトリを作成する
  •   $ mkdir cuda_ssh
      $ cd cuda_ssh
    
  • Dockerfile を作成して編集する。
  • 下の例では、rootのパスワードを 'password' とする例である。 実際には各image毎に、推測しづらい文字列に変更しておくこと。

    Dockerfile
    from nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04
    
    ENV LC_ALL C.UTF-8
    ENV TZ=Asia/Tokyo
    
    # python
    RUN apt-get update && \
    	apt-get install -y \
    		python3-pip \
    		sudo \
    		wget \
    		git \
    		vim
    
    RUN ln -s /usr/bin/python3.8 /usr/bin/python
    RUN pip install --upgrade pip
    #RUN pip install tensorflow==2.8.0
    #RUN pip install jupyter
    
    # ssh
    RUN apt-get install -y --no-install-recommends openssh-server && \
    	echo 'root:password' | chpasswd && \
    	sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_config
    #RUN service ssh start
    
    EXPOSE 22
    CMD service ssh start && /bin/bash
    
  • build
  •   cd cuda_ssh
      sudo docker build --no-cache -t cuda_11_2_2_ssh .
    
  • image が生成されたことを確認する。
  • $ sudo docker image ls
    [sudo] password for nitta:
    REPOSITORY                  TAG                                 IMAGE ID       CREATED         SIZE
    cuda_11_2_2_ssh             latest                              d80f28e8c572   3 days ago      3.68GB
    nvidia/cuda                 11.2.2-cudnn8-runtime-ubuntu20.04   16fe196b9cd7   2 months ago    3.23GB
    ubuntu                      latest                              2dc39ba059dc   11 months ago   77.8MB
    nginx                       latest                              2b7d6430f78d   12 months ago   142MB
    maluuba/newsqa              latest                              6d86de301d59   22 months ago   2.43GB
    hello-world                 latest                              feb5d9fea6a5   23 months ago   13.3kB
    nvcr.io/nvidia/tensorflow   21.08-tf2-py3                       2abe022b55d1   2 years ago     11.5GB
    ai_security                 latest                              46462b1c6de0   2 years ago     3.1GB
    docker/getting-started      latest                              3ba8f2ff0727   2 years ago     27.9MB
    
  • コンテナからアクセスする永続的なフォルダを生成する。
  • $ sudo mkdir -p /home/docker/4semi6
    
  • コンテナを生成する
  • $ sudo docker run --name 4semi6 --shm-size=1g \
       --ulimit memlock=-1 \
       --ulimit stack=67108864 \
       --gpus all \
       -p 7070:22 \
       -p 8080:8888 \
       -v /home/docker/4semi6:/root/doc \
       -it cuda_11_2_2_ssh
    
  • 他のマシンからssh接続する。成功
  • $ ssh -p 7070 root@192.168.11.14
    Root@192.168.11.14's password: Dockerfileで指定したパスワード
    

    Windows 11 (GPU)上のDocker用のカスタムイメージを調査する

    1. イメージの履歴を表示してみる。
    2. 履歴を表示する
      IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
      e4ca41361cc1   8 days ago     CMD ["/bin/sh" "-c" "service ssh start && /b…   0B        buildkit.dockerfile.v0
      <missing>      8 days ago     EXPOSE map[22/tcp:{}]                           0B        buildkit.dockerfile.v0
      <missing>      8 days ago     RUN /bin/sh -c apt-get install -y --no-insta…   3.89MB    buildkit.dockerfile.v0
      <missing>      8 days ago     RUN /bin/sh -c pip install --upgrade pip # b…   13.6MB    buildkit.dockerfile.v0
      <missing>      8 days ago     RUN /bin/sh -c ln -s /usr/bin/python3.8 /usr…   0B        buildkit.dockerfile.v0
      <missing>      8 days ago     RUN /bin/sh -c apt-get update &&  apt-get in…   437MB     buildkit.dockerfile.v0
      <missing>      8 days ago     ENV TZ=Asia/Tokyo                               0B        buildkit.dockerfile.v0
      <missing>      8 days ago     ENV LC_ALL=C.UTF-8                              0B        buildkit.dockerfile.v0
      <missing>      2 months ago   RUN |1 TARGETARCH=amd64 /bin/sh -c apt-get u…   1.31GB    buildkit.dockerfile.v0
      <missing>      2 months ago   LABEL com.nvidia.cudnn.version=8.1.1.33         0B        buildkit.dockerfile.v0
      <missing>      2 months ago   LABEL maintainer=NVIDIA CORPORATION <cudatoo…   0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ARG TARGETARCH                                  0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_CUDNN_PACKAGE=libcudnn8=8.1.1.33-1+cu…   0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_CUDNN_PACKAGE_NAME=libcudnn8             0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_CUDNN_VERSION=8.1.1.33                   0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENTRYPOINT ["/opt/nvidia/nvidia_entrypoint.s…   0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NVIDIA_PRODUCT_NAME=CUDA                    0B        buildkit.dockerfile.v0
      <missing>      2 months ago   COPY nvidia_entrypoint.sh /opt/nvidia/ # bui…   2.53kB    buildkit.dockerfile.v0
      <missing>      2 months ago   COPY entrypoint.d/ /opt/nvidia/entrypoint.d/…   3.06kB    buildkit.dockerfile.v0
      <missing>      2 months ago   RUN |1 TARGETARCH=amd64 /bin/sh -c apt-mark …   252kB     buildkit.dockerfile.v0
      <missing>      2 months ago   RUN |1 TARGETARCH=amd64 /bin/sh -c apt-get u…   1.79GB    buildkit.dockerfile.v0
      <missing>      2 months ago   LABEL maintainer=NVIDIA CORPORATION <cudatoo…   0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ARG TARGETARCH                                  0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_LIBNCCL_PACKAGE=libnccl2=2.8.4-1+cuda…   0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NCCL_VERSION=2.8.4-1                        0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_LIBNCCL_PACKAGE_VERSION=2.8.4-1          0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2            0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_LIBCUBLAS_PACKAGE=libcublas-11-2=11.4…   0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_LIBCUBLAS_VERSION=11.4.1.1043-1          0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_LIBCUBLAS_PACKAGE_NAME=libcublas-11-2    0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_LIBCUSPARSE_VERSION=11.4.1.1152-1        0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_LIBNPP_PACKAGE=libnpp-11-2=11.3.2.152…   0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_LIBNPP_VERSION=11.3.2.152-1              0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_NVTX_VERSION=11.2.152-1                  0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_CUDA_LIB_VERSION=11.2.2-1                0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NVIDIA_DRIVER_CAPABILITIES=compute,utili…   0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NVIDIA_VISIBLE_DEVICES=all                  0B        buildkit.dockerfile.v0
      <missing>      2 months ago   COPY NGC-DL-CONTAINER-LICENSE / # buildkit      17.3kB    buildkit.dockerfile.v0
      <missing>      2 months ago   ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/u…   0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV PATH=/usr/local/nvidia/bin:/usr/local/cu…   0B        buildkit.dockerfile.v0
      <missing>      2 months ago   RUN |1 TARGETARCH=amd64 /bin/sh -c echo "/us…   46B       buildkit.dockerfile.v0
      <missing>      2 months ago   RUN |1 TARGETARCH=amd64 /bin/sh -c apt-get u…   33.5MB    buildkit.dockerfile.v0
      <missing>      2 months ago   ENV CUDA_VERSION=11.2.2                         0B        buildkit.dockerfile.v0
      <missing>      2 months ago   RUN |1 TARGETARCH=amd64 /bin/sh -c apt-get u…   18.3MB    buildkit.dockerfile.v0
      <missing>      2 months ago   LABEL maintainer=NVIDIA CORPORATION <cudatoo…   0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ARG TARGETARCH                                  0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_CUDA_COMPAT_PACKAGE=cuda-compat-11-2     0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NV_CUDA_CUDART_VERSION=11.2.152-1           0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NVIDIA_REQUIRE_CUDA=cuda>=11.2 brand=tes…   0B        buildkit.dockerfile.v0
      <missing>      2 months ago   ENV NVARCH=x86_64                               0B        buildkit.dockerfile.v0
      <missing>      2 months ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
      <missing>      2 months ago   /bin/sh -c #(nop) ADD file:655d373cb551d0dd5…   72.8MB    
      <missing>      2 months ago   /bin/sh -c #(nop)  LABEL org.opencontainers.…   0B        
      <missing>      2 months ago   /bin/sh -c #(nop)  LABEL org.opencontainers.…   0B        
      <missing>      2 months ago   /bin/sh -c #(nop)  ARG LAUNCHPAD_BUILD_ARCH     0B        
      <missing>      2 months ago   /bin/sh -c #(nop)  ARG RELEASE                  0B        
      
    3. イメージの履歴を --no-truc オプションを指定して表示する。
    4. 履歴を表示する(--no-trunc)
      nitta@galleria:~/cuda_ssh$ sudo docker history --no-trunc cuda_11_2_2_ssh
      IMAGE                                                                     CREATED        CREATED BY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   SIZE      COMMENT
      sha256:e4ca41361cc1f9888f796f3f214c7754317392b6b1404ecd1452da69fe9aff6a   8 days ago     CMD ["/bin/sh" "-c" "service ssh start && /bin/bash"]                                                                                                                                                                                                                                                                                                                                                                                                                                        0B        buildkit.dockerfile.v0
      <missing>                                                                 8 days ago     EXPOSE map[22/tcp:{}]                                                                                                                                                                                                                                                                                                                                                                                                                                                                        0B        buildkit.dockerfile.v0
      <missing>                                                                 8 days ago     RUN /bin/sh -c apt-get install -y --no-install-recommends openssh-server &&  echo 'root:password' | chpasswd &&  sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_config # buildkit                                                                                                                                                                                                                                                                          3.89MB    buildkit.dockerfile.v0
      <missing>                                                                 8 days ago     RUN /bin/sh -c pip install --upgrade pip # buildkit                                                                                                                                                                                                                                                                                                                                                                                                                                          13.6MB    buildkit.dockerfile.v0
      <missing>                                                                 8 days ago     RUN /bin/sh -c ln -s /usr/bin/python3.8 /usr/bin/python # buildkit                                                                                                                                                                                                                                                                                                                                                                                                                           0B        buildkit.dockerfile.v0
      <missing>                                                                 8 days ago     RUN /bin/sh -c apt-get update &&  apt-get install -y   python3-pip   sudo   wget   git   vim # buildkit                                                                                                                                                                                                                                                                                                                                                                                      437MB     buildkit.dockerfile.v0
      <missing>                                                                 8 days ago     ENV TZ=Asia/Tokyo                                                                                                                                                                                                                                                                                                                                                                                                                                                                            0B        buildkit.dockerfile.v0
      <missing>                                                                 8 days ago     ENV LC_ALL=C.UTF-8                                                                                                                                                                                                                                                                                                                                                                                                                                                                           0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   RUN |1 TARGETARCH=amd64 /bin/sh -c apt-get update && apt-get install -y --no-install-recommends     ${NV_CUDNN_PACKAGE}     && apt-mark hold ${NV_CUDNN_PACKAGE_NAME}     && rm -rf /var/lib/apt/lists/* # buildkit                                                                                                                                                                                                                                                                          1.31GB    buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   LABEL com.nvidia.cudnn.version=8.1.1.33                                                                                                                                                                                                                                                                                                                                                                                                                                                      0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   LABEL maintainer=NVIDIA CORPORATION <cudatools@nvidia.com>                                                                                                                                                                                                                                                                                                                                                                                                                                   0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ARG TARGETARCH                                                                                                                                                                                                                                                                                                                                                                                                                                                                               0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_CUDNN_PACKAGE=libcudnn8=8.1.1.33-1+cuda11.2                                                                                                                                                                                                                                                                                                                                                                                                                                           0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_CUDNN_PACKAGE_NAME=libcudnn8                                                                                                                                                                                                                                                                                                                                                                                                                                                          0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_CUDNN_VERSION=8.1.1.33                                                                                                                                                                                                                                                                                                                                                                                                                                                                0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENTRYPOINT ["/opt/nvidia/nvidia_entrypoint.sh"]                                                                                                                                                                                                                                                                                                                                                                                                                                              0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NVIDIA_PRODUCT_NAME=CUDA                                                                                                                                                                                                                                                                                                                                                                                                                                                                 0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   COPY nvidia_entrypoint.sh /opt/nvidia/ # buildkit                                                                                                                                                                                                                                                                                                                                                                                                                                            2.53kB    buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   COPY entrypoint.d/ /opt/nvidia/entrypoint.d/ # buildkit                                                                                                                                                                                                                                                                                                                                                                                                                                      3.06kB    buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   RUN |1 TARGETARCH=amd64 /bin/sh -c apt-mark hold ${NV_LIBCUBLAS_PACKAGE_NAME} ${NV_LIBNCCL_PACKAGE_NAME} # buildkit                                                                                                                                                                                                                                                                                                                                                                          252kB     buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   RUN |1 TARGETARCH=amd64 /bin/sh -c apt-get update && apt-get install -y --no-install-recommends     cuda-libraries-11-2=${NV_CUDA_LIB_VERSION}     ${NV_LIBNPP_PACKAGE}     cuda-nvtx-11-2=${NV_NVTX_VERSION}     libcusparse-11-2=${NV_LIBCUSPARSE_VERSION}     ${NV_LIBCUBLAS_PACKAGE}     ${NV_LIBNCCL_PACKAGE}     && rm -rf /var/lib/apt/lists/* # buildkit                                                                                                                             1.79GB    buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   LABEL maintainer=NVIDIA CORPORATION <cudatools@nvidia.com>                                                                                                                                                                                                                                                                                                                                                                                                                                   0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ARG TARGETARCH                                                                                                                                                                                                                                                                                                                                                                                                                                                                               0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_LIBNCCL_PACKAGE=libnccl2=2.8.4-1+cuda11.2                                                                                                                                                                                                                                                                                                                                                                                                                                             0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NCCL_VERSION=2.8.4-1                                                                                                                                                                                                                                                                                                                                                                                                                                                                     0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_LIBNCCL_PACKAGE_VERSION=2.8.4-1                                                                                                                                                                                                                                                                                                                                                                                                                                                       0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2                                                                                                                                                                                                                                                                                                                                                                                                                                                         0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_LIBCUBLAS_PACKAGE=libcublas-11-2=11.4.1.1043-1                                                                                                                                                                                                                                                                                                                                                                                                                                        0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_LIBCUBLAS_VERSION=11.4.1.1043-1                                                                                                                                                                                                                                                                                                                                                                                                                                                       0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_LIBCUBLAS_PACKAGE_NAME=libcublas-11-2                                                                                                                                                                                                                                                                                                                                                                                                                                                 0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_LIBCUSPARSE_VERSION=11.4.1.1152-1                                                                                                                                                                                                                                                                                                                                                                                                                                                     0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_LIBNPP_PACKAGE=libnpp-11-2=11.3.2.152-1                                                                                                                                                                                                                                                                                                                                                                                                                                               0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_LIBNPP_VERSION=11.3.2.152-1                                                                                                                                                                                                                                                                                                                                                                                                                                                           0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_NVTX_VERSION=11.2.152-1                                                                                                                                                                                                                                                                                                                                                                                                                                                               0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_CUDA_LIB_VERSION=11.2.2-1                                                                                                                                                                                                                                                                                                                                                                                                                                                             0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility                                                                                                                                                                                                                                                                                                                                                                                                                                               0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NVIDIA_VISIBLE_DEVICES=all                                                                                                                                                                                                                                                                                                                                                                                                                                                               0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   COPY NGC-DL-CONTAINER-LICENSE / # buildkit                                                                                                                                                                                                                                                                                                                                                                                                                                                   17.3kB    buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64                                                                                                                                                                                                                                                                                                                                                                                                                            0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV PATH=/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin                                                                                                                                                                                                                                                                                                                                                                              0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   RUN |1 TARGETARCH=amd64 /bin/sh -c echo "/usr/local/nvidia/lib" >> /etc/ld.so.conf.d/nvidia.conf     && echo "/usr/local/nvidia/lib64" >> /etc/ld.so.conf.d/nvidia.conf # buildkit                                                                                                                                                                                                                                                                                                           46B       buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   RUN |1 TARGETARCH=amd64 /bin/sh -c apt-get update && apt-get install -y --no-install-recommends     cuda-cudart-11-2=${NV_CUDA_CUDART_VERSION}     ${NV_CUDA_COMPAT_PACKAGE}     && ln -s cuda-11.2 /usr/local/cuda     && rm -rf /var/lib/apt/lists/* # buildkit                                                                                                                                                                                                                            33.5MB    buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV CUDA_VERSION=11.2.2                                                                                                                                                                                                                                                                                                                                                                                                                                                                      0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   RUN |1 TARGETARCH=amd64 /bin/sh -c apt-get update && apt-get install -y --no-install-recommends     gnupg2 curl ca-certificates &&     curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/${NVARCH}/3bf863cc.pub | apt-key add - &&     echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/${NVARCH} /" > /etc/apt/sources.list.d/cuda.list &&     apt-get purge --autoremove -y curl     && rm -rf /var/lib/apt/lists/* # buildkit   18.3MB    buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   LABEL maintainer=NVIDIA CORPORATION <cudatools@nvidia.com>                                                                                                                                                                                                                                                                                                                                                                                                                                   0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ARG TARGETARCH                                                                                                                                                                                                                                                                                                                                                                                                                                                                               0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_CUDA_COMPAT_PACKAGE=cuda-compat-11-2                                                                                                                                                                                                                                                                                                                                                                                                                                                  0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NV_CUDA_CUDART_VERSION=11.2.152-1                                                                                                                                                                                                                                                                                                                                                                                                                                                        0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NVIDIA_REQUIRE_CUDA=cuda>=11.2 brand=tesla,driver>=418,driver<419 brand=tesla,driver>=450,driver<451                                                                                                                                                                                                                                                                                                                                                                                     0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   ENV NVARCH=x86_64                                                                                                                                                                                                                                                                                                                                                                                                                                                                            0B        buildkit.dockerfile.v0
      <missing>                                                                 2 months ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]                                                                                                                                                                                                                                                                                                                                                                                                                                                         0B        
      <missing>                                                                 2 months ago   /bin/sh -c #(nop) ADD file:655d373cb551d0dd5d7867f88a4f98908dc3f16190986f693e88c423e6f21b8d in /                                                                                                                                                                                                                                                                                                                                                                                             72.8MB    
      <missing>                                                                 2 months ago   /bin/sh -c #(nop)  LABEL org.opencontainers.image.version=20.04                                                                                                                                                                                                                                                                                                                                                                                                                              0B        
      <missing>                                                                 2 months ago   /bin/sh -c #(nop)  LABEL org.opencontainers.image.ref.name=ubuntu                                                                                                                                                                                                                                                                                                                                                                                                                            0B        
      <missing>                                                                 2 months ago   /bin/sh -c #(nop)  ARG LAUNCHPAD_BUILD_ARCH                                                                                                                                                                                                                                                                                                                                                                                                                                                  0B        
      <missing>                                                                 2 months ago   /bin/sh -c #(nop)  ARG RELEASE                                                                                                                                                                                                                                                                                                                                                                                                                                                               0B        
      

    (自動再起動のオプションを付けて) container を起動する

    docker ホストが再起動したときに、特定のコンテナを自動的に起動するように設定する。 コンテナを正しい順番で起動するには、再起動ポリシーを利用する方法が docker では推奨されている。

    コンテナに対する再起動ポリシーを設定するには、docker run コマンドで --restart フラグを使う。

  • カスタムイメージを起動する
  • $ sudo docker run --name 4semi6 --restart always \
       --shm-size=1g \
       --ulimit memlock=-1 \
       --ulimit stack=67108864 \
       --gpus all \
       -p 7070:22 \
       -p 8080:8888 \
       -v /home/docker/4semi6:/root/doc \
       -it cuda_11_2_2_ssh
    
  • 実行中の container を調べる。
  • $ sudo docker container ls
    CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                          NAMES
    5fbdf37eb5c6   cuda_11_2_2_ssh   "/opt/nvidia/nvidia_..."   31 seconds ago   Up 30 seconds   0.0.0.0:7070->22/tcp, 0.0.0.0:8080->8888/tcp   4semi6
    
  • 後始末をする。
  • ubuntu@ip-172-30-2-68:~/customed_httpd$ docker stop 4semi6
    4semi6
    ubuntu@ip-172-30-2-68:~/customed_httpd$ docker rm 4semi6
    4semi6
    ubuntu@ip-172-30-2-68:~/customed_httpd$ docker image rm cuda_11_2_2_ssh
    Untagged: cuda_11_2_2_ssh:latest
    Deleted: sha256:8847e6dad5013239f092f6e27c94c4eedc62f17dfadbce92d8c47104c5c1249a
    Deleted: sha256:71d87bfc454f09f33daf2bd7500b83951bc930399a45bd062a97d0021118cefa
    

    venvによる環境構築

    1. 起動しているコンテナ 4semi6 内の対話環境で、以下の操作を行う。
    2. # cd
      # apt update
      # python3 -m venv ./doc/venv/imgentf2
      エラーが起きるので指示にしたがって venv をインストールする
      # apt install python3.8-venv
      
    3. 再び venv を用いて新しいpython 仮想環境を作成します。
    4.   # python3 -m venv ./doc/venv/imgentf2
      
    5. 新しいpython仮想環境に切り替えて、パッケージをインストールします。
    6.   # source ./doc/venv/imgentf2/bin/activate
        (imgentf2) #    ← 新しい仮想環境でシェルが動いているので、"pip install パッケージ名" でインストールしていきます。
      
      pip でパッケージをインストールする際に ReadTimeoutError が発生して、異常終了することがある。 その場合は、--default_timeout オプションを指定する。
      # pip --default-timeout=1000 install tensorflow==2.8.4
      # pip --default-timeout=1000 install tensorflow_addons
      # pip --default-timeout=1000 install tensorflow-datasets
      # pip --default-timeout=1000 install opencv-python
      # pip --default-timeout=1000 install dlib
      # pip --default-timeout=1000 install face_recognition
      # pip --default-timeout=1000 install tqdm matplotlib ipykernel ipywidgets packaging
      # pip --default-timeout=1000 install notebook
      # python -m ipykernel install --user --name=imgentf2
      Installed kernelspec imgentf2 in /root/.local/share/jupyter/kernels/imgentf2
      
    7. "pip install -r ファイル名" コマンドで、まとめてパッケージをインストールすることもできます
    8. たとえば Hands on Image Generation with TensorFlow 2 のgithub に置かれている https://github.com/PacktPublishing/Hands-On-Image-Generation-with-TensorFlow-2.0/blob/master/README.md では、venv を使ってpython仮想環境 imgentf2 を作成していますが、requirements.txt というファイルから一気にパッケージを バージョン指定してインストールしています。 今回は、GPUが動作するTensorFlowのバージョンに変更してインストールしてみます。

      [注意] cuda 11.2 & cuDNN 8.1 に対応していないバージョンの TensorFlow では GPU を利用できません。対応している TensorFlow は こちら にあるように2.5.0, 2.6.0, 2.7.0, 2.8.0, 2.9.0, 2.10.0 (Oct/09/2022 時点)なので、それらを使うように設定してください。

        # source ./doc/venv/imgentf2/bin/activate
        (imgentf2) # pip3 install --upgrade pip
        (imgentf2) # pip --default-timeout=1000 install -r req.txt    ← TensorFlow のバージョンを変更したもの。相当時間(30分?)がかかる。
        (imgentf2) # python -m ipykernel install --user --name=imgentf2
        (imgentf2) # jupyter nbextension enable --py widgetsnbextension   ← これはエラーになる。
      
      req.txt
      tensorflow==2.8.3
      tensorflow_addons
      tensorflow-datasets
      opencv-python
      dlib
      face_recognition
      tqdm
      matplotlib
      ipykernel
      ipywidgets
      packaging
      
    9. 必要ならば "scp -P ポート番号" コマンドで、手元のパソコンとコンテナ上のシェルとの間でファイル転送を行います。"-P" は(sshの場合とは異なり)大文字であることに注意してください。
    10.   [手元のPC上の cygwin または Mac の「ターミナル」上で]
      
          手元のパソコンからコンテナにファイル(例 src.zip)をコピーするには
            $ scp -P 707x  src.zip   root@133.99.22.13:doc
      
          コンテナから手元のパソコンにファイル(例 doc/src.zip)をコピーするには
            $ scp -P 707x root@133.99.22.13:doc/src.zip .
      
      
    11. python仮想環境の中で jupyter notebook を起動します。
    12.   (imgentf2) # jupyter notebook --allow-root
      
      外のマシンからアクセスできない。
        (imgentf2) # jupyter notebook --ip 0.0.0.0 -port 8888 --allow-root --no-browser
      
      外のマシンからアクセスできた。
    13. パスワードを指定する場合は、以下のファイルを編集する。
    14. ~/.jupyter/jupyter_notebook_config.py
      c.NotebookApp.token = 'xxx'
      
    15. 手元のパソコンでブラウザを立ち上げ "http://133.99.22.13:808x/?token=トークンの数字" にアクセスする(x は0-5の数字)。token は jupyter に表示されている。
    16. jupyter 側で「カーネルで NUMA がサポートされていない」というWarningが出るが、これは無害のようです。
    17. jupyter notebook 中で "import cv2" とすると "libGL.so.1: cannot open Error" がでる場合は、それよりも前のセルで apt をupdate してから、libgl1-mesa-dev をインストールする。
    18. [jupyter notebook のCell内での記述] ← imgentf2 環境でインストールしておいたほうが面倒がないが
      # "import cv2" causes "libGL.so.1: cannot open Error"
      ! apt-get update
      ! apt-get upgrade -y
      ! apt-get install -y libgl1-mesa-dev