【海云捷迅云课堂】vGPU在OpenStack中的应用

日期:2020-05-15

一、什么是GPU

GPU:Graphics Processing Unit,即图像处理单元,是一种专门处理图像运算工作的微处理器。

CPU是由若干核(core)和许多的缓存(cache memory)组成,因此CPU可以并行处理若干线程。相对地,GPU是由几百个核组成,因此可以并发处理数千个线程。尽管GPU的内核数目远远超过CPU,但是它的每个核的处理能力远小于CPU的核,而且不具有现代操作系统的所需要的一些特性,GPU并不合适用于处理普通的计算。它们更多地用于计算消耗性操作,比如视频处理和物理仿真等。

20200518092226

二、虚拟化环境GPU使用方式

在虚拟化环境中,GPU使用目前可以分为以下几类:

■ GPU直通模式,即GPU透传

■ GPU SR-IOV,目前主要是AMD在采用此种方案

■ GPU分片虚拟化,包括Intel GVT-g和NVIDIA GRID vGPU

20200518092330

图片来源于网络

以下是对这些方案的简单介绍:

1.GPU透传:物理GPU直接透传给虚机。

第一种方案,在我们的产品里已经实现,且支持大部分GPU设备。对于Windows镜像,我们建议云主机从UEFI启动。

2.GPU SR-IOV:使用SR-IOV技术,将物理GPU划分成多个VF,每个VF提供给云主机使用。

AMD采用的就是这种方案,目前市场上2款产品S7150和MI25。

3.GPU分片虚拟化

Intel提供GVT-g方案:针对不同的hypervisor,应用于KVM上,叫KVMGT;应用于Xen上,称为XenGT。

NVIDIA GRID vGPU产品系列

以上2个厂家均采用GPU分片虚拟化方案,即基于Linux内核VFIO mediated框架。此方案的kernel部分代码称为mdev模块,由Intel和NVIDIA共同提交到4.10内核,但是CentOS已经backport到3.10.x内核。

分片虚拟化与透传的区别是,分片虚拟化把会影响性能的访问直接透传给虚拟机,把性能无关和功能性的MMIO访问做拦截并在mdev模块内做模拟。

当然,也可以简单的理解为对物理GPU资源的分片划分,如物理GPU的显存大小为16G,如果划分出4个vGPU,那么每个vGPU的显存大小就是4G。

实现GPU分片虚拟化需要满足以下条件:

1.硬件支持:

Intel需要特定的CPU支持,Intel(r) Xeon(r) E3_v4, E3_v5 and E3_v6 with Intel Graphics processor

NVIDIA也需要特定的GPU卡,可参考NVIDIA官方网站

2.内核版本、QEMU版本(v2.0及以上)

3.GPU mdev驱动支持,这部分Intel已经开源,但是NVIDIA不开源,需要通过License来获取。

从AWStack 2.6版本,我们产品支持GPU透传,即将一个物理的GPU设备透传给某一个云主机,独享物理GPU资源。

实现GPU虚拟化,每个云主机拥有一个vGPU设备,在满足客户图像视频处理、机器学习、深度学习等应用场景的同时,做到物理GPU资源共享。

如何在产品中使用NVIDIA vGPU

一、前期准备

1.采购到NVIDIA支持GPU虚拟化的物理GPU卡后,需要在NVIDIA官方网站上注册账号, 并购买License或申请90天的试用版。针对Hypervisor类型可下载不同版本的软件包:

20200518093839

2.安装物理GPU卡,GPU卡对散热要求比较高,如果温度过高会出现掉卡问题。

3.安装NVIDIA vGPU manager之前先禁用操作系统上的Nouveau驱动

1)在安装GPU卡的物理节点上,新建文件

/etc/modprobe.d/nvidia-installer-disable-nouveau.conf

blacklist nouveau

options nouveau modeset=0

 

2)重新生成ramdisk,并重启物理节点:

# dracut –force

# reboot

 

3)在安装有物理GPU卡的物理节点上安装vGPU manager软件

# chmod 777 NVIDIA-Linux-x86_64-440.43-vgpu-kvm.run

# ./NVIDIA-Linux-x86_64-440.43-vgpu-kvm.run

 

4)确认nvidia_vgpu_vfio内核模块已被加载

# lsmod |grep nvidia_vgpu_vfio

 

5)启动并加载nvidia-vgpu-mgr服务

# systemctl enable nvidia-vgpu-mgr.service

# systemctl start nvidia-vgpu-mgr.service

 

6)重启物理机器

# reboot

 

7)确认内核mdev目录是否生成

# ls /sys/class/mdev_bus/

0000:18:00.0 0000:82:00.0

 

4.搭建NVIDIA License Server

20200518093957

云平台云主机使用vGPU,需要获取License,一般需要在客户环境里搭建License server,可以是单节点,也可以部署两台做HA。

License server安装时,需要将从官网上获取到的License文件,上传到License server上。

云主机需要能访问License server的7070端口,来获取License。

支持在Windows和Linux操作系统上安装License server,具体可以参考文档:

https://docs.nvidia.com/grid/ls/2019.11/grid-license-server-user-guide/index.html

二、用户使用流程:

20200518094045

1.前期准备工作完成后,登录云管平台,同步物理节点GPU信息到云管平台。

2.云管界面,选择物理节点、物理GPU来创建vGPU规格。

3.新建vGPU规格完成后,可以在云主机页面创建云主机,支持2种场景:创建云主机时同时选择vGPU规格或者vGPU设备;或者创建云主机完成后,再绑定vGPU设备。

创建带vGPU的云主机或者云主机绑定vGPU后,可以在物理节点上看到vGPU设备保存在sysfs中,云主机XML文件会生成一个设备和这个关联:

20200518094118

云主机XML:

20200518094150

云主机启动之后,用户需要在云主机内安装从官方网站下载的软件包里的驱动,并配置连接License server。具体可以参考文档:

https://docs.nvidia.com/grid/ls/2019.11/grid-license-server-user-guide/index.html

当然也可以自定义镜像模板,预安装好云主机vGPU驱动以及配置好License server连接。

安装软件包说明:

20200518094220

至此,用户可以在云主机里运行自己的应用了。

参考链接

[1]https://www.cnblogs.com/sammyliu/p/5179414.html

[2]https://docs.nvidia.com/grid/latest/grid-vgpu-user-guide/index.html

[3]https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-device-gpu#sect-device-GPU-vGPU

[4] https://docs.nvidia.com/grid/ls/

最新信息