Created by: mapingshuo
我们知道lookup_table op是用于查表(Embedding)的。当表比较大时,我们可以考虑先将其压缩为小表,在infer时调用lookup_table_dequant
对指定index的embedding做解压缩,复原为压缩前的Embedding并做剩下的计算。
那么,选择什么样的算法来把大表压缩为小表呢?我们采用ref[1]
论文中介绍的算法,首先将32比特的参数压缩为8比特,然后在每一个embedding的开头添加 min
和 max
两个参数。
lookup_table_dequant
op的工作,就是根据min
和max
复原一个Embedding, 其输出与压缩前的embedding几乎是一致的(也会存在一些损失)。
ref[1]: Guan, Hui, et al. "Post-Training 4-bit Quantization on Embedding Tables." arXiv preprint arXiv:1911.02079 (2019).
注: 这一算子的原理是在Embedding中,用1个fp32存储四个int8的数字,以节省内存空间。因此该Op目前不支持float64的输入,即不支持Embedding为float64。