RK1828 开发笔记:RK1828 板端 LLM 推理运行时梳理,附 OpenAI 兼容 API 接入

整体链路是这样的: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_demorknn3_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 一样调用本地大模型推理了。数据全程不出本地,对隐私敏感的场景很友好。


六、参考链接


这篇算是 RK1828 系列的板端篇,和之前的 RKNN3 Toolkit(PC 端转换)正好凑成一条完整的模型部署链路:转换 → 部署 → 推理 → 服务化。有遇到其他问题的欢迎评论区交流。