markhuyong / git-favorites

pocket collenction arititcles
Apache License 2.0
2 stars 0 forks source link

利用虚拟 GPU 实现多任务处理 #7

Open markhuyong opened 2 years ago

markhuyong commented 2 years ago

https://mp.weixin.qq.com/s?src=11&timestamp=1641891110&ver=3551&signature=FSkmaItDiwHkVd-iSnhh9yxI3Ky5i4xPY8SobbZvA5ZSt8BMYDE1KtLGuFYF2Z4auazXTNFVtiptqwsaQ9GZllnvqRKpyP*34KmrWiJflqZuE8K*CGeecBr6AD1DBO3A&new=1

github-actions[bot] commented 2 years ago

利用虚拟 GPU 实现多任务处理 by 慢慢学TensorFlow

用 GPU 的同学肯定都了解,在 AI 模型开发和训练阶段,经常需要尝试多种不同参数配置,但手头只有一块 GPU,跑一组实验非常耗时,每天大部分时间都处于等待训练结果状态。(如果遇到土豪公司可以为每个算法工程师提供多块 GPU 调参就另当别论)。如果有一种技术可以像变魔术一样,把一块 GPU 分成多块,可以同时跑两组以上参数,那将会大大提升工作效率,升职加薪指日可待。

今天介绍的虚拟 GPU 技术就是实现上述需求的方案之一。

市面上有多种虚拟 GPU 方案,比如 Nvidia GRID 提供了面向图形工作站、虚拟桌面的商业级产品,可以实现多用户共享一块 GPU。

然而遗憾的是价格比较贵,而且面向专业级 GPU,比如 Tesla 和 Quadro 卡,而不能用在我们消费级如 GTX 系列显卡。这两点决定了价格敏感的用户难以享受 GPU 虚拟化带来的乐趣。

除此之外,趋动科技 VirtAI Tech(https://virtai.tech/) 推出的猎户座 AI 加速虚拟化平台(Orion AI Computing Platform)也是一种虚拟 GPU 方案,包括虚拟化软件和管理调度软件,实现更高效的 GPU 资源池管理,有效提高 GPU 利用率,降低研发和运营成本。

01

Orion vGPU 简介

Orion AI 计算平台社区版 v1.0 已在 GitHub 上正式推出,开发人员可免费下载和使用。链接:https://github.com/virtaitech/orion

Orion AI 计算平台还可以打破资源调度的物理边界,允许用户的AI应用程序透明地在其他物理机器上使用远程 GPU 资源,而无需修改代码。以下为官方架构图:

下图展示了 Orion vGPU 四大应用场景:

其中第一个应用场景是比较常见的,可以解决文章开头提到的痛点。后面三种在云的场景比较常见,我们不做进一步探讨。

Orion vGPU 通过高效的通讯机制连接应用与 GPU 资源池,使得 AI 应用、CUDA 应用可以不受 GPU 物理位置的限制,部署在云或者数据中心内任何一个物理机、Container 或者 VM 内。当前版本主要特性如下:

可见 Orion 同时支持消费级、专业级 GPU 虚拟化,这一点可以满足个人用户和初创企业的使用场景。

Orion 主要由三个组件构成,分别介绍如下。

Orion Client

该组件为一个运行环境,其模拟了NVidia CUDA的运行库环境,为CUDA程序提供了API接口兼容的全新实现。通过和Orion其他功能组件的配合,为CUDA应用程序虚拟化了一定数量的虚拟GPU(Orion vGPU)。
使用CUDA动态链接库的CUDA应用程序可以通过操作系统环境设置,使得一个CUDA应用程序在运行时由操作系统负责链接到Orion Client提供的动态链接库上。由于Orion Client模拟了NVidia CUDA运行环境,因此CUDA应用程序可以透明无修改地直接运行在Orion vGPU之上。

Orion Controller

该组件为一个长运行的服务程序,其负责整个GPU资源池的资源管理。其响应Orion Client的vGPU请求,并从GPU资源池中为Orion Client端的CUDA应用程序分配并返回Orion vGPU资源。
该组件可以部署在数据中心任何网络可到达的系统当中。每个资源池部署一个该组件。资源池的大小取决于IT管理的需求,可以是整个数据中心的所有GPU作为一个资源池,也可以每个GPU服务器作为一个独立的资源池。

Orion Server

该组件为一个长运行的系统服务,其负责GPU资源化的后端服务程序。Orion Server部署在每一个物理GPU服务器上,接管本机内的所有物理GPU。通过和Orion Controller的交互把本机的GPU加入到由Orion Controller管理维护的GPU资源池当中。
当Orion Client端应用程序运行时,通过Orion Controller的资源调度,建立和Orion Server的连接。Orion Server为其应用程序的所有CUDA调用提供一个隔离的运行环境以及真实GPU硬件算力。

02

动手实践

本节将使用如下环境实测 Orion vGPU:

基本步骤参考 Github:https://github.com/virtaitech/orion/blob/master/doc/quick-start/container.md

GTX 1080 总共有 8 G 显存,这里创建两个 vGPU,分别 4 GB 显存,启动两个 Docker 实例,每个里面都运行一个 TensorFlow 训练任务。系统架构图如下:

详细步骤:

git clone https://github.com/virtaitech/orion

两个 Docker 实例运行期间,在物理机上可以监测资源占用情况:

可以发现 oriond 接管了所有 GPU 进程,为两个 Docker 分别分配约 4 GB 显存。

Pix2pix 运行效果:

TensorFlow Benchmark 运行效果:

以上结果证明,利用 Orion vGPU 技术,两个 TensorFlow 任务可以同时运行于同一张 GPU 上。

这里直接用了官方 Docker Hub,内置 Orion Client,无需手动安装。获取更多 Docker 镜像可以浏览官方链接:

https://hub.docker.com/r/virtaitech/orion-client

03

一些限制

Orion vGPU 并非十全十美,经过测试发现有如下限制:

  1. 不支持最新 CUDA 10.1;

  2. 不支持 TensorFlow XLA;

  3. 不支持 nvprof;

  4. 编译选项需要加 -cudart=shared;

  5. CUDA 加速库并非全部支持;

如果在使用 Orion 过程中遇到问题,可以在 GitHub 上提交 issue,或者通过邮件联系:feedback@ virtaitech.com