reComputer RK3576 で DEEPX DX-M1 M.2 アクセラレータを使用する

DEEPX DX-M1 は、3 個の NPU コアとオンボード LPDDR5 メモリを備えた M.2 PCIe AI アクセラレータです。このチュートリアルでは、reComputer RK3576 でカードを検出し、搭載ファームウェアに適合する Runtime をビルドし、Runtime の初期化と NPU の状態を確認します。

このガイドで使用するカードのファームウェアは v1.6.0 で、DX-RT v2.6.0 と組み合わせて使用します。

システム構成

項目構成
ホストreComputer RK3576 Dev Kit
OSArmbian unofficial 26.05.0-trunk、Debian 12(bookworm)
カーネル6.1.115-vendor-seeed-rk3576
アクセラレータDEEPX DX-M1A M.2、4 GB クラス LPDDR5
PCIe デバイス1ff4:0001
ネゴシエートされたリンクPCIe Gen2 x1
NPU ドライバdxrt-driver-dkms 2.4.1-2
カードファームウェアv1.6.0
RuntimeDEEPX のソースタグからビルドした DX-RT v2.6.0

PCIe ドライバをインストールする

DEEPX ソフトウェアダウンロードページから AArch64 Linux 用 DX-All-Suite v2.4.2 をダウンロードし、RK3576 にコピーします。アーカイブを展開して dx-runtime ディレクトリに移動します。

bash
tar -xzf dx-all-suite_v2.4.2.tar.gz
cd dx-all-suite/dx-runtime

上記の構成に合うドライバを選択してインストールします。この手順では PCIe ドライバのみをインストールし、カードのファームウェアは変更しません。

bash
ln -sfn 2.4.1 dx_rt_npu_linux_driver/release/latest
./install.sh --target=dx_rt_npu_linux_driver --exclude-fw
sudo reboot

再起動後、次のハードウェア確認に進みます。互換性のある DX-RT ユーザー空間ライブラリは、現在のスイートからインストールせず、後の手順で個別にビルドします。

ハードウェアとドライバを確認する

DX-M1 を M.2 PCIe スロットに装着して RK3576 を起動し、PCIe デバイスを確認します。

bash
lspci -nnk -s 01:00.0

端末に表示された DX-M1 PCIe デバイスとドライバ

ドライバが作成したデバイスノードを確認します。

bash
ls -l /dev/dxrt0

端末に表示された DX-M1 デバイスノード

/dev/dxrt0 があれば、PCIe ドライバがアクセラレータを初期化しています。存在しない場合は、DX-RT をビルドまたは実行する前にドライバを修正してください。

互換性のある DX-RT をビルドする

DX-RT v3.3.0 はファームウェア v2.5.2 以降を必要とするため、ファームウェア v1.6.0 のカードを初期化できません。DX-RT v2.6.0 の最低要件はファームウェア v1.5.9 であり、このカードと互換性があります。

ビルドツールをインストールします。

bash
sudo apt-get update
sudo apt-get install -y build-essential cmake ninja-build python3-dev git

正確な DX-RT タグをクローンします。CMake は pybind11 v2.12 を要求するため、先に浅いクローンを作成します。

bash
cd ~
git clone --branch v2.6.0 --depth 1 https://github.com/DEEPX-AI/dx_rt.git
cd dx_rt
git clone --depth 1 --branch v2.12 https://github.com/pybind/pybind11.git extern/pybind11

RK3576 の AArch64 CPU 向けに設定してビルドします。

bash
cmake -S . -B build_aarch64 -G Ninja \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain.aarch64.cmake \
  -DCMAKE_INSTALL_PREFIX=/usr/local \
  -DPython_EXECUTABLE="$(command -v python3)"
cmake --build build_aarch64 --parallel 4

このコマンドはシステムの DX-RT インストールを変更しません。最初の確認では、ビルドディレクトリのバイナリと共有ライブラリを直接使用します。

bash
export LD_LIBRARY_PATH="$HOME/dx_rt/build_aarch64/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
$HOME/dx_rt/build_aarch64/bin/dxrt-cli -s

端末に表示された DX-RT と DX-M1 の状態

Runtime サービスを確認する

ビルドしたサービスを起動する前に、互換性のない DX-RT サービスを停止します。次のコマンドは 20 秒後に自動終了し、systemd ユニットをインストールしません。

bash
sudo systemctl stop dxrt
timeout --signal=TERM 20s "$HOME/dx_rt/build_aarch64/bin/dxrtd"

初期化に成功すると次のメッセージが表示されます。

text
[DXRT_SVC][DxrtService] Initialized Devices count=1
[DXRT_SVC][DxrtService] Initialized Scheduler
[DXRT_IPC][DxrtService] Initialized IPC Server

これらのメッセージが表示されれば、Runtime はドライバを開いて DX-M1 を初期化できています。

NPU の状態を監視する

DX-RT v2.6.0 の dxrt-cli には監視モードがあります。次のコマンドは 1 秒ごとに状態を取得し、3 秒後に終了します。

bash
timeout --signal=INT 3s "$HOME/dx_rt/build_aarch64/bin/dxrt-cli" -m 1

端末に表示された DX-M1 NPU 状態監視

監視画面には、3 個の NPU コアの電圧、クロック、温度、DVFS 状態が表示されます。

Model Zoo をインストールする(任意)

利用可能なモデルを参照するには、展開済みの DX-All-Suite ディレクトリから Model Zoo パッケージと Python 依存関係をインストールします。

bash
sudo apt-get install -y python3-venv
cd ~/dx-all-suite/dx-modelzoo
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .
dxmz list
dxmz info resnet50_224x224

DXNN モデルは、生成に使用された DX-COM と DX-RT のバージョンに依存します。モデルを実行する前に、DEEPX Model Zoo ページでモデル、Runtime、ファームウェアの互換性を確認してください。このガイドでは DX-RT v2.6.0 とファームウェア v1.6.0 を使用します。

トラブルシューティング

  • lspci1ff4:0001 がない:電源を切って M.2 モジュールを取り付け直し、M.2 PCIe スロットとボード設定を確認します。
  • /dev/dxrt0 がない:dx_dma_pcie ドライバのロード状態と対応バージョンを確認します。
  • ファームウェア v1.6.0 で DX-RT 3.x の初期化に失敗する:検証済みの v2.6.0 を使用するか、正確なモジュール revision に対して DEEPX が提供する移行手順だけを使用します。
  • dxtop が未定義シンボルまたは互換性のないサービスを報告する:別世代の DX-RT 用です。上記の v2.6.0 dxrt-cli -m 1 を使用するか、バージョンが一致したツール一式を導入します。

参考資料