附录
边缘容器日志输出指导
由于边缘设备(如Atlas 500 A2 智能小站)存储空间有限,并且边缘设备多采用eMMC等flash作为存储介质,该介质存在使用寿命的限制。为避免存储空间过快被写满从而影响业务或存储介质过快达到使用寿命,用户可以参考本章节边缘容器日志的输出建议,使边缘容器以合适的方式输出日志。
当前Atlas硬件上运行的边缘容器应用一般是通过K8s兼容的边缘管理平台来进行管理,如华为云IEF或基于KubeEdge搭建的第三方边缘平台等。在该平台下,容器日志的输出方式主要分为以下三种:
- 容器控制台标准输出(STDOUT和STDERR)方式
- (推荐)挂载到主机目录方式
- 容器日志直接输出到日志服务
Note
如果系统中有日志服务器,建议直接在容器中将日志输出到日志服务中;如果没有,建议采用挂载到主机目录的方式输出日志,减少日志对硬件和其他业务影响的风险。
在这种方式下,应用将容器的日志输出到标准输出。缺省情况下,Docker引擎捕捉所有容器的标准输出,使用JSON格式写入到文件里,该文件会保存到主机的/var/lib/docker/containers/{containerid}目录下,如图1所示。
图 1 {containerid}-json.log文件所在路径示例

