华为昇腾 NPU 介绍

华为昇腾(Ascend)系列是华为发布的 AI 专用计算平台,由昇腾 NPU 芯片、CANN 软件栈、昇腾硬件生态和工具链共同组成。其目标是为大模型训练、推理、图像处理、高性能计算提供高效的 AI 加速能力。

一、昇腾 NPU 是什么?

昇腾 NPU(Neural Processing Unit)是一类专为 AI 计算优化的处理器,与 GPU 类似,但在矩阵乘法、向量计算、深度学习算子上进行了深入优化,具备更高能效比。

核心特点:

面向 AI 算法设计的专用处理器

强矩阵计算能力(Cube Unit)

高带宽 HBM 显存

自主可控 AI 软硬件生态

二、昇腾 NPU 产品系列

  1. Ascend 910 / 910B(训练型)

面向 AI 大模型训练

强大算力(单卡可达百 TFlops 级)

大显存 HBM

主流用于数据中心、云计算场景

  1. Ascend 310(推理型)

面向边缘推理

低功耗、低成本

适用于摄像头、工业设备、边缘服务器

  1. Ascend 710 / 910B3 / 310B 等系列

根据功率、算力、应用场景细分

广泛应用于训练、推理、推断、图像识别等场景

三、昇腾 NPU 的软件生态

  • 昇腾平台使用 CANN(Compute Architecture for Neural Networks) 软件栈,包括:

  • ACL(Ascend Compute Library):底层算子调用

  • PyTorch NPU 适配(torch-npu)

  • TensorFlow / MindSpore 适配

  • 模型转换工具 ATC(从 ONNX、TF 转换到 OM 模型)

  • Profiling / 调优工具

  • 开发者可以使用 PyTorch、MindSpore、TensorFlow 等主流框架,几乎与 GPU 使用方式一致。

四、昇腾 NPU 的优势

  1. 高能效比

专为矩阵运算设计,AI 算力更高、功耗更低。

  1. 软硬件协同优化

CANN + NPU 深度融合,使得训练速度、推理性能更高。

  1. 强大的国产 AI 生态

从芯片、驱动到框架完全国产化,适用于政企、金融、电信等需要自主可控的行业。

  1. 支持大模型训练

910/910B 系列已经在业界大规模训练场景落地。

五、技术文档

六、部署 背景

  • 通过 K8s 集群把 npu 节点加入到当前集群,官方目前本还是建议 docker 部署 npu

  • kuberentes 1.31

  • contained v1.7.13

  • 华为鲲鹏 910B 芯片

一、安装昇腾 驱动和固件

1.下载对应系统的安装包,可根据资源型号编辑完成下载

步骤截图 1

2.安装 NPU 驱动和固件

步骤截图 2

3.安装 CANN(可选)

二、安装容器化插件支持(Ascend Docker Runtime)

1.软件下载
  • docker 和 contained 软件包 都属于 Ascend Docker Runtime

  • 根据 CPU 架构选择要下载的的包 amd64/arm64

  • 官网下载地址

2.这边是 arm64 所以下载对应的容器化插件,如果 k8s 版本低可以按照官网对应的版本去下载

步骤截图 3

3.软件安装
  • 特地找官方问了下 contained 也是下载 docker 包
# 鲲鹏910B arm 芯片
# 将下载的包放到服务器上 在服务器上同目录下运行

#添加权限
chmod u+x Ascend-docker-runtime_7.1.RC1_linux-aarch64.run

#执下命令,校验软件包安装文件的一致性和完整性。
 Ascend-docker-runtime_7.1.RC1_linux-aarch64.run --check

# 回显如下信息代码检验成功
[WARNING]: --check is meaningless for Ascend-docker-runtime and will be discarded in the future
Verifying archive integrity... ./Ascend-docker-runtime_7.1.RC1_linux-x86_64.run does not contain an embedded SHA256 checksum.
...
 All good.

#安装
./Ascend-docker-runtime_7.1.RC1_linux-aarch64.run --install

# 回显示例如下,表示安装成功。
Uncompressing ascend-docker-runtime  100%
[INFO]: installing ascend docker runtime
...
[INFO] Ascend Docker Runtime install success

三、安装容器化插件 Ascend Device Plugin

步骤截图 4

1.华为官方镜像仓库下载

步骤截图 5

按照架构下载对应的镜像

步骤截图 6

2.下载华为官方 yaml 进行部署

步骤截图 7

3. 部署容器和插件 Ascend Device Plugin
# 修改镜像标签名
ctr -n k8s.io image tag swr.cn-south-1.myhuaweicloud.com/ascendhub/ascend-k8sdeviceplugin:v7.1.0RC1 ascend-k8sdeviceplugin:v7.1.0RC1

# 必须给主节点打标签需要注意 根据型号查询 这里特殊说明下我不是用的华为机器 但按照芯片型号打标签好像没问题
kubectl label nodes 192.168.1.1 masterselector=dls-master-node  # 管理节点

kubectl label nodes 192.168.1.2 accelerator=huawei-Ascend910  # 计算节点
kubectl label nodes 192.168.1.2 node-role.kubernetes.io/worker=worker  # 计算节点
kubectl label nodes 192.168.1.2 workerselector=dls-worker-node  # 计算节点
kubectl label nodes 192.168.1.2 host-arch=huawei-arm  # 计算节点
kubectl label nodes 192.168.1.2 accelerator-type=module  # 计算节点

