docker-composeからNVIDIAのGPUを使うためにいろいろ調べてみたところ、NVIDIA Docker2やら何やらいろんな情報が錯綜しているので現状を調べてみた記録です。
※この記事は2021年5月23日現在の情報です。最新情報については公式ドキュメント等を参照してください。
DockerでNVIDIAのGPUを使う方法
現時点ではDockerをインストールし、その後nvidia-docker2をインストールするのが良さそうです。
Docker 19.03以降ではGPUをサポートするようになり、DockerのインストールとNVIDIA Container Toolkitをインストールすることで、dockerコマンドのオプションからGPUを呼び出せるようになるようです。
Docker Engine 19.03 release notes
Disable IPv6 Router Advertisements to prevent address spoofing. CVE-2020-13401
container: --gpus support by tiborvass · Pull Request #1714 · docker/cli
Signed-off-by: Tibor Vass tibor@docker.com Closes #1200 Dependent on moby/moby#38828 Most common usecase: docker run --gpus all Otherwise can be further specified: docker run --gpus 2,driver=nvidia...
また、nvidia-docker2をインストールすればnvidia-container-toolkitも自動でインストールされるようなので、現時点ではDockerをインストールし、その後nvidia-docker2をインストールするのが良さそうです。
NVIDIA Docker って今どうなってるの? (20.09 版)
※ この記事は以前私が Qiita に書いたものを、現状に合わせて更新したものです。(内容、結構変わりました)

最も詳しいと思われる上記のNVIDIA Japan公式のMediumの記事がNVIDIAのGPUをDockerから使う際に参考になると思います。
docker-composeからNVIDIAのGPUを使う方法
- docker-compose 1.27までの場合
runtime: nvidiaを指定するruntimeを指定できるのはdocker-composeの2.3以降のバージョンのようです(参考)
- docker-compose 1.28以降の場合
devices:とcapabilities:を指定する、またはruntime: nvidiaを指定する
ようです(参考)。
※Docker 19.03以降+NVIDIA Container Toolkitをインストールしていて、Rootlessモードを使っていない前提
参考
Run Docker Compose services with GPU access
Learn how to configure Docker Compose to use NVIDIA GPUs with CUDA-based containers
Support for NVIDIA GPUs under Docker Compose · Issue #6691 · docker/compose
Under Docker 19.03.0 Beta 2, support for NVIDIA GPU has been introduced in the form of new CLI API --gpus. docker/cli#1714 talk about this enablement. Now one can simply pass --gpus option for GPU-...
Rootless-Dockerのdocker-composeでGPUを使おう - チラシの裏からうっすら見える外枠の外のメモ書き
今まで気づけていませんでしたが、どうやらRootless-Dockerを使っている場合はdocker-composeでGPUを簡単には使用できないようです。 新しいDockerでは、オプション--gpusをつけることでGPU(正確にはNVIDIAのGPU)を使用することができるようになっています。 medium.com ですが、docker-composeはまだその仕様を取り込んでいないようで、d
関連記事
- docker-composeからRVizを起動するNVIDIAのGPUが有効なLinux環境でdocker-composeからRVizを起動するための設定方法。NVIDIA_VISIBLE_DEVICESとNVIDIA_DRIVER_CAPABILITIESの環境変数設定とdocker-compose.yamlの書き方をdocker-composeバージョン別にまとめた。
- (Updated )Ubuntu 20.04と最新Intel CPUでRVizを動かすDocker設定最近ROSの開発に使用するPCを新しくしました。そこでRViz/RViz2などのOpenGLを使うソフトウェア周りでトラブルがあったので、その内容と対処方法を紹介します。
- (Updated )osrf/rockerを使ってPC内に複数のROS distroの開発環境を整える方法Dockerを使ってGUIアプリケーションを起動するには、起動にちょっと工夫が必要だったり一筋縄では行かないことが多いです。 osrf/rockerというツールを使うと一筋縄では行かない部分を少しだけ簡単にできるので、その使い方を紹介します。
- TP-Link AC600 Archer T2U NanoをUbuntu 18.04で使うTP-Link AC600 Archer T2U NanoをUbuntu 18.04で動かすためのドライバインストール手順。aircrack-ng/rtl8812auリポジトリを使うことで解決した方法と、うまくいかなかった方法を記録。
- (Updated )メモリ2GB版Jetson NanoでDocker内のROSを使うまでJetson Nano 2GB Developer Kit(メモリ2GB版Jetson Nano)でROSインストール済みのDockerイメージを用意して、コンテナ内のROSを使うまでをメモします。