Skip to content

Latest commit

 

History

History
executable file
·
58 lines (47 loc) · 1.89 KB

embedding_quant_tutorial.md

File metadata and controls

executable file
·
58 lines (47 loc) · 1.89 KB

Embedding量化

Embedding量化将网络中的Embedding参数从float32类型量化到 8-bit或者 16-bit 整数类型,在几乎不损失模型精度的情况下减少模型的存储空间和显存占用。

Embedding量化仅能减少模型参数的体积,加快加载Embedding参数的速度,并不能显著提升模型预测速度。

使用方法

在预测时调用paddleslim quant_embedding接口,主要实现代码如下:

import paddle
import paddle.fluid as fluid
import paddleslim.quant as quant
paddle.enable_static()
train_program = fluid.Program()
with fluid.program_guard(train_program):
    input_word = fluid.data(name="input_word", shape=[None, 1], dtype='int64')
    input_emb = fluid.embedding(
        input=input_word,
        is_sparse=False,
        size=[100, 128],
        param_attr=fluid.ParamAttr(name='emb',
        initializer=fluid.initializer.Uniform(-0.005, 0.005)))

infer_program = train_program.clone(for_test=True)

use_gpu = True
place = fluid.CUDAPlace(0) if use_gpu else fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())

# 量化为8比特,Embedding参数的体积减小4倍,精度有轻微损失
config = {
         'quantize_op_types': ['lookup_table'],
         'lookup_table': {
             'quantize_type': 'abs_max',
             'quantize_bits': 8,
             'dtype': 'int8'
             }
         }

'''
# 量化为16比特,Embedding参数的体积减小2倍,精度损失很小
config = {
         'quantize_op_types': ['lookup_table'],
         'lookup_table': {
             'quantize_type': 'abs_max',
             'quantize_bits': 16,
             'dtype': 'int16'
             }
         }
'''

quant_program = quant.quant_embedding(infer_program, place, config)

详细代码与例程请参考:Embedding量化