昔Ubuntuでやった内容を改めて、最新のDebianでやったのでメモ

環境

  • Debian 12 (bookworm)
  • Docker version 25.0.3, build 4debf41
  • グラボ : GeForce GTX 980

Debianがグラフィックボードを認識しているか確認する

1
2
3
$ lspci | grep -i nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation GM204 [GeForce GTX 980] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GM204 High Definition Audio Controller (rev a1)

nouveauが有効になっていれば無効化する

nouveauは、NvidiaのLinux向けドライバをリバースエンジニアリングして開発された、フリーのNvidia向けドライバで、デスクトップ環境をインストールしている場合、入っている場合があります。

もしnouveauが有効になっていれば、これを無効化し、Nvidia製のドライバに置き換えます

1
2
3
4
5
6
7
8
9
10
11
12
13
// このコマンドを実行して何か表示されたらnouveauが有効になっている
$ lsmod | grep -i nouveau
nouveau 2433024 4
i2c_algo_bit 16384 1 nouveau
drm_display_helper 184320 1 nouveau
drm_ttm_helper 16384 1 nouveau
ttm 94208 2 drm_ttm_helper,nouveau
drm_kms_helper 204800 2 drm_display_helper,nouveau
drm 614400 8 drm_kms_helper,drm_display_helper,drm_ttm_helper,ttm,nouveau
mxm_wmi 16384 1 nouveau
video 65536 2 asus_wmi,nouveau
wmi 36864 5 video,asus_wmi,wmi_bmof,mxm_wmi,nouveau
button 24576 1 nouveau

nouveauが有効になっていた場合、以下の手順で無効化します

1
2
// ファイルが無ければ新規作成
$ sudo vim /etc/modprobe.d/blacklist-nouveau.conf

blacklist-nouveau.conf に以下の通り記述

1
2
3
# nouveauを無効にする
blacklist nouveau
options nouveau modeset=0

変更内容を反映して再起動

1
2
3
4
5
// initramfsの更新
$ sudo update-initramfs -u

// 再起動
$ sudo reboot

再起動後、もう一度 lsmod | grep -i nouveau を実行して、nouveauが無効化されているか確認する

1
$ lsmod | grep -i nouveau

Nvidia製のドライバをインストール

設定: apt/source.list

1
$ sudo vim /etc/apt/sources.list

contrib non-free を追加します

1
2
deb http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware
deb-src http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware

ドライバのインストール

1
2
3
$ LINUX_HEADERS=$(uname -r)
$ sudo apt update
$ sudo apt install -y nvidia-driver firmware-misc-nonfree linux-headers-$LINUX_HEADERS dkms

エラーになった

エラーを記録し忘れたけど、以下のパッケージのbuildエラーが出ました

1
2
nvidia-kernel-dkms
nvidia-driver

これは以下の手順で解決

apt - Debian 12 linux-image-6.1.0-18-amd64 dist-upgrade fails on nvidia GPL-incompatible module nvidia.ko uses GPL-only symbol ‘__rcu_read_lock’ - Unix & Linux Stack Exchange

  • /usr/src/nvidia-current-525.147.05/common/inc/nv-linux.h を開く
  • 2000行目に以下を追加(※最後の#endif の上)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#if defined(CONFIG_HAVE_ARCH_PFN_VALID) || LINUX_VERSION_CODE < KERNEL_VERSION(6,1,76)
# define nv_pfn_valid pfn_valid
#else
/* pre-6.1.76 kernel pfn_valid version without GPL rcu_read_lock/unlock() */
static inline int nv_pfn_valid(unsigned long pfn)
{
struct mem_section *ms;

if (PHYS_PFN(PFN_PHYS(pfn)) != pfn)
return 0;

if (pfn_to_section_nr(pfn) >= NR_MEM_SECTIONS)
return 0;

ms = __pfn_to_section(pfn);
if (!valid_section(ms))
return 0;

return early_section(ms) || pfn_section_valid(ms, pfn);
}
#endif
  • /usr/src/nvidia-current-525.147.05/nvidia/nv-mmap.c を開く
  • 578 行目の pfn_validnv_pfn_valid に置換
  • /usr/src/nvidia-current-525.147.05/nvidia/os-mlock.c を開く
  • 116 行目の pfn_validnv_pfn_valid に置換
  • 190 行目の pfn_validnv_pfn_valid に置換

インストールを再度実行

1
$ sudo apt install -y nvidia-driver firmware-misc-nonfree linux-headers-$LINUX_HEADERS dkms

再起動

1
$ sudo reboot

Nvidiaドライバが有効になっているか確認

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ nvidia-smi

Wed Feb 21 21:10:50 2024
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.147.05 Driver Version: 525.147.05 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| 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 ... On | 00000000:01:00.0 Off | N/A |
| 30% 25C P8 13W / 180W | 27MiB / 4096MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 747 G /usr/lib/xorg/Xorg 11MiB |
| 0 N/A N/A 804 G /usr/bin/sddm-greeter 11MiB |
+-----------------------------------------------------------------------------+

DockerでGPUを使用する

Nvidia Container Toolkitのインストール

rootで作業

1
2
3
4
5
6
7
8
9
10
$ sudo su -

# curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey > /etc/apt/keyrings/nvidia-docker.key
# curl -s -L https://nvidia.github.io/nvidia-docker/debian11/nvidia-docker.list > /etc/apt/sources.list.d/nvidia-docker.list
# sed -i -e "s/^deb/deb \[signed-by=\/etc\/apt\/keyrings\/nvidia-docker.key\]/g" /etc/apt/sources.list.d/nvidia-docker.list

# apt update
# apt install -y nvidia-container-toolkit

# exit

DockerでNvidiaドライバが有効になっているか確認

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$ docker run --rm --gpus all nvidia/cuda:12.1.1-runtime-ubuntu22.04 nvidia-smi
==========
== CUDA ==
==========

CUDA Version 12.1.1

Container image Copyright (c) 2016-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.

This container image and its contents are governed by the NVIDIA Deep Learning Container License.
By pulling and using the container, you accept the terms and conditions of this license:
https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license

A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience.

Wed Feb 21 12:14:59 2024
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.147.05 Driver Version: 525.147.05 CUDA Version: 12.1 |
|-------------------------------+----------------------+----------------------+
| 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 ... On | 00000000:01:00.0 Off | N/A |
| 30% 25C P8 13W / 180W | 27MiB / 4096MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+