AI News HubLIVE
站内改写1 分钟阅读

如何使用xFormers构建内存高效的Transformer:打包序列、GQA、ALiBi、SwiGLU和因果注意力

本教程详细介绍了如何使用xFormers工具包在GPU上构建快速、内存高效的Transformer模型。我们从验证内存高效注意力与标准注意力的对比开始,然后比较不同序列长度下的速度和内存消耗。接着探讨了因果掩码、变长序列打包、分组查询注意力(GQA)和自定义ALiBi位置偏置。最后,我们将这些技术组合成一个可训练的GPT风格模型,包含SwiGLU前馈层和自动混合精度训练。

来源MarkTechPost作者: Sana Hassan

在本教程中,我们使用xFormers工具包在GPU上构建快速、内存高效的Transformer模型。首先,我们安装xFormers并验证GPU可用性,然后定义辅助函数测量CUDA执行时间和峰值内存消耗。接着,我们比较xFormers的内存高效注意力与标准注意力实现,发现两者在数值上高度一致(仅存在FP16舍入误差),但xFormers从不存储完整的MxM分数矩阵。

在基准测试中,我们对序列长度从512到4096进行前向和后向传播测试。结果显示,标准注意力的内存消耗随序列长度平方增长(每次长度加倍,内存增加约4倍),而xFormers几乎呈线性增长,且速度保持稳定。我们还使用隐式下三角掩码实现因果注意力,无需分配布尔张量,并通过与参考实现比较验证了正确性。

对于可变长度序列,我们使用BlockDiagonalMask将不同长度的序列打包在一起,防止跨序列的注意力,同时避免填充开销。我们恢复了各个分段的输出,并执行了打包的因果注意力,这正是vLLM等推理引擎批量处理不同长度请求的方式。然后,我们演示了分组查询注意力(GQA),其中多个查询头共享较少的键值头,从而减少KV缓存大小——这是Llama/Mistral类模型在推理时使用的技术。

我们还构建了自定义的ALiBi张量,对每个注意力头施加不同的线性位置惩罚,并与因果掩码结合。xFormers可以直接接受这种自定义偏置张量。最后,我们构建了一个紧凑的GPT风格Transformer,包含xFormers因果注意力、残差连接、层归一化和SwiGLU前馈层。模型通过自动混合精度(AMP)在合成数据上进行400步训练,展示了从零开始训练一个完整因果Transformer的流程。该示例可直接替换为实际数据和分词器进行扩展。

本教程涵盖了xFormers的核心功能(第1-3节)和高级技巧(第4-6节),为构建内存高效的Transformer模型提供了实用指南。