在 VM 裡面使用顯示卡

BUBU 公司目前有在計畫把設計及研發的由實體設備轉換為虛擬機,讓使用者從遠端連線方式使用。
Proxmox VE 在 5.3-5 的時候已經有加入此功能,可以在虛擬機上面增加顯示卡,這樣子在跑 3D 的時候可以使用 GPU 的運算能力。在 VM 下面的硬體選項裡面新增加一個 PCI 裝置,新增時發現出現下面的訊息。

109.03.19 由於剛好有幫群友測試問題,因 Proxmox VE 在 6 版之後已經有支援 UEFI 模式,因此設定的方式是不太一樣。請參考下方式的設定方式

運行環境


Proxmox VE 5版、6版

確認 IOMMU


在設定過程中如果發現到要新增新的 PCI 裝置的出現以下的訊息請先確認 BOIS 裡面的 VT-Dsr-iov 這兩個選項是否有正確啟動,如果沒有開啟的話請先進到 BOIS 裡面啟用此功能。已啟用再進到命令列修改設定檔。

注意 sr-iov 這個功能不是每一台 BIOS 都會有以及名稱也不一定會一樣,請多多注意一下

No IOMMU detected, please activate it.See Documentation for further information.

IOMMU.png

設定過程


我所設定的設備環境是以 Intel CPU 來設定的,如果是使用 AMD CPU 請在參考一下官方文件手冊,日後如有碰到使用 AMD CPU ,小弟會在上來修改文章

GRUB 模式

此模式是當時如果在安裝 Proxmox VE 時,是以 Legacy 傳統模式安裝的話,設定方式如下

vim /etc/default/grub

尋找
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
修改成
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
更新設定檔
update-grub

設定完之後,重啟 pve 主機
UEFI 模式

此模式是當時如果在安裝 Proxmox VE 時,是以 UEFI 模式安裝的話,設定方式如下

vim /etc/kernel/cmdline

#在後面增加 intel_iommu=on
#修改前
root=ZFS=rpool/ROOT/pve-1 boot=zfs

#修改後
root=ZFS=rpool/ROOT/pve-1 boot=zfs intel_iommu=on

#更新設定檔
pve-efiboot-tool refresh
啟用 SR-IOV

vim /etc/modules

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
kvmgt
  • 更新設定
update-initramfs -u -k all

以上設定完之後,要重啟 PVE 主機設定值才會生效

設定 VM 服務環境


  • 我是使用 Nvidia 繪圖卡
禁用Nvidia Drive on host

echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
  • 更新設定檔並且生效
update-initramfs -u
  • 找出顯卡 PCI ID
lspci

01:00.0 VGA compatible controller: NVIDIA Corporation GM107GL [Quadro K2200] (rev a2)
01:00.1 Audio device: NVIDIA Corporation Device 0fbc (rev a1)

PVEGUI-3.png

  • 查看規格
lspci -n -s 01:00

01:00.0 0300: 10de:13ba (rev a2)
01:00.1 0403: 10de:0fbc (rev a1)

PVEGUI-4.png

  • 使用上面獲得的ID將GPU分配給vfio:
echo "options vfio-pci ids=10de:13ba,10de:0fbc" > /etc/modprobe.d/vfio.conf
  • 到虛擬機conf 修改或新增 vim /etc/pve/qemu-server/XXX.conf (現在可以在管理介面上直接增加顯示卡所以不一定要進到該 VM 的設定檔進行設定以下修改方式可以選擇性修改,如果您很了解設定的話可以再進來這裡去設定)
bios: ovmf
machine: q35 (PVE6以上:pc-q35-3.1)
cpu: host
numa: 1
hostpci0: 04:00,x-vga=on,pcie=1
#當無法開機跳出不正確pcie id時 改為
#hostpci0: 0000:04:00,x-vga=on,pcie=1
#如果純粹只需要顯卡算力,請改用以下格式:
hostpci0: 04:00,pcie=1(AMD系列GPU需要移除 pcie=1 選項)
#如果還會顯示代號43,請加入這一行試試看
args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=willitwork,kvm=off'
  • KVM 新增
echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf
update-initramfs -u
  • 伺服器部分或者做完之後沒有生效者請增加
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
update-initramfs -u

或者到網頁上的硬體那裡去新增 PCI 裝置 選擇所以安裝的顯卡,並且把所有功能要打勾,主要 GPU 不用勾沒關係

  • 新增或編輯 PCI 裝置

PVEGUI-1.png

  • 選擇您想要使用的顯示卡

PVEGUI-2.png

  • 選擇完之後在您剛剛設定的服務遠端進去之後是否能夠正常顯示該設備名稱

PVEGUI-5.png




參考相關網頁