Ascend Device Plugin
- 使用整卡调度、静态vNPU调度、动态vNPU调度、断点续训、弹性训练、推理卡故障恢复或推理卡故障重调度的用户,必须在计算节点安装Ascend Device Plugin。
- 仅使用容器化支持和资源监测的用户,可以不安装Ascend Device Plugin,请直接跳过本章节。
使用约束
在安装Ascend Device Plugin前,需要提前了解相关约束,具体说明请参见表1。
操作步骤
- 以root用户登录各计算节点,并执行以下命令查看镜像和版本号是否正确。
- 将Ascend Device Plugin软件包解压目录下的YAML文件,拷贝到K8s管理节点上任意目录。请注意此处需使用适配具体处理器型号的YAML文件,并且为了避免自动识别Ascend Docker Runtime功能出现异常,请勿修改YAML文件中DaemonSet.metadata.name字段,详见下表。
表2 Ascend Device Plugin的YAML文件列表 YAML文件列表
说明
device-plugin-310-v{version}.yaml
推理服务器(插Atlas 300I 推理卡)上不使用Volcano的配置文件。
device-plugin-310-volcano-v{version}.yaml
推理服务器(插Atlas 300I 推理卡)上使用Volcano的配置文件。
device-plugin-310P-1usoc-v{version}.yaml
Atlas 200I SoC A1 核心板上不使用Volcano的配置文件。
device-plugin-310P-1usoc-volcano-v{version}.yaml
Atlas 200I SoC A1 核心板上使用Volcano的配置文件。
device-plugin-310P-v{version}.yaml
Atlas 推理系列产品上不使用Volcano的配置文件。
device-plugin-310P-volcano-v{version}.yaml
Atlas 推理系列产品上使用Volcano的配置文件。
device-plugin-910-v{version}.yaml
Atlas 训练系列产品、Atlas A2 训练系列产品、Atlas A3 训练系列产品或Atlas 800I A2 推理服务器、A200I A2 Box 异构组件上不使用Volcano的配置文件。
device-plugin-volcano-v{version}.yaml
Atlas 训练系列产品、Atlas A2 训练系列产品、Atlas A3 训练系列产品或Atlas 800I A2 推理服务器、A200I A2 Box 异构组件上使用Volcano的配置文件。
- 如不修改组件启动参数,可跳过本步骤。否则,根据实际情况修改Ascend Device Plugin的启动参数。启动参数请参见表3,可执行./device-plugin -h查看参数说明。
- 在Atlas 200I SoC A1 核心板节点上,修改启动脚本“run_for_310P_1usoc.sh”中Ascend Device Plugin的启动参数。修改完后需在所有Atlas 200I SoC A1 核心板节点上重新制作镜像,或者将本节点镜像重新制作后分发到其余所有Atlas 200I SoC A1 核心板节点。
如果不使用Volcano作为调度器,在启动Ascend Device Plugin的时候,需要修改“run_for_310P_1usoc.sh”中Ascend Device Plugin的启动参数,将“-volcanoType”参数设置为false。
- 其他类型节点,修改对应启动YAML文件中Ascend Device Plugin的启动参数。
- 在Atlas 200I SoC A1 核心板节点上,修改启动脚本“run_for_310P_1usoc.sh”中Ascend Device Plugin的启动参数。修改完后需在所有Atlas 200I SoC A1 核心板节点上重新制作镜像,或者将本节点镜像重新制作后分发到其余所有Atlas 200I SoC A1 核心板节点。
- (可选)使用断点续训(包括进程级恢复)或弹性训练时,根据需要使用的故障处理模式,修改Ascend Device Plugin组件的启动YAML。
... containers: - image: ascend-k8sdeviceplugin:v7.0.RC1 name: device-plugin-01 resources: requests: memory: 500Mi cpu: 500m limits: memory: 500Mi cpu: 500m command: [ "/bin/bash", "-c", "--"] args: [ "device-plugin -useAscendDocker=true -volcanoType=true # 重调度场景下必须使用Volcano -autoStowing=true # 是否开启自动纳管开关,默认为true;设置为false代表关闭自动纳管,当芯片健康状态由unhealthy变为healthy后,不会自动加入到可调度资源池中;关闭自动纳管,当芯片参数面网络故障恢复后,不会自动加入到可调度资源池中。该特性仅适用于Atlas 训练系列产品 -listWatchPeriod=5 # 健康状态检查周期,范围[3,60];默认5秒 -hotReset=1 # 使用断点续训时,可以在重调度的基础上,开启热复位功能,使用优雅容错模式;使用进程级恢复时,请将hotReset参数值设置为2,开启离线恢复模式 -logFile=/var/log/mindx-dl/devicePlugin/devicePlugin.log -logLevel=0" ] securityContext: privileged: true readOnlyRootFilesystem: true ...
- (可选)使用推理卡故障恢复时,需要配置热复位功能。
containers: - image: ascend-k8sdeviceplugin:v7.0.RC1 name: device-plugin-01 resources: requests: memory: 500Mi cpu: 500m limits: memory: 500Mi cpu: 500m command: [ "/bin/bash", "-c", "--"] args: [ "device-plugin ... -hotReset=0 # 使用推理卡故障恢复时,开启热复位功能 -logFile=/var/log/mindx-dl/devicePlugin/devicePlugin.log -logLevel=0" ] ...
- (可选)如需更改kubelet的默认端口,则需要修改Ascend Device Plugin组件的启动YAML。示例如下。
env: - name: NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: HOST_IP valueFrom: fieldRef: fieldPath: status.hostIP - name: KUBELET_PORT # 通知Ascend Device Plugin组件当前节点kubelet默认端口号,若未自定义kubelet默认端口号则无需传入本字段 value: "10251" volumes: - name: device-plugin hostPath: path: /var/lib/kubelet/device-plugins ...
- 在K8s管理节点上各YAML对应路径下执行以下命令,启动Ascend Device Plugin。
- K8s集群中存在使用Atlas 训练系列产品、Atlas A2 训练系列产品、Atlas A3 训练系列产品或Atlas 800I A2 推理服务器、A200I A2 Box 异构组件的节点(配合Volcano使用,支持虚拟化实例,YAML默认开启静态虚拟化)。
kubectl apply -f device-plugin-volcano-v{version}.yaml
- K8s集群中存在使用Atlas 训练系列产品、Atlas A2 训练系列产品、Atlas A3 训练系列产品或Atlas 800I A2 推理服务器、A200I A2 Box 异构组件的节点(Ascend Device Plugin独立工作,不配合Volcano使用)。
kubectl apply -f device-plugin-910-v{version}.yaml
- K8s集群中存在使用推理服务器(插Atlas 300I 推理卡)的节点(使用Volcano调度器)。
kubectl apply -f device-plugin-310-volcano-v{version}.yaml
- K8s集群中存在使用推理服务器(插Atlas 300I 推理卡)的节点(Ascend Device Plugin独立工作,不使用Volcano调度器)。
kubectl apply -f device-plugin-310-v{version}.yaml
- K8s集群中存在使用Atlas 推理系列产品的节点(使用Volcano调度器,支持虚拟化实例,YAML默认开启静态虚拟化)。
kubectl apply -f device-plugin-310P-volcano-v{version}.yaml
- K8s集群中存在使用Atlas 推理系列产品的节点(Ascend Device Plugin独立工作,不使用Volcano调度器)。
kubectl apply -f device-plugin-310P-v{version}.yaml
- K8s集群中存在使用Atlas 200I SoC A1 核心板的节点(使用Volcano调度器)。
kubectl apply -f device-plugin-310P-1usoc-volcano-v{version}.yaml
- K8s集群中存在使用Atlas 200I SoC A1 核心板的节点(Ascend Device Plugin独立工作,不使用Volcano调度器)。
kubectl apply -f device-plugin-310P-1usoc-v{version}.yaml
如果K8s集群使用了多种类型的昇腾AI处理器,请分别执行对应命令。
启动示例如下:
serviceaccount/ascend-device-plugin-sa created clusterrole.rbac.authorization.K8s.io/pods-node-ascend-device-plugin-role created clusterrolebinding.rbac.authorization.K8s.io/pods-node-ascend-device-plugin-rolebinding created daemonset.apps/ascend-device-plugin-daemonset created
- K8s集群中存在使用Atlas 训练系列产品、Atlas A2 训练系列产品、Atlas A3 训练系列产品或Atlas 800I A2 推理服务器、A200I A2 Box 异构组件的节点(配合Volcano使用,支持虚拟化实例,YAML默认开启静态虚拟化)。
- 在任意节点执行以下命令,查看组件是否启动成功。
kubectl get pod -n kube-system
回显示例如下,出现Running表示组件启动成功。
1 2 3 4
NAME READY STATUS RESTARTS AGE ... ascend-device-plugin-daemonset-d5ctz 1/1 Running 0 11s ...

