# ascend-hccl-controller **Repository Path**: frankang/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-02-15 - **Last Updated**: 2023-10-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HCCL-Controller.ZH - [Controller介绍](#Controller介绍.md) - [HCCL-Controller](#HCCL-Controller.md) - [环境依赖](#环境依赖.md) - [目录结构](#目录结构.md) - [版本更新信息](#版本更新信息.md)

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")

HCCL-Controller

HCCL-Controller是华为研发的一款用于NPU训练任务的组件,利用Kubernetes的informer机制,持续监控NPU训练任务及其Pod的各种事件,并读取Pod的NPU信息,生成对应的Configmap。该Configmap包含了NPU训练任务需要的hccl.json配置文件,方便NPU训练任务更好的协同和调度底层的昇腾910 AI处理器。 ## HCCL-Controller整体流程 HCCL-Controller整体流程如[图1](#fig13227145124720)所示。 **图 1** HCCL-Controller process ![](doc/images/HCCL-Controller-process.png "HCCL-Controller-process") 1. Ascend Device Plugin通过list-and-watch接口,定时上报节点昇腾910 AI处理器DeviceID和健康状态。 2. Scheduler收到用户训练任务请求,创建Job和Configmap。使用Volacno调度器选择Job部署的节点。 3. Scheduler发送创建Pod信息到选中的节点Kubelet上。 4. 在被选择的节点上,Ascend Device Plugin会从Kubelet收到分配设备的请求,返回DeviceID、Volume、环境变量等信息给Kubelet,Kubelet分配资源给Pod。 5. Ascend Device Plugin修改该Pod的annotation字段,将分配给Pod的昇腾910 AI处理器网卡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文件。 ## 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的变化(需携带[训练任务,Pod,ConfigMap](#li121021418717)中的标签),同一个训练任务的volcano job和ConfigMap通过volume(ascend-910-config)关联。如果有新创建的Pod,HCCL-Controller把Pod中的annotation(ascend.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. 安装Go的编译环境和goporxy的配置。 2. 执行以下命令,编译HCCL-Controller。 **cd build** **bash build.sh** 编译生成的文件在源码根目录下的“output“目录,如[表1](#table1860618363516)所示。 **表 1** 编译生成的文件列表

文件名

说明

hccl-controller

HCCL-Controller二进制文件

Dockerfile

HCCL-Controller镜像构建文本文件

hccl-controller-{version}.yaml

HCCL-Controller的启动配置文件

>![](doc/images/icon-note.gif) **说明:** >- _\{__version__\}_:表示版本号,请根据实际写入。 >- arm和x86的二进制依赖不同,需要在对应架构上进行编译。 ## 安装前准备 需要先完成《[MindX DL用户指南](https://www.hiascend.com/software/mindx-dl)》“安装前准备”章节中除“准备软件包”章节之外的其他章节内容。 请参考《[MindX DL用户指南](https://www.hiascend.com/software/mindx-dl)》中的“安装部署 \> 安装前准备”。 ## 安装HCCL-Controller 请参考《[MindX DL用户指南](https://www.hiascend.com/software/mindx-dl)》中的“安装部署 \> 安装MindX DL \> 安装HCCL-Controller”。

环境依赖

- Kubernetes 1.16及以上 - Go 1.13及以上

目录结构

``` hccl-controller #hccl-controller 组件 ├── build #编译构建文件夹 │ ├── build.sh │ ├── Dockerfile │ ├── hccl-controller.yaml │ ├── rbac.yaml │ └── test.sh ├── doc │ └── images │ ├── Controller-interaction-process.png │ ├── HCCL-Controller-process.png │ ├── icon-caution.gif │ ├── icon-danger.gif │ ├── icon-note.gif │ ├── icon-notice.gif │ ├── icon-tip.gif │ └── icon-warning.gif ├── go.mod ├── go.sum ├── main.go ├── output ├── pkg #源码文件 │ ├── hwlog │ │ └── logger.go │ ├── resource-controller │ │ └── signals │ │ ├── signal.go │ │ ├── signal_posix.go │ │ └── signal_windows.go │ └── ring-controller │ ├── agent │ │ ├── businessagent.go │ │ ├── businessagent_test.go │ │ ├── deploymentworker.go │ │ ├── deploymentworker_test.go │ │ ├── types.go │ │ ├── vcjobworker.go │ │ └── vcjobworker_test.go │ ├── controller │ │ ├── controller.go │ │ ├── controller_test.go │ │ └── types.go │ ├── model │ │ ├── deployment.go │ │ ├── deployment_test.go │ │ ├── types.go │ │ ├── vcjob.go │ │ └── vcjob_test.go │ └── ranktable │ ├── v1 │ │ ├── ranktable.go │ │ ├── ranktable_test.go │ │ └── types.go │ └── v2 │ ├── ranktable.go │ ├── ranktable_test.go │ └── types.go ├── README_EN.md └── README.md ```

版本更新信息

版本

发布日期

修改说明

v2.0.2

2021-07-15

增加和K8s交互信息的检查。

v2.0.1

2021-03-30

支持Deployment工作负载。

v20.2.0

2020-12-30

更新目录结构章节。

v20.1.0

2020-09-30

第一次正式发布。