大模型速度问题

结论

不能完全只使用 BPU 而不使用 CPU,这是由当前 InterVL 多模态大模型的架构设计决定的。


为什么 CPU 占用高?

当前架构设计

InterVL 多模态大模型的推理流程:

图像输入 → 视觉编码器(ViT) → 特征对齐 → LLM 文本生成 → 输出
    ↓            ↓              ↓           ↓
  CPU预处理    BPU 加速       CPU        CPU 解码
模块 运行位置 说明
视觉编码器 (ViT) BPU 已加速
特征对齐/投影 CPU 需要 CPU 计算
LLM 文本生成 CPU 当前主要瓶颈
预处理/后处理 CPU 图像 resize、编码等

参考社区讨论


你的情况分析

BPU 13% + CPU 100% + 耗时 8-16 秒 偏慢,可能原因:

1. 输入分辨率过高

# 1920x1080 直接输入会导致预处理耗时剧增
# 建议在输入前 resize 到 448x448 或 224x224

2. 预处理代码未优化

检查是否有以下问题:

  • 重复的图像格式转换(NV12 → RGB → BGR)
  • 未在 BPU 上做 resize(使用了 CPU resize)
  • 同步阻塞式推理(未使用异步流水线)

3. 系统/工具链版本

# 检查系统版本
cat /etc/version

# 检查 LLM 工具链版本
oellm_run --version

优化建议

步骤 1:降低输入分辨率

# 在送入模型前 resize
import cv2
image = cv2.resize(image, (448, 448))  # 或 224x224

步骤 2:使用 BPU resize(如果支持)

# 使用地平线 BPU 接口进行图像预处理
# 参考:hb_vio_resize 或相关 BPU 预处理接口

步骤 3:检查推理代码

确认是否使用了官方推荐的示例代码:

# 参考官方示例路径
/opt/horizon/hbrt/model_zoo/llm/

步骤 4:性能分析

# 使用 profiler 查看各阶段耗时
hb_profiler --detail

# 或使用 Chrome Trace 分析
# 参考:[Chrome Trace 使用指南](/t/topic/28090)

步骤 5:更新系统

管理员提到「最新版本系统 + 能 run 起来表现就是正常的」,建议:

# 检查是否有系统更新
# 参考官方固件发布页面

关于「只用 BPU」的说明

需求 可行性 说明
视觉编码器用 BPU :white_check_mark: 已支持 ViT 已在 BPU 上运行
LLM 文本生成用 BPU :warning: 部分支持 需使用 LLM Toolchain 且模型需特殊量化
完全不用 CPU :cross_mark: 不可能 CPU 负责调度、预处理、后处理等必要任务

下一步行动

  1. 确认输入分辨率:是否对 1920x1080 直接推理?
  2. 检查代码:是否使用官方示例?预处理是否有优化空间?
  3. 更新系统:确保使用最新固件和工具链
  4. 性能分析:使用 hb_profiler 定位耗时瓶颈

如需进一步帮助,请提供:

  • 使用的具体推理代码/脚本
  • hb_profiler --detail 输出
  • 系统版本信息