关于 VideoMAEv2 适配与 BPU 利用率为 0 的问题
结论
VideoMAEv2 目前官方 Model Zoo 未提供 S100P 的预编译 HBM 模型,需要自行转换。BPU 利用率为 0 说明模型实际在 CPU 上运行,未成功调用 BPU 加速。
BPU 利用率为 0 的核心原因
| 可能原因 | 概率 | 排查方法 |
|---|---|---|
| 模型未正确转换为 HBM 格式 | 高 | 检查是否有 .hbm 文件 |
| 算子不支持 BPU,回退 CPU | 高 | 查看 hb_compile 日志中的算子分布 |
| 量化参数错误(如 FP16) | 高 | S100P BPU 仅支持 INT8 |
| 推理调用方式错误 | 中 | 检查是否使用 hrt_model_exec 或正确 API |
| 输入数据格式不匹配 | 中 | 检查 NV12/NHWC 格式 |
排查步骤
确认模型转换状态
# 检查是否有 HBM 文件
ls -lh *.hbm
# 查看编译日志中的算子分布
hb_compile --config your_config.yaml 2>&1 | grep -E "BPU|CPU"
关键点:如果日志显示大部分算子在 CPU 上运行,说明模型未成功映射到 BPU。
检查量化配置
# 正确的 S100P 量化配置示例
quantization:
data_type: "int8" # ⚠️ 不能用 float16
calibration_method: "minmax"
注意:从社区案例看,S100P 设置 float16 会导致所有算子回退到 CPU(参考 S100/S100P ONNX 算子 BPU 约束)。
验证推理调用
# 正确的板端推理命令
hrt_model_exec --model your_model.hbm --input input.nv12
# 同时监控 BPU 状态(新开一个终端)
hrut_somstatus # 观察 ratio 是否变化
检查 VideoMAEv2 特殊算子
VideoMAEv2 包含大量 Transformer/Attention 算子,需确认:
MultiHeadAttention是否支持 BPULayerNorm、GELU等激活函数是否有 BPU 实现- 时序建模部分(3D 卷积/Temporal Attention)是否兼容
参考社区讨论:关于征程 S100 BPU 对 Transformer 算子支持的需求
VideoMAEv2 适配建议
方案 A:使用官方 LLM 工具链(推荐)
VideoMAEv2 属于视频理解模型,可参考 VLM 部署方案:
- 参考 SmolVLM 部署案例
- 将 VideoMAEv2 的视觉编码器部分单独转换为 HBM
- 时序处理部分可能需要 CPU 辅助
方案 B:算子级优化
# 伪代码:分离 BPU/CPU 计算
def inference(video_frame):
# BPU 部分:空间特征提取
features = bpu_model.run(frame) # ViT backbone
# CPU 部分:时序建模(如不支持 BPU)
temporal_features = cpu_temporal_model(features)
return classification_result
方案 C:简化模型
- 使用 VideoMAEv2 的 Base/Small 版本而非 Large
- 降低输入分辨率(如 224x224 而非 448x448)
- 移除不必要的后处理算子
快速验证脚本
#!/bin/bash
# 检查 BPU 是否真正被调用
echo "=== 1. 检查 HBM 文件 ==="
ls -lh *.hbm
echo "=== 2. 查看模型元信息 ==="
hrt_model_info --model your_model.hbm
echo "=== 3. 启动推理(后台) ==="
hrt_model_exec --model your_model.hbm --loop 100 &
PID=$!
echo "=== 4. 监控 BPU 状态(5 秒) ==="
for i in {1..5}; do
hrut_somstatus | grep -E "BPU|ratio"
sleep 1
done
kill $PID
下一步行动
- 提供你的转换日志:将
hb_compile的完整输出发到帖子中,我可以帮你分析哪些算子未映射到 BPU - 确认模型来源:你是直接从 HuggingFace 转换,还是已有 ONNX 中间格式?
- 测试官方模型:先跑通 Model Zoo 中的 YOLO 模型,确认 BPU 调用链路正常
建议:VideoMAEv2 的 Transformer 架构在 S100P 上可能遇到算子支持问题,可以考虑先用 InternVL 或 SmolVLM 等已有适配案例的模型验证流程,再迁移到 VideoMAEv2。
需要我帮你查找 VideoMAEv2 的具体转换配置示例吗?