实现原理
各步骤说明如下:
- 集群调度组件定期上报节点和芯片信息;kubelet上报节点芯片数量到节点对象(node)中。
- Ascend Device Plugin上报芯片内存和拓扑信息。
对于包含片上内存的芯片,Ascend Device Plugin启动时上报芯片内存情况,见node-label说明;上报整卡信息,将芯片的物理ID上报到device-info-cm中;可调度的芯片总数量(allocatable)、已使用的芯片数量(allocated)和芯片的基础信息(device ip和super_device_ip)上报到node中,用于整卡调度。
- 当节点上存在故障时,NodeD定期上报节点健康状态、节点硬件故障信息、节点DPC共享存储故障信息到node-info-cm中。
- Ascend Device Plugin上报芯片内存和拓扑信息。
- ClusterD读取device-info-cm和node-info-cm中信息后,将信息整合到cluster-info-cm中。
- 用户通过kubectl或者其他深度学习平台下发不使用NPU卡的MS Controller、MS Coordinator以及数个使用NPU卡的MindIE Server任务。
- Ascend Operator为任务创建相应的podGroup。关于podGroup的详细说明,可以参考开源Volcano官方文档。
- Ascend Operator为任务创建相应的Pod,并注入MindIE Server服务启动所需的环境变量。关于环境变量的详细说明请参见表2 Ascend Operator注入的训练环境变量。
- 对于MS Controller、MS Coordinator任务,volcano-scheduler根据节点内存、CPU及标签、亲和性选择合适节点。对于MindIE Server任务volcano-scheduler还会参考芯片拓扑信息为其选择合适节点,并在Pod的annotation上写入选择的芯片信息以及节点硬件信息。
- kubelet创建容器时,对于MindIE Server任务,调用Ascend Device Plugin挂载芯片,Ascend Device Plugin或volcano-scheduler在Pod的annotation上写入芯片和节点硬件信息。Ascend Docker Runtime协助挂载相应资源。
- Ascend Operator读取每个MindIE Server任务Pod的annotation信息,生成各自的集合通信文件hccl.json,以ConfigMap形式存储在etcd中。
- ClusterD侦听MS Controller、MS Coordinator任务Pod信息以及各个hccl.json对应ConfigMap的变化,实时生成global-ranktable。关于global-ranktable的详细说明请参见global-rankTable说明。
- MS Controller启动后,与ClusterD建立通信,通过gRPC接口订阅global-ranktable的变化。
父主题: 部署MindIE Motor