【Docker23】docker-composeでGPU指定する方法

さて、Docker,docker-compose、CI/CDパイプラインの構築と学んできたので、
少し小難しい話もしていこうと思います。

皆さんはJetsonやGPU付きPCでDocker環境でGPU指定したい時、docker runで『– – gpus all』としますよね?
これをDocker-compose.ymlにコーディングする際、どう書けばいいんだろう?と悩んだことはありませんか?今回はそのやり方について解説していこうと思います。

docker-compose v1.28以前の方法

nvidia-container-runtimeをインストール

実はdocker-composeでは、docker runの『– –gpus all』に対応したコマンドがまだ実装されていません。(2021/6現在)
👇なので、『– –runtime nvidia』オプションを指定できるようnvidia-container-runitimeをインストールします。

/etc/docker/daemon.jsonに設定ファイルを作成

👇次に”.etc/dokcer/daemon.json”ファイルを下記のように書き換えます(デフォルトでこうなっていたらOK)

docker-compose.ymlの設定

よし、最後にdocker-compose.ymlファイルを書き換えていこう。
ポイントは以下の2つのみです、その他のコードは一例ですので参考までに。
runtime: nvidia
environment: -NVIDIA_VISIBLE_DEVICES=all – NVIDIA_DRIVER_CAPABILITIES=all
を追加

docker-compose v1.28以降の方法

docker-compose.ymlの設定(これだけ)

これだけでgpu起動できるようになったみたいです。

docker-composeを起動し、GPUが作動しているか確認

👇docker-composeをUpしていこう

⚠️補足(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間のディスプレイ共有」などやりたいことはたくさんあるかと思います。

これからもそれらの情報をどんどん発信していきますので、このブログからどんどん吸収していって下さい。

今回はこの辺で、ばいばい👋