pytorch_quantization icon indicating copy to clipboard operation
pytorch_quantization copied to clipboard

关于量化精度的请教

Open jingdonglin opened this issue 5 years ago • 5 comments

大佬你好,请问做8bit量化的时候,转成量化模型quant_model的时候,为什么权值是小数吖,比如是0.4256之类的,为什不是0-255之间的整数呢?还是说我哪儿操作步骤有问题 恳请大佬教做人,刚入门量化的小白,感激不尽!

jingdonglin avatar Dec 29 '19 03:12 jingdonglin

客气啦。我理解的量化分为以下步骤, 浮点模型--> 浮点模型clip --> 量化quantize(此处为0-255整数或-128-127)--> 解量化dequantize(此处为量化后的浮点数,但最多只有2^n种浮点表征,即有限浮点数集合)。你所描述的quant_model是dequantize后的模型,所以是浮点。train用dequantize的浮点来模拟inference时的整数,具体你可以读一下这两篇论文。 Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference Quantizing deep convolutional networks for efficient inference: A whitepaper

Jzz24 avatar Dec 29 '19 11:12 Jzz24

大佬你好,最近趁着假期在学习大佬的代码收获颇丰,已向周围小伙伴推荐了大佬的代码。但是关于量化过程中我有一点想不明白,训练得到quant_model后(也就是大佬的模型)。 :1、我在模型部署阶段,是需要把里面的卷积权值小数乘以255变成整数吗?如果是的话,卷积后的特征图也也是整数,但时当特征图经过BN层时,BN层的值全是浮点小数怎么和特征图进行定点运算呢?即前向推断过程中,即Conv->BN->激活函数,这一样过程,数据是咋流动的呢? 2、BN层融合这儿,量化训练后,如果把卷积层和BN层融合,变为新的卷积层后,那么这个卷积层的参数便不再是定点小数了,乘以尺度因子后,它也变不回int型的数吖?

jingdonglin avatar Feb 22 '20 10:02 jingdonglin

大佬你好,最近趁着假期在学习大佬的代码收获颇丰,已向周围小伙伴推荐了大佬的代码。但是关于量化过程中我有一点想不明白,训练得到quant_model后(也就是大佬的模型)。 :1、我在模型部署阶段,是需要把里面的卷积权值小数乘以255变成整数吗?如果是的话,卷积后的特征图也也是整数,但时当特征图经过BN层时,BN层的值全是浮点小数怎么和特征图进行定点运算呢?即前向推断过程中,即Conv->BN->激活函数,这一样过程,数据是咋流动的呢? 2、BN层融合这儿,量化训练后,如果把卷积层和BN层融合,变为新的卷积层后,那么这个卷积层的参数便不再是定点小数了,乘以尺度因子后,它也变不回int型的数吖?

@jingdonglin @Jzz24 大哥, 你这问题解决了吗?

yolunghiu avatar Jul 30 '20 00:07 yolunghiu

大佬你好,最近趁着假期在学习大佬的代码收获颇丰,已向周围小伙伴推荐了大佬的代码。但是关于量化过程中我有一点想不明白,训练得到quant_model后(也就是大佬的模型)。 :1、我在模型部署阶段,是需要把里面的卷积权值小数乘以255变成整数吗?如果是的话,卷积后的特征图也也是整数,但时当特征图经过BN层时,BN层的值全是浮点小数怎么和特征图进行定点运算呢?即前向推断过程中,即Conv->BN->激活函数,这一样过程,数据是咋流动的呢? 2、BN层融合这儿,量化训练后,如果把卷积层和BN层融合,变为新的卷积层后,那么这个卷积层的参数便不再是定点小数了,乘以尺度因子后,它也变不回int型的数吖?

@jingdonglin @Jzz24 大哥, 你这问题解决了吗?

整个量化的流程可以参照google的量化白皮书,现在的量化框架都是遵循那一套流程。首先拿到fp模型,然后融合bn,然后进行量化。无论离线量化还是finetune量化,都是先融合bn,再量化,我这个git的代码bn处理的不规范

Jzz24 avatar Aug 04 '20 08:08 Jzz24

大佬你好,最近趁着假期在学习大佬的代码收获颇丰,已向周围小伙伴推荐了大佬的代码。但是关于量化过程中我有一点想不明白,训练得到quant_model后(也就是大佬的模型)。 :1、我在模型部署阶段,是需要把里面的卷积权值小数乘以255变成整数吗?如果是的话,卷积后的特征图也也是整数,但时当特征图经过BN层时,BN层的值全是浮点小数怎么和特征图进行定点运算呢?即前向推断过程中,即Conv->BN->激活函数,这一样过程,数据是咋流动的呢? 2、BN层融合这儿,量化训练后,如果把卷积层和BN层融合,变为新的卷积层后,那么这个卷积层的参数便不再是定点小数了,乘以尺度因子后,它也变不回int型的数吖?

@jingdonglin @Jzz24 大哥, 你这问题解决了吗?

整个量化的流程可以参照google的量化白皮书,现在的量化框架都是遵循那一套流程。首先拿到fp模型,然后融合bn,然后进行量化。无论离线量化还是finetune量化,都是先融合bn,再量化,我这个git的代码bn处理的不规范

dorefa的量化方法按您说的流程量化我理解是这样: 先正常训练个fp32模型 -->merge bn --> 使用dorefa微调训练不带bn的量化模型. 您是这个意思吗? google白皮书我可能看的不仔细, 这种方式我再试试.

yolunghiu avatar Aug 04 '20 09:08 yolunghiu