reComputer RK3576 で ASUS UGen300 USB AI アクセラレータを使用する

ASUS UGen300 は、Hailo-10H プロセッサを中心に構築され、8 GB の LPDDR4 メモリを搭載した USB AI アクセラレータです。このチュートリアルでは、reComputer RK3576 に接続し、バージョンが一致した ASUS USB ドライバと HailoRT をインストールし、必要に応じてデバイスのファームウェアを更新し、HailoRT がアクセラレータと通信できることを確認する方法を示します。

テスト構成

項目テスト構成
ホストreComputer RK3576 Dev Kit
オペレーティングシステムArmbian-unofficial 26.05.0-trunk、Debian 12(bookworm)
カーネル6.1.115-vendor-seeed-rk3576
ホストアーキテクチャAArch64(arm64
アクセラレータASUS UGen300 USB AI Accelerator、Hailo-10H、8 GB LPDDR4
USB デバイス ID0b05:1d6f
ネゴシエートされた USB リンクテストした RK3576 ポートで 5000M
USB ドライバhailort-usb-driver 5.3.0
ランタイムHailoRT 5.3.0
更新後のデバイスファームウェア5.3.0 (release,app)

ASUS の仕様では USB 3.1 Gen 2 Type-C インターフェース、最大リンク速度 10 Gbps とされています。テストした RK3576 との接続は lsusb -t の報告により 5 Gbps でネゴシエートされました。

アクセラレータの接続と確認

同梱ケーブルまたは他の USB 10 Gbps Type-C ケーブルを使用し、UGen300 を USB 3 ホストポートに直接接続します。

ホストがアクセラレータを認識できるか確認します:

bash
lsusb -d 0b05:1d6f

reComputer RK3576 上で ASUS UGen300 が検出されたことを示す端末

Hailo イメージがロードされる前は、新しく接続したデバイスが UGen300 USB Loader として表示されることがあります。ネゴシエートされたリンク速度も確認します:

bash
lsusb -t

UGen300 の USB トポロジとネゴシエートされたリンク速度を示す端末

テストした reComputer RK3576 では、UGen300 のブランチは 5000M と報告されました。480M のエントリは、接続が USB 2 にフォールバックしたことを意味します。

既存のアクセラレータソフトウェアの確認

ASUS のマニュアルでは、HailoRT の PCIe ドライバと USB ドライバを同時にインストールできない、また Hailo-8 と Hailo-10H のドライバは共存できないとされています。続行する前にインストール済みパッケージを確認します:

bash
dpkg -l | grep -Ei 'hailo|ugen'

UGen300 USB パッケージをインストールする前に、既存の Hailo PCIe または Hailo-8 ドライバを削除してください。切り替える意図がない限り、無関係なアクセラレータスタックを削除しないでください。

ASUS ドライバパッケージのダウンロードと検証

ASUS UGen300 サポートページで公開されている ARM64 USB ドライバパッケージをダウンロードします:

bash
mkdir -p ~/ugen300
cd ~/ugen300

curl -fL -o UGen300_USB_5.3.0_driver_Linux_arm64.zip \
  https://dlcdnets.asus.com/pub/ASUS/AI_ACCELERATION_DEVICE/Driver/UGen300_USB_5.3.0_driver_Linux_arm64.zip

展開する前にアーカイブを検証します。以下のチェックサムは、ASUS がバージョン 5.3.0 用に公開した SHA-256 値です:

bash
echo '6a98b46d8f88a7911fea142a8b3f4a69715f5166cc112e1352eba93f8a2bcbc4  UGen300_USB_5.3.0_driver_Linux_arm64.zip' \
  | sha256sum --check

アーカイブを展開します:

bash
unzip UGen300_USB_5.3.0_driver_Linux_arm64.zip
cd UGen300_USB_5.3.0_driver_Linux_arm64

アーカイブには、ARM64 HailoRT パッケージと、バージョンが一致したユーザー空間 USB ドライバが含まれています。USB パッケージには、デバイス起動時に使用される Hailo-10H イメージも含まれています。

USB ドライバと HailoRT のインストール

バージョンが一致した 2 つのパッケージを一緒にインストールします:

bash
sudo apt install ./hailort_5.3.0_arm64.deb \
  ./hailort-usb-driver_5.3.0_arm64.deb

USB ドライバは 0b05:1d6f の udev ルールをインストールします。Loader モードの UGen300 が検出されると、このルールが Hailo USB イメージローダーを起動し、デバイスは再列挙されます。

インストールされたバージョンを確認します:

bash
dpkg-query -W hailort hailort-usb-driver
hailortcli --version

インストールされた HailoRT と UGen300 USB ドライバのバージョンを示す端末

HailoRT CLI のバージョンを示す端末

デバイスファームウェアを HailoRT に合わせる

USB デバイスをスキャンし、ファームウェアを照会します:

bash
hailortcli scan
hailortcli fw-control identify

identify がファームウェアの非互換を報告し、明示的に hailo_usb_loader fw-update を要求した場合は、インストール済み USB ドライバに付属のイメージで UGen300 のフラッシュを更新します:

bash
sudo hailo_usb_loader fw-update

テストしたデバイスでは更新に約 2 分かかりました。RK3576 の電源を入れたまま、ケーブルを接続したままにし、ツールが更新の成功を報告するまで待ちます。

この処理中に UGen300 は切断され、再列挙されます。コマンド終了後に戻らない場合は、取り外して USB ホストポートに直接再接続し、udev イメージローダーの完了を待ちます。

実行中のデバイスの確認

最終的な USB 状態とリンク速度を確認します:

bash
lsusb -d 0b05:1d6f
lsusb -t

更新とイメージロードの成功後、テストしたユニットは UGen300 USB Loader ではなく UGen300 USB AI Accelerator (Hailo-10H) として表示されました。

HailoRT との通信を確認します:

bash
hailortcli scan
hailortcli fw-control identify

UGen300 のスキャン結果、ファームウェアバージョン、Hailo-10H アーキテクチャを示す端末

テストしたシステムでは、最終識別結果は HailoRT ファームウェア 5.3.0 (release,app)、デバイスアーキテクチャ HAILO10H と報告されました。

HEF モデルを実行する

Hailo Model Zoo から Hailo-10H 向けにコンパイルされた YOLOv8n HEF をダウンロードします:

bash
mkdir -p ~/ugen300/models
cd ~/ugen300/models

curl -fL -o yolov8n.hef \
  https://hailo-model-zoo.s3.amazonaws.com/ModelZoo/Compiled/v5.3.0/hailo10h/yolov8n.hef

ダウンロードした HEF が Hailo-10H と互換性があることを確認し、5 秒間実行します:

bash
hailortcli parse-hef yolov8n.hef
hailortcli run2 -t 5 set-net yolov8n.hef

パーサーは HEF Compatible for: HAILO15H, HAILO10H と報告するはずです。完了した run2 コマンドは測定 FPS を出力し、モデルがアクセラレータ上で実行されたことを確認します。HailoRT 5.3.0 はこのデバイスタイプで古い hailortcli run コマンドをサポートしていません。

トラブルシューティング

  • lsusb0b05:1d6f が表示されない:アクセラレータをホストに直接再接続し、ケーブルとポートを確認し、sudo dmesg | tail -n 50 で最近の USB イベントを確認します。
  • デバイスが UGen300 USB Loader のまま:journalctl -t hailo-usb --no-pager でローダーのメッセージを確認します。HailoRT がファームウェアの不一致を報告した場合は、上記のファームウェア更新コマンドを実行します。
  • hailortcli scan は USB パスを見つけるが identify が非互換ファームウェアを報告する:ドライバと HailoRT を同じバージョンに保ち、ASUS 文書化のファームウェア更新を実行します。
  • lsusb -t480M が現れる:デバイスが USB 2 速度でネゴシエートしました。USB 3 ポートと必要なリンク速度に対応したケーブルを使用してください。
  • run2 中に HAILO_LIBUSB_FAILURE または HAILO_COMMUNICATION_CLOSED が現れる:アクセラレータが負荷下で切断されました。USB 3 ホストポートに直接再接続し、USB-C ケーブルと電力供給を確認し、再試行前に hailortcli fw-control identify を実行します。
  • 以前にインストールされた Hailo PCIe または Hailo-8 スタックが存在する:UGen300 USB ドライバをインストールする前に、競合する Hailo ドライバを削除します。

UGen300 ソフトウェアの削除

USB ドライバと HailoRT パッケージを削除します:

bash
sudo dpkg --purge hailort-usb-driver hailort
sudo udevadm control --reload-rules

参考資料