Huawei Ascend 与 Ultralytics YOLO 的集成#
在 Huawei Ascend AI 处理器上部署计算机视觉模型,需要将其编译为由 Ascend AI Core 执行的 .om 离线模型格式。将 Ultralytics YOLO 模型导出到 Ascend 后,你可以在广泛用于机器人、工业检测和智能相机部署的 Atlas 开发板与 OrangePi AIPro 设备上运行快速、低功耗的推理。
什么是 Huawei Ascend?#
Huawei Ascend 是一系列 AI 处理器,与 CANN(神经网络计算架构)配套使用;CANN 是 Huawei 的异构计算栈。CANN 提供 ATC(Ascend 张量编译器),这是一种主机端工具,可将标准 ONNX 图转换为面向 Ascend AI Core 的硬件专用 .om 离线模型。
由于 ATC 完全在主机上运行,你可以在未连接任何 Ascend 硬件的常规 x86-64 或 ARM64 Linux 机器上编译模型,然后将生成的 .om 复制到目标设备上进行推理。
在 Ascend NPU 上训练#
Ultralytics 支持使用 torch_npu 进行单 NPU 和多 NPU 训练,包括 AMP、验证、检查点保存、断点续训和
AutoBatch。使用 device=npu:0 选择一个 NPU,或使用 device=npu:0,1 选择多个 NPU;分布式训练使用 HCCL。
先安装兼容的 CANN、PyTorch 和 torch_npu 版本,并先加载 CANN 环境。有关安装和使用示例,请参阅 Ascend NPU 训练部分。
Ascend 导出格式#
Ultralytics 导出器首先写入中间 ONNX 图,然后调用 ATC,使用 name 参数针对你指定的 SoC 进行编译。结果是一个自包含的模型目录,其中包含 .om 二进制文件及其 Ultralytics 元数据。
Ascend 模型的主要特性#
- 专用 AI Core:编译后的模型在 Ascend AI Core 上执行,而不是在主机 CPU 上执行,从而为实时相机处理流水线提供显著更高的吞吐量。
- 主机端编译:ATC 无需连接 NPU,因此导出可以在 CI、容器或笔记本电脑中运行。
- ONNX 优先:标准的 Ultralytics ONNX 导出 可直接接入 CANN 工具链,无需专有的中间格式。
- 静态形状:输入形状会在编译时写入
.om,从而消除运行时形状协商的开销。 - 多设备目标:只需更改
name,同一个 ONNX 图即可针对任何受支持的 SoC 进行编译。
支持的任务#
Huawei Ascend 导出支持全部七种 Ultralytics 任务。语义分割和深度估计仅在 YOLO26 中可用,YOLO26 是唯一提供这些检测头的系列。
支持的设备#
使用 name 传入目标 SoC;ATC 会将其写入 .om 中,值为 --soc_version,因此它必须与部署目标板匹配。在本地,你可以针对 CANN 安装提供内核的任何 SoC 进行编译。Ultralytics Platform 支持 Ascend310P1、Ascend310P3、Ascend310B1 和 Ascend310B4 目标。
name | 设备 | 本地导出 | 平台 |
|---|---|---|---|
Ascend310P3 | Atlas 300I Pro、Atlas 300V Pro | ✅ | ✅ |
Ascend310P1 | Atlas 300I | ✅ | ✅ |
Ascend310B4 | OrangePi AIPro 20T、Atlas 200I A2 | ✅ | ✅ |
Ascend310B1 | OrangePi AIPro 8T | ✅ | ✅ |
导出到 Ascend:转换你的 YOLO 模型#
Ascend 导出需要 CANN 工具包,而该工具包仅支持 Linux。atc 编译器必须位于你的 PATH 中——请在导出前加载 CANN 环境脚本,例如 source /usr/local/Ascend/ascend-toolkit/set_env.sh。
安装#
安装 Ultralytics,然后从 Huawei 单独安装 CANN。
# Install the required package for YOLO
pip install ultralyticsCANN 工具包由 Huawei 提供,不会自动安装。你可以从 Ascend 社区下载页面 下载,或使用官方的 ascendai/cann 容器镜像,这些镜像已包含 ATC 及其依赖项。
ATC 只能针对已安装算子内核的 SoC 系列进行编译。仅包含 ascend310p 内核的工具包在请求 Ascend310B4 目标时,会因 No supported Ops kernel and engine are found for ... Conv2D 而失败。请为要部署到的设备安装匹配的 Ascend-cann-kernels-<soc> 软件包。
使用方法#
Ascend 格式支持 导出、预测 和 验证 模式。推理和验证在 Ascend 硬件上运行。导出模型,然后加载导出的模型以运行推理或验证其准确率。
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to Ascend format for an Atlas 200I / OrangePi AIPro board
model.export(format="ascend", name="Ascend310B4")
# Load the exported Ascend model and run inference on the device
ascend_model = YOLO("yolo26n_ascend_model")
results = ascend_model("https://ultralytics.com/images/bus.jpg")导出参数#
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
format | str | 'ascend' | 导出模型的目标格式,用于定义与 Ascend AI 处理器的兼容性。 |
name | str | 'Ascend310B4' | 传递给 ATC 的目标 SoC,形式为 --soc_version,例如 Ascend310P3。你的 CANN 安装包含内核的任何 SoC 都有效;请参阅支持的设备。必须与部署设备匹配。 |
imgsz | int 或 tuple | 640 | 模型输入所需的图像大小,会作为静态形状写入 .om。 |
batch | int | 1 | 编译到离线模型中的静态批次大小。 |
quantize | int | 16 | 量化精度。Ascend 导出仅支持 FP16;如果未指定,系统会自动启用 16。它取代已弃用的 half/int8 标志。 |
opset | int | 17 | 中间图的 ONNX opset。上限为 17,这是 CANN ONNX 解析器接受的最高版本。 |
simplify | bool | True | 使用 onnxslim 简化中间 ONNX 图。 |
nms | bool | False | 为支持的检测、分割、姿态和 OBB 模型添加非极大值抑制。 |
Ascend AI Core 的卷积仅接受 DT_FLOAT16 和 DT_INT8 输入,因此 FP32 离线模型无法在硬件上执行。请求 quantize=32 时会引发错误,而不是默默生成一个无法运行的模型。
如需详细了解导出流程,请访问 Ultralytics 导出文档页面。
输出结构#
导出成功后,会创建一个包含以下结构的模型目录:
yolo26n_ascend_model/
├── yolo26n_Ascend310B4.om # Compiled Ascend offline model (AI Core executable)
└── metadata.yaml # Model metadata (classes, image size, task, etc.).om 文件是 CANN 运行时在设备上加载的已编译离线模型。其名称包含目标 SoC,因此该工件可自描述;每个目录中只保留一个 .om,因为加载器会选择其中找到的单个模型。metadata.yaml 包含类别名称、图像大小以及 Ultralytics 推理流水线所需的其他信息。
部署导出的 YOLO Ascend 模型#
成功将 Ultralytics YOLO 模型导出为 Ascend 格式后,下一步是在 Ascend 硬件上部署它。
安装运行时#
推理需要设备上的 CANN 运行时以及 ais_bench Python 软件包,该软件包封装了 CANN 的 pyACL 绑定。请从 Huawei Ascend 工具仓库构建并安装它:
# On the Ascend device, with CANN installed and sourced
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# Build and install the ais_bench inference wheel
git clone https://gitee.com/ascend/tools.git
cd tools/ais-bench_workload/tool/ais_bench
pip3 wheel ./backend -v
pip3 install ./aclruntime-*.whl
pip3 wheel ./ -v
pip3 install ./ais_bench-*.whl将导出的 yolo26n_ascend_model 目录复制到设备上,然后像使用其他 Ultralytics 格式一样运行推理。
推荐工作流#
- 使用 Ultralytics 训练模式训练你的模型,或从预训练检查点开始。
- 在安装了 CANN 的任意 Linux 主机上将模型导出到 Ascend,并传入与你的目标 SoC 匹配的
name。 - 将导出的模型目录复制到 Ascend 设备。
- 使用 CANN 运行时和
ais_bench进行部署,以在设备上运行推理。
实际应用#
在 Ascend 硬件上运行的 YOLO 模型适用于广泛的嵌入式和工业视觉应用:
- 工业自动化:生产线上的高速质量检测和缺陷检测。
- 智能监控:在边缘网关上进行实时多相机目标检测,无需中央服务器。
- 机器人:为自主移动机器人和协作机械臂提供机载感知。
- 智慧城市:在低功耗路侧单元上进行交通监控和行人分析。
总结#
在本指南中,你已了解如何在 Huawei Ascend NPU 上训练 Ultralytics YOLO,以及如何使用 CANN ATC 编译器将模型导出为 Ascend .om 格式。导出完全在主机上运行,会生成自包含的模型目录,并通过单个 name 参数将模型定位到任何受支持的 Ascend SoC。
如需了解更多使用详情,请访问 官方 CANN 文档。
此外,如果你想进一步了解其他 Ultralytics YOLO 集成,请访问我们的集成指南页面,获取大量实用资源。
常见问题#
安装 Ultralytics 和 CANN 工具包,加载 CANN 环境以确保
atc位于你的PATH中,然后在 Python 中使用model.export(format="ascend", name="Ascend310B4")导出,或通过 CLI 使用yolo export model=yolo26n.pt format=ascend name=Ascend310B4导出。将name设置为部署设备的 SoC。不需要。ATC 编译器完全在主机上运行,因此在未连接 NPU 的标准 x86-64 或 ARM64 Linux 机器上即可完成编译。你只需要 Ascend 硬件来运行导出的
.om推理。你的 CANN 安装不包含所请求 SoC 的算子内核。每个工具包都为特定 SoC 系列捆绑内核,因此请安装与你的目标匹配的
Ascend-cann-kernels-<soc>软件包,或使用针对该设备系列构建的容器镜像。Ascend AI Core 卷积仅接受
DT_FLOAT16和DT_INT8张量。FP32 离线模型无法在硬件上执行,因此导出器会使用--precision_mode=force_fp16进行编译,并拒绝显式的quantize=32请求。你的已安装 CANN 工具包提供内核的任何 SoC,都可以通过
name参数进行选择。请参阅支持的设备,了解四个经过验证的目标及其在 Ultralytics Platform 上的可用性。