🙆

ProxmoxでUbuntu VMにGPUパススルーを行う

に公開

ProxmoxホストがGPUを握らないようにする

以下の設定は次の記事を参考にした。
実際には記事通りだとうまくいかない点があったため、全ての手順を説明している。
https://qiita.com/boxfish_jp/items/ea415296c2a79ef5ea0a
https://www.technicalife.net/proxmox-gpu-device-passthrough/
https://blog.systemworks.co.jp/?p=2155

VMにGPUのパススルーするには、Proxmoxホストの管理下からGPUを除外する必要がある。
Proxmoxホストを再起動後、Del連打でBIOSに入り、CPUのIntel VT-d Techが有効化されているか確認する。
MSI製マザーボードだと次の手順で確認できる。

  • F7でAdvanced Modeに移動 → OC → CPU Features → Intel VT-d TechのDisabledをEnabledに変更

F10で変更を保存して再起動する。

次に、IOMMUを有効にする。
以下のように変更し、設定を反映する。

# Proxmoxホスト上
~# vi /etc/default/grub

- GRUB_CMDLINE_LINUX_DEFAULT="quiet"
+ GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off"

~# update-grub

IOMMUが有効であることを確認する。

# Proxmoxホスト上
~# dmesg | grep -i iommu

[    0.084800] DMAR: IOMMU enabled

Proxmoxホスト起動時に以下のモジュールを自動的に読み込むように設定ファイルを変更する。

# Proxmoxホスト上
~# vi /etc/modules-load.d/modules.conf

# 末尾に追加
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

さらに、今後必要な以下の情報をコマンドで確認しておく。

  • GPUとオーディオの識別番号(今回だとGPU本体の番号が 10de:17c2 、オーディオの番号が 10de:0fb0 )
  • GPU関連のカーネルモジュール(今回だと nvidiafb, nouveau, nova_core, snd_hda_intel)
# Proxmoxホスト上
~# lspci -nnk

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM200 [GeForce GTX TITAN X] [10de:17c2] (rev a1)
	Subsystem: NVIDIA Corporation Device [10de:1132]
	Kernel driver in use: nouveau
	Kernel modules: nvidiafb, nouveau, nova_core
01:00.1 Audio device [0403]: NVIDIA Corporation GM200 High Definition Audio [10de:0fb0] (rev a1)
	Subsystem: NVIDIA Corporation Device [10de:1132]
	Kernel modules: snd_hda_intel
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM200 [GeForce GTX TITAN X] [10de:17c2] (rev a1)
	Subsystem: NVIDIA Corporation Device [10de:1132]
	Kernel driver in use: nouveau
	Kernel modules: nvidiafb, nouveau, nova_core
02:00.1 Audio device [0403]: NVIDIA Corporation GM200 High Definition Audio [10de:0fb0] (rev a1)
	Subsystem: NVIDIA Corporation Device [10de:1132]
	Kernel modules: snd_hda_intel

vfio_pciモジュールがGPUを使えるようにするため、確認したGPUとオーディオの識別番号をもとに以下のように設定する。

# Proxmoxホスト上
~# vi /etc/modprobe.d/vfio.conf

# GPU, GPUのaudio deviceを設定
options vfio-pci ids=10de:17c2,10de:0fb0

Proxmoxホスト上のモジュールがGPUを使用しないようにするため、確認したGPU関連のカーネルモジュールを以下のようにブラックリストに追加する。
ここで、nvidiafb は元々記述されていた。

# Proxmoxホスト上
~# vi /etc/modprobe.d/pve-blacklist.conf

# 末尾に追加
blacklist nouveau
blacklist nova_core
blacklist snd_hda_intel

設定を反映して再起動する。

# Proxmoxホスト上
~# update-initramfs -u -k all
~# reboot

再起動後、 vfio_pci ドライバがGPUとオーディオに割り当てられていることを確認する。

# Proxmoxホスト上
~# lspci -nnk

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM200 [GeForce GTX TITAN X] [10de:17c2] (rev a1)
	Subsystem: NVIDIA Corporation Device [10de:1132]
	Kernel driver in use: vfio-pci
	Kernel modules: nvidiafb, nouveau, nova_core
01:00.1 Audio device [0403]: NVIDIA Corporation GM200 High Definition Audio [10de:0fb0] (rev a1)
	Subsystem: NVIDIA Corporation Device [10de:1132]
	Kernel driver in use: vfio-pci
	Kernel modules: snd_hda_intel
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM200 [GeForce GTX TITAN X] [10de:17c2] (rev a1)
	Subsystem: NVIDIA Corporation Device [10de:1132]
	Kernel driver in use: vfio-pci
	Kernel modules: nvidiafb, nouveau, nova_core
02:00.1 Audio device [0403]: NVIDIA Corporation GM200 High Definition Audio [10de:0fb0] (rev a1)
	Subsystem: NVIDIA Corporation Device [10de:1132]
	Kernel driver in use: vfio-pci
	Kernel modules: snd_hda_intel

