揭秘DeepSeek:Kubernetes+Slurm混合调度架构如何炼成AI算力?

[复制链接]
发表于 2025-5-17 08:09:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
择要:在超大规模AI练习场景中,如何实现GPU资源的精细化调度?DeepSeek创新性地将Kubernetes的容器编排本事与Slurm的高性能计算作业调度相联合,构建出分身灵活性与效率的混合调度系统。本文深入解析其焦点筹划原理与落地实践。

一、为什么必要混合调度?

在AI研发场景中,存在两类典型工作负载
负载类型特点代表场景在线服务长期运行、弹性伸缩模子API服务、及时推理离线练习短时高耗、强隔离需求千卡级大模子练习任务 传统方案痛点


  • 单一使用K8s管理练习任务时,缺乏对MPI作业的原生支持
  • 仅用Slurm调度难以满足微服务化部署需求
DeepSeek解法
分层调度架构——K8s管控在线服务,Slurm调度离线练习,通过同一资源池实现动态分配。

二、焦点架构筹划

2.1 系统拓扑

  1. +-----------------------+
  2. |   User Job Submission |
  3. +----------+------------+
  4.            |
  5.            v
  6. +----------+------------+
  7. |  Slurm Workload Manager|  # 负责Batch Job调度
  8. |  (集成K8s Custom Plugin)|
  9. +----------+------------+
  10.            |
  11.            v
  12. +----------+------------+
  13. | Kubernetes Master     |  # 管理Pod生命周期
  14. | (扩展ResourceQuota策略)|
  15. +----------+------------+
  16.            |
  17.            v
  18. +----------+------------+
  19. |  GPU裸金属节点         |
  20. |  (NVIDIA MIG技术分区)  |
  21. +-----------------------+
复制代码
2.2 关键组件交互


结语:Kubernetes与Slurm的深度融合,为AI算力调度提供了新范式。这种混合架构既保存了HPC范畴的高效性,又继续了云原生的弹性本事,将成为下一代AI根本办法的告急支柱。

  • 资源抽象层

    • 通过Node Feature Discovery (NFD) 标志GPU类型(如A100-80G)
    • 使用DevicePlugin 将GPU卡细分为MIG实例(比方1g.10gb)

  • 调度决策流
    1. # 当用户提交Slurm作业时:
    2. if job_type == "MPI训练任务":
    3.     Slurm调用k8s-slurm插件 → 转换为K8s Job CRD
    4.     Volcano调度器介入 → 根据Gang Scheduling策略分配整组GPU
    5. else:
    6.     直接由K8s默认调度器处理
    复制代码
    资源抢占机制
  • 定义PriorityClass实现分级抢占
    1. apiVersion: scheduling.k8s.io/v1
    2. kind: PriorityClass
    3. metadata:
    4.   name: slurm-high-priority
    5. value: 1000000  # 训练任务优先级
    6. preemptionPolicy: Never  # 禁止被抢占
    复制代码
    三、实战设置示例

    3.1 部署Slurm Operator

    1. # 使用Helm部署Slurm集群
    2. helm install slurm-operator \
    3.   --set slurmdbd.enabled=true \
    4.   --set slurmctld.enabled=true \
    5.   --set slurmd.enabled=true \
    6.   slurm-operator/slurm-operator
    复制代码
    3.2 定义混合资源配额

    1. # quotas.yaml
    2. apiVersion: v1
    3. kind: ResourceQuota
    4. metadata:
    5.   name: gpu-quota
    6. spec:
    7.   hard:
    8.     requests.nvidia.com/gpu: "64"
    9.   scopeSelector:
    10.     matchExpressions:
    11.     - operator: In
    12.       scopeName: PriorityClass
    13.       values: ["slurm-high-priority"]  # 为Slurm任务保留专用配额
    复制代码
    3.3 提交跨架构任务

    1. # 提交Slurm作业(自动转换为K8s Job)
    2. sbatch -N 4 --gres=gpu:8 <<EOF
    3. #!/bin/bash
    4. srun --mpi=pmix \
    5.      python train.py --batch_size 1024
    6. EOF
    7. # 查看资源分配状态
    8. sinfo -o "%N %G %C"  # 显示节点GPU利用率
    9. kubectl get pods -l job-type=slurm
    复制代码
    四、性能优化实践

    4.1 通信加快方案

       技术方案延迟对比适用场景默认TCP协议120μs/packet小规模数据传输RDMA over Converged Ethernet (RoCE)8μs/packet跨节点AllReduce操作 设置方法
    1. # 启用K8s RDMA支持
    2. kubectl label nodes node-1 feature.node.kubernetes.io/rdma.capable=true
    复制代码
    4.2 弹性伸缩计谋

    基于Prometheus指标触发自动扩缩容:
    1. # hpa-config.yaml
    2. apiVersion: autoscaling/v2
    3. kind: HorizontalPodAutoscaler
    4. metadata:
    5.   name: training-job-scaler
    6. spec:
    7.   scaleTargetRef:
    8.     apiVersion: batch/v1
    9.     kind: Job
    10.     name: resnet-training
    11.   minReplicas: 4
    12.   maxReplicas: 32
    13.   metrics:
    14.   - type: Pods
    15.     pods:
    16.       metric:
    17.         name: nvidia_gpu_utilization
    18.       target:
    19.         type: AverageValue
    20.         averageValue: 85%  # GPU利用率超85%触发扩容
    复制代码
    五、落地收益对比

       指标纯K8s方案混合调度方案提升幅度作业排队时间均匀23分钟≤5分钟78%↓GPU碎片率15%-20%<5%75%↓大规模作业乐成率83%99.6%16%↑ 客户案例:某自动驾驶公司采用该方案后,千卡任务启动时间从1.5小时收缩至8分钟!
       
    六、将来演进方向
  • 异构资源同一调度
    整合CPU/FPGA资源到同一资源池,支持更复杂workload
  • AI4Scheduling
    应用强化学习算法预测资源需求,实现智能超调度
相关阅读



  • DeepSeek资源调度白皮书
  • K8s+Slurm性能调优实战

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表