Open markhuyong opened 2 years ago
用 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 内。当前版本主要特性如下:
兼容已有的AI应用和CUDA应用,无需修改已有应用程序。
细粒度的GPU虚拟化支持。
应用可使用远程物理节点上GPU,应用部署无需受GPU服务器位置、资源数量的约束。
vGPU资源动态分配动态释放。无需重启Container/VM/物理机。
通过对GPU资源池的管理和优化,提高整个云和数据中心GPU的利用率和吞吐率。
通过统一管理GPU,降低GPU的管理复杂度和成本。
可见 Orion 同时支持消费级、专业级 GPU 虚拟化,这一点可以满足个人用户和初创企业的使用场景。
Orion 主要由三个组件构成,分别介绍如下。
该组件为一个运行环境,其模拟了NVidia CUDA的运行库环境,为CUDA程序提供了API接口兼容的全新实现。通过和Orion其他功能组件的配合,为CUDA应用程序虚拟化了一定数量的虚拟GPU(Orion vGPU)。
使用CUDA动态链接库的CUDA应用程序可以通过操作系统环境设置,使得一个CUDA应用程序在运行时由操作系统负责链接到Orion Client提供的动态链接库上。由于Orion Client模拟了NVidia CUDA运行环境,因此CUDA应用程序可以透明无修改地直接运行在Orion vGPU之上。
该组件为一个长运行的服务程序,其负责整个GPU资源池的资源管理。其响应Orion Client的vGPU请求,并从GPU资源池中为Orion Client端的CUDA应用程序分配并返回Orion vGPU资源。
该组件可以部署在数据中心任何网络可到达的系统当中。每个资源池部署一个该组件。资源池的大小取决于IT管理的需求,可以是整个数据中心的所有GPU作为一个资源池,也可以每个GPU服务器作为一个独立的资源池。
该组件为一个长运行的系统服务,其负责GPU资源化的后端服务程序。Orion Server部署在每一个物理GPU服务器上,接管本机内的所有物理GPU。通过和Orion Controller的交互把本机的GPU加入到由Orion Controller管理维护的GPU资源池当中。
当Orion Client端应用程序运行时,通过Orion Controller的资源调度,建立和Orion Server的连接。Orion Server为其应用程序的所有CUDA调用提供一个隔离的运行环境以及真实GPU硬件算力。
02
—
动手实践
本节将使用如下环境实测 Orion vGPU:
操作系统:CentOS 7.6
GPU:GTX 1080 一块
Docker :18.09.3
CUDA :9.0
cuDNN :7.1
TensorFlow :1.12
基本步骤参考 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 并非十全十美,经过测试发现有如下限制:
不支持最新 CUDA 10.1;
不支持 TensorFlow XLA;
不支持 nvprof;
编译选项需要加 -cudart=shared;
CUDA 加速库并非全部支持;
如果在使用 Orion 过程中遇到问题,可以在 GitHub 上提交 issue,或者通过邮件联系:feedback@ virtaitech.com
https://mp.weixin.qq.com/s?src=11×tamp=1641891110&ver=3551&signature=FSkmaItDiwHkVd-iSnhh9yxI3Ky5i4xPY8SobbZvA5ZSt8BMYDE1KtLGuFYF2Z4auazXTNFVtiptqwsaQ9GZllnvqRKpyP*34KmrWiJflqZuE8K*CGeecBr6AD1DBO3A&new=1