ProxmoxでUbuntu VMにGPUパススルーを行う
ProxmoxホストがGPUを握らないようにする
以下の設定は次の記事を参考にした。
実際には記事通りだとうまくいかない点があったため、全ての手順を説明している。
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デバイスを選択する。

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


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

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 |
+-----------------------------------------------------------------------------------------+
Discussion