要解决的问题

显存放不下时,用 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 缓存的联合优化。

参考资料

相关专题