2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ProxmoxVE9でoracle Linux10にRTX4080をパススルーする

2
Posted at

proxmoxVE9.11

ゲストos Oracle Linux10にRTX4080をパススルーする

環境

Intel Xeon E5 2696V3*2
DDR3 REG ECC
M/B:X99
Nvidia RTX4080

ホストOS: ProxmoxVE9.11

debian,KVNベースのハイパーバイザー

ゲストos: Oracle Linux10

RHELとバイナリ互換ありのRHEL互換os
使用するイメージ
OracleLinux-R10-U0-x86_64-dvd.iso

ISOダウンロード元

前提

BIOSレベル

IOMMU:Enabled
Intel VT-d/AMD-Vi:Enabled
Above 4G Decoding:Enabled
Resizable BAR:Disabled

Proxmoxホストでの設定に入る

proxmoxシェルで操作をする。

目的:IOMMU(仮想化支援機能)有効化とホストがGPUを掴まないように。

/etc/default/grubを開き編集-> "GRUB_CMDLINE_LINUX_DEFAULT="

#Intel_CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off,vesafb:off initcall_blacklist=sysfb_init"
#IF:AMD intel_iommu=on -> amd_iommu=on

カーネルモジュールの追加

# /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

ホスト側NVIDIAドライバーのブラックリスト化

# /etc/modprobe.d/blacklist.conf
blacklist nouveau
blacklist nvidia
blacklist nvidiafb

下のコマンドの結果は環境によって変わる。

root@pve01:~# lspci -nn | grep -i nvidia
#VGA
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD103 [GeForce RTX 4080] [10de:2704] (rev a1)
#Audio
02:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:22bb] (rev a1)
#xxxx:xxxxの部分をメモ
#ここでは[10de:2704と10de:22bbです

設定完了後電源を落とす。

update-grub
update-initramfs -u -k all
#NOTE
#私の環境ではZFSには触っていませんがZFS起動の場合:
#proxmox-boot-tool refresh#追加で実行
poweroff
#rebootより確実らしい。

確認する。目的:VfiO-PCi

root@pve01:~# cat /etc/default/grub | grep -i grub_cmdline_linux_default
#GRUB_CMDLINE_LINUX_DEFAULT="quiet"
#GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off,vesafb:off initcall_blacklist=sysfb_init"
root@pve01:~# lspci -nnk -s 02:00
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD103 [GeForce RTX 4080] [10de:2704] (rev a1)
        Subsystem: NVIDIA Corporation Device [10de:1795]
        Kernel driver in use: vfio-pci
        Kernel modules: nvidiafb, nouveau
02:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:22bb] (rev a1)
        Subsystem: NVIDIA Corporation Device [10de:1795]
        #Kernelのあとにnouveau や nvidia になっている場合、失敗している
        #ブラックリストかVFIOへのバインドのコマンドを入力したか確認する
        Kernel driver in use: vfio-pci
        Kernel modules: snd_hda_intel

VM設定画面

OS

GuestOS:Linux 6.x-2.6 Kernel

System

Graphic card:VirtIO-GPU
Machine:q35
BIOS:OVMF(UEFI)
Pre-Enroll keysはチェックを外すのが吉
Qemu Agent:Enable

Disks

BUS/DeviceもVirtlO Blockにする
Discard:Enable

CPU

Type:host

Memory

Ballooning:Disabled

作成後
VMの「ハードウェア」設定で、PCIデバイス(RTX 4080)を追加
Raw Device: リストから(RTX 4080) を選択

All Functions: チェックを入れる

grubの画面でEキーを押す
linuxefi ... rd.live.check quiet と書かれている行の末尾に [半角スペース]+inst.textを追記
Ctrl + xで起動する

なぜこんなことをするのか

VMは「GUIでインストール画面を出そうとしてるがインストーラーがguiを出せずにエラーをだしてる。
テキストモードでインストールを続行する

RuntimeError: Gtk couldn't be initialized.

Screenshot From 2026-06-05 13-50-13.png

  1. graphical mode
  2. text mode
    2を押す

Installationの画面になったら

5)を選択する。全問Cで続行
[!]が[x]になればいおけ

4)を選択.今回はGPUサーバー用途のため2 serverを選択
software選択画面
2,4,に[X]つける
c続行

NOTE
4ソフトウェア選択後に3)で[!]とでたりするが
その都度3)をC連打すれば治る。
#依存関係チェックの再走で一時的に状態が崩れて見えるだけらしい...
#詳しくはわからないが正常にインストールが完了したのでよしとする。

ssh

さすがにコンソールで手打ちはきついので、
クライアントからssh接続で操作する

gpuが認識されているか

