昇腾 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 部署。

昇腾云原生组件全景(mindx-dl)

组件 功能
Ascend Docker Runtime 为训推任务提供容器化支持,自动挂载所需文件和设备依赖
Ascend Device Plugin 基于 K8s 设备插件机制,提供昇腾处理器的设备发现、分配和健康上报
NPU Exporter 实时监测昇腾处理器的利用率、温度、电压等资源指标
Volcano 昇腾亲和性调度、故障重调度,最大化发挥算力
ClusterD 集群级可用资源信息与故障统计分析
Ascend Operator 训练任务生命周期管理,为各 AI 框架分布式训练生成环境变量与集合通讯配置
HCCL Controller 生成分布式训练依赖的集合通讯配置
NodeD 节点心跳、CPU / 内存故障上报
Resilience Controller 弹性缩容:硬件故障时剔除故障硬件继续训练
Elastic Agent 训练故障时保存临终 CheckPoint
MindIO ACP 用服务器内存做缓存,加速 CheckPoint 保存与加载
MindIO TTP 大模型训练故障后即刻保存一次 CheckPoint,减少迭代损失

华为镜像仓库:https://www.hiascend.com/developer/ascendhub

机器环境初始化

安装驱动和 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 实现(install/docker/config.py:1212-1213GPU_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 注释「主机的 gpu-type 必须大写」一致(install/docker/config.py:1188)。

然后部署:

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-07-15完整文档以官方仓库为准:GitHub Wiki