地平线【OpenExplorer天工开物】开发平台
1. 简介
- OpenExplorer:天工开物AI开发平台,它主要由以下内容组成:
- AI Toolchain工具链
- AI Express 应用开发中间件
- AI Solution应用参考解决方案
- 系统软件
2. AI芯片工具链
- 它重点是解决如何在地平线芯片上完成深度神经网络模型的训练、转换以及模型部署问题
- AI芯片工具链核心:采用了模型量化技术来实现深度神经网络模型的计算加速
- 深度神经网络模型量化属于一种深度神经网络的性能优化技术,它通过降低权重和激活值的精度来减小存储&计算量,进而实现芯片级别的计算加速。 非量化场景下,模型权重和激活值都为Float 32bit,通过量化为16bit,8bit,4bit,可以成倍的减小计算量
- 常见有16bit,8bit,4bit等量化方案,目前地平线XJ2/XJ3采用8bit量化方案
- 地平线量化工具链主要包括两套:
- 量化训练工具链:QAT(Quantification Aware Training)量化感知训练
- 浮点转定点工具链:PTQ(Post-Training Quantization)后量化转换
2.1 量化训练方案
- 量化训练方案即量化感知训练方案,支持在模型训练过程中,直接训练出量化模型。地平线量化训练方案是基于社区训练框架的基础上进行开发。 XJ3芯片支持Mxnet Gluon,Tensorflow两套框架,J5芯片支持Pytorch框架,预计2021年下半年也会针对XJ3芯片支持Pytorch框架。
- 针对每种框架,采用量化Plugin插件+Vision算法包+ModelZoo模型仓库的组合方案进行产品交付。以Tensorflow量化训练工具链为例:
- 经过量化训练工具链生成的模型还仅仅是量化模型,比如tensorflow量化训练工具训练后生成的是 PB格式 量化模型,在部署到地平线芯片之前,需要使用 HBDK芯片编译器工具链 对模型进行编译, 将PB格式模型转换为指令集模型(文件后缀名为.hbm)。
- HBDK芯片编译器工具链是一套命令行工具集合,其中以hbdk-cc编译器为主,支持将量化训练的定点模型,编译成HBM指令集文件,进而可以在地平线AI芯片中进行部署。 同时提供了hbdk-pack模型打包工具链支持将多个HBM指令集文件进行打包,简化上板部署。另外围绕模型静态评测,模型X86仿真评估以及模型一致性验证工具,提供了hbdk-perf,hbdk-sim和hbdk-model-verfier工具集。
- 量化训练的定点模型(PB格式)==> 指令集模型(.hbm)
- 上图中的工具说明:
- hbdk-cc:将模型(MXNet/TensorFlow)编译成模型库文件(.hbm)
- hbdk-pack:将一个或多个模型库文件(.hbm)打包成一个模型库文件(.hbm)
- hbdk-perf:评估模型库文件(.hbm)中的模型在X3/J3上运行的性能,生成性能分析报告
- hbdk-model-verifier:验证模型库中的模型,确保在X3/J3上运行结果的正确性。
- hbdk-sim:运行模型库中的模型,得到预测结果
- hbdk-model-check:按照指定BPU架构标准去检查算法模型是否满足要求
- 量化训练方案的优势:量化训练方案可以贴合地平线芯片的优势,构建出更加符合地平线芯片的量化模型,进而可以获取到更高的模型性能和量化精度。
2.2 浮点转定点工具链
- 浮点转定点工具链即后量化转换方案,通过工具方式将原始浮点模型,利用少量校准数据集对模型做量化校准,并编译生成为可以在地平线芯片上运行的指令级模型。
- 使用流程如下:
- 如上图所示,地平线模型量化转换方案不仅仅是传统概念上模型参数的Quantization定点化流程, 而是一个完整模型解析,模型结构优化,模型定点化,以及模型指令编译与优化过程,最后交付的是一个可以直接在地平线芯片上部署的异构混合模型。
- 浮点转换原生支持Caffe和ONNX模型,其中ONNX支持到最新的opset10,11,其他Pytorch,Tensorflow等框架都可以通过转换为ONNX模型来使用我们转换工具链。
- 与量化感知训练方案相比,浮点转定点方案使用起来更加简单,算子支持范围更完整,针对典型模型,量化工具可以很好的保持量化精度,因此优先推荐你使用浮点转换工具链。 但是如果您尝试了浮点转换工具链提供的各种量化精度技术手段都无法满足你的量化精度需求时,你可以尝试用量化训练方案进行解决。
2.3 二者的差异
- 浮点转定点工具链生成物是异构混合模型bin文件,与量化训练方案中最后的定点模型hbm文件有概念上的差异
- HBM文件内部指令为在地平线BPU AI加速器进行计算,而BIN文件内部除了可以包含多个HBM段以外,还有一些会在CPU上执行的模型算子 比如Abs,Clip,Div,Elu,Exp等算子,它们会在CPU上按照FP32方式进行计算
- 浮点转换工具链也是通过支持CPU算子和BPU算子的方式来提高模型适配能力,提升工具链的易用性