Applications du kit de développement pour module reComputer RK3576
Dernière mise à jour:
Applications
Exécution locale de LLM et VLM avec le RK1820
Le RK1820 ne sert pas uniquement aux tests de performance des modèles. Il permet également de déployer des LLM (modèles de langage à grande échelle) et des VLM (modèles vision-langage) locaux sur le reComputer RK3576 via rkllm3-server, ainsi que de créer des applications IA locales grâce à son API compatible OpenAI.
Cet exemple présente :
-
La création d'un service de chat LLM local avec Qwen3.5-0.8B
-
La création d'un service local de compréhension d'images avec Qwen2.5-VL-3B_prune
rkllm3-server repose sur la RKNPU3 et assure l'inférence LLM via une API Chat compatible OpenAI. Il peut s'intégrer dans des applications Python, des interfaces web ou d'autres frameworks d'agents IA.
Prérequis
Avant de commencer ce tutoriel, installez le RK1820 et configurez le Runtime RKNN3. Vérifiez ensuite que :
Plainrknn-smi info -lLe RK1820 est correctement détecté.
Exécution d'un LLM local
Cet exemple utilise Qwen3.5-0.8B.
Le répertoire du modèle contient :
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.weightAccédez au répertoire du modèle :
cd ~/Downloads/Qwen3.5-0.8BDémarrage du serveur LLM local
Exécutez :
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.8Le serveur prend en charge :
La version officielle de rkllm3-server par Rockchip charge le LLM local à partir des fichiers model, weight, vocab et embed. Elle permet aussi de configurer la longueur du contexte, le nombre maximal de tokens en sortie et le masque des cœurs NPU.
Une fois le modèle chargé avec succès, un message similaire à celui-ci s'affiche :
rknn3_model_init success!
main: model loaded
server is listening on http://0.0.0.0:8080L'API du LLM local est désormais active.
Interagir avec le LLM local
Ouvrez un autre terminal.
Installez le SDK Python OpenAI :
pip3 install openaiCréez un programme de test :
nano llm_chat.pyÉcrivez :
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()Exécutez :
python3 llm_chat.pyLe modèle génère les réponses localement via le RK1820.
L'exemple officiel de Rockchip utilise également client.chat.completions.create() pour accéder au serveur RKLLM3 local et prend en charge des paramètres tels que le streaming, le cache KV et le nombre maximal de tokens de sortie.
Performances de Qwen3.5-0.8B
Mesures effectuées sur le kit de développement reComputer RK3576 avec l'accélérateur IA RK1820 :
Les résultats des tests montrent que Qwen3.5-0.8B peut atteindre environ :
Vitesse de génération : environ 92,89 tokens/s
Il répond aux besoins des applications interactives en temps réel telles que les assistants de chat locaux, la génération de texte et la compréhension d'instructions.
Exécuter un VLM local
En plus des LLM purement textuels, le RK1820 peut également exécuter des VLM (modèles vision-langage).
Cet exemple utilise :
Qwen2.5-VL-3B_prune
Ce modèle peut traiter :
Image + Prompt
↓
Vision Encoder
↓
Multimodal LLM
↓
Text ResponseAutrement dit, il est possible de mettre en œuvre des applications telles que la description d'images, la compréhension de scènes et le question-réponse visuel.
Préparer Qwen2.5-VL-3B_prune
Le répertoire du modèle contient :
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.weightL'environnement d'exécution de Qwen2.5-VL comprend des modèles Vision et LLM indépendants.
Démarrer le serveur VLM
Si un serveur LLM est actuellement en cours d'exécution, utilisez d'abord :
Ctrl+Cpour arrêter le service précédent.
Accédez au répertoire du modèle :
cd ~/Downloads/Qwen2.5-VL-3B_pruneExécutez :
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 392Les paramètres clés sont :
-m → LLM Model
--model2 → Vision Model
--core-mask → NPU Core used by LLM
--core-mask2 → NPU Core used by VisionL'exemple officiel de serveur Qwen2.5-VL pour Rockchip utilise également des modèles LLM et vision séparés, et exécute le modèle vision-langage avec une image d'entrée de 392 脳 392.
Test de compréhension d'image
Cet exemple utilise l'image suivante :
/home/seeed/Downloads/people.pngCréez :
nano vlm_test.pyÉcrivez :
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()Exécutez :
python3 vlm_test.pyL'exemple multimodal officiel RKLLM3 convertit également l'image locale en Base64 et la soumet au modèle local via le format image_url compatible OpenAI.
Exemple de sortie VLM
Entrée :
Describe this image in detail.Qwen2.5-VL-3B_prune est capable de reconnaître les personnes, les relations spatiales, les environnements urbains, les bâtiments, les arbres et l'éclairage dans les images.
Par exemple :
The image depicts a group of people walking down
an urban street on what appears to be a sunny day...Performances de Qwen2.5-VL-3B_prune
Les résultats de bout en bout du test VLM sont résumés ci-dessous.
TTFT (Time To First Token)
1.42 sIl s'agit du temps écoulé entre la soumission de l'image et du prompt jusqu'au début de la génération du premier token par le modèle.
Pour un VLM, ce temps inclut le traitement de l'image, l'encodeur visuel, le préfill multimodal et le délai nécessaire pour démarrer la génération de texte. Il reflète donc plus fidèlement l'expérience réelle d'une application que le test d'un LLM pur seul.
Ce test utilise
n_predict=256, ce qui tronque la sortie du modèle après 256 Streaming Chunks. Dans une application réelle, vous pouvez ajuster le nombre maximum de Tokens de sortie en fonction de la Context Length et des besoins spécifiques.
Développer des applications IA locales
Grâce à rkllm3-server, les capacités du modèle sur le RK1820 sont exposées aux applications supérieures via une API HTTP standard.
Vous pouvez ainsi développer :
Local Chat Assistant
Image Understanding
Visual Question Answering
Document / Image Analysis
Private Edge AI AssistantL'architecture typique d'une application est la suivante :
Web UI / Python / Application
│
│ OpenAI-compatible API
▼
rkllm3-server
│
▼
RKNN3 Runtime
│
PCIe Gen2 x1
│
▼
RK1820
┌─────┴─────┐
│ │
LLM VLMAinsi, les applications supérieures peuvent interroger les modèles IA locaux exécutés sur le RK1820 via l'API, sans avoir à manipuler directement le Runtime RKNN3.
Surveiller le RK1820
Lors de l'exécution d'applications LLM ou VLM, vous pouvez utiliser :
sudo rknn-smi info -wpour visualiser en temps réel :
NPU Utilization
Memory Usage
Temperature
Health Statusafin d'observer l'état du RK1820 pendant l'inférence du modèle.
Résumé
Le reComputer RK3576, équipé du RK1820, permet d'exécuter localement des LLM et des VLM. Via rkllm3-server, ces capacités sont exposées sous forme d'API locale aux applications supérieures.
La vérification a été effectuée lors de cette session :
| Application | Modèle | Résultat |
|---|---|---|
| LLM local | Qwen3.5-0.8B | ✅ 92.89 tokens/s |
| VLM local | Qwen2.5-VL-3B_prune | ✅ 1.42 s TTFT |