最近开始接触云计算底层GPU虚拟化方面的业务,之前对GPU直通,显存监控等了解的不多,查阅资料,做下总结。
一、GPU与CPU
GPU 表示 Graphics Processing Unit,即图像处理单元。一开始的时候GPU 主要用于 3D 游戏的渲染,但是现在GPU已经广泛用于加速计算性负载,比如金融模型计算、科学研究以及石油和天然气开发等。从架构上看,CPU 是由若干核(core)和许多的缓存(cache memory)组成,因此CPU可以并行处理若干线程。相对地,GPU是由几百个核组成,因此可以并发处理数千个线程。尽管 GPU 的内核数目远远超过 CPU,但是它的每个核的处理能力远小于CPU的核,而且不具有现代操作系统的所需要的一些特性,GPU 并不合适用于处理普通的计算。它们更多地用于计算消耗性操作,比如视频处理和物理仿真等。
(GPU 和 CPU 对比)
可以使用 lspci 命令来获取 GPU PCI 设备:
# lspci -nn | grep NVI 85:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK104GL [GRID K2] [10de:11bf] (rev a1) 86:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK104GL [GRID K2] [10de:11bf] (rev a1
输出中各个值的说明:
输出值 | 含义 | 详细解释 |
"85:00.0" 和 “86::00.0” | 以 ”bus:slot.func“ 格式来唯一标识一个 PCI 功能设备 | 唯一定位一个 PCI 设备的虚拟功能,可以是一个物理设备,也可以是一个多功能设备的功能设备,一个多功能设备可以最多有8个功能。
|
”0300“ | PCI 设备类型 | 指 PCI 设备的类型,来自不同厂商的同一类设备的类型码可以是相同的。 |
“10de” | 供应商识别字段(Vendor ID) | 该字段用一标明设备的制造者。一个有效的供应商标识由 PCI SIG 来分配,以保证它的唯一性。Intel 的 ID 为 0x8086,Nvidia 的 ID 为 0x10de |
“11bf” | 设备识别字段(Device ID) | 用以标明特定的设备,具体代码由供应商来分配。本例中表示的是 GPU 图形卡的设备 ID。 |
“a1” | 版本识别字段(Revision ID) | 用来指定一个设备特有的版本识别代码,其值由供应商提供 |
二、GPU与显卡
GPU是显卡的核心,显卡则是由GPU、显存、电路板,还有BIOS固件组成的,GPU不等于显卡。
GPU只是显卡上的一个核心处理芯片,是显卡的心脏,不能单独作为外接扩展卡使用,GPU因并行计算任务较重,所以功耗较大,只能焊接在显卡的电路板上使用。
显卡上都有GPU,它是区分显性能的最主要元件,显卡也叫显示适配器,分为独立显卡和主板上集成显卡,独立显卡主要由GPU、显存和接口电路构成,集成显卡没有独立显存而是使用主板上的内存。
如果把显卡的电路板看成主板,GPU就是显卡上的CPU,即显卡的中央处理器。
现在的GPU开发厂家只有2个,一个是AMD(ATI),一个是N'VIDIA英伟达。GPU之于显卡,就相当于CPU之于电脑的关系。
GPU运算时没有其他CPU那些指令集之类东西干扰,所以专一运算效率更高。
GPU是图形处理器,一般GPU就是焊接在显卡上的,大部分情况下,我们所说GPU就等于指显卡,但是实际情况是GPU是显示卡的“心脏”,是显卡的一个核心零部件,核心组成部分。它们是“寄生与被寄生”关系。GPU本身并不能单独工作,只有配合上附属电路和接口,才能工作。这时候,它就变成了显卡。
三、GPU直通
也就是GPU穿透(pass-through),简单说,GPU直通就是虚拟机实现了将物理显卡直接映射到虚拟机,这样你的虚拟机的图像信息就不再交给虚拟显卡,而是直接发送到你真是存在的显卡进行运算,这样效率更高。
四、GPU虚拟化
虚拟化就是将显卡进行切片,并将这些显卡时间片分配给虚拟机使用的过程。有些型号的GPU设备可虚拟化为n个vGPU,n个虚拟机可同时直接使用该GPU设备,根据不同的GPU设备型号和虚拟策略,可进行GPU独占或透传等相应设计。每个虚拟机通过绑定的vGPU可以直接访问物理GPU的部分硬件资源(所有vGPU都能够分时共享访问物理GPU的3D图形引擎和视频编解码引擎,并拥有独立的显存)
五、显存占用和GPU监控
nvidia-smi是 Nvidia 显卡命令行管理套件,基于 NVML 库,可管理和监控 Nvidia GPU 设备。
这里推荐一个好用的小工具:gpustat, 直接pip install gpustat即可安装,gpustat 基于nvidia-smi,可以提供更美观简洁的展示,结合 watch 命令,可以动态实时监控GPU 的使用情况。
watch --color -n1 gpustat -cpu
显存可以看成是空间,类似于内存。
-
显存用于存放模型,数据
-
显存越大,所能运行的网络也就越大
GPU 计算单元类似于 CPU 中的核,用来进行数值计算。