VMware 与 GPU的发展

随着机器学习和深度学习对大规模算例的要求,基于大的吞吐量设计的GPU得到了大力发展,其中NVIDIA的发展最快,占据市场第一的份额。VMware对硬件对支持一直在更新,GPU也不例外。在没有Bitfusion出现之前,GPU在vSphere虚拟化平台上使用,分为2种模式:直通模式和vGPU模式。

GPU直通模式(Pass-Through)

在GPU直通模式下,整个物理GPU直接分配给一个虚拟机,绕过NVIDA虚拟GPU管理器。在这种操作模式下,GPU只由运行在分配给它的VM中的NVIDIA驱动程序访问,GPU是不能在虚拟机之间共享的,当然,也就不能支持在vSphere环境中对vMotion。

vGPU模式

NVIDIA Virtual GPU允许多个虚拟机(VMs)同时直接访问单个物理GPU。通过这样做,NVIDIA vGPU为虚拟机提供了高性能的图形模式和应用程序兼容性,以及在多个工作负载之间共享一个GPU带来的成本效益和可伸缩性。这种模式下,vGPU的生成是由NVIDIA的License决定的,VMware的VM只是接入到不同的vGPU并使用。

按照VMware一贯的风格,以上和GPU结合的应用方式完全不符合其路数。VMware的路数是啥,就是不管什么资源,拿过来都给你来个资源池,然后在有VMware分配给使用者。成功路上有技术资源池,存储资源池和网络资源池。于是,VMware看上了Bitfusion。

Bitfusion

Bitfusion公司成立于2015年,总部位于加利福尼亚州,提供弹性人工智能(AI)基础设施平台,专注于机器学习,大数据和Docker容器。

Bitfusion工作模式

Bitfusion 把 GPU 资源集中起来,组成 GPU 资源池,然后共享给大家使用。这个和VMware的套路很像吧!2019年中旬,VMware收购了专业初创公司Bitfusion。在收购了Bitfuion公司以后,VMware将把Bitfusion集成到其拳头产品vSphere平台中。

官方提供的资料这样描述Bitfusion的模式,Bitfusion方案分为两部分:

Bitfusion 服务器:把 GPU 安装在 vSphere 服务器上 (要求 vSphere 7 以上版本),然后在上面运行 Bitfusion Server (以 OVA 格式提供的 virtual appliance),Bitfusion Server 可以把物理 GPU 资源虚拟化,共享给多个用户使用。
Bitfusion 客户机:Bitfusion Client 是运行在其他 vSphere 服务器上的 Linux 虚机 (要求 vSphere 6.7 以上版本), 机器学习 ML (Machine Learning) 工作负载运行在这些虚拟机上,Bitfusion 会把它们对于GPU 的服务请求通过网络传输给 Bitfusion Server,计算完成后再返回结果。对于 ML 工作负载来说,远程 GPU 是完全透明的,它就像是在使用本地的 GPU 硬件。值得注意的是,客户机现在支持VM,裸机和容器。

Bitfusion原理

CUDA

CUDA的全称是 Compute Unified Device Architecture,它是由 NVIDIA 提供的通用并行计算架构,该架构使开发人员能够快速地开发利用 GPU 的软件,通过充分利用 GPU 所提供的上千个处理单元来快速解决复杂计算问题。NVIDIA 为开发人员提供了 CUDA 工具包,其中包括在 GPU 加速库、编译器、开发工具和 CUDA 运行时。

前面说过目前主流的 GPU 厂商有 NVIDIA、AMD 和 Intel,Intel 也提供了对于 CUDA 的支持;AMD 则另外搞了一套标准 HIP (Heterogeneous Computing Interface for Portability,可移植异构计算接口),提供了一个工具 Hipify 来将 CUDA 代码转换成 HIP。所以CUDA是一个很广泛的使用标准。

gpu容器虚拟化 方案 gpu如何实现硬件虚拟化_机器学习

Bitfusion架构

使用 TensorFlow 框架开发的机器学习软件运行堆栈如上图所示,其中 CuDNN (CUDA Deep Neural Network) 是 NVIDIA 为深度神经网络开发的 GPU 加速库。

而Bitfusion 在 CUDA driver 这个层面上截获了所有的 CUDA 服务访问,然后把这些服务请求和数据通过网络传递给 Bitfusion Server,在服务器这一端再把这些服务请求交给真正的 CUDA driver 来处理,这就是 Bitfusion 的基本工作原理。所以,原则上支持CUDA的GPU都可以使用Bitfusion方案。

gpu容器虚拟化 方案 gpu如何实现硬件虚拟化_机器学习_02


如图所示,可以看到 Bitfusion Client 在堆栈中插入了一个 CUDA driver 的代理,通过这个代理来把服务请求转发给 Bitfusion Server 上的 CUDA 下层服务堆栈。GPU 辅助的神经网络学习完成之后,结果再逆向通过这个堆栈返回机器学习应用 ML App。

Bitfusion的优势

分区可以是任意大小

Bitfusion 可以指定任意大小的分区,例如 1%;如前所述,这特别适用于开发测试等试验性的应用场景。

GPU 分区独立性

各个 GPU 分区相互独立,各自运行不同的 AI 框架和模型,绝对不会相互影响。

GPU分区大小可动态调整

GPU 分区可以动态调整大小,例如从同一块物理 GPU 分出的两块分区分别为 45% 和 55%,55% 的 GPU 分区可以进一步拆分成更小的两块 35% 和 20%,而不会影响另一块 45% 分区 上工作负载的正常运行。

支持跨主机支持多个物理 GPU

从不同物理 GPU 中分出来的多个 GPU 分区能够以多个 GPU 的形式分配给同一个用户和工作负载,这既可以提高整个 GPU 资源池的利用率,也有助于开发和调试多 GPU 工作负载应用。

可能的弱点

那么问题就来了,由于引入了网络远程支持,必然到来网络延迟,抖动等对计算结果的影响,可以说,对于大部分实时性要求高对应用,Bitfusion并不适合;而对实时性要求不高对大吞吐量业务,如大量算例的机器学习,Bitfusion还是很适合的。
另外,如上图所示,在CUDA堆栈中多增加了一对环节,带来方便的同时,也增加了两个故障可能点。相对与原有的计算堆栈,Bitfusion的可靠性应该是有所下降。当然,这个只是从原理和结构上分析,并不能作为判断可靠性的绝对依据。
最后,2019年中旬VMware收购Bitfusion后与vSphere平台整合,到现在只有一年多,其融合的兼容性和稳定性现在还有大规模应用的案例支撑。

Bitfusion性能

笔者由于没有GPU环境,只要引援官方的性能评估链接
Bitfusion 性能评估

在小规模用户测试中,可以看到使用Bitfusion带来的优势:

gpu容器虚拟化 方案 gpu如何实现硬件虚拟化_gpu容器虚拟化 方案_03


gpu容器虚拟化 方案 gpu如何实现硬件虚拟化_CUDA_04


这便是Bitfusion的理想吧。

以上。