【翻译】大型 Transformer 模型推理优化

翻译原文:Large Transformer Model Inference Optimization | Lil'Log  原文作者:Lilian Weng

目录

  • 方法概述
  • 蒸馏 Distillation
  • 量化 Quantization
    • Transformer 量化的挑战
    • 训练后量化 (PTQ)
      • 混合精度量化 Mixed-precision quantization
      • 细粒度量化
      • 量化的二阶信息
      • 异常值平滑
    • 量化感知训练 (QAT)
  • 修剪 Pruning
    • 如何修剪?
    • 如何重新训练?
  • 稀疏性 Sparsity
    • 通过修剪实现 N:M 稀疏性
    • 稀疏化 Transformer
    • 混合专家 MoE Mixture-of-Experts
      • 路由策略改进
      • 内核改进
  • 架构优化
    • 稀疏注意模式 Sparse Attention
    • 循环 Recurrence
    • 内存节省设计
    • 自适应注意 Adaptive Attention
  • 引用
  • 参考文献

[Updated on 2023-01-24: add a small section on Distillation.]

大型Transformer模型如今已成为主流,可为各种任务创建SoTA结果。它们功能强大,但训练和使用成本非常高。极高的推理成本(无论是时间成本还是内存成本)是采用强大的 Transformer 大规模解决现实世界任务的一大瓶颈。

为什么大型 Transformer 模型很难运行推理?除了 SoTA 模型的规模不断扩大外,还有两个主要因素导致了推理挑战(Pope 等人,2022 年):

1. 内存占用大。推理时,模型参数和中间状态都需要存储在内存中。例如,

  • KV cache应在解码时存储在内存中;例如,对于批处理大小为 512 且上下文长度为 2048 的情况,KV cache总计 3TB,即模型大小的 3 倍(!). 
  • 注意力机制的推理成本与输入序列长度成二次方关系。

2. 可并行性低。推理生成以自回归方式执行,使解码过程难以并行化。

在这篇文章中,我们将研究几种使 Transformer 推理更高效的方法。一些是通用的网络压缩方法,而另一些则特定于 Transformer 架构。

方法概述

我们通常将以下内容视为模型推理优化的目标:

  • 通过使用更少的 GPU 设备和更少的 GPU 内存来减少模型的内存占用;
  • 通过降低所需的 FLOPs 数量来降低所需的计算复杂度;
  • 减少推理延迟并加快运行速度。

可以使用多种方法使推理在内存中更便宜或/和在时间上更快。

  1. 应用各种并行性以在大量 GPU 上扩展模型。模型组件和数据的智能并行性使运行数万亿个参数的模型成为可能。
  2. 内存卸载将暂时未使用的数据卸载到 CPU 并在以后需要时读回它们。这有助于减少内存使用,但会导致更高的延迟。
  3. 智能批处理策略;例如,EffectiveTransformer 将连续序列打包在一起以在一个批次中去除填充padding.
  4. 网络压缩技术,例如修剪、量化、蒸馏。就参数数量或位宽而言,较小尺寸的模型需要的内存更少,运行速度更快。
  5. 针对目标模型架构的改进。许多架构变化(尤其是针对注意力层的架构变化)有助于提高 Transformer 解码速度。

查看上一篇关于大型模型训练的文章,了解不同类型的训练并行性和节省内存的设计,包括 CPU 内存卸载。这篇文章重点介绍网络压缩技术和针对 Transformer 模型的架构特定改进。

蒸馏

知识蒸馏 (KD;Hinton 等人 2015 年,Gou 等人 2020 年) 是一种构建更小、更便宜的模型(“学生模型”)的直接方法,通过将技能从预先训练的昂贵模型(“教师模型”)转移到学生身上来加快推理速度。对于如何构建学生架构没有太多限制,除了与教师匹配的输出空间以构建适当的学习目标。

给定一个数据集,通过蒸馏损失训练学生模型来模仿老师的输出。通常神经网络有一个softmax层;例如,LLM输出token的概率分布。我们将softmax之前的logits层分别表示为Zt和Zs,分别用于教师和学生模型。蒸馏损失用较高的温度T最小化两个softmax输出之间的差异。当已知基本事实ground truth标签y时,我们可以将其与基本事实和学生的soft logits之间的监督学习目标相结合,例如使用交叉熵。

其中是一个超参数,用于平衡软学习目标和硬学习目标。一个常见选择是 KL 散度/交叉熵。

一个成功的早期试验是 DistilBERT(Sanh 等人,2019 年),它能够将 BERT 的参数减少 40%,同时在微调的下游任务上保持 BERT 97% 的性能,并且运行速度提高 71%。预训练 DistilBERT 的损失是软蒸馏损失、监督训练损失(即 BERT 情况下的掩蔽语言建模损失)和特殊余弦嵌入损失的组合,用于对齐教师和学生之间的隐藏状态向量。

蒸馏可以轻松地与量化、修剪或稀疏化技术相结合,其中教师模型是原始的全精度密集模型,而学生被量化、修剪pruned或修剪trimmed以具有更高的稀疏度。

量化

在深度神经网络上应用量化有两种常见方法:

  1. 训练后量化 (PTQ):首先训练模型以使其收敛,然后将其权重转换为较低精度而无需更多训练。与训练相比,它通常实施起来相当便宜。
  2. 量化感知训练 (QAT):量化应用于预训练或进一步微调。QAT 能够获得更好的性能,但需要额外的计算资源和对代表性训练数据的访问。

我们应该意识到理论最佳量化策略与硬件内核支持之间的差距。由于 GPU 内核缺乏对某些类型的矩阵乘法(例如 INT4 x FP16)的支持,因此并非以下所有方法都能加速实际推理。

Transformer 量化的挑战

许多关于 Transformer 模型量化的研究都有相同的观察结果:简单的低精度(例如 8 位)训练后量化会导致性能显着下降,这主要是由于激活的动态范围高,而简单的激活量化策略无法保持容量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值