要解决的问题
显存放不下时,用 CPU 内存或 NVMe 固态硬盘承接权重、KV 缓存和激活,让单卡或小集群也能运行更大的模型。
取向
卸载首先扩大可运行的模型规模,代价通常是额外数据传输。FlexGen 等系统针对离线大批次优化吞吐,本地交互也会用卸载来解决显存不足;不能一般化成卸载本身会提高吞吐。实际收益取决于对照方案、批次大小与传输带宽。
核心方法
- 权重分层卸载:权重分布在显存、CPU 内存和磁盘上,按需加载到 GPU。
- KV 缓存的卸载与回取。
- 计算与传输重叠:用流水线把数据搬运隐藏在计算后面。
- mmap 按需加载:通过内存映射直接从文件读取权重。
- ZeRO-Inference 式的分片:把模型权重放在 CPU 内存或 NVMe 上,按层流式送入 GPU。
代表工作
- FlexGen(2023):在显存、CPU 内存和磁盘之间统一规划张量的存放与计算顺序,实现单 GPU 上的高吞吐离线推理。
- DeepSpeed ZeRO-Inference:把权重卸载到 CPU 内存或 NVMe,用单卡运行超大模型。
- llama.cpp:通过 mmap 加载模型,并可以只把部分层放到 GPU 上。
开放问题
- 卸载带宽成为新的瓶颈。
- 与量化、分布式 KV 缓存的联合优化。
参考资料
相关专题
- PagedAttention与KV缓存管理:KV 缓存卸载与回取的成本是缓存管理的一部分。
- 量化:量化与卸载常常一起使用,以减少需要搬运的数据量。
- 分布式训练:ZeRO 的分片思想来自训练侧。
- 边缘与本地部署:本地部署常用卸载运行较大的模型。