常见神经网络模型所用的 Tensor 数据类型 一般是 float32 类型, 而工业界出于对特定场景的需求(极少的计算资源,极致的推理速度),需要把模型的权重和或激活值转换为位数更少的数值类型(比 int8, float16) —— 整个过程被称为量化(Quantization)。
通常以浮点模型为起点,经过中间的量化处理后最终变成量化模型,在这个过程中一般会导致模型掉点。
目前业界缓解模型掉点的问题的技术主要有两种,在 MegEngine 中都进行了支持:
(资料图片仅供参考)
训练后量化(Post-Training Quantization, PTQ);
量化感知训练(Quantization-Aware Training, QAT)。
更多量化基本流程:量化基本流程介绍
以量化感知训练为例,一般以一个训练完毕的浮点模型为起点,称为 Float 模型。 包含假量化算子的用浮点操作来模拟量化过程的新模型,我们称之为 Quantized-Float 模型,或者 QFloat 模型。 可以直接在终端设备上运行的模型,称之为 Quantized 模型,简称 Q 模型。
而三者的精度一般是 Float > QFloat > Q ,故而一般量化算法也就分为两步:
拉近 QFloat 和 Q,这样训练阶段的精度可以作为最终 Q 精度的代理指标,这一阶段偏工程;
拔高 QFloat 逼近 Float,这样就可以将量化模型性能尽可能恢复到 Float 的精度,这一阶段偏算法。
典型的三种模型在三个阶段的精度变化如下:
对应到具体的 MegEngine 接口中,三阶段如下:
此处为标准量化流程,实际使用时也可有灵活的变化。
ResNet 实例讲解下面我们以 ResNet18 为例来讲解量化的完整流程。主要分为以下几步:
详细操作指南文档见:ResNet 实例讲解
「MegEngine 使用小技巧」系列文章,重点输出 MegEngine 及周边工具的使用技巧,如有催更或投稿,欢迎联系我们哦~
技术交流 QQ 群:1029741705;Bot 微信:megengine-bot
更多 MegEngine 信息获取,您可以:查看文档和 GitHub 项目。欢迎参与 MegEngine 社区贡献,成为 Awesome MegEngineer,荣誉证书、定制礼品享不停。