【ICML 2023】FlexGen:单 GPU 上的大语言模型高吞吐生成推理|从大模型推理系统优化视角

摘要

本文解读 ICML 2023 论文《FlexGen: High-Throughput Generative Inference of Large Language Models with a Single GPU 》。该论文提出 FlexGen 高吞吐生成推理引擎 ,通过融合GPU/CPU/磁盘三级内存聚合线性规划卸载策略搜索4-bit 权重与 KV cache 压缩 ,让 1750 亿参数的 OPT-175B 模型在一张 16GB 消费级显卡上完成高吞吐生成,其特别之处在于把「在哪存、何时算、谁来算」形式化为可证明的优化问题。实验表明 FlexGen 在 OPT-175B 上首次达到 1 token/s 生成吞吐 (有效批次 144),最大吞吐较 DeepSpeed ZeRO-Inference 提升 100 倍以上,为资源受限场景下的大模型推理提供了重要借鉴。

视频讲解点击观看 B 站视频

论文基本信息

项目 内容
标题(英文) FlexGen: High-Throughput Generative Inference of Large Language Models with a Single GPU
标题(中文) FlexGen:单 GPU 上的大语言模型高吞吐生成推理
作者 Ying Sheng, Lianmin Zheng, Binhang Yuan, Zhuohan Li, Max Ryabinin, Daniel Y. Fu, Zhiqiang Xie, Beidi Chen, Clark Barrett, Joseph E. Gonzalez, Percy Liang, Christopher Ré, Ion Stoica, Ce Zhang
机构 斯坦福大学 · 加州大学伯克利分校 · 苏黎世联邦理工学院
会议 ICML 2023
arXiv https://arxiv.org/abs/2303.06865
项目网站 https://github.com/FMInference/FlexGen

为什么单卡跑大模型这么难?

大模型生成推理对算力和内存的要求极高:GPT-175B 仅模型权重就需要 325GB 显存 ,至少要 5 张 A100(80GB)配合复杂并行策略才能运行。而 FlexGen 关注的是另一类更普遍的需求------基准评测、信息抽取、数据整理这类延迟不敏感、需要大批量处理的任务。在这类任务里,延迟可以牺牲,吞吐才是目标,这为降低硬件门槛提供了空间。

瓶颈并不只在权重。KV cache 是新的瓶颈 :当批次为 512、输入序列 512、输出序列 32 时,KV cache 峰值达到 1.2TB,是模型权重的 3.8 倍 ,直接限制了大批次的可行性。现有卸载系统(DeepSpeed ZeRO-Inference、Hugging Face Accelerate)把训练期的调度策略直接搬来推理:逐行遍历计算图、反复加载权重,I/O 开销巨大,OPT-175B 的批次只能做到 1--2,吞吐远低于硬件极限。Petals 为代表的去中心化协作推理则受制于网络带宽,无法支撑大批次。FlexGen 的思路是把 GPU、CPU、磁盘当作统一的三级内存池,用大批次摊薄跨层级的 I/O 成本,并与计算重叠。

研究主线:从问题到结论

图 6:FlexGen 研究主线:问题 → 吞吐导向动机 → 计算图形式化 → LP 策略搜索 → 4-bit 压缩 → 1 token/s 与 100 倍吞吐(Mermaid 流程图)

基准/方法设计

FlexGen 把生成推理建模为计算图遍历问题:图中每个方块是一次「某层 × 某 token」的 GPU 批次计算,同色方块共享同一层权重;合法路径必须满足依赖关系、设备内存约束,目标是最小化总执行时间。在此基础上,FlexGen 从三个维度构造搜索空间:

  1. 计算调度 :从行优先改为 zig-zag 块调度 ------按列遍历、块内多 GPU 批次复用权重,I/O 复杂度被证明不超过最优方案的 2 倍
  2. 张量放置:用 9 个比例变量刻画权重、激活、KV cache 在 GPU/CPU/磁盘上的分布(如 20% 权重在 GPU、80% 在 CPU)。
  3. 计算委派 :KV cache 在 CPU 时,把 attention score 的计算交给 CPU,只需搬运激活,I/O 量缩小为原来的 1/s(s 为序列长度)。

图 1:单张 NVIDIA T4(16GB)上 OPT-175B 与 OPT-30B 的延迟---吞吐帕累托前沿;FlexGen 最大吞吐较现有系统高 100 倍,其他系统受 OOM 限制无法继续提升

分类全景:FlexGen 的三板斧

图 7:FlexGen 三板斧:zig-zag 卸载调度、代价模型与 LP 策略搜索、4-bit 量化与稀疏注意力,外加多卡流水并行扩展(Mermaid 分类图)

方法细节

