Raspberry Pi 5 は、PCIe 経由で Rockchip RK1820 を外付け AI アクセラレータとして利用できます。 このプロジェクトでは、Pi 5 と RK1820 M.2 2242 モジュールを使い、ハードウェアの組み立てとドライバのインストールから、画像認識モデルの推論とローカルでのテキスト生成までを検証しました。
Pi 上で Linux、RKNN3 Runtime、テストプログラムを実行し、RK1820 がモデルの処理を担当します。Runtime 1.1.0、NPU 周波数 166 MHz で MobileNetV2 の推論と Qwen2.5-0.5B のテキスト生成を確認しました。
Rockchip の RK1820_RK1828 Raspberry Pi M.2 Quick Start V1.0.0 は、RK1820 と RK1828 の両方を説明しています。本プロジェクトで実機検証したのは RK1820 2242 です。 以下の結果は、すべての RK1828 モジュール、アダプタ、OS イメージの性能や互換性を保証するものではありません。
ハードウェアと検証環境
| 項目 | 検証した構成 |
|---|---|
| ホスト | Raspberry Pi 5 Model B Rev 1.1 |
| アクセラレータ | RK1820 M.2 2242、デバイスが報告するメモリ容量は 2560 MB |
| 接続 | PCIe FPC ケーブルと RK_EXT_PIHAT_RK182X アダプタ |
| PCIe リンク | 5.0 GT/s、x1 |
| OS | Debian 13.7 (trixie)、ARM64 |
| カーネル | 6.18.50+rpt-rpi-2712 |
| インストールパッケージ | rknn3-rk182x-m2-2242_1.1.0_arm64.deb |
| PCIe ドライバ | 3.3.1 |
| デバイスファームウェア / RKNN3 API | 1.1.0 / 1.1.0 |
| rknn-smi | 1.3.0 |
| NPU 周波数 | 166 MHz |
Pi とアクセラレータの両方を冷却してください。Rockchip のガイドは、Raspberry Pi 公式の 27W USB-C 電源、または同等の能力を持つ適切な電源を推奨しています。アダプタの入力要件と端子の表示を確認してください。充電器の合計出力だけでは適合性を判断できません。
1. ハードウェアの組み立てと電源接続
- モジュールや PCIe ケーブルを扱う前に電源を切り離します。
- RK1820 をアダプタの M.2 スロットに挿入し、対応するネジで固定します。
- PCIe FPC ケーブルで Pi 5 とアダプタを接続します。接点の向きを確認し、両端のラッチを閉じます。
- 電源を入れる前に冷却とすべての接続を確認します。
- ガイド記載の RK_EXT_PIHAT_RK182X アダプタでは、アダプタの USB-C 電源入力端子に電源を接続します。アダプタがシステム全体に給電します。Pi 本体の USB-C 端子だけに給電すると、アクセラレータに電力が供給されない場合があります。
アダプタに複数の USB-C 端子がある場合は、基板の表示や資料で電源入力を特定してから接続してください。
2. ドライバと Runtime のインストール
基板または SDK の提供元から、モジュールに対応する Debian パッケージを入手します。本プロジェクトでは 2242 パッケージを使用します。2280 モジュールには、提供元が適合を確認した対応パッケージを使用してください。
以下は Pi の Linux シェルで実行するコマンドです。PC から SSH 接続する際は、自分のユーザー名、アドレス、認証情報を使用してください。この手順は特定のデフォルトパスワードを前提にしていません。
mkdir -p ~/rk1820_rk1828
cd ~/rk1820_rk1828rknn3-rk182x-m2-2242_1.1.0_arm64.deb をこのディレクトリにコピーし、インストールします。
sudo apt update
sudo apt install -y ./rknn3-rk182x-m2-2242_1.1.0_arm64.debインストーラは PCIe ドライバをビルドし、ファームウェア、Runtime、デバイス管理ツール、テストプログラムを配置します。ドライバのビルドとパッケージの設定が正常に完了したことを確認してから再起動します。
sudo rebootDKMS などの依存パッケージを取得するため、Pi から設定済みの APT リポジトリにアクセスできる必要があります。依存パッケージの取得に失敗した場合、ローカルの .deb が見つかってもインストール完了とは限りません。接続の問題を解決し、再実行してください。ドライバのビルドには実行中のカーネルに対応するヘッダも必要です。ビルド失敗時は uname -r と /lib/modules/$(uname -r)/build を確認します。
3. デバイスの確認と対応周波数の選択
再起動して接続し直した後、実行します。
lspci -nn
ls -l /dev/pcie-rkep-* 2>/dev/null
sudo rknn-smi info
sudo rknn-smi -v
sudo rknn-smi info -t npu_freq今回の PCIe 列挙結果には次のデバイスが含まれていました。
0001:01:00.0 Processing accelerators [1200]: Rockchip Electronics Co., Ltd RK182x Edge AI Computing Coprocessor [1d87:182a] (rev 01)/dev/pcie-rkep-* ノードが存在し、rknn-smi info が RK1820、Online、OK を表示する必要があります。モデルをテストする前にドライバ、ファームウェア、API のバージョンを記録します。
今回の 2242 モジュールは 166、200、250、300 MHz に対応していました。初期検証には 166 MHz を使用しました。
sudo rknn-smi set -t npu_freq -d 0 -s 166
sudo rknn-smi info -t npu_freq実機の Available NPU Freq に表示される値から選んでください。2280 モジュール向けの 400 MHz の例を、この 2242 構成にそのまま適用しないでください。
デバイスが表示されない場合は、リンクとドライバを分けて確認します。
lsmod | grep rkep
sudo dmesg | grep -iE 'pcie|rkep|rknn' | tail -100初回セットアップ時はドライバがロードされていても、外部 PCIe リンクが link down を報告し、lspci に RK エンドポイントがなく、rknn-smi の初期化も失敗しました。後の確認では link up, 5.0 GT/s PCIe x1 と RK エンドポイントが表示されました。ドライバのロードだけではハードウェアリンクの動作は確認できません。ソフトウェアを何度も再インストールする前に、アダプタの給電と FPC 接続を確認してください。どの物理的な変更がリンクを復旧させたかは、今回の記録だけでは特定できません。
4. MobileNetV2 の実行
対応するモデルと重みのペアを配置します。
~/rk1820_rk1828/MobileNetV2/
├── mobilenetv2-12.rknn
└── mobilenetv2-12.weight今回は既存の RKNN3 モデルパッケージ内の rknn3_models/v1.0.0/cnn/MobilenetV2 にあるペアを再利用しました。このペアは Runtime 1.1.0 で推論に成功しましたが、すべての旧モデルが互換であることを意味しません。SDK 提供元から互換性のある変換済みモデルを入手するか、RKNN3 モデルダウンロード(アクセスコード:rknn)でファイル名と説明を確認してください。
Pi 上で実行します。
cd ~/rk1820_rk1828/MobileNetV2
sudo rknn3_model_test \
mobilenetv2-12.rknn \
mobilenetv2-12.weight \
0x1 '' '' 0 1今回の 1.1.0 テストツールでは、重みのパスの直後に core_mask を指定します。空の引数は入力ファイルと正解出力ファイルを省略し、0 は shape、1 は実行回数を指定します。ツールのバージョンが本プロジェクトや旧ガイドと異なる場合は、rknn3_model_test --help を確認してください。
成功時にはモデル初期化、All 1 loops completed successfully、平均モデル実行時間が表示されます。166 MHz でのある実測では、モデル実行時間が 11.343 ms、入力と出力の同期を含む 1 ループの合計が 12.249 ms でした。
このコマンドはランダム入力を使用し、正解出力との比較を省略します。検証するのは推論経路であり、分類精度ではありません。これらは単発の実測値で、継続的なスループットのベンチマークではありません。
5. Qwen2.5-0.5B でテキストを生成する
RKNN3 モデルダウンロード でアクセスコード rknn を入力し、次の場所に移動します。
RKNN3_SDK/rknn3_models/v1.1.0/llm/Qwen2.5-0.5B同じリリースの 4 ファイルを Pi の作業ディレクトリにコピーします。公式ファイル名は旧ガイドの -Instruct サフィックスを含まないため、そのまま保持してください。
~/rk1820_rk1828/Qwen2.5-0.5B/
├── Qwen2.5-0.5B.rknn
├── Qwen2.5-0.5B.weight
├── Qwen2.5-0.5B.tokenizer.gguf
└── Qwen2.5-0.5B.embed.bin合計サイズは約 632 MB(603 MiB)です。ダウンロードサイズと転送の完全性を確認し、旧モデルと別モデルの embedding ファイルを混在させないでください。
実行します。
cd ~/rk1820_rk1828/Qwen2.5-0.5B
sudo rknn3_session_test \
Qwen2.5-0.5B.rknn \
Qwen2.5-0.5B.weight \
Qwen2.5-0.5B.tokenizer.gguf \
Qwen2.5-0.5B.embed.bin \
2048 256 0xffこのモデルのコンテキスト構成は 2048 token なので、旧ガイドの 1024 ではなく 2048 を使用します。次の引数は新規生成を最大 256 token に制限し、最後がコアマスクです。
提供元のテストプログラムは内蔵の質問を自動実行し、質問を位置引数として受け取りません。元のテストには相対性理論について中国語と英語の質問があります。英語コミュニティ向けの録画では、ローカルプログラム内の中国語の質問だけを Explain the basic concepts of relativity. に変更し、バックアップを保持しました。モデルの実行にこの表示上の変更は不要です。未変更のプログラムでは中国語のテストが先に表示される場合があります。
読めるテキスト、性能統計、END TEST の表示を確認します。回答が 256 token より長い場合、新規 token の上限に達するのは想定どおりです。
| 確認項目 | 実測結果 |
|---|---|
| NPU 周波数 | 166 MHz |
| コンテキスト / 最大新規 token 数 | 2048 / 256 |
| 英語テスト 1 の生成 | 255 decode token、3820.02 ms、66.75 tokens/s |
| 英語テスト 2 の生成 | 255 decode token、3821.18 ms、66.73 tokens/s |
| プロセス終了コード | 0 |
| テスト後のデバイス | Online / OK |
生成速度はツールの Generate 統計です。prefill とモデル初期化を含まず、質問、生成設定、周波数、モデルリリースによって変動します。ツールは出力を 256 token と報告しますが、計測対象の Generate 段階では 255 token を数えています。上の表ではこの違いを維持しています。
このプロジェクトで確認できたこと
検証した Pi 5 + RK1820 構成では、RKNN3 Runtime による CNN 推論とローカルでの言語生成が動作しました。Pi が入力、処理の制御、ユーザーインターフェースを担当し、RK1820 がモデル推論を担当するアプリケーションの出発点にできます。長時間の安定性テストとアプリケーション固有の精度検証は、今回の初期検証とは別に実施する必要があります。