2.1. 环境部署

地平线在 ddk/samples/ai_toolchain/horizon_model_train_sample 路径下开源了一些高效分类/检测/分割等模型的 Pytorch 实现,并提供了配套的浮点模型训练 & QAT(Quantization aware training,量化感知训练)训练环境,以帮助用户能够更加便捷地完成代码复现。 针对环境部署,地平线除了 Docker 容器外,也提供了本地部署的 whl 包以供选择使用。

2.1.1. 模型训练环境

2.1.1.1. Docker 环境部署

目前,地平线提供的 Docker 已经为您预装了 torch==1.9.1+cu111 的浮点模型训练环境,可以通过一级目录下的脚本直接启动容器:

sh run_docker.sh data
  • data 为数据集文件目录,如果该目录不存在,将会导致加载问题,需要先创建好后再运行命令。

  • 上述命令将 OE 包进行了挂载,如果您自行启动容器,则也需要先对应进行OE 包和数据集的挂载。

2.1.1.2. 本地环境部署

除 Docker 方式外,我们也支持在宿主机环境上直接进行安装,请参考以下命令:

cd ddk/samples/ai_toolchain/horizon_model_train_sample
pip3 install horizon_hat-{version1}+openexplore{version2}.float-py3-none-any.whl

注解

  1. torch 版本应满足 1.9.1;

  2. 安装中若出现某些库不满足条件或版本不一致,请根据报错信息进行修改后重新执行安装命令即可。

2.1.2. PTQ必要环境准备

本节介绍使用工具链的必要环境准备工作,包含 开发机部署开发板部署 两个部分。

2.1.2.1. 开发机部署

对于开发机的环境部署,地平线支持使用Docker和手工安装两种方式,您只需要选择其中一种即可。

提示

地平线强烈建议您使用Docker方式,以避免在安装过程中出现问题。

2.1.2.1.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

系统

CentOS 7、Ubuntu 18.04

更多关于CUDA与显卡的兼容性问题请参考 NVIDIA官网信息

此外,嵌入式开发需要安装交叉编译工具,请从 /ddk/tools 目录下获取:

ddk/tools
├── gcc-ubuntu-9.3.0-2020.03-x86_64-aarch64-linux-gnu.tar.xz

并将其解压到开发机的 /opt 目录下。

注意

若您在Centos环境下使用,请在解压后手动执行setenv.sh来支持交叉编译工具链的使用, 若您的环境为Ubuntu,则无需执行此步。

另外您需要在环境中新增一个变量 LINARO_GCC_ROOT,值为交叉编译器的完整路径,参考如下:

export LINARO_GCC_ROOT=/opt/gcc-ubuntu-9.3.0-2020.03-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}链接库的前面,不然也会报未定义的符号。

../../../_images/gcc_SRCS.png

2.1.2.1.2. 使用Docker

为了帮助您快速使用工具链提供的模型处理方案,地平线提供了包含完整开发环境的Docker镜像,大大简化了环境部署过程。

在阅读此部分内容前,我们希望您的开发机中已经预装好了Docker的基础环境。 地平线要求的Docker基础环境信息如下:

完成Docker环境安装后,需要将无root权限的用户添加到Docker用户组中。参考如下命令:

sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo systemctl restart docker  # Ubuntu
# re-login

请从 地平线天工开物 docker hub 获取最新的Docker镜像。 镜像文件命名形式为 openexplorer/ai_toolchain_centos_7_j5:{version}

注解

执行命令时将 {version} 替换为您获取到的版本号。

每个镜像文件在第一次使用前,需要拉取镜像,命令如下:

docker pull openexplorer/ai_toolchain_centos_7_j5:{version}

下载天工开物发布包(下称OE包,OE即OpenExplorer的缩写)和评测数据集:

# 下载OE包
wget ftp://vrftp.horizon.ai/Open_Explorer/{version}/horizon_j5_open_explorer_{version}_{date}.tar.gz
# 下载评测数据集,此处以cifar-10数据集为例
wget ftp://vrftp.horizon.ai/Open_Explorer/eval_dataset/cifar-10.tar.gz
# 解压OE包和评测数据集
tar -vxf horizon_j5_open_explorer_{version}_{date}.tar.gz
tar -vxf cifar-10.tar.gz

注解

  1. 执行上述命令时,请将 {version}{date} 替换为最新的版本,详情咨询地平线技术团队。

  2. 评测数据集地址为: vrftp.horizon.ai/Open_Explorer/eval_dataset。目前包含以下数据集:

