天天看點

ovirt 搭建vgpu(nvidia Tesla 4)

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虛拟機驅動

還有其他一些的指導文檔。

ovirt 搭建vgpu(nvidia Tesla 4)

安裝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為例,後面再做說明)

ovirt 搭建vgpu(nvidia Tesla 4)

虛拟機開機後,加了mdev裝置後,用控制台連接配接進去是沒有任何顯示的

(不知道是不是隻是我這樣,這個情況官方文檔沒看到說會有這種情況,其他部落客也隻是說裝完驅動才會黑屏)

用RDP協定連接配接進去後,我這裡是win10系統,安裝剛才解壓出來的432.33_grid_win10_server2016_server2019_64bit_international.exe驅動,若是其他系統請解壓包裡的選擇其他驅動。正常安裝後,驅動顯示是正常的。但是接下來還需要授權,才能完美運作。

安裝證書伺服器

* 建立一台虛拟機搭建證書伺服器,用于授權給其他虛拟機,且確定IP位址與MAC位址固定(實體機也行,網絡能通就可以,但還是推薦虛拟機,具體原由自己體會)      

1,下載下傳證書伺服器的安裝軟體,登入nvidia授權使用者控制台,點選這裡登入,在登入軟體下載下傳右上角,下載下傳對應系統的證書伺服器管理軟體,我下載下傳的是NVIDIA-ls-Windows-2019.11.0.27609831.zip

ovirt 搭建vgpu(nvidia Tesla 4)

2,安裝jdk(注意版本,64位與32位必須與前面的證書管理軟體一緻),openjdk下載下傳位址

這裡推薦下載下傳這個版本,作者嘗試安裝其他版本jdk,但是tomcat服務啟不來,需要手動打開apache才可。

java-11-openjdk-jre-11.0.6.10-1.windows.ojdkbuild.x86_64.msi

ovirt 搭建vgpu(nvidia Tesla 4)

安裝完設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,安裝許可證伺服器軟體

ovirt 搭建vgpu(nvidia Tesla 4)

 安裝成功完成後,單擊"完成"以退出安裝程式。

ovirt 搭建vgpu(nvidia Tesla 4)
  • 端口 7070 已打開,使遠端用戶端能夠從伺服器通路許可證。
  • 端口 8080 已關閉,以確定管理界面隻能通過在許可證伺服器主機上本地運作的 Web 浏覽器可用。
ovirt 搭建vgpu(nvidia Tesla 4)
ovirt 搭建vgpu(nvidia Tesla 4)

擷取許可證伺服器的 MAC 位址

     許可證伺服器的以太網 MAC 位址唯一地辨別您的伺服器到NVIDIA 許可門戶。您需要此位址才能向NVIDIA 許可門戶注冊許可證伺服器以生成許可證檔案。           

  1. 在許可證伺服器主機上打開 Web 浏覽器并連接配接到 URL http://localhost:8080/licserver。
  2. 在許可證伺服器管理界面中,選擇"配置"。
  3. 在打開的"許可證伺服器配置"頁上,在"伺服器主機 ID"下拉清單中,選擇平台的 ETHERNET 位址。
ovirt 搭建vgpu(nvidia Tesla 4)

管理您的許可證伺服器并擷取許可證檔案

在NVIDIA 許可門戶上建立許可證伺服器

ovirt 搭建vgpu(nvidia Tesla 4)

在NVIDIA 許可門戶儀表闆上,單擊"建立許可證伺服器 "。",單擊"建立許可證伺服器"。(注意Product需要選DWS,而不是APP,否則後面會出現失敗)

ovirt 搭建vgpu(nvidia Tesla 4)

下載下傳許可證檔案

ovirt 搭建vgpu(nvidia Tesla 4)

上傳許可檔案到證書伺服器

ovirt 搭建vgpu(nvidia Tesla 4)

登入虛拟機,填寫授權證書伺服器的位址與端口

  1. 打開NVIDIA 控制台:
  • 右鍵單擊 Windows 桌面并從菜單中選擇NVIDIA 控制台。
  • 打開Windows 控制台并輕按兩下NVIDIA 控制台圖示。

在NVIDIA 控制台中,在導航窗格的"許可"部分中選擇"管理許可證"任務。

ovirt 搭建vgpu(nvidia Tesla 4)

現在已經可以正常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)