Ultralytics YOLO向けHuawei Ascend統合#
Huawei Ascend AIプロセッサーにコンピュータービジョンモデルをデプロイするには、Ascend AI Coreで実行される.omオフラインモデル形式にコンパイルする必要があります。Ultralytics YOLOモデルをAscendにエクスポートすると、ロボティクス、産業検査、スマートカメラの各種デプロイで使用されるAtlas開発ボードやOrangePi AIProデバイス上で、高速かつ低消費電力の推論を実行できます。
Huawei Ascendとは何ですか?#
Huawei Ascendは、CANN(ニューラルネットワーク向けコンピューティングアーキテクチャ)と組み合わせて使用するAIプロセッサー製品群です。CANNにはATC(Ascend Tensor Compiler)が含まれており、ホスト側で標準的なONNXグラフを、Ascend AI Coreを対象とするハードウェア固有の.omオフラインモデルに変換します。
ATCはホスト上で完全に動作するため、Ascendハードウェアを接続していない通常のx86-64またはARM64 Linuxマシンでモデルをコンパイルし、生成された.omをターゲットデバイスにコピーして推論を実行できます。
Ascend NPUでのトレーニング#
Ultralyticsは、torch_npuを使用した単一NPUおよびマルチNPUトレーニングをサポートしており、AMP、検証、チェックポイント保存、再開、AutoBatchに対応しています。device=npu:0で1つのNPUを、device=npu:0,1で複数のNPUを選択できます。分散トレーニングにはHCCLを使用します。
互換性のあるCANN、PyTorch、torch_npuのバージョンをインストールし、最初にCANN環境をsourceしてください。インストールおよび使用例については、Ascend NPUトレーニングのセクションをご覧ください。
Ascendエクスポート形式#
Ultralyticsのエクスポーターは、まず中間ONNXグラフを書き出し、次にname引数で指定した対象SoC向けにATCを呼び出してコンパイルします。結果として、.omバイナリとUltralyticsのメタデータを格納した自己完結型のモデルディレクトリが生成されます。
Ascendモデルの主な機能#
- 専用AI Core: コンパイル済みモデルはホストCPUではなくAscend AI Core上で実行されるため、リアルタイムカメラパイプラインで大幅に高いスループットを実現します。
- ホスト側コンパイル: ATCの実行にNPUの接続は不要なため、CI、コンテナ、またはラップトップ上でエクスポートできます。
- ONNXファースト: 標準のUltralytics ONNXエクスポートを、独自の中間形式なしでCANNツールチェーンに直接渡せます。
- 静的シェイプ: 入力シェイプはコンパイル時に
.omへ組み込まれるため、実行時のシェイプネゴシエーションに伴うオーバーヘッドをなくせます。 - マルチデバイス対応:
nameを変更することで、同じONNXグラフをサポート対象の任意のSoC向けにコンパイルできます。
サポートされるタスク#
Huawei Ascendへのエクスポートは、Ultralyticsの7つすべてのタスクをサポートします。セマンティックセグメンテーションと深度推定は、これらのヘッドを搭載する唯一のファミリーであるYOLO26でのみ利用できます。
サポート対象デバイス#
nameで対象SoCを渡すと、ATCはそれを.omに--soc_versionとして組み込むため、デプロイ先のボードと一致している必要があります。ローカルでは、CANNインストールでカーネルが提供されている任意のSoC向けにコンパイルできます。Ultralytics Platformは、Ascend310P1、Ascend310P3、Ascend310B1、Ascend310B4のターゲットをサポートしています。
name | デバイス | ローカルエクスポート | Platform |
|---|---|---|---|
Ascend310P3 | Atlas 300I Pro、Atlas 300V Pro | ✅ | ✅ |
Ascend310P1 | Atlas 300I | ✅ | ✅ |
Ascend310B4 | OrangePi AIPro 20T、Atlas 200I A2 | ✅ | ✅ |
Ascend310B1 | OrangePi AIPro 8T | ✅ | ✅ |
Ascendへのエクスポート: YOLOモデルの変換#
Ascendへのエクスポートには、Linux専用のCANNツールキットが必要です。atcコンパイラーがPATH上に存在している必要があります。エクスポートの前にCANN環境スクリプトをsourceしてください。例: source /usr/local/Ascend/ascend-toolkit/set_env.sh
インストール#
Ultralyticsをインストールしてから、HuaweiからCANNを別途インストールしてください。
# Install the required package for YOLO
pip install ultralyticsCANNツールキットはHuaweiによって配布され、自動的にはインストールされません。Ascendコミュニティのダウンロードページからダウンロードするか、ATCとその依存関係を含む公式のascendai/cannコンテナイメージを使用してください。
ATCは、オペレーターカーネルがインストールされているSoCファミリー向けにのみコンパイルできます。ascend310pカーネルのみを含むツールキットでは、Ascend310B4ターゲットを指定したときにNo supported Ops kernel and engine are found for ... Conv2Dで失敗します。デプロイ先のデバイスに対応するAscend-cann-kernels-<soc>パッケージをインストールしてください。
使用方法#
Ascend形式は、Export、Predict、Validateモードをサポートします。推論と検証は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' | --soc_versionとしてATCに渡すターゲットSoCです。例: Ascend310P3。CANNのインストール環境にカーネルが存在する任意のSoCを指定できます。詳しくはサポート対象デバイスをご覧ください。デプロイ先デバイスと一致している必要があります。 |
imgsz | intまたはtuple | 640 | モデル入力に使用する目的の画像サイズで、静的シェイプとして.omに組み込まれます。 |
batch | int | 1 | オフラインモデルにコンパイルされる静的バッチサイズです。 |
quantize | int | 16 | 量子化の精度です。AscendへのエクスポートはFP16のみをサポートし、指定されていない場合は16を自動的に有効にします。非推奨のhalf/int8フラグを置き換えます。 |
opset | int | 17 | 中間グラフのONNX opsetです。CANNのONNXパーサーが受け付ける最高バージョンである17が上限です。 |
simplify | bool | True | onnxslimを使用して中間ONNXグラフを簡略化します。 |
nms | bool | False | サポート対象の検出、セグメンテーション、ポーズ、OBBモデルにNon-Maximum Suppressionを追加します。 |
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が含まれているため、アーティファクトの内容を単独で識別できます。ローダーはそのディレクトリ内で見つかった単一のモデルを選択するため、1つのディレクトリには.omを1つだけ保持してください。metadata.yamlには、Ultralyticsの推論パイプラインで使用されるクラス名、画像サイズ、その他の情報が含まれます。
エクスポート済みYOLO Ascendモデルのデプロイ#
Ultralytics YOLOモデルをAscend形式へ正常にエクスポートしたら、次はAscendハードウェアにデプロイします。
ランタイムのインストール#
推論には、デバイス上のCANNランタイムと、CANNのpyACLバインディングをラップするais_bench Pythonパッケージが必要です。HuaweiのAscend toolsリポジトリからビルドしてインストールしてください。
# 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のTrain Modeを使用してモデルをトレーニングするか、事前トレーニング済みチェックポイントから開始します。
- ターゲットSoCに対応する
nameを指定し、CANNをインストールした任意のLinuxホスト上でAscend向けにエクスポートします。 - エクスポート済みモデルのディレクトリをAscendデバイスにコピーします。
- CANNランタイムと
ais_benchを使用してデプロイし、デバイス上で推論を実行します。
実世界での用途#
Ascendハードウェア上で実行するYOLOモデルは、幅広い組み込みビジョンおよび産業用ビジョンアプリケーションに適しています。
- 産業オートメーション: 生産ラインでの高速な品質検査と欠陥検出。
- スマート監視: 中央サーバーを使用せず、エッジゲートウェイ上でリアルタイムに複数カメラの物体検出を実行します。
- ロボティクス: 自律移動ロボットや協働アーム向けのオンボード認識。
- スマートシティ: 低消費電力の路側ユニット上で交通監視と歩行者分析を実行します。
まとめ#
このガイドでは、Huawei Ascend NPU上でUltralytics YOLOをトレーニングし、CANN ATCコンパイラーを使用してモデルをAscendの.om形式へエクスポートする方法を学びました。エクスポートはホスト上で完全に実行され、自己完結型のモデルディレクトリを生成します。また、単一のname引数を通じて、サポート対象の任意のAscend SoCをターゲットにできます。
使用方法の詳細については、公式CANNドキュメントをご覧ください。
また、その他のUltralytics YOLO統合について詳しく知りたい場合は、統合ガイドページで役立つリソースをご確認ください。
FAQ#
UltralyticsとCANNツールキットをインストールし、CANN環境をsourceして
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引数で選択できます。検証済みの4つのターゲットとUltralytics Platformでの提供状況については、サポート対象デバイスをご覧ください。