zig-zag 块调度 是 FlexGen 的核心:按列遍历计算图,让权重常驻 GPU 复用,只换入换出激活与 KV cache;块大小(GPU 批次 × 块内批次)即有效批次大小。同时用 6 个逻辑线程把「加载下一层权重、存取前后批的 cache/激活、当前计算」重叠起来,最后一个同步点收尾。

代价模型与策略搜索 :单块延迟 T = T_{pre}\\cdot l + T_{gen}\\cdot (n-1)\\cdot ll 为层数、n 为生成步数),每个阶段取各类 I/O 与计算的最大值;再叠加 GPU/CPU/NVMe 三处峰值内存约束。固定 (bls, gbs) 后,9 个放置比例构成一个线性规划问题,目标 \\min T/bls,硬件参数先 profiling 拟合,LP 秒级可解。

图 2:LLM 推理的计算图:方块为某层 × 某 token 的 GPU 批次计算,同色方块共享同一层权重

图 3:行优先调度每步重新加载权重、I/O 巨大;zig-zag 块调度按列复用权重,仅换入换出激活与 KV cache

4-bit 近似方法 :按 64 个元素一组计算 min/max 后量化到 4-bit 整数、计算前反量化回 FP16(权重沿输出通道、KV cache 沿隐藏维度分组),零重训零校准;稀疏注意力则每个 query 只保留 K cache 的 Top-10% 索引,只加载对应 V cache 子集。

实验设计与结果

评测硬件为 NVIDIA T4(16GB)+ Xeon CPU(208GB)+ NVMe SSD(1.5TB),模型为 OPT 6.7B/30B/175B,提示长度 512/1024、每提示生成 32 token;生成吞吐 = 生成 token 数 /(prefill + 解码时间)。基线为 DeepSpeed ZeRO-Inference、Hugging Face Accelerate 与按 GPU 数归一化的 Petals。

端到端生成吞吐(token/s,序列长度 512)

系统 6.7B 30B 175B
Accelerate 25.12 0.62 0.01
DeepSpeed 9.28 0.60 0.01
Petals 8.25 2.84 0.08
FlexGen 25.26 7.32 0.69
FlexGen (4-bit) 29.12 8.70 1.12

在 OPT-175B 上,FlexGen(4-bit)达到 1.12 token/s,较 DeepSpeed 提升 112 倍 ;30B 上 7.32 vs 0.60,提升 12 倍。压缩版把所有权重与 KV cache 驻留 CPU(有效批次 144),彻底避开磁盘交换。同 5000 秒延迟约束下,FlexGen 吞吐高 40 倍 ;允许更高延迟并开启压缩可达 100 倍

图 4:不同网络延迟与带宽下 FlexGen(单 T4)与 Petals 集群(4×T4,per-GPU 归一化)的延迟与吞吐;卸载在高吞吐场景优于长流水协作推理

多卡流水并行(解码吞吐 token/s) :FlexGen(1)→FlexGen(4) 在 175B 上为 0.83→3.86(超线性),因为每卡内存压力下降后可切到 CPU 驻留并扩大批次;端到端吞吐未线性增长源于 prefill 流水气泡与仅生成 32 token 的设置。

精度(4-bit 量化,Lambada acc / WikiText ppl)

配置 Lambada 30B WikiText 30B Lambada 175B WikiText 175B
FP16 0.725 12.72 0.758 10.82
4-bit 0.724 12.90 0.756 10.94
4-bit + 稀疏 0.718 12.90 0.756 10.94

逐技术消融(吞吐 token/s) :30B 全量 7.32,无 CPU 计算 4.03、无重叠 5.86、移植 DeepSpeed 策略仅 1.57;175B 全量 0.69,无策略搜索 0.27、无磁盘直接 OOM------策略质量决定数量级差异 。FlexGen 还完成了 HELM 集成:OPT-IML-30B 在单卡上 21 小时跑完 7 个代表性子场景。

图 5:diagonal 块调度:灰色为一次性预热区,每轮计算一条对角线的多个子对角线,各层权重加载一次覆盖整条对角线;理论上块大小可扩近 2 倍、平均完成延迟减半(需非连续 KV cache 注意力,未实现)

结果对比总结

图 8:结果对比总结:175B 吞吐 0.01→0.69→1.12 token/s、解码 0.83→3.86 超线性、4-bit 精度几乎无损(Mermaid 流程图)

关键发现

  1. 首次在 16GB 单卡上以 1 token/s 运行 OPT-175B,有效批次 144,突破此前卸载系统的吞吐上限。
  2. 4-bit 权重 + KV cache 压缩零重训零校准:OPT-175B 的 Lambada 准确率仅从 0.758 降到 0.756,几乎无损。
  3. 策略搜索是吞吐的核心:OPT-175B 关闭策略搜索后吞吐从 0.69 掉到 0.27,移植 DeepSpeed 策略仅 0.01。
  4. I/O 重叠与 CPU 委派各贡献显著:30B 上去掉重叠 7.32→5.86,去掉 CPU 计算 7.32→4.03。
  5. 流水并行实现解码吞吐超线性:175B 解码从单卡 0.83 到四卡 3.86 token/s。
  6. HELM 评测民主化:OPT-IML-30B 的 7 个子场景在单卡 21 小时完成,显著降低基准评测门槛。

