生成式 AI 的爆发为我们带来了令人难以置信的工具。我们用大型语言模型 (LLM) 做所有事情,从编写代码到总结历史事件。但这种数字魔法伴随着物理成本。数据中心正迅速成为世界上最大的电力消耗者之一,随之而来的是,它们也成为了碳排放的重要贡献者。

当我们谈论 AI 的环境成本时,话题通常围绕训练展开——即用于教导像 GPT-4 或 Llama 2 这样模型的巨大的一次性能源消耗。然而,随着这些模型获得数百万日常用户,推理的能源成本——即向模型提问并获得答案的实际过程——有望超过训练,成为主要的排放源。

那么,我们该如何解决这个问题?我们要停止使用 AI 吗?我们要强迫每个人都使用更“笨”、更小的模型吗?

最近一篇题为 “SPROUT: Green Generative AI with Carbon-Efficient LLM Inference” 的研究论文提出了一个更明智的第三种选择。研究人员意识到,我们并不总是需要长篇大论的回答。通过在电网“肮脏” (高碳强度) 时智能地引导模型保持简洁,而在电网“清洁”时允许它们自由发挥,我们可以在不牺牲质量的情况下显著减少 AI 的碳足迹。

在这篇深度文章中,我们将探索 SPROUT,这是一个将生成式 LLM 推理的碳足迹减少 40% 以上的框架。我们将通过数学原理、架构和巧妙的工程设计来揭示它是如何做到这一点的。

问题所在: 不仅仅是模型大小的问题

要理解 SPROUT,我们首先需要了解推理请求中的碳排放来自哪里。

总碳排放量通常分为两类:

  1. 隐含碳排放 (Embodied Carbon): 制造硬件 (GPU、服务器) 所产生的排放。
  2. 运营碳排放 (Operational Carbon): 运行这些硬件所消耗的电力产生的排放。

研究人员用以下公式对单个用户请求的碳足迹 (\(C_{req}\)) 进行建模:

碳足迹公式。

这里:

  • \(CO_2^{\text{Intensity}}\) 是当地电网在当下的“肮脏”程度 (例如,煤电与风电的对比) 。
  • \(E_{req}\) 是 GPU 回答你的提示词所消耗的能量。
  • 第二项代表分摊到处理请求所需时间 (\(T_{req}\)) 内的隐含碳排放。

Token 的发现

传统观念认为,为了节省能源,应该使用较小的模型 (参数较少) 。一个 70 亿参数的模型自然比一个 700 亿参数的模型消耗更少的电力。

然而,研究人员发现了更微妙的关系。这不仅关乎模型有多大,还关乎它说了多少话

生成式 AI 是“自回归”的,意味着它一次生成一个单词 (token) 。GPU 必须为它生成的每一个 token 进行运算。研究人员进行了实证研究,比较了模型大小与输出长度的关系。

碳影响比较: 模型大小与 Token 数量。

看看上面的图表。

  • 图 (a) 显示较大的模型 (13B) 确实比 较小的模型 (7B) 每次请求排放更多的碳。这是意料之中的。
  • 图 (b) 展示了关键的洞察。生成的 token 数量与碳排放之间存在严格的线性关系

这暗示了一个巨大的机会。如果我们能简单地让模型停止啰嗦——生成 50 个 token 而不是 100 个——我们实际上就将运营碳排放减半了。

“生成指令” (Generation Directive)

但是,如果我们缩减长度,会不会丢失信息?不一定。

LLM 默认通常都很健谈。它们可能会在回答前加上“这是您请求的信息……”或者提供过多的背景上下文。SPROUT 团队引入了 生成指令 (Generation Directives) 的概念。这些是系统级的指令 (对用户隐藏) ,用于指导模型的冗长程度。

  • L0 (基线): 无指令。模型自然表现。
  • L1 (简洁): 类似于“简明扼要地回答”的指令。
  • L2 (非常简洁): 类似于“尽可能简短地回答”的指令。

生成指令在不损失正确性的情况下减少长度的示例。

图 2(a) 所示,应用指令 (L1) 去除了废话但保留了正确答案。更重要的是, 图 2(b) 揭示了一个迷人的权衡: 一个带有简洁指令的较大模型 (13B) 实际上比运行默认设置的较小模型 (7B) 产生更少的碳排放,并实现更高的准确性。

这揭穿了“绿色 AI”必须是“小 AI”的迷思。我们可以保留大模型的智能;我们只需要控制它们的输出量。

SPROUT 框架

设计一个自动执行此操作的系统是很困难的。你不能让模型一直保持简短,因为有些复杂的问题需要详细的回答。此外,电网的“绿色程度”每小时都在变化。

