天天看點

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

作者:略懂的大龍貓

首先我不推薦Tesla P4這張顯示卡,既無主動散熱、也無視訊輸出接口、成本效益又低(連礦渣40HX都不如)。顯示卡算上散熱花了400元(顯示卡360+支架30+風扇17),之是以買這張卡是因為我個人喜歡Tesla P4(功耗低、外觀小巧,是我眼裡顔值最高的顯示卡),半買半收藏,順便給All-In-One主機折騰vGPU顯示卡虛拟化。

本文介紹的是PVE環境下Tesla P4顯示卡虛拟化設定,由于Tesla P4是專業卡本身支援vGPU,非專業卡的N卡則需要vGPU Unlock才能虛拟化,不在本文介紹範圍内:

1、準備工作:PVE設定

PVE開啟iommu(實作PCIE直通):

vim /etc/default/grub           
#修改如下設定
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
#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           

加載vfio子產品

echo vfio >> /etc/modules
echo vfio_iommu_type1 >> /etc/modules
echo vfio_pci >> /etc/modules
echo vfio_virqfd >> /etc/modules           

更新核心參數

update-initramfs -k all -u           

屏蔽開源顯示卡驅動,避免開機時顯示卡被系統加載

#AMD顯示卡
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf 
echo "blacklist amdgpu" >> /etc/modprobe.d/blacklist.conf 
#NVIDIA顯示卡
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf 
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf 
echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf 
#INTEL核顯
echo "blacklist snd_hda_intel" >> /etc/modprobe.d/blacklist.conf 
echo "blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/blacklist.conf 
echo "blacklist i915" >> /etc/modprobe.d/blacklist.conf           

更新核心并重新開機

update-initramfs -k all -u           

準備工作完畢!

2、PVE安裝顯示卡host驅動

将顯示卡裝上後就可以安裝驅動了。計算卡驅動官網下載下傳需要注冊賬戶比較麻煩,可以網上找别人打包好的驅動。vGPU驅動分host(服務端)、client(用戶端)兩種驅動。PVE上需要安裝host驅動。首先安裝顯示卡驅動依賴環境:

apt install build-essential dkms mdevctl pve-headers-$(uname -r)           

通過ssh上傳驅動到PVE并安裝,如之前安裝了顯示卡驅動需要先解除安裝:

#如果之前安裝了顯示卡驅動需要先解除安裝
apt-get remove --purge nvidia-*
#進入驅動所在目錄,開始安裝驅動
chmod +x NVIDIA-Linux-x86_64-535.54.06-vgpu-kvm.run
./NVIDIA-Linux-x86_64-535.54.06-vgpu-kvm.run --dkms
#重新開機pve
reboot           
上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化
上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

這樣PVE已經安裝好了驅動,接下來給虛拟機安裝驅動前,先搭建好vGPU的授權服務。

3.搭建授權服務

vGPU用戶端需要授權才可以正常使用驅動。個人去買商業授權有點不劃算,是以用民間的授權大法:通過docker搭建授權服務。

找一台Linux裝置,安裝好docker環境,記下裝置的區域網路IP位址,開始搭建docker,下面2種方式任選其一:

3.1 makedie/fastapi-dls 鏡像

makedie/fastapi-dls 是基于collinwebdesigns/fastapi-dls原版鏡像修改的方案,不需要自己搭建openssl,是以操作比較簡單。

一條指令就可以搭建好容器,注意修改實際的區域網路IP:

docker run -d -e DLS_URL=192.168.31.20 -e DLS_PORT=1020 -p 1020:443  makedie/fastapi-dls            

3.2 collinwebdesigns/fastapi-dls 鏡像(原版)

collinwebdesigns/fastapi-dls 是原版鏡像需要自己搭建openssl證書,是以伺服器上不僅要安裝docker還要安裝好openssl

apt install openssl           

伺服器上建立證書:

WORKING_DIR=/opt/docker/fastapi-dls/cert
mkdir -p $WORKING_DIR
cd $WORKING_DIR
# create instance private and public key for singing JWT's
openssl genrsa -out $WORKING_DIR/instance.private.pem 2048 
openssl rsa -in $WORKING_DIR/instance.private.pem -outform PEM -pubout -out $WORKING_DIR/instance.public.pem
# create ssl certificate for integrated webserver (uvicorn) - because clients rely on ssl
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout  $WORKING_DIR/webserver.key -out $WORKING_DIR/webserver.crt           

運作docker fastapi-dls服務:

docker run -e DLS_URL=192.168.31.128 -e DLS_PORT=1020 -p 1020:443 -v $WORKING_DIR:/app/cert collinwebdesigns/fastapi-dls:latest           

通路 https://192.168.31.20:1020 檢視授權服務是否正常運作:

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

4.虛拟機安裝vGPU驅動及授權

首先在PVE上給虛拟機添加PCI裝置,選擇對應的顯示卡:

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

由于我要對顯示卡做劃分,是以在MDev類型要選一下,我隻打算劃分2塊,是以選的GRID P4-4Q(nvidia-65):

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

接下來在虛拟機上安裝vGPU驅動及授權,将驅動發送到虛拟機上(根據不同系統可以采用smb共享或者ssh遠端的方法操作)。就像正常在電腦上安裝驅動即可。

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化
上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

安裝好驅動後,擷取vGPU授權:

Windows管理者權限運作 PowerShell 執行如下指令,注意修改認證伺服器位址(同上面docker容器服務的位址):

# 下載下傳授權檔案
curl.exe --insecure -L -X GET https://192.168.31.20:1020/-/client-token -o "C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken\client_configuration_token_$($(Get-Date).tostring('dd-MM-yy-hh-mm-ss')).tok"
# 重新開機英偉達服務
Restart-Service NVDisplay.ContainerLocalSystem
# 檢視授權狀态
nvidia-smi.exe -q | Select-String License           

Linux root 權限執行如下指令:

# 下載下傳授權檔案
curl --insecure -L -X GET https://192.168.31.20:1020/-/client-token -o /etc/nvidia/ClientConfigToken/client_configuration_token_$(date '+%d-%m-%Y-%H-%M-%S').tok
# 重新開機英偉達服務
service nvidia-gridd restart
# 檢視授權狀态
nvidia-smi -q | grep License            

在Windows上安裝好驅動後,在任務管理器裡已經可以正常識别到顯示卡了,由于我把顯示卡做了劃分,是以這裡顯示的顯存為4G。

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

為了更好調用顯示卡可以通過moonlight+sunshine對虛拟機進行串流。

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

hanbrake可以正常調用到NVENC進行解碼、可以正常安裝CUDA、除了沒有實體視訊輸出功能和一般顯示卡相同。

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化
上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

這張卡雖然功耗低,但是必須改造散熱。散熱改造很簡單,買一個塑膠支架+一個小渦輪風扇(我買的渦輪扇隻有4800rpm,是以比較靜音)。由于賣家沒有送螺絲,是以我選擇用螢幕膠固定風扇(還挺牢固的)。Tesla因為功耗較低,用這種散熱方式勉強能用,像P40這種TDP 200W以上的顯示卡就需要更暴力的方案了:

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

一些網友為了追求風道密閉,會在顯示卡和風扇接口上纏膠布。我覺得有點影響顯示卡顔值,是以沒有再纏膠布了。看看改裝後的效果:

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

正面顔值高點,背面顔值就沒那麼高了,尤其是賣家還發了個灰色支架,很難給好評呀。渦輪風扇也可以風口向後安裝,但是我覺得這樣安裝更美觀一點:

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

看看顯示卡上機後的效果:

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

由于顯示卡風扇接主機闆風扇接口,記得在BIOS裡把風扇轉速調到滿速。我這個渦輪扇轉速不算高,是以即使滿速聲音也很小。但散熱能力也很拉胯:空載45℃、滿載90℃還會降頻,但勉強能用吧:

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

接下來的性能測試基于PVE安裝的Windows系統。由于不是原生系統,是以可能會有一定的性能損耗:

Tesla P4支援視訊編碼和解碼,是以可以通過sunshine+moonlight遠端串流,我通過串流直接跑的Timespy:

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

顯示卡分數僅4000分,這比Tesla P4的正常跑分低不少(正常跑分約在4600-5000分左右),要不是看在視訊編碼器的面子上,這簡直比80塊的P106還不如。但是接下來的測試證明Tesla P4視訊轉碼也挺拉胯的:

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化
上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

我用Tesla P4和2060S分辨對同一個視訊進行編碼測試,Tesla P4 采用的是NVENC第六代編碼器,2060S則是第七代。Tesla P4有2個轉碼晶片,而2060S隻有1個。但是Tesla P4速度僅280幀(單路,50%負載),也就是說雙路滿載轉碼也僅560幀。而2060S單路有700幀:

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化
上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

用串流玩玩網遊問題不大。考慮到帶寬和綜合性能我把moonlight的幀率限制在了60幀,是以LOL中顯示的是60幀。

上手Tesla P4,All-In-One玩vGPU顯示卡虛拟化

綜合來看Tesla P4這張顯示卡成本效益很低,性能僅1060水準,且視訊轉碼性能也并不算強。AI和遊戲方面和礦渣P106不分伯仲,成本效益更是被完全秒殺。此外Tesla P4還得改裝散熱,相比同價位的40HX也遜色非常多,是以不推薦大家購買。

最後補上因為核心更新掉驅動的解決方案。首先在更新核心前要安裝對應的pve-headers,如果安裝後還是掉驅動,那麼就降級回之前的核心:

#檢視目前核心
uname -a
#檢視已安裝核心
dpkg --get-selections |grep kernel
#切換到舊版本核心
proxmox-boot-tool kernel pin 5.13.19-6-pve
proxmox-boot-tool refresh
#重新開機
reboot           

應該寫的很全面了!