技术文档

vSphere 上利用 GPU 加速机器学习的最佳方法

2020-05-27 15:01:35 11
文件版本 :
立即下载

GPU 已经成为支撑 AI 应用的一种关键计算加速设备,GPU 的多处理器架构非常适合用来加快深度神经网络应用中的大量矩阵运算过程。大量实测数据表明,跟通用处理器相比,GPU 在运行深度神经网络时具有显著的效能优势。在虚拟机中使用 GPU 主要有三种设置:DirectPath I/O、NVIDIA vGPU、vSphere Bitfusion,我们来比较一下这几种方法的优缺点。

 

1. DirectPath I/O (直通)

这种方法是在 vSphere 虚机上使用 GPU 的“最小干预”途径,ESXi hypervisor 把 GPU 设备直接映射成虚机中的 GPU 设备,供应用使用。

图片关键词

DirectPath I/O 方法适用于需要占用一块或多块物理 GPU 进行机器学习训练,并且训练需要一段时间的场景。这种情况下机器学习模型和数据可能会消耗 GPU 的所有内核和内存,通常是长期运行的模型训练工作。DirectPath I/O 方法通常用于高性能计算方案中,例如计算密集型的模拟或科学计算工作。

DirectPath I/O方法的优点:

  • 所有版本的 vSphere 都支持 DirectPath I/O,虚机的操作系统里需要安装 GPU 驱动程序。

  • 可以将1块或多块 GPU 分配给一个 虚机以充分利用多块 GPU 叠加的计算能力。

  • 用户具有对 GPU 内存和内核独占访问权,没有共享的 GPU 内存或内核,因此不会受到其他用户的干扰。

  • 事实证明 DirectPath I/O 所提供的计算性能与物理 GPU 相比差距仅在几个百分点之内,它是在虚机中使用 GPU 能够达到最高性能的一种方法。

DirectPath I/O方法的缺点

  • vMotion 不支持使用 DirectPath I/O 的虚机。

  • 只能整个地使用 GPU,而不能只使用GPU 的一部分。

  • 不支持虚机快照功能。

  • 不支持多个虚机对一块物理 GPU 的共享。

  • GPU 计算能力可能没有得到充分利用,机器学习作业无法保证 100% 利用 GPU 的全部计算能力或内存容量。

 

2. NVIDIA vGPU

vGPU 是 NVIDIA 的 GPU 虚拟化技术,它需要安装额外的 NVIDIA vCompute Server 软件,在 ESXi 内核中安装 vGPU Manager,在虚机中安装 vGPU Driver。vGPU 通过分配 GPU 内存来控制对于 GPU 计算资源的使用,分配的比例有全部、二分一、四分之一等,各种配置记录在 vGPU Profile 中。在配置虚机时通过指定 vGPU Profile 来确定该虚机使用的 GPU 比例,通过这种方式来实现多个虚机对于同一块 物理 GPU 的共享。

图片关键词

vGPU 支持 vMotion,这对于需要较长训练时间的场景非常有用,我们可以把机器学习的虚机迁移到另一台服务器而不用中断工作,这样便于机器维护等操作。另一种方法是挂起 (suspend) 虚机,等到维护操作结束后再恢复 (resume) 虚机,从断点开始继续运行。

NVIDIA vGPU 方案的优势:

  • vGPU 给机器学习带来了很大的灵活性,虚机既可以使用整块 GPU 或多块 GPU (最多可以将四块物理GPU分配给一个VM),也可以只使用一块 GPU 的部分。

  • 支持虚机 vMotion 和挂起/恢复操作。

  • vGPU 性能跟 DirectPath I/O 基本相当,差距在几个百分点(个位数)以内。

  • 针对不同的工作负载类型可以选择多种调度算法(尽力而为、公平共享、均等共享)来优化物理GPU内核的使用。更多详细信息,可以参考 NVIDIA 的文档

 

NVIDIA vGPU 方案的缺点:

  • vGPU Profile 的资源分配是静态的,虚机启动后就不能改变了;要改变 GPU 分配比例需要重新配置虚机。

  • 当虚机使用多个 GPU 时,必须全部整体使用这些 GPU,而不能只使用这些 GPU 的一部分。

  • 在任何一台服务器上,虚机所使用的 vGPU Profile 的内存大小必须相等。

  • vGPU 需要另行购买软件许可证,成本较高。

 

3. VMware vSphere Bitfusion

vSphere Bitfusion 允许应用通过网络使用安装在另一台服务器上的 GPU,并且可以任意指定 GPU 的使用比例,通过这种方式,它“虚拟化”了对 GPU 的访问。能够远程访问 GPU 是 Bitfusion 技术区别于前面两种方案的最大特点,前两种方案都要求工作负载和 GPU 在同一台服务器上。

图片关键词

Bitfusion 软件分为客户端和服务器端部分,这两个部分都在用户空间中运行,并且本身不包含任何驱动程序。服务器端只需要 GPU 驱动程序软件,客户端需要部分 CUDA 软件堆栈。Bitfusion 的客户端支持多种操作系统版本,最常用的是 Linux。

Bitfusion 特别适用于教学和科研这一类应用场景,特点是使用者数量多,但是单个用户对于 GPU 的利用率不高。Bitfusion 技术可以创建一个 GPU 资源池,提供给多个用户共享使用,这样可以充分提高 GPU 资源的整体利用率。下图对比了未使用 Bitfusion 时 GPU 和使用 Bitfusion 后 vGPU 的利用率,可以看到利用率的变化还是很显著的。这不但让昂贵的 GPU 设备得到充分利用,同时也让更多的用户能够利用 GPU 来加速机器学习过程。

图片关键词

未使用 Bitfusion 时 GPU 的利用率

 

图片关键词

使用 Bitfusion 后的 vGPU 利用率

 

相比于前面两种方案,Bitfusion具有更大的灵活性:

  • 工作负载和GPU 不需要在同一台服务器上。

  • 用户可以一次请求多个局部GPU,以将负载分散到多块物理GPU上。

  • 既可以给应用静态分配 GPU份额,也可以动态分配;当不再使用 GPU 时,还可以将其释放回 GPU 资源池。

  • 可以给不同的用户分配不同的 GPU 份额,例如,一个用户获得三分之一,而另一个用户获得同一个 GPU的三分之二。

  • 因为是将整个 GPU 资源池共享给多个用户使用,避免了很多闲置场景,对于 GPU 资源的利用效率整体上要高于前面两种方案。

 

Bitfusion 方案的缺点:

  • 由于内部CUDA API调用是通过网络重定向的,因此对于网络延迟的要求要高,用户需要配置其网络以最大程度地减少延迟,网络速度成为基础架构设置的关键。

 

本文主要内容来自于英文博客 Machine Learning on vSphere: Choosing A Best Method for GPU Deployment with VMs