昇腾社区首页
中文
注册

Ascend Device Plugin

  • 使用整卡调度、静态vNPU调度、动态vNPU调度、断点续训、弹性训练、推理卡故障恢复或推理卡故障重调度的用户,必须在计算节点安装Ascend Device Plugin
  • 仅使用容器化支持和资源监测的用户,可以不安装Ascend Device Plugin,请直接跳过本章节。

使用约束

在安装Ascend Device Plugin前,需要提前了解相关约束,具体说明请参见表1

表1 约束说明

约束场景

约束说明

NPU驱动

Ascend Device Plugin会周期性调用NPU驱动的相关接口。如果要升级驱动,请先停止业务任务,再停止Ascend Device Plugin容器服务。

配合Ascend Docker Runtime使用

组件安装顺序要求如下:

Ascend Device Plugin容器化运行时会自动识别是否安装了Ascend Docker Runtime,需要优先安装Ascend Docker RuntimeAscend Device Plugin才能正确识别Ascend Docker Runtime的安装情况。

Ascend Device Plugin若部署在Atlas 200I SoC A1 核心板上,无需安装Ascend Docker Runtime

组件版本要求如下:

该功能要求Ascend Docker RuntimeAscend Device Plugin版本保持一致且需要为5.0.RC1及以上版本,安装或卸载Ascend Docker Runtime之后需要重启容器引擎才能使Ascend Device Plugin正确识别。

以下2种场景不支持Ascend Device PluginAscend Docker Runtime配合使用。
  • 混插场景。
  • Atlas 200I SoC A1 核心板

DCMI动态库

DCMI动态库目录权限要求如下:

Ascend Device Plugin调用的DCMI动态库及其所有父目录,需要满足属主为root,其他属主程序无法运行;同时,这些文件及其目录需满足group和other不具备写权限。

DCMI动态库路径深度必须小于20。

如果通过设置LD_LIBRARY_PATH设置动态库路径,LD_LIBRARY_PATH环境变量总长度不能超过1024。

Atlas 200I SoC A1 核心板

Atlas 200I SoC A1 核心板节点上如果使用容器化部署Ascend Device Plugin,需要配置多容器共享模式,具体请参考《Atlas 200I SoC A1 核心板 25.0.RC1 NPU驱动和固件安装指南》中“容器内运行”章节

Atlas 200I SoC A1 核心板使用Ascend Device Plugin组件,需要遵循以下配套关系:
  • 5.0.RC2版本的Ascend Device Plugin需要配合Atlas 200I SoC A1 核心板的23.0.RC2及其之后的驱动一起使用。
  • 5.0.RC2之前版本的Ascend Device Plugin只能和Atlas 200I SoC A1 核心板的23.0.RC2之前的驱动一起使用。

虚拟机场景

如果在虚拟机场景下部署Ascend Device Plugin,需要在Ascend Device Plugin的镜像中安装systemd,推荐在Dockerfile中加入RUN apt-get update && apt-get install -y systemd命令进行安装。

重启场景

若用户在安装Ascend Device Plugin后,又重新修改了NPU的基础信息,例如修改了device ip,则需要重启Ascend Device Plugin,否则Ascend Device Plugin不能正确识别NPU的相关信息。

操作步骤

  1. 以root用户登录各计算节点,并执行以下命令查看镜像和版本号是否正确。
    docker images | grep k8sdeviceplugin

    回显示例如下:

    1
    ascend-k8sdeviceplugin               v7.0.RC1              29eec79eb693        About an hour ago   105MB
    
    • 是,执行2
    • 否,请参见准备镜像,完成镜像制作和分发。
  2. 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的配置文件。

  3. 如不修改组件启动参数,可跳过本步骤。否则,根据实际情况修改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的启动参数。
  4. (可选)使用断点续训(包括进程级恢复)或弹性训练时,根据需要使用的故障处理模式,修改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
    ...
  5. (可选)使用推理卡故障恢复时,需要配置热复位功能。
          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" ]
    ...
  6. (可选)如需更改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
    ...
  7. 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
  8. 在任意节点执行以下命令,查看组件是否启动成功。
    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
    ...
    

参数说明

表3 Ascend Device Plugin启动参数

