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 Agent 框架中。

前置条件

开始本教程前,请完成 RK1820 的安装及 RKNN3 Runtime 配置,并确认:

Plain
rknn-smi info -l

RK1820 应能被正常识别。


运行本地 LLM

本示例使用 Qwen3.5-0.8B。

模型目录包含以下内容:

Plain
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

进入模型目录:

Plain
cd ~/Downloads/Qwen3.5-0.8B

启动本地 LLM 服务器

执行以下命令:

Plain
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。它还允许你配置上下文长度、最大输出 Token 数以及 NPU 核心掩码。

模型加载成功后,你将看到类似以下的输出:

Plain
rknn3_model_init success!
main: model loaded
server is listening on http://0.0.0.0:8080

此时,本地 LLM API 已启动。

与本地 LLM 对话

打开另一个终端。

安装 Python OpenAI SDK:

Plain
pip3 install openai

创建测试程序:

Plain
nano llm_chat.py

写入:

Plain
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()

运行:

Plain
python3 llm_chat.py

模型将通过 RK1820 在本地生成回复。

Rockchip 官方示例同样使用 client.chat.completions.create() 访问本地 RKLLM3 服务器,并支持流式输出、KV Cache 和最大输出 token 数等参数。


Qwen3.5-0.8B 性能

在配备 RK1820 AI 加速器的 reComputer RK3576 开发套件上实测:

测试结果显示,Qwen3.5-0.8B 可达到约:

生成速度:约 92.89 tokens/s

能够满足本地聊天助手、文本生成和指令理解等实时交互应用的需求。

运行本地 VLM

除了纯文本 LLM,RK1820 还可以运行 VLM(视觉语言模型)。

本示例使用:

Qwen2.5-VL-3B_prune

该模型可以处理:

Plain
Image + Prompt
      ↓
Vision Encoder
      ↓
Multimodal LLM
      ↓
Text Response

也就是说,可以实现图像描述、场景理解和视觉问答等应用。

准备 Qwen2.5-VL-3B_prune

模型目录包含:

Plain
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

Qwen2.5-VL 的运行时包含独立的 Vision Model 和 LLM Model。

启动 VLM 服务器

如果当前已有 LLM Server 在运行,请先使用:

Plain
Ctrl+C

停止之前的服务。

进入模型目录:

Plain
cd ~/Downloads/Qwen2.5-VL-3B_prune

执行:

Plain
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

关键参数如下:

Plain
-m         → LLM Model
--model2   → Vision Model
--core-mask  → NPU Core used by LLM
--core-mask2 → NPU Core used by Vision

Rockchip 官方的 Qwen2.5-VL 服务器示例同样采用独立的 LLM 和视觉模型,并以 392 脳 392 的输入图像尺寸运行视觉语言模型。

测试图像理解

本示例使用以下图像:

Plain
/home/seeed/Downloads/people.png

创建文件:

Plain
nano vlm_test.py

写入内容:

Plain
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()

执行命令:

Plain
python3 vlm_test.py

RKLLM3 官方多模态示例同样将本地图像转换为 Base64 格式,并以 OpenAI 兼容的 image_url 格式提交给本地模型。

VLM 输出示例

输入:

Plain
Describe this image in detail.

Qwen2.5-VL-3B_prune 能够识别图像中的人物、位置关系、街道环境、建筑物、树木以及光照情况。

例如:

Plain
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,首字生成时间)

Plain
1.42 s

该指标指从提交图像和提示词开始,到模型生成第一个 token 为止所耗费的时间。

对于 VLM,该耗时包含图像处理、Vision Encoder、多模态 Prefill 以及启动文本生成所需的时间,因此比单独测试纯 LLM 更贴近真实应用体验。

本测试设置 n_predict=256,模型输出在达到 256 个 Streaming Chunks 后截断。在实际应用中,可根据 Context Length 和业务需求调整最大输出 Token 数。

构建本地 AI 应用

通过 rkllm3-server,可将 RK1820 的模型能力以标准 HTTP API 的形式提供给上层应用。

因此,你可以进一步构建:

Plain
Local Chat Assistant

Image Understanding

Visual Question Answering

Document / Image Analysis

Private Edge AI Assistant

典型的应用架构如下:

Plain
Web UI / Python / Application
              │
              │ OpenAI-compatible API
              ▼
        rkllm3-server
              │
              ▼
          RKNN3 Runtime
              │
         PCIe Gen2 x1
              │
              ▼
            RK1820
        ┌─────┴─────┐
        │           │
       LLM         VLM

这样,上层应用即可通过 API 调用运行在 RK1820 上的本地 AI 模型,而无需直接操作 RKNN3 Runtime。

监控 RK1820

运行 LLM 或 VLM 应用时,可使用:

Plain
sudo rknn-smi info -w

实时查看:

Plain
NPU Utilization
Memory Usage
Temperature
Health Status

以观察模型运行期间 RK1820 的状态。

总结

借助 RK1820,reComputer RK3576 可运行本地 LLM 和 VLM,并通过 rkllm3-server 将模型能力以本地 API 形式提供给上层应用。

本次验证的实际结果如下:

应用场景模型结果
本地 LLMQwen3.5-0.8B✅ 92.89 tokens/s
本地 VLMQwen2.5-VL-3B_prune✅ 1.42 s TTFT