2023/08/18 Updated by
Custom Image (GPU) of Docker on Windows 11
[Up]
Nvidia-Container-Toolkit の setup
- Windows10 上に GPU を使う Docker Desktop がインストールされていて、コンテナ内でGPUが使える状況である。
docker: Install on Windows10 GPU
docker: venvで操作する jupyter 環境を作成する
- 以下の情報を参考にすると、docker コンテナの中で GPU を使う場合は Nvidia-Container-Toolkit を使う方法があるようだ
WSL2+Docker Desktop で Pytorch の GPU 環境を構築する方法
- NVIDIA Container Toolkit をダウンロードする。
github
nvidia-docker-main.zip
- docker ホスト側でコマンドを順に実行する。
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 を再起動した。
- インストールする
sudo apt-get install -y nvidia-docker2
- OSにインストールされているCUDA (11.2)のバージョンに合うイメージをダウンロードする。
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
- コンテナを生成する。
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 |
+---------------------------------------------------------------------------------------+
- コンテナを生成して、いろいろ調べる。
$ 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
- ローカルに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 [email protected]
[email protected]'s password: Dockerfileで指定したパスワード
Windows 11 (GPU)上のDocker用のカスタムイメージを調査する
- イメージの履歴を表示してみる。
履歴を表示する |
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
|
- イメージの履歴を --no-truc オプションを指定して表示する。
履歴を表示する(--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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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による環境構築
- 起動しているコンテナ 4semi6 内の対話環境で、以下の操作を行う。
# cd
# apt update
# python3 -m venv ./doc/venv/imgentf2
エラーが起きるので指示にしたがって venv をインストールする
# apt install python3.8-venv
- 再び venv を用いて新しいpython 仮想環境を作成します。
# python3 -m venv ./doc/venv/imgentf2
- 新しいpython仮想環境に切り替えて、パッケージをインストールします。
# 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
- "pip install -r ファイル名" コマンドで、まとめてパッケージをインストールすることもできます
たとえば
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
|
- 必要ならば "scp -P ポート番号" コマンドで、手元のパソコンとコンテナ上のシェルとの間でファイル転送を行います。"-P" は(sshの場合とは異なり)大文字であることに注意してください。
[手元のPC上の cygwin または Mac の「ターミナル」上で]
手元のパソコンからコンテナにファイル(例 src.zip)をコピーするには
$ scp -P 707x src.zip [email protected]:doc
コンテナから手元のパソコンにファイル(例 doc/src.zip)をコピーするには
$ scp -P 707x [email protected]:doc/src.zip .
- python仮想環境の中で jupyter notebook を起動します。
(imgentf2) # jupyter notebook --allow-root
外のマシンからアクセスできない。
(imgentf2) # jupyter notebook --ip 0.0.0.0 -port 8888 --allow-root --no-browser
外のマシンからアクセスできた。
- パスワードを指定する場合は、以下のファイルを編集する。
~/.jupyter/jupyter_notebook_config.py
c.NotebookApp.token = 'xxx'
- 手元のパソコンでブラウザを立ち上げ "http://133.99.22.13:808x/?token=トークンの数字" にアクセスする(x は0-5の数字)。token は jupyter に表示されている。
- jupyter 側で「カーネルで NUMA がサポートされていない」というWarningが出るが、これは無害のようです。
- jupyter notebook 中で "import cv2" とすると "libGL.so.1: cannot open Error" がでる場合は、それよりも前のセルで apt をupdate してから、libgl1-mesa-dev をインストールする。
[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