当前位置: 首页 > news >正文

网站推广分析网站开发必须要用js

网站推广分析,网站开发必须要用js,网页设计欣赏及评析,山东省无障碍网站建设标准原文链接#xff1a;Mastering LLM Techniques: Inference Optimization | NVIDIA Technical Blog 大模型相关技术文章已整理到Github仓库#xff0c;欢迎start! 堆叠Transformer层以创建大型模型可以获得更好的准确性、few-shot学习能力#xff0c;甚至在各种语言任务中具有… 原文链接Mastering LLM Techniques: Inference Optimization | NVIDIA Technical Blog 大模型相关技术文章已整理到Github仓库欢迎start! 堆叠Transformer层以创建大型模型可以获得更好的准确性、few-shot学习能力甚至在各种语言任务中具有接近人类的涌现能力。这些基础模型的训练成本很高而且在推理过程中可能需要大量的内存和计算经常性成本。当今最流行的大型语言模型LLM的大小可以达到数百亿到数千亿个参数并且根据用例的不同可能需要摄入长输入或上下文这也会增加开销。 这篇文章讨论了LLM推理中最紧迫的挑战以及一些实用的解决方案。读者应该对transformer架构和注意力机制有一个基本的了解。 1.理解LLM推理 大多数流行的only-decode LLM例如 GPT-3都是针对因果建模目标进行预训练的本质上是作为下一个词预测器。这些 LLM 将一系列tokens作为输入并自回归生成后续tokens直到满足停止条件例如生成tokens数量的限制或遇到停止词或直到生成特殊的 end 标记生成结束的tokens。该过程涉及两个阶段预填充阶段和解码阶段。 请注意tokens是模型处理的语言的原子部分。一个tokens大约是四个英文字符。所有自然语言在输入模型之前都会转换为toikens。 1.1 预填充阶段或处理输入 在预填充阶段LLM处理输入token以计算中间状态keys和value用于生成“第一个”token。每个新的token都依赖于所有先前的token但由于输入的全部已知因此在运算上都是高度并行化矩阵运算可以有效地使用GPU。 1.2 解码阶段或生成输出 在解码阶段LLM一次自回归生成一个输出token直到满足停止条件。每个输出tokens都需要直到之前迭代的所有输出状态keys和values。这与预填充输入处理相比就像矩阵向量运算未充分利用GPU计算能力。数据weights, keys, values, activations 从内存传输到GPU的速度决定了延迟而不是计算实际时间消耗。即这是一个内存限制操作。 本文中的许多推理挑战和相应的解决方案都涉及此解码阶段的优化高效的注意力模块、有效管理键和值等。 不同的LLMs可能使用不同的tokenizers因此比较它们之间的输出tokens可能并不简单。在比较推理吞吐量时即使两个 LLMs每秒输出的tokens相似如果它们使用不同的tokenizers也可能不相等。这是因为相应的tokens可能代表不同数量的字符。 1.3 批处理Batching 提高 GPU 利用率和有效吞吐量的最简单方法是通过批处理。由于多个请求使用相同的模型因此权重的内存成本被分散。大批量数据传输到 GPU 一次处理将提高GPU资源的利用率。 然而批量大小只能增加到一定限制此时可能会导致内存溢出。为了防止这种情况发生需要查看键值 (KV) 缓存和 LLM 内存要求。 传统批处理也称为静态批处理 static batching不是最佳的。这是因为对于批次中的每个请求LLM 可能会生成不同数量的tokens并且不同tokens有不同的执行时间。因此批次中的所有请求都必须等待最长token的处理完成而生成长度的巨大差异可能会加剧这种情况。有一些方法可以缓解这种情况例如稍动态批处理。 1.4 KV缓存 解码阶段的一种常见优化是 KV 缓存。解码阶段在每个时间步生成单个token但每个token依赖于之前token的键和值张量包括预填充时计算的输入tokens的 KV 张量以及当前时间步之前计算的任何新 KV 张量 。 为了避免在每个时间步重新计算所有tokens的这些张量可以将它们缓存在 GPU 内存中。每次迭代当需要计算新token时它们都会被添加到正在运行的缓存中以便在下一次迭代中使用。在一些实现中模型的每一层都有一个KV缓存。 图1 KV缓存机制 1.5 LLM内存需求 实际上LLM对GPU显存的需求主要是模型权重和KV缓存 模型权重模型参数占用内存。例如具有 70 亿个参数的模型例如 Llama2-7B以 16 位精度FP16 或 BF16加载将占用大约 7B * sizeof(FP16) ~ 14 GB 的内存。KV缓存自注意力张量的缓存占用内存避免冗余计算。 使用批处理时批处理中每个请求的 KV 缓存仍然必须单独分配并且可能会占用大量内存。下面的公式描述了 KV 缓存的大小适用于当今最常见的 LLM 架构。 $$ 每个token的KV缓存大小(字节) 2 * (num_layers) * (num_heads * dim_head) * precision_in_bytes $$ 第一个因子 2 代表 K 和 V 矩阵。通常(num_heads * dim_head)的值与Transformer的hidden_​​size或模型的维度d_model相同。这些模型属性通常可以在配置文件中找到。 输入批次中输入序列中的每个tokens都需要此内存大小。假设半精度KV缓存的总大小由以下公式给出: 总 K V 缓存大小 ( 字节 ) ( b a t c h _ s i z e ) ∗ ( s e q u e n c e _ l e n g t h ) ∗ 2 ∗ ( n u m _ l a y e r s ) ∗ ( h i d d e n _ s i z e ) ∗ s i z e o f ( F P 16 ) 总KV缓存大小(字节)(batch\_size) * (sequence\_length) * 2 * (num\_layers) * (hidden\_size) * sizeof(FP16) 总KV缓存大小(字节)(batch_size)∗(sequence_length)∗2∗(num_layers)∗(hidden_size)∗sizeof(FP16) 例如对于 16 位精度的 Llama 2 7B 模型批量大小为 1KV 缓存的大小将为 1 * 4096 * 2 * 32 * 4096 * 2 字节即约 2 GB。 高效的管理 KV 缓存是一项具有挑战性的工作。内存需求随着批量大小和序列长度线性增长可以快速扩展。因此它限制了可服务的吞吐量并对长上下文输入提出了挑战。这就是本文中介绍的多项优化背后的动机。 2.模型并行化扩展LLM 减少模型权重在每设备的显存占用的一种方法是将模型分布在多个 GPU 上。分散内存和计算可以运行更大的模型或更大批量的输入。模型并行化是训练或推理模型所必需的模型并行化需要比单个设备更多的内存用来训练和推理延迟或吞吐量。根据模型权重的划分方式有多种方法可以并行化模型。 请注意数据并行性也是一种经常在与下面列出的其他技术相同的的技术。在这种情况下模型的权重被复制到多个设备上并且输入的全局批量大小在每个设备上被分成微批次。它通过处理较大的批次来减少总体执行时间。然而这是一种训练时间优化在推理过程中不太相关。 2.1 Pipeline并行 Pipeline并行化将模型垂直分片为块其中每个块包含在单独设备上执行的层的子集。图 2a 说明了四路Pipeline其中模型按顺序分区并且所有层的四分之一子集在每个设备上执行。一个设备上的一组操作的输出被传递到下一个设备后者继续执行后续块。 F n F_n Fn​和 B n B_n Bn​分别表示设备 n n n 上的前向传播和后向传播。每个设备上存储模型权重的内存需求被分成四份。 该方法的缺点是由于处理的顺序性质某些设备或层在等待前一层的输出激活、梯度时可能保持空闲状态。这会导致前向和后向传递效率低下或出现“Pipeline bubbles”。在图 2b 中白色空白区域是Pipeline并行性产生的Pipeline bubbles其中设备闲置且未得到充分利用。 微批处理可以在一定程度上缓解这种情况如图 2c 所示。输入的全局批次大小被分成子批次这些子批次被一一处理最后累积梯度。请注意 F n , m F_{n,m} Fn,m​ 和 B n , m B_{n,m} Bn,m​ 分别表示设备n上m批次的前向和后向传递。这种方法缩小了管道气泡的尺寸但并没有完全消除它们。 图2 Pipeline并行 2.2 Tensor并行 Tensor并行化将模型的各个层水平分片为更小的、独立的计算块这些计算块可以在不同的设备上执行。Transformer的主要组成部分注意力块和多层感知器MLP层是可以利用Tensor并行化的。在多头注意力块中每个头或一组头可以分配给不同的设备以便它们可以独立且并行地计算。 图3 Tensor并行化MLP和自注意力 图 3a 显示了两层 MLP Tensor并行的示例每一层都由一个圆角框表示。在第一层中权重矩阵 A A A分为 A 1 A_1 A1​和 A 2 A_2 A2​ 。对于输入X可以在同一批次不同设备上计算 X A 1 XA_1 XA1​ 和$XA_2 其中 f 是 i d e n t i t y 操作。这将每个设备上存储权重的内存需求减半。归约操作 其中f是identity 操作。这将每个设备上存储权重的内存需求减半。归约操作 其中f是identity操作。这将每个设备上存储权重的内存需求减半。归约操作g$组合了第二层的输出。 图 3b 是自注意力层中Tensor并行的示例。多个注意力头本质上是并行的并且可以跨设备分割。 2.3 Sequence并行 Tensor并行化是有局限性它需要将层划分为独立的、可管理的块不适用于 LayerNorm 和 Dropout 等操作而是在tensor并行中复制。虽然 LayerNorm 和 Dropout 的计算成本较低但它们确实需要大量内存来存储冗余激活。 如Reducing Activation Recomputation in Large Transformer Models所示这些操作在输入序列中是独立的并且这些操作可以沿着“序列维度”进行分区从而提高内存效率。这称为序列并行性。 图4transformer层的tensor并行化和sequence并行化 模型并行技术不是唯一的可以结合使用。它们可以帮助扩展和减少 LLM 的每 GPU 内存占用量但也有专门针对注意力模块的优化技术。 3.注意力机制优化 缩放点积注意力 (SDPA scaled dot-product attention) 操作将query和key对映射到输出如论文Attention Is All You Need所述。 3.1 多头注意力MHA 作为 SDPA 的增强三个变换张量对QKV分别进行线性变换这些变换不会改变原有张量的尺寸使模型能够共同关注来自不同位置的不同表示子空间的信息。这些子空间是独立学习的使模型能够更丰富地理解输入中的不同位置。 如图 5 所示多个并行注意力操作的输出被拼接后线性投影以组合起来。每个并行注意力层称为“头”这种方法称为多头注意力MHA。 当使用八个并行注意力头时每个注意力头的维度都会减少例如 d _ m o d e l / 8 d\_model/8 d_model/8。这使得计算成本与单头注意力相似。 图5 缩放点积注意力左和多头注意力右的图示并行的多个 SDPA 头 3.2 多查询注意力MQA MHA 的推理优化之一称为多查询注意力 (MQA)如 Fast Transformer Decoding 中提出的在多个注意力头之间共享键和值。与以前一样查询向量仍然被投影多次。 虽然 MQA 中完成的计算量与 MHA 相同但从内存读取的数据量键、值只是以前的一小部分。当受内存带宽限制时这可以实现更好的计算利用率。它还减少了内存中 KV 缓存的大小为更大的批量大小留出了空间。 key头的减少会带来潜在的准确性下降。此外需要在推理时利用这种优化的模型需要在启用 MQA 的情况下进行训练或至少使用大约 5% 的训练量进行微调。 3.3 分组注意力GQA 分组查询注意力 (GQA) 通过将键和值投影到几组查询头在 MHA 和 MQA 之间取得平衡图 6。在每个组中它的行为类似于多查询注意力。 图 6 显示多头注意力有多个键值头左。分组查询注意力中心的键值头多于一个但少于查询头的数量这是内存需求和模型质量之间的平衡。多查询注意力右具有单个键值头有助于节省内存。 最初使用 MHA 训练的模型可以使用原始训练计算的一小部分通过 GQA 进行“升级训练”。它们获得接近 MHA 的质量同时保持接近 MQA 的计算效率。 Llama 2 70B 是利用 GQA 的模型示例。 MQA 和 GQA 等优化通过减少存储的key头和value头的数量来帮助减少 KV 缓存所需的内存。 KV 缓存的管理方式可能仍然效率低下。与优化注意力模块本身不同下一节将介绍一种更高效的 KV 缓存管理技术。 3.4 Flash attention 优化注意力机制的另一种方法是修改某些计算的顺序以更好地利用 GPU 的内存层次结构。神经网络通常用层来描述大多数实现也以这种方式布局每次按顺序对输入数据进行一种计算。这并不总是能带来最佳性能因为对已经进入内存层次结构的更高、性能更高级别的值进行更多计算可能是有益的。 在实际计算过程中将多个层融合在一起可以最大限度地减少 GPU 需要读取和写入内存的次数并将需要相同数据的计算分组在一起即使它们是神经网络中不同层的一部分。 一种非常流行的融合是 FlashAttention这是一种 I/O 感知精确注意算法详细信息请参阅 FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness。精确注意力意味着它在数学上与标准多头注意力相同具有可用于多查询和分组查询注意力的变体因此可以无需修改即可交换到现有的模型架构甚至是已经训练的模型。 I/O 感知意味着在将操作融合在一起时它会考虑前面讨论的一些内存移动成本。特别是FlashAttention 使用“平铺”一次性完全计算并写出最终矩阵的一小部分而不是分步对整个矩阵进行部分计算写出中间的中间值。 图 7 显示了 40 GB GPU 上的平铺 FlashAttention 计算模式和内存层次结构。右图显示了对注意力机制的不同组件进行融合和重新排序所带来的相对加速。 图7 40 GB GPU 上的平铺 FlashAttention 计算模式和内存层次结构 4.KV缓存的分页高效管理 有时KV 缓存会静态地“过度配置”(over-provisioned)以考虑最大可能的输入支持的序列长度因为输入的大小是不可预测的。例如如果模型支持的最大序列长度为 2,048则无论请求中输入和生成的输出的大小如何都将在内存中保留大小为 2,048 的数据。该空间可以是连续分配的并且通常其中大部分未被使用从而导致内存浪费或碎片。该保留空间在请求的生命周期内被占用。 图8 由于过度配置和低效的 KV 缓存管理而导致的内存浪费和碎片 受操作系统分页的启发PagedAttention 算法能够将连续的键和值存储在内存中的不连续空间中。它将每个请求的 KV 缓存划分为代表固定数量token的块这些块可以不连续存储。 在注意力计算期间使用根据记录索引获取这些块。当新的token产生时就会进行新的区块分配。这些块的大小是固定的消除了因不同请求需要不同分配等挑战而产生的低效率。这极大地限制了内存浪费从而实现了更大的批量大小从而提高了吞吐量。 5.模型优化技术 到目前为止我们已经讨论了 LLM 消耗内存的不同方式、跨多个不同 GPU 分配内存的一些方式以及优化注意力机制和 KV 缓存。还有多种模型优化技术可以通过修改模型权重本身来减少每个 GPU 上的内存使用。 GPU 还具有专用硬件来加速这些修改值的运算从而为模型提供更多加速。 5.1 量化Quantization 量化是降低模型权重和激活精度的过程。大多数模型都以 32 或 16 位精度进行训练其中每个参数和激活元素占用 32 或 16 位内存单精度浮点。然而大多数深度学习模型可以用每个值八个甚至更少的位来有效表示。 图 9 显示了一种可能的量化方法之前和之后的值分布。在这种情况下舍入会丢失一些精度并且剪裁会丢失一些动态范围从而允许以更小的格式表示值。 图9 一种可能的量化方法之前和之后的值分布 降低模型的精度可以带来多种好处。如果模型占用的内存空间较少则可以在相同数量的硬件上安运行更大的模型。量化还意味着可以在相同的带宽上传输更多参数这有助于加速带宽有限的模型。 LLM 有许多不同的量化技术涉及降低激活、权重或两者的精度。量化权重要简单得多因为它们在训练后是固定的。然而这可能会留下一些性能问题因为激活仍然保持在更高的精度。 GPU 没有用于乘以 INT8 和 FP16 数字的专用硬件因此必须将权重转换回更高精度以进行实际运算。 还可以量化激活、Transformer块和网络层的输入但这也有其自身的挑战。激活向量通常包含异常值有效地增加了它们的动态范围并使以比权重更低的精度表示这些值变得更具挑战性。 一种选择是通过模型传递代表性数据集并选择以比其他激活更高的精度表示某些激活来找出这些异常值可能出现的位置 (LLM.int8())。另一种选择是借用易于量化的权重的动态范围并在激活中重用该范围。 5.2 稀疏Sparsity 与量化类似事实证明许多深度学习模型对于修剪或用 0 本身替换某些接近 0 的值具有鲁棒性。稀疏矩阵是许多元素为 0 的矩阵。这些矩阵可以用压缩形式表示比完整的稠密矩阵占用的空间更少。 图10以压缩格式表示的稀疏矩阵由非零数据值及其相应的两位索引组成 GPU 尤其具有针对某种结构化稀疏性的硬件加速其中每四个值中有两个由零表示。稀疏表示还可以与量化相结合以实现更大的执行速度。寻找以稀疏格式表示大型语言模型的最佳方法仍然是一个活跃的研究领域并为未来提高推理速度提供了一个有希望的方向。 5.3 蒸馏Distillation 缩小模型大小的另一种方法是通过称为蒸馏的过程将其知识转移到较小的模型。此过程涉及训练较小的模型称为学生来模仿较大模型教师的行为。 蒸馏模型的成功例子包括 DistilBERT它将 BERT 模型压缩了 40%同时保留了 97% 的语言理解能力速度提高了 60%。 虽然LLMs中的蒸馏是一个活跃的研究领域但神经网络的一般方法首次在Distilling the Knowledge in a Neural Network中提出 学生网络经过训练可以反映较大教师网络的性能使用损失函数来测量其输出之间的差异。该目标还可能包括将学生的输出与真实标签进行匹配的原始损失函数。 匹配的教师输出可以是最后一层称为 logits或中间层激活。 图 11 显示了知识蒸馏的总体框架。教师的 logits 是学生使用蒸馏损失进行优化的软目标。其他蒸馏方法可能会使用其他损失措施来从老师那里“蒸馏”知识。 图11知识蒸馏的通用框架 蒸馏的另一种方法是使用教师合成的数据对LLMs学生进行监督培训这在人工注释稀缺或不可用时特别有用。一步一步蒸馏更进一步除了作为基本事实的标签之外还从LLMs教师那里提取基本原理。这些基本原理作为中间推理步骤以数据有效的方式培训规模较小的LLMs。 值得注意的是当今许多最先进的LLMs都拥有限制性许可证禁止使用他们的成果来训练其他LLMs这使得找到合适的教师模型具有挑战性。 6.模型服务技术 模型执行通常受内存带宽限制特别是权重中的带宽限制。即使在应用了前面描述的所有模型优化之后它仍然很可能受到内存限制。因此在加载模型权重时尽可能多地处理它们。换句话说尝试并行。可以采取两种方法 动态批处理(In-flight batching) 同时执行多个不同的请求。预测推理(Speculative inference) 并行执行序列的多个不同步骤以尝试节省时间。 6.1 动态批处理In-flight batching LLMs 具有一些独特的执行特征这些特征可能导致在实践中难以有效地处理批量请求。一个模型可以同时用于多种不同的任务。从聊天机器人中的简单问答响应到文档摘要或代码块的生成工作负载是高度动态的输出大小变化几个数量级。 这种多功能性使得批处理请求并有效地并行执行它们变得具有挑战性这是服务神经网络的常见优化。这可能会导致某些请求比其他请求更早完成。 为了管理这些动态负载许多LLMs 服务解决方案包括一种称为连续或动态批处理的优化调度技术。这利用了这样一个事实LLMs的整个文本生成过程可以分解为模型上的多次执行迭代。 通过动态批处理服务器运行时会立即从批处理中剔除已完成的序列而不是等待整个批处理完成后再继续处理下一组请求。然后它开始执行新请求而其他请求仍在进行中。因此动态批处理可以极大地提高实际用例中 GPU 的整体利用率。 6.2 预测推理Speculative inference 预测推理也称为推测采样、辅助生成或分块并行解码是并行执行 LLM 的另一种方式。通常GPT 风格的大语言模型是自回归模型逐个生成文本标记。 生成的每个标记都依赖于它之前的所有标记来提供上下文。这意味着在常规执行中不可能从同一个序列并行生成多个token必须等待第 n 个token生成后才能生成 n1 个token。 图 12 显示了预测推理的示例其中临时模型临时预测并行验证或拒绝的多个未来步骤。在这种情况下临时模型中的前两个预测token被接受而最后一个在继续生成之前被拒绝并删除。 图12 预测推理示例 预测性抽样提供了一种解决方法。这种方法的基本思想是使用一些“更便宜”的过程来生成几个token长的临时序列。然后并行执行多个步骤的主要“验证”模型使用廉价临时序列作为需要的执行步骤的“预测”上下文。 如果验证模型生成与临时序列相同的token那么就知道接受这些token作为输出。否则可以丢弃第一个不匹配标记之后的所有内容并使用新的临时序列重复该过程。 如何生成临时token有许多不同的选项每个选项都有不同的权衡。可以训练多个模型或在单个预训练模型上微调多个头以预测未来多个步骤的标记。或者可以使用小型模型作为临时模型使用更大、功能更强大的模型作为验证器。 7.结论 这篇文章概述了许多最流行的解决方案以帮助高效地优化和服务LLMs无论是在数据中心还是在 PC 边缘。其中许多技术都经过优化并通过 NVIDIA TensorRT-LLM 提供这是一个开源库由 TensorRT 深度学习编译器以及优化的内核、预处理和后处理步骤以及多 GPU/多节点通信原语组成可在 NVIDIA 上实现突破性的性能GPU。
http://wiki.neutronadmin.com/news/34723/

