1.はじめに
ROS開発において、Ununtu Linux & GPU & Dockerを使った環境を準備するときに、 ハマった内容について、成否関わらずメモします。
OSバージョン
$ cat /etc/os-release PRETTY_NAME="Ubuntu 22.04.4 LTS" $ uname -a Linux devros 6.5.0-27-generic #28~22.04.1-Ubuntu
2.ドライバーのインストール
参考資料
- ubuntuにCUDA、nvidiaドライバをインストールするメモ #Ubuntu - Qiita
- Ubuntu 22.04 LTSにてDocker内でGPUを動かすための環境構築手順 #Docker - Qiita
なお、aptインストールパッケージは、Ubuntuの設定で「プロプライエタリなドライバを許可」にしている状態とします。
作業例
(失敗)NVIDIA NVS 310
結論、サポート外でインストール不可
GPU型番確認
$ lspci | grep -i nvidia 02:00.0 VGA compatible controller: NVIDIA Corporation GF119 [NVS 310] (rev a1) 02:00.1 Audio device: NVIDIA Corporation GF119 HDMI Audio Controller (rev a1)
推奨パッケージを教えてもらう
$ ubuntu-drivers devices == /sys/devices/pci0000:00/0000:00:02.0/0000:02:00.0 == modalias : pci:v000010DEd0000107Dsv000010DEsd00001154bc03sc00i00 vendor : NVIDIA Corporation model : GF119 [NVS 310] driver : nvidia-driver-390 - distro non-free recommended driver : xserver-xorg-video-nouveau - distro free builtin
$ sudo apt install nvidia-driver-390 -y ・・・ nvidia-dkms-390 (390.157-0ubuntu0.22.04.2) を設定しています ... update-initramfs: deferring update (trigger activated) INFO:Enable nvidia DEBUG:Parsing /usr/share/ubuntu-drivers-common/quirks/dell_latitude DEBUG:Parsing /usr/share/ubuntu-drivers-common/quirks/put_your_quirks_here DEBUG:Parsing /usr/share/ubuntu-drivers-common/quirks/lenovo_thinkpad Removing old nvidia-390.157 DKMS files... Deleting module nvidia-390.157 completely from the DKMS tree. Loading new nvidia-390.157 DKMS files... Building for 6.5.0-27-generic Building for architecture x86_64 Building initial module for 6.5.0-27-generic Error! Bad return status for module build on kernel: 6.5.0-27-generic (x86_64) Consult /var/lib/dkms/nvidia/390.157/build/make.log for more information. dpkg: パッケージ nvidia-dkms-390 の処理中にエラーが発生しました (--configure): installed nvidia-dkms-390 package post-installation script subprocess returned error exit status 10 dpkg: 依存関係の問題により nvidia-driver-390 の設定ができません: nvidia-driver-390 は以下に依存 (depends) します: nvidia-dkms-390 (<= 390.157-1) ...しかし: パッケージ nvidia-dkms-390 はまだ設定されていません。 nvidia-driver-390 は以下に依存 (depends) します: nvidia-dkms-390 (>= 390.157) ...しかし: パッケージ nvidia-dkms-390 はまだ設定されていません。 dpkg: パッケージ nvidia-driver-390 の処理中にエラーが発生しました (--configure): 依存関係の問題 - 設定を見送ります エラーメッセージは前の失敗から続くエラーであることを示しているので、レポートは書き込まれません。 initramfs-tools (0.140ub untu13.4) のトリガを処理しています ... update-initramfs: Generating /boot/initrd.img-6.5.0-27-generic 処理中にエラーが発生しました: nvidia-dkms-390 nvidia-driver-390 E: Sub-process /usr/bin/dpkg returned an error code (1)
このエラーに対する見解が、"フォーラム"にあります。
installed nvidia-dkms-390 package post-installation script subprocess returned error exit status 10
カーネル6.5ではすでにサポートされてないので、古いカーネルに戻る必要があります・・・ので、実質、使用不可能です。
3.DockerのGPU対応
参考資料
- https://qiita.com/cpx/items/8069cb7c9896e16febcf#6-nvidia-container-toolkit%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
- https://skmkuma.com/%EF%BC%9Cdocker%EF%BC%9Edocker-compose%E3%81%A7gpu%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/
- https://jskangaroo.hatenablog.com/entry/2021/08/17/150002
インストール
#インストール準備 $ 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/stable/deb/nvidia-container-toolkit.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 $ sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list $ sudo sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list #インストール $ sudo apt-get update $ sudo apt-get install -y nvidia-container-toolkit $ sudo nvidia-ctk runtime configure --runtime=docker #docker再起動 $ sudo systemctl restart docker #お試し起動 # イメージはこちらから選ぶ:https://hub.docker.com/r/nvidia/cuda $ docker run --rm --gpus all nvidia/cuda:11.2.2-base-ubuntu20.04 nvidia-smi $ docker run --rm --gpus all nvcr.io/nvidia/cuda:11.7.1-cudnn8-devel-ubuntu22.04 bash -c "nvidia-smi; nvcc -V" ========== == CUDA == ========== CUDA Version 11.7.1 … Wed Apr 19 10:31:20 2024 +------------------------------------------------------------------------------+ | NVIDIA-SMI 535.171.04 Driver Version: 535.171.04 CUDA Version: 12.2 | |--------------------------------+----------------------+----------------------+ | 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 NVIDIA GeForce GTX 1060 6GB Off | 00000000:02:00.0 On | N/A | | 29% 53C P2 24W / 120W | 447MiB / 6144MiB | 0% Default | | | | N/A | +-----------------------------------------+----------------------+-------------+ +------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |==============================================================================| +------------------------------------------------------------------------------+ nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2022 NVIDIA Corporation Built on Wed_Jun__8_16:49:14_PDT_2022 Cuda compilation tools, release 11.7, V11.7.99 Build cuda_11.7.r11.7/compiler.31442593_0
docker起動
dockerコマンド
docker run --rm --gpus all …
docker-compose
version: '3' services: service-name-hoge: image: hogehogeimage … # GPU対応 runtime: nvidia # 環境変数 environment: … # GPU対応環境変数 - NVIDIA_VISIBLE_DEVICES=all - NVIDIA_DRIVER_CAPABILITIES=all …
やっちゃダメな話・snap版DockerはGPU対応できません
うっかりsnapコマンドからインストールした際は、速やかにアンインストールしましょう。
$ sudo snap remove docker --purge
Docker公式のインストール手順はこちらです。
お試しが起動できないとき
$ docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu20.04 nvidia-smi runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy' nvidia-container-cli: requirement error: unsatisfied condition: cuda>=12.4, please update your driver to a newer version, or use an earlier cuda container: unknown.
GPUのドライバが、CUDAのサポート外になっていると、上記の表示になります。
下記から最新のドライバを入手してください。
番外編・Windows版の場合のGPU対応
9.そのほかの覚え書き
便利なコマンド
nvidia-smi
$ nvidia-smi Wed Apr 17 19:45:42 2024 +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.171.04 Driver Version: 535.171.04 CUDA Version: 12.2 | |-----------------------------------------+----------------------+----------------------+ | 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 NVIDIA GeForce GTX 1060 6GB Off | 00000000:02:00.0 On | N/A | | 0% 49C P2 23W / 120W | 382MiB / 6144MiB | 0% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | 0 N/A N/A 1089 G /usr/lib/xorg/Xorg 91MiB | | 0 N/A N/A 1259 C+G ...libexec/gnome-remote-desktop-daemon 144MiB | | 0 N/A N/A 1312 G /usr/bin/gnome-shell 131MiB | | 0 N/A N/A 4100 G ...erProcess --variations-seed-version 8MiB | +---------------------------------------------------------------------------------------+
ドライバが入ってないと下記の結果になります。
$ nvidia-smi NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
GUI版
$ nvidia-settings