随着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
“