Reformer详解 (reformation)

本文目录导航:
Reformer详解
为了应答二次复杂度造成处置长序列疑问的应战,作者提出了一系列技术以优化Transformer的效率。
理论,Transformer的效率受限于参数量大、内存消耗高以及训练语料库宏大的疑问。
但是,作者经过深化剖析发现,实践内存需求或者并不如预期般宏大,因此须要寻觅其余优化路径。
作者首先提出,关于一个典型的Transformer层,虽然参数量为0.5B,内存需求仅需2GB,而处置64K个1024维的token激活值,当批次大小设定为8时,所需内存也是2GB,与模型训练所需的17GB语料库存储相婚配。
这标明在单个机器上启动微调是可行的,但疏忽了几个关键起因。
为处置这些疑问,作者驳回了部分敏感哈希(LSH)技术,对Transformer启动了优化。
在传统的Transformer中,Q、K、V区分由输入特色向量经过不同的投影层获取。
但是,LSH关注的模型中,Q和K驳回相反的投影层。
试验标明,这样的参数优化并未影响模型的性能。
留意力计算的关键复杂度起源于公式中的softmax操作。
softmax的作用在于加大大的值、增加小的值,造成关键由最大元素组成。
因此,关于每个查问,只需关注键中与该查问最凑近的子集。
例如,在64K长度的K中,每个查问仅须要思考32或64个最凑近的键子集。
接上去,作者讨论了如何极速在多个值中找到最凑近的子集的疑问,传统两两对比方法无法行,LSH经过部分敏感哈希来减速检索。
不同于惯例哈希算法旨在增加抵触极速成功增删改查,LSH应用抵触减速检索,成果清楚。
直观地说,假设哈希函数关于“左近”点的碰撞概率高于“相距很远”的点,则其是部分敏感的。
LSH的基本思维相似于一种空间域转换,假定在原有的数据空间中,相似的向量经过哈希函数转换后依然具备很高的相似度;反之,不相似的向量转换后应不具备相似性。
关于文档相似度计算等实例,作者经过k-shingling和最小哈希方法启动引见。
经过k-shingling将文本转换为稠密向量,而后经常使用最小哈希方法,将文本转换为词表对应的01向量示意。
最终获取一个汇合,每个元素是一个向量,代表一个文本,便于启动相似度计算。
LSH方法在实践运行中展现出高效性,作者经常使用的LSH并非最小哈希函数。
实践运行中,只需求左近的向量以高概率获取相反的哈希,并且哈希桶的大小以高概率相似。
经过球上随机投影成功这一目的,确保了在特定条件下,相反bucket内的元素具备较高的相关性。
LSH留意力优化了Transformer的留意力机制,经过限度关注的汇合仅在相反的哈希桶内,提高了计算效率。
在批处置数据时,经常使用了share-QK attention确保了q和k的一致,防止了q与自身关注,从而坚持了模型性能。
此外,经过参与chunk操作,优化了bucket大小的不平均性,提高了批次操作的效率。
多轮LSH方法进一步降落了相似的q被分到不同桶内的概率,经过多重哈希降落出现概率,成功了遮盖配置。
关于训练自回归文本生成等场景,经过与位置索引关联,经常使用相反的陈列对位置索引启动从新排序,而后经常使用比拟操作来计算掩码,成功了有效的遮盖。
全体而言,Reformer技术成功降落了Transformer在内存上的复杂度,尤其处置了显存疑问。
虽然在期间复杂度上存在潜在差距,特意是由于在计算留意力时须要对数据启动排序、非延续读取等疑问,Reformer展现了在期间换空间战略上的有效运行,为处置长序列疑问提供了高效处置打算。
Scaled Dot Product Attention (SDPA) 在 CPU 上的 性能优化
PyTorch 2.0 引入了 SDPA(Scaled Dot Product Attention 的优化),以改良 Transformer 中的 MHA(multi-head attention)性能。
SDPA 旨在处置大型言语模型(LLM)的两个关键痛点,以后版本关键允许 CUDA 设施,未来将在下一个版本中参与 CPU 版本。
该优化算法分为三种,其中两种成功无损减速,不扭转数学计算,因此不损失精度。
以下是对 SDPA 优化算法的概述及其如何处置性能疑问的具体说明。
在早期版本中,PyTorch 1.3 曾经对 启动优化,关键经过将点乘运算融合,清楚增加了对 attn 操作的内存访问。
这种优化方法基于将 Q、K、V 的大小与 T(序列长度)和 K(每个头的特色大小)的相关思考在内,经过融合操作大幅度提高了性能。
SDPA 优化算法的改良环节从最后的 efficient attention 算法开局,逐渐演进至 flash attention。
外围在于如何经过 tiling(即数据块化)防止在内存中调配大块的 attn 数据,从而应用缓存长处减速 pointwise 操作。
原始 scaled dot product attention 的计算环节可以合成为三个步骤。
首先引入 lazy softmax 来防止为 attn 调配实践内存,仅在每个线程中保管一些累积值,从而清楚增加内存占用。
但是,这种成功形式在性能上还有待优化,由于它造成计算退步,但仍能大幅增加内存需求。
进一步优化触及在 KV 数据上实施数据块化,增加对输入的写操作次数,经过每次迭代计算 q_i 与一个 K block 和 V block 的内积结果。
这种方法虽参与了计算的规模,但同时优化了内存访问形式,使其更具效率。
为了进一步增加 KV 数据的读取次数,优化算法将 Q 数据启动块化处置,每次迭代计算一个 Q block 与一个 KV block,以此增加对 KV 数据的读取。
这一步骤经过参与计算规模,成功了对内存访问的优化,同时保障缓存命中率,提高性能。
在浮点数类型上成功 SDPA 包含对 float16 或 bfloat16 的允许,关键经过经常使用 float32 启动累积运算,并应用配件减速优化,如 Intel Xeon 上的 AMX 配件减速。
SDPA 在处置因果掩码(Causal mask)时,经过在 s_i 缓存中运行掩码来增加不用要的 GEMM(矩阵乘法)运算,从而进一步提高性能。
实践运行中,经过数据块化技术,可以清楚提高处置效率。
优化环节中遇到的应战包含负载不平衡疑问,须要平衡在不同维度(如批次、头部、数据块)上的并行处置,以确保性能平衡。
此外,内存访问不平衡和并行性疑问也需处置,例如如何让 GEMM 和 pointwise 运算并行口头,以提高全体效率。
虽然存在这些应战,SDPA 优化算法经过逐渐迭代和优化,有效优化了 Transformer 模型在 CPU 上的性能,为大规模言语模型的训练和推理提供了更高效的允许。
AI大模型推理环节和优化技术
AI大模型推理环节与优化技术概述:大模型推理关键基于Transformer架构,其外围是留意力机制。
推理分为prefill(输入了解和初始化)和decoding(递归推理与解码输入)两个阶段。
prefill阶段先对用户输入启动tokenize,计算自留意力并生成KV缓存,占据约90%的期间,随后采样输入,前往给客户。
decoding阶段则逐词预测并计算留意力,对每个token启动计算,占80%的期间,还需启动detokenize转换。
性能评估目的包含:1. **吞吐量**:权衡单位期间内生成字符的数量,受用户输入长度影响。
2. **首字提前**:用户输入后系统照应生成首字符的期间,与输入长度相关。
3. **提前**:生成每个字符的期间,影响流利度,受batch size影响。
4. **QPS**:每秒处置恳求数,受恳求混合和GPU应用率影响。
优化技术关键包含:- **KVCache**:存储已计算的KV值,防止重复计算。
- **散布式推理**:经过并行处置提高效率。
- **流水线处置**:优化GPU资源经常使用,如Tokenize和Detokenize。
- **灵活批处置**:兼并恳求,混合prefill和decoding。
- **量化**:如INT4、INT8、FP8,降落内存消耗和减速计算。
- **System Prompt**:共享前缀缓存,增加首字提前。
- **预测生生长度**:预先预计长度,灵活调配内存。
- **Flash Attention**:应用GPU存储档次结构减速计算。
- **Paged Attention**:分页内存治理,按需追加显存。
- **精简Attention**:如MQA和GQA,共享参数增加计算。
选用适合的配件也至关关键,包含Nvidia和国产AI芯片。
总的来说,优化技术旨在优化推理效率,增加计算资源消耗,提供更快更流利的用户体验。
文章评论