アナログ・テック 技術コラム

NPUや産業用PC、エッジコンピューティング、エッジAI、生成AIに関する技術情報や実装の考え方、最新トピックをアナログ・テックの視点で発信します。

【Hailo実装シリーズ】 エッジAIを本気で動かすための実践Tips <第3回>

Python APIで推論を実装する

— InferModel / VDevice とスケジューラ設計を整理する —

はじめに

前回は、HailoのTAPPASフレームワークの構造とGStreamerパイプラインの設計思想を整理しました。

TAPPASはGStreamerベースで推論を構成できる強力なフレームワークですが、すべてのアプリケーションが GStreamerベースで実装されるわけではありません。

実際の開発では、PythonやC++アプリケーションから直接推論を実行したいケースも多くあります。

そこで重要になるのが Hailo Runtime API(HailoRT) です。

本記事では以下を整理します。

  • InferModel の役割
  • VDevice の設計思想
  • 推論スケジューラの考え方

TAPPASとは異なるアプローチとして、アプリケーションからHailoを制御する方法を理解します。

1. Hailo Runtime APIの位置づけ

Hailo Runtime(HailoRT)は、アプリケーションからNPUを直接制御するためのランタイムライブラリです。

主な役割は以下です。

  • HEFモデルのロード
  • デバイス管理
  • 推論実行
  • ストリーム管理
  • スケジューリング

TAPPASがGStreamerエレメント中心の構造なのに対し、 HailoRTはアプリケーションAPI中心の設計になっています。

 

 

2. VDeviceとは何か

HailoRTの重要な概念が VDevice(Virtual Device) です。

VDeviceは複数のHailoデバイスを抽象化した仮想デバイスです。

主な役割:

  • 複数NPUの統合管理
  • 推論スケジューリング
  • リソース管理

単一デバイスの場合でも、通常はVDeviceを経由して推論を実行します。

Python APIの基本例


from hailo_platform import VDevice
with VDevice() as vdevice:
    print("VDevice initialized")

この構造により、将来的にデバイス数が増えてもアプリケーション側の設計を変更する必要がありません。

3. InferModelの役割

推論モデルの管理は InferModel が担当します。

HEFファイルを読み込み、推論実行の準備を行います。

基本的な流れ:

  1. VDevice生成
  2. HEFロード
  3. InferModel生成
  4. 推論実行

InferModel生成例


from hailo_platform import HEF, VDevice

hef = HEF("model.hef")

with VDevice() as target:
    infer_model = target.create_infer_model(hef)

InferModelは以下を管理します。

  • 入力ストリーム
  • 出力テンソル
  • バッチサイズ
  • スケジューリング

4. 推論実行の基本構造

推論は次の流れで実行されます。

  1. 入力バッファ作成
  2. 推論実行
  3. 出力テンソル取得

推論実行例


infer_model.configure()

bindings = infer_model.create_bindings()

infer_model.run(bindings)

この構造はCPU/GPU向け推論フレームワークとも類似しています。

ただしHailoでは、推論実行の管理は NPU内部スケジューラ が担当します。

5. スケジューラ設計の考え方

Hailoの推論実行は内部スケジューラによって管理されます。

重要なポイント:

  • 複数推論の並列管理
  • デバイス利用率の最適化
  • バッチ処理の調整

例えば複数カメラを扱う場合、 CPUでスレッド管理するよりもNPUスケジューラに任せた方が効率的なケースがあります。

つまり

CPU並列ではなく、NPUスケジューラを活用する

という設計思想です。

また、Python API(HailoRT)を利用することで、NPU側で推論を並列処理できるため、Python特有のGIL(Global Interpreter Lock)によるパフォーマンス低下を抑えた設計が可能になります。

6. TAPPASとの使い分け

ここで疑問になるのが TAPPASとPython APIの使い分けです。

用途 推奨
カメラ映像処理 TAPPAS
映像パイプライン GStreamer
アプリケーション制御 Python API
独自処理統合 HailoRT

つまり

映像処理 → TAPPAS
アプリケーション制御 → HailoRT

という分担になります。

まとめ

Hailo Python APIは、NPUをアプリケーションから直接制御するための仕組みです。

重要な要素:

  • VDeviceによるデバイス抽象化
  • InferModelによる推論管理
  • NPUスケジューラによる実行最適化

TAPPASのパイプライン構造と組み合わせることで、 柔軟なエッジAIシステムを構築できます。

本記事のシリーズ

シリーズを通して読むことで、 セットアップ → 推論設計 → アプリケーション実装 まで体系的に理解できます。

本記事の内容を検証するには

開発用途や設置環境に応じた構成相談も可能です。 お気軽にお問い合わせください。