结论
不能完全只使用 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 | ViT 已在 BPU 上运行 | |
| LLM 文本生成用 BPU | 需使用 LLM Toolchain 且模型需特殊量化 | |
| 完全不用 CPU | CPU 负责调度、预处理、后处理等必要任务 |
下一步行动
- 确认输入分辨率:是否对 1920x1080 直接推理?
- 检查代码:是否使用官方示例?预处理是否有优化空间?
- 更新系统:确保使用最新固件和工具链
- 性能分析:使用
hb_profiler定位耗时瓶颈
如需进一步帮助,请提供:
- 使用的具体推理代码/脚本
hb_profiler --detail输出- 系统版本信息