敏感层分析,应该是发生在ptq量化之前进行分析的操作,经过该操作,可得出哪些层不适合进行量化,则在接下来ptq时可以手动关闭这些层的量化。
进入敏感层分析函数sensitive_analysis中,
具体流程为:
首先验证一下ptq后整体的一个精度,将map结果通过summary写到一个json文件中;
然后逐层遍历模型,遍历时先判断该层是否为量化算子,若否则退出换层,若是则继续;
假如是量化算子,则先关掉该层,其余层都进行量化,此时得到一个map存入json文件中,依次类推遍历每层,最后得到的json文件如下图所示:
简单分析model2和model3两层:最上方为ptq量化精度,对应map0.5和0.95时的精度,对model2来说,model2层不进行量化时,精度反而比量化时还高,说明model2层不适合量化,量化反而会带来精度损失;对于model3来说,model3层不进行量化时,精度下降,说明该层应该进行量化操作。
具体如何跳过量化层而不进行量化呢,在ptq量化时,会有相对应的参数进行设置: