1,官方文檔vgpu使用者指導手冊:
https://docs.nvidia.com/grid/7.0/grid-vgpu-user-guide/index.html#red-hat-el-kvm-install-configure-vgpu
2,證書伺服器安裝
https://docs.nvidia.com/grid/latest/grid-software-quick-start-guide/index.html
https://docs.nvidia.com/grid/ls/2019.11/grid-license-server-user-guide/index.html
3. vgpu對應的類型與作用
https://docs.nvidia.com/grid/10.0/grid-vgpu-user-guide/index.html#vgpu-types-tesla-t4
4.部分資料整合
http://vgpu.com.cn/
前言(唠叨):部署nvidia的vgpu先要申請一個測試賬号或者直接購買。部署過程其實還是蠻簡單,就是授權有些麻煩。還有一大堆的連結資料看的頭暈,事實上,真正有用的資訊不多,nvidia把各大虛拟化廠商的部署資料都放在一起了,閱覽起來很不爽,而我們主要看的是rhev和kvm的資料。寫這篇文章僅僅為了記錄一下搭建過程與記錄一些坑,防止遺忘。
安裝環境:centos7.7,
ovirt4.3
nvidia Tesla 4
安裝gcc
安裝 kernel-devel, kernel-headers(版本需要與核心一緻,否則需要從網上下載下傳rpm包,建議直接使用Centos7.7版本,可直接yum)
# yum install gcc
# yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
禁用nouveau驅動
# vi /etc/modprobe.d/blacklist.conf
blacklist nouveau options nouveau modeset=0
# mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
# dracut /boot/initramfs-$(uname -r).img $(uname -r)
重新開機
# reboot
登入nvidia授權使用者控制台,點選這裡登入
在軟體下載下傳頁面下載下傳對應的軟體包,我這裡下載下傳是:NVIDIA-GRID-RHEL-7.7-430.83-432.33.zip
解壓出來主要有:
NVIDIA-vGPU-rhel-7.7-430.83.x86_64.rpm 用于安裝在伺服器上的vGPU管理軟體
432.33_grid_win7_win8_server2008R2_server2012R2_64bit_international.exe win虛拟機驅動
432.33_grid_win10_server2016_server2019_64bit_international.exe win虛拟機驅動
NVIDIA-Linux-x86_64-430.83-grid.run linux虛拟機驅動
還有其他一些的指導文檔。
安裝vGPU管理軟體:
上傳剛才解壓出來的NVIDIA-vGPU-rhel-7.7-430.83.x86_64.rpm到伺服器上
# rpm -iv NVIDIA-vGPU-rhel-7.7-430.83.x86_64.rpm
重新開機
# reboot
驗證nouveau是否被禁用
# lsmod | grep -i nouveau
驗證nvidia的是否在pci接口清單
# lspci | grep -i nvidia
檢查核心加載的子產品清單中的VFIO驅動程式,驗證是否正确安裝和加載了NVIDIA vGPU軟體包
# lsmod | grep -i vfio
nvidia_vgpu_vfio 49962 0
nvidia 19075586 10 nvidia_vgpu_vfio
vfio_mdev 12841 0
mdev 20336 2 vfio_mdev,nvidia_vgpu_vfio
vfio_iommu_type1 22440 0
vfio 32657 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1
驗證libvirtd服務處于活動狀态并且正在運作
# service libvirtd status
使用nvidia-smi指令是否能檢視到nvidia驅動正常運作。
# nvidia-smi
Mon Mar 30 11:22:21 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.83 Driver Version: 430.83 CUDA Version: N/A |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla T4 On | 00000000:04:00.0 Off | Off |
| N/A 54C P8 18W / 70W | 79MiB / 16383MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
列出可建立的vgpu類型
# nvidia-smi vgpu -s
GPU 00000000:04:00.0
GRID T4-1Q
GRID T4-2Q
GRID T4-4Q
GRID T4-8Q
GRID T4-16Q
GRID T4-1A
GRID T4-2A
GRID T4-4A
GRID T4-8A
GRID T4-16A
GRID T4-1B
GRID T4-1B4
GRID T4-2B
GRID T4-2B4
GRID T4-4C
GRID T4-8C
GRID T4-16C
列出ovirt主機(vdsm)可用的mdev裝置, -m1代表篩選第一個比對的mdev,-A48,代表顯示mdev行以下的48行
# vdsm-client Host hostdevListByCaps | grep -m1 -A48 mdev
"mdev": {
"nvidia-224": {
"name": "GRID T4-2B4",
"available_instances": "8"
},
"nvidia-225": {
"name": "GRID T4-1A",
"available_instances": "16"
},
"nvidia-233": {
"name": "GRID T4-8Q",
"available_instances": "2"
},
...........................
...........................這裡隻截取前面3個
把mdev裝置加入到虛拟機上
1.在做下面步驟前,先打開虛拟機的RDP協定,保證能連接配接進去,一般開啟遠端服務與關閉防火牆即可。
2.再關閉虛拟機,編輯虛拟機,把把顯示類型qxl改成vga模式
3.編輯自定義選項mdev_type,根據之前列出來的mdev型号,這裡選nvidia-232,顯存4G(不同實體顯示卡都不一樣這裡以Tesla4為例,後面再做說明)
虛拟機開機後,加了mdev裝置後,用控制台連接配接進去是沒有任何顯示的
(不知道是不是隻是我這樣,這個情況官方文檔沒看到說會有這種情況,其他部落客也隻是說裝完驅動才會黑屏)
用RDP協定連接配接進去後,我這裡是win10系統,安裝剛才解壓出來的432.33_grid_win10_server2016_server2019_64bit_international.exe驅動,若是其他系統請解壓包裡的選擇其他驅動。正常安裝後,驅動顯示是正常的。但是接下來還需要授權,才能完美運作。
安裝證書伺服器
* 建立一台虛拟機搭建證書伺服器,用于授權給其他虛拟機,且確定IP位址與MAC位址固定(實體機也行,網絡能通就可以,但還是推薦虛拟機,具體原由自己體會)
1,下載下傳證書伺服器的安裝軟體,登入nvidia授權使用者控制台,點選這裡登入,在登入軟體下載下傳右上角,下載下傳對應系統的證書伺服器管理軟體,我下載下傳的是NVIDIA-ls-Windows-2019.11.0.27609831.zip
2,安裝jdk(注意版本,64位與32位必須與前面的證書管理軟體一緻),openjdk下載下傳位址
這裡推薦下載下傳這個版本,作者嘗試安裝其他版本jdk,但是tomcat服務啟不來,需要手動打開apache才可。
java-11-openjdk-jre-11.0.6.10-1.windows.ojdkbuild.x86_64.msi
安裝完設JAVA_HOME環境變量的路徑,把bin執行路徑加入PATH,以例子(根據你實際情況):
C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.201-1\bin 加入PATH
C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.201-1\jre 加入JAVA_HOME
3,安裝許可證伺服器軟體
安裝成功完成後,單擊"完成"以退出安裝程式。
- 端口 7070 已打開,使遠端用戶端能夠從伺服器通路許可證。
- 端口 8080 已關閉,以確定管理界面隻能通過在許可證伺服器主機上本地運作的 Web 浏覽器可用。
擷取許可證伺服器的 MAC 位址
許可證伺服器的以太網 MAC 位址唯一地辨別您的伺服器到NVIDIA 許可門戶。您需要此位址才能向NVIDIA 許可門戶注冊許可證伺服器以生成許可證檔案。
- 在許可證伺服器主機上打開 Web 浏覽器并連接配接到 URL http://localhost:8080/licserver。
- 在許可證伺服器管理界面中,選擇"配置"。
- 在打開的"許可證伺服器配置"頁上,在"伺服器主機 ID"下拉清單中,選擇平台的 ETHERNET 位址。
管理您的許可證伺服器并擷取許可證檔案
在NVIDIA 許可門戶上建立許可證伺服器
在NVIDIA 許可門戶儀表闆上,單擊"建立許可證伺服器 "。",單擊"建立許可證伺服器"。(注意Product需要選DWS,而不是APP,否則後面會出現失敗)
下載下傳許可證檔案
上傳許可檔案到證書伺服器
登入虛拟機,填寫授權證書伺服器的位址與端口
- 打開NVIDIA 控制台:
- 右鍵單擊 Windows 桌面并從菜單中選擇NVIDIA 控制台。
- 打開Windows 控制台并輕按兩下NVIDIA 控制台圖示。
在NVIDIA 控制台中,在導航窗格的"許可"部分中選擇"管理許可證"任務。
現在已經可以正常vgpu了。
如果要要設定顯示卡顯存大小,則要修改mdev對應的vgpu類型,一般選Q系列就好。
不同vgpu類型的作用檢視此連結
注意的是,一個實體GPU隻能選一個類型。
比如:一個虛拟機已經選了GRID T4-4Q類型,對應的是nvidia-232,那麼所有cpu都要使用nvidia-232,那意思就是虛拟機的vgpu的顯存都是一樣的了。
要建立不同顯存的vgpu,隻能用多種顯示卡了,這是問廠商所得出的答案。
開啟關閉ECC
nvidia-smi -e 0 關閉
nvidia-smi -e 1 開啟
RHEL KVM 添加vGPU裝置連結
tensorflow要使用vgpu需要安裝cuda-toolkit,cudnn 參考連結
故障排錯:
檢查核心是否加載nvidia子產品
#lsmod|grep nvidia
檢查vgpu管理軟體rpm是否安裝,這裡應該對應你安裝的包
rpm -q vgpu-manager-rpm-package-name
檢視vmiop輸出是否有報錯
#grep vmiop /var/log/messages
#grep vmiop_log: /var/log/messages[2019-10-25 04:46:12] vmiop_log: [2019-10-25 04:46:12] notice: vmiop-env: guest_max_gpfn:0x11f7ff
[2019-10-25 04:46:12] vmiop_log: [2019-10-25 04:46:12] notice: pluginconfig: /usr/share/nvidia/vgx/grid_m60-1q.conf,gpu-pci-id=0000:06:00.0
[2019-10-25 04:46:12] vmiop_log: [2019-10-25 04:46:12] notice: Loading Plugin0: libnvidia-vgpu
[2019-10-25 04:46:12] vmiop_log: [2019-10-25 04:46:12] notice: Successfully update the env symbols!
[2019-10-25 04:46:12] vmiop_log: [2019-10-25 04:46:12] notice: vmiop_log: gpu-pci-id : 0000:06:00.0
[2019-10-25 04:46:12] vmiop_log: [2019-10-25 04:46:12] notice: vmiop_log: vgpu_type : quadro
[2019-10-25 04:46:12] vmiop_log: [2019-10-25 04:46:12] notice: vmiop_log: Framebuffer: 0x38000000
[2019-10-25 04:46:12] vmiop_log: [2019-10-25 04:46:12] notice: vmiop_log: Virtual Device Id: 0x13F2:0x114D
[2019-10-25 04:46:12] vmiop_log: [2019-10-25 04:46:12] notice: vmiop_log: ######## vGPU Manager Information: ########
[2019-10-25 04:46:12] vmiop_log: [2019-10-25 04:46:12] notice: vmiop_log: Driver Version: 410.137[2019-10-25 04:46:12] vmiop_log: [2019-10-25 04:46:12] notice: vmiop_log: Init frame copy engine: syncing...
[2019-10-25 05:09:14] vmiop_log: [2019-10-25 05:09:14] notice: vmiop_log: ######## Guest NVIDIA Driver Information: ########
[2019-10-25 05:09:14] vmiop_log: [2019-10-25 05:09:14] notice: vmiop_log: Driver Version: 412.47 [2019-10-25 05:09:14] vmiop_log: [2019-10-25 05:09:14] notice: vmiop_log: Current max guest pfn = 0x11a71f!
[2019-10-25 05:12:09] vmiop_log: [2019-10-25 05:12:09] notice: vmiop_log: vGPU license state: (0x00000001)