天天看点

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)