阿里云容器化GPU共享服务已开放!性能无损失,对你的环境无侵入,真正实现AI降本增效

用尽每一寸GPU

杨净 发自 凹非寺
量子位 报道 | 公众号 QbitAI

随着GPU算力越来越强,其成本也越来越高昂。

但有时,执行一个深度学习任务,并不需要占用一整张GPU。

就相当于,你不仅多花了钱,还浪费了资源。

阿里云最近提出的这项技术,帮助你解决了这一困惑。

cGPU容器共享技术

让用户通过容器来调度底层GPU资源,以更细颗粒度调度使用GPU,提高GPU资源利用率,从而来实现降本增效。

以往的研究中,业内也有一些GPU共享方案,比如NVIDIA MPS、NVIDIA vGPU、rCUDA等。

但也存在了一些问题。

比如,在容器调度GPU的时候,不同线程中的容器应用可能出现显存资源争抢和互相影响的现象,未能做到容器的完全隔离。

举个例子,当一个企业在两个容器中分别运行着GPU的推理应用,一个已经稳定了,一个还在开发阶段。

如果其中一个容器中的应用出现故障,由于没有实现很好的隔离技术,往往导致另一容器中的应用也会出现故障。

那么阿里云的这项技术,就可以实现容器的「安全隔离」,业务之间不会相互干扰。

那么,这个作为业内首创的「基于内核虚拟GPU隔离」的GPU共享容器方案,具体是如何实现的?

  • 通过一个内核驱动,为容器提供了虚拟的GPU设备,从而实现了显存和算力的隔离;
  • 通过用户态轻量的运行库,来对容器内的虚拟GPU设备进行配置。

此外,还做到了无需替换CUDA静态库或动态库;无需重新编译CUDA应用;CUDA,cuDNN等版本随时升级无需适配等特性。

如何使用?

目前,阿里云容器服务已经支持cGPU容器组件。

登录容器服务 Kubernetes 版控制台,简单的点击几下,为容器节点打标,就可以利用cGPU容器隔离,最大化的利用GPU的硬件能力了。

同时,还可以通过Prometheus的监控能力查看每个cGPU容器内的显存用量,在享受低成本的同时,保障了应用的可靠性。

此外,还开放了阿里云GPU实例上使用cGPU容器的能力。cGPU依赖 Docker 和 NVIDIA Docker,在使用cGPU前,请确保环境可以正常创建带GPU的容器服务。

详细使用指南,可戳文末链接哦~

性能分析

使用方式了解了,那么就是性能问题。

「cGPU容器方案会不会对性能有影响?有多少影响?」

以下有一组测试数据,供你参考。

这是在常用的tensorflow框架下用benchmark工具分别测试了模型推理和训练性能。

首先是单cGPU容器 VS 单GPU直通性能比较,分别在cGPU容器内部以及标准的Docker容器内部跑测试。

为cGPU容器内的GPU实例分配所有的显存和算力,来显示在不共享GPU的情况下的cGPU是否有性能损失。

这是ResNet50训练测试在不同精度和batch_size下的性能比较,绿色柱表示标准的容器性能,橙色柱表示cGPU容器内的性能。

可以看到在不同的情况下,cGPU容器实例都几乎没有性能损失。

然后是ResNet50推理测试在不同精度和batch_size下的性能比较。

同样的,在不同的情况下,cGPU容器实例都几乎没有性能损失。

还有cGPU容器 VS MPS容器GPU共享性能比较

依然采用了ResNet50的训练和推理benchmark作为测试用例,分别用两个cGPU容器和两个MPS容器共享一个GPU硬件。

这是ResNet50训练测试在不同batch_size下的性能比较。

绿色柱表示两个MPS容器性能跑分的总和,橙色柱表示两个cGPU容器跑分的总和。

可以看到,cGPU容器实例对比MPS容器几乎没有性能损失,在大的batch_size的情况下甚至跑分高于MPS容器。

接着,就是ResNet50推理测试在不同batch_size下的性能比较

结果显示,MPS容器和cGPU容器的性能差距不大,基本都在误差范围之内。

你觉得这一技术如何?

感兴趣的话,可戳下方链接去试试哦~

容器服务 Kubernetes 版控制台:

https://cs.console.aliyun.com/

详细使用指南:

https://help.aliyun.com/document_detail/163994.html

版权所有,未经授权不得以任何形式转载及使用,违者必究。