SPROUT (Sustainable PRompting for Optimized User Traffic) 通过基于两个因素动态调整“生成指令”来解决这个问题:

  1. 实时碳强度: 电网现在是靠太阳能还是煤炭运行?
  2. 生成质量: 让回答变短会破坏其质量吗?

这是系统的高级架构:

SPROUT 系统架构概览。

让我们梳理一下流程:

  1. 用户 发送一个提示词 (Prompt)。
  2. 指令选择器 (Directive Selector) 为该提示词分配一个特定的“简洁级别” (L0、L1 或 L2) 。
  3. 优化器 (Optimizer) 在后台运行。它查看电网 API 和历史性能数据,以决定使用每个指令级别的概率
  4. 推理服务器 使用选定的指令生成响应。
  5. 离线评估: 至关重要的是,SPROUT 扮演科学家的角色。它不断对其输出进行采样,并将其发送给“老师”模型 (如 GPT-4) 进行评分。“简洁版本是否丢失了重要信息?”这种反馈循环改进了未来的决策。

优化引擎

SPROUT 的核心是 生成指令优化器 (Generation Directive Optimizer) 。 它将问题视为一个线性规划挑战。

目标是找到一组概率 \(\mathbf{x} = [x_0, x_1, \dots, x_{n-1}]\)。

  • \(x_0\) 是使用默认 (详细) 模式的概率。
  • \(x_1\) 是使用“简洁”模式的概率。
  • \(x_2\) 是使用“非常简洁”模式的概率。

系统求解 \(\mathbf{x}\) 以最小化总碳足迹。

目标函数:

最小化碳排放的目标函数。

这个方程最小化总碳排放 (\(f(\mathbf{x})\))。

  • \(k_0\) 是当前的碳强度 (来自电网) 。
  • \(\mathbf{e}^T\mathbf{x}\) 根据我们的指令组合计算预期的能源使用量。
  • \(k_1\) 是隐含碳系数。
  • \(\mathbf{p}^T\mathbf{x}\) 计算 GPU 被占用的预期时间。

然而,我们不能仅仅为了拯救地球就把“非常简洁”的概率设为 100%。那样会破坏用户体验。我们需要约束条件。

质量约束:

质量约束不等式。

这个不等式确保预期质量 (\(\mathbf{q}^T\mathbf{x}\)) 保持在某个阈值以上。

  • \(q_0\) 是基线 (详细) 模型的质量。
  • 中间的项是一个动态的“容忍度”因子。
  • 当碳强度 (\(k_0\)) 时,系统放宽质量约束 (允许更简洁) 。
  • 当碳强度 时,系统收紧约束 (优先考虑高细节质量) 。

优化器将这些组合成标准的线性规划公式:

优化公式。

受限于概率约束:

概率约束: 在 0 和 1 之间。 概率约束: 总和为 1。

这使得 SPROUT 能够在数学上平衡地球的需求与用户的需求。

实现: 指令如何工作

SPROUT 实际上是如何“告诉”模型要简短的?它将指令作为 系统提示词 (System Prompt) 注入。

注入系统提示词的图解。

图 11 所示,系统获取用户的问题 (“哪位科学家提出了……”) ,并在将其发送给模型之前附加一个隐藏的系统指令 (“始终简短回答”) 。这是无缝的;用户永远看不到指令,只能看到高效的结果。

质量控制循环: 离线评估

SPROUT 最具创新性的功能之一是它衡量质量的方式。由于“质量”是主观的,SPROUT 使用一个更大、更聪明的 LLM (如 GPT-4) 作为裁判。

它获取用户查询的样本,在所有三个级别 (L0、L1、L2) 生成答案,并询问 GPT-4: “对于用户的问题,这些答案中哪一个是最好的?”

评估查询结构示例。

不过这里有个陷阱。查询 GPT-4 是碳密集型的。如果我们评估得太频繁,我们制造的排放可能会比节省的还多!

SPROUT 使用 机会主义离线评估器 (Opportunistic Offline Evaluator) 。 它等待完美的时刻来运行这些评估。它寻找托管评估器的区域碳强度较低的时间窗口。

