预设: RK3576 视觉语言模型 {#rk3576_vlm}
一键将 Qwen2.5-VL 视觉语言模型部署到 reComputer RK3576。
| 设备 | 用途 |
|---|
| reComputer RK3576 | 使用 NPU 加速运行 Qwen2.5-VL |
部署后你将获得:
- 同时理解图片和文本的多模态 AI
- 本地运行的 OpenAI 兼容视觉 API
- 图片描述、视觉问答等功能,全部在设备端完成
/docs 路径提供交互式 API 文档
前提条件: RK3576 设备(8GB+ 内存)可通过 SSH 访问 + 已安装 Docker
步骤 1: 部署 Qwen2.5-VL {#deploy_vlm type=docker_deploy required=true config=devices/rk3576.yaml}
将视觉语言模型容器部署到 RK3576 设备。
部署目标: 远程部署 {#rk3576_remote type=remote config=devices/rk3576.yaml default=true}
通过 SSH 一键部署到 RK3576。
接线
- 将 RK3576 连接到与电脑相同的网络
- 填写设备 IP、SSH 用户名和密码
- 点击 部署
部署完成
- VLM 容器已在 RK3576 上运行
- 视觉对话 API:
http://<设备IP>:8002/v1/chat/completions
- API 文档:
http://<设备IP>:8002/docs
故障排查
| 问题 | 解决方案 |
|---|
| SSH 连接失败 | 检查 IP 地址、用户名、密码 |
| 未检测到 NPU | 确认设备为 RK3576 且已加载 RKNPU 内核模块 |
| 内存不足 | VLM 需要 8GB+ 内存,请关闭其他服务释放内存 |
| 镜像拉取缓慢 | 检查网络连接,镜像约 3GB |
步骤 2: 试试视觉对话 {#verify_vlm type=image_text_chat}
发送图片或文字测试 VLM。
模式: 图片理解 {#vision_mode config=devices/vlm_chat.yaml default=true}
上传一张图片并提问。
故障排查
| 问题 | 解决方案 |
|---|
| 连接被拒绝 | 等待 60-120 秒让模型加载 |
| 超时 | VLM 模型较大,首次加载需要时间 |
模式: 文本对话 {#text_mode config=devices/vlm_text.yaml}
仅用文本与模型对话。
故障排查
| 问题 | 解决方案 |
|---|
| 空响应 | 查看容器日志:docker logs ai_lab_vlm |
部署完成
Qwen2.5-VL 已在你的 RK3576 设备上运行。
文本对话示例
curl -X POST http://<设备IP>:8002/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "rkllm-vision", "messages": [{"role": "user", "content": "你好!"}], "max_tokens": 256}'
图片理解示例
curl -X POST http://<设备IP>:8002/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "rkllm-vision",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "这张图片里有什么?"},
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
]
}],
"max_tokens": 256
}'
Python 示例
import openai
client = openai.OpenAI(base_url="http://<设备IP>:8002/v1", api_key="dummy")
response = client.chat.completions.create(
model="rkllm-vision",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "描述这张图片"},
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
]
}],
max_tokens=256
)
print(response.choices[0].message.content)