权重打包是由于当前的pytorch并不支持int4以下的精度,所以需要用一种别的方式,用8bit的形式来保存4bit,8bit的值。说白了,顾名思义,打包就是两个4位打包成一个8位,4个2位打包成一个8位,用一个值代表几个值。
打包操作说白了就是,在8bit的tensor里,存一个2bit,然后把位置移动一下空出来,然后再存进去下一个,代码就是左移之后加起来。
有了打包,那自然需要解包,进去的时候不停左移,出来不停右移就行,然后用一个mask(这里是0b11)把需要的值拿出来
量化基本 的pipeline就到这里,貌似线性量化是google在2018CVPR的工作,之后就要开始研究量化的论文了