大模型速度问题

结论

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

需要补充的信息

为了更准确判断是否异常,请提供:

  1. 生成 token 数量:每次描述生成多少字/token?
  2. 模型来源:官方 Model Zoo 还是自行转换?
  3. 推理命令/代码:使用的具体示例或脚本?
  4. 完整耗时分布:视觉编码 vs 文本生成各占多少?

相关资源

建议参考以下社区帖子获取优化经验:


快速验证方法

如果方便,请运行以下命令对比性能:

# 1. 测试官方示例(如有)
cd /opt/horizon/hbrt/model_zoo/llm/
python sample_interVL.py --image test.jpg

# 2. 对比耗时
time python your_script.py

如果优化后仍超过 4 秒,建议:

  1. 在本帖补充上述信息
  2. 查看官方 LLM 手册第七章节的性能指标
  3. 联系技术支持确认当前工具链版本的性能基线