Proxmox VE 顯示卡直通指南 (GPU Passthrough)
GPU Passthrough(PCIe 直通)允許將實體主機的顯示卡(NVIDIA / AMD 獨顯或 Intel 內顯)專屬綁定給特定 VM,提供近乎 100% 的裸機硬體加速效能(用於 Jellyfin/Immich 影片轉碼、AI 推論或 Windows 雲端遊戲)。
參考來源
本文步驟與截圖參考自 WunderTech 指南 與 Proxmox 官方 Wiki。
前置條件
- 主機板 BIOS 開啟虛擬化與 IOMMU:
- Intel: VT-x 與 VT-d
- AMD: SVM 與 IOMMU
- Proxmox VE 8.x / 9.x 系統。
Step 1. 啟用 IOMMU
登入 PVE 終端機,編輯開機引導設定:
使用 GRUB 開機
編輯 /etc/default/grub:
nano /etc/default/grub
修改 GRUB_CMDLINE_LINUX_DEFAULT:
- Intel CPU:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt" - AMD CPU:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
更新 GRUB:
update-grub
使用 systemd-boot 開機 (UEFI + ZFS)
編輯 /etc/kernel/cmdline 加入 intel_iommu=on iommu=pt 後執行:
proxmox-boot-tool refresh
Step 2. 載入 VFIO 核心模組
編輯 /etc/modules:
nano /etc/modules
加入以下 4 行:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
Step 3. 封鎖宿主機原廠驅動
避免 PVE 宿主機搶先載入顯示卡驅動:
編輯 /etc/modprobe.d/blacklist.conf:
nano /etc/modprobe.d/blacklist.conf
加入對應顯卡的黑名單:
# NVIDIA
blacklist nouveau
blacklist nvidia*
# AMD
blacklist radeon
blacklist amdgpu
# Intel (整顆內顯直通)
blacklist i915
更新 initramfs 並重啟主機:
update-initramfs -u -k all
reboot
Step 4. 檢查 IOMMU 狀態與分組
重開機後檢查:
-
確認 IOMMU 啟用:
dmesg | grep -e DMAR -e IOMMU -
查詢 GPU 裝置位址:
lspci -nnv | grep -E "VGA|3D|Audio"
-
確認 IOMMU Group 獨立性:
find /sys/kernel/iommu_groups/ -type l
Step 5. 虛擬機硬體設定
目標 VM 需具備以下硬體設定:
- Machine:
q35 - BIOS:
OVMF (UEFI) - Memory:取消勾選 Ballooning Device

Step 6. 在 Web GUI 新增 PCI 裝置
在 PVE 網頁介面:
- 進入目標 VM -> Hardware -> Add -> PCI Device。
- Raw Device 選取 GPU。
- 勾選選項:
- All Functions:勾選(同時傳入音訊與運算核心)。
- Primary GPU:若為獨立桌面輸出則勾選,無頭轉碼伺服器可不勾選。
- PCI-Express:勾選。
- ROM-Bar:勾選。

Step 7. 客體系統驅動與驗證
Windows VM
開機後安裝官方驅動,在裝置管理員確認顯示卡無異常警示。

Linux VM (Ubuntu Server)
# 檢查裝置
lspci -nnk | grep -i vga -A 2
# Intel QSV 檢查渲染節點
ls -l /dev/dri
# NVIDIA 檢查驅動狀態
nvidia-smi
Docker compose.yaml 掛載範例:
services:
jellyfin:
image: jellyfin/jellyfin
devices:
- /dev/dri:/dev/dri # Intel 轉碼
常見問題排錯
-
Windows 代碼 43 (Code 43): 在
/etc/pve/qemu-server/<VMID>.conf加入cpu: host,hidden=1隱藏虛擬機特徵。 -
啟動時出現
Operation not permitted: 允許不安全中斷:echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf