1,官方文檔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.部分資料整合
前言(嘮叨):部署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 許可門戶儀表板上,單擊"創建許可證服務器 "。",單擊"創建許可證服務器"。(注意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 開啓
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)