来源:
notes/documents/dg_RDK_X5_官方_SmolVLM_多模态部署与验证.mddg(RDK X5)官方 SmolVLM 多模态部署与验证
日期:2026-09-19
设备:RDK X5,主机名 dg
网络:ZeroTier / SSH
部署方案:地平线 TROS Humble 官方 hobot_llamacpp VLM launch
1. 结论
dg 已经按照官方 ROS 2 launch 方案完成 SmolVLM 图像理解验证。实际使用的是:
/opt/tros/humble/share/hobot_llamacpp/launch/llama_vlm.launch.py
模型能够接收图片并返回自然语言描述。历史实测输出为:
The image shows a close-up of a person's face with a white fluffy cat lying on a piece of fabric.
单次图像理解耗时约 6.8 秒,生成速度约 27 tokens/s。该结论来自 dg 当时开机状态下的现场测试;当前 dg 已关机,本次文档编写没有重新连接设备,也没有重新执行验证。
2. 硬件与软件环境
| 项目 | 记录 |
|---|---|
| 设备 | RDK X5,主机名 dg |
| CPU | 8 核 Cortex-A55 |
| 可用内存 | 约 3 GiB |
| 操作系统/软件栈 | TROS Humble |
| 官方运行组件 | hobot_llamacpp |
| 官方启动文件 | /opt/tros/humble/share/hobot_llamacpp/launch/llama_vlm.launch.py |
| 服务访问方式 | ZeroTier 网络 + SSH |
| 当前状态 | dg 已关机,无法现场复核 |
3. 部署组成及作用
3.1 hobot_llamacpp
路径:
/opt/tros/humble/share/hobot_llamacpp/
作用:提供地平线 TROS 环境下的 Llama.cpp/视觉语言模型 ROS 2 组件,包括官方 launch 文件、节点配置和推理运行链路。
验证方式:
ls -l /opt/tros/humble/share/hobot_llamacpp/launch/llama_vlm.launch.py
3.2 SmolVLM GGUF 模型
路径:
/opt/vlm-models/SmolVLM2-256M-Video-Instruct-Q8_0.gguf
作用:提供语言模型和视觉语言推理的 GGUF 权重。
来源:hf-mirror.net。
SHA256:
af7ce9951a2f46c4f6e5def253e5b896ca5e417010e7a9949fdc9e5175c27767
验证方式:
sha256sum /opt/vlm-models/SmolVLM2-256M-Video-Instruct-Q8_0.gguf
3.3 SigLip 视觉编码器
路径:
/opt/vlm-models/SigLip_int16_SmolVLM2_256M_Instruct_MLP_C1_UP_X5.bin
作用:把图片转换为视觉特征,再交给 SmolVLM 的语言模型生成描述。没有该视觉编码器时,语言模型不能完成真正的图片理解。
来源:hf-mirror.net。
SHA256:
5dc1302cb7de5598488f09923e445201a2d7b545ff3490dd3323f3bbfe20c9e2
验证方式:
sha256sum /opt/vlm-models/SigLip_int16_SmolVLM2_256M_Instruct_MLP_C1_UP_X5.bin
4. 依赖安装清单
4.1 tros-humble-sensevoice-ros2
版本:
1.1.0
作用:提供 TROS 语音识别相关 ROS 2 依赖。它不是图片理解的核心模型,但属于该官方 launch 方案运行环境中的已安装依赖。
安装方式(历史现场使用的 Debian 包管理方式):
sudo apt install tros-humble-sensevoice-ros2
验证方式:
dpkg -l | grep tros-humble-sensevoice-ros2
4.2 tros-humble-hobot-tts
版本:
2.0.6
作用:提供文本转语音 ROS 2 节点,使视觉语言模型的文字结果可以进一步转换为语音。
安装方式:
sudo apt install tros-humble-hobot-tts
验证方式:
dpkg -l | grep tros-humble-hobot-tts
已知限制:历史测试中 hobot_tts 节点因为缺少以下文件退出:
/opt/tros/humble/lib/hobot_tts/tts_model/tts.flags
同时缺少对应 TTS 模型文件。因此本次验证证明了 VLM 图像理解链路可用,但没有证明 TTS 播放链路完整可用。TTS 缺失不影响图片输入和文字输出。
5. 模型下载、目录和校验
历史下载来源使用 hf-mirror.net,目标目录为:
sudo mkdir -p /opt/vlm-models
下载完成后应确认两个文件都位于 /opt/vlm-models/,并执行:
sha256sum /opt/vlm-models/SmolVLM2-256M-Video-Instruct-Q8_0.gguf
sha256sum /opt/vlm-models/SigLip_int16_SmolVLM2_256M_Instruct_MLP_C1_UP_X5.bin
只有 SHA256 与本文记录一致时,才可以把模型文件视为与历史测试相同的版本。由于 dg 当前关机,本次没有再次下载或校验。
6. BPU 服务资源处理
6.1 为什么要处理 BPU 服务
VLM 推理需要占用板端 BPU/ION 等资源。历史部署过程中,为避免已有服务和 VLM 节点争用硬件资源,曾临时暂停:
bpu-service
bpu-healthcheck.timer
这属于资源协调措施,不是模型安装步骤。长期部署时应先确认官方 launch 是否与现有 BPU 服务兼容,再决定是否需要暂停服务。
6.2 恢复方式
历史测试结束后已经恢复:
sudo systemctl start bpu-service
sudo systemctl start bpu-healthcheck.timer
当时最终状态:
bpu-service: active
bpu-healthcheck.timer: active
/healthz: status=ok
验证命令:
systemctl is-active bpu-service
systemctl is-active bpu-healthcheck.timer
curl http://127.0.0.1:8080/healthz
7. 官方 VLM 启动方案
官方启动文件:
source /opt/ros/humble/setup.bash
source /opt/tros/humble/setup.bash
ros2 launch \
/opt/tros/humble/share/hobot_llamacpp/launch/llama_vlm.launch.py
启动文件的作用是按照 TROS 官方配置启动视觉语言模型节点,并连接 GGUF 语言模型、SigLip 视觉编码器和 ROS 2 通信接口。实际参数应以板端 launch 文件内容和对应版本文档为准,不能把其他版本的参数名直接套用。
启动后验证重点:
ros2 node list
ros2 topic list
然后向官方节点使用的图像输入接口发送图片,检查是否返回包含图片语义的文本结果。
8. 测试图片与结果
8.1 测试图片记录
现场测试输入文件名:
image2.jpg
本地归档状态:未找到并确认保存的原始 image2.jpg。随后 dg 关机,SSH 访问失败,因此无法重新从设备取回原图。
因此,本正式文档没有嵌入未经确认的本地图片,也没有用其他图片冒充测试图片。这意味着当前文档保存了测试输入文件名和结果文字,但没有保存测试图片本体。待 dg 下次开机后,应优先把 image2.jpg 复制到:
notes/sources/dg_smolvlm/image2.jpg
并在本文补充正式图片引用。
8.2 历史实测输出
The image shows a close-up of a person's face with a white fluffy cat lying on a piece of fabric.
结果判断:模型识别出了人物面部、白色毛茸茸的猫以及承载物,说明图片已经进入视觉编码器并参与语言生成,不是单纯的文本模型空跑。
8.3 性能记录
| 指标 | 历史结果 |
|---|---|
| 单次图像理解耗时 | 约 6.8 秒 |
| 生成速度 | 约 27 tokens/s |
| 测试状态 | 成功返回自然语言描述 |
以上数值是历史现场记录,不是当前在线测量值。
9. TTS 状态
VLM 输出文字后理论上可以交给 hobot_tts 播放,但历史测试发现 TTS 节点缺少:
/opt/tros/humble/lib/hobot_tts/tts_model/tts.flags
以及对应 TTS 模型文件,导致 TTS 节点退出。
因此当前部署结论应写成:
图片输入 -> SigLip -> SmolVLM -> 文字输出:已验证
文字输出 -> hobot_tts -> 语音播放:依赖缺失,未完成验证
10. 是否编写过代码
本次 SmolVLM 官方方案部署中:
- 没有新增 dg 侧业务代码。
- 没有新增 VLM 推理代码。
- 没有修改官方
llama_vlm.launch.py。 - 使用了官方 launch 文件、系统安装包、模型文件、Shell/服务命令和测试命令。
- 只做了部署、配置核对、服务启停、模型下载校验和结果验证。
个人助理仓库中已有的其他 dg BPU 文档和工具代码属于此前独立的 BPU 推理服务项目,不能把那些代码描述成这次官方 SmolVLM 部署新增的代码。
11. 复现清单
dg 重新开机后,建议按以下顺序复现:
- 确认 ZeroTier 地址和 SSH 可达。
- 确认
/opt/tros/humble/share/hobot_llamacpp/launch/llama_vlm.launch.py存在。 - 确认两个模型文件存在并校验 SHA256。
- 确认
tros-humble-sensevoice-ros2=1.1.0和tros-humble-hobot-tts=2.0.6。 - 检查
bpu-service和bpu-healthcheck.timer状态。 - 按官方 launch 启动 VLM。
- 使用归档后的
image2.jpg重新测试。 - 记录完整终端输出、耗时和 ROS 2 节点状态。
- 单独补齐 TTS flags 和模型,再验证语音链路。
- 测试结束后确认 BPU 服务恢复,并重新检查
/healthz。
12. 当前限制与待办
dg已关机,本次不能重新执行命令。- 原始测试图片
image2.jpg当前未在本地确认归档,本文暂不嵌入图片。 - TTS 模型和
tts.flags缺失,语音播放链路未完成。 - BPU 服务与 VLM 长期共存关系尚需在设备开机后重新验证。
- 当前性能数据是一次历史测试结果,不能视为持续运行基准。
13. 文档归档说明
本文件是正式项目文档,路径为:
notes/documents/dg_RDK_X5_官方_SmolVLM_多模态部署与验证.md
它不写入 logs/daily_log.md,也不把 daily_log.md 作为本文档来源。本次已注册 SQLite 笔记、创建 Feishu Docs、投影到内容资产,并让正式笔记日历描述包含 Feishu Docs 链接。