Note
如果边缘管理平台不支持该目录下日志文件的绕接或日志绕接配置错误,会导致/var/lib/docker被占满,从而影响新容器的部署及其他容器业务的正常运行。故不建议采用该方式。
该方式下边缘平台日志收集的方式如图2所示。
应用将容器日志挂载到边缘主机上。边缘管理平台提供主机上日志收集能力,并将主机文件日志进行绕接。
Note
- 应用可以将容器日志挂载到主机上的非关键大容量目录,建议不要挂载到eMMC等存储介质上,避免影响硬件整体寿命。
- 边缘容器管理平台一般会支持该能力,以减少对系统目录/var/lib/docker的影响。基于安全性考虑,该配置需要符合所在组织的安全要求。
如图3所示,应用环境里如果有日志服务器,可以将日志直接输出到外部日志服务器,使日志不在边缘环境里落盘,最大限度减少对硬件和其他业务的影响。
Ascend Docker Runtime默认挂载内容
Ascend Docker Runtime会根据实际环境情况默认以只读方式挂载以下目录和文件到容器中。挂载的文件对other用户不能有写权限,对同组内的其他用户也不能有写权限。
表 1 默认挂载目录和文件(Atlas 200 AI加速模块(RC场景))
| 路径 | 说明 |
|---|---|
| /dev/davinciX | NPU设备,X是ID号。例如:davinci0。 |
| /dev/davinci_manager | 管理设备。 |
| /usr/local/Ascend/driver/tools | 目录,驱动提供的工具包。 |
| /usr/local/Ascend/driver/lib64 | 目录,驱动提供的用户态库。 |
| /usr/local/sbin/npu-smi | 文件,NPU-SMI工具。 |
| /etc/hdcBasic.cfg | 文件,hdc基础文件。 |
| /etc/sys_version.conf | 文件,驱动的版本信息。 |
| /dev/dvpp_cmdlist | 设备文件,支撑推理业务。 |
| /var/queue_schedule | 管理FlowGW调度框架。 [!NOTE] 说明 挂载此目录需同时满足以下条件:
|
表 2 默认挂载目录和文件(Atlas 200I SoC A1 核心板)
| 路径 | 说明 |
|---|---|
| /dev/davinciX | NPU设备,X是ID号。例如:davinci0。 |
| /dev/davinci_manager | davinci相关的设备管理设备。 |
| /usr/local/bin/npu-smi | 文件,NPU-SMI工具。 |
| /etc/hdcBasic.cfg | 文件,hdc基础文件。 |
| /etc/sys_version.conf | 文件,驱动的版本信息。 |
| /dev/dvpp_cmdlist | 设备文件,支撑推理业务。 |
| /var/queue_schedule | 管理FlowGW调度框架。 [!NOTE] 说明 挂载此目录需同时满足以下条件:
|
表 3 默认挂载目录和文件(Atlas 200I A2 加速模块和Atlas 200I DK A2 开发者套件)
表 4 默认挂载目录和文件(Atlas 500 智能小站(型号 3000))
| 路径 | 说明 |
|---|---|
| /dev/davinciX | NPU设备,X是ID号。例如:davinci0。 |
| /dev/davinci_manager | 管理设备。 |
| /dev/hisi_hdc | 管理设备。 |
| /dev/devmm_svm | 管理设备。 |
| /home/data/miniD/driver/lib64 | 目录,驱动提供的用户态库。 |
| /usr/local/dcmi | 目录,DCMI头文件和库。 |
| /usr/local/lib/libdcmi.so | 文件,DCMI动态库。 |
| /usr/local/bin/npu-smi | 文件,NPU-SMI工具。 |
| /dev/dvpp_cmdlist | 设备文件,支撑推理业务。 |
| /var/queue_schedule | 管理FlowGW调度框架。 [!NOTE] 说明 挂载此目录需同时满足以下条件:
|
表 5 默认挂载目录和文件(Atlas 500 A2 智能小站)
表 6 默认挂载目录和文件(Atlas 350 标卡)
| 路径 | 说明 |
|---|---|
| /dev/davinciX | NPU设备,X是ID号。例如:davinci0。 |
| /dev/davinci_manager | 管理设备。 |
| /dev/hisi_hdc | 管理设备。 |
| /dev/uburma | 管理设备,支持UB协议。当不支持UB协议时,不会挂载此设备。 |
| /dev/ummu | 管理设备,支持UB协议。当不支持UB协议时,不会挂载此设备。 |
| /usr/local/Ascend/driver/lib64 | 目录,驱动提供的用户态库。 |
| /usr/local/Ascend/driver/include | 目录,驱动提供的头文件。 |
| /usr/local/dcmi | 目录,DCMI头文件和库。 |
| /usr/local/bin/npu-smi | 文件,NPU-SMI工具。 |
| /etc/hccl_rootinfo.json | mindcluster-tools生成的rootinfo文件,该文件非必需挂载项。 |
| /usr/local/Ascend/driver/topo | 拓扑目录。 |
表 7 默认挂载目录和文件(其他设备)
| 路径 | 说明 |
|---|---|
| /dev/davinciX | NPU设备,X是ID号。例如:davinci0。 |
| /dev/davinci_manager | 管理设备。 |
| /dev/hisi_hdc | 管理设备。 |
| /dev/devmm_svm | 管理设备。 |
| /usr/local/Ascend/driver/lib64 | 目录,驱动提供的用户态库。 |
| /usr/local/Ascend/driver/include | 目录,驱动提供的头文件。 |
| /usr/local/dcmi | 目录,DCMI头文件和库。 |
| /usr/local/bin/npu-smi | 文件,NPU-SMI工具。 |
| /dev/dvpp_cmdlist | 设备文件,支撑数字视觉预处理功能。 |
| /var/queue_schedule | 管理FlowGW调度框架。 [!NOTE] 说明 挂载此目录需同时满足以下条件:
|
Ascend Docker Runtime命令说明
Ascend Docker Runtime安装后,会在安装目录生成可执行工具,涉及到的指令为内部命令,用户请勿直接使用,相关指令如表1所示。
表 1 命令说明
Note
- 因为Ascend Docker Runtime会将输入参数直接传递至runc或者docker-runc,所以runc/docker-runc的相关参数也会被Ascend Docker Runtime接受,用户请自行参考所在环境的runc/docker-runc的命令行选项使用相关参数。
- ascend-docker-hook工具会忽略参数运行,运行时会接受标准输入。
镜像和二进制部署差异
表 1 组件两种安装方式差异
| 安装方式 | 差异 |
|---|---|
| 二进制 |
|
| 镜像 | K8s作为调度管理平台,需要使用特权容器和root用户。 |
使用ServiceAccount和KubeConfig差异
表 1 K8s认证授权方式差异
| 认证凭据 | 组件 | 差异 |
|---|---|---|
| ServiceAccount |
|
ServiceAccount的token文件内容会明文挂载到物理机上,有暴露风险。 |
| 导入的KubeConfig文件 | Resilience Controller | 通过集群调度组件提供的加密工具导入后为密文落盘,工具不提供解密导出功能,安全性较高。如果既配置了ServiceAccount,也导入了KubeConfig文件,后者优先级更高。 |
高可用集群中的调度组件
生产环境中,Kubernetes集群通常会部署多个管理节点,以避免单个管理节点故障导致整个集群不可用。Kubernetes官方提供了两种高可用的集群搭建方案,请参见Kubernetes文档中高可用拓扑选项。集群调度组件基于官方“Stacked etcd topology”方案进行验证,各组件能够在多个管理节点场景下正常运行,且功能正常。
多管理节点场景需要保证所有管理节点配置一致,如集群调度组件镜像、日志目录、运行用户、节点标签等配置需一致。多管理节点下集群调度组件的安装请参见安装部署章节。多管理节点的安装请参见K8s官方文档利用kubeadm创建高可用集群。
使用Containerd的集群调度组件
Kubernetes 1.20版本之后,将不再支持使用Docker作为CRI(container runtime interface)。生产环境中,如果对使用的K8s有高版本要求时,需要考虑改用其它CRI。集群调度组件基于主流CRI Containerd的1.4.4版本进行安装和验证,各组件能够在Containerd + Kubernetes场景下正常运行,且功能正常。
Containerd安装流程请参见官方资料。集群调度组件安装时默认使用Ascend Docker Runtime,可以配置Containerd使用Ascend Docker Runtime替代runc,用于在启动容器时自动挂载设备,对Containerd需要做的配置请参见安装部署章节的Containerd场景下安装Ascend Docker Runtime。
模型训练任务说明
使用其他调度器时,根据服务器类型,对训练任务的约束如下。当使用集群调度组件的Volcano作为调度器时,调度任务时已经满足如下使用约束。
表 1 训练任务使用说明
Ascend Device Plugin通信文件
在Ascend Device Plugin插件中,会生成用于通信的sock文件,sock文件的类型如下所示。
- npu.sock
- Ascend910.sock
- Ascend310.sock
- Ascend310P.sock
- davinci-mini.sock
- Ascend910-X.sock:X可取值为2c、4c、8c、16c、12c.3cpu.32g、12c.3cpu.32g.dvpp、12c.3cpu.32g.ndvpp、6c.1cpu.16g、3c.0.5cpu.8g、10c.3cpu.16g、10c.3cpu.16g.dvpp、10c.3cpu.16g.ndvpp、5c.1cpu.8g、4c.1cpu.5g、10c.3cpu.32g、10c.3cpu.32g.dvpp、10c.3cpu.32g.ndvpp和5c.1cpu.16g
- Ascend310P-X.sock:X可取值1c、2c、4c、2c.1cpu、4c.3cpu、4c.3cpu.ndvpp、4c.4cpu.dvpp
上述sock文件仅用于和本机的K8s通信。
芯片故障码参考文档
各个产品芯片故障码的详细说明,可以参见表1。
表 1 产品故障码参考文档
| 产品形态 | 参考文档 |
|---|---|
| Atlas 训练系列产品 | |
| Atlas A2 训练系列产品 | |
| Atlas A3 训练系列产品 | |
| 推理服务器(插Atlas 300I 推理卡) | 《Atlas 300I 推理卡 黑匣子错误码信息列表(型号 3000, 3010)》 |
| Atlas 200I SoC A1 核心板 | |
| Atlas 推理系列产品(不包含Atlas 200I SoC A1 核心板) | |
| 昇腾950代际产品 |
节点故障码参考文档
各个产品节点故障码的详细说明,可以参见表1。
表 1 节点故障码参考文档
| 产品形态 | 参考文档 |
|---|---|
| Atlas 800T A2 训练服务器 | 《Atlas 800T A2 训练服务器 iBMC 告警处理》 |
| Atlas 900 A2 PoD 集群基础单元 | 《Atlas 900 RCK A2 计算节点 iBMC 告警处理》 |
Note
其他产品形态的iBMC告警请从Support网站获取,选择对应产品,找到对应产品的iBMC 告警处理。
名词说明
本章节介绍了集群调度组件用户指南中部分名词,方便用户更好的理解文档内容和步骤,名词介绍如表1所示。
表 1 名词解释
| 名词 | 说明 |
|---|---|
| 多机多卡训练 | 同时使用多台训练服务器上的多块芯片进行分布式训练。 |
| 单机单卡训练 | 使用1台训练服务器上的1颗芯片进行训练。 |
Note
更多关于集群调度组件支持的产品形态,请参见支持的产品形态和OS清单章节。
公网地址
表 1 集群调度组件代码非公网地址说明
| url | 说明 |
|---|---|
| huawei.com/Ascend910 | Atlas 训练系列产品资源名称,非网址,不访问。 |
| huawei.com/Ascend310P | Atlas 推理系列产品资源名称,非网址,不访问。 |
| huawei.com/Ascend310 | Atlas 200/300/500 推理产品资源名称,非网址,不访问。 |
| huawei.com/Ascend* | Ascend*切分芯片资源名称,非网址,不访问。 |
https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.3 |
注释参考信息,不访问。 |
| huawei.com/Ascend310P-V | Atlas 推理系列产品混插模式:Atlas 300V 视频解析卡资源名称,非网址,不访问。 |
| huawei.com/Ascend310P-VPro | Atlas 推理系列产品混插模式:Atlas 300V Pro 视频解析卡资源名称,非网址,不访问。 |
| huawei.com/Ascend310P-IPro | Atlas 推理系列产品混插模式:Atlas 300I Pro 推理卡资源名称,非网址,不访问。 |
| huawei.com/npu | Atlas 350/850/950 系列产品资源名称,非网址,不访问。 |
安全说明
断点续训展示的代码为开源代码,其中涉及到的脚本(Python以及shell)需要设置相同的用户和用户组。出于安全的考虑,建议用户对其中的输入参数、文件目录、文件路径等信息进行校验。
输入参数校验项目包括但不限于:
- 涉及使用外部变量作为命令的一部分都进行严格的参数校验和防注入措施。
- 从环境变量中获取的外部变量在用于命令拼接之前都要做严格的校验和防注入措施。
- 所有的进程理应最小权限原则,避免由于注入导致严重后果。
- 代码中不存在直接使用外部变量作为命令。
- 遵守各类编程语言安全规范。
文件路径校验项目包括但不限于:
- 路径长度有做限制。
- 路径有做特殊字符过滤和防绕过机制。
- 不存在命令注入。
- 进程满足最小权限原则。
- 白名单中不存在高危路径。
- 文件路径真实性有校验,有做抛异常处理。
- 命令注入是可控外部变量导致的非预期行为。
- 恢复策略只支持Python 3.7和Python 3.9版本。
- 脚本适配中,用户需要根据情况对异常进行捕获并按照业务逻辑处理。
用户信息列表
请周期性地更新用户的密码,避免长期使用同一个密码带来的风险。
| 用户 | 描述 | 初始密码 | 密码修改方法 |
|---|---|---|---|
| root | - | 用户自定义 | 使用passwd命令修改。 |
| HwHiAiUser | 驱动run包的运行用户。 | 用户自定义 | 使用passwd命令修改。 |
| hwMindX | 集群调度组件默认的运行用户,默认设置为nologin。 | 无 | - |
| HwBaseUser | Atlas 200I SoC A1 核心板上驱动相关设备运行用户,安装驱动时由驱动run包或者用户自行创建,默认设置为nologin。 | 无 | - |
| HwDmUser | Atlas 200I SoC A1 核心板上驱动相关设备运行用户,安装驱动时由驱动run包或者用户自行创建,默认设置为nologin。 | 无 | - |
| 用户 | 描述 | 初始密码 | 密码修改方法 |
|---|---|---|---|
| root | - | 无 | - |
| HwHiAiUser | 驱动run包的运行用户,非Atlas 200I SoC A1 核心板上的集群调度组件容器内默认为nologin,该用户不可登录。 | 无 | - |
| hwMindX | 集群调度组件容器内默认的运行用户,默认设置为nologin。 | 无 | - |
| HwBaseUser | Atlas 200I SoC A1 核心板上驱动相关设备运行用户,集群调度组件容器内由用户自行创建。 | 无 | - |
| HwDmUser | Atlas 200I SoC A1 核心板上驱动相关设备运行用户,集群调度组件容器内由用户自行创建。 | 无 | - |
| 用户 | 描述 | 初始密码 | 密码修改方法 |
|---|---|---|---|
| nginx | nginx容器运行账户 | 无 | - |
| 用户 | 初始密码 | 密码修改方法 |
|---|---|---|
| root | 无 | - |
| bin | 无 | - |
| daemon | 无 | - |
| adm | 无 | - |
| lp | 无 | - |
| sync | 无 | - |
| shutdown | 无 | - |
| halt | 无 | - |
| 无 | - | |
| news | 无 | - |
| uucp | 无 | - |
| operator | 无 | - |
| man | 无 | - |
| postmaster | 无 | - |
| cron | 无 | - |
| ftp | 无 | - |
| sshd | 无 | - |
| at | 无 | - |
| squid | 无 | - |
| xfs | 无 | - |
| games | 无 | - |
| cyrus | 无 | - |
| vpopmail | 无 | - |
| ntp | 无 | - |
| smmsp | 无 | - |
| guest | 无 | - |
| nobody | 无 | - |
| 用户 | 初始密码 | 密码修改方法 |
|---|---|---|
| root | 无 | - |
| daemon | 无 | - |
| bin | 无 | - |
| sys | 无 | - |
| sync | 无 | - |
| games | 无 | - |
| man | 无 | - |
| lp | 无 | - |
| 无 | - | |
| news | 无 | - |
| uucp | 无 | - |
| proxy | 无 | - |
| www-data | 无 | - |
| backup | 无 | - |
| list | 无 | - |
| irc | 无 | - |
| gnats | 无 | - |
| nobody | 无 | - |
| _apt | 无 | - |
表 1 组件在K8s中创建的ServiceAccount列表
| 账号名 | 说明 |
|---|---|
| volcano-controllers | 开源Volcano的controller组件在K8s中创建的用户。 |
| volcano-scheduler | 开源Volcano的scheduler组件在K8s中创建的用户。 |
| ascend-device-plugin-sa-910 | 用YAML启动服务,将会在K8s中创建该用户,不同型号的设备使用的账号名不同。 |
| ascend-device-plugin-sa-310p | 用YAML启动服务,将会在K8s中创建该用户,不同型号的设备使用的账号名不同。 |
| ascend-device-plugin-sa-310 | 用YAML启动服务,将会在K8s中创建该用户,不同型号的设备使用的账号名不同。 |
| ascend-operator-manager | 用YAML启动服务,将会在K8s中创建该用户,如:ascend-operator-v{version}.yaml。 |
| resilience-controller | 建议安全加固启动,使用带without-token的YAML启动服务,在K8s中创建并使用resilience-controller账号,同时为该账号授予适当权限。 |
| noded | 用YAML启动服务,将会在K8s中创建该用户,如:noded-v{version}.yaml。 |
| clusterd | 用YAML启动服务,将会在K8s中创建该用户,如:clusterd-v{version}.yaml。 |
| default | MindCluster组件或开源Volcano部署时,会在K8s中自动创建的用户。 |
mindcluster-deploy开源仓版本说明
mindcluster-deploy为MindCluster集群调度组件的开源仓库,仓库提供MindCluster示例代码和脚本仅供参考,不能用于生产环境。
代码仓版本配套关系说明如下:
表 1 mindcluster-deploy代码仓版本配套说明
| MindCluster版本 | mindcluster-deploy仓配套分支 |
|---|---|
| 26.0.0 | branch_v26.0.0 |
| 7.3.0 | branch_v7.3.0 |
| 7.2.RC1 | branch_v7.2.RC1 |
| 7.1.RC1 | branch_v7.1.RC1 |
| 7.0.RC1 | branch_v7.0.0-RC1 |
| 6.0.0 | branch_v6.0.0 |
| 6.0.RC3 | branch_v6.0.0-RC3 |
| 6.0.RC2 | branch_v6.0.0-RC2 |
| 6.0.RC1,5.0.1,5.0.0,3.0.0 | branch_v6.0.0-RC1 |
K8s集群基础性能调优
MindCluster集群调度组件是基于K8s生态的功能组件,因此训练任务调度基于K8s平台时才支持使用断点续训。断点续训支持的K8s版本与MindCluster集群调度组件一致,当前为1.17.x~1.34.x(推荐使用1.19.x及以上版本)。
Note
以下配置为万卡集群的推荐配置,实际配置时,请根据集群的规模进行调整。
表 1 配置说明
自定义指标开发
请参见开发者指南-自定义指标开发。
准备安装环境
安装Kubernetes须知
- Kubernetes使用Calico作为集群网络插件时,默认使用node-to-node mesh的网络配置;当集群规模较大时,该配置可能造成业务交换机网络负载过大,建议配置成reflector模式,具体操作请参考Calico官方文档。
- 在CentOS 7.6系统上安装Kubernetes,并且使用v3.24版本Calico作为集群网络插件,可能会安装失败,可参考系统要求查看相关约束。
- Kubernetes 1.24及以上版本,Dockershim已从Kubernetes项目中移除。如果用户还想继续使用Docker作为Kubernetes的容器引擎,需要再安装cri-dockerd,可参考使用1.24及以上版本的Kubernetes时,Docker使用失败章节进行操作。
- Kubernetes 1.25.10及以上版本,不支持虚拟化的vNPU的恢复功能。
安装开源系统
在安装集群调度组件前,用户需确保完成以下基础环境的准备:
-
安装Docker,支持18.09.x~28.5.1版本,具体操作请参见安装Docker。
-
安装Containerd,支持1.4.x~2.1.4版本,具体操作请参见安装Containerd。
-
安装Kubernetes,支持1.17.x~1.34.x版本的Kubernetes(推荐使用1.19.x及以上版本),具体操作请参见安装Kubernetes推荐使用Kubeadm创建集群,集群初始化过程中的部分问题可参考初始化Kubernetes失败。且需解除管理节点隔离。如需解除管理节点隔离,命令示例如下。
-
Kubernetes 1.24之前版本
-
解除单节点隔离。
kubectl taint nodes <hostname> node-role.kubernetes.io/master- -
解除所有节点隔离。
kubectl taint nodes --all node-role.kubernetes.io/master-
-
-
Kubernetes 1.24及之后版本
-
解除单节点隔离。
kubectl taint nodes <hostname> node-role.kubernetes.io/control-plane:NoSchedule- -
解除所有节点隔离。
kubectl taint nodes --all node-role.kubernetes.io/control-plane:NoSchedule-
-
Note
通过解除管理节点隔离可移除主节点的污点,以允许Pod被调度到主节点上。
-