2つのGPUを別々にVMに割り当てられるようにする

今回は、2つのGPUを後に作成する2つのUbuntu VMに1つずつそれぞれ渡したい。
現状、2つのGPUが同じグループにいるため、別々に渡すことができない。

# Proxmoxホスト上
~# for g in /sys/kernel/iommu_groups/*/; do   echo "=== Group $(basename $g) ===";   for d in $g/devices/*; do lspci -nns $(basename $d); done; done

=== Group 1 ===
00:01.0 PCI bridge [0604]: Intel Corporation 6th-10th Gen Core Processor PCIe Controller (x16) [8086:1901] (rev 0a) 
00:01.1 PCI bridge [0604]: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x8) [8086:1905] (rev 0a) 
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM200 [GeForce GTX TITAN X] [10de:17c2] (rev a1) 
01:00.1 Audio device [0403]: NVIDIA Corporation GM200 High Definition Audio [10de:0fb0] (rev a1) 
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM200 [GeForce GTX TITAN X] [10de:17c2] (rev a1) 
02:00.1 Audio device [0403]: NVIDIA Corporation GM200 High Definition Audio [10de:0fb0] (rev a1) 

そのため、以下の記事の「6.3 IOMMU グループのバイパス (ACS 上書きパッチ)」を参考に設定を変更する。
https://wiki.archlinux.jp/index.php/OVMF_による_PCI_パススルー

pcie_acs_override=downstream オプションを追加する。

# Proxmoxホスト上
~# vi /etc/default/grub

- GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off"
+ GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off pcie_acs_override=downstream"

設定を反映する。

# Proxmoxホスト
~# update-grub
~# reboot

再起動後確認すると、別グループにできていた。

root@pve:~# for g in /sys/kernel/iommu_groups/*/; do   echo "=== Group $(basename $g) ===";   for d in $g/devices/*; do lspci -nns $(basename $d); done; done

=== Group 10 ===
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM200 [GeForce GTX TITAN X] [10de:17c2] (rev a1)
02:00.1 Audio device [0403]: NVIDIA Corporation GM200 High Definition Audio [10de:0fb0] (rev a1)

=== Group 9 ===
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM200 [GeForce GTX TITAN X] [10de:17c2] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GM200 High Definition Audio [10de:0fb0] (rev a1)

Ubuntu VMにを割り当てる

作成したUbuntu VM → ハードウェア → PCIデバイスを選択する。

スクリーンショット 2026-05-03 12.43.44.png

Rawデバイスを選択 → 対応するデバイスを選択する。
また、「全機能」にチェックをつける。

スクリーンショット 2026-05-03 14.53.03.png

スクリーンショット 2026-05-03 14.52.27.png

PCIデバイスが追加されたことを確認する。

スクリーンショット 2026-05-03 14.54.44.png

Ubuntu VMでGPUが認識されていることを確認する。

# Ubuntu VM上
~$ lspci -nnk

00:10.0 VGA compatible controller [0300]: NVIDIA Corporation GM200 [GeForce GTX TITAN X] [10de:17c2] (rev a1)
	Subsystem: NVIDIA Corporation Device [10de:1132]
	Kernel driver in use: nvidia
	Kernel modules: nvidiafb, nouveau, nova_core, nvidia_drm, nvidia
00:10.1 Audio device [0403]: NVIDIA Corporation GM200 High Definition Audio [10de:0fb0] (rev a1)
	Subsystem: NVIDIA Corporation Device [10de:1132]
	Kernel driver in use: snd_hda_intel
	Kernel modules: snd_hda_intel

Nvidia driverのインストール

Ubuntuをアップデート

# Ubuntu VM上
~$ sudo apt update
~$ sudo apt upgrade

ドライバ候補を確認する。

# Ubuntu VM上
~$ ubuntu-drivers devices
ERROR:root:aplay command not found
== /sys/devices/pci0000:00/0000:00:10.0 ==
modalias : pci:v000010DEd000017C2sv000010DEsd00001132bc03sc00i00
vendor   : NVIDIA Corporation
model    : GM200 [GeForce GTX TITAN X]
driver   : nvidia-driver-580 - distro non-free recommended
driver   : nvidia-driver-580-server - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

nvidia-driver-580 をインストールする。

# Ubuntu VM上
~$ sudo apt install nvidia-driver-580

設定を反映するために再起動

# Ubuntu VM上
~$ reboot

再起動後、 nvidia-smi でGPUが認識されていることを確認

# Ubuntu VM上
~$ nvidia-smi
Sun May  3 07:06:50 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.142                Driver Version: 580.142        CUDA Version: 13.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 GTX TITAN X     Off |   00000000:00:10.0  On |                  N/A |
| 22%   53C    P8             15W /  250W |      10MiB /  12288MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+
GitHubで編集を提案

Discussion