安装Ascend Device Plugin

前提条件

已完成安装前准备,具体操作请参见安装前准备

约束限制

操作步骤

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

二进制方式运行

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

  1. 获取Ascend Device Plugin软件包,请参见准备软件包
  2. 使用root用户登录服务器,将软件包上传到组件安装服务器的任意目录(如“/home/ascend-device-plugin”)并解压。
  3. 如果使用K8s原生调度(Ascend Device Plugin启动参数volcanoType设置为false),可跳过该步骤。协同Volcano使用时(启动参数volcanoType设置为true),Ascend Device Plugin需要操作K8s的资源,需要通过外部导入加密KubeConfig文件进行授权。参考以下ClusterRole配置的资源权限,自行生成KubeConfig文件并导入(也可以参见导入KubeConfig文件制作、导入KubeConfig文件)。

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    ...
    rules:
      - apiGroups: [""]
        resources: ["pods"]
        verbs: ["get", "list", "update"]
      - apiGroups: [""]
        resources: ["nodes"]
        verbs: ["get", "patch"]
      - apiGroups: [""]
        resources: ["nodes/status"]
        verbs: ["get", "patch"]
      - apiGroups: [""]
        resources: ["configmaps"]
        verbs: ["get", "create", "update"]

  4. 创建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

  5. 如需修改启动参数,可以自行修改“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”字段设置参数“-userAscendDocker=false”。

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

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

  7. 执行以下命令启用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 555 /usr/local/bin/device-plugin
    setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep /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相关的错误,请参见FAQ解决。

容器化方式运行

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

    docker images | grep k8sdeviceplugin

    示例如下:

    root@ubuntu:~# docker images|grep k8sdeviceplugin 
    ascend-k8sdeviceplugin               v3.0.RC3              29eec79eb693        About an hour ago   105MB

  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-volcano-{version}.yaml

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

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

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

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

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

  3. 如不修改组件启动参数,可跳过本步骤。否则,根据实际情况修改Ascend Device Plugin的启动参数。启动参数请参见表2,可执行./device-plugin -h查看参数说明。
  4. 如果使用K8s原生调度(Ascend Device Plugin启动参数volcanoType设置为false),可跳过该步骤。协同Volcano使用时(启动参数volcanoType设置为true),Ascend Device Plugin需要操作K8s相关资源,因此需要为Ascend Device Plugin授权,授权方式有两种。

    • 导入授权的KubeConfig文件。
    • 使用yaml中创建的ServiceAccount。
    如果不导入KubeConfig文件,使用ServiceAccount,可跳过本步骤。由于K8s自带的ServiceAccount的token文件会挂载到物理机上,有暴露风险,可通过外部导入加密的KubeConfig文件替换ServiceAccount进行安全加固。根据kubectl相关指导,参考device-plugin-volcano-{version}.yaml中ClusterRole配置的资源权限,自行生成KubeConfig文件并导入(也可以参见导入KubeConfig文件制作、导入KubeConfig文件)。然后在yaml启动文件中添加安全加固相关路径的挂载配置。下方是在Atlas训练系列产品节点(协同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训练系列产品)。
      kubectl apply -f device-plugin-volcano-*.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集群使用了多种类型的昇腾处理器,请分别执行对应命令。

    启动示例如下所示:

    root@ubuntu:/home/ascend-device-plugin# kubectl apply -f device-plugin-volcano-v3.0.RC3.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.RC3修改为自动获取运行模式,不接受指定,如果获取失败,则插件启动失败。MindX 3.0.RC4之后版本的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。视环境中是否安装Toolbox(建议安装)修改该参数的值,如未安装,将该参数设置为“false”

说明:

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

-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。

-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

不涉及

显示帮助信息