AIMET 量化可视化
概述
AIMET Visualization 通过可视化为 AIMET 工具(帮助量化和压缩 ML 模型)增加了分析能力。 它提供了对 AIMET 功能更详细的见解,因为用户能够在可压缩性方面分析模型的层,并在应用量化时突出显示潜在问题。 该工具还有助于显示计算量大的任务的进度。
设计
给定一个模型,用户可以启动 Bokeh 服务器会话,然后调用将生成可视化的函数,以帮助在使用量化和压缩 AIMET 特征之前分析和理解模型
量化
在量化过程中,整个层使用通用参数将浮点权重值转换为 INT8。 如果权重的动态范围非常高,量化将不会非常精细。 为了均衡权重范围,我们应用跨层均衡。 为了了解我们是否需要应用跨层均衡,我们可以将层中每个通道的权重范围可视化。 如果权重范围在各个通道上变化很大,应用跨层均衡有助于提高量化精度。
PyTorch
在 PyTorch 中,我们可以可视化模型的权重。 我们还可以可视化跨层均衡之前和之后模型的权重范围。 用户可以调用三个主要功能:
- 用户可以分析模型的相对权重范围,以查看可能存在量化问题的层
- 用户可以理解模型中的每一层
- 用户可以可视化模型,比较量化前后的权重。
TensorFlow
在 TensorFlow 中,我们可以可视化层中各个通道的权重范围和相对权重范围。 用户还可以使用相同的功能查看跨层均衡前后层权重范围的变化。
用户可以调用两个主要功能:
- 用户可以分析层的相对权重范围,以查看可能存在量化问题的层
- 用户可以可视化图层的权重范围并查看权重的各种统计数据
启动Bokeh服务器会话:
AIMET 使用 Bokeh 进行绘图。 要使用 Bokeh 可视化绘图,用户需要启动 Bokeh 服务器。 以下说明显示了如何启动 Bokeh 服务器。
-
通过键入以下命令启动 Bokeh 服务器:bokeh serve - -allow-websocket-origin=: –port=
–allow-websocket-origin 告诉 Bokeh 服务器要监听哪些网络地址,同样本地通常不需要它不需要只在本地查看。
—port 告诉 Bokeh 服务器监听哪个网络端口,而不是默认端口 5006 -
最后,转到 URL 以查看可视化效果。
这里的 session-id 是:优化。 所以 URL 看起来像这样:
http://<主机名>:<端口号>/?&bokeh-session-id=optimization
AIMET AdaRound
AIMET 量化功能默认使用“最近舍入”技术来实现量化。在下图中,权重张量中的单个权重值显示为说明性示例。当使用“最近舍入”技术时,这个权重值被量化为最接近的整数值。自适应舍入 (AdaRound) 功能使用较小的未标记训练数据子集来自适应舍入具有权重的模块的权重。下图中,权重值被量化为远离它的整数值。 AdaRound 使用未标记的训练数据优化损失函数,以自适应地决定是否将特定权重量化为接近或远离它的整数值。使用 AdaRound 量化,模型能够实现更接近 FP32 模型的精度,同时使用低位宽整数量化。
使用 AdaRounded 模型创建 QuantizationSimModel 时,请在计算编码之前使用 QuantizationSimModel 提供的 API 设置和冻结参数编码。请参考 AdaRound API 部分中的代码示例。
AdaRound 用例
常用术语
- BC - 偏差校正
- BNF - 批范数折叠
- CLE - 跨层均衡
- HBF - 高偏置折叠
- QAT - 量化意识训练
- { } - 用例中的可选步骤
用例
-
{BNF} –> {CLE} –> AdaRound
应用 BNF 和 CLE 是应用 AdaRound 之前的可选步骤。 有些模型从应用 CLE 中受益,而有些则没有任何好处。 -
AdaRound –> QAT
AdaRound 是一种训练后量化功能。 但是,对于某些应用 BNF 和 CLE 的模型可能没有好处。 对于这些模型,AdaRound 之后的 QAT 可能是有益的。 AdaRound 被认为是更好的权重初始化步骤,有助于加快 QAT。
不建议
不建议在 AdaRound 之前或之后应用 BC。
- AdaRound –> BC
- BC –> AdaRound
AdaRound Hyper 参数指南
在 AdaRound 优化过程中需要几个超参数,并暴露给用户。 但其中一些使用默认值,这会在许多模型上产生良好和稳定的结果,不建议经常更改。
以下是 Hyper 参数的指南:
- 经常更改的超参数:batches数量(大约500-1000张图像,如果data loader的batch size为64,那么16个batches导致1024张图像),迭代次数(默认10000)
- 适度改变的超参数:正则化参数(默认0.01)
- 最少更改的超参数:beta 范围(默认 (20, 2))、热启动期(默认 20%)