user01@localhost:~$ lspci -nnk | grep -i nvidia -A 3
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD103 [GeForce RTX 4080] [10de:2704] (rev a1)
	Subsystem: NVIDIA Corporation Device [10de:1795]
	Kernel modules: nvidiafb
01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:22bb] (rev a1)
	Subsystem: NVIDIA Corporation Device [10de:1795]
	Kernel driver in use: snd_hda_intel
	Kernel modules: snd_hda_intel
05:01.0 PCI bridge [0604]: Red Hat, Inc. QEMU PCI-PCI bridge [1b36:0001]

ドライバーのインストール

sudo dnf install -y kernel-devel kernel-headers gcc make dkms
sudo dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel9/x86_64/cuda-rhel9.repo
sudo dnf install -y nvidia-driver nvidia-utils
sudo reboot

コンテナでGPUを使うための設定

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
#GPG署名のセキュリティポリシーでエラーになるため --nogpgcheckをつける
sudo dnf install -y nvidia-container-toolkit --nogpgcheck

DKMSでカーネルモジュールを強制ビルドする

sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
sudo dnf makecache
#DKMSの最新版がないため。epel経由
sudo dnf install -y kernel-uek-devel-$(uname -r) gcc make dkms --nogpgcheck
#NVIDIAドライバーをDKMSで再構築
sudo dnf remove -y nvidia-driver
sudo dnf install -y nvidia-driver --nogpgcheck
sudo dkms autoinstall

ビルドしたドライバーの確認

#ドライバーのロード
user01@localhost:~$ find /lib/modules/$(uname -r) -name "nvidia.ko*"
/lib/modules/6.12.0-100.28.2.el10uek.x86_64/extra/nvidia.ko.xz
sudo modprobe nvidia
sudo modprobe nvidia-uvm
#ドライバーが認識されているか
user01@localhost:~$ lsmod | grep nvidia
nvidia_uvm           2514944  0
nvidia_drm            163840  0
nvidia_modeset       1929216  1 nvidia_drm
nvidia              17977344  2 nvidia_uvm,nvidia_modeset
video                  81920  1 nvidia_modeset
drm_ttm_helper         16384  4 bochs,drm_vram_helper,nvidia_drm
#仕上げ
dnf provides */nvidia-smi
#NOTE:nvidia-smiがどこにもない
# -> y
sudo dnf reinstall -y nvidia-driver-cuda nvidia-driver-common nvidia-driver-libs --nogpgcheck
#sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
#最後の一行にINFO[0000] Generated CDI spec with version 0.7.0 とでれればok
#nvidia-smiはあきらめる
#コンテナ内からGPUが認識されてCUDAを叩ければいいわけで...
user01@localhost:~$ nvidia-ctk cdi list
INFO[0000] Found 3 CDI devices                          
nvidia.com/gpu=0
nvidia.com/gpu=GPU-748f5346-2568-8e89-ead1-06789073396f
nvidia.com/gpu=all

#/dev/nvidia0がコンテナ内に見えていることを確認
user01@localhost:~$podman run --rm --device nvidia.com/gpu=all --security-opt=label=disable docker.io/nvidia/cuda:12.6.0-base-ubi9 ls -l /dev/nvidia0
crw-rw-rw-. 1 nobody nobody 195, 0 Jun  5 05:38 /dev/nvidia0

CUDA ライブラリがコンテナから正しくロードできるか確認

user01@localhost:~$ podman run --rm --device nvidia.com/gpu=all --security-opt=label=disable docker.io/nvidia/cuda:12.6.0-runtime-ubi9 nvidia-smi
Trying to pull docker.io/nvidia/cuda:12.6.0-runtime-ubi9...
Getting image source signatures
Copying blob d339273dfb7f skipped: already exists  
Copying blob e2ed5631241b skipped: already exists  
Copying blob 7cc3ecb669e0 skipped: already exists  
Copying blob 49d0e9e0f4c3 skipped: already exists  
Copying blob aba2f4670080 skipped: already exists  
Copying blob e70571d6e499 done   | 
Copying blob 1ae92392313d done   | 
Copying blob 517c9b642bd1 done   | 
Copying blob cc296d75b612 skipped: already exists  
Copying config 6f9a3c10e2 done   | 
Writing manifest to image destination

==========
== CUDA ==
==========

CUDA Version 12.6.0

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.

WARNING: The NVIDIA Driver was not detected.  GPU functionality will not be available.
   Use the NVIDIA Container Toolkit to start this container with GPU support; see
   https://docs.nvidia.com/datacenter/cloud-native/ .

/opt/nvidia/nvidia_entrypoint.sh: line 67: exec: nvidia-smi: not found

おつかれさまでした!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?