PVE 8.2 RTX 5090 GPU Passthrough (顯卡通透)
PVE 8 加上GPU Passthrough(顯卡通透),可能是PVE、5090、或主機板太新,一直卡關,因此我有必要紀錄一下如何攻克。
話說我前幾天終於說服公司購買好一點的顯示卡,因為先前提早研究,知道顯卡很吃PCI-E 16x,但那是什麼鬼我都不懂,於是快馬加鞭衝去原價屋,找專業店家買主機,服務人員聽說要買頂規的5090,很熱情地自動展開相關配置,這些專業建議不額外收費。
主機板:Z890 Aorus master
CPU:Intel Core ultra 9 285K
記憶體:256GB
M.2.: 1T
顯卡:ASUS ROG ASTRAL RTX 5090 32G 水冷
power:1300 瓦
原價屋組裝好,我收到貨之後,想說主機這麼好,應該要安裝pve多工使用。
爬文得知兩個重點:
- 主機板要打開vt-d (iommu)、sr-iov 之類的功能
主機板建議安裝一個hdmi欺騙器,並且在bios設定開機顯示介面優先使用內建顯示,讓獨立顯卡完全用於VM - pve 要修改能支援PCI passthrough,開通vfio-pci功能
請參考官網作法。
首先我安裝pve 8.4.1,且照著官網建議的設定,但一直不成功,VM開不起來;後來想說是不是pve版本太新,因此改用8.3.1也不行,再改成8.2.2也不行。我總共參考以下文章,也測試了N輪,都快放棄了 XD
文章都說只要開通vfio-pci以及iommu就可以了,我照做也很順利。
執行 lspci -nnk,可以看出顯卡已開通 vfio-pci

執行 dmesg | grep -e DMAR -e IOMMU ,可看到IOMMU enabled

可惜無論如何努力,vm一直無法出現開機畫面,一看就知道通透失敗。
甚至我都扒出有些設定新版pve 8已棄用,也改用新的設定 initcall_blacklist=sysfb_init,但一樣GG。

不死心,失敗了N次,我無意間在這裡發現新大陸,裡面提到一個設定disable_denylist=1要加到vfio.conf,雖然最後還是失敗XD

很神奇,當時突然如到電影盜夢空間(全面啟動)情節,彷彿有人偷偷修改我的記憶,不自覺自己無意識下了一個指令 modinfo -p vfio-pci,系統居然多嘴跟我說還有其他設定要加上企。

最後,我把系統建議的這些設定都加到 /etc/modprobe.d/vfio.conf 裡面( 加完記得要 update-initramfs -u -k all )。
disable_vga=1 disable_denylist=1 disable_idle_d3=1 enable_sriov=1
再重開vm就成功進入開機畫面了,太棒了!
vm 安裝ubuntu 24.04,還要加裝 nvidia 驅動。
vm如何安裝nvidia驅動,我參考了以下這兩篇
https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/index.html#ubuntu-installation
安裝完畢,執行 nvidia-smi,看到心愛的 5090 就安心了。

接下來安裝docker,我參考張騰元文章 。
docker安裝完畢,咱門還需要讓docker也能使用 nvidia ,請參考 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html 。
最後啟動ollama docker
docker run -d –gpus=all -v ollama:/root/.ollama -p 11434:11434 –name ollama ollama/ollama
至此大功告成。
這是我pve的相關設定
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init"

修改完畢,記得套用 update-grub 生效。
/etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
kvm
kvm_intel
kvmgt
xengt
vfio-mdev
i915.enable_gvt=1

/etc/modprobe.d/pve-blacklist.conf
blacklist nouveau
blacklist i2c_nvidia_gpu
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist nvidia*

/etc/modprobe.d/vfio.conf
以下紅色部分,是顯卡的代號,請自己修改
nvidia有兩個video與audio硬體代號,可執行 lspci -nnk | grep -i nvidia 取得
softdep nouveau pre: vfio-pci
softdep nvidia pre: vfio-pci
softdep nvidiafb pre: vfio-pci
softdep nvidia_drm pre: vfio-pci
softdep drm pre: vfio-pci
options vfio-pci ids=10de:2b85,10de:22e8 disable_vga=1 disable_denylist=1 disable_idle_d3=1 enable_sriov=1

修改modprobe相關檔案,記得要執行 update-initramfs -u 套用更新。
VM的設定
重點在紅框的 host、PCI Device(hostpci0)、 與 q35