相关文章:

  • seo网站搭建软文是什么意思
  • 做暧暖ox免费网站在西安市建设工程交易中心网站上
  • 网站开发语言有什么iis默认网站在哪里
  • 网站建设哪家不错wordpress 加关注插件
  • 宝安沙井网站建设自己做文学网站赚钱吗
  • 建设网站比较好的公司网站备案的好处有哪些
  • 网络推广网站大全wordpress注册输入密码
  • 建网站要自己买服务器吗南宁定制网站建设
  • 下载站源码cmswordpress图片使用图床
  • 太原网站开发wordpress 压缩网站
  • 大丰网站设计公司深圳网络推广代理
  • 北京有哪些网站制作公司网站seo竞争分析工具
  • 网站备案哪里管如何制作简单网站
  • 医疗网站建设新闻wordpress 3.2 漏洞
  • 怎么做代理网站电子商务网站建设调研报告
  • 网站答辩ppt怎么做球球cdk怎么做网站
  • 可以做调查问卷的网站哪个公司的企业邮箱好
  • 苏宁网站优化与推广电子商务中的网站开发
  • 电影采集网站怎么做seo网络营销具有哪些优势和吸引力
  • 网站开发信息wordpress mysql主机
  • 学校怎么做网站手机网站修改
  • 徐州模板网站免费注册邮箱
  • 通辽大柒网站建设有限公司阿里企业邮箱免费版
  • 大连做企业网站的公司中国建设银行网站企业网银
  • 免费建网站系统手机触屏网站模板
  • 怎么用阿里云服务器做淘客网站做企业网站选百度云还是阿里云
  • 改版一个网站多少钱找人做事的网站
  • 安陆网站建设定制网站建设和运营
  • 黑龙江省住房和城乡建设厅网站医疗网络推广外包
  • 社交网站开发注意事项微网站定制多久