为内存塞不下Transformer犯愁?OpenAI应用AI研究负责人写了份指南
选自Lilian Weng的博客
作者:Lilian Weng
机器之心编译
编辑:赵阳
本文是一篇综述性的博客,探讨总结当下常用的大型 transformer 效率优化方案。
内存消耗大:推理时,需要把模型参数和中间状态都保存到内存中。例如:KV 存储机制下的缓存中的内容在解码期间需要存储在内存中,举例来说,对于 batch size 为 512,上下文长度为 2048 的设置来说,KV 缓存里需要的空间规模为 3TB,这是模型大小的 3 倍;注意力机制的推理成本和输入序列的长度呈正相关; 低并行性:推理生成过程以自回归的方式执行,使解码过程难以并行。
使用更少的 GPU 设备和更少的 GPU 内存,减少模型的内存占用; 减少所需的 FLOP,降低计算复杂度; 减少推理延迟,运行得更快。
在多 GPU 上应用各种并行机制来实现对模型的扩展。模型组件和数据的智能并行使得运行具有万亿级参数的大模型成为可能; 将暂时未使用的数据卸载到 CPU,并在以后需要时读回。这样做对内存比较友好,但会导致更高的延迟; 智能批处理策略;例如 EffectiveTransformer 将连续的序列打包在一起,以删除单个批次中的 padding; 神经网络压缩技术,例如剪枝、量化、蒸馏。就参数数量或位宽而言,小尺寸的模型应该需要少量的内存,也就运行得更快; 特定于目标模型架构的改进。许多架构上的变化,尤其是注意力层的变化,有助于提高 transformer 的解码速度。
训练后量化(PTQ):首先需要模型训练至收敛,然后将其权重的精度降低。与训练过程相比,量化操作起来往往代价小得多; 量化感知训练 (QAT):在预训练或进一步微调期间应用量化。QAT 能够获得更好的性能,但需要额外的计算资源,还需要使用具有代表性的训练数据。
因为矩阵乘法包含一组行和列向量之间的独立内积,所以可以对每个内积进行独立量化。每一行和每一列都按最大值进行缩放,然后量化为 INT8; 异常值激活特征(例如比其他维度大 20 倍)仍保留在 FP16 中,但它们只占总权重的极小部分,不过需要经验性地识别离群值。
非结构化剪枝允许丢弃任何权重或连接,因此它不保留原始网络架构。非结构化剪枝通常对硬件要求比较苛刻,并且不会加速实际的推理过程; 结构化剪枝不改变权重矩阵本身的稀疏程度,可能需要遵循某些模式限制才能使用硬件内核支持的内容。本文专注于那些能实现 transformer 模型的高稀疏性的结构化剪枝。
稀疏化的全连接层,包括自注意力层和 FFN 层; 稀疏模型架构,即 MoE 组件的合并操作。
可以将输入序列分成固定的块; 图像 transformer 使用了局部注意力; 稀疏 transformer 使用了跨线注意力模式; Longformer 使用了 dilated 注意力窗口; 可以使用 strided 卷积压缩注意力来减少序列长度。
稀疏 transformer 结合了跨步和局部注意力; 给定高维输入张量,axial transformer 不会将输入 flattened 后再使用注意力机制,而是使用多注意力机制,一个注意力对应着输入张量的一个轴; Big Bird 模型设计了一些关键组件,即(1)全局 token,(2)随机注意力(query 向量随机绑定 key 向量)和(3)固定模式(局部滑动窗口)。
Reformer 使用局部敏感哈希将 token 聚类; 路由 transformer 用 k-means 将 token 聚类; Sinkhorn 排序网络会对输入序列块的排序算法进行学习。
Transformer-XL 通过在 segment 之间重用隐藏状态来获取更长的上下文; 通用 transformer 将自注意力与 RNN 中的循环机制相结合; Compressive transformer 是 Transformer-XL 的扩展,具有额外的内存,具有 n_m 个内存槽和 n_(cm) 个压缩内存槽。每当有新的输入段被输入到模型当中时,主内存中最久未更新的前 n_s 个激活函数都会被转移到压缩内存中。
Set Transformer 设计了一种受归纳点方法启发的新注意力; ETC(Extended transformer construction)是 Sparse Transformer 的变体,具有新的全局 - 局部注意力机制; Longformer 也是 Sparse Transformer 的变体,使用 dilated 滑动窗口。随着模型网络的深入,感受野也会逐渐增加。
Linformer 将 key 和 value 的代表长度的维度投影到低维表示(N→k),因此内存复杂度从 N×N 降低到 N×k; Shazeer 等人提出了多 query 注意力,在不同注意力头之间共享 key 和 value,大大减少了这些张量的大小和内存成本。
自适应注意力广度训练模型,通过 token 和其他 key 之间的 soft mask 机制,为每个 token、每个注意力头学习最佳的注意力广度; 通用 transformer 结合了循环机制,并使用 ACT(自适应计算时间)来动态决定循环几次; 深度自适应 transformer 和 CALM 使用一些置信度度量方法来学习何时提前退出每个 token 的计算层,这样可以在性能和效率之间找到一种平衡。
© THE END
转载请联系本公众号获得授权
投稿或寻求报道:[email protected]
微信扫码关注该文公众号作者
戳这里提交新闻线索和高质量文章给我们。
来源: qq
点击查看作者最近其他文章