LLM推理介绍

大模型因为其参数规模巨大,对计算和内存要求很高。因为使用Transformer模型,通常将推理分成两个阶段,处理prompt的prefill阶段,以及后续自回归decode阶段。通常prefill阶段计算能力是瓶颈,而deocde阶段,每生成一个token都要将模型参数从GPU的HBM加载一次,因此通常内存是瓶颈,这时候GPU的利用率并不高。LLM推理的框架和新技术犹如雨后春笋,例如:

  • KV cache:在Transformer架构的decoder部分缓存之前token的kv中间结果,避免重复计算。
  • Operator Fusion:算子融合,将模型的算子合并成一个大算子,提高计算内存访问效率。
  • Paged Attention:分页管理kv cache的内存,提高内存访问效率,降低内存浪费。
  • Chunked Prefill:将prefill阶段进行分块,在计算prefill的时候同时加上decode的batch,提升资源使用率。
  • Quantization:量化技术,通过降低模型参数的精度来减少内存占用和计算负担。
  • Compression: Sparsity or Distillation:压缩技术,包括稀疏化或蒸馏,旨在减少模型大小和计算复杂度。
  • Static batching 客户端将多个Prompt打包到请求中,并在批处理中的所有序列完成后返回响应
  • Dynamic batching 在服务器内将Prompt动态批处理在一起
  • Continuous batching 不是等待Batch中的所有序列完成,而是在迭代级别将序列Batch在一起
  • Parallelization:并行化技术,包括张量并行和流水线并行,适用于更大的模型以提高计算速度。

此外还有一些模型创新,例如GQA可以降低kv cache的大小;linear attention,将计算attention的时间复杂度从O(n^2),降低到线性时间复杂度,这样可以支持更长的序列长度。

本系列逐步整理并分析推理领域涉及的技术。

LLM推理指标

如下是一些关键的推理服务的指标:

  • Time To First Token (TTFT)

    指用户输入查询后,模型开始输出结果的速度。对于实时交互,低等待时间至关重要,而在离线工作负载中则相对不那么重要。该指标由处理prompt和生成第一个输出令牌所需的时间决定。

  • Time Per Output Token (TPOT)

    指为每个查询我们系统的用户生成一个输出令牌所需的时间。该指标与用户对模型“速度”的感知相关。例如,TPOT为100毫秒/令牌时,每个用户的生成速度为每秒10个令牌,约450个单词每分钟,这比典型人类的阅读速度还要快。

  • Latency

    指模型为用户生成完整响应所需的总时间。总体响应延迟可以通过前两个指标计算得出:延迟 = TTFT + (TPOT) × (待生成的令牌数量)。

  • Throughput

    指推理服务器在所有用户和请求中每秒生成的输出令牌数量。

LLM推理的整体目标:

  • 最低低首token输出时延TTFT
  • 最高的吞吐量Throughput
  • 最低的单token平均输出时间TPOP

推理评估的关键参数

  • Model Bandwidth Utilization (MBU)模型带宽利用率,MBU是衡量硬件在推理过程中内存带宽使用情况的指标。它的定义为

    $ \text{MBU} = \frac{\text{实际内存带宽}}{\text{峰值内存带宽}} $

    其中,实际内存带宽的计算公式为:

    $ \text{实际内存带宽} = \frac{\text{总模型参数大小} + \text{KV缓存大小}}{\text{TPOT}} $

    TPOT是推理所需的时间。MBU反映了模型在运行时内存带宽的有效利用程度。

  • Model Flops Utilization(MFU)模型计算利用率

Model Bandwidth Utilization

kv cache原理

键值缓存充当自回归生成模型的内存库,模型把先前词元的自注意力层算得的键值对存于此处。在 transformer 架构中,自注意力层通过将查询与键相乘以计算注意力分数,并由此生成值向量的加权矩阵。存储了这些信息后,模型无需冗余计算,而仅需直接从缓存中检索先前词元的键和值。下图直观地解释了键值缓存功能,当计算第 K+1 个词元的注意力分数时,我们不需要重新计算所有先前词元的键和值,而仅需从缓存中取出它们并串接至当前向量。该做法可以让文本生成更快、更高效。

KV 缓存示意图

性能对比

kv cache实现

参考

用 KV 缓存量化解锁长文本生成

LLM Inference Performance Engineering: Best Practices | Databricks Blog