NVIDIAのGPUが有効なLinuxマシンでdocker-composeからGUIアプリケーションを起動するためにいろいろ調べていたところ、GPUの指定が必要で、それには指定方法が色々あることがわかりました。
docker-composeからNVIDIAのGPUを使う [2021年5月版]
docker-composeからNVIDIA GPUを使うための方法を2021年5月時点でまとめた調査メモ。nvidia-docker2の現状とdocker-composeバージョン別の設定方法(runtimeとdevices/capabilitiesの使い分け)を解説。
今回はRVizを起動しようとしていたのですが、上記だけではなく、更にNVIDIA_VISIBLE_DEVICESとNVIDIA_DRIVER_CAPABILITIESの環境変数を設定する必要もありました。
動いた例をメモしておきます。
起動方法
docker-compose upする前にGUIアプリケーションを使うためにxhostコマンドでX11転送を許可する必要があります。
(docker-compose.yamlの中身については本記事の「docker-composeの設定」を参照)
手っ取り早くやるにはlocalhostからの通信を全部一旦許可します(使い終わったらすぐに戻します)。
$ xhost local:non-network local connections being added to access control listというメッセージが返ってきたらOKです。
以下のコマンドで許可されているアクセスコントロールリストを確認できます。
$ xhost次に次のコマンドでdocker-compose.yamlからDockerコンテナを起動すればRVizが起動します。
$ docker-compose up終了時
localhostからの通信を全部一旦許可していたので、もとに戻しておきます。
$ xhost -local:docker-composeの設定
docker-compose version 1.27
環境
$ docker-compose --version --shortdocker-compose version 1.27.4, build 40524192
$ docker --versionDocker version 20.10.4, build d3cb89e
$ dpkg -l | grep nvidia-docker2ii nvidia-docker2 2.6.0-1 all nvidia-docker CLI wrapper
$ dpkg -l | grep nvidia-container-toolkitii nvidia-container-toolkit 1.5.0-1 amd64 NVIDIA container runtime hook
$ nvidia-smi | head -n 4Sun May 23 18:43:41 2021+-----------------------------------------------------------------------------+| NVIDIA-SMI 460.39 Driver Version: 460.39 CUDA Version: 11.2 ||-------------------------------+----------------------+----------------------+docker-compose.yaml
services: test: image: osrf/ros:melodic-desktop-full command: [ "roslaunch", "urdf_tutorial", "display.launch" ] runtime: nvidia environment: DISPLAY: :1 NVIDIA_VISIBLE_DEVICES: all NVIDIA_DRIVER_CAPABILITIES: all volumes: - "/tmp/.X11-unix:/tmp/.X11-unix:rw"docker-compose version 1.29
環境
$ docker-compose --version --shortdocker-compose version 1.29.2, build 5becea4c
$ docker --versionDocker version 20.10.4, build d3cb89e
$ dpkg -l | grep nvidia-docker2ii nvidia-docker2 2.6.0-1 all nvidia-docker CLI wrapper
$ dpkg -l | grep nvidia-container-toolkitii nvidia-container-toolkit 1.5.0-1 amd64 NVIDIA container runtime hook
$ nvidia-smi | head -n 4Sun May 23 18:43:41 2021+-----------------------------------------------------------------------------+| NVIDIA-SMI 460.39 Driver Version: 460.39 CUDA Version: 11.2 ||-------------------------------+----------------------+----------------------+docker-compose.yaml
services: test: image: osrf/ros:melodic-desktop-full command: [ "roslaunch", "urdf_tutorial", "display.launch" ] environment: DISPLAY: :1 NVIDIA_VISIBLE_DEVICES: all NVIDIA_DRIVER_CAPABILITIES: all volumes: - "/tmp/.X11-unix:/tmp/.X11-unix:rw" deploy: resources: reservations: devices: - capabilities: [gpu]今回の件は詳しくは以下のIssueにも記載しました。
ROS in docker: rviz::RenderSystem: error creating render window: OGRE EXCEPTION(3:RenderingAPIException) · Issue #1438 · NVIDIA/nvidia-docker
Host Machine Version: native Ubuntu 18.04.5 LTS, kernel 5.4.0-54-generic Docker Version: 19.03.14, build 5eb3275d40 ROS Version: Melodic xxx@xxx-Ubuntu18_04:~$ rviz QStandardPaths: XDG_RUNTIME_DIR ...
関連記事
- docker-composeからNVIDIAのGPUを使う [2021年5月版]docker-composeからNVIDIA GPUを使うための方法を2021年5月時点でまとめた調査メモ。nvidia-docker2の現状とdocker-composeバージョン別の設定方法(runtimeとdevices/capabilitiesの使い分け)を解説。
- (Updated )ROS/ROS2のGUIをWebブラウザ経由でお手軽に試せるDockerfileを公開しましたROS/ROS 2のGUIをWebブラウザ経由でお手軽に試せるDockerfileとDockerイメージを公開しています。その特徴と使用方法を紹介します。
- [2020年1月版] ROS2の環境構築方法この記事は2019年4月に書いた「[[2019年4月版] ROS2の環境構築方法](/archives/2150)」の改訂版です。
- (Updated )[2019年4月版] ROS2の環境構築方法[2020年2月18日追記] 2020年1月版を公開しています。
- (Updated )Raspberry Pi 2にUbuntu 14.04をインストールする方法RaspberryPi2にのUbuntu14.04(Trusty)をインストールしてセットアップまで行ったのでそのメモ。