- 安装组件后,组件的Pod状态不为Running,可参考组件Pod状态不为Running章节进行处理。
- 安装组件后,组件的Pod状态为ContainerCreating,可参考集群调度组件Pod处于ContainerCreating状态章节进行处理。
- 启动组件失败,可参考启动集群调度组件失败,日志打印“get sem errno =13”章节信息。
- 组件启动成功,找不到组件对应的Pod,可参考组件启动yaml执行成功,找不到组件对应的Pod章节信息。
参数说明
参数 |
类型 |
默认值 |
说明 |
---|---|---|---|
-fdFlag |
bool |
false |
边缘场景标志,是否使用FusionDirector系统来管理设备。
|
-shareDevCount |
uint |
1 |
共享设备特性开关,取值范围为1~100。 默认值为1,代表不开启共享设备;取值为2~100,表示单颗芯片虚拟化出来的共享设备个数。 支持以下设备,其余设备该参数无效,不影响组件正常启动。
|
-edgeLogFile |
string |
/var/alog/AtlasEdge_log/devicePlugin.log |
边缘场景日志文件。fdFlag设置为true时生效。 说明:
单个日志文件超过20 MB时会触发自动转储功能,文件大小上限不支持修改。 |
-useAscendDocker |
bool |
true |
默认为true,容器引擎是否使用Ascend Docker Runtime。开启K8s的CPU绑核功能时,需要卸载Ascend Docker Runtime并重启容器引擎。取值说明如下:
说明:
MindCluster 5.0.RC1及以上版本只支持自动获取运行模式,不接受指定。 |
-use310PMixedInsert |
bool |
false |
是否使用Atlas 推理系列产品混插模式。
说明:
|
-volcanoType |
bool |
false |
是否使用Volcano进行调度,当前已支持Atlas 训练系列产品、Atlas A2 训练系列产品、Atlas 推理系列产品和推理服务器(插Atlas 300I 推理卡)芯片。
|
-presetVirtualDevice |
bool |
true |
虚拟化功能开关。
|
-version |
bool |
false |
是否查看当前Ascend Device Plugin的版本号。
|
-listWatchPeriod |
int |
5 |
设置健康状态检查周期,取值范围为3~60,单位为秒。 说明:
若设备信息有变化,那么在健康状态检查周期内就会上报;如果设备信息没有变化,那么上报周期固定为5分钟。 |
-autoStowing |
bool |
true |
是否自动纳管已修复设备,volcanoType为true时生效。
说明:
设备故障后,会自动从K8s里面隔离。如果设备恢复正常,默认会自动加入K8s集群资源池。如果设备不稳定,可以设置为false,此时需要手动纳管。
|
-logLevel |
int |
0 |
日志级别:
|
-maxAge |
int |
7 |
日志备份时间限制,取值范围为7~700,单位为天。 |
-logFile |
string |
/var/log/mindx-dl/devicePlugin/devicePlugin.log |
非边缘场景日志文件。fdFlag设置为false时生效。 说明:
单个日志文件超过20 MB时会触发自动转储功能,文件大小上限不支持修改。转储后文件的命名格式为:devicePlugin-触发转储的时间.log,如:devicePlugin-2023-10-07T03-38-24.402.log。 |
-hotReset |
int |
-1 |
设备热复位功能参数。开启此功能,芯片发生故障后,会进行热复位操作,让芯片恢复健康。
该参数支持的训练设备:
该参数支持的推理设备:
说明:
|
-linkdownTimeout |
int |
30 |
网络linkdown超时时间,单位秒,取值范围为1~30。 说明:
该参数取值建议与用户在训练脚本中配置的HCCL_RDMA_TIMEOUT时间一致。如果是多任务,建议设置为多任务中HCCL_RDMA_TIMEOUT的最小值。 |
-enableSlowNode |
bool |
false |
是否启用慢节点检测(劣化诊断)功能。
|
-dealWatchHandler |
bool |
false |
当informer链接因异常结束时,是否需要刷新本地的pod informer缓存。
|
checkCachedPods |
bool |
true |
是否定期检查缓存中的Pod。默认取值为true,当缓存中的Pod超过1小时没有被更新,Ascend Device Plugin将会主动请求api-server查看Pod情况。
|
-maxBackups |
int |
30 |
转储后日志文件保留个数上限,取值范围为1~30,单位为个。 |
-thirdPartyScanDelay |
int |
300 |
Ascend Device Plugin组件启动重新扫描的等待时长。 Ascend Device Plugin自动复位芯片失败后,会将失败信息写到节点annotation上,三方平台可以根据该信息复位失败的芯片。Ascend Device Plugin组件根据本参数设置的等待时长,等待一段时间后,重新扫描设备。 仅Atlas 800T A3 超节点服务器支持使用本参数。 单位:秒。 |
-h或者-help |
无 |
无 |
显示帮助信息。 |