NVIDIA vGPU应用

编程入门 行业动态 更新时间:2024-10-25 17:23:13

 

目录

 

一、vGPU产品类型

1、NVIDIA vGPU产品简介

2、如何选择合适的vGPU

二、基于KVM创建vGPU设备

1、物理机安装vGPU驱动

2、切换到物理GPU对应的mdev_supported_types目录

3、mdev_supported_types子目录遍历待创建的vGPU类型

4、确认可在物理GPU上创建vGPU类型实例的个数

5、生成随机uuid写入create文件

6、确认vGPU设备已创建

三、查看节点生成的 mdev 设备列表

1、create文件注入uuid之前

2、create文件注入uuid之后

四、vGPU对应mdev_type映射关系

1、vGPU显存分配

2、获取mdev_type映射关系

3、Tesla T4和Tesla V100的映射关系

五、NVIDIA License Server创建及使用

1、创建License Server主机

2、注册 NVIDIA 企业账号,申请 license(或直接购买)

3、等待NVIDIA官方邮件回复

4、接受license邮件,按步骤操作

5、进入NVIDIA登录页面,输入企业账户的账号密码登录

6、登录之后,跳转到此 url【访问不稳定,建议用VPN】

7、根据所需vGPU产品类型创建license

8、下载最终生成的license文件

9、导入license文件到License Server

六、vGPU Guest虚机连接License Server

1、确认Guest虚机中有mdev设备

2、配置 nvidia-gridd 服务

3、重启 nvidia-gridd 服务

4、查看是否成功连接 license Server

七、实际应用问题1 -- FRL的限制及解除

1、什么是FRL

2、如何解除vGPU的FRL限制

八、实际应用问题2 -- 创建 windows Guest 虚机黑屏问题

1、vGPU虚机console异常显示

2、解决方法

3、连接license使用

九、实际应用问题3 -- License Server异常

1、vGPU License Server注入license文件失败

2、处理方法


一、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主机创建之后,需要安装javaLicense Server软件,并获取宿主虚机的 mac 地址。

注意:向NVIDIA官网申请License文件,需要绑定License Server的管理网卡mac,若License Server使用虚拟机,mac地址要固定

2、注册 NVIDIA 企业账号,申请 license(或直接购买)

URL:https://enterpriseproductregistration.nvidia/?LicType=EVAL&ProductFamily=vGPU

3、等待NVIDIA官方邮件回复

若接受到NVIDIA修改密码邮件,按提示修改密码,至此,就已获取 NVIDIA 企业账户。

4、接受license邮件,按步骤操作

带有附件entitlement-****.pdf,包含 PAK ID ,根据NVIDIA回复邮件pdf附件中如何使用PAK ID的相关网页地址操作

https://docs.nvidia/grid/latest/grid-software-quick-start-guide/index.html

5、进入NVIDIA登录页面,输入企业账户的账号密码登录

https://nvid.nvidia/dashboard/#/dashboard

6、登录之后,跳转到此 url【访问不稳定,建议用VPN】

https://ui.licensing.nvidia/

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/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/grid/10.0/grid-vgpu-release-notes-red-hat-el-kvm/index.html#lower-vgpu-benchmarks

https://www.nvidia/content/dam/en-zz/Solutions/design-visualization/solutions/resources/documents1/Virtual-GPU-Packaging-and-Licensing-Guide.pdf

https://docs.nvidia/grid/latest/grid-vgpu-user-guide/

https://docs.nvidia/grid/latest/grid-vgpu-user-guide/#vgpu-types-tesla-t4

 

 

更多推荐

NVIDIA vGPU应用

本文发布于:2023-06-13 16:55:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1385244.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:NVIDIA   vGPU

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!