参数

类型

默认值

说明

-fdFlag

bool

false

边缘场景标志,是否使用FusionDirector系统来管理设备。

  • true:使用FusionDirector
  • false:不使用FusionDirector

-shareDevCount

uint

1

共享设备特性开关,取值范围为1~100。

默认值为1,代表不开启共享设备;取值为2~100,表示单颗芯片虚拟化出来的共享设备个数。

支持以下设备,其余设备该参数无效,不影响组件正常启动。

  • Atlas 500 A2 智能小站
  • Atlas 200I A2 加速模块
  • Atlas 200I DK A2 开发者套件
  • Atlas 300I Pro 推理卡
  • Atlas 300V 视频解析卡
  • Atlas 300V Pro 视频解析卡
说明:

若用户使用的是以上支持的Atlas 推理系列产品,需要注意以下问题:

  • 不支持在使用静态vNPU调度、动态vNPU调度、推理卡故障恢复和推理卡故障重调度等特性下使用共享设备功能。
  • 单任务的请求资源数必须为1,不支持分配多芯片和跨芯片使用的场景。
  • 依赖驱动开启共享模式,设置device-share为true,详细操作步骤和说明请参见《Atlas 中心推理卡 25.0.RC1 npu-smi 命令参考》中的“设置指定设备的指定芯片的容器共享模式章节。

-edgeLogFile

string

/var/alog/AtlasEdge_log/devicePlugin.log

边缘场景日志文件。fdFlag设置为true时生效。

说明:

单个日志文件超过20 MB时会触发自动转储功能,文件大小上限不支持修改。

-useAscendDocker

bool

true

默认为true,容器引擎是否使用Ascend Docker Runtime。开启K8s的CPU绑核功能时,需要卸载Ascend Docker Runtime并重启容器引擎。取值说明如下:

  • true:使用Ascend Docker Runtime
  • false:不使用Ascend Docker Runtime
说明:

MindCluster 5.0.RC1及以上版本只支持自动获取运行模式,不接受指定。

-use310PMixedInsert

bool

false

是否使用Atlas 推理系列产品混插模式。

  • true:使用混插模式。
  • false:不使用混插模式。
说明:
  • 仅支持服务器混插Atlas 300I Pro 推理卡Atlas 300V 视频解析卡Atlas 300V Pro 视频解析卡
  • 服务器混插模式下不支持Volcano调度模式。
  • 服务器混插模式不支持虚拟化实例。
  • 服务器混插模式不支持故障重调度场景。
  • 服务器混插模式不支持Ascend Docker Runtime
  • 非混插模式Atlas 推理系列产品上报给K8s资源名称不变。
    • 非混插模式上报的资源名称格式为huawei.com/Ascend310P。
    • 混插模式上报的资源名称格式为:huawei.com/Ascend310P-V、huawei.com/Ascend310P-VPro和huawei.com/Ascend310P-IPro。

-volcanoType

bool

false

是否使用Volcano进行调度,当前已支持Atlas 训练系列产品Atlas A2 训练系列产品Atlas 推理系列产品和推理服务器(插Atlas 300I 推理卡)芯片。

  • true:使用Volcano
  • false:不使用Volcano

-presetVirtualDevice

bool

true

虚拟化功能开关。
  • 设置为true时,表示使用静态虚拟化,目前支持Atlas 训练系列产品Atlas A2 训练系列产品Atlas 推理系列产品Atlas 800I A2 推理服务器A200I A2 Box 异构组件
  • 设置为false时,表示使用动态虚拟化。目前只支持Atlas 推理系列产品的动态虚拟化,需要同步开启Volcano使用,即设置“-volcanoType”参数为true。

-version

bool

false

是否查看当前Ascend Device Plugin的版本号。

  • true:查询。
  • false:不查询。

-listWatchPeriod

int

5

设置健康状态检查周期,取值范围为3~60,单位为秒。

说明:

若设备信息有变化,那么在健康状态检查周期内就会上报;如果设备信息没有变化,那么上报周期固定为5分钟。

-autoStowing

bool

true

是否自动纳管已修复设备,volcanoType为true时生效。

  • true:自动纳管。
  • false:不会自动纳管。
