想象一下,你经营着一家庞大且高科技的面包房(即大型语言模型),能够烘焙数百万种不同种类的面包。通常,这家面包房对所有产品都使用同一套巨型标准食谱。但现在,顾客们想要个性化的面包:有人想要额外的酸面团风味,有人想要秘制香料混合,还有人想要特定的形状。
为了解决这个问题,面包房雇佣了“专业厨师”(称为适配器或PEFT)。这些厨师不会重写整个面包房的食谱书;他们只携带一本小型、轻量化的记事本,上面记录着他们特定的调整方案。
问题:高峰时段的瓶颈
过去,当顾客下单时,专业厨师会站在烤箱旁,在烘焙过程的每一个步骤中低声传达他们的具体指令:
- 搅拌面团。
- 让面团发酵。
- 烘焙第一片。
- 烘焙第二片……以此类推,直到整个面包出炉。
该论文指出,当你有成千上万名顾客(适配器)在排队等待时,这种做法效率低下。
- “搅拌”阶段(预填充/Prefill): 这就像一次性搅拌一大批面团。它速度很快,并且充分利用了烤箱的全部功率(受计算能力限制)。
- “烘焙”阶段(解码/Decode): 这就像一次只取出一片面包,一片接一片地取。这很慢,并且需要厨师不断跑回冰箱,为那一片面包抓取特定的香料罐(受内存限制)。
当有 500 位不同的厨师试图为每一片面包低声传达指令时,厨房就会堵塞。厨师们花在跑向冰箱(加载他们的小型记事本)上的时间,比实际烘焙的时间还要多。论文将这种现象称为“内存瓶颈”。
解决方案:PreFT(仅预填充微调)
作者提出了一种名为PreFT的新工作方式。
以下是类比:
专业厨师不再为整个烘焙过程低声传达指令,而是仅在初始搅拌阶段低声传达指令。
- 搅拌(预填充): 厨师阅读他们的记事本,并告诉面团此刻该如何表现。他们将酸面团或香料混合进去。
- 烘焙(解码): 一旦面团混合好并送入烤箱,厨师就离开厨房。他们停止发出指令。烤箱利用面包房标准的、冻结的规则烘焙剩余的面包。
为什么这样更好?
- 不再需要跑向冰箱: 在缓慢的、一片接一片的烘焙阶段,厨房不需要加载 500 个不同的香料罐。它只需进行烘焙。
- 速度: 因为厨房不再不断地在 500 位不同厨师的记事本之间切换,它可以几乎以只为一名顾客烘焙面包的速度,为 500 名顾客烘焙面包。
论文发现
研究人员构建了该系统,并在真实模型(如 Llama 和 Qwen)上进行了测试。以下是他们的主要发现:
速度快得多:
当同时服务 512 种不同的“个性”(适配器)时,他们的新方法(PreFT)比旧方法快 1.9 倍。想象一下,一家原本需要 10 分钟才能服务一群顾客的面包房,现在只需 5 分钟,而且无需更换烤箱或改造建筑。
面包味道一样吗?(性能):
- 对于数学和编程: 面包的味道几乎完全一样。“搅拌”阶段的指令足以教会模型如何解决数学问题或编写代码。模型在烘焙阶段不需要厨师低声传达指令就能得到正确答案。
- 对于长故事: 这里变得棘手。如果你要求模型写一个非常长的故事,“搅拌”阶段的指令有时会逐渐淡化。
- 一种类型的厨师(称为LoRA)即使在长故事中也能完美保持指令生效。
- 另一种类型(称为ReFT)有时会忘记指令,只是写得“太多”或偏离主题。
- 总体而言: 对于大多数任务,“仅搅拌”方法的效果与“每一步都低声传达”方法一样好,但速度要快得多。
核心结论
该论文得出结论,对于个性化 AI(即每位用户都有自己专属的“小厨师”),我们不需要为 AI 生成的每一个字都承担加载这些厨师的巨大成本。
通过只让厨师在最开始(“预填充”阶段)工作,我们可以在不导致系统停滞的情况下,同时为成千上万个性化用户提供服务。这是一种更聪明的厨房组织方式,既节省了时间和能源,又保持了面包的高质量。
技术摘要:PreFT:仅用于预填充的微调以提升推理效率
问题陈述
大型语言模型(LLM)正越来越多地利用参数高效微调(PEFT)方法(如 LoRA)针对特定用户或任务进行个性化定制。虽然 PEFT 减少了训练时的内存占用,但在同时服务成千上万个用户特定适配器时,会在推理吞吐量方面造成显著瓶颈。
核心问题在于 LLM 推理两个阶段之间的架构不匹配:
- 预填充(Prefill): 并行处理输入提示。此阶段受计算能力限制。
- 解码(Decode): 自回归地逐个生成令牌。此阶段受内存限制,因为需要为每个请求加载大型键值(KV)缓存和适配器权重。
当前的多适配器服务系统(例如 S-LoRA、Punica)试图通过使用自定义内核和内存分页来优化这一问题。然而,即使有了这些优化,在解码阶段服务多个 PEFT 适配器仍会产生巨大的内存开销。由于解码阶段受内存限制,在批处理请求中为每个请求加载独特的适配器权重,会侵蚀通过批处理请求所获得的吞吐量增益。
方法论:PreFT(仅预填充微调)
作者提出了PreFT,这是一种范式转变,将 PEFT 适配器的应用限制在仅预填充阶段。一旦提示被处理,适配器即被丢弃,模型随后仅使用冻结的基础模型权重生成后续令牌。
本文通过修改两种现有的 PEFT 方法来实现这一概念:
- LoRAP(仅预填充 LoRA): 低秩适应(LoRA)的一种变体,其中低秩更新仅应用于输入提示令牌。
- DiReFTP(仅预填充 DiReFT): 表示微调(ReFT)的一种变体,具体为 DiReFT 参数化,仅在提示位置对残差流进行干预。
技术实现:
- 作者分叉了vLLM推理引擎以集成这些仅预填充适配器。
- 他们实现了一种位置掩码机制,将适配器干预严格路由到预填充阶段。
- 至关重要的是,在解码阶段,引擎完全绕过适配器逻辑,将请求视为使用基础模型。
- 这种方法消除了在令牌生成期间加载和计算适配器权重所带来的受内存限制的成本,使系统能够在没有每个请求的适配器开销的情况下批处理更多请求。
主要贡献
- 概念转变: 本文认为,对于个性化服务,优化目标应从“每参数性能”转向“每吞吐量性能”。它指出,适配器操作应放置在受计算限制的预填充阶段,而不是受内存限制的解码阶段。
- 系统实现: 作者在 vLLM 中提供了 PreFT(LoRAP 和 DiReFTP)的高效实现,包括支持多适配器服务、内存分页以及用于在线策略强化学习(RL)的权重同步。
- 理论依据: 本文证明,即使在半精度下,LoRA 和 ReFT 的下投影也受内存限制。通过将此类操作从解码阶段移除,PreFT 避免了多适配器服务的主要瓶颈。
结果
推理效率
在服务于多个适配器时,PreFT 相比传统的全位置 PEFT 显示出显著的吞吐量提升:
- Llama 3.1 70B: 在 4 张 H100 GPU 上服务 512 个适配器,PreFT 实现了标准多 LoRA 1.9 倍的吞吐量(DiReFTP)和1.87 倍的吞吐量(LoRAP)。
- 较小模型: 在 Llama 3.1 8B(2.21 倍 / 1.83 倍)和 Qwen 2.5 0.5B(2.39 倍 / 1.63 倍)上也观察到了类似的增益。
- 这些增益是在没有为 ReFT 使用自定义内核的情况下实现的,而是依赖于从架构上移除解码时的成本。
性能(准确性)
作者将 PreFT 与全位置 PEFT 在监督微调(SFT)和具有可验证奖励的强化学习(RLVR)方面进行了评估:
- SFT(指令遵循): 在训练数据上,PreFT 表现出比全位置 PEFT 更高的评估损失。然而,在下游基准测试(IFEval、MMLU、GSM8K)中,当参数匹配时,PreFT 与标准 PEFT 之间的准确性没有统计学上的显著差异。
- RLVR(数学与代码):
- 在MATH和HumanEval(代码生成)上,PreFT 接近标准 PEFT 的水平。
- 在GSM8K上,PreFT 始终落后于全位置 PEFT,尽管差距通常很小。
- 长文本生成: 在 LongWriter 实验(生成多达 20k 个令牌)中,LoRAP保持了与标准 LoRA 相当的长度遵循能力和质量。相反,DiReFTP未能维持长生成过程中的条件行为,转而偏向于生成过长的输出。
意义与主张
本文声称,与现有的 PEFT 方法相比,PreFT 为个性化 LLM 服务提供了更有利的准确性–吞吐量权衡。
- 效率: 通过将适配器操作移至受计算限制的预填充阶段,PreFT 显著降低了解码阶段的内存开销,从而在多用户场景中实现了更高的吞吐量。
- 实用性: 作者断言,对于许多用例(风格适应、每用户记忆),PreFT 在提供显著效率增益的同时,几乎不牺牲或完全不牺牲下游性能。
- 局限性: 本文谦逊地承认,PreFT 并非通用的替代方案。具体而言,DiReFTP 在长文本生成方面存在困难,且 GSM8K 的性能仍略低于全位置适配器。作者建议,未来的工作可以探索专门为仅预填充约束设计的新型架构,以弥补这些剩余差距。
总之,PreFT 代表了一种系统级优化,它利用 LLM 推理阶段独特的计算特性,实现了可扩展的个性化模型服务。
每周获取最佳 electrical engineering 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。