182X 模型调用详解:像调云端 API 一样用 OpenAI 接口跑板端模型

本文详解RK182X(如RK1820/RK3588)平台在NPU上运行大模型与CNN模型的三种调用方式:命令行基准测试(rknn3_llm_demo)、OpenAI兼容HTTP API(rkllm3-server)及Web界面交互。涵盖接口启动、参数配置(如-c核掩码、-ctx上下文长度)、模型四件套(.rknn/.weight/.tokenizer.gguf/.embed.bin)部署要求,以及LLM与CNN调用差异和常见错误规避,适用于边缘计算场景下的本地化AI推理集成。

前一篇的九个 SKILL,背后都是模型在 RK182X NPU 上推理。SKILL 是封装好的用法,那平台本身的模型调用接口是什么样的?这篇讲清楚:M5-182X-A1 作为跑大模型的平台,给你三种调用方式——命令行测试、HTTP API、Web 界面。跑哪个模型不重要,接口是通用的;下文用 Model Zoo 里的 Qwen3-1.7B 和 MobileNet V2 做示例。

本章完整文档:《RK182X 系列 LLM 推理》、《RK182X 系列 CNN 推理》(生态平台 wiki) 前置条件:NPU 服务正常(systemctl is-active rknn3.service 为 active);示例模型已部署(获取方式见篇④《模型转换》)。

(一)方式一:命令行,先测平台跑得怎么样

rknn3_llm_demo 是 LLM 的基准测试工具,接模型四件套就能跑:

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

跑完输出一份测试汇总(wiki 实测):

===== 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

这份输出的用途是验收平台:换模型、换板子、改配置之后跑一遍,前后对比就知道变化在哪。

必须搞懂的参数:-c 是核掩码

LLM 和 CNN 的 -c 规则放在一起才好理解:

规则一句话:-c 必须匹配模型编译时声明的核数——不是 NPU 物理核数,更不是上下文长度。传错就报错:传 1 报 core_mask 1 is not match with npu core number 8!;把上下文数值传进去(如 8192)报 core_mask 8192 is not match with npu core number 8——上下文在模型编译时写死,运行时用 -ctx 指定。

(二)方式二:HTTP API,把模型接进你的应用

rkllm3-server 提供 OpenAI 兼容 API——这是平台最有用的接口:任何用 OpenAI SDK 写的应用,把地址指过来就能用,应用侧零改造。

启动服务:

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


注意:--help 里 -c 的文字描述写的是 --ctx-size,实测按 NPU core mask 处理——wiki 明确记录了这一差异,别被帮助文字带偏。

两个接口:

# 列出模型
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":"你好"}]}'

Python 接入(官方 openai 库,改个 base_url 就行):

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)

模型文件就是篇④见过的四件套(.rknn / .weight / .tokenizer.gguf / .embed.bin)。

(三)方式三:Web 界面,不写代码直接用

平台还带一个 Flask + 原生前端的轻量 Web 聊天界面,对接 rkllm3-server 的 API,支持自然语言对话和模拟设备控制:

cd <工程目录>
bash start.sh

浏览器访问 http://<设备IP>:7080。

(四)CNN 模型怎么调

视觉类模型走另一套 demo。Model Zoo 里的 MobileNet V2 已预装(FP16 版):

/userdata/RK1820_RK1828_AI_SDK/examples/gstreamer/MobilenetV2/
├── mobilenetv2-12.rknn     60,352 B    # FP16 模型结构
├── mobilenetv2-12.weight   7,037,440 B # FP16 模型权重
├── labels.txt              21 KB       # ImageNet 1000 类标签
└── config.json                          # 模型配置

推理测试(单张图片分类):

rknn3_cnn_demo \
  -m /userdata/RK1820_RK1828_AI_SDK/examples/gstreamer/MobilenetV2/mobilenetv2-12.rknn \
  -w /userdata/RK1820_RK1828_AI_SDK/examples/gstreamer/MobilenetV2/mobilenetv2-12.weight \
  -i /rockchip-test/npu2/model/cat_224x224.jpg \
  -c 1 \
  -cl 10 \
  -mm

10 次循环平均结果(wiki 实测,FP16 单核):

RunCount

TotalTime

AvgFPS

AvgCost

10

45.44 ms

220.064

4.54 ms

-mm 需要 sudo(普通用户报 Permission denied),推理本身不需要 root。INT8 版本 SDK 未预装,需按篇④自行转换。

(五)两种接口怎么选

应用集成选 Python API,对外提供对话服务选 HTTP。三种调用方式共用同一个 NPU,接口不同、底层相同。

(六)常见的坑

(七)总结

三种调用方式覆盖了平台使用的主要场景:测性能、接应用、直接聊。接口是固定的,模型是可换的——这篇讲的调用方法,换成 Model Zoo 里任何一个模型(Qwen2.5、Qwen3-4B……)或者你自己转的模型(篇④),照用不误。

想跑自己的模型?下一篇《模型转换》。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值