启动Ascend Device Plugin

约束限制

操作步骤

Ascend Device Plugin支持两种安装方式,用户可根据实际情况选择其中一种进行安装。

二进制方式运行

Ascend Device Plugin组件需使用特权容器和root用户运行,如果容器被人恶意利用,有容器逃逸风险。建议节点导入KubeConfig配置文件后,直接在物理机上通过二进制服务启动。

  1. 使用root用户登录服务器,将软件包上传到组件安装服务器的任意目录(如“/home/ascend-device-plugin”)并解压。
  2. 创建device-plugin.service文件,并修改“NODE_NAME”环境变量。

    [Unit]
    Description=Ascend K8s device plugin 
    Documentation=hiascend.com
    
    [Service]
    ExecStart=/bin/bash -c "/usr/local/bin/device-plugin -volcanoType=true -logFile=/var/log/mindx-dl/devicePlugin/devicePlugin.log>/dev/null  2>&1 &"
    Restart=always
    RestartSec=2
    KillMode=process
    Environment="LD_LIBRARY_PATH=/usr/local/kmc"
    Environment="GOGC=50"
    Environment="GOMAXPROCS=2"
    Environment="GODEBUG=madvdontneed=1"
    Environment="NODE_NAME=<当前节点的K8s node name>"
    Type=forking
    User=hwMindX
    Group=hwMindX
    
    [Install]
    WantedBy=multi-user.target

  3. 如需修改启动参数,可以自行修改“device-plugin.service”“ExecStart”字段。字段请参考表2

    ...
    [Service]
    ExecStart=/bin/bash -c "/usr/local/bin/device-plugin  -volcanoType=true   -logFile=/var/log/mindx-dl/devicePlugin/devicePlugin.log &"
    Restart=always
    RestartSec=2
    ...

    如果部署节点为Atlas 200I Soc A1 核心板,需要在“ExecStart”字段设置参数“-useAscendDocker=false”。

  4. 如果部署节点不为Atlas 200I Soc A1 核心板,可跳过该步骤。否则,需要在所有该类型节点上将hwMindX用户加入到HwBaseUser、HwDmUser用户组中。可执行如下命令:

    usermod -a -G HwBaseUser hwMindX
    usermod -a -G HwDmUser hwMindX

  5. 执行以下命令启用Device Plugin服务。

    cd /home/ascend-device-plugin
    mkdir /usr/local/kmc
    cp -r lib/* /usr/local/kmc
    cp device-plugin /usr/local/bin
    cp device-plugin.service /etc/systemd/system
    chmod 444 /usr/local/kmc/*
    chmod 755 /usr/local/kmc
    chmod 500 /usr/local/bin/device-plugin
    chown hwMindX:hwMindX /usr/local/bin/device-plugin
    setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep /usr/local/bin/device-plugin
    chattr +i /usr/local/bin/device-plugin
    tee /etc/ld.so.conf.d/ascend_dl_so.conf <<- EOF
    /usr/local/kmc
    EOF
    ldconfig
    chattr +i /etc/systemd/system/device-plugin.service
    systemctl enable device-plugin
    systemctl start device-plugin

    由于Ascend Device Plugin需要访问主机路径 “/var/lib/kubelet/device-plugins/”,并且需要修改创建的sock属主为root,因此上述命令包含为二进制添加对应的能力项。

    加密组件依赖的动态库文件lib目录中提供了libcrypto.so动态库,在某些环境下可能会与系统自带库冲突,如果执行安装过程出现了包含openssl相关的错误,请参见常见故障处理解决。

容器化方式运行

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

    docker images | grep k8sdeviceplugin

    示例如下:

    root@ubuntu:~# docker images|grep k8sdeviceplugin 
    ascend-k8sdeviceplugin               v3.0.0              29eec79eb693        About an hour ago   105MB
    • 是,执行2
    • 否,请参见制作镜像,完成镜像制作和分发。

  2. 将软件包中的yaml文件拷贝到K8s管理节点上。请注意此处需使用适配具体处理器型号的yaml文件,详见下表。

    表1 Ascend Device Plugin的yaml文件列表

    yaml文件列表

    说明

    device-plugin-310-{version}.yaml

    Atlas 200/300/500 推理产品上不使用Volcano的配置文件。

    device-plugin-310P-{version}.yaml

    Atlas 推理系列产品上不使用Volcano的配置文件。

    device-plugin-910-{version}.yaml

    Atlas 训练系列产品上不使用Volcano的配置文件。

    device-plugin-310P-1usoc-{version}.yaml

    Atlas 200I SoC A1 核心板上不使用Volcano的配置文件。

    device-plugin-volcano-{version}.yaml

    Atlas 训练系列产品上使用Volcano的配置文件。

    device-plugin-310-volcano-{version}.yaml

    Atlas 200/300/500 推理产品上使用Volcano的配置文件。

    device-plugin-310P-volcano-{version}.yaml

    Atlas 推理系列产品设备上使用Volcano的配置文件。

    device-plugin-310P-1usoc-volcano-v3.0.0.yaml

    Atlas 200I SoC A1 核心板上使用Volcano的配置文件。

  3. 如不修改组件启动参数,可跳过本步骤。否则,根据实际情况修改Ascend Device Plugin的启动参数。启动参数请参见表2,可执行./device-plugin -h查看参数说明。

    • Atlas 200I Soc A1 核心板节点上,修改启动脚本“run_for_310P_1usoc.sh”中Ascend Device Plugin的启动参数。修改完后需在所有Atlas 200I Soc A1 核心板节点上重新制作镜像,或者将本节点镜像重新制作后分发到其余所有Atlas 200I Soc A1 核心板节点。

      如果部署节点为Atlas 200I Soc A1 核心板,需要在启动参数中设置“-useAscendDocker=false”,默认已配置。

    • 其他类型节点,修改对应启动yaml文件中Ascend Device Plugin的启动参数。

  4. 如果不使用Volcano作为调度器(Ascend Device Plugin启动参数volcanoType设置为false),可跳过该步骤。协同Volcano使用时(启动参数volcanoType设置为true),Ascend Device Plugin需要操作K8s相关资源,因此需要为Ascend Device Plugin授权,授权方式有两种。

    • 如果不导入KubeConfig文件,使用yaml中创建的ServiceAccount,可跳过本步骤。
    • 如果导入了授权的KubeConfig文件,需要在组件启动yaml文件中添加安全加固相关路径的挂载配置。
      下方是在昇腾910 AI处理器节点(协同Volcano和HCCL-Controller使用)开启安全加固的yaml启动文件。其他类型处理器节点yaml文件安全加固挂载路径配置方式相同。
      ...
      apiVersion: apps/v1
      kind: DaemonSet
      metadata:
        name: ascend-device-plugin-daemonset-910
        namespace: kube-system
      spec:
        selector:
          matchLabels:
            name: ascend-device-plugin-ds
      ...
          spec:
      ...
            containers:
              - image: ascend-k8sdeviceplugin:v2.0.3  # 用户需替换当前使用的版本
      ...
                volumeMounts:
                  
      ...
                  - name: kmckeystore
                    mountPath: /etc/mindx-dl/kmc_primary_store
                  - name: kmckeybak
                    mountPath: /etc/mindx-dl/.config
                  - name: kmc-deviceplugin
                    mountPath: /etc/mindx-dl/device-plugin
      ...
            volumes:
      
      ...
              - name: kmckeystore
                hostPath:
                  path: /etc/mindx-dl/kmc_primary_store
              - name: kmckeybak
                hostPath:
                  path: /etc/mindx-dl/.config
              - name: kmc-deviceplugin
                hostPath:
                  path: /etc/mindx-dl/device-plugin
      ...

  5. 在K8s管理点上执行以下命令,启动对应服务。

    • K8s集群中存在使用Atlas 200/300/500 推理产品节点(Ascend Device Plugin独立工作,不协同Volcano使用)。
      kubectl apply -f device-plugin-310-*.yaml
    • K8s集群中存在使用Atlas 推理系列产品节点(Ascend Device Plugin独立工作,不协同Volcano使用)。
      kubectl apply -f device-plugin-310P-*.yaml
    • K8s集群中存在使用Atlas 训练系列产品节点(Ascend Device Plugin独立工作,不协同Volcano和HCCL-Controller使用)。
      kubectl apply -f device-plugin-910-*.yaml
    • K8s集群中存在使用Atlas 200/300/500 推理产品节点(协同Volcano使用)。
      kubectl apply -f device-plugin-310-volcano-*.yaml
    • K8s集群中存在使用Atlas 推理系列产品节点(协同Volcano使用)。
      kubectl apply -f device-plugin-310P-volcano-*.yaml
    • K8s集群中存在使用Atlas 训练系列产品节点(协同Volcano和HCCL-Controller使用)。
      kubectl apply -f device-plugin-volcano-*.yaml
    • K8s集群中存在使用Atlas 200I Soc A1 核心板节点(协同Volcano使用)。
      kubectl apply -f device-plugin-310P-1usoc-volcano-*.yaml
    • K8s集群中存在使用Atlas 200I Soc A1 核心板节点(Ascend Device Plugin独立工作,不协同Volcano使用)。
      kubectl apply -f device-plugin-310P-1usoc-*.yaml

    如果K8s集群使用了多种类型的昇腾AI处理器,请分别执行对应命令。

    启动示例如下所示:

    root@ubuntu:/home/ascend-device-plugin# kubectl apply -f device-plugin-volcano-v3.0.0.yaml
    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
    root@ubuntu:/home/ascend-device-plugin# kubectl get pod -n kube-system
    NAME                                       READY   STATUS    RESTARTS   AGE
    ...
    ascend-device-plugin-daemonset-d5ctz       1/1     Running   0          11s
    ...

参数说明

表2 Ascend Device Plugin启动参数

参数

类型

默认值

说明

-mode

string

指定Ascend Device Plugin运行模式,不指定该参数会根据NPU芯片类型自动指定。自动获取运行模式时,如果没查询到以下模式中的任意一种,则插件启动失败。

  • ascend310:以Atlas 200/300/500 推理产品的模式运行。
  • ascend310P:以Atlas 推理系列产品的模式运行。
  • ascend910:以Atlas 训练系列产品的模式运行。
说明:

MindX 3.0.0只支持自动获取运行模式,不接受指定,如果获取失败,则插件启动失败。MindX 3.0.0之后版本的Ascend Device Plugin将不再提供该参数,使用时请注意软件版本信息。

-fdFlag

bool

false

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

-edgeLogFile

string

/var/alog/AtlasEdge_log/devicePlugin.log

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

说明:

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

-useAscendDocker

bool

true

是否使用Ascend Docker Runtime。开启K8s的CPU绑核功能时,无论是否使用Ascend Docker Runtime,参数“useAscendDocker”均需设置为false。

说明:

Ascend Docker Runtime的安装方式请参见安装Ascend Docker Runtime

-volcanoType

bool

false

是否使用Volcano进行调度,当前已支持Atlas 训练系列产品Atlas 推理系列产品Atlas 200/300/500 推理产品

-kubeConfig

string

/etc/mindx-dl/device-plugin/.config/config6

volcanoType为true时生效。

默认为导入的加密KubeConfig文件路径,也支持用户自定义路径下的KubeConfig文件,如果默认路径下不存在配置文件,才启用InClusterConfig。

说明:

该文件必须使用证书导入工具进行加密,不支持明文文件。

-presetVirtualDevice

bool

true

静态虚拟化功能开关,目前支持Atlas 训练系列产品Atlas 推理系列产品且值只能为true。

-version

bool

false

查看当前device-plugin的版本号。

-listWatchPeriod

int

5

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

-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时会触发自动转储功能,文件大小上限不支持修改。

-maxBackups

int

30

转储后日志文件保留个数上限,范围:(0,30],单位:个。

-h

不涉及

显示帮助信息。