Skip to content

Ascend/ascend-hccl-controller

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HCCL-Controller.ZH

Controller介绍

  • 一个Controller至少追踪一种类型的Kubernetes资源。这些对象有一个代表期望状态的指定字段。Controller负责确保其追踪的资源对象的当前状态接近期望状态。
  • Controller Manager就是集群内部的管理控制中心,由负责不同资源的多个Controller构成,共同负责集群内的节点、Pod等所有资源的管理。
  • Controller Manager主要提供了一个分发事件的能力,而不同的Controller只需要注册对应的Handler来等待接收和处理事件。
  • 每种特定资源都有特定的Controller维护管理以保持预期状态。

图 1 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所示。

图 1 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中的标签),同一个训练任务的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所示。

    表 1 编译生成的文件列表

    文件名

    说明

    hccl-controller

    HCCL-Controller二进制文件

    Dockerfile

    HCCL-Controller镜像构建文本文件

    hccl-controller-{version}.yaml

    HCCL-Controller的启动配置文件

    说明:

    • {version}:表示版本号,请根据实际写入。
    • arm和x86的二进制依赖不同,需要在对应架构上进行编译。

安装前准备

需要先完成《MindX DL用户指南》“安装前准备”章节中除“准备软件包”章节之外的其他章节内容。

请参考《MindX DL用户指南》中的“安装部署 > 安装前准备”。

安装HCCL-Controller

请参考《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

第一次正式发布。