目录
2、切换到物理GPU对应的mdev_supported_types目录
3、mdev_supported_types子目录遍历待创建的vGPU类型
2、注册 NVIDIA 企业账号,申请 license(或直接购买)
六、vGPU Guest虚机连接License Server
八、实际应用问题2 -- 创建 windows Guest 虚机黑屏问题
1、vGPU License Server注入license文件失败
一、vGPU产品类型
1、NVIDIA vGPU产品简介
NVIDIA vGPU,通过分片虚拟化技术,将物理GPU卡重新划分,同一块GPU卡经虚拟化分割后可分配至不同的云主机使用,实现了GPU计算能力的多虚机共享。
vGPU根据不同的场景,提供四种类型产品。每种类型vGPU运行时需要相应的软件授权(License),对操作系统的要求也有所区别。
(1)NVIDIA GRID Virtual Applications (GRID vApps)
适用于虚拟应用程序/Windows远程桌面(RDSH)/共享桌面
(2)NVIDIA GRID Virtual PC (GRID vPC)
适用于虚拟桌面应用,可运行所有的PC应用程序
(3)NVIDIA Quadro Virtual Data Center Workstation (Quadro vDWS)
适用于专业图形图像,以及AI/DL/HPC等计算场景
(4)NVIDIA Virtual Compute Server (vCS)
适用于人工智能(AI)/深度学习(DL)/高性能计算(HPC)等计算密集型场景,仅支持Linux系统
Series | Optimal Workload |
Q-series | Virtual workstations for creative and technical professionals who require the performance and features of Quadro technology |
C-series | Compute-intensive server workloads, such as artificial intelligence (AI), deep learning, or high-performance computing (HPC) |
B-series | Virtual desktops for business professionals and knowledge workers |
A-series | App streaming or session-based solutions for virtual applications users |
2、如何选择合适的vGPU
二、基于KVM创建vGPU设备
此处以创建一个M10-2Q类型的vGPU设备为例。
1、物理机安装vGPU驱动
GPU物理节点的Linux驱动,在安装过程中需要编译kernel module,安装vGPU-kvm驱动之后,需要reboot重启计算节点。
重启之前,没有mdev设备相关信息(对应pci设备目录下没有mdev_supported_types目录);
重启之后,可看到mdev设备相关信息(对应pci设备目录下可以看到mdev_supported_types目录)。
[root@localhost ~]# chmod +x NVIDIA-Linux-x86_64-430.67-vgpu-kvm.run
[root@localhost ~]# ./NVIDIA-Linux-x86_64-430.67-vgpu-kvm.run -s
# 配置驱动
[root@localhost ~]# nvidia-smi -e 0
[root@localhost ~]# nvidia-smi -pm 1
# 重启节点,让驱动生效
[root@localhost ~]# reboot
[root@localhost vgpu]# ./NVIDIA-Linux-x86_64-430.67-vgpu-kvm.run -s
Verifying archive integrity... OK
Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 430.67.....................................................................................................................................................
......................................................
[root@localhost vgpu]#
[root@localhost vgpu]# nvidia-smi -e 0
ECC support is already Disabled for GPU 00000000:3D:00.0.
ECC support is already Disabled for GPU 00000000:3E:00.0.
ECC support is already Disabled for GPU 00000000:40:00.0.
ECC support is already Disabled for GPU 00000000:41:00.0.
ECC support is already Disabled for GPU 00000000:B1:00.0.
ECC support is already Disabled for GPU 00000000:B2:00.0.
ECC support is already Disabled for GPU 00000000:B4:00.0.
ECC support is already Disabled for GPU 00000000:B5:00.0.
All done.
[root@localhost vgpu]# nvidia-smi -pm 1
Enabled persistence mode for GPU 00000000:3D:00.0.
Enabled persistence mode for GPU 00000000:3E:00.0.
Enabled persistence mode for GPU 00000000:40:00.0.
Enabled persistence mode for GPU 00000000:41:00.0.
Enabled persistence mode for GPU 00000000:B1:00.0.
Enabled persistence mode for GPU 00000000:B2:00.0.
Enabled persistence mode for GPU 00000000:B4:00.0.
Enabled persistence mode for GPU 00000000:B5:00.0.
All done.
[root@localhost vgpu]#
[root@localhost ]# lspci -nn| grep 3D
3d:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1eb8] (rev a1)
3e:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1eb8] (rev a1)
40:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1eb8] (rev a1)
41:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1eb8] (rev a1)
b1:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1eb8] (rev a1)
b2:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1eb8] (rev a1)
b4:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1eb8] (rev a1)
b5:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1eb8] (rev a1)
[root@localhost 0000:3d:00.0]#
[root@localhost 0000:3d:00.0]# cd /sys/bus/pci/devices/0000\:3d\:00.0/
[root@localhost 0000:3d:00.0]# ls
broken_parity_status consistent_dma_mask_bits dma_mask_bits enable iommu local_cpulist msi_bus power reset resource1 resource3_wc subsystem uevent
class d3cold_allowed driver i2c-4 iommu_group local_cpus msi_irqs remove resource resource1_wc sriov_numvfs subsystem_device vendor
config device driver_override i2c-5 irq modalias numa_node rescan resource0 resource3 sriov_totalvfs subsystem_vendor
[root@localhost 0000:3d:00.0]#
[root@localhost 0000:3d:00.0]# reboot
[root@localhost ~]# cd /sys/bus/pci/devices/0000\:3d\:00.0/
[root@localhost 0000:3d:00.0]#
[root@localhost 0000:3d:00.0]# ls
broken_parity_status consistent_dma_mask_bits dma_mask_bits enable iommu local_cpulist modalias numa_node rescan resource0 resource3 sriov_totalvfs subsystem_vendor
class d3cold_allowed driver i2c-4 iommu_group local_cpus msi_bus power reset resource1 resource3_wc subsystem uevent
config device driver_override i2c-5 irq mdev_supported_types msi_irqs remove resource resource1_wc sriov_numvfs subsystem_device vendor
[root@localhost 0000:3d:00.0]#
2、切换到物理GPU对应的mdev_supported_types目录
其中,0000:06:00.0表示domain:bus:slot.function
[root@localhost ~]# cd /sys/bus/pci/devices/0000\:3d\:00.0/mdev_supported_types/
3、mdev_supported_types子目录遍历可创建的vGPU类型
查看支持的所有vGPU类型
[root@localhost mdev_supported_types]# grep -l "T4-8Q" nvidia-*/name
nvidia-233/name
# 或直接自定义shell脚本遍历,获取所有支持的vGPU类型
[root@localhost mdev_supported_types]# for i in `ls`;do cat $i/name |awk '{print $2}'; done;
4、确认可在物理GPU上创建vGPU类型实例的个数
注意:此处available_instances如果返回0,表示该物理GPU上已经存在另一种vGPU类型实例,或者已经创建了允许的最大实例数。
[root@localhost mdev_supported_types]# cat nvidia-233/available_instances
2
5、生成随机uuid写入create文件
使用uuidgen生成随机uuid,写入需要创建的vGPU类型目录下的create文件中。
[root@localhost mdev_supported_types]# echo "aa618089-8b16-4d01-a136-25a0f3c73123" > nvidia-233/create
6、确认vGPU设备已创建
[root@localhost ~]# ls -l /sys/bus/mdev/devices/
lrwxrwxrwx. 1 root root 0 Nov 24 13:33 aa618089-8b16-4d01-a136-25a0f3c73123 -> ../../../devices/pci0000:00/0000:00:03.0/0000:03:00.0/0000:04:09.0/0000:06:00.0/aa618089-8b16-4d01-a136-25a0f3c73123
至此,vGPU设备创建完成。
可使用shell脚本循环创建mdev设备,或其它组件调用方式创建mdev设备(例如openstack Queens版nova组件初始化时,会自动创建mdev设备)
三、查看节点生成的 mdev 设备列表
1、create文件注入uuid之前
说明:向指定vGPU类型目录下create文件注入uuid之前,vGPU类型对应目录下available_instances数值不为0,表示GPU卡可创建的最大vGPU设备个数。
此时调用libvirt接口virsh nodedev-list查看mdev设备,返回空,表示libvirt未识别到vGPU设备。
[root@localhost mdev_supported_types]# pwd
/sys/bus/pci/devices/0000:3d:00.0/mdev_supported_types
[root@localhost mdev_supported_types]# ls
nvidia-222 nvidia-223 nvidia-224 nvidia-225 nvidia-226 nvidia-227 nvidia-228 nvidia-229 nvidia-230 nvidia-231
nvidia-232 nvidia-233 nvidia-234 nvidia-252 nvidia-319 nvidia-320 nvidia-321
[root@localhost mdev_supported_types]# for i in `ls`;do cat $i/name |awk '{print $2}'; done;
T4-1B
T4-2B
T4-2B4
T4-1A
T4-2A
T4-4A
T4-8A
T4-16A
T4-1Q
T4-2Q
T4-4Q
T4-8Q
T4-16Q
T4-1B4
T4-4C
T4-8C
T4-16C
[root@localhost mdev_supported_types]# for i in `ls`;do cat $i/available_instances |awk '{print $1}'; done;
16
8
8
16
8
4
2
1
16
8
4
2
1
16
4
2
1
[root@localhost mdev_supported_types]# virsh nodedev-list | grep mdev
[root@localhost mdev_supported_types]#
2、create文件注入uuid之后
说明:向指定vGPU类型目录下create文件注入uuid之后,vGPU类型对应目录下available_instances数值变为0,此时可通过virsh nodedev-list查看到vGPU对应mdev设备。
[root@localhost mdev_supported_types]# virsh nodedev-list | grep mdev
mdev_1626b1c8_9532_4356_a218_c0ebd35e5450
mdev_20572bba_3133_4c2f_a2b5_a1bac1381968
mdev_250f9010_7368_4b40_a943_03025167197c
mdev_2807c84a_349c_41ee_9ce5_562e2591fceb
mdev_31b422c4_68f4_4243_9986_c2d59a7c681b
mdev_3f2992e8_b8e0_49b9_8ccf_cd4f7d059046
mdev_948febb4_e14d_428b_bea5_ffe88483d504
mdev_9aa97536_247e_42b7_a934_2f88f5848d2e
mdev_9b91d0a1_4b08_4849_9ed7_647ffb7ec500
mdev_ae8c2df9_2aee_4659_a71b_62195b6ba7e0
mdev_b4471ad4_64f4_43c0_a5a8_49a2cfcd28ea
mdev_c9cd7b64_f353_469c_b207_a87c0bd1974f
mdev_d61a83a3_1ebd_4175_bb79_d4a644fc0261
mdev_dbe9e01c_d9dc_48bc_a3d9_644d37cf79e8
mdev_e0054671_909f_494d_b83d_cb8ace4e7685
mdev_e46ef5ba_ce09_4974_9d6f_c44807351f09
[root@localhost mdev_supported_types]# for i in `ls`;do cat $i/available_instances |awk '{print $1}'; done;
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
[root@localhost mdev_supported_types]#
四、vGPU对应mdev_type映射关系
1、vGPU显存分配
在“vGPU类型名称”中,vGPU类型后面的数字,表示为该类型的vGPU分配的帧缓冲区数量。不同的物理GPU对资源的需求不同,在同一物理GPU上可以同时创建的最大vGPU数也会有所不同。
例如,T4-8Q型vGPU,表示Tesla T4型号的物理GPU卡虚拟的Q-series系列vGPU,每个vGPU显存8G。
Tesla T4型号GPU卡显存16G,最多可支持创建2个T4-8Q型vGPU实例(T4:16G总显存=2个VM * 每个VM占用8G显存)。
Tesla V100型号GPU卡显存32G,最多可支持创建4个V100D-8Q型vGPU实例(V100:32G总显存=4个VM * 每个VM占用8G显存)。
2、获取mdev_type映射关系
如下,可直接调用vdsm-client命令获取。
也可通过自定义shell脚本,遍历指定目录下对应的设备文件获取映射关系。
# vdsm-client Host hostdevListByCaps
...
"mdev": {
"nvidia-155": {
"name": "GRID M10-2B",
"available_instances": "4"
},
"nvidia-36": {
"name": "GRID M10-0Q",
"available_instances": "16"
},
...
3、Tesla T4和Tesla V100的映射关系
NVIDIA T4型号GPU映射关系:
type name | type id | 每颗GPU可创建的vGPU数量 |
T4-1B | nvidia-222 | 16 |
T4-2B | nvidia-223 | 8 |
T4-2B4 | nvidia-224 | 8 |
T4-1A | nvidia-225 | 16 |
T4-2A | nvidia-226 | 8 |
T4-4A | nvidia-227 | 4 |
T4-8A | nvidia-228 | 2 |
T4-16A | nvidia-229 | 1 |
T4-1Q | nvidia-230 | 16 |
T4-2Q | nvidia-231 | 8 |
T4-4Q | nvidia-232 | 4 |
T4-8Q | nvidia-233 | 2 |
T4-16Q | nvidia-234 | 1 |
T4-1B4 | nvidia-252 | 16 |
T4-4C | nvidia-319 | 4 |
T4-8C | nvidia-320 | 2 |
T4-16C | nvidia-321 | 1 |
NVIDIA V100型号GPU映射关系:
type name | type id | 每颗GPU可创建的vGPU数量 |
V100D-1Q | nvidia-180 | 32 |
V100D-2Q | nvidia-181 | 16 |
V100D-4Q | nvidia-182 | 8 |
V100D-8Q | nvidia-183 | 4 |
V100D-16Q | nvidia-184 | 2 |
V100D-32Q | nvidia-185 | 1 |
V100D-1A | nvidia-186 | 32 |
V100D-2A | nvidia-187 | 16 |
V100D-4A | nvidia-188 | 8 |
V100D-8A | nvidia-189 | 4 |
V100D-16A | nvidia-190 | 2 |
V100D-32A | nvidia-191 | 1 |
V100D-1B | nvidia-192 | 32 |
V100D-2B | nvidia-193 | 16 |
V100D-2B4 | nvidia-218 | 16 |
V100D-1B4 | nvidia-249 | 32 |
V100D-4C | nvidia-311 | 8 |
说明:
type name,可以理解为nvidia编号; type id,可以理解为底层编号;
这两个变量都是可确定唯一GPU物理型号、vGPU虚拟化类型以及vGPU分片资源组合的字段。
五、NVIDIA License Server创建及使用
1、创建License Server主机
License Server主机创建之后,需要安装java和License Server软件,并获取宿主虚机的 mac 地址。
注意:向NVIDIA官网申请License文件,需要绑定License Server的管理网卡mac,若License Server使用虚拟机,mac地址要固定。
2、注册 NVIDIA 企业账号,申请 license(或直接购买)
URL:https://enterpriseproductregistration.nvidia.com/?LicType=EVAL&ProductFamily=vGPU
3、等待NVIDIA官方邮件回复
若接受到NVIDIA修改密码邮件,按提示修改密码,至此,就已获取 NVIDIA 企业账户。
4、接受license邮件,按步骤操作
带有附件entitlement-****.pdf,包含 PAK ID ,根据NVIDIA回复邮件pdf附件中如何使用PAK ID的相关网页地址操作
https://docs.nvidia.com/grid/latest/grid-software-quick-start-guide/index.html
5、进入NVIDIA登录页面,输入企业账户的账号密码登录
https://nvid.nvidia.com/dashboard/#/dashboard
6、登录之后,跳转到此 url【访问不稳定,建议用VPN】
https://ui.licensing.nvidia.com/
7、根据所需vGPU产品类型创建license
点击LICENSE SERVERS,根据创建的license Server实例的mac,选择Project,点击CREATE LICENSE SERVER.
此处,Licenses个数默认为1,可以根据需要填写license server支持的vGPU虚机个数。
8、下载最终生成的license文件
9、导入license文件到License Server
license的bin文件,导入到新建的License Server虚机实例中。
注册license授权文件,导入bin文件并上传到: http://127.0.0.1:8080/licserver
至此,有效的license server创建完成。
六、vGPU Guest虚机连接License Server
1、确认Guest虚机中有mdev设备
# lspci | grep NVIDIA
2、配置 nvidia-gridd 服务
添加 License Server 内网地址及对应端口,配置文件及待修改参数如下:
# vim /etc/nvidia/gridd.conf
ServerAddress=172.16.1.200 /* License Server 的 IP 地址*/
ServerPort=7070 /* License Server 的端口号,默认为 7070*/
FeatureType= /* 如果是用于 CUDA 计算,填“4”即可*/
3、重启 nvidia-gridd 服务
# systemctl restart nvidia-grid
# systemctl status nvidia-grid
4、查看是否成功连接 license Server
成功连接 License Server 状态: License acquired successfully.
七、实际应用问题1 -- FRL的限制及解除
1、什么是FRL
1)概念介绍
在物理GPU上配置的单个vGPU产生的基准分值,低于物理GPU在直通模式下运行的分值。除了性能差异外,可能归因于vGPU帧缓冲区比较小。
vGPU包含一个性能平衡的特性,即帧速率限制器(FRL ,frame-rate limiter)。
FRL用来确保驻留在同一物理GPU上的多个vgpu之间的性能平衡。FRL设置的目的是为了提供良好的交互式远程图形体验,但与直通GPU上运行的相同基准测试相比,它可能会降低依赖于测量帧渲染率的基准测试分数。
2)应用场景分析
在使用最优调度程序的vgpu上,启用FRL。在使用固定共享或相等共享调度程序的vgpu上,禁用FRL。
若60帧无法满足用户需求,例如VR制作,需要解除vGPU的60帧锁死限制。
3)具体帧率限制
FRL 开启后将对vGPU的最大帧率(FPS)进行如下限制:
对于B系列vgpu,最大帧率为45fps。
Q系列、C系列、A系列vgpu最大帧率为60fps。
缺省情况下,所有GPU的FRL开关为开启状态。当vGPU调度行为从支持备用vGPU调度程序的默认最佳调度程序更改时,FRL是禁用的。
2、如何解除vGPU的FRL限制
基于KVM解决FRL限制的方法:
FRL由内部vGPU设置控制。在使用best-effort(尽力而为)调度程序的vGPU上,NVIDIA不会在禁用FRL的情况下验证vGPU,但是为了验证基准性能,可以通过在vGPU配置文件中设置frame_rate_limiter=0来临时禁用FRL。
操作格式如下:
# echo "frame_rate_limiter=0" > /sys/bus/mdev/devices/{vgpu-id}/nvidia/vgpu_params
例如:
# echo "frame_rate_limiter=0" > /sys/bus/mdev/devices/aa618089-8b16-4d01-a136-25a0f3c73123/nvidia/vgpu_params
设置之后,VM的vGPU就可以不受帧速率限制地运行了。
八、实际应用问题2 -- 创建 windows Guest 虚机黑屏问题
1、vGPU虚机console异常显示
Windows虚机安装了vGPU的驱动后,由于显示被vGPU驱动接管,此时通过VNC访问会显示黑屏。需要通过RDP远程桌面访问Windows实例。
异常显示如下:
2、解决方法
使用网络可连通的其它windows环境,RDP方式远程登录到vGPU的windows虚机中,设备管理器中,可看到NVIDIA对应的设备名称以及类型。
例如,当前设备类型为 NVIDIA GRID V100D-1Q
3、连接license使用
进入NVIDIA控制面板,配置license,连接成功后即可正常使用。
注意:配置license地址和端口后,切换或者退出,会提示是否保存。重新再登录后,会提示已获Quadro许可。
九、实际应用问题3 -- License Server异常
1、vGPU License Server注入license文件失败
上传license的bin文件,报错:
2、处理方法
参考:https://nvidia.custhelp.com/app/answers/detail/a_id/4111/kw/server
[root@host ~]# systemctl list-units| grep nvidia
flexnetls-nvidia.service loaded active running FlexnetLS Local License Server for nvidia.
[root@host ~]# 【关闭license网页】
[root@host ~]# systemctl stop flexnetls-nvidia.service
[root@hos ~]# mv /var/opt/flexnetls/nvidia/ /tmp
[root@host ~]# systemctl restart flexnetls-nvidia.service
参考:
https://docs.nvidia.com/grid/latest/grid-vgpu-user-guide/
https://docs.nvidia.com/grid/latest/grid-vgpu-user-guide/#vgpu-types-tesla-t4