环境部署
前言
地平线OpenExplorer目前同时提供了2套模型量化方案:
- PTQ:Post-training Quantization,训练后量化。
- QAT:Quantization aware training,量化感知训练(暂时只支持Pytorch框架)。
其中:
-
两套方案均不干预浮点模型的训练阶段,您需要自行负责。地平线也在
samples/ai_toolchain/horizon_model_train_sample路径下开源了一些分类/检测/分割等场景高效模型的公版Pytorch实现以供参考,并支持在宿主机上进行训练和复现。 -
对于PTQ方案,您需要在宿主机的开发环境完成模型的量化转换,再将编译生成的
.hbm模型拷贝至开发板环境完成后续的部署工作。 -
对于QAT方案,您则需要在宿主机的开发环境先完成模型的QAT训练,再进行量化转换,再将编译生成的
.hbm模型拷贝至开发板环境完成后续的部署工作。
两种量化方案以及高效模型的开发环境,地平线都提供了Docker容器和本地手动安装两种方式。 我们强烈建议您使用不污染本地环境且使用方便的Docker容器,以下也将分别对这两种方式进行介绍。
开发环境部署
开发机准备
为了顺利地使用工具链,地平线建议您选择的开发机应满足以下要求:
更多关于CUDA与显卡的兼容性问题请参考 NVIDIA官网信息 。
Docker容器部署
Docker基础环境
地平线要求的Docker基础环境如下,请提前在您的宿主机上完成安装:
- Docker(20.10.10或更高版本,建议安装20.10.10版本),详见 Docker安装手册 。
- NVIDIA Container Toolkit(1.13.5或更高版本,建议安装1.15.0),详见 NVIDIA Container Toolkit安装手册。
完成Docker基础环境安装后,还需要将无root权限的用户添加到Docker用户组中。参考命令如下:
获取本节需要使用的Docker镜像的地址如下:
镜像文件命名形式为:
-
GPU版本Docker:
openexplorer/ai_toolchain_ubuntu_22_j6_gpu:{version} -
CPU版本Docker:
openexplorer/ai_toolchain_ubuntu_22_j6_cpu:{version}
{version} 需替换为您获取到的版本号。
Docker镜像使用
为了帮助您快速使用工具链,我们提供了包含完整开发环境的Docker镜像,大大简化了开发环境的部署过程。
若您已下载离线镜像,需先使用下方命令将镜像加载到本地。
您可以在OE包的一级目录下直接运行以下脚本启动当前OE版本所对应的Docker容器(如果本地没有对应镜像,则脚本会自动从官方Docker hub拉取镜像):
其中, data 为评测数据集文件夹路径,请提前创建好后再运行命令,否则将导致加载问题。
若您想要使用CPU版本Docker镜像则需要增加 cpu 参数:
OE包示例所依赖的相关公开评测数据集的下载链接可参考 数据集下载 章节的介绍进行获取。
如果您希望手动启动Docker容器,可以参考下方命令,其中 {version} 为您当前所用的OE版本号。
为方便使用,我们为您提供了两种CPU Docker以及GPU Docker,可按需选择。
- 由于OE Docker镜像构建过程中配置了
PATH和LD_LIBRARY_PATH等环境变量的值,未使用推荐方式(如docker attach)进入容器可能会导致环境变量加载不正常从而导致Cmake、GCC、CUDA等工具使用异常。 - 若希望Docker容器退出后不销毁,请使用命令行
docker run -it手动启动,不要带上--rm选项。 - 若希望Docker容器启动后可在后台执行,请在命令行
docker run -it后增加-d选项,容器启动后会返回容器ID,此时可通过docker exec -it {容器ID} /bin/bash命令再次进入容器。
本地手动安装
本节将为您介绍本地手动安装环境方法,并分别介绍两种量化方案和地平线开源的高效模型训练的环境相关依赖及说明。 我们推荐您在浮点模型训练完成后优先选择简单易用的PTQ量化方案,只在精度问题确实无法解决时再切换到QAT量化方案。
本地手动安装环境方法
本地手动安装环境,仅需运行下方脚本,即可一键式完成环境安装。
安装脚本会自动检查相应的环境,缺少相应依赖或配置会中断安装过程。
根据建议补充依赖后,重新执行install脚本即可。
- 如需要生成板端可执行程序,则使用交叉编译工具
aarch64-none-linux-gnu-gcc和aarch64-none-linux-gnu-g++,版本为Arm GNU Toolchain 12.2.Rel1。 - 如需要生成X86仿真环境可执行程序,则使用
X86 gcc,如果修正建议指出是gcc/g++版本不符合要求,在安装完指定版本之后,您需要重新建立gcc和g++软链接为gcc-12.2.0和g++-12.2.0。 - 对于host端(x86)依赖的库,比如
isl,gmp,mpc,mpfr等,在lib/x86_64-linux-gnu下,如果编译报错,请在编译工程中通过LD_LIBRARY_PATH来指定。 - 如果编译过程中出现glibc库版本冲突的问题,例如:xxx@GLIBC_xxx的未定义符号的错误,请在编译工程中通过-rpath-link来指定到工具链的aarch64-none-linux-gnu/lib路径下,同时在编译工程中加上-lxxx, 例如:-lpthread。另外需要特别注意的是下图框起来的记录源文件的变量SRCS,最好放在
\${LIBS}链接库的前面,否则可能也会报未定义的符号。
- 安装脚本会自动检查相应的环境,缺少相应依赖或配置会中断安装过程,可以根据提示补充依赖,并重新执行install脚本。
- 脚本执行成功后,会在
~/.bashrc系统环境变量中添加Path等信息(环境变量LD_LIBRARY_PATH经常被使用,建议您检查环境变量是否符合预期),请执行source ~/.bashrc来使当前terminal的配置生效。 - torch版本应满足2.3.0+cu118,torchvision版本应满足0.18.0。
PTQ量化环境依赖
PTQ量化方案对于开发机操作环境的基础软件依赖如下:
- 操作系统:Ubuntu22.04
- Python3.10
- libpython3.10
- python3-devel
- python3-pip
- gcc&g++: 12.2.1
- graphviz
QAT量化环境依赖
QAT量化环境在本地环境进行安装,需要先确保已满足以下基础环境条件。 量化训练工具能够训练起来所必需的环境依赖如下表:
在完成QAT模型的训练后,您可以在当前训练环境安装相关工具包,并直接通过接口调用的方式完成后续的模型转换工作。
高效模型浮点训练环境说明
地平线在 samples/ai_toolchain/horizon_model_train_sample 路径下开源了一些高效模型源码,其浮点及QAT训练基础环境请参考 QAT量化环境依赖 。
运行环境部署
当模型完成量化转换后,即可将编译好的模型部署在开发板环境推理运行。运行环境的部署需要您先准备好一块烧写好系统镜像的 开发板,再将相关补充文件拷贝到开发板中即可。
开发板准备
此阶段需要验证下开发板的可用性,将可用系统镜像烧写到开发板中。
板端工具安装
工具链的部分补充工具未包含在系统镜像中,但可以在宿主机环境下执行OE包中的安装脚本将其拷贝至开发板,其参考命令如下:
其中, ${board_ip} 是您为开发板设置的IP地址,请确保在开发机上可以成功访问该IP。 补充文件成功安装后,请重新启动开发板,在开发板上执行 hrt_model_exec --help 即可验证安装是否成功。
