3. 环境准备

地平线模型转换流程对运行环境有较强的约束:它并不是一个“装完 Python 包就能跑”的纯软件工具,而是由 Python 转换前端、模型编译工具链、量化校准依赖 与 目标芯片运行时 共同组成的链路。环境准备的目标,是让这四层在同一台开发机上形成一致的版本组合,从而保证 ONNX 模型能够顺利经过解析、量化、编译,最终产出可部署的 .hbm 或 .bin 模型。

一、核心原理:环境是一条“版本对齐链”

模型转换失败,绝大多数原因并不在模型本身,而在环境版本错位。地平线工具链的各个组件之间存在明确的依赖方向:

  • 操作系统层:官方推荐 Ubuntu 20.04 LTS,内核与 glibc 版本会影响工具链二进制能否加载。
  • Python 层:转换脚本依赖 Python 3.8/3.10,且 numpy、onnx、torch 版本需与工具链内部接口匹配。
  • 工具链层:hb_mapper、hb_model_verifier、hb_compile 等命令由 OpenExplorer 工具包提供,版本号必须与芯片平台(如 X3、J5、征程 5)对应。
  • 运行时层:板端 libhbucp、libhbrt 与编译产物必须同源,否则模型加载会报版本不匹配。

因此,环境准备的本质不是“装软件”,而是锁定一套经过验证的版本组合,并让它在开发机与板端保持一致。

地平线模型转换环境依赖链 四层版本必须对齐,任一错位都会导致转换或部署失败 ① 操作系统层 Ubuntu 20.04 LTS · glibc ≥ 2.31 · 内核 5.4+ · 磁盘 ≥ 50GB 系统兼容性基线 ② Python 依赖层 Python 3.8 / 3.10 · numpy 1.23 · onnx 1.12 · torch 1.13 · opencv-python 虚拟环境隔离 ③ 工具链层(OpenExplorer) hb_mapper · hb_model_verifier · hb_compile · hb_perf · 版本需匹配芯片平台 版本号即平台号 ④ 板端运行时层 libhbucp · libhbrt · hbplayer · 与编译产物同源,否则加载失败 同源一致性校验 版本对齐方向

二、方法流程:从零搭建可复现环境

推荐使用 Conda 虚拟环境 + 官方 Docker 镜像 双轨策略:日常调试用 Conda,保证依赖干净;批量转换或交付时用 Docker,保证环境可复现。

# 1. 创建独立虚拟环境
conda create -n horizon_oe python=3.8 -y
conda activate horizon_oe

# 2. 安装基础依赖(版本需与工具链文档一致)
pip install numpy==1.23.5 onnx==1.12.0 onnxruntime==1.14.1
pip install torch==1.13.1 torchvision==0.14.1 --index-url https://download.pytorch.org/whl/cpu
pip install opencv-python==4.8.0.74 pyyaml tqdm

# 3. 获取并安装 OpenExplorer 工具链
tar -xzf horizon_j5_openexplorer_v1.2.8.tar.gz
cd horizon_j5_openexplorer_v1.2.8
bash install.sh --install-path /opt/horizon

# 4. 配置环境变量
export PATH=/opt/horizon/bin:$PATH
export LD_LIBRARY_PATH=/opt/horizon/lib:$LD_LIBRARY_PATH

# 5. 验证工具链可用性
hb_mapper --version
hb_model_verifier --help

安装完成后,务必执行一次“最小闭环验证”:用一个已知可转换的 ONNX 模型跑通 hb_mapper 全流程,确认解析、量化、编译、验证四个阶段均无报错,再进入正式项目。

三、版本匹配对照表

组件 推荐版本 匹配对象 错配后果
Ubuntu 20.04 LTS 工具链二进制 glibc 报错,命令无法启动
Python 3.8 / 3.10 hb_mapper 前端 语法或 C 扩展加载失败
numpy 1.23.x 量化校准模块 数组接口不兼容,量化中断
onnx 1.12.0 模型解析器 算子解析失败或图结构误读
OpenExplorer 与芯片平台一致 目标芯片 编译产物无法在板端加载
板端运行时 与工具链同源 编译产物 模型加载报版本不匹配

四、常见环境问题与排障

典型误区:很多开发者认为“只要 pip install 成功,环境就没问题”。实际上,工具链的二进制命令依赖系统级动态库,pip 无法覆盖这部分依赖,必须通过官方安装脚本或 Docker 镜像解决。
  • 问题一:hb_mapper: command not found —— 环境变量未生效。检查 PATH 是否包含工具链 bin 目录,并确认安装脚本执行时没有中途报错。
  • 问题二:ImportError: libxxx.so not found —— 动态库缺失。使用 ldd 检查命令依赖,补齐 LD_LIBRARY_PATH 或安装对应系统库。
  • 问题三:量化阶段报 numpy version mismatch —— 虚拟环境中存在多个 numpy 版本。用 pip list | grep numpy 确认,必要时重建环境。
  • 问题四:编译成功但板端加载失败 —— 工具链与板端运行时不同源。核对两者版本号,重新获取匹配的运行时库。
  • 问题五:ONNX 解析报未知算子 —— 并非环境问题,而是算子集版本过高。可尝试降低 opset 或使用工具链支持的算子替换。
复盘建议:把环境搭建过程写成 setup.sh 脚本并纳入版本管理,记录每个依赖的确切版本号。这样在新机器或团队协作时,可以一键复现,避免“我这能跑,你那不行”的经典问题。

环境准备完成后,建议立即执行一次 hb_mapper --version 与 hb_model_verifier --help 的双重确认,并保存输出日志作为环境基线。只有环境基线稳定,后续的模型解析、量化校准与编译部署才具备可重复性,模型转换流程才能真正进入可控状态。