为MindIE Service生成RankTable
Atlas 800I A2 推理服务器场景下,MindCluster支持用户通过acjob推理任务的方式进行MindIE Service的容器化部署。本章节只指导用户完成YAML的配置及RankTable的生成。了解MindIE Service的详细部署流程请参见《MindIE Service开发指南》。
实现原理

各步骤说明如下:
- 集群调度组件定期上报节点和芯片信息;kubelet上报节点芯片数量到节点对象(node)中。
- Ascend Device Plugin上报芯片内存和拓扑信息。
对于包含片上内存的芯片,Ascend Device Plugin启动时上报芯片内存情况,见node-label说明;上报整卡信息,将芯片的物理ID上报到device-info-cm中;可调度的芯片总数量(allocatable)、已使用的芯片数量(allocated)和芯片的基础信息(device ip和super_device_ip)上报到Node中,用于整卡调度。
 - NodeD定期上报节点健康状态和节点硬件故障信息到node-info-cm中。
 
 - Ascend Device Plugin上报芯片内存和拓扑信息。
 - ClusterD读取device-info-cm和node-info-cm中信息后,将信息写入cluster-info-cm。
 - 用户通过kubectl或者其他深度学习平台下发不使用NPU卡的ms_controller、ms_coordinator以及数个使用NPU卡的ms_server任务。
 - Ascend Operator为任务创建相应的podGroup。关于podGroup的详细说明,可以参考开源Volcano官方文档。
 - Ascend Operator为任务创建相应的Pod,并注入MindIE Server服务启动所需的环境变量。关于环境变量的详细说明请参见表2 Ascend Operator注入的训练环境变量。
 - 对于ms_controller和ms_coordinator任务,volcano-scheduler根据节点内存、CPU及标签、亲和性选择合适节点。对于ms_server任务volcano-scheduler还会参考芯片拓扑信息为其选择合适节点,并在Pod的annotation上写入选择的芯片信息以及节点硬件信息。
 - kubelet创建容器时,对于ms_controller和ms_coordinator任务,调用Ascend Device Plugin挂载芯片,Ascend Device Plugin或volcano-scheduler在Pod的annotation上写入芯片和节点硬件信息。Ascend Docker Runtime协助挂载相应资源。
 - Ascend Operator读取每个ms_server任务Pod的annotation信息,生成各自的hccl.json,以ConfigMap形式存储在etcd中。
 - ClusterD侦听ms_controller、ms_coordinator任务Pod信息以及各个hccl.json对应ConfigMap的变化,实时生成global-ranktable.json
 - ms_controller启动后,与ClusterD建立通信,通过gRPC接口订阅global-ranktable的变化。
 
YAML配置说明
- MindIE Service任务相比于普通Ascend Job任务,需要额外增加以下两个label,app和jobID。其中app表明当前Ascend Job在MindIE Service任务中的角色,取值包括mindie-ms-controller、mindie-ms-coordinator、mindie-ms-server;jobID表明当前MindIE Service任务在集群中的唯一识别ID,用户可根据需要进行配置。
 
apiVersion: mindxdl.gitee.com/v1
kind: AscendJob
metadata:
  name: mindie-ms-test-controller
  namespace: mindie
  labels:
    framework: pytorch          
    app: mindie-ms-controller   # do not modify
    jobID: mindie-ms-test       # uid of infer job, modify it according to your job
    ring-controller.atlas: ascend-910b
spec:
  schedulerName: volcano   # work when enableGangScheduling is true
  runPolicy:
    schedulingPolicy:      # work when enableGangScheduling is true
      minAvailable: 1      # equal to Master.replicas
      queue: default
  successPolicy: AllWorkers
  replicaSpecs:
    Master:
      replicas: 1
      restartPolicy: Always
      template:
        metadata:
          ...
- ms_controller、ms_coordinator不使用NPU卡,一个MindIE Service任务中只能包含一个ms_controller和一个ms_coordinator,即这两种类型的副本数只能为1;ms_server使用NPU卡,副本数可以大于1,并且MindIE Service任务中可以包含多个ms_server,用户可以复制修改server.yaml下发不同的ms_server。示例如下
 
apiVersion: v1
kind: ConfigMap
metadata:
  name: rings-config-mindie-server-0  # The name must be the same as the name attribute of the following AscendJob. The prefix rings-config- cannot be modified.
  namespace: mindie
  labels:
    jobID: mindie-ms-test
    ring-controller.atlas: ascend-910b
    mx-consumer-cim: "true"
data:
  hccl.json: |
    {
        "status":"initializing"
    }
---
apiVersion: mindxdl.gitee.com/v1
kind: AscendJob
metadata:
  name: mindie-server-0
  namespace: mindie
  labels:
    framework: pytorch        
    app: mindie-ms-server        # do not modify
    jobID: mindie-ms-test        # uid of infer job, modify it according to your job
    ring-controller.atlas: ascend-910b
    fault-scheduling: force
spec:
  schedulerName: volcano   # work when enableGangScheduling is true
  runPolicy:
    schedulingPolicy:      # work when enableGangScheduling is true
      minAvailable: 2      # should equal to Master.replicas + Worker.replicas
      queue: default
  successPolicy: AllWorkers
  replicaSpecs:
    Master:
父主题: 常用操作