核心问题点
60%内存存放参数,30%存放缓存的key,value向量,10%存放其他参数。 LLM相对传统深度学习,对cache的管理较差。
- 深度学习要求tensor内存连续,一般深度学习内存参数几乎不动,但LLM参数长度动态变化且周期无法预知导致cache内存碎片化
- 共享内存做的比较差。LLM predict next token的解码方式,采用parallel sampling或者beam search方式,都会有大量的输出,这部分输出是具有相同的部分,是可以共享的;但由于存放在不同的连续空间,所以共享比较困难
- 针对内存碎片化和共享内存的问题,提出共享虚拟内存
通过KV Cache管理虚拟缓存方式
- PagedAttentione 借鉴内存管理方式,通过虚拟缓存页管理缓存
- Parallel sampling 的时候,copy-on-write 增加共享物理block
- beam search的时候,多条优化路径,存在比较大的共享prompt
- In-context learning中,存在很长的重复示例,这部分可共享
推理问题
- 调度使用的是FCFS,调度以请求的blocks为粒度
- 同一个请求的多个blocks
- Swapping 将缓存(DRAM) 交换到 CPU
- 重计算,时间换空间
- 分布式计算,采用tensor并行的方式(同一层参数分割到不同GPU)
- 全局共享KV Cache Manager
参考:https://fancyerii.github.io/2023/11/01/pagedattention/
标签:总结,缓存,参数,内存,LLM,使用,存放,共享,vllm From: https://www.cnblogs.com/adam86546853/p/18189064