DeepSpeed Model Compression

Layer Reduction

使用知识蒸馏;减少hidden layer层数,不改变层的宽度;

目的:降低延迟,减少模型大小;

输入teacher model, 输出student model

Weight & Activation quantization

在手机等嵌入式设备上,存储小加算能力弱,量化技术有大用。

属于quantization-aware training (QAT),一边训练一边量化;而不是训练完成之后量化一把。

权重矩阵,是先分组,每组内部进行量化;

weights可以在训练开始时,使用start_bits来量化,过程中,逐渐过渡到target_bits来量化;

weights、attention、FFN,可以各自使用不同的量化bits设置;

forward时,"quantize_weight_in_forward"控制weight使用量化后还是量化前的数值来进行计算;backward时,weight都使用量化后的值来计算梯度;activation在forward和backward都使用量化后的值来计算;

"weight_quantization": {
    "enabled": true,
    "quantize_groups": 64,
    "quantize_bits": {
        "start_bits": 8,
        "target_bits": 4
    }
},
"activation_quantization": {
    "quantize_bits": 8
}

activation的静态量化:预先跑一小部分数据,得到min、max,用作量化;后续不会再动了;

activation的动态量化:每个token有自己的min、max;每个image有自己的min、max;

动态量化,精度更高,但会增加一些量化计算时间开销;

"schedule_offset": 训练刚开始的这些step,不进行activation量化;为了让训练刚开始的效果稳定;

Pruning: 把一些值置为0;减小model大小,加速计算;

structured pruning: 整个一块、一个filter、一个channel,这种成片的置0;可利用GPU硬件特性,更快的加速计算;

unstructured pruning:  绝对值足够小的就置0;不考虑周围数值;(稀疏矩阵可用稀疏计算kernel来跑)

Method	Type
Sparse pruning	Unstructured and Structured
Row pruning	Structured
Head pruning	Structured
Channel pruning	Structured

1. Spare pruning

将weight矩阵里的某些数值置为0;

2. Row pruning

将矩阵的整个行置为0;

3. Head pruning

把multi-heads中的某些heads整个删掉;主要是concatenate后的向量乘以的那个转换矩阵,维度会变少,然后就是删掉的哪些heads对应的Key、Value和计算他们的矩阵,不需要了;

依据:文献上说,最后训好的模型,删掉一些head,对评测效果影响不大;

4. Channel pruning

卷据网络里,可以整个删掉一些中间层的channel;

ZeroQuant

2种结果:INT8;INT4/INT8混合;

Train完之后进行该步量化;

优点:

1. 硬件友好的量化方式,weights和activation都进行量化,量化误差小;

2. layer-by-layer知识蒸馏,不需要使用原始训练数据;目的:减少量化误差,而不是减少层数;一层优化完,再加载和优化另一层,对内存占用的小;

3. 量化/反量化,时间开销小;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值