如何压缩pytorch transformer模型?

5vf7fwbs  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(216)

我有一个模型,其中包含BERTtokenizer和一些变压器块。有没有办法压缩变压器模型或者...?我们的模型看起来像这样:GPT(变压器):ModuleDict((wte):嵌入(129600,768)(wpe):包埋(1024、768)(跌落):脱落(p=0.0,原位=假)(h):ModuleList((0-11):12 x块((ln_1):LayerNorm()(attn):CausalSelfAttention((c_attn):线性(in_features=768,out_features=2304,bias=False)(c_proj):线性(in_features=768,out_features=768,bias=False)(attn_dropout):Dropout(p=0.0,inplace=False)(resid_dropout):脱落(p=0.0,inplace=False))(ln_2):LayerNorm()(mlp):MLP((c_fc):线性(in_features=768,out_features=3072,bias=False)(c_proj):线性(in_features=3072,out_features=768,bias=False)(dropout):脱落(p=0.0,原位=假)(gelu):GELU(approximate='none'))))(ln_f):LayerNorm())(lm_head):线性(in_features=768,out_features=10048,bias=False)
我试着修剪它,但效果不好。希望你详细回答。

mbskvtky

mbskvtky1#

这些类型的优化需要一些知识才能正常工作。
我不确定你是否只是想保存磁盘空间,减少GPU / CPU内存消耗或加快进程。
虽然没有任何神奇的模块可以在不影响准确性的情况下将模型大幅缩小75%,但有几种通用技术值得探索。但是,需要注意的是,它们与不同框架、架构和设备的兼容性可能会有所不同:

*剪枝:该技术通过去除无关紧要的连接将模型权重转换为稀疏矩阵。推理可能仍然是一个正常的Matmul,所以性能的提高取决于框架。
*权重量化:它将重量精度降低到FP 16、INT 8甚至更低,从而降低了内存需求。
*知识蒸馏:该方法的目的是通过使用原始模型的权重作为老师来训练较小的模型来压缩大模型。
*权重聚类:该技术通过将权重聚类到N个聚类中来压缩模型,从而减少唯一权重值的数量。

请记住,这些技术可以混合使用!你可以量化和修剪一个提炼过的模型,但我猜模型优化器迟早会崩溃😅。

相关问题