Transforme框架和LLaMA框架对比(点击可看原图):
LLaMA模型的特点:
1、KV-Cache
使用缓存来优化计算过程中的键(Keys)和值(Values)的转置(Transpose)操作,这通常与注意力机制中的查询(Queries,Q)、键(Keys,K)和值(Values,V)的乘法操作相关。
计算过程与缓存(Caching):
1. 步骤 1:
- 进行键的转置(Keys_Transpose)。
- 计算查询(Queries)和转置后的键(Keys_Transpose)的乘积。
- 将计算结果与值(Values)相乘。
2. 缓存 K 和 V:
- 在步骤 1 中,计算得到的键(K)和值(V)的部分被缓存到内存中。
3. 恢复(Restoring)从缓存:
- 在后续步骤中,可以重用缓存中的键(K)和值(V),避免了重复计算。
4. 步骤 N:
- 表示后续的计算步骤,其中:
- 使用缓存中的键(Cached part of K)。
- 计算查询(Queries)和转置后的键(Keys_Transpose)的乘积。
- 与当前步骤中将要计算的值(Values: that will be computed on this step)相乘。
5. 缓存的目的:
- 通过缓存已经计算过的键和值,可以减少重复计算,提高计算效率。
- 缓存减少了对内存的访问次数,这有助于降低延迟并提升带宽利用率。
6. 计算优化:
- 缓存机制特别适用于那些在多个查询中重复使用的键和值,可以显著减少整体的计算负担。
7. 内存管理:
- 缓存机制需要有效的内存管理策略,以确保缓存数据能够及时存取,并且不会耗尽可用内存。
8. 应用场景:
- 这种缓存技术尤其适用于深度学习中的注意力机制,如Transformer模型,其中键和值的计算可以非常昂贵。
总结来说,KV-Cache是通过缓存键和值的计算结果来优化注意力机制中(Q * K^T) * V 计算过程的方法。这种技术可以提高计算效率,减少内存访问,并且通过重用缓存的数据来降低延迟和提高吞吐量。
2、推理框架:
在深度学习和自然语言处理领域,存在多种技术和工具用于提高模型的推理效率和吞吐量。
1. Fast Transformer:
Fast Transformer 是一种优化算法,旨在加速Transformer模型的计算,特别是自注意力机制的计算部分。
它通过减少不必要的重复计算和优化内存访问模式来提高效率。
2. DeepSpeed Inference:
DeepSpeed 是一个由微软推出的深度学习优化库,它提供了一套工具来加速和扩展模型训练和推理。
DeepSpeed Inference 专注于推理阶段,通过使用高效的推理引擎和优化技术来提高模型的推理速度。
3. DeepSpeed MII (Model Inference Interface):
这是DeepSpeed提供的一个用于模型推理的接口,它支持多种深度学习模型和框架。
MII 旨在简化模型部署,提供一致的推理体验。
4. OpenLLM:
OpenLLM 是指开放的大型语言模型,它们通常是基于Transformer架构的模型,可以用于各种NLP任务。
这些模型可以是开源的,允许研究者和开发者使用、修改和部署。
5. Hugging Face's Text Generation Inference:
Hugging Face 提供了一系列工具和库,如Transformers,用于模型的推理,特别是在文本生成任务中。
它支持连续批处理(continuous batching),这是一种在推理时动态地将输入分成多个批次的技术。
6. vLLM (Virtual LLM):
vLLM 是一种大型语言模型的优化实现,它通过使用量化和稀疏性等技术来减少模型的大小和计算需求。
vLLM 可以与Paged attention结合使用,这是一种将注意力机制分页处理的方法,以优化内存使用。
7. Paged Attention:
Paged Attention 是一种技术,它将模型的注意力机制分页处理,从而减少内存占用和提高计算效率。
8. Continuous Batching:
连续批处理是一种在推理时动态地将输入分成多个批次的技术,可以提高吞吐量和减少延迟。
9. 24x Higher Throughput than HuggingFace Transformers:
Hugging Face的Transformers库在特定任务上能够实现更高的吞吐量,这通常是通过减少计算延迟、优化内存使用和并行处理等方法实现的。
这些技术和工具的共同目标是提高大型语言模型的推理效率,降低延迟,增加吞吐量,并使这些模型更适合实时应用和大规模部署,不同的技术可能在不同的场景和需求下各有优势。
3、飞桨推理优化策略
在深度学习模型的推理优化中,针对Transformer模型和其变种,有多种技术可以用来提高效率和性能。以下是一些常见的优化策略:
1. 词表查询优化:
通过优化词嵌入的查找过程,可以减少计算延迟,尤其是在处理大规模词表时。
2. 多层Transformer融合优化:
将多个Transformer层融合为一个更高效的计算单元,以减少重复计算和内存消耗。
3. QKV GEMM横向融合(Query-Key-Value General Matrix Multiply):
在自注意力机制中,将Query、Key、Value的计算融合,以减少内存访问次数和计算量。
4. LayerNorm + 拆差融合:
将Layer Normalization操作与残差连接的拆差(即输入减去LayerNorm的输出)融合,以减少计算步骤。
5. Memory Efficient:
优化内存使用,例如通过使用更紧凑的数据结构或减少中间数据的存储。
6. Attention GEMM +后处理融合:
将注意力机制的矩阵乘法(GEMM)操作与后处理步骤(如softmax归一化)融合,以减少数据在不同步骤间传输的开销。
7. CacheKV复用:
在生成任务中,利用已经计算过的Key和Value来加速后续的计算,特别是在解码步骤。
8. 后处理采样优化:
对于生成模型的采样步骤进行优化,比如使用更高效的采样算法来减少延迟。
这些优化技术可以单独使用,也可以组合使用,以适应不同的应用场景和硬件平台。例如,在服务器端部署时,可能更关注吞吐量和计算效率;而在移动端或IoT设备上,内存和能耗效率可能更为关键。
在实现这些优化时,深度学习框架和库(如TensorFlow、PyTorch、PaddlePaddle等)提供了不同的API和工具来辅助开发者。此外,针对特定硬件(如GPU、TPU或FPGA)的优化也是提高推理性能的重要方面。
4、LLaMA架构特点
LLaMA(Large Language Model AI)是一种大型语言模型,它在自然语言处理(NLP)任务中表现出色。根据您提供的信息,以下是LLaMA架构在不同代中的一些关键特点:
第一代 LLaMA 架构特点:
1. Pre-normalization:
LLaMA使用预归一化(Pre-normalization),即在每个Transformer子层的输入上进行归一化处理,而不是在输出上。
这种技术有助于提高模型训练的稳定性,最初由GPT-3引入,后被LLaMA采用。
2. RMSNorm:
LLaMA采用RMSNorm作为归一化函数,这是一种计算效率较高的归一化方法,有助于模型更快收敛。
3. SwiGLU 激活函数:
替代了传统的ReLU激活函数,SwiGLU提供了更好的性能,同时减少了参数数量。
SwiGLU的参数量是4d的2/3,这与PaLM论文中使用的4d不同,有助于模型的效率。
4. Rotary Embeddings (RoPE):
LLaMA不使用传统的positional embeddings,而是在每个Transformer层中加入RoPE,这是一种基于旋转机制的位置编码方法,有助于模型捕捉序列中单词的顺序信息。
第二代 LLaMA 架构特点:
1. Grouped-query Attention:
第二代LLaMA引入了分组查询(grouped-query)注意力机制,这是一种改进的注意力计算方法,可以提高模型处理长距离依赖的能力。
通过将注意力分数分组,可以减少计算量并提高效率,同时保持对关键上下文信息的捕捉。
通用特点:
- LLaMA模型可能还包括其他一些通用的Transformer架构特点,如多头注意力机制(Multi-head Attention)和层间残差连接等。
LLaMA模型的这些特点使其在处理复杂的NLP任务时表现出色,尤其是在需要模型捕捉长距离依赖和细节信息的场景中。
5、Multi-Query Attention (MQA)
Falcon-7B,40B 减小推理时的KV cache的原理图:
Multi-Query Attention (MQA) 是一种注意力机制的变种,它在传统的Transformer模型中进行了创新,以提高模型的效率和性能。以下是关于MQA和它在Falcon-7B、40B模型上的应用,以及减小推理时的KV cache的一些信息:
Multi-Query Attention (MQA):
1. 概念:在标准的Transformer模型中,每个输出元素只对应一个查询(Query)向量。MQA的核心思想是为每个输出元素生成多个查询向量,这样可以使模型在处理长距离依赖时更加灵活。
2. 优势:MQA可以提高模型对不同上下文信息的捕捉能力,尤其是在长文本处理方面。它允许模型在不同的“视角”下考虑信息,从而提高对复杂语言现象的理解。
3. 实现:在实现上,MQA通常通过在自注意力机制中引入额外的参数来生成多个查询向量,并将它们与键(Key)向量相乘,以计算注意力分数。
Falcon-7B,40B模型:
1. 规模:Falcon-7B和Falcon-40B是大型语言模型,其中“7B”和“40B”指的是模型的参数数量,即分别为70亿和400亿个参数。
2. 应用MQA:这些模型可能会采用MQA来提高对长文本的处理能力,尤其是在需要理解大量上下文信息的任务中。
减小推理时的KV cache:
1. KV Cache:在Transformer模型中,Key(K)和Value(V)的计算可能占用大量内存,尤其是在处理长序列时。为了优化推理性能,可以减少模型在推理时使用的KV缓存。
2. 优化技术:
CacheKV复用:通过复用已经计算过的K和V,减少重复计算,从而降低内存占用。
分块处理:将长序列分割成小块,只计算当前块所需的K和V,而不是整个序列。
动态删除:在推理过程中,一旦某个部分的K和V不再需要,就及时从缓存中删除,以释放内存。
3. 平衡性能和内存:减小KV cache的大小可以减少内存占用,但可能会以牺牲一定的计算为代价。因此,需要在性能和内存使用之间找到合适的平衡点。
4. 应用场景:在资源受限的环境中,如移动设备或嵌入式系统,减小KV cache可以显著提高模型的可用性。
通过采用MQA和优化KV cache的使用,Falcon-7B和Falcon-40B这样的大型语言模型可以在保持高性能的同时,提高推理效率和减少资源消耗。
6、Group Query Attention (GQA)
Group Query Attention (GQA) 是一种改进的注意力机制,旨在提高Transformer模型的效率和性能,特别是在处理长序列数据时。以下是GQA的一些关键特点:
1. 分组查询:在标准的自注意力机制中,每个输出元素通常对应一个查询(Query)向量。GQA通过将查询向量分成多个组来工作,每组关注输入序列的不同部分。
2. 减少计算量:由于每组查询向量可以并行处理,GQA可以减少模型的计算复杂度,特别是在序列长度较大时。
3. 提高内存效率:通过减少每个注意力头需要处理的键(Key)和值(Value)的数量,GQA有助于降低模型的内存占用。
4. 保持性能:尽管减少了每个头的计算量,GQA仍然能够保持或甚至提高模型的性能,因为它允许模型以不同的“视角”关注输入的不同部分。
5. 灵活性:GQA可以通过调整查询分组的数量来灵活地适应不同的计算预算和序列长度。
6. 实现:在实现上,GQA通常涉及将查询矩阵分成多个较小的矩阵,并将它们与键和值矩阵相乘,然后对结果进行适当的组合以生成最终的输出。
7. 应用:GQA可以应用于各种基于Transformer的模型,包括但不限于自然语言处理任务,如文本分类、机器翻译和文本生成。
8. 与其他技术的结合:GQA可以与其他优化技术(如稀疏注意力模式、低秩近似等)结合使用,以进一步提高模型的效率。
9. 研究和开发:GQA是深度学习和自然语言处理领域持续研究的主题,研究人员正在探索不同的方法来改进注意力机制,以应对计算资源和序列长度的限制。
GQA是一种有前景的技术,它通过减少注意力机制的计算和内存需求,使得处理大型语言模型变得更加可行,尤其是在资源受限的环境中。
7、LLaMA v1架构
1. 前置的RMSNorm:在每个Transformer子层的输入进行归一化处理,有助于提高训练稳定性。
2. RoPE旋转式位置编码:在Query(Q)和Key(K)上使用,替代传统的positional embeddings,以编码序列中单词的位置信息。
3. Causal Mask:确保每个位置的token只能看到它前面的tokens,维持因果关系,这对于生成任务尤其重要。
4. K、V拼接:模型可以将之前的Key(K)和Value(V)与当前的K、V拼接,允许Query(Q)访问更早的信息,增强模型对长距离依赖的处理能力。
5. MLP表达式:使用特定的多层感知机(MLP)结构,表达式为 down(up(c) × SiLU(gate(a))),其中 down, up, gate 都是线性层,SiLU 是一种激活函数。
6. GroupQueryAttention:在V2版本中,使用了Group Query Attention,这是一种注意力机制的优化,可以提高处理长序列数据的效率。
Causal Mask技术要点:
Causal Mask的作用是保证模型在预测下一个token时只能使用之前的信息,确保生成的序列保持因果关系,即后面的输出不会依赖于未来的输入。
工作原理:
在标准的自注意力(Self-Attention)机制中,模型会考虑输入序列中所有位置的信息来生成每个输出token。然而,在生成任务中,这种机制会导致模型违反因果性,因为它允许模型在生成一个token时看到它之后的信息。
Causal Mask 通过为注意力分数矩阵添加一个掩码(Mask)来解决这个问题。这个掩码通常是一个上三角矩阵,其中上三角的元素被设置为一个非常大的负数(如负无穷大),而下三角的元素保持不变。在计算softmax函数之前应用这个掩码,可以确保模型在生成每个token时只能关注到它之前的token。
应用:
1. 文本生成:在文本生成任务中,Causal Mask 确保模型生成的每个词都是基于之前生成的词,而不是之后的词。
2. 机器翻译:在序列到序列的翻译任务中,Causal Mask 可以应用于解码器,以保证解码器在生成目标序列的每个词时,只能使用到已经生成的词。
3. 语音合成:在语音合成中,Causal Mask 可以用于生成模型,以确保生成的音频信号是按时间顺序逐步构建的。
4. 条件语言模型:在条件语言模型中,Causal Mask 可以用于确保模型在预测下一个token时只考虑给定的上下文信息。
实现细节:
在实际实现中,Causal Mask 通常通过在注意力分数上应用一个掩码矩阵来实现。这个掩码矩阵的形状与注意力分数矩阵相同,并且是通过对一个与序列长度相同的矩阵进行三角化操作得到的。例如,在PyTorch中,可以使用torch.triu函数来创建一个上三角掩码矩阵。
Causal Mask 是保持自然语言生成任务中因果一致性的关键技术,它有助于生成更加合理和连贯的文本序列。
softmax函数技术要点:
Softmax 函数是一种在机器学习和深度学习中广泛使用的激活函数,特别是在处理多分类问题时。它的作用是将一个实数向量转换为一个概率分布。
MLP表达式技术要点:
使用特定的多层感知机(MLP)结构,表达式为 down(up(c) × SiLU(gate(a))),其中 down, up, gate 都是线性层,SiLU 是一种激活函数。
在深度学习中,多层感知机(MLP)是一种基本的全连接神经网络结构,由多个线性层(也称为密集层或全连接层)组成,这些线性层之间可以插入非线性激活函数以提高模型的表达能力。
8、LLaMA v2架构
跟LLaMA v1相比,引入了grouped-query attention(GQA)
9、Layer Norm & RMS Norm
BatchNorm & LayerNorm
批归一化(Batch Normalization,简称BatchNorm)和层归一化(Layer Normalization,简称LayerNorm)两种在深度学习中常用的归一化技术。
批归一化(BatchNorm):
1. 计算:BatchNorm 在计算均值(μ)和方差(σ²)时使用整个批次(batch)的数据。
2. 训练与推理:在训练时,BatchNorm 动态计算均值和方差;而在推理时,使用训练阶段计算出的均值和方差的固定值。
3. 训练推理不匹配:由于训练和推理时使用不同的统计量,可能导致训练与推理之间的不匹配。
4. 推理优势:推理时,BatchNorm 可以与上一层的卷积层合并,这有助于提高推理效率。
层归一化(LayerNorm):
1. 计算:LayerNorm 仅使用特征的最后一维来计算均值和方差。
2. 训练推理一致性:LayerNorm 在训练和推理时使用相同的计算过程,因为它们都是基于最后一层的统计量。
3. 推理劣势:由于LayerNorm 在推理时也需要动态计算均值和方差,它不能与矩阵乘法(matmul)或卷积(conv)操作合并,这可能影响推理速度。
比较和选择:
- BatchNorm 利用批次数据进行归一化,可能会导致训练和推理时的不一致,但在推理时可以与卷积层合并,提高效率。
- LayerNorm 不依赖于批次数据,保持了训练和推理过程的一致性,但在推理时无法与其他操作合并,可能影响推理速度。
这两种归一化技术各有优势和局限性,选择哪一种取决于具体的应用场景和模型需求。BatchNorm 通常在卷积神经网络(CNN)中更受欢迎,而LayerNorm 在循环神经网络(RNN)和Transformer模型中使用得更多。
Layer Norm & RMS Norm
Layer Normalization (Layer Norm) 和 RMS Normalization (RMSNorm) 都是深度学习中用于稳定训练过程和提高模型性能的归一化技术。它们通过对不同层的激活输出进行归一化来减少内部协变量偏移(Internal Covariate Shift)。
Layer Normalization (Layer Norm)
1. 概念:Layer Norm 是一种对模型中各层的激活输出进行归一化的技术。它计算了激活输出的均值和方差,然后使用这些统计数据来归一化每个激活值。
2. 作用:Layer Norm 可以减少不同训练阶段和不同数据批次之间的激活分布差异,从而允许更高的学习率,并可能提高模型的泛化能力。
RMS Normalization (RMSNorm)
1. 概念:RMSNorm 是一种变体,它使用均值和标准差的平方根(RMS,Root Mean Square)来归一化激活输出。
2. 作用:RMSNorm 与Layer Norm类似,但由于使用了RMS,它对极端值(outliers)不那么敏感,这可能在某些情况下更稳定。
比较和选择:
- 稳定性:RMSNorm 可能在处理包含极端值的数据时更稳定,因为它对这些值的响应更平滑。
- 实现:Layer Norm 是更广泛使用的归一化形式,许多深度学习框架都提供了对它的支持。RMSNorm 作为一种替代方法,可能在特定情况下提供更好的性能。
- 超参数:两种方法都涉及可学习的参数,这些参数允许模型在归一化后调整激活分布的形状。
RMSNorm详解:
在 RMS Norm(RMSNorm)中的 "RMS" 是 "Root Mean Square" 的缩写,中文意思是“均方根”。这是一种数学方法,用于计算一组数值的加权平均值的平方根。
RMS 的特点:
1. 平方根:RMS 通过取平方根来减少数据的量级,这使得它对极端值(非常高或非常低的数值)不那么敏感。
2. 加权平均:RMS 考虑了每个数据点的平方,这意味着它在计算平均值时给予了每个数据点相等的权重。
3. 方差:RMS 与方差有关联,方差是各数据点与均值差的平方的平均值。RMS 可以看作是方差的平方根,它提供了数据分布离散程度的一种度量。
RMS 在归一化中的应用:
在 RMSNorm 中,RMS 用于计算输入数据的归一化因子。通过将输入数据除以 RMS,可以减少数据的方差,从而使数据分布更加接近标准正态分布(高斯分布),其中均值为0,方差为1。
这种归一化处理有助于稳定神经网络的训练过程,因为它减少了不同训练步骤之间激活分布的变化,从而允许模型使用更高的学习率,并可能提高模型的泛化能力。
总结来说,RMS Norm 中的 "RMS" 指的是均方根,它是一种用于数据归一化的数学工具,有助于稳定和优化深度学习模型的训练。
10、SwiGLU
SwiGLU是GLU(gated linear unit,门控线性单元)的一种,GLU是输入的两个线性变换的逐元素乘积,其中一个线性变换的结果经过一种激活函数。如果省略激活函数,则称之为双线性(bilinear)层。
SwiGLU就是指 激活函数用Swish的GLU。
LLaMA官方代码的Swish函数,也就是SiLU函数。
用了SwiGLU后,Transformer的FFN有3个权重矩阵,为了保持参数量恒定,FFN的hidden dimension从4H变成了2/3*4H
FFN的权重矩阵:up_proj (H*8/3H), gate_proj (H*8/3H), down_proj (8/3H*H)
11、旋转位置编码 (RoPE)
旋转位置编码(Rotary Positional Encoding,简称RoPE)是一种用于自然语言处理(NLP)中的位置编码技术,特别是在Transformer模型中。RoPE的核心思想是通过一种特殊的编码方式来捕捉序列中单词的顺序信息。以下是RoPE的关键特点:
1. 旋转矩阵:RoPE使用旋转矩阵来对每个位置的词嵌入(word embeddings)进行编码。旋转矩阵是基于复数的,它可以将词嵌入映射到复平面上的一个旋转位置。
2. 位置敏感:通过旋转矩阵,RoPE能够在模型的自注意力机制中引入位置敏感性,这有助于模型理解单词之间的相对位置关系。
3. 参数共享:RoPE的旋转矩阵是可学习的,并且在整个序列中共享相同的参数,这意味着模型可以学习到对特定任务最有用的旋转角度。
4. 计算效率:RoPE的计算相对于传统的固定位置编码(如sinusoidal positional encodings)更高效,因为它不需要为序列中的每个位置单独计算编码。
5. 模型兼容性:RoPE可以很容易地集成到现有的Transformer模型中,作为位置编码的一种替代方案。
6. 实现:RoPE的实现涉及到将每个词嵌入与一个可旋转的向量相乘,这个向量是根据词在序列中的位置计算出来的。
7. 效果:RoPE被证明在某些NLP任务中,如文本分类和问答系统,能够提高模型的性能,尤其是在处理长距离依赖时。
8. 研究进展:RoPE是由Su等人在2021年的论文《RoFormer: Enhanced Transformer with Rotary Positional Embedding》中提出的,它是Transformer模型位置编码方式的一种创新。
RoPE通过引入旋转矩阵来增强模型对序列中位置信息的捕捉能力,从而提高模型在各种NLP任务上的性能。
12、LLaMA-70B GQA带来的影响
LLaMA的GQA,减小了KV Cache,有助于增大batch,或者增加token数;
summary case,GQA使得可以增大batch,会降低DRAM带宽需求,增大3D和A100的差距,对3D不利;
token generation case,GQA使得可以增加token数,拉大3D和A100差距,当然也可以增大batch,但是这个现实场景不一定能满足。
所以GQA有助于拉大3D擅长的场景(token generation case)下和A100的性能差距。