reComputer RK3576 モジュール開発キットのアプリケーション
最終更新:
アプリケーション
RK1820 を使用したローカル LLM および VLM の実行
RK1820 はモデル性能テストだけでなく、rkllm3-server を介して reComputer RK3576 上でローカル LLM(大規模言語モデル)や VLM(視覚言語モデル)をデプロイし、OpenAI 互換 API を通じてローカル AI アプリケーションを構築するためにも使用できます。
本例では以下を行います:
-
Qwen3.5-0.8B を使用してローカル LLM チャットサービスを構築する
-
Qwen2.5-VL-3B_prune を使用してローカル画像理解サービスを構築する
rkllm3-server は RKNPU3 に基づいており、OpenAI 互換の Chat API を通じて LLM 推論を提供します。Python アプリケーション、Web UI、その他の AI エージェントフレームワークに統合可能です。
前提条件
このチュートリアルを開始する前に、RK1820 のインストールと RKNN3 Runtime の設定を完了し、以下を確認してください:
Plainrknn-smi info -lRK1820 が正常に認識されていること。
ローカル LLM の実行
本例では Qwen3.5-0.8B を使用します。
モデルディレクトリには以下のファイルが含まれています:
Qwen2.5-VL-3B_prune/
├── Qwen2.5-VL-3B_prune.embed.bin
├── Qwen2.5-VL-3B_prune.tokenizer.gguf
├── llm_Qwen2.5-VL-3B_prune.rknn
├── llm_Qwen2.5-VL-3B_prune.weight
├── vision_Qwen2.5-VL-3B_prune.rknn
└── vision_Qwen2.5-VL-3B_prune.weightモデルディレクトリに移動します:
cd ~/Downloads/Qwen3.5-0.8Bローカル LLM サーバーの起動
以下を実行します:
rkllm3-server \
-m Qwen3.5-0.8B.rknn \
--weight Qwen3.5-0.8B.weight \
--vocab Qwen3.5-0.8B.tokenizer.gguf \
--embed Qwen3.5-0.8B.embed.bin \
--host 0.0.0.0 \
--port 8080 \
-c 1024 \
--n_predict 256 \
--core-mask 0xff \
--repeat-penalty 1.1 \
--presence-penalty 1.0 \
--frequency-penalty 1.0 \
--top-k 1 \
--top-p 0.8 \
--temp 0.8サーバーは以下をサポートしています:
Rockchip 公式の rkllm3-server は、model、weight、vocab、embed ファイルからローカル LLM を読み込みます。また、コンテキスト長、最大出力トークン数、NPU コアマスクの設定も可能です。
モデルの読み込みが成功すると、以下のような出力が表示されます:
rknn3_model_init success!
main: model loaded
server is listening on http://0.0.0.0:8080これでローカル LLM API が起動しました。
ローカル LLM とチャットする
別のターミナルを開きます。
Python OpenAI SDK をインストールします:
pip3 install openaiテストプログラムを作成します:
nano llm_chat.py書き込み:
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:8080/v1",
api_key="sk-no-key-required"
)
response = client.chat.completions.create(
model="",
messages=[
{
"role": "user",
"content": "Explain edge AI in three sentences."
}
],
stream=True,
extra_body={
"n_keep": 0,
"cache_prompt": False,
"id_slot": 0,
"n_predict": 256
}
)
for chunk in response:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)
print()実行:
python3 llm_chat.pyモデルは RK1820 を介してローカルで応答を生成します。
Rockchip 公式のサンプルでも client.chat.completions.create() を使用してローカルの RKLLM3 サーバーにアクセスしており、ストリーミング、KV キャッシュ、最大出力トークン数などのパラメータに対応しています。
Qwen3.5-0.8B のパフォーマンス
RK1820 AI アクセラレータを搭載した reComputer RK3576 Dev Kit で測定:
テスト結果によると、Qwen3.5-0.8B は約以下の性能を達成できます:
生成速度:約 92.89 tokens/s
ローカルチャットアシスタント、テキスト生成、指示理解など、リアルタイム対話型アプリケーションの要件を満たすことができます。
ローカル VLM の実行
テキスト専用 LLM に加え、RK1820 では VLM(Vision-Language Models)も実行可能です。
この例では以下を使用します:
Qwen2.5-VL-3B_prune
このモデルは以下を処理できます:
Image + Prompt
↓
Vision Encoder
↓
Multimodal LLM
↓
Text Responseつまり、画像キャプション生成、シーン理解、視覚質問応答などのアプリケーションを実装できます。
Qwen2.5-VL-3B_prune の準備
モデルディレクトリには以下が含まれます:
Qwen2.5-VL-3B_prune/
├── Qwen2.5-VL-3B_prune.embed.bin
├── Qwen2.5-VL-3B_prune.tokenizer.gguf
├── llm_Qwen2.5-VL-3B_prune.rknn
├── llm_Qwen2.5-VL-3B_prune.weight
├── vision_Qwen2.5-VL-3B_prune.rknn
└── vision_Qwen2.5-VL-3B_prune.weightQwen2.5-VL のランタイムは、独立した Vision Model と LLM Model で構成されています。
VLM サーバーの起動
LLM Server が現在実行中の場合は、まず以下を使用して:
Ctrl+C以前の実行中サービスを停止してください。
モデルディレクトリへ移動します:
cd ~/Downloads/Qwen2.5-VL-3B_prune実行:
rkllm3-server \
-m llm_Qwen2.5-VL-3B_prune.rknn \
--weight llm_Qwen2.5-VL-3B_prune.weight \
--model2 vision_Qwen2.5-VL-3B_prune.rknn \
--weight2 vision_Qwen2.5-VL-3B_prune.weight \
--vocab Qwen2.5-VL-3B_prune.tokenizer.gguf \
--embed Qwen2.5-VL-3B_prune.embed.bin \
--host 0.0.0.0 \
--port 8080 \
-c 768 \
--n_predict 256 \
--core-mask 0xff \
--core-mask2 0xff \
--repeat-penalty 1.1 \
--presence-penalty 1.0 \
--frequency-penalty 1.0 \
--top-k 1 \
--top-p 0.8 \
--temp 0.8 \
--img-start "<|vision_start|>" \
--img-end "<|vision_end|>" \
--img-content "<|image_pad|>" \
--img-width 392 \
--img-height 392主なパラメータは以下の通りです:
-m → LLM Model
--model2 → Vision Model
--core-mask → NPU Core used by LLM
--core-mask2 → NPU Core used by VisionRockchip 公式の Qwen2.5-VL サーバー例でも、LLM とビジョンモデルを分離して使用し、視覚言語モデルの入力画像サイズとして 392 脳 392 を採用しています。
画像理解テスト
この例では、次の画像を使用します:
/home/seeed/Downloads/people.png作成:
nano vlm_test.py書き込み:
import base64
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:8080/v1",
api_key="sk-no-key-required"
)
image_path = "/home/seeed/Downloads/people.png"
with open(image_path, "rb") as image_file:
base64_image = base64.b64encode(
image_file.read()
).decode("utf-8")
response = client.chat.completions.create(
model="Qwen2.5-VL",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url":
f"data:image/png;base64,{base64_image}"
}
},
{
"type": "text",
"text":
"Describe this image in detail."
}
]
}
],
stream=True,
extra_body={
"n_keep": 0,
"cache_prompt": False,
"id_slot": 0,
"n_predict": 256
}
)
for chunk in response:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)
print()実行:
python3 vlm_test.pyRKLLM3 の公式マルチモーダル例でも、ローカル画像を Base64 に変換し、OpenAI 互換の image_url フォーマットでローカルモデルに送信しています。
VLM 出力例
入力:
Describe this image in detail.Qwen2.5-VL-3B_prune は、画像内の人物、位置関係、街並み環境、建物、木々、照明などを認識できます。
例えば:
The image depicts a group of people walking down
an urban street on what appears to be a sunny day...Qwen2.5-VL-3B_prune の性能
本テストにおけるエンドツーエンドの VLM 結果を以下にまとめます。
TTFT(Time To First Token)
1.42 sこれは、画像とプロンプトを送信してから、モデルが最初のトークンの生成を開始するまでの時間です。
VLM の場合、この時間には画像処理、Vision Encoder、Multimodal Prefill、およびテキスト生成開始に必要な時間が含まれるため、純粋な LLM 単体のテストよりも実際のアプリケーション体験に近い値となります。
このテストでは
n_predict=256を設定しているため、モデル出力は 256 Streaming Chunks に達した時点で切り捨てられます。実際のアプリケーションでは、Context Length や要件に応じて最大出力 Token 数を調整してください。
ローカル AI アプリケーションの構築
rkllm3-server を使用することで、RK1820 のモデル機能を標準的な HTTP API 経由で上位レイヤーのアプリケーションに提供できます。
これにより、以下のような構成が可能になります:
Local Chat Assistant
Image Understanding
Visual Question Answering
Document / Image Analysis
Private Edge AI Assistant典型的なアプリケーションアーキテクチャは以下の通りです:
Web UI / Python / Application
│
│ OpenAI-compatible API
▼
rkllm3-server
│
▼
RKNN3 Runtime
│
PCIe Gen2 x1
│
▼
RK1820
┌─────┴─────┐
│ │
LLM VLMこの方法により、上位レイヤーのアプリケーションは RKNN3 Runtime を直接操作することなく、API 経由で RK1820 上で動作するローカル AI モデルを呼び出せます。
RK1820 の監視
LLM または VLM アプリケーションの実行中は、以下を使用します:
sudo rknn-smi info -wリアルタイムで以下を確認できます:
NPU Utilization
Memory Usage
Temperature
Health Statusモデル実行中の RK1820 の状態を観察するためです。
まとめ
RK1820 を活用することで、reComputer RK3576 はローカルで LLM および VLM を実行でき、rkllm3-server を通じてそのモデル機能をローカル API として上位レイヤーのアプリケーションに提供できます。
今回の検証結果は以下の通りです:
| アプリケーション | モデル | 結果 |
|---|---|---|
| ローカル LLM | Qwen3.5-0.8B | ✅ 92.89 tokens/s |
| ローカル VLM | Qwen2.5-VL-3B_prune | ✅ 1.42 s TTFT |