2.1. 环境部署¶
2.1.1. 前言¶
地平线OpenExplorer目前同时提供了2套模型量化方案:
PTQ:Post-training Quantization,训练后量化。
QAT:Quantization aware training,量化感知训练(暂时只支持Pytorch框架)。
其中:
两套方案均不干预浮点模型的训练阶段,您需要自行负责。地平线也在以下路径开源了一些分类/检测/分割等场景 高效模型的公版Pytorch实现以供参考,并支持在宿主机上进行训练和复现。
ddk/samples/ai_toolchain/horizon_model_train_sample
对于PTQ方案,您需要在宿主机的开发环境完成模型的量化转换,再将编译生成的
.bin
模型拷贝至开发板环境 完成后续的部署工作。对于QAT方案,您则需要在宿主机的开发环境先完成模型的QAT训练,再进行量化转换,再将编译生成的
.bin
模型 拷贝至开发板环境完成后续的部署工作。
两种量化方案以及高效模型的开发环境,地平线都提供了本地手动安装和Docker容器两种方式。我们优先推荐使用 不污染本地环境,且使用方便的Docker容器,以下也将分别进行介绍。
2.1.2. 开发环境部署¶
2.1.2.1. 开发机准备¶
为了顺利地使用工具链,地平线建议您选择的开发机应满足以下要求:
硬件/操作系统 |
要求 |
---|---|
CPU |
CPU I3以上或者同级别E3/E5的处理器 |
内存 |
16G或以上级别 |
GPU |
CUDA11、驱动版本Linux:>= 450.80.02* 适配显卡包括但不限于: 1)GeForce RTX 3090 2)GeForce RTX 2080 Ti 3)NVIDIA TITAN V 4)Tesla V100S-PCIE-32GB |
系统 |
Ubuntu 20.04 |
更多关于CUDA与显卡的兼容性问题请参考 NVIDIA官网信息 。
此外,嵌入式开发需要安装交叉编译工具,请从 ddk/package/host
目录下通过执行 resolve.sh
进行获取,并将其解压
到开发机的 /opt
目录下( 使用 Docker 可跳过此步骤 )。
解压命令如下:
tar xvf gcc-ubuntu-9.3.0-2020.03-x86_64-aarch64-linux-gnu.tar.xz
tar xvf gcc_linaro_6.5.0_2018.12_x86_64_aarch64_linux_gnu.tar.xz
另外您需要在环境中新增一个变量 LINARO_GCC_ROOT
,值为交叉编译器的完整路径,参考命令如下:
export LINARO_GCC_ROOT=/opt/gcc-ubuntu-9.3.0-2020.03-x86_64-aarch64-linux-gnu
export LINARO_GCC_ROOT=/opt/gcc-linaro-6.5.0-2018.12-x86_64_aarch64-linux-gnu
注解
环境变量 LINARO_GCC_ROOT
的设置路径需要与交叉编译工具解压的目录相同,否则会导致失败。
对于host端(x86)依赖的库,比如 isl,gmp,mpc,mpfr
等,在lib/x86_64-linux-gnu下,如果编译报错,
请在编译工程中通过LD_LIBRARY_PATH来指定。
如果编译过程中出现glibc库版本冲突的问题,例如:xxx@GLIBC_xxx的未定义符号的错误, 请在编译工程中通过-rpath-link来指定到工具链的aarch64-linux-gnu/lib路径下, 同时在编译工程中加上-lxxx, 例如:-lpthread。
另外需要特别注意的是下图框起来的记录源文件的变量SRCS,最好放在${LIBS}链接库的前面,不然也会报未定义的符号。
2.1.2.2. Docker容器部署¶
2.1.2.2.1. Docker基础环境¶
地平线要求的 Docker 基础环境如下,请提前在您的宿主机上完成安装:
Docker(19.03或更高版本,建议安装19.03版本),详见 Docker安装手册 。
NVIDIA Docker(2.1.0或更高版本,建议安装2.1.0版本),详见 NVIDIA Docker安装手册 。
完成 Docker 基础环境安装后,还需要将无 root 权限的用户添加到 Docker 用户组中。参考命令如下:
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo systemctl restart docker # Ubuntu
# re-login
获取本节需要使用的Docker镜像的地址如下:
镜像文件命名形式为:
GPU版本docker:
openexplorer/ai_toolchain_ubuntu_20_xj3_gpu:{version}
CPU版本docker:
openexplorer/ai_toolchain_ubuntu_20_xj3_cpu:{version}
小技巧
{version}需替换为您获取到的版本号。
2.1.2.2.2. Docker镜像使用¶
为了帮助用户快速使用工具链,地平线提供了包含完整开发环境的Docker镜像,大大简化了开发环境的部署过程。
注解
若您已下载离线镜像,需先使用下方命令将镜像加载到本地。
docker load -i docker_openexplorer_xxx.tar.gz
您可以在OE包的一级目录下直接运行以下脚本启动当前OE版本所对应的Docker容器(如果本地没有对应镜像,则脚本会自动从官方Docker hub拉取镜像):
sh run_docker.sh data
若您想要使用CPU版本Docker镜像则需要增加 cpu
参数:
sh run_docker.sh data/ cpu
OE包示例所依赖的相关公开评测数据集的下载链接为:
数据集 |
下载地址 |
下载结构 |
---|---|---|
ImageNet |
下载结构请您参考 ImageNet数据集参考结构 |
|
COCO |
下载结构请您参考 COCO数据集参考结构 |
|
VOC |
需要下载2007和2012两个版本,下载结构请您参考 VOC数据集参考结构 |
|
Cityscapes |
下载结构请您参考 Cityscapes数据集参考结构 |
|
CIFAR-10 |
下载结构请您参考 CIFAR-10数据集参考结构 |
如果您在数据准备过程中有遇到问题,可以前往 地平线开发者社区 发帖进行求助。
如果您希望手动启动Docker容器,也可以通过以下命令拉取对应的Docker镜像,其中{version}为您当前所用的OE版本号。
注解
为方便使用,我们为您提供了两种CPU Docker以及GPU Docker,可按需选择。
# CPU Docker
docker pull openexplorer/ai_toolchain_ubuntu_20_xj3_cpu:{version}
# GPU Docker
docker pull openexplorer/ai_toolchain_ubuntu_20_xj3_gpu:{version}
成功进入Docker容器后, 您可以键入 hb_mapper
命令验证是否能正常得到其帮助信息,该工具是工具链的重要工具,
将在后文的 hb_mapper 工具 章节对其进行详细介绍。
2.1.2.3. 本地手工安装¶
本节将分别介绍两种量化方案和地平线开源的高效模型训练所依赖的环境部署方法。我们推荐您在浮点模型训练完成后优先 选择简单易用的PTQ量化方案,只在精度问题确实无法解决时再切换到QAT量化方案。
2.1.2.3.1. PTQ量化环境部署¶
PTQ量化方案对于开发机操作环境的基础软件依赖如下:
操作系统:Ubuntu20.04
Python3.8
libpython3.8
python3-devel
python3-pip
gcc&c++: 5.4.0
graphviz
在确认满足以上条件后,即可进行工具链依赖安装。因为其中包含一系列内部工具,所以OE包提供了脚本文件 来打包所有的安装过程以简化流程,可参考以下命令执行:
cd ddk/package/host/ai_toolchain
bash install_ai_toolchain.sh
安装脚本会自动检查相应的环境,缺少相应依赖或配置会中断安装过程,并给出修正建议如下图。
根据建议补充依赖后,重新执行install脚本即可。
注意
如果修正建议指出是gcc/g++版本不符合要求,在安装完指定版本之后,您需要重新建立gcc和g++软链接为gcc-5.4.0和g++-5.4.0。
在顺利完成install脚本后,您可以键入 pip show horizon_nn
and pip show horizon_tc_ui
命令验证下模型转换工具是否被正确安装。
2.1.2.3.2. QAT量化环境部署¶
QAT量化环境在本地环境进行安装,需要先确保已满足以下基础环境条件。 量化训练工具能够训练起来所必需的环境依赖如下表:
硬件/操作系统 |
gpu |
cpu |
---|---|---|
os |
Ubuntu20.04 |
Ubuntu20.04 |
cuda |
11.1 |
N/A |
python |
3.8 |
3.8 |
torch |
1.10.2+cuda-11.1 |
1.10.2+cpu |
torchvision |
0.11.3+cuda-11.1 |
0.11.3+cpu |
推荐显卡 |
titan v/2080ti/ v100/3090 |
N/A |
在完成QAT模型的训练后,我们可以选择以下两种路径完成后续的模型转换工作:
路径1:先导出onnx模型,再基于PTQ(Post Training Quantization,训练后量化)路线通过yaml文件完成模型转换。
路径2:在当前训练环境安装相关工具包,并直接通过接口调用的方式完成模型转换。
对于路径1,我们建议直接使用地平线提供的Docker。
对于路径2,我们可以通过运行以下脚本完成算法工具链的环境配置。
cd ddk/package/host/ai_toolchain
bash install_ai_toolchain.sh
注解
安装脚本会自动检查相应的环境,缺少相应依赖或配置会中断安装过程,可以根据提示补充依赖,并重新执行install脚本。
脚本执行成功后,会在
~/.bashrc
系统环境变量中添加Path等信息,请执行source ~/.bashrc
来使当前terminal的配置生效。torch 版本应满足 1.10.2,torchvision版本应满足0.11.3。
2.1.3. 运行环境部署¶
当模型完成量化转换后,即可将编译好的模型部署在开发板环境推理运行。运行环境的部署需要您先准备好一块烧写好系统镜像的 开发板,再将相关补充文件拷贝到开发板中即可。
2.1.3.1. 开发板准备¶
此阶段需要验证下开发板的可用性,将可用系统镜像烧写到开发板中。具体过程请参考 系统镜像升级 章节内容。
2.1.3.2. 板端工具安装¶
工具链的部分补充工具未包含在系统镜像中,但可以在宿主机环境下执行OE包中的安装脚本 将其拷贝至开发板,其参考命令如下:
cd ddk/package/board
bash install.sh ${board_ip}
注解
其中,${board_ip}
是您为开发板设置的IP地址,请确保在开发机上可以成功访问该IP。
补充文件成功安装后,请重新启动开发板,在开发板上执行 hrt_model_exec --help
即可验证安装是否成功。