昇腾 NPU 基础部署

在昇腾机器上从零安装驱动/CANN、配置容器运行时、把 NPU 接入 k8s(device-plugin)并配置监控时阅读

部署安装 / GPU与异构算力
昇腾AscendNPU驱动CANNAscend Docker Runtimecontainerddevice-pluginnpu-exporternpu-smigpu-typeNPU910mindx-dlASCEND_VISIBLE_DEVICEScgroup

昇腾 NPU 基础部署

本篇覆盖单机环境初始化(驱动 + CANN)、容器运行时配置、k8s device-plugin 与 npu-exporter 部署。

机器环境初始化

安装驱动和 CANN,参考:

安装驱动时添加 --install-for-all

查看机器设备:

npu-smi info

配置运行时

首先安装 docker 或 containerd。

配置 Ascend-docker-runtime 参考:https://www.hiascend.com/document/detail/zh/mindx-dl/600/clusterscheduling/clusterschedulingig/clusterschedulingig/dlug_installation_017.html

下载安装 Ascend-docker-runtime:https://gitee.com/ascend/mind-cluster/releases/tag/v6.0.0

chmod u+x Ascend-docker-runtime_6.0.0_linux-aarch64.run
./Ascend-docker-runtime_6.0.0_linux-aarch64.run --check

# 安装 docker 运行时
./Ascend-docker-runtime_6.0.0_linux-aarch64.run --install

# docker 重启
systemctl daemon-reload && systemctl restart docker

# docker info 查看默认运行时是否改为 ascend

# 或者安装 containerd 运行时
./Ascend-docker-runtime_6.0.0_linux-aarch64.run --install --install-scene=containerd
# 安装 containerd 运行时,指定 containerd 地址
./Ascend-docker-runtime_6.0.0_linux-aarch64.run --install --install-scene=containerd --config-file-path /etc/containerd/config.toml

# 查看 cgroup 版本
stat -fc %T /sys/fs/cgroup/
# 若回显为 tmpfs,表示当前为 cgroup v1 版本
# 若回显为 cgroup2fs,表示当前为 cgroup v2 版本
# 按照文档中 cgroup 版本类型,修改运行时

systemctl daemon-reload && systemctl restart containerd

测试容器使用 NPU 资源

# docker 测试
docker pull ccr.ccs.tencentyun.com/ascendhub/ascend-mindspore:24.0.RC1-A2-ubuntu20.04
docker run -it --user root --rm -e ASCEND_VISIBLE_DEVICES=0 ccr.ccs.tencentyun.com/ascendhub/ascend-mindspore:24.0.RC1-A2-ubuntu20.04 /bin/bash
# 进入容器后执行 npu-smi info 看看是否只有一个

# containerd 测试
nerdctl run -it --runtime io.containerd.runtime.v1.linux --user root --rm -e ASCEND_VISIBLE_DEVICES=0 ccr.ccs.tencentyun.com/ascendhub/ascend-mindspore:24.0.RC1-A2-ubuntu20.04 /bin/bash

说明:ASCEND_VISIBLE_DEVICES 用于指定容器可见的 NPU 卡号;平台侧禁用占用通过 ASCEND_VISIBLE_DEVICES=void 实现(见 myapp/config.py:1265-1266GPU_NONE)。

配置 k8s

参考:https://www.hiascend.com/document/detail/zh/mindx-dl/600/clusterscheduling/clusterschedulingig/clusterschedulingig/dlug_installation_019.html

Rancher 添加 /var/log 的 kubelet 挂载绑定

修改 rancher 集群配置,添加 kubelet 挂载,和部署时添加的挂载 /data:/data 类似:

kubelet:
      extra_args:
        ...
      extra_binds:
        - '/data:/data'         # 部署 k8s 时就添加了的配置
        - '/var/log:/var/log'   # 添加这一行
      fail_swap_on: false
      generate_serving_certificate: false

安装 device-plugin

每台机器执行下面的命令:

mkdir -p -m 750 /var/log/mindx-dl/devicePlugin
chown root:root /var/log/mindx-dl/devicePlugin

下载资源包:https://www.hiascend.com/developer/download/community/result?module=dl%2Bcann

这里以 910 为例,对应文件 device-plugin/device-plugin-910-v6.0.0.yaml(仓库内位于 install/kubernetes/ascend/device-plugin/,同目录还有 310/310P 及对应 volcano 版本的 yaml)。

操作步骤:

  1. 先手动拉取镜像,然后修改 yaml 中的镜像名。
  2. 修改 nodeSelectorgpu-type: NPU910
  3. 修改镜像拉取策略为 IfNotPresent

说明:gpu-type 节点标签必须大写(如 NPU910),这与 config.py 注释「主机的 gpu-type 必须大写」一致(见 myapp/config.py:1241)。

然后部署:

kubectl apply -f device-plugin/device-plugin-910-v6.0.0.yaml

安装 npu-exporter

每台主机上创建目录:

mkdir -p -m 755 /var/log/mindx-dl/npu-exporter
chown root:root /var/log/mindx-dl/npu-exporter

配置下载镜像参考:https://www.hiascend.com/document/detail/zh/mindx-dl/600/clusterscheduling/clusterschedulingig/clusterschedulingig/dlug_installation_018.html

对应文件 npu-export/npu-exporter-v6.0.0.yaml(仓库内位于 install/kubernetes/ascend/npu-export/)。

操作步骤:

  1. 先手动拉取镜像,然后修改 yaml 中的镜像名。
  2. 修改命名空间,创建服务使得 Prometheus 可采集到。
  3. 设置 NPU 机器选择器和 hostNetwork。

然后部署:

kubectl apply -f npu-export/npu-exporter-v6.0.0.yaml
最后更新 2026-06-30完整文档以官方仓库为准:GitHub Wiki