📋大模型推理加速手段整理
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做并行。
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
Continous Batching 图示
Kernel Optimization
- 单个算子的基本优化,比如GEMM….
- FlashAttention: 利用online softmax实现分块attention,使得attention的空间复杂度从降低到了
- FlashDecoding: 针对推理decoding阶段的优化版本,在kv维度可以进行并行
- FlashDecoding++: 在Flash Decoding的基础上,进一步改良,softmax使用Unified-Max,使得每个Split内部各个步骤没有依赖,可以并行。
softmax使用Unified-Max,这个Unified-Max如何获取有待考量,对精度的影响也有待考量
Algorithmic Innovations📏
网络算法优化,针对神经网络模型的优化,主要是针对Self-Attention的改动
Decoding Algorithm
非自回归
- 非自回归
- 半自会归
- blockwise parallel decoding: 一次前向,生成多个token
当前在quality上,多数还是不如自会归
Speculative decoding
小模型推理后续r个token,大模型一次前向进行验证并推理下一个token。验证通过则采用,不通过则丢弃后续token,然后继续前向生成一个正确的token。
优点是保证了quality,因为所有token都会经过大模型验证。
challenge在于如何构造小而准的小模型来做预测。
- Tree-based Speculative Inference, 使用多个小模型,每个小模型都向后预测多个token,然后组织成一棵树,通过精心设计的mask,可交由大模型一次验证。
这里通过调整mask矩阵,一次就可以验证整棵树,实在是Amazing
Early exiting
idea: 中间层有足够的信息得到目标分布。在中间层插入classifier, 动态退出。针对简单的request,进行的计算会更少。
Cascade inference
首先分析request的难度,简单的问题使用规模较小的模型,复杂的问题使用规模较大的模型。
Architecture Design
主要针对attention 架构的改动
Attention compression
压缩self-attentiond的context规模,减少计算量以及KV Cache的大小。
直接保留特定位置的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
Moe , 混合专家模型。 Router + 多个专家网络。 router动态决定采用哪些专家,而不是全量计算。
Recurrent unit
使用RNN去做attention, 比如RWKV, RetNet。
模型压缩方向
Knowledge Distillation 知识蒸馏
Network pruning 剪枝
Loading...
Last update: