k8s扩展调度器以支撑更灵活的GPU调度

背景

现如今,随着企业纷纷在机器学习和深度学习上加大投入,他们开始发现从头构建一个 AI 系统并非易事。

以深度学习为例。对于深度学习来说,算力是一切的根本。为了用海量数据训练性能更好的模型、加速整个流程,企业的 IT 系统需要具备快速、高效调用管理大规模 GPU 资源的能力。同时,由于算力资源十分昂贵,出于成本控制,企业也需要通过分布式训练等方式最大化 GPU 资源利用率。

面对这类新要求,基于 Kubernetes 的云原生技术为人工智能提供了一种新的工作模式。凭借其特性,Kubernetes 可以无缝将模型训练、inference 和部署扩展到多云 GPU 集群,允许数据科学家跨集群节点自动化多个 GPU 加速应用程序容器的部署、维护、调度和操作。

在 1.6 版本和 1.9 版本中,Kubernetes 先后提供了对 NVIDIA GPU、AMD GPU 容器集群管理调度的支持,进一步提高了对 GPU 等扩展资源进行统一管理和调度的能力。

但是,Kubernetes 作为新一代 AI 开发基础也存在缺陷。为训练任务分配算力资源时,它通常是随机分配容器所在节点的 GPU,而不能指定使用某类 GPU 类型。

虽然这对大部分深度学习模型训练场景来说已经足够了,但如果数据科学家希望能更灵活地使用更高性能的或某一类型的 GPU,Kubernetes 的能力就有些捉襟见肘了。

核心痛点

1、Kubernetes 作为新一代 AI 开发基础也存在缺陷。为训练任务分配算力资源时,它通常是随机分配容器所在节点的 GPU,而不能指定使用某类 GPU 类型。

2、Kubernetes 在分配GPU设备时,粒度过大,通常是以一个GPU训练卡为自愿申请最小单位,
这样显卡利用率低

解决方案:

1、扩展调度器

2、使用timeSlicing来细分显卡资源分配时间片的粒度

3、使用GPU Sharing方案细分显卡资源分配显存的粒度

一、扩展调度器

依赖以下现有 Kubernetes 工作机制:

Scheduler Extender 机制

Device Plugin 机制

API Server 扩展机制(CRD)

Admission 扩展机制(ResourceQuota)

k8s基于GPU服务器调度Pod k8s gpu_github


k8s基于GPU服务器调度Pod k8s gpu_github_02


k8s基于GPU服务器调度Pod k8s gpu_资源分配_03


k8s基于GPU服务器调度Pod k8s gpu_资源分配_04

k8s基于GPU服务器调度Pod k8s gpu_github_05


k8s基于GPU服务器调度Pod k8s gpu_深度学习_06


k8s基于GPU服务器调度Pod k8s gpu_资源分配_07

另外的方法:带有侵入性但是改造成本低的方式

kubelet在申请设备的时候,是随机选择的,那么可以在kubelet申请设备的时候,使用一些库或者自制资源获取逻辑,获取主机上的显卡具体信息,比如:哪些是nvlink相连,哪些显存大,哪些频率高,这样的细节,将显卡的信息和显卡的ID信息的绑定关系保存起来,然后kubelet在调用nvidia-plugin的allocate的时候,显卡ID就可以在你自己的逻辑中根据pod的需要去申请最合适弟

二、使用timeSlicing来细分显卡资源分配粒度

具体细节参考上篇博文:k8s gpu时间分片

三、使用GPU Sharing方案细分显卡资源分配显存的粒度

部署参考链接:

https://developer.aliyun.com/article/690623 https://wangjunjian.com/kubernetes/2021/05/20/gpu-sharing-in-kubernetes.html https://www.jianshu.com/p/48a33e01230a

阿里巴巴开源方案源码链接:

https:///AliyunContainerService/gpushare-scheduler-extender?spm=a2c6h.12873639.article-detail.7.45c8464dbz8WIE&file=gpushare-scheduler-extender.git

https:///AliyunContainerService/gpushare-device-plugin?spm=a2c6h.12873639.article-detail.8.45c8464dbz8WIE&file=gpushare-device-plugin.git

https:///AliyunContainerService/gpushare-scheduler-extender/blob/master/docs/?spm=a2c6h.12873639.article-detail.9.45c8464dbz8WIE&file=