さて、Docker,docker-compose、CI/CDパイプラインの構築と学んできたので、
少し小難しい話もしていこうと思います。
皆さんはJetsonやGPU付きPCでDocker環境でGPU指定したい時、docker runで『– – gpus all』としますよね?
これをDocker-compose.ymlにコーディングする際、どう書けばいいんだろう?と悩んだことはありませんか?今回はそのやり方について解説していこうと思います。
Contents
docker-compose v1.28以前の方法
nvidia-container-runtimeをインストール
実はdocker-composeでは、docker runの『– –gpus all』に対応したコマンドがまだ実装されていません。(2021/6現在)
👇なので、『– –runtime nvidia』オプションを指定できるようnvidia-container-runitimeをインストールします。
1 2 |
<Command> sudo apt install nvidia-container-runtime |
/etc/docker/daemon.jsonに設定ファイルを作成
👇次に”.etc/dokcer/daemon.json”ファイルを下記のように書き換えます(デフォルトでこうなっていたらOK)
1 2 3 4 5 6 7 8 9 |
</etc/docker/daemon.json> { "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } } } |
docker-compose.ymlの設定
よし、最後にdocker-compose.ymlファイルを書き換えていこう。
ポイントは以下の2つのみです、その他のコードは一例ですので参考までに。
✅ runtime: nvidia
✅ environment: -NVIDIA_VISIBLE_DEVICES=all – NVIDIA_DRIVER_CAPABILITIES=all
を追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<docker-compose.yml> version: '2.3' services: app: build: . runtime: nvidia environment: - NVIDIA_VISIBLE_DEVICES=all - NVIDIA_DRIVER_CAPABILITIES=all volumes: - .:/workdir working_dir: /workdir tty: true |
docker-compose v1.28以降の方法
docker-compose.ymlの設定(これだけ)
これだけでgpu起動できるようになったみたいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<docker-compose.yml> version: '2.3' services: app: deploy: // deploy以降を追加 resources: reservations: devices: - driver: nvidia - count: 1 // GPUの枚数 - capabilities: [gpu] volumes: - .:/workdir working_dir: /workdir tty: true |
docker-composeを起動し、GPUが作動しているか確認
👇docker-composeをUpしていこう
1 2 3 4 5 6 7 8 9 |
<Command> # docker-compseにdettachモードで起動 [~/<dockerfile_dir>] $ docker-compose up -d # bashでコンテナ内に入る [~/<dockerfile_dir>] $ docker-compose exec app bash root@68e301b066de:/work# python3 >>> import tensorflow as tf >>> tf.test.is_gpu_available() # gpuが起動しているか確認 True |
⚠️補足(docker-composeの起動について)
docker-compose v2.X以降からはdocker”-“composeのダッシュ(-)が不要になったみたい
v1.X: docker-compose up -d –build
v2.X: docker compose up -d –build
☝️気になる方は確認してみてね
以上で、docker runでのGPUでの起動が実現したと思います。
今回はdockerコマンド→docker-compose.yml記述の一例ですがこれ以外にも
「USBカメラの接続方法」や「ポート指定、–net host指定」や「ホスト↔︎Docker間のディスプレイ共有」などやりたいことはたくさんあるかと思います。
これからもそれらの情報をどんどん発信していきますので、このブログからどんどん吸収していって下さい。
今回はこの辺で、ばいばい👋
コメントを残す