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)