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

Transformer常见面试题 Transformer模型是一种基于自注意力机制的神经网络架构,它在自然语言处理(NLP)领域取得了显著的成果。自注意力机制:Transformer模型的核心是自注意力机制,它允许模型在处理序列时同时考虑序列中的所有位置,而不是像传统序列模型那样按顺序处理。并行化处理:由于自注意力机制不依赖于序列中元素的前后顺序,Transformer可以高效地并行化计算,这与传统的RNN和LSTM不同,后者需要按顺序逐步处理序列。编码器-解码器结构。 阅读详情

翻译原文: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中的encoder和decoder在训练和推理过程中究竟是如何工作的 Transformer中的encoder和decoder在训练和推理过程中究竟是如何工作的苦苦冲浪,找不到答案Transformer结构(随便冲浪均可查到)Transformer推理过程Transformer训练过程 苦苦冲浪,找不到答案 之前学习transformer的时候就不是很理解encoder和decoder在训练和推理过程中是如何工作的,四处查询也没有讲的很详细,很多文章和视频都是encoder讲很多,到了decoder就一带而过了,后来在b站看了大佬讲解的transformer源码,终于明白了e 阅读详情

相关推荐

CTranslate2:在 AMD GPU 上高效推理 Transformer 模型

Transformer 模型通过在机器翻译、文本摘要、文本生成和语音识别等任务中提供高性能结果,彻底改变了自然语言处理(NLP)的领域。然而,由于这些模型对计算和内存的高需求,在生产环境中部署它们可能会面临挑战。通过提供一个自定义运行时来应对这些挑战,该运行时实现了各种优化技术,以加速 Transformer 模型的推理。在这篇博客中,您将了解到如何使用 CTranslate2 这一强大的 C++ 和 Python 库,在 AMD 硬件上优化和加速 Transformer 模型的推理。

数字人生 1722

大模型推理引擎vllm,sglang,transformer,exllama详细介绍和区别

在本文中,我们详细介绍了四种大模型推理引擎:vLLM、SG-Lang、Transformer和ExLlama。每种引擎都有其独特的技术特点、应用场景和优缺点。

全世界的博客 1万+

Transformer模型-数据预处理,训练,推理(预测)的简明介绍

Transformer模型-数据预处理,训练,推理(预测)的简明介绍。 在继续探讨之前,假定已经对各个模块的功能有了充分的了解,我们从头梳理一遍流程。

Ankie资深技术项目经理 2999

Transformer学习与基础实验4——英汉翻译(2. 模型构建、训练、推理)

Transformer学习与基础实验系列文章的第4篇,基于自定义实现的Transformer模型的英汉翻译任务训练、推理等过程记录和代码理解,以及所有源码、模型结构图绘制文件的原件提供

qq_61784003的博客 1255

汇川PLC用户程序结构详解:如何像搭积木一样配置多任务?附EtherCAT最佳实践

本文深入解析汇川PLC用户程序结构,阐述如何像搭积木一样,通过POU、FB、FC等模块化组件高效配置多任务。文章重点结合EtherCAT通讯场景,分享了任务周期、优先级设置的最佳实践与关键避坑指南,帮助工程师构建稳定、高效的运动控制系统。

weixin_29184075的博客 541

【电驱动】永磁同步电机工作原理及分类

永磁同步电机工作原理及分类

星Yeah 的博客 7326

Python读取Matlab v7.3数据

文章目录Matlab保存数据Python读取 v7.3 Mat Matlab保存数据 在matlab设置中,常规->MAT文件,选择MATLAB版本7.3或更高版本保存数据。 注意保存数据的文件名为 corre.mat,保存的数据数组为data; 后面python的读取中会用到这两个参数 Python读取 v7.3 Mat 先安装hdf5storage库,再使用以下代码,就可以读取到mat中的数据,注意 import hdf5storage import numpy as np dataDi

weixin_43121914的博客 1081

5、模型预测控制与分布式MPC控制结构解析

本文深入解析了模型预测控制(MPC)中的双模式预测控制及其稳定性理论,并探讨了分布式MPC的不同控制结构。内容涵盖MPC的基本公式化、性能指标、优化问题以及相关算法步骤,同时比较了集中式MPC、单层分布式MPC和分层分布式MPC的优缺点和适用场景。最后通过流程图和表格形式总结了双模式MPC的算法步骤和控制结构选择思路,并提供了操作建议,以帮助在实际工业系统中更好地应用MPC技术。

tea88的博客 170

解决【x2openEuler环境检查未通过——CheckRepoCurlActor不通过】问题

摘要:x2openEuler使用默认repo源时出现环境检查失败问题,原因是默认源返回308永久重定向错误。解决方法包括:1)为CentOS主机配置华为yum源;2)在x2openEuler Web界面修改为自定义可用源。具体步骤包括备份原源、下载华为源、清除缓存,并通过curl测试确认新源可用性。最终成功配置openEuler-24.03-LTS-SP1版本的repo源后,环境检查顺利通过。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 258

十一、增强现实

那都是n年前的老版本了,新版本完全没有这个问题,我就是纠结这个问题,搭建若干环境,又是vmware虚拟机,又是msys2,又是anaconda,又是找机器,折腾了几天,结果通通不是。以一张实际卡片为锚点,通过笔记本的摄像头,在显示器上将一个计算机内的3d物体显示在卡片上,类似于电影上看到的那种全息投影技术;如果你是想在windows环境下开发linux运行程序,那么CygWin/gcc是你的不二之选。而如果你想开发的是windows运行程序,并且追求速度,那么二者相比而言,MinGW是更好的选择。

3189

YOLOv12改进策略【卷积层】| 引入注意力卷积模块RFAConv,关注感受野空间特征 助力yolov12精度提升

RFAConv:创新空间注意力和标准卷积运算感受野空间特征是针对卷积核设计的,根据卷积核大小动态生成。以3×3卷积核为例,它由非重叠滑动窗口组成,每个窗口代表一个感受野滑块。

Limiiiing的博客 684

EMC意义下的共模(Common Mode)和差模(Differential Mode)

在电子产品中,信号或电源通过两根导线传输。对比维度差模(DM)共模(CM)电流方向一进一出,相等相反同向、相等回流路径两根导线组成的闭合回路地或外壳EMC影响较小容易辐射干扰,重点治理类型定义有用信号干扰信号抑制方法常规滤波器、电感、电容共模电感、磁环、屏蔽、接地技术等。

weixin_43199439的博客 1248

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: 使用 Microsoft Azure 架构完善的框架构建出色的解决方案
下一篇: 【翻译】CLIP:连接文本和图片
羊羊洒洒_Blog
博客等级 码龄7年 174粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值