说明:

设备故障后,会自动从K8s里面隔离。如果设备恢复正常,默认会自动加入K8s集群资源池。如果设备不稳定,可以设置为false,此时需要手动纳管。

  • 用户可以使用以下命令,将健康状态由unhealthy恢复为healthy的芯片重新放入资源池。
    kubectl label nodes node_name huawei.com/Ascend910-Recover-
  • 用户可以使用以下命令,将参数面网络健康状态由unhealthy恢复为healthy的芯片重新放入资源池。
    kubectl label nodes node_name huawei.com/Ascend910-NetworkRecover-

-logLevel

int

0

日志级别:

  • -1:debug。
  • 0:info。
  • 1:warning。
  • 2:error。
  • 3:critical。

-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

设备热复位功能参数。开启此功能,芯片发生故障后,会进行热复位操作,让芯片恢复健康。
  • -1:关闭芯片复位功能
  • 0:开启推理设备复位功能
  • 1:开启训练设备在线复位功能
  • 2:开启训练设备离线复位功能
该参数支持的训练设备:
  • Atlas 800 训练服务器(型号 9000)(NPU满配)
  • Atlas 800 训练服务器(型号 9010)(NPU满配)
  • Atlas 900T PoD Lite
  • Atlas 900 PoD(型号 9000)
  • Atlas 800T A2 训练服务器
  • Atlas 900 A2 PoD 集群基础单元
  • Atlas 900 A3 SuperPoD 超节点
该参数支持的推理设备:
  • Atlas 300I Pro 推理卡
  • Atlas 300V 视频解析卡
  • Atlas 300V Pro 视频解析卡
  • Atlas 300I Duo 推理卡
  • Atlas 300I 推理卡(型号 3000)(整卡)
  • Atlas 300I 推理卡(型号 3010)
  • Atlas 800I A2 推理服务器
  • A200I A2 Box 异构组件
说明:
  • 针对Atlas 300I Duo 推理卡形态硬件,仅支持按卡复位,即两颗芯片会同时复位。
  • Atlas 800I A2 推理服务器存在以下两种热复位方式,一台Atlas 800I A2 推理服务器只能使用一种热复位方式,由集群调度组件自动识别使用哪种热复位方式。
    • 方式一:执行推理任务中,NPU出现故障,Ascend Device Plugin等待该NPU空闲后,将该NPU进行复位操作。
    • 方式二:执行推理任务中,Atlas 800I A2 推理服务器中出现一个或多个故障NPU,Ascend Device Plugin等待8个NPU全部空闲后,同时对8个NPU进行复位操作。

-linkdownTimeout

int

30

网络linkdown超时时间,单位秒,取值范围为1~30。

说明:

该参数取值建议与用户在训练脚本中配置的HCCL_RDMA_TIMEOUT时间一致。如果是多任务,建议设置为多任务中HCCL_RDMA_TIMEOUT的最小值。

-enableSlowNode

bool

false

是否启用慢节点检测(劣化诊断)功能。

  • true:开启。
  • false:关闭。
    说明:

    关于劣化诊断的详细说明请参见《iMaster CCAE V100R024C00 产品文档》的“劣化诊断”章节

-dealWatchHandler

bool

false

当informer链接因异常结束时,是否需要刷新本地的pod informer缓存。

  • true:刷新pod informer缓存。
  • false:不刷新pod informer缓存。

checkCachedPods

bool

true

是否定期检查缓存中的Pod。默认取值为true,当缓存中的Pod超过1小时没有被更新,Ascend Device Plugin将会主动请求api-server查看Pod情况。

  • true:检查。
  • false:不检查。

-maxBackups

int

30

转储后日志文件保留个数上限,取值范围为1~30,单位为个。

-thirdPartyScanDelay

int

300

Ascend Device Plugin组件启动重新扫描的等待时长。

Ascend Device Plugin自动复位芯片失败后,会将失败信息写到节点annotation上,三方平台可以根据该信息复位失败的芯片。Ascend Device Plugin组件根据本参数设置的等待时长,等待一段时间后,重新扫描设备。

Atlas 800T A3 超节点服务器支持使用本参数。

单位:秒。

-h或者-help

显示帮助信息。