跳至主要内容

Proxmox VE 顯示卡直通指南 (GPU Passthrough)

GPU Passthrough(PCIe 直通)允許將實體主機的顯示卡(NVIDIA / AMD 獨顯或 Intel 內顯)專屬綁定給特定 VM,提供近乎 100% 的裸機硬體加速效能(用於 Jellyfin/Immich 影片轉碼、AI 推論或 Windows 雲端遊戲)。

參考來源

本文步驟與截圖參考自 WunderTech 指南 與 Proxmox 官方 Wiki。


前置條件​

  1. 主機板 BIOS 開啟虛擬化與 IOMMU:
    • Intel: VT-x 與 VT-d
    • AMD: SVM 與 IOMMU
  2. 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 設定檔

更新 GRUB:

update-grub

更新 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 狀態與分組​

重開機後檢查:

  1. 確認 IOMMU 啟用:

    dmesg | grep -e DMAR -e IOMMU
  2. 查詢 GPU 裝置位址:

    lspci -nnv | grep -E "VGA|3D|Audio"

    查詢 GPU PCIe 位址

  3. 確認 IOMMU Group 獨立性:

    find /sys/kernel/iommu_groups/ -type l

    檢查 IOMMU Group 分組


Step 5. 虛擬機硬體設定​

目標 VM 需具備以下硬體設定:

  1. Machine:q35
  2. BIOS:OVMF (UEFI)
  3. Memory:取消勾選 Ballooning Device

VM 硬體架構設定


Step 6. 在 Web GUI 新增 PCI 裝置​

在 PVE 網頁介面:

  1. 進入目標 VM -> Hardware -> Add -> PCI Device。
  2. Raw Device 選取 GPU。
  3. 勾選選項:
    • All Functions:勾選(同時傳入音訊與運算核心)。
    • Primary GPU:若為獨立桌面輸出則勾選,無頭轉碼伺服器可不勾選。
    • PCI-Express:勾選。
    • ROM-Bar:勾選。

新增 PCI 裝置


Step 7. 客體系統驅動與驗證​

Windows VM​

開機後安裝官方驅動,在裝置管理員確認顯示卡無異常警示。

Windows 裝置管理員確認顯卡正常運作

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 轉碼

常見問題排錯​

  1. Windows 代碼 43 (Code 43): 在 /etc/pve/qemu-server/<VMID>.conf 加入 cpu: host,hidden=1 隱藏虛擬機特徵。

  2. 啟動時出現 Operation not permitted: 允許不安全中斷:

    echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf

相關連結​