RK182X系列LLM推理(RK1828型号)
整体框图
Host (RK3588) RK1828 (PCIe AI 协处理器)
────────────────── ─────────────────────
rknn3_llm_demo / rkllm3-server / Web 8 核 NPU
│ │
▼ │
PCIe Gen3 x4 ──────────────────────────────► NPU 推理 (8 核)
Qwen3-1.7B / 4B / ...1. C 语言推理测试 (rknn3_llm_demo)
纯 CLI benchmark,非服务。
rknn3_llm_demo \
-m <模型目录>/Qwen3-1.7B/Qwen3-1.7B.rknn \
-w <模型目录>/Qwen3-1.7B/Qwen3-1.7B.weight \
-tk <模型目录>/Qwen3-1.7B/Qwen3-1.7B.tokenizer.gguf \
-em <模型目录>/Qwen3-1.7B/Qwen3-1.7B.embed.bin \
-c 0xff \
-ctx 16384 \
-no 4096参数速查:
| 参数 | 说明 |
|---|---|
-m | RKNN 模型路径 |
-w | 模型权重路径 |
-tk | 分词器路径 |
-em | Embedding 路径 |
-c | NPU core mask,须匹配模型编译时声明的核数(Qwen3-1.7B 为 8 核 → 0xff) |
-ctx | 最大上下文长度(不要超过模型 max_context_len) |
-no | 最大生成 token 数 |
-d | 设备 ID(多 NPU 时用,单设备写 0) |
-c传错值会报core_mask X is not match with npu core number 8!:用1报"core_mask 1 is not match with npu core number 8!";用 8192 这种"上下文数值"也会报"core_mask 8192 is not match with npu core number 8"。CNN(如 MobileNet V2)编译声明 1 核 →-c 1,见 ch04 CNN 推理。
帮助:
rknn3_llm_demo --help输出:
Usage:
rknn3_llm_demo [options]
Options:
-m, --model_path
-w, --model_weight
-tk, --tokenizer
-em, --embedding
-c, --core_mask
-ctx,--max_context_len
-ni,--n_input_tokens
-no,--max_new_tokens
-cl, --cnt_loop default:1
-tl, --time_loop(hours)
-d, --device_id specify device ID
-mm, --enable_memory_monitor enable memory monitoring (default: disabled)预期输出:
===== RKNN3_LLM_TEST Results Summary =====
Model: Qwen3-1.7B
DeviceID: 0004:41:00.0
TTFT: 63.208 ms
TPOT: 8.636 ms
Prefill: 253.132 tokens/s
TPS: 115.798 tokens/s
TotalTime: 607.262 ms
TotalRuns: 1
AvgMemoryUsage: unavailable
AvgNpuUtilization: unavailable
2. HTTP 推理服务 (rkllm3-server)
rkllm3-server 提供 OpenAI 兼容 API,任何用 OpenAI SDK 的应用可直接接入。
2.1 启动服务
rkllm3-server \
-m <模型目录>/Qwen3-1.7B/Qwen3-1.7B.rknn \
--weight <模型目录>/Qwen3-1.7B/Qwen3-1.7B.weight \
--vocab <模型目录>/Qwen3-1.7B/Qwen3-1.7B.tokenizer.gguf \
--embed <模型目录>/Qwen3-1.7B/Qwen3-1.7B.embed.bin \
--host 0.0.0.0 --port 8080 \
-c 0xff参数速查:
| 参数 | 说明 |
|---|---|
-m | RKNN 模型路径 |
--weight | 模型权重路径 |
--vocab | 分词器路径 |
--embed | Embedding 路径 |
--host | 监听地址(默认 127.0.0.1) |
--port | 监听端口(默认 8080) |
-c | NPU core mask(8 核 → 0xff) |
帮助:
rkllm3-server --help输出:
version: 1.0.0 (b4bd144@2026-01-22T21:27:27)
----- common params -----
-c, --ctx-size N size of the prompt context (default: 4096, 0 = loaded from model)
-n, --predict, --n-predict N number of tokens to predict (default: -1, -1 = context size)
-a, --alias STRING set alias for model name (to be used by REST API)
-m, --model FNAME rknn llm model path
--weight FNAME rknn llm model weight path
--vocab FNAME vocab path
--embed FNAME embed path
-c实测按 NPU core mask 处理(Qwen3-1.7B 需-c 0xff),与--help中-c, --ctx-size的文字描述不符。上下文长度由模型编译时的max_context_len决定,传上下文数值(如 8192)启动会报core_mask 8192 is not match with npu core number 8。
2.2 模型文件
ls /userdata/models/Qwen3-1.7B/ | grep -E "\.(rknn|weight|gguf|bin)$"输出:
Qwen3-1.7B.embed.bin
Qwen3-1.7B.rknn
Qwen3-1.7B.tokenizer.gguf
Qwen3-1.7B.weight2.3 API 接口
# 列出模型
curl http://localhost:8080/v1/models
# 对话推理
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"qwen","messages":[{"role":"user","content":"你好"}]}'2.4 Python SDK 接入
from openai import OpenAI
client = OpenAI(base_url="http://<设备IP>:8080/v1", api_key="none")
response = client.chat.completions.create(
model="qwen",
messages=[
{"role": "system", "content": "你是一个助手"},
{"role": "user", "content": "你好"},
],
max_tokens=100,
)
print(response.choices[0].message.content)3. Web 聊天界面
基于 Flask + 原生前端的轻量 Web 聊天界面,直接对接 rkllm3-server API,支持自然语言对话和模拟设备控制。
cd <工程目录>
bash start.sh
# 访问 http://<设备IP>:7080

4. 性能参考
4.1 rknn3_llm_demo 性能
| 指标 | 数值 |
|---|---|
| 首 Token 延迟 (TTFT) | ~63 ms |
| 每 Token 延迟 (TPOT) | ~8.6 ms |
| Prefill 速度 | ~253 tok/s(实测) |
| 生成速度 (TPS) | ~116 tok/s(实测) |
4.2 rkllm3-server vs rknn3-toolkit-lite
| 维度 | rknn3-toolkit-lite (Python API) | rkllm3-server (HTTP) |
|---|---|---|
| 稳定性 | 高(进程内调用) | 偶发卡死 |
| VLM 支持 | 原生支持 | 有限 |
| 部署方式 | pip install wheel | deb 包 |
| 适用场景 | VLM/CNN/多模态 | 纯 LLM 对话 |
5. 常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
core_mask X is not match with npu core number 8! | -c 不是 core_mask,或与模型核数不匹配 | LLM 用 -c 0xff,CNN 用 -c 1 |
core_mask 8192 is not match with npu core number 8 | 把上下文数值传给 -c 了 | 上下文在模型编译时定,不要传 -c |
rkllm3-server 起不来报 port already in use | 端口被占 | --port 8081 换一个 |
Python SDK 报 Connection refused | 服务没起来 / 端口错 | ss -tlnp | grep 8080 验证 |
6. 下一步
- CNN 推理 —
-c 1单核模型 - 模型转换 — ONNX → RKNN
- AI Agent 应用 — 集成到 Agent 框架