局限性

  • 面向延迟不敏感任务:批处理场景适用,交互式聊天等低延迟场景不适用。
  • 强依赖 CPU 内存容量:208GB CPU DRAM 是 175B 卸载的关键,CPU 内存小的机器(如 3090 配 125GB)吞吐反而低于 T4 配置。
  • 最优调度未落地:I/O 最优的 diagonal 调度需要非连续 KV cache 注意力,实际实现的是次优的 zig-zag 块调度。
  • 近似方法有边界:3-bit 量化无法保持精度;启用量化后 CPU 委派因解压开销过大而关闭。

常见问题(FAQ)

FlexGen 如何做到单卡运行 175B 模型?

FlexGen 把权重、激活与 KV cache 按比例分布到 GPU、CPU 和磁盘三级内存,用 zig-zag 块调度按列复用权重,配合 4-bit 压缩让数据主要驻留 CPU,从而绕开慢速磁盘,在 16GB 显存上跑通 OPT-175B。

为什么 FlexGen 吞吐比 DeepSpeed 高这么多?

DeepSpeed 继承训练期逐行调度,每生成一步都要重新加载整层权重;FlexGen 按列遍历复用权重,并用线性规划搜索最优放置与批次大小,把有效批次从 1--2 提升到 144,I/O 成本被大批次摊薄。

4-bit 量化会损失多少精度?

几乎无损:OPT-175B 的 Lambada 准确率从 FP16 的 0.758 到 4-bit 的 0.756,WikiText 困惑度从 10.82 到 10.94;3-bit 则无法保持精度。

FlexGen 与 llama.cpp 有什么关系?

FlexGen(2023)是首个形式化卸载搜索的系统,其「GPU/CPU 协同、层级卸载、批处理摊薄 I/O」的思想被 llama.cpp、PowerInfer 等本地推理生态广泛沿用。

CPU 也能参与计算吗?

可以。当 KV cache 在 CPU 上时,FlexGen 把 attention score 的计算委派给 CPU,只搬运激活,I/O 量缩小为 1/s;但启用量化后 CPU 解压开销过大,该委派被关闭。

FlexGen 开源吗?

开源,代码在 https://github.com/FMInference/FlexGen ,支持 OPT 系列模型,可配置 T4/3090 等不同硬件。

参考链接


给大家推荐一款自用写文献综述、无虚构文献的 AI:

🌟 复旦大学 FudanNLP 团队自研 切问学术

官网:qiewenpaper.com

覆盖 3.6 亿篇可溯源真实中英文文献,能自动整合文献观点生成规范综述

还能挖掘研究创新点、复现实验,配合视频教学,新手快速上手文献综述写作


🍀后记🍀

博客的关键词集中在编程、算法、机器人、人工智能、数学等等,持续高质量输出中。

🌸讨论QQ群白拾的小屋 (750365700)

⭐B站账号白拾的物理AI组会(活跃于知识区和动画区)

✨GitHub主页YhbCode000(工程文件)

相关推荐
beiger2 个月前
Win11 X-Lite Optimum V3的优化特色
win11·系统优化·win11 x-lite·系统精简
W优化大师2 个月前
Windows 更新待处理弹窗一直不消失怎么解决,C 盘空间和后台任务该如何排查
windows·系统优化·磁盘清理·windows11·c盘·系统更新
代码小书生3 个月前
Windows系统优化设置,电脑系统工具箱!支持远程桌面控制、性能优化调节、功能选项增强设置、驱动安装更新、系统更新管理、安全配置与系统维护!
windows·性能优化·系统优化·电脑系统·电脑技巧·windows10·电脑优化
AI精钢3 个月前
DeepSeek KV Cache 入门解读:98% 命中率背后的工程逻辑
大模型·llm推理·kv cache·deepseek·ai工程
2601_954043724 个月前
极客卸载工具深度解析:6.69MB的绿色卸载神器为何备受推崇
系统优化·工具推荐·软件卸载
d1z8884 个月前
(二十一)32天GPU测试从入门到精通-LLaMA 系列模型测试day19
llama·显卡·llm推理·推理引擎
xianzi20205 个月前
Csimplecleaner:专业C盘清理工具让系统重获新生
系统优化·磁盘管理·c盘清理·电脑加速
定偶7 个月前
Ubuntu 20.04 网络与软件源问题
网络·ubuntu·php·系统优化
山峰哥8 个月前
SQL查询优化秘籍:从Explain分析到性能飞跃
开发语言·数据库·sql·oracle·性能优化·系统优化