为了决定何时运行评估,它计算“紧急度调整后的碳强度” (\(k'_2\)):

紧急度调整后的碳强度方程。

这个方程平衡了两种对立的力量:

  1. 碳强度 (\(k_2\)): 我们希望等待它变低 (绿色能源) 。
  2. 经过的时间 (\(t - t_0\)): 我们等待的时间越长,我们的质量数据就越“陈旧”。紧急度因子 \(\beta\) 确保最终即使电网很脏,我们也运行评估,但我们会努力等待绿色窗口。

可视化机会主义评估窗口。

图 5 完美地展示了这一点。系统监视碳强度曲线。它会忽略局部低谷,如果它们仍然太高 (红叉) 。它等待“金星”时刻——当紧急度足够高且碳排放足够低时。

它真的有效吗? (评估)

研究人员使用 Llama 2 13B 模型在真实数据集 (如 MMLU、ScienceQA 和 TriviaQA) 上测试了 SPROUT。他们模拟了五个不同地区的电网: 德克萨斯州、加利福尼亚州、南澳大利亚州、荷兰和英国。

碳节省与质量

结果令人信服。

碳节省和质量保持的柱状图。

图 6 显示,在所有五个地区,SPROUT 实现了 40% 到 60% 的碳节省 (绿色柱) 。值得注意的是,生成质量 (黄色柱) 始终保持很高——与基线相比,标准化偏好度保持在 90% 以上。

在可再生能源波动很大 (大量太阳能和风能) 的南澳大利亚 (SA),SPROUT 在削减超过 40% 的碳排放的同时,实现了近 95% 的质量保留。

SPROUT 与竞争对手对比

研究人员将 SPROUT 与其他策略进行了比较:

  • BASE: 标准推理 (无优化) 。
  • SPROUT_CO2: 激进地最小化碳排放 (忽略质量) 。
  • MODEL_OPT: 在小模型 (7B) 和大模型 (13B) 之间切换 (一种常见的先前方法) 。
  • ORACLE: 一个不可能的、知晓未来的完美系统。

比较 SPROUT 与其他策略的散点图。

图 7 可视化了这场竞争。理想的位置是 右上角 (高碳节省,高质量) 。

  • SPROUT (绿星) 始终最接近 ORACLE (青色方块)
  • MODEL_OPT (棕色) 表现尚可,但通常节省的碳较少,因为它忽略了 token 长度因素。
  • SPROUT_CO2 (蓝色) 节省了最多的碳,但质量大幅下降 (向左漂移) 。

这证明了动态调整输出长度是比简单交换模型大小更有效的策略。

对电网的适应性

最酷的结果之一是看到 SPROUT 实时适应电网。

不同碳强度下排放的累积分布函数 (CDF)。

图 8 显示了每个请求的排放分布。

  • 左图 (200 gCO2/kWh): 电网相对清洁。SPROUT 表现温和。
  • 右图 (400 gCO2/kWh): 电网很脏。SPROUT 变得激进。绿色曲线向上移动,表明更多的请求正以显著更低的排放量 (更短的回答) 被处理。

与静态策略不同,SPROUT 在环境需要时会“勒紧裤腰带”。

评估开销

批评者可能会问: “GPT-4 评估器的碳成本会抵消节省的碳吗?”

评估器的碳开销。

图 10(a) 平息了这种担忧。由于智能的机会主义调度和所需的小样本量,所有地区的开销都 低于 1% 。 运行保持系统智能的质量检查几乎不需要成本。

季节性和稳健性

最后,研究人员验证了这不仅仅是特定天气模式的侥幸。他们使用 2 月、6 月和 10 月的电网数据进行了模拟。

不同季节的表现。

图 13 显示了一致的性能。无论是冬天还是夏天,SPROUT 都能识别出简洁的最佳时机和详细的最佳时机,保持 40% 以上的节省幅度。

该系统还提供了一个可调节的“帕累托前沿 (Pareto Front)”。

显示权衡曲线的帕累托前沿。

图 14 展示了权衡曲线。如果系统管理员希望将质量置于一切之上 (在 X 轴上向右移动) ,SPROUT 仍然提供节省。如果他们想优先考虑绿色计算 (在 Y 轴上向上移动) ,SPROUT 可以在偏好度受控下降的情况下提供巨大的减排。

结论

SPROUT 框架代表了我们对“绿色 AI”思考方式的转变。多年来,焦点一直集中在硬件效率或缩小模型上。SPROUT 证明,我们仅仅通过 改变我们要求模型表现的方式 就能实现巨大的效率提升。

通过认识到:

  1. 碳排放与 token 长度呈线性关系,
  2. 用户并不总是需要冗长的回答,以及
  3. 电网的清洁度是波动的,

SPROUT 创造了一个 AI 可以可持续扩展的系统。它在不需要新硬件或重新训练模型的情况下,将推理的碳足迹减少了 40% 以上。随着我们迈向 AI 代理全天候运行的未来,像 SPROUT 这样使软件具备“电网感知”能力的解决方案,对于防止我们的技术进步以牺牲地球为代价将至关重要。