地平线OpenExplorer目前同时提供了2套模型量化方案:
其中:
两套方案均不干预浮点模型的训练阶段,您需要自行负责。
对于PTQ方案,您需要在宿主机的开发环境完成模型的量化转换,再将编译生成的 .hbm
模型拷贝至开发板环境完成后续的部署工作。
对于QAT方案,您则需要在宿主机的开发环境先完成模型的QAT训练,再进行量化转换,再将编译生成的 .hbm
模型拷贝至开发板环境完成后续的部署工作。
两种量化方案以及高效模型的开发环境,地平线都提供了Docker容器和本地手动安装两种方式。 我们强烈建议您使用不污染本地环境且使用方便的Docker容器,以下也将分别对这两种方式进行介绍。
为了顺利地使用工具链,地平线建议您选择的开发机应满足以下要求:
硬件/操作系统 | 要求 |
---|---|
CPU | CPU I3以上或者同级别E3/E5的处理器 |
内存 | 16G或以上级别 |
GPU | CUDA11.8、驱动版本Linux:>= 510.39.01* (推荐驱动版本Linux:520.61.05) 适配显卡包括但不限于: 1. GeForce RTX 3090 2. GeForce RTX 2080 Ti 3. NVIDIA TITAN V 4. Tesla V100S-PCIE-32GB 5. A100 |
系统 | 原生Ubuntu 22.04 |
更多关于CUDA与显卡的兼容性问题请参考 NVIDIA官网信息 。
地平线要求的Docker基础环境如下,请提前在您的宿主机上完成安装:
完成Docker基础环境安装后,还需要将无root权限的用户添加到Docker用户组中。参考命令如下:
为了帮助您快速使用工具链,我们提供了包含完整开发环境的Docker镜像,大大简化了开发环境的部署过程。
若您已下载离线镜像,需先使用下方命令将镜像加载到本地。
您可以在OE包的一级目录下直接运行以下脚本启动当前OE版本所对应的Docker容器:
其中, data
为评测数据集文件夹路径,请提前创建好后再运行命令,否则将导致加载问题。
若您想要使用CPU版本Docker镜像则需要增加 cpu
参数:
OE包示例所依赖的相关公开评测数据集的下载链接可参考 数据集下载 章节的介绍进行获取。
如果您希望手动启动Docker容器,可以参考下方命令,其中 {version}
为您当前所用的OE版本号。
为方便使用,我们为您提供了两种CPU Docker以及GPU Docker,可按需选择。
:::warning 注意
PATH
和 LD_LIBRARY_PATH
等环境变量的值,未使用推荐方式(如docker attach)进入容器可能会导致环境变量加载不正常从而导致Cmake、GCC、CUDA等工具使用异常。docker run -it
手动启动,不要带上 --rm
选项。docker run -it
后增加 -d
选项,容器启动后会返回容器ID,此时可通过 docker exec -it {容器ID} /bin/bash
命令再次进入容器。本节将为您介绍本地手动安装环境方法,并分别介绍两种量化方案和地平线开源的高效模型训练的环境相关依赖及说明。 我们推荐您在浮点模型训练完成后优先选择简单易用的PTQ量化方案,只在精度问题确实无法解决时再切换到QAT量化方案。
本地手动安装环境,可进入package/host文件夹,安装所需文件。
PTQ量化方案对于开发机操作环境的基础软件依赖如下:
QAT量化环境在本地环境进行安装,需要先确保已满足以下基础环境条件。 量化训练工具能够训练起来所必需的环境依赖如下表:
硬件/操作系统 | GPU | CPU |
---|---|---|
os | Ubuntu22.04 | Ubuntu22.04 |
cuda | 11.8 | N/A |
python | 3.10 | 3.10 |
torch | 2.3.0+cu118 | 2.3.0+cpu |
torchvision | 0.18.0+cu118 | 0.18.0+cpu |
推荐显卡 | titan v/2080ti/v100/3090 | N/A |
在完成QAT模型的训练后,您可以在当前训练环境安装相关工具包,并直接通过接口调用的方式完成后续的模型转换工作。
当模型完成量化转换后,即可将编译好的模型部署在开发板环境推理运行。运行环境的部署需要您先准备好一块烧写好系统镜像的开发板,再将相关补充文件拷贝到开发板中即可。
此阶段需要验证下开发板的可用性,将可用系统镜像烧写到开发板中。
工具链的部分补充工具未包含在系统镜像中,但可以在宿主机环境下执行OE包中的安装脚本并将其拷贝至开发板,其参考命令如下:
hrt_model_exec成功编译后,请将生成的output_shared_s100_aarch64拷贝到开发板的可写路径,运行script中的脚本即可使用该工具。