# ascend-hccl-controller **Repository Path**: blade321/ascend-hccl-controller ## Basic Information - **Project Name**: ascend-hccl-controller - **Description**: 华为NPU通讯集合生成控制器,自动生成训练任务需要的通信集合配置 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 21 - **Created**: 2023-08-18 - **Last Updated**: 2023-08-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # hccl-controller - [组件介绍](#组件介绍) - [编译HCCL-Controller](#编译HCCL-Controller) - [组件安装](#组件安装) - [说明](#说明) - [更新日志](#更新日志) # 组件介绍 - 一个Controller至少追踪一种类型的Kubernetes资源。这些对象有一个代表期望状态的指定字段。Controller负责确保其追踪的资源对象的当前状态接近期望状态。 - Controller Manager就是集群内部的管理控制中心,由负责不同资源的多个Controller构成,共同负责集群内的节点、Pod等所有资源的管理。 - Controller Manager主要提供了一个分发事件的能力,而不同的Controller只需要注册对应的Handler来等待接收和处理事件。 - 每种特定资源都有特定的Controller维护管理以保持预期状态。 **图 1** Controller interaction process ![](doc/images/Controller-interaction-process.png "Controller-interaction-process") ## 1、HCCL-Controller整体流程 HCCL-Controller 是华为自研的一款用于NPU训练任务的组件,利用kubernetes的informer机制,持续监控NPU训练任务及其POD的各种事件,并读取POD的NPU信息,生成对应的 Configmap。该Configmap包含了NPU训练任务需要的hccl.json配置文件,方便NPU训练任务更好的协同和调度底层的昇腾处理器。 HCCL-Controller整体流程如[图1](#fig13227145124720)所示。 **图 1** HCCL-Controller process ![](doc/images/HCCL-Controller-process.png "HCCL-Controller-process") 1. Device-plugin通过list-and-watch接口,定时上报节点昇腾910处理器DeviceID和健康状态。 2. Scheduller收到用户训练任务请求,创建Job和Configmap。使用Volacno调度器选择Job部署的节点。 3. Scheduller发送创建Pod信息到选中的节点Kubelet上。 4. 在被选择的节点上,Device-plugin会从Kubelet收到分配设备的请求,返回DeviceID、Volume、环境变量等信息给Kubelet,Kubelet分配资源给Pod。 5. Device-plugin修改该Pod的annotation字段,将分配给Pod的昇腾910处理器网卡IP和DeviceID写入Pod的annotation。 6. HCCL-Controller持续监控volcano job和Pod的变化,如果有新创建的Pod,HCCL-Controller会把Pod中annotation值取出,当volcano job的所有Pod信息获取完后,更新对应rings-config的Configmap。 7. Pod中容器训练任务持续查看Configmap的状态,发现状态为完成后,则可以从configmap中生成hccl.json文件 ## 2、HCCL-Controller业务规则 HCCL-Controller是专门用于生成训练作业所有Pod的hccl.json文件的组件,该组件为Atlas 800 训练服务器K8s集群专用组件。 - 训练任务,Pod,ConfigMap需要设置ring-controller.atlas: ascend-910标签,HCCL-Controller通过该标签过滤,用于区分昇腾910场景和非昇腾910场景。 - volcano job与configmap的对应方式:volcano job.yaml中volume(ascend-910-config)的configmap name,就是volcano job对应的configmap。 - hccl-controller持续监控 volcano job,pod和ConfigMap的变化(需携带[•约定1:训练任务,Pod,ConfigMap需...](#li121021418717)中的标签),同一个训练任务的volcano job和ConfigMap通过volume(ascend-910-config)关联。如果有新创建的Pod,hccl-controller把Pod中的annotation(atlas.kubectl.kubernetes.io/ascend-910-configuration)的值取出,为volcano job创建数据缓存信息表,当volcano job的所有实例信息获取完整后,更新对应的rings-config的ConfigMap。 - ConfigMap中rings-config的文件名默认为hccl.json,默认挂在路径为:“/user/serverid/devindex/config”。 # 编译HCCL-Controller 1. 通过git拉取源码,并切换sync-dev分支,获得ascend-hccl-controller。 示例:源码放在/home/test/ascend-hccl-controller目录下 2. 执行以下命令,进入构建目录,执行构建脚本,在“output“目录下生成二进制hccl-controller、yaml文件和Dockerfile。 **cd** _/home/test/_**ascend-hccl-controller/build/** **chmod +x build.sh** **./build.sh** 3. 执行以下命令,查看**output**生成的软件列表。 **ll** _/home/test/_**ascend-hccl-controller/output** ``` drwxr-xr-x 2 root root 4096 Jan 29 19:12 ./ drwxr-xr-x 9 root root 4096 Jan 29 19:09 ../ -r-------- 1 root root 498 Jan 29 19:09 Dockerfile -r-x------ 1 root root 35323904 Jan 29 19:09 hccl-controller -r-------- 1 root root 2374 Jan 29 19:12 hccl-controller-v3.0.0.yaml ``` # 组件安装 1. 请参考《MindX DL用户指南》(https://www.hiascend.com/software/mindx-dl) 中的“集群调度用户指南 > 安装部署指导 \> 安装集群调度组件 \> 典型安装场景 \> 集群调度场景”进行。 # 说明 1. 当前容器方式部署本组件,本组件的认证鉴权方式为ServiceAccount, 该认证鉴权方式为ServiceAccount的token明文显示,如果需要加密保存,请自行修改 # 更新日志 | 版本 | 发布日期 | 修改说明 | | ---- | ---- | ---- | | v3.0.0| 2022-1230 | 首次发布 |