经典老文
orca
Continuous batching: 把 prefill 和 decode 里的每个 token 打散重新做 batching.
vllm
用 page attention 来管理 kv cache 来应对碎片化, 以及利用 cpu memory 来 offload (这部分好像不是重点)。
OSDI'24
一个会有一个 session 一篇文章讲同一个事,可怕。
Taming Throughput-Latency Tradeoff in LLM Inference with Sarathi-Serve
背景是现有 llm serving 系统(TRT-LLM, vLLM)要么等 decode 完了再 prefill, 要么有 prefill 就先做完整个 prefill, 导致 latency to first token 或者 decoding latency 不稳定。一个额外的坏处是这个事情影响 pp,因为 pp 里面有多个任务,每个任务时长不一样,就会有比较多的 bubble。
这文章把 prefill 任务 chunk 掉,这样调度的时候可以更好地复合 prefill 和 decode,控制 pp 里每个任务的 latency,从而对 decode 的 latency 也有保障了 (stall-free batching)。
实验最多用了 tp4 x pp2 路 a100,测试了 serving capacity (最大吞吐量),给了 capacity 和 p99 latency 的关系曲线(7b 模型从0.1 到 0.5s)。
ServerlessLLM: Low-Latency Serverless Inference for Large Language Models
在 Serverless 场下做快速模型加载和推理任务迁移。
InfiniGen: Efficient Generative Inference of Large Language Models with Dynamic KV Cache Management
KVCache 只加载必要的部分(改算法),从而减小 kvcache 访问量,据称模型精度还增加了。
Llumnix: Dynamic Scheduling for Large Language Model Serving
通过在多个模型推理服务实例之间迁移任务来获得更好的负载均衡。 主要要解决几个问题。
- 性能隔离
- 内存碎片化
- 优先级 (考虑离线任务,比如 evaluation [51], scoring [36], or data wrangling [43])
解决方案是尽量减小迁移开销,然后通过 scheduling 手段去做一些操作, 最后效果还蛮好的
DistServe: Disaggregating Prefill and Decoding for Goodput-optimized Large Language Model Serving
TTFT (prefill latency) 和 TOPT (decoding latency) 要分开优化。所以拆到不同的 worker 上做。
然后各种手段优化一下两边的并行策略,通过不同的策略来做不同的阶段, 优化 prefill 产生的 kv-cache 的传输。