Docker Compose
dockerでcudaコンテナの作成
cuda の GPG key 登録
- 
古いキーの削除
$ sudo apt-key del 7fa2af80 - 
ヘルパーパッケージを利用したキーの登録 nvidia が提供している、nvidia リポジトリ用の新しい署名キーのインストールを自動化する新しいヘルパーパッケージを利用して鍵を登録
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb $ sudo dpkg -i cuda-keyring_1.0-1_all.deb※
ubuntu2204とx86_64は該当のものに書き換える - 
remove の仕方 ※インストール時にターミナルに表示された文
A deprecated public CUDA GPG key appear to be installed. To remove the key, run this command: sudo apt-key del 7fa2af80 
結局必要だったのかわからなかったけどとりあえずやったこと
Setting up NVIDIA Container Toolkit
- 
パッケージリポジトリと GPG key のセットアップ
$ 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 - 
nvidia-docker2パッケージのインストール$ sudo apt-get update $ sudo apt-get install -y nvidia-docker2 - 
Docker demon のリスタート
$ sudo systemctl restart docker - 
ベースとなるCUDAコンテナを実行することによって、動作するセットアップをテスト
$ sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi以下のような出力ならOK!
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 | |-------------------------------+----------------------+----------------------+ | 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 Tesla T4 On | 00000000:00:1E.0 Off | 0 | | N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+ 
containerd
- 
コンテナエンジンとしてcontainerdをシステムにインストールするために、いくつかの前提モジュールをインストール
$ sudo modprobe overlay \ && sudo modprobe br_netfilter - 
これらを確実に持続させることができる
$ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF - 
apt が HTTPS 上でリポジトリを使用できるようにするためのパッケージをインストール
$ sudo apt update $ sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release - 
リポジトリとGPG key の追加
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/ docker-archive-keyring.gpg $ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null※1回やってたらいらないかも…
 
Dockerfile and docker-compose.yml の作成
docker compose と Dockerfileを使う場合
コンテナ作成後の設定
- 鍵の作成
 - ssh server の起動
$ bash ./sterter.sh - vscodeのsettings.jsonとkeyboard.jsonの設定
 - rootのパスワード設定
 
Dockerfile のみの場合
trouble
apt が使えない…
コンテナにはproxyを通してたけどaptに通すのを忘れてた…
Dockerfile の apt update の前に以下の文を追加
RUN echo 'Acquire::http::proxy "http://proxy.cc.yamaguchi-u.ac.jp:8080"; \
Acquire::https::proxy "https://proxy.cc.yamaguchi-u.ac.jp:8080";' > /etc/apt/apt.conf
nvidia gpg key の更新
$ sudo apt-key del 7fa2af80
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-keyring_1.0-1_all.deb
$ sudo dpkg -i cuda-keyring_1.0-1_all.deb 
$ sudo apt update
cuda version を下げるとapt update が通らなくなる
RUN apt-get update && apt-get install -y \
  bzr \
  cvs \
  git \
  mercurial \
  subversion
みたいな感じで update と install をつなげてみたけどだめだった…
nvidiaのドライバが使えなくなった…
- nvidia driverのバージョンを落としてインストールし直す
 - nvidia container toolkitをインストール
 - proxy設定
 
参照
- Dockerhub nvidia/cuda
 - NVIDA Installation Guide
 - 【Docker】GPU が使える Jupyter Notebook 環境を最速で用意する
 - NVIDIA Docker って今どうなってるの? (19.11版)
 - 西井先生のページ
 - NVIDIA Container Toolkit (NVIDIA Docker) は何をしてくれるか
 - Dockerfileのプロキシ設定
 - コンテナで Hello world
 - docker上でjupyter-notebookを使用する方法
 - NVIDIA DockerイメージのGPGキー更新に関する備忘録
 - NVIDIAのリポジトリのキーが更新されました。(2022年4月28日)
 - Dockerfile のベストプラクティス
 - docker-composeで作成されるものの名前を明示的に指定する方法
 
CudaをDockerで使用する際のDockerfileの作成
- 
次のようなDockerfileを作成する
FROM nvidia/cuda:11.4.0-cudnn8-devel-ubuntu20.04 USER root COPY ./requirements.txt /tmp WORKDIR /code # ENV DEBIAN_FRONTEND noninteractive ENV https_proxy "http://<proxy server>" ENV https_proxy "http://<proxy server>" RUN echo 'Acquire::http::proxy "http://<proxy server>"; \ Acquire::https::proxy "https://<proxy server>";' > /etc/apt/apt.conf RUN apt-get update && apt-get install -y \ curl \ python3 \ python3-distutils RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python3 get-pip.py RUN pip install -r /tmp/requirements.txt- proxy 設定は以下のようにする
ENV https_proxy "http://~~~" ENV http_proxy "http://~~~" - **cuda の version を下げると 
apt updateが通らなくなったので、RUN apt-get update以下はコメントアウトして、 pythonなどはコンテナ作成後にアタッチしてインストールした… 
 - proxy 設定は以下のようにする
 - 
同じ階層に
requirememts.txtを作成し、 Dockerfile で呼び出せるようにする。 このファイルには必要なパッケージを記入しておくjupyter jupyterlab numpy pandas matplotlib scikit-learn scikit-image scipy torch torchvision tqdm albumentations tensorflow-gpu Pillow opencv-python - 
作成したディレクトリ構造は次のようになる
$ tree my-nvidia-cuda/ my-nvidia-cuda/ ├── Dockerfile ├── requirements.txt └── src └── test.ipynb - 
Docker イメージをビルド
$ cd my-nvidia-cuda $ docker build . -t <image name> - 
Docker コンテナを起動
$ sudo docker run -it --gpus=all -v "$PWD":/code -p 8888:8888 --name <container name> <image name> /bin/bash--gpusはgpuのを列挙