reComputer RK3576 Module Dev Kit: Toepassingen

Laatst bijgewerkt:

Toepassingen

Lokale LLM's en VLM's uitvoeren met de RK1820

De RK1820 kan niet alleen worden gebruikt voor het testen van modelprestaties, maar ook om lokale LLM's (large language models) en VLM's (vision-language models) op de reComputer RK3576 te implementeren via rkllm3-server. Daarnaast kun je er lokale AI-toepassingen mee bouwen via de OpenAI-compatibele API.

In dit voorbeeld wordt uitgelegd hoe je:

  • Qwen3.5-0.8B gebruikt om een lokale LLM-chatdienst op te zetten

  • Qwen2.5-VL-3B_prune gebruikt om een lokale dienst voor beeldbegrip op te zetten

rkllm3-server is gebaseerd op RKNPU3 en biedt LLM-inferentie via een OpenAI-compatibele Chat API. Het kan worden geïntegreerd in Python-toepassingen, web-UI's en andere frameworks voor AI-agents.

Vereisten

Voordat je deze tutorial start, moet je de installatie van de RK1820 en de configuratie van de RKNN3 Runtime voltooien. Controleer vervolgens of:

Plain
rknn-smi info -l

De RK1820 correct wordt herkend.


Een lokale LLM uitvoeren

Dit voorbeeld maakt gebruik van Qwen3.5-0.8B.

De modelmap bevat:

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

Ga naar de modelmap:

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

De lokale LLM-server starten

Voer uit:

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

De server ondersteunt:

De officiële rkllm3-server van Rockchip laadt de lokale LLM vanuit de bestanden model, weight, vocab en embed. Je kunt hiermee ook de contextlengte, het maximale aantal output-tokens en het NPU-coremask configureren.

Nadat het model succesvol is geladen, zie je iets als:

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

Op dit punt is de lokale LLM-API gestart.

Chatten met de lokale LLM

Open een nieuwe terminal.

Installeer de Python OpenAI SDK:

Plain
pip3 install openai

Maak een testprogramma aan:

Plain
nano llm_chat.py

Schrijf:

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

Uitvoeren:

Plain
python3 llm_chat.py

Het model genereert antwoorden lokaal via de RK1820.

Het officiële Rockchip-voorbeeld gebruikt ook client.chat.completions.create() om toegang te krijgen tot de lokale RKLLM3-server en ondersteunt parameters zoals streaming, KV-cache en maximale output tokens.


Prestaties van Qwen3.5-0.8B

Gemeten op de reComputer RK3576 Dev Kit met RK1820 AI Accelerator:

De testresultaten tonen aan dat Qwen3.5-0.8B ongeveer het volgende bereikt:

Generatiesnelheid: ongeveer 92.89 tokens/s

Dit voldoet aan de eisen voor real-time interactieve toepassingen, zoals lokale chat-assistenten, tekstgeneratie en instructiebegrip.

Een lokale VLM uitvoeren

Naast alleen-tekst LLM's kan de RK1820 ook VLM's (Vision-Language Models) uitvoeren.

Dit voorbeeld gebruikt:

Qwen2.5-VL-3B_prune

Dit model kan verwerken:

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

Dat wil zeggen, toepassingen zoals beeldbeschrijving, scenebegrip en visuele vraagbeantwoording kunnen worden geïmplementeerd.

Qwen2.5-VL-3B_prune voorbereiden

De modelmap bevat:

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

De runtime van Qwen2.5-VL bestaat uit een onafhankelijk Vision Model en LLM Model.

De VLM-server starten

Als er momenteel een LLM Server actief is, gebruik dan eerst:

Plain
Ctrl+C

om de vorige service te stoppen.

Ga naar de modelmap:

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

Voer uit:

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

De belangrijkste parameters zijn:

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

Het officiële Rockchip Qwen2.5-VL servervoorbeeld maakt ook gebruik van gescheiden LLM- en visuele modellen, en voert het vision-language model uit met een invoerbeeld van 392 脳 392.

Testen van beeldbegrip

Dit voorbeeld gebruikt de volgende afbeelding:

Plain
/home/seeed/Downloads/people.png

Maak aan:

Plain
nano vlm_test.py

Schrijf:

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

Uitvoeren:

Plain
python3 vlm_test.py

Het officiële RKLLM3 multimodale voorbeeld converteert de lokale afbeelding ook naar Base64 en verzendt deze naar het lokale model in het OpenAI-compatibele image_url-formaat.

Voorbeeld van VLM-uitvoer

Invoer:

Plain
Describe this image in detail.

Qwen2.5-VL-3B_prune kan personen, ruimtelijke relaties, straatomgevingen, gebouwen, bomen en verlichting in afbeeldingen herkennen.

Bijvoorbeeld:

Plain
The image depicts a group of people walking down
an urban street on what appears to be a sunny day...

Prestaties van Qwen2.5-VL-3B_prune

De end-to-end VLM-resultaten van deze test zijn hieronder samengevat.

TTFT (Time To First Token)

Plain
1.42 s

Dit is de tijd vanaf het indienen van de afbeelding en prompt tot het moment dat het model begint met het genereren van het eerste token.

Bij een VLM omvat deze tijd de verwerking van afbeeldingen, de Vision Encoder, Multimodal Prefill en de tijd die nodig is om tekstgeneratie te starten. Dit komt dichter in de buurt van de werkelijke gebruikerservaring dan het testen van een puur LLM alleen.

Deze test gebruikt n_predict=256, waardoor de modeluitvoer wordt afgebroken na 256 Streaming Chunks. In echte toepassingen kunt u het maximale aantal output Tokens aanpassen op basis van de Context Length en de vereisten van de toepassing.

Lokale AI-toepassingen bouwen

Via rkllm3-server kan de modelfunctionaliteit van de RK1820 worden aangeboden aan bovenliggende toepassingen via een standaard HTTP API.

Hierdoor kunt u verder bouwen aan:

Plain
Local Chat Assistant

Image Understanding

Visual Question Answering

Document / Image Analysis

Private Edge AI Assistant

Een typische applicatiearchitectuur ziet er als volgt uit:

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

Op deze manier kunnen bovenliggende toepassingen de lokale AI-modellen die op de RK1820 draaien, aanroepen via de API, zonder direct met de RKNN3 Runtime te werken.

Bewaking van de RK1820

Tijdens het uitvoeren van LLM- of VLM-toepassingen kunt u gebruikmaken van:

Plain
sudo rknn-smi info -w

om realtime inzicht te krijgen in:

Plain
NPU Utilization
Memory Usage
Temperature
Health Status

om de status van de RK1820 tijdens de modeloperatie te observeren.

Samenvatting

Met de RK1820 kan de reComputer RK3576 lokale LLM's en VLM's uitvoeren, en via rkllm3-server de modelfunctionaliteit aanbieden als lokale API aan bovenliggende toepassingen.

De daadwerkelijke verificatie is in deze run voltooid:

ToepassingModelResultaat
Lokale LLMQwen3.5-0.8B✅ 92.89 tokens/s
Lokale VLMQwen2.5-VL-3B_prune✅ 1.42 s TTFT