將Host的GPU直通給虛擬機(VM),使其可以使用GPU硬體加速、跑機器學習計算等工作。
其實虛擬機要GPU硬體加速也可以用Virtio顯示卡搭配Virglrenderer。不過該技術僅適用Intel/AMD GPU,且Ubuntu的Virglrenderer效能不若Android-x86那樣好,所以我還是用GPU直通。
Host OS將Nvidia GTX1050Ti直通給虛擬機後,即改用Intel CPU的內顯輸出螢幕訊號,而虛擬機不外接實體螢幕也能調用GPU執行應用程式。
1. 環境
- Host OS:Arch Linux 6.2.1,GPU 1 Intel HD630,GPU2 Nvidia GTX1050Ti
- Guest OS:Ubuntu 22.04 LTS,虛擬顯示卡QXL
- 虛擬機軟體為Virt Manager + QEMU/KVM 7.1.0
2. 直通GPU
參考Arch Linux如何將GPU直通給Windows QEMU/KVM虛擬機
那篇雖是給Windows的,但是大方向一樣:禁止Nvidia顯示卡開機載入,啟用VFIO核心模組,並將PCI裝置掛載至Ubuntu虛擬機。
要取消直通也很簡單,從虛擬機硬體列表刪除PCI裝置,GRUB設定檔還原至修改前的樣子,重開機即可。
3. 虛擬機安裝Nvidia驅動與CUDA
據說Nvidia舊版本驅動會偵測是否為虛擬機,所以得hide kvm,但現在看來不需要了。
用nvidia-smi
測試輸出驅動版本為530
nvcc -v
輸出版本為CUDA 11.8。
Blender確認能夠使用CUDA渲染
4. 使用Nvidia PRIME切換GPU
即使虛擬機可以使用CUDA了,執行3D應用程式還是可能只用軟體解碼渲染,導致性能低下
prime-select
指令行不通,因為沒有內顯。這時可以用PRIME環境變數使用Nvidia GPU執行應用程式。
|
|
詭異的是Snap版Firefox可以跑滿60FPS,但隨即桌面環境整個崩潰。而Firefox ESR雖不會崩潰,但是FPS無法跑滿。 🤷 這就是為什麼我不用Snap的原因(小聲)