结论
4秒左右完成一次图像描述(InterVL-1B 在 S100 上)属于可接受范围,但有优化空间。 多模态大模型的耗时包含「视觉编码 + 文本生成」两个阶段,4秒通常意味着生成了较多 token 或配置未完全优化。
关键判断依据
1. 耗时构成分析
InterVL 图像描述流程:
图像输入 → 视觉编码器(ViT) → 特征对齐 → LLM 解码 → 文本输出
↓ ↓ ↓ ↓ ↓
预处理 ~0.5-1s ~0.2s ~2-3s 后处理
- 视觉编码部分:BPU 加速后约 0.5-1 秒
- 文本生成部分:取决于生成 token 数量,约 20-50 tokens 需 2-3 秒
2. 性能参考基准
| 配置 | 预期耗时 | 说明 |
|---|---|---|
| INT8 量化 + BPU | 2-4 秒 | 官方推荐配置 |
| FP16 + BPU | 4-6 秒 | 未量化 |
| CPU 推理 | 10 秒+ | 不推荐 |
排查与优化步骤
步骤 1:确认使用官方 LLM Toolchain
参考官方文档:LLM Toolchain 使用手册(第七章节)
# 检查是否使用官方工具链
which oellm_run
# 查看工具链版本
oellm_run --version
步骤 2:检查模型量化状态
# 查看模型文件
ls -lh /path/to/your/model/
# 确认是否为 int8 量化模型
# 官方 Model Zoo 路径参考:
# /opt/horizon/hbrt/model_zoo/llm/
步骤 3:测试纯推理性能(不含后处理)
# 使用 oellm_run 测试
oellm_run -m your_model.hbm -i input.jpg -n 10 --prompt "描述这张图片"
# 查看各阶段耗时
hb_profiler --detail
步骤 4:优化生成参数
# 在推理代码中调整生成参数
generation_config = {
"max_new_tokens": 30, # 限制生成长度(默认可能50+)
"temperature": 0.7, # 降低采样温度
"do_sample": False # 使用贪心解码更快
}
步骤 5:降低输入分辨率
# 视觉编码器输入分辨率优化
image = cv2.resize(image, (448, 448)) # 尝试 224 或 448
需要补充的信息
为了更准确判断是否异常,请提供:
- 生成 token 数量:每次描述生成多少字/token?
- 模型来源:官方 Model Zoo 还是自行转换?
- 推理命令/代码:使用的具体示例或脚本?
- 完整耗时分布:视觉编码 vs 文本生成各占多少?
相关资源
建议参考以下社区帖子获取优化经验:
- RDK S100 运行 vlm 模型 - InternVL 部署案例
- RDK-OE-LLM 工具链量化全流程 - 量化优化指南
- RDK s100p 跑 llm 大语言模型,可以使用 bpu 算力吗 - BPU 使用说明
快速验证方法
如果方便,请运行以下命令对比性能:
# 1. 测试官方示例(如有)
cd /opt/horizon/hbrt/model_zoo/llm/
python sample_interVL.py --image test.jpg
# 2. 对比耗时
time python your_script.py
如果优化后仍超过 4 秒,建议:
- 在本帖补充上述信息
- 查看官方 LLM 手册第七章节的性能指标
- 联系技术支持确认当前工具链版本的性能基线