# 修改下载的yaml配置 宿主机没有地址挂载路径可以改成 DirectoryOrCreate
      volumes:
		...
        - name: log-path
          hostPath:
            path: /var/log/mindx-dl/devicePlugin
            type: DirectoryOrCreate
        ...

# 解压包后查看 当前npu型号
npu-smi info 

# 查看出现的型号是 910  
kubectl apply -f {device-plugin-name}-910-{version}.yaml

# 会以daemonset方式启动在npu节点上,完成后可以通过查看npu节点显示npu

910 这两个命令分别是:
device-plugin-910-v{version}.yaml 对应:Atlas 训练系列产品或Atlas A2 训练系列产品上不使用MindCluster Volcano的配置文件。
device-plugin-volcano-v{version}.yaml对应:Atlas 训练系列产品或Atlas A2 训练系列产品上使用MindCluster Volcano的配置文件。
{device-plugin-name}:表示对应 软件版本yaml文件的前缀名,如上所述,v2.0.3.6版本之前为“ascendplugin”,后续版本为“device-plugin”。
{version}:表示镜像版本,需要和启动的yaml文件版本保持一致。

步骤截图 8

  • 服务成功后会显示当前有 GPU 信息

步骤截图 9

4.训练服务分配算力
# 使服务可以挂载卡,挂载成功后可以在容器内跑命令查看
npu-smi info 

requests:
  huawei.com/Ascend910: 1        # 修改为910,这里模型使用1卡
limits:
  huawei.com/Ascend910: 1        # 修改为910,这里模型使用1卡

volumeMounts:  # 容器内路径
- name: slog
  mountPath: /usr/slog/
- name: driver                   # nerdctl手动挂载的驱动目录,docker可以依赖于docker runtime
  mountPath: /usr/local/Ascend/driver/
- name: npu                      # nerdctl手动挂载的驱动目录,docker可以依赖于docker runtime
  mountPath: /usr/local/bin/npu-smi
- name: sbin
  mountPath: /usr/local/sbin/npu-smi
- name: dcmi
  mountPath: /usr/local/dcmi
- name: shm                      # 设置shm
  mountPath: /dev/shm

volumes:  # 宿主机路径
- name: slog
  hostPath:

四、部署过程中问题说明

1. 遇到了无法网关获取IP的问题 找了很久都没解决 社区也没 k8s 相关案例,如果有 GO 代码基础建议拉源代码分析问题
# 查看服务日志 
k logs -nkube-system ascend-device-plugin-daemonset-6vhtz 

[INFO]  2026/08/08 15:41:28.622135 230     common/common.go:695    update signal send, pod update
[INFO]  2026/08/08 15:41:29.080056 246     server/manager.go:536   Received update trigger, processing device info update
[WARN]  2026/08/08 15:41:36.083369 253     server/manager.go:521   get Ascend910-0 device ip failed, err: get device IP address failed, cardID(0), deviceID(0), error code: -8823
[WARN]  2026/08/08 15:41:36.085283 253     server/manager.go:521   get Ascend910-1 device ip failed, err: get device IP address failed, cardID(1), deviceID(0), error code: -8823
[WARN]  2026/08/08 15:41:36.087060 253     server/manager.go:521   get Ascend910-2 device ip failed, err: get device IP address failed, cardID(2), deviceID(0), error code: -8823
[WARN]  2026/08/08 15:41:36.090230 253     server/manager.go:521   get Ascend910-3 device ip failed, err: get device IP address failed, cardID(3), deviceID(0), error code: -8823
[WARN]  2026/08/08 15:41:36.093428 253     server/manager.go:521   get Ascend910-4 device ip failed, err: get device IP address failed, cardID(4), deviceID(0), error code: -8823
[WARN]  2026/08/08 15:41:36.095381 253     server/manager.go:521   get Ascend910-5 device ip failed, err: get device IP address failed, cardID(5), deviceID(0), error code: -8823
[WARN]  2026/08/08 15:41:36.098475 253     server/manager.go:521   get Ascend910-6 device ip failed, err: get device IP address failed, cardID(6), deviceID(0), error code: -8823
[WARN]  2026/08/08 15:41:36.101407 253     server/manager.go:521   get Ascend910-7 device ip failed, err: get device IP address failed, cardID(7), deviceID(0), error code: -8823
[INFO]  2026/08/08 15:41:42.650827 230     kubeclient/kube_cache.go:118    pod(monitoring/node-exporter-8rrkr) is update to cache
[INFO]  2026/08/08 15:41:42.650148 230     common/common.go:695    update signal send, pod update
[INFO]  2026/08/08 15:41:43.080078 246     server/manager.go:536   Received update trigger, processing device info update

# 设置该 RoCE 网卡的默认网关为 172.22.10.254 即解决问题
for i in {0..7}; do hccn_tool -i $i -gateway -s gateway 172.22.10.254; done
2.在目前的集群我还发下一个问题在同一个集群内 无法支持两个服务同时训练,这样会导致两个服务同时很慢但也查不出来原因是什么 也没有说明
  • docker 或 contained 版本下可以两个服务同时训练加上服务
3.NPU 分配的卡号是随机的每次服务重启都会变,服务要也是一样是设备的 ID 号

参考部分原文说明

原文链接:https://blog.csdn.net/qq_34518674/article/details/145637041

更多推荐