在RDK X5上部署官方Internvl2_5,为什么VIT模型跑在BPU,Qwen跑在CPU上?

我测试了一下,只有在处理某张图片的时候才会调用BPU?如果我想使用BPU加速,我该怎么办?

你好 @my-gao

你观察到的现象是完全正常的,这正是当前 RDK X5 部署 InternVL2_5 等多模态大模型(VLM)的标准架构。

核心结论

  1. 架构设计如此:在当前的官方部署方案中,ViT(视觉编码器)运行在 BPU 上,而 Qwen(语言解码器)运行在 CPU 上
  2. BPU 调用时机:BPU 在处理图像、进行视觉编码的瞬间被调用。一旦图像特征提取完成,后续的文本生成(推理)过程完全由 CPU 承担,因此你只会看到瞬间的 BPU 占用。
  3. 如何加速:目前无法直接将 Qwen 语言模型部分迁移到 BPU 上运行。加速的重点在于优化 CPU 性能和内存带宽。

详细原理解析

1. 为什么 ViT 在 BPU,Qwen 在 CPU?

这是由地平线 RDK 系列芯片的硬件特性和当前工具链支持决定的:

  • BPU (Brain Processing Unit):专为卷积神经网络(CNN)和 Transformer 中的视觉算子(如 Attention, Conv)高度优化。ViT 模型结构规整,算子固定,非常适合 BPU 加速。在 RDK X5 运行 vlm 模型 这个精华帖中,明确提到模型文件包含 vit_model_int16_v2.bin (BPU 模型) 和 Qwen2.5-0.5B-Instruct-Q4_0.gguf (CPU 模型)。
  • CPU:负责运行逻辑复杂、算子多样的语言模型。虽然 BPU 理论上能跑 LLM,但目前官方工具链对 LLM 的 BPU 部署支持有限(主要支持特定量化格式的特定模型),且 Qwen 这类模型在 llama.cpp 框架下主要依赖 CPU 推理。

2. 为什么感觉 BPU 没怎么工作?

  • 工作流程
    1. 输入图像ViT (BPU):耗时极短(毫秒级),提取图像特征向量。
    2. 特征向量 + 提示词Qwen (CPU):耗时较长(秒级),逐个 token 生成回答。
  • 现象:因为第一步太快,你可能只看到 BPU 占用率闪了一下,绝大部分时间都在等 CPU 慢慢“打字”。

如何优化/加速?

既然语言部分跑在 CPU 上,优化的核心就是释放 CPU 算力提高内存吞吐

方案一:调整 CPU 频率(最直接)

确保你的 X5 处于高性能模式。

# 查看当前频率模式
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# 设置为性能模式 (performance)
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

方案二:调整内存频率与大小

VLM 对内存带宽极其敏感。

  1. 增大 ION 内存:参考你使用的教程,使用 srpi-config 将 ION 内存调整到最大(如 2.5GB 或更高,视板卡而定),防止 Swap 交换。
  2. 开启 Fast Perf 模式:如果板卡支持,开启高性能模式会同时提升 DDR 频率。

方案三:量化语言模型(降低计算量)

你目前使用的应该是 Q4_0 (4bit 量化) 的 Qwen 模型。

  • 检查是否可以尝试更低精度的量化(如 Q2_K),但这会显著降低智商,通常不推荐。
  • 确认你加载的 gguf 文件确实是量化过的,而不是 fp16 版本。

方案四:减少线程数干扰

在运行命令中,--threads 参数非常关键。

  • 不要设置为 CPU 的总逻辑核心数。
  • 建议:设置为大核数量或略少。X5 通常有 4 个 A53 大核和 4 个 A53 小核(或类似配置)。尝试设置为 46 往往比 8 更快,因为过多的线程会导致上下文切换开销。
    # 尝试调整 threads 参数,例如设为 4
    ./build/bin/llama-intern2vl-bpu-cli ... --threads 4
    

总结与社区资源

  • 现状:Qwen 跑在 CPU 上是当前方案的限制,不是你的配置错误。
  • 未来:地平线正在逐步完善 LLM 的 BPU 工具链(参考社区中关于 hobot_llamacpp 的讨论),未来可能会有支持 BPU 加速语言部分的方案,但目前 InternVL2_5 的官方示例仍是混合架构。
  • 建议:参考社区精华帖 RDK X5 运行 vlm 模型 的评论区,有其他开发者关于“生成速度慢”的讨论,可以借鉴他们的参数调整经验。

一句话建议:把 CPU 频率拉到最高,ION 内存给够,--threads 设为 4 试试,别指望 BPU 能加速文字生成部分。

X5 BPU没办法跑,本质10T算力也难达到LLM推理的需求,推荐关注下S100和S600