/Open_Explorer/eval_dataset
├── VOC.tar.gz
├── imagenet.tar.gz
├── coco.tar.gz
├── cityscapes.tar.gz
└── cifar-10.tar.gz
# 将目录切换至解压后的OE包
cd horizon_j5_open_explorer_{version}_{date}
# 创建data路径,并将上面解压缩后的评测数据集(此处仍以cifar-10为例)放到data路径下
mkdir data
mv cifar-10/ data
# 运行该路径下的run_docker.sh脚本,并显式挂载解压后的cifar-10数据集
sh run_docker.sh data

注解

  • data 为数据集文件目录,如果该目录不存在会导致加载问题,需要创建好后再运行命令。

  • 上述命令将OE包进行了挂载,如您自行启动,则需要先进行OE包的挂载。

至此,您就已经成功通过Docker镜像进入了完整的工具链开发环境。 您可以键入 hb_mapper 命令验证下是否可以正常得到帮助信息,hb_mapper 是工具链的一个常用工具, 在后文的模型转换部分对其有详细介绍。

2.1.2.1.3. 手工安装环境

在执行手动安装前,我们希望您的操作环境满足如下软件环境要求:

  • 操作系统: CentOS7 或者 Ubuntu18.04

  • Python3.6

  • libpython3.6

  • python3-devel

  • python3-pip

  • gcc&c++: 5.4.0

  • graphviz

确认满足以上条件后,手工安装过程需要您完成 AI工具安装

AI工具安装:

AI工具安装涉及到系列内部工具安装,OE包中已经将安装过程打包为一个安装脚本。 在发布包中进入到 ddk/package/host,执行以下命令启动安装:

bash install.sh

安装脚本会自动检查相应的环境,缺少相应依赖或配置会中断安装过程,并给出修正建议如下图。

../../../_images/ai_tool_installation.png

根据建议补充依赖后,重新执行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.2. 开发板部署

开发板部署需要您先准备好一块烧写好系统镜像的开发板,再将相关补充文件拷贝到开发板中即可。

2.1.2.2.1. 开发板准备

此阶段需要验证下开发板的可用性,将可用系统镜像烧写到开发板中。 具体过程请参考 系统镜像升级 章节内容。

2.1.2.2.2. 补充文件准备

工具链的部分补充工具未包含在系统镜像中,这些工具已经放置在OE包中, 进入到 ddk/package/board 执行install脚本即可。 执行命令如下:

bash install.sh ${board_ip}

注解

其中,${board_ip} 是您为开发板设置的IP地址,请确保在开发机上可以访问该IP。 成功安装后,重新启动开发板,在开发板上执行 hrt_model_exec --help 可以验证安装是否成功。

2.1.3. QAT必要环境准备

2.1.3.1. Docker 环境部署

目前地平线提供的Docker已经预装好Pytorch QAT训练相关的依赖包,您可参考模型训练环境中的 docker环境部署 章节的相关说明, 直接启用 Docker 容器即可。

2.1.3.2. 本地环境部署

如果您选择在本地环境进行安装,则需要先确保已满足以下基础环境条件。

量化训练工具能够训练起来所必需的环境依赖如下表:

硬件/操作系统

cuda-10.2

cuda-11.1

cpu

os

centos7

centos7

centos7

cuda

10.2

11.1

None

python

3.6.8

3.6.8

3.6.8

torch

1.10.2+cuda-10.2

1.10.2+cuda-11.1

1.10.2+cpu

torchvision

0.11.3+cuda-10.2

0.11.3+cuda-11.1

0.11.3+cpu

推荐显卡

titan xp/titan x/ 1080ti/titan v /2080ti/v100

titan v/ 2080ti/ v100/3090

None

在完成QAT模型的训练后,我们可以选择以下两种路径完成后续的模型转换工作:

路径1:先导出onnx模型,再基于PTQ(Post Training Quantization,训练后量化)路线通过yaml文件完成模型转换。

路径2:在当前训练环境安装相关工具包,并直接通过接口调用的方式完成模型转换。

对于路径1,我们建议直接使用地平线提供的Docker。

对于路径2,我们可以通过运行以下脚本完成AI工具链的环境配置。

cd ddk/package/host/
bash install_ai_toolchain.sh

注解

  • 安装脚本会自动检查相应的环境,缺少相应依赖或配置会中断安装过程,可以根据提示补充依赖,并重新执行install脚本。

  • 脚本执行成功后,会在 ~/.bashrc 系统环境变量中添加Path等信息,请执行 source ~/.bashrc 来使当前terminal的配置生效。