• 【博客506】k8s扩展调度器以支撑更灵活的GPU调度


    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)
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

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

    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://github.com/AliyunContainerService/gpushare-scheduler-extender?spm=a2c6h.12873639.article-detail.7.45c8464dbz8WIE&file=gpushare-scheduler-extender.git

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

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

  • 相关阅读:
    数据结构(2)时间复杂度——渐进时间复杂度、渐进上界、渐进下界
    存储介质中ext4的文件排布
    Android源码编译原生模拟器
    ip地址 long string转化
    jdk的组成和跨平台原理
    2022年金砖国家职业技能大赛(决赛)网络空间安全赛项 | 浙江赛区选拔赛 任务书
    JS--如何编写事件驱动
    【论文阅读】MPViT : Multi-Path Vision Transformer for Dense Prediction
    julia 笔记:复合类型 struct
    Sora--首个大型视频生成模型
  • 原文地址:https://blog.csdn.net/qq_43684922/article/details/127036369