整体链路是这样的:PC 端用 Toolkit 把模型转成 .rknn 格式 → 拷到设备 → 由 RKLLM 运行时在 RK1828 上加载模型、执行推理。我们平时用的 rkllm3-server 推理服务和 C API demo,都是基于这个运行时构建的。
(注:本文基于 RKLLM x.x.x 版本测试,不同版本 API 可能有差异,具体以官方文档为准。)
一、RKLLM 里都有啥
先看整个运行时的组成部分,分工很明确:
| 组件 | 说明 |
|---|---|
librknn3_api.so |
RKNN3 核心运行时库 |
pcie-rkep |
PCIe 驱动模块 |
rknn-smi |
NPU 监控工具(类似 nvidia-smi) |
rkllm3-server |
OpenAI 兼容 API 推理服务 |
rknn3_llm_demo |
C 语言原生推理示例 |
rknn3_cnn_demo |
C 语言 CNN 推理示例 |
/lib/firmware/rknn3_rk1820.img |
固件文件 |
日常开发打交道最多的主要是 rkllm3-server(推理服务)和 rknn-smi(状态监控)这两个。
二、安装
RKLLM 运行时通常已经预装在出厂系统里了,可以先跑一下 rknn-smi info,能正常输出设备信息就说明环境没问题。
如果需要手动安装或升级,两个 deb 包搞定:
# 安装 RKNN3 运行时(包含 librknn3_api.so、rknn-smi 等)
sudo dpkg -i rknn3-runtime_*.deb
# 安装 rkllm3-server
sudo dpkg -i rkllm3-server_*.deb
三、rknn-smi:看 NPU 状态
用法类似 NVIDIA 的 nvidia-smi,模型加载之后可以拿它盯着利用率、显存和温度:
rknn-smi info
输出大概长这样:
+-----------------------+---------------+---------------+----------------------+
| Device | Health | Power(mW) | Npu(%) |
| Chip Name | Bus-Id | Temp(C) | Memory-Usage(MB) |
+=======================+===============+===============+======================+
| 0 | OK | NA | 0 |
| 0 RK1828 | 0004:41:00.0 | 38 | 1221 / 5120 |
+-----------------------+---------------+---------------+----------------------+
重点看这几个字段:
| 字段 | 说明 |
|---|---|
| Health | NPU 健康状态,正常应为 OK |
| Temp(C) | 芯片温度 |
| Npu(%) | NPU 利用率 |
| Memory-Usage(MB) | 显存使用 / 总显存 |
小提醒: 如果 Health 不是 OK,或者显存占用明显异常,优先检查固件文件和运行时版本是否匹配,版本对不上是这类问题的常见原因。
四、C API 核心函数
如果不走 HTTP 服务、想自己写 C/C++ 推理程序,核心调用链很清晰:初始化 → 找设备 → 加载模型 → 建会话 → 推理 → 销毁资源:
#include "rknn_api.h"
rknn3_init(); // 初始化
rknn3_find_devices(); // 查找设备
rknn3_load_model(); // 加载模型
rknn3_session_init(); // 创建会话
rknn3_session_run(); // 同步推理
rknn3_session_run_async(); // 异步推理
rknn3_session_wait(); // 等待异步完成
rknn3_session_stop(); // 停止会话
rknn3_destroy(); // 销毁资源
同步场景直接用 session_run;不想阻塞主线程就用 session_run_async + session_wait 的组合。SDK 里的 rknn3_llm_demo 和 rknn3_cnn_demo 就是完整的参考实现,动手写之前建议先把这两个 demo 跑一遍、读一遍代码。
五、OpenAI 兼容 API(重点)
这是我觉得最值得吹的一个点:rkllm3-server 直接封装了标准 OpenAI API,也就是说任何支持 OpenAI SDK 的框架都能零成本接入:
| 端点 | 方法 | 说明 |
|---|---|---|
/v1/models |
GET | 列出可用模型 |
/v1/chat/completions |
POST | 对话推理 |
实际操作中,把 rkllm3-server 跑起来,然后把你自己的程序或者 Agent 框架的 base_url 指到 RK1828 的服务地址,就能像调用 OpenAI 一样调用本地大模型推理了。数据全程不出本地,对隐私敏感的场景很友好。
六、参考链接
- RKNN-LLM GitHub:GitHub - airockchip/rknn-llm · GitHub
- RKNN3 Toolkit GitHub:GitHub - airockchip/rknn3-toolkit · GitHub
- RKNN3 Model Zoo:https://github.com/airockchip/rknn3-model-zoo
这篇算是 RK1828 系列的板端篇,和之前的 RKNN3 Toolkit(PC 端转换)正好凑成一条完整的模型部署链路:转换 → 部署 → 推理 → 服务化。有遇到其他问题的欢迎评论区交流。