核心问题点
| 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/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)