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のを列挙