📋大模型推理加速手段整理

type
status
date
slug
summary
tags
category
icon
password

Overview👀

💡
读完Towards Efficient Generative Large Language Model Serving后,根据自己的理解进行的总结, 列出了一些MLSys的优化,以及推理加速工程师应该了解的attention算法的一些变种。

LLM 推理指标

  • FTT(First Token Time): 一个request从输入到输出的第一个token的延迟
  • TPS(Tokens Per Second):一个request的平均每秒的输出tokens数
  • Throughput:吞吐量,即服务在一秒内,对所有request生成的token的数量之和。
⚠️
FTT和TPS都是针对一个request,Throughput看的是总体所有的request
  • Quality: 推理结果的质量

优化分类

  • AI算法优化:优化模型,在不明显降低质量的情况下,加速推理。如:GQA, MQA, Sliding Windwo Attention …
  • 系统优化:不改变模型语义,优化MLSyS,加速推理。如:KV Cache, Flash Decoding++…

系统优化对指标的影响

💡
Sys优化对指标的影响:❤️表示有提升,🖤表示有降低
FTT
TPS
ThroughPut
Quality
量化/低精度
❤️
❤️
❤️
🖤
并行/FlashDecoding
❤️
❤️
❤️
KV Cache
❤️
❤️
Paged Attention
❤️
Continous Batching
🖤
🖤
❤️

System Optimization 🤖

⚠️
系统优化,不改变模型语义的情况下,加速推理速度。

Low-bit / Quantization

  • Quantization-Aware Training:训练时就考虑到量化
  • Post-Training Quantization:训练时不考虑量化,训练完成后再进行量化
  • fp8/bf8…:低精度浮点数
🖤
量化和低精度都会对最后的quality造成负面影响。

Model parallelism

  • TP,张量并行
  • PP,流水线并行
  • SP ,序列并行(ring Attention, seq维度并行)
  • FlashDecoding(++), FlashAttention的decoding版本,利用online softmax,在KV上面做并行
😡
在推理时,prefill阶段可以对seq_len维度做并行,decoding阶段每次的Q只有一个,无法对seq_len做并行。
notion image
 
FlashDecoding图示
 

Memory Management

  • KV Cache:cache之前tokens的kv,下一轮直接使用,避免重复计算。
随着decoding的进行,kv cache占用的memory持续变大,并且难以预测最终大小,难以管理。因此需要一种管理KV Cache的策略
  • naive approach: FasterTransformer根据max seq_len预分配一块连续的memory。内存浪费比较大。
  • Page-Attention: vLLM 将KV cache分为多个不连续的物理page,decoding时,按需分配,使用block table记录需要的page的位置,与操作系统的页表相似。
    • 由于page attention天然的对kv cache进行分块,所以在decoding计算attention时,可以自然地使用FlashDecoding
  • Preifx Cache: 将KV Cache以前缀树的形式,组织起来,在不同对话中共享。

Request Scheduling

Continous Batching:动态删除batch中提前结束的request,并插入新到来的request
notion image
 
Continous Batching 图示
 

Kernel Optimization

  • 单个算子的基本优化,比如GEMM….
  • FlashAttention: 利用online softmax实现分块attention,使得attention的空间复杂度从降低到了
  • FlashDecoding: 针对推理decoding阶段的优化版本,在kv维度可以进行并行
notion image
  • FlashDecoding++: 在Flash Decoding的基础上,进一步改良,softmax使用Unified-Max,使得每个Split内部各个步骤没有依赖,可以并行。
softmax使用Unified-Max,这个Unified-Max如何获取有待考量,对精度的影响也有待考量

Algorithmic Innovations📏

网络算法优化,针对神经网络模型的优化,主要是针对Self-Attention的改动

Decoding Algorithm

notion image

非自回归

  • 非自回归
  • 半自会归
  • blockwise parallel decoding: 一次前向,生成多个token
当前在quality上,多数还是不如自会归

Speculative decoding

小模型推理后续r个token,大模型一次前向进行验证并推理下一个token。验证通过则采用,不通过则丢弃后续token,然后继续前向生成一个正确的token。
优点是保证了quality,因为所有token都会经过大模型验证。
challenge在于如何构造小而准的小模型来做预测。
  • Tree-based Speculative Inference, 使用多个小模型,每个小模型都向后预测多个token,然后组织成一棵树,通过精心设计的mask,可交由大模型一次验证。
notion image
👍
这里通过调整mask矩阵,一次就可以验证整棵树,实在是Amazing

Early exiting

idea: 中间层有足够的信息得到目标分布。在中间层插入classifier, 动态退出。针对简单的request,进行的计算会更少。

Cascade inference

首先分析request的难度,简单的问题使用规模较小的模型,复杂的问题使用规模较大的模型。

Architecture Design

主要针对attention 架构的改动

Attention compression

压缩self-attentiond的context规模,减少计算量以及KV Cache的大小。
notion image
🛠
直接保留特定位置的token
  • sliding window attention
  • dilated attention
🛠
通过某种评估方式,丢弃掉不重要的token:
  • adaptively sparse attention

Activation sharing

多个self-attention head共享一组KV
  • MQA (Multi-query Attention)
  • GQA (Group-query Attention)
最新的MLA(Multi-head Latent Attention)

Conditional computing

notion image
Moe , 混合专家模型。 Router + 多个专家网络。 router动态决定采用哪些专家,而不是全量计算。

Recurrent unit

使用RNN去做attention, 比如RWKV, RetNet。

模型压缩方向

Knowledge Distillation 知识蒸馏

Network pruning 剪枝

RoPE 旋转位置编码地址对齐→Bank Conflict
Loading...
Catalog