Ultralytics YOLO27:
Get Started

Ultralytics YOLO 的 Huawei Ascend 集成#

要在 Huawei Ascend AI 处理器上部署计算机视觉模型,需要先将模型编译为由 Ascend AI Core 执行的 .om 离线模型格式。将 Ultralytics YOLO 模型导出到 Ascend 后,你可以在 Atlas 开发板和 OrangePi AIPro 设备上运行高速、低功耗推理,这些设备广泛用于机器人、工业检测和智能摄像头部署。

什么是 Huawei Ascend?#

Huawei Ascend 是一系列 AI 处理器,并配有 CANN(神经网络计算架构),这是 Huawei 的异构计算栈。CANN 提供 ATC(Ascend 张量编译器),这是一款主机端工具,可将标准 ONNX 图转换为针对 Ascend AI Core 硬件的 .om 离线模型。

由于 ATC 完全在主机上运行,因此你可以在普通的 x86-64 或 ARM64 Linux 机器上编译模型,无需连接任何 Ascend 硬件,然后将生成的 .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,因为只有该系列提供这两种检测头。

任务YOLOv8YOLO11YOLO26
检测✅✅✅
分割✅✅✅
语义分割❌❌✅
深度估计❌❌✅
分类✅✅✅
姿态✅✅✅
OBB✅✅✅

支持的设备#

使用 name 传入目标 SoC;ATC 会将其作为 --soc_version 写入 .om,因此必须与部署目标板匹配。在本地,你可以针对 CANN 安装中提供了算子内核的任何 SoC 进行编译。Ultralytics Platform 支持 Ascend310P1、Ascend310P3、Ascend310B1 和 Ascend310B4 目标。

name设备本地导出Platform
Ascend310P3Atlas 300I Pro、Atlas 300V Pro✅✅
Ascend310P1Atlas 300I✅✅
Ascend310B4OrangePi AIPro 8T、Atlas 200I A2(8 TOPS)✅✅
Ascend310B1OrangePi AIPro 20T、Atlas 200I A2(20 TOPS)✅✅

导出到 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 ultralytics

CANN 工具包由 Huawei 分发,不会自动安装。请从 Ascend 社区下载页面下载,或使用官方的 ascendai/cann 容器镜像,这些镜像包含 ATC 及其依赖项。

工具包必须与目标 SoC 匹配

ATC 只能针对已安装算子内核的 SoC 系列进行编译。如果工具包只包含 ascend310p 内核,那么在请求 Ascend310B4 目标时会因 No supported Ops kernel and engine are found for ... Conv2D 而失败。请为部署目标设备安装匹配的 Ascend-cann-kernels-<soc> 软件包。

用法#

Ascend 格式支持导出、预测和验证模式。推理和验证都在 Ascend 硬件上运行。导出模型后,加载导出的模型即可运行推理或验证其精度。

导出
from ultralytics import YOLO

# 加载 YOLO26 模型
model = YOLO("yolo26n.pt")

# 将模型导出为 Ascend 格式,以用于 Atlas 200I / OrangePi AIPro 开发板
model.export(format="ascend", name="Ascend310B4")

# 加载导出的 Ascend 模型并在设备上运行推理
ascend_model = YOLO("yolo26n_ascend_model")
results = ascend_model("https://ultralytics.com/images/bus.jpg")

导出参数#

参数类型默认值说明
formatstr'ascend'导出模型的目标格式,用于定义与 Ascend AI 处理器的兼容性。
namestr'Ascend310B4'传递给 ATC 的目标 SoC,例如 --soc_version,如 Ascend310P3。只要你的 CANN 安装包含该 SoC 所需的内核,该 SoC 就有效;请参阅支持的设备。目标 SoC 必须与你的部署设备匹配。
imgszint 或 tuple640模型输入所需的图像尺寸,该尺寸将作为静态形状固化到 .om 中。
batchint1编译到离线模型中的静态批次大小。
quantizeint16量化精度。Ascend 导出仅支持 FP16;如果未指定,系统会自动启用 16。此设置取代已弃用的 half/int8 标志。
opsetint17中间图的 ONNX opset 版本。上限为 17,这是 CANN ONNX 解析器支持的最高版本。
simplifyboolTrue使用 onnxslim 简化中间 ONNX 图。
nmsbool,可选None选择原始输出(None,默认)、嵌入式 NMS(True)或无 NMS 检测头(False)。
devicestrNone中间 ONNX 导出步骤所用的设备,默认为 CPU(device=cpu)。ATC 编译不会使用此设备。
为什么不支持 FP32?

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 运行时,以及封装了 CANN pyACL 绑定的 ais_bench Python 软件包。请从华为的 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 格式一样运行推理。

  1. 使用 Ultralytics 训练模式训练模型,或从预训练检查点开始。
  2. 在安装了 CANN 的任意 Linux 主机上将模型导出为 Ascend 格式,并传入与你的目标 SoC 匹配的 name。
  3. 将导出的模型目录复制到 Ascend 设备上。
  4. 使用 CANN 运行时和 ais_bench 在设备上部署并运行推理。

实际应用#

在 Ascend 硬件上运行的 YOLO 模型适用于各种嵌入式和工业视觉应用:

  • 工业自动化:在生产线上进行高速质量检测和缺陷检测。
  • 智能监控:在边缘网关上进行实时多摄像头目标检测,无需中央服务器。
  • 机器人:为自主移动机器人和协作机械臂提供板载感知能力。
  • 智慧城市:在低功耗路侧设备上进行交通监控和行人分析。

总结#

在本指南中,你了解了如何在华为 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 机器上也能完成编译。只有在导出的 .om 上运行推理时才需要 Ascend 硬件。

  • 你的 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 上的可用情况。

评论