[具身智能-653]:地平线 .bin 与 .hbm 模型文件完整对比 + 技术发展背景说明
前置重要定义
.bin:RT Model Bin,旭日 X3(Bayes 一代 BPU)部署最终模型文件.hbm:Horizon Binary Model,征程 5/J5、征程 6/J6、RDK X5(Bayes2/Nash 二代 BPU)部署最终模型文件
两者分属两代 BPU 架构产物,指令集完全隔离,文件不能跨芯片直接复用。
一、发展历史背景(理解两种格式诞生的根本原因)
1..bin的诞生背景(Bayes BPU / 旭日 X3 时代)
地平线第一代量产 BPU Bayes(旭日 X3、RDK X3),配套工具链hb_mapper V1。 工程痛点与设计取舍:
- 早期边缘 AI 开发者缺少编译链接工程化思想,追求极简部署流程;
- 工具链采用一体化单阶段编译链路: ONNX → 图优化 → PTQ 量化 → 算子切分 → BPU 微指令生成 → CPU fallback 算子嵌入 →一步输出 .bin
- 文件定位:独立封闭单模型包✅ 优势:上手简单,一条命令产出可用模型; ❌ 历史遗留缺陷:
- 一个 bin 只能存放单个神经网络;
- 多模型并发推理时,多个 bin 独立加载,公共骨干权重无法共享,DDR 内存占用高;
- 模型无法拆分、复用、增量更新;
- CPU fallback 算子直接打包进模型,耦合度极高;
- 不支持动态输入 shape、多 batch 高级特性。
适用平台:旭日 X3、RDK X3、X3Pi;Runtime:旧版
hb_dnnAPI。
2..hbm的诞生背景(Bayes2/Nash BPU / J5/RDK X5/J6)
随着大模型、多任务视觉方案(检测 + 跟踪 + 分类 + 分割)普及,.bin的架构短板凸显。地平线推出新一代工具链HBDK V2 / OE Toolchain V2,借鉴 C/C++「编译→链接」思想重构模型编译流程: 新增中间文件.hbo(Horizon Binary Object,模型目标文件) 完整链路:ONNX → convert → compile → 输出 .hbo(单模型目标文件,不可直接运行) → link 链接器 → 打包生成 .hbm
设计目标:
- 支持多模型打包,一个 hbm 内部容纳多个网络;
- 链接阶段自动识别共享权重(如多任务共用 Backbone),权重去重,降低内存占用;
- 模型模块化管理,支持单独编译、增量链接;
- 适配新一代 BPU 指令集,原生支持动态 shape、FP16 混合量化、更多硬件算子;
- 解耦模型与 CPU 算子,降低耦合。
适用平台:RDK X5、征程 5 (J5)、征程 6 (J6);Runtime:全新
hrt_runtime(HRT)API,与 hb_dnn 完全不兼容。
二、.bin VS .hbm 结构化对比表
表格
| 对比维度 | .bin(X3 系列) | .hbm(X5/J5/J6 系列) |
|---|---|---|
| 硬件载体 | Bayes 一代 BPU(旭日 X3/RDK X3) | Bayes2 / Nash BPU(RDK X5、J5、J6) |
| 工具链 | hb_mapper V1.x | HBDK 2.0+ / OE Toolchain V2.x |
| 编译链路 | 单阶段一体化编译hb_mapper makertbin | 两段式编译 + 链接compile → .hbo → link → .hbm |
| 文件本质 | 单模型独立运行时镜像 | 多模型容器(链接输出产物) |
| 模型容纳能力 | 仅支持单个网络 | 支持单个 / 多个网络封装 |
| 权重共享 | 不支持;多模型需加载多个 bin,权重重复 | 链接阶段自动合并共享权重,节省 DDR |
| 运行时 API | hb_dnn(旧一代接口) | hrt_runtime(全新 HRT 接口,互不兼容) |
| 动态 Shape | 支持能力弱,限制较多 | 原生完善支持动态输入尺寸 |
| 量化支持 | 以 INT8 为主,FP16 支持有限 | INT8 / FP16 混合量化,策略更丰富 |
| 模型拆分 | 不可拆分,整体打包 | 支持模块化编译、增量链接 |
| 跨平台兼容性 | 仅 X3 系列;无法在 X5 加载 | 仅 X5/J5/J6;无法在 X3 加载 |
| Fallback 算子 | CPU 算子直接嵌入 bin 文件,耦合高 | CPU 算子与模型文件解耦,灵活扩展 |
| Netron 支持 | 所有版本 Netron 均可打开 | 需要较新版本 Netron 解析 |
三、关键工程结论
- 不能直接转换:无法把 X3 的.bin 文件转换成 X5 可用的.hbm,必须使用新版工具链重新量化、编译;
- 项目选型原则
- 存量 RDK X3 旧项目:维持
.bin; - 新项目 RDK X5 / 征程 5/6:强制使用
.hbm;
- 存量 RDK X3 旧项目:维持
- 迁移成本模型重新编译 + C++ 推理代码全套 API 从 hb_dnn 迁移至 hrt_runtime;
四、常见误区澄清
- ❌ 误区:改后缀名就能跨芯片运行 ✅ 正解:内部 BPU 微指令集完全不同,修改后缀直接加载会初始化失败;
- ❌ 误区:
.hbo可以直接推理 ✅ 正解:.hbo只是编译中间目标文件,必须 link 打包为 hbm 才能被 runtime 加载; - ❌ 误区:.bin 里的校准 bin(calibration bin)= 推理模型 bin ✅ 正解:校准用 bin 是图像数组,和 BPU 推理模型.bin 是完全不同的两类文件。
