hotch-potch, Note to self

いろいろ作業記録

nvidia drivers for Linux, Note to self

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.ドライバーのインストール

参考資料

なお、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対応

参考資料

インストール

#インストール準備
$ 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のサポート外になっていると、上記の表示になります。

下記から最新のドライバを入手してください。

9.そのほかの覚え書き

便利なコマンド

nvidia-smi

NVIDIAのシステム管理インターフェイス

$ 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