企业存储技术 · 2020年08月20日

Bitfusion:细粒度切片的GPU池化CUDA计算方案

本文转载自“VMware中国”微信公众号,链接出处见文末。

 编者注: 

VMware在2019年8月收购了BitFusion,后者是硬件加速设备虚拟化领域的先驱,重点关注GPU技术。 

BitFusion 提供了一个软件平台,可将特定的物理资源与环境中所连接的服务器分离,通过网络的方式让多个Client共享GPU计算能力。  
 
VMware一直没有自己的GPU虚拟化技术,通过BitFusion终于补上了GPU虚拟化这块空白。

Bitfusion 要解决的是以下问题:

  • 有些团队在利用机器学习进行研究时没有 GPU 可以用来加速学习速度;
  • 而另一些团队已经拥有了 GPU,但是他们没有完全利用 GPU 的处理能力,很多 GPU 资源在白白闲置。

Bitfusion 把 GPU 资源集中起来,组成 GPU 资源池,然后共享给大家使用,这个方案分为两部分:

  • 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 硬件。

image.png
Bitfusion 共享 GPU 方案架构

Bitfusion 把机器学习对于本地 GPU 的访问转换成远程 GPU 访问,它是怎么识别这些 GPU 调用的?它对机器学习应用有什么要求吗?Bitfusion 对于机器学习的基本要求就是必须使用 CUDA 架构,只有机器学习应用和 GPU 都使用 CUDA 架构才能被 Bitfusion 支持。
image.png

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

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

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

image.png

在整个软件堆栈中,Bitfusion 在 CUDA driver 这个层面上截获了所有的 CUDA 服务访问,然后把这些服务请求和数据通过网络传递给 Bitfusion Server,在服务器这一端再把这些服务请求交给真正的 CUDA driver 来处理,这就是 Bitfusion 的基本工作原理,如下图所示。我们可以看到 Bitfusion Client 的软件堆栈中插入了一个 CUDA driver 的代理,通过这个代理来把服务请求转发给 Bitfusion Server 上的 CUDA 下层服务堆栈。GPU 辅助的神经网络学习完成之后,结果再逆向通过这个堆栈返回机器学习应用 ML App。

image.png

image.png

在实现 CUDA 堆栈功能的基础上,Bitfusion 还支持对于 GPU 的灵活划分。对于很多机器学习应用来讲,它们的计算量不需要用到整块 GPU,只需要部分计算能力就行了。同时,把一块物理 GPU 划分成多个分区分配给多个用户使用,就可以实现 GPU 共享。

NVIDIA 自己的 vGPU 解放方案也可以实现 GPU 的分区,通过分配 GPU 内存来控制对于 GPU 计算资源的使用,分配的比例有全部、二分一、四分之一等,各个 vGPU 的大小必须一致,比较死板。

相比之下 Bitfusion 的分区方案就灵活多了,可以根据用户需求任意划分分区,分区大小不需要一致。特别适合于机器学习这种应用场景,不同的机器学习应用需要的 GPU 算力是不一样的,分配一块合适的分区有助于避免 GPU 资源的浪费。同时,由于神经网络的训练通常是一个需要反复调整参数持续改进的过程,独占整个 GPU 会造成极大的资源浪费,Bitfusion 的 GPU 分区功能特别适合这种应用场景。

Bitfusion 的 GPU 分区方案具有以下特点:

  • 分区可以是任意大小:Bitfusion 可以指定任意大小的分区,例如 1%;如前所述,这特别适用于开发测试等试验性的应用场景。
  • GPU 独立性:各个 GPU 分区相互独立,各自运行不同的 AI 框架和模型,绝对不会相互影响。
  • 大小可动态调整:GPU 分区可以动态调整大小,例如从同一块物理 GPU 分出的两块分区分别为 45% 和 55%,55% 的 GPU 分区可以进一步拆分成更小的两块 35% 和 20%,而不会影响另一块 45% 分区 上工作负载的正常运行。
  • 支持多个物理 GPU:从不同物理 GPU 中分出来的多个 GPU 分区能够以多个 GPU 的形式分配给同一个用户和工作负载,这既可以提高整个 GPU 资源池的利用率,也有助于开发和调试多 GPU 工作负载应用。

image.png

image.png

Bitfusion 的工作原理决定了其应用场景,想要使用 Bitfusion 来共享 GPU 加速机器学习必须满足以下条件:

  • GPU 支持 CUDA 架构并且支持 vSphere 7
  • 机器学习应用的 Linux 虚机必须在 vSphere 平台上运行 (vSphere 6.7 以上版本)

提请大家注意,Bitfusion 并不适用于 VDI 应用场景,如果你想共享 GPU 加速 3D 设计渲染的话,NVIDIA 的 vGPU 是更合适的解决方案。Bitfusion 目前只支持 GPU 虚拟化共享,将来还有计划支持其他硬件加速设备  FPGA 和 ASIC 的虚拟化和共享。

Bitfusion 的工作原理决定了它有一些额外的资源消耗,主要是客户端和服务器之间的网络传输开销。这些额外的开销对于GPU的利用率会有一些怎样的损耗呢?我们将在下一期的“Bitfusion性能评估”中来回答这些问题。

image.png

将 VMware vSphere / vSAN 软件与 Intel 的最新硬件平台技术相结合,可以为用户交付最佳的超融合架构平台,帮助用户简化数据中心管理,降低采购和运维成本,轻松应对企业在数字化转型中面对的各种挑战,是现代应用的理想运行平台:

  • VMware vSAN 是最佳的存储方案平台,具有管理简便、高性能、低成本、易扩展的特点,在 vSAN 平台上可以支持任何类型的应用。
  • Intel 至强处理器提供最强计算能力,基于傲腾 (Optane) 和 3D NAND 技术的固态盘是理想的高速缓存,以太网融合网卡提供稳定的网络带宽和低网络延迟。

image.png

推荐阅读

本文转载自企业存储技术微信公众号原文链接点这里

注:本文只代表作者个人观点,与任何组织机构无关,如有错误和不足之处欢迎在留言中批评指正。 进一步交流技术可以加我的微信/QQ:490834312。
尊重知识,转载时请保留全文,并包括本行及如下二维码。感谢您的阅读和支持!《企业存储技术》微信公众号:HL_Storage,也欢迎关注企业存储技术极术专栏,定期更新。
42.jpg

推荐阅读
关注数
5614
内容数
263
关注存储、服务器、图形工作站、AI硬件等方面技术。WeChat:490834312
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息