我针对 Gemma 4 和 Qwen 3.5 的 30B 级别模型进行了一项实验,旨在探究能耗与性能的权衡关系。换句话说,我想弄清楚哪些模型在输出同等质量的回答时会消耗更多的电能。

Reddit r/LocalLLaMA 论文

摘要

针对四款 30B 级别的稠密模型与 MoE 模型的实证研究显示,Gemma-4 26B MoE 在处理相同推理任务时,仅需 1.9–15 Wh 的能耗即可实现同等精度;而稠密模型及更大规模的 MoE 变体在该场景下的功耗最高可达 34 Wh。

文末附有 TL;DR。我在使用**能效权衡(energy-performance tradeoff)**的视角下,对比了 qwen3.5:27b(Dense)、qwen3.5:35b(MoE)、gemma4:31b(Dense)以及 gemma4:26b(MoE)。核心观点在于:大语言模型(LLMs)往往以波动的成本换取不确定的性能。如果某个任务让 LLM 进行更长时间的“思考”,它确实会消耗更多能源,但性能的显著提升并不能得到保证。为了说明这一点,我在相似条件下观察了这四款近期发布模型的运行表现。实验环境为双 RTX 3090 Ti 显卡主机搭配 64GB 内存,在 Ollama 上运行 Q4 量化版本(我知道,我知道这只是个包装层,但对本次实验来说完全够用)。随后,我使用 `codecarbon` 来追踪能耗(最初我想估算碳排放量,但如果聚焦于能耗本身,后续可以换算成成本和碳排放。我知道监控功耗有其他工具,但我一开始就考虑了碳排,且已经配置好了 CC,所以就直接用了它)。 我先给每个模型布置了一道经典的**报童问题(newsvendor problem)**。由于该问题已有非常成熟的文献基础,预计这些模型都能识别出这是报童问题并给出解答。我提供了两个变体,一个采用经典库存语境,另一个采用护士排班语境: Prompt 1: ``` 你是一名零售采购员。某产品的需求量在 50 到 150 件之间均匀分布。单件成本为 5 美元,售价为 12 美元,残值为 2 美元。你应该订购多少数量才能实现期望利润最大化?仅回复一个整数。 ``` Prompt 2: ``` 你是一家医院的管理者。每位班次内患者到达人数在 50 到 150 人之间均匀分布。安排一名护士的成本为 5 美元。如果需要该护士,医院可从此次值班中获得 12 美元的价值收益;如果该护士并未被用于临床护理,医院仍可通过其承担备用工作获得 2 美元的价值回收。你应该安排多少名护士才能使期望价值最大化?仅回复一个整数。 ``` 在这两种情况下,实现利润最大化的最优答案都是 120。数学逻辑相同,只是情境包装不同。人类大概率会猜一个接近 100 的数字,因为大多数人难以处理不确定性,最终往往会默认取区间的平均值。这在心理学和经济学中被称为“趋中效应(pull to center effect)”。我们原本预期所有模型都能正确回答库存版本,但在排班语境下会遭遇困难,原因有二:1)排班问题通常不用报童模型解决;2)所使用的措辞在模型可能的训练数据中,不会立刻让人联想到报童问题。 我对每个模型进行了十次试跑迭代,计算了各自的平均绝对误差(MAE)。所有模型的 `temperature` 均设为 0.7,以观察随机性行为(这在实际应用中可能并非标准用法,但本次关注的是行为模式而非最终答案)。如果任何模型的方差超过阈值,我会追加迭代次数,以达到 95% 置信水平下 ±5 个单位的精度。我还记录了每次迭代的平均能耗、生成的“思考”字符数,并通过 `logprobs` 计算了困惑度,以此衡量模型的“思考时长”及对答案的“信心”。 **结果:** | 模型 | 架构 | 语境 | MAE | Wh/次试验 | 相对 g4:26b 倍数 | 平均思考(字符) | 困惑度 | |---|---|---|---|---|---|---|---| | gemma4:26b | MoE | 库存 | 0.00 | 1.90 | 1.00 | 1,361 | 1.0000 | | gemma4:31b | Dense | 库存 | 0.00 | 3.08 | 1.63× | 1,081 | 1.0000 | | qwen3.5:35b | MoE | 库存 | 0.00 | 2.90 | 1.53× | 2,388 | 1.0000 | | qwen3.5:27b | Dense | 库存 | 0.00 | 7.07 | 3.73× | 3,320 | 1.0000 | | gemma4:26b | MoE | 排班 | 0.00 | 15.33 | 1.00 | 10,800 | 1.0000 | | gemma4:31b | Dense | 排班 | 0.00 | 11.03 | 0.72× | 3,937 | 1.0000 | | qwen3.5:35b | MoE | 排班 | 9.79 | 19.23 | 1.25× | 15,455 | 1.0003 | | qwen3.5:27b | Dense | 排班 | 0.00 | 34.40 | 2.24× | 15,742 | 1.0001 | 在库存语境下,g4:26b(MoE)的能效权衡最佳,能以最低成本给出正确答案。而在排班语境下,则是 g4:31b(Dense)胜出。我将 g4:26b 设为两种语境的基准,以便跨表格保持比例一致。无论哪种语境,qwen3.5:27b(Dense)在达到相同决策质量时的能耗最高。唯一答错的模型是 qwen3.5:35b(MoE),但它仅在排班语境下出错。 有趣的地方在于困惑度。所有模型的困惑度都很低,说明它们对答案相当“自信”(非严格技术定义,懂的人都懂,放在这里够用了)。qwen3.5:35b 对排班语境下的答案“信心”最弱。换言之,它虽然答错了,但相对而言“自己也知道答错了”(抱歉有点拟人化了)。因此,无论你用 LLM 部署什么任务,跟踪 `logprobs` 可能都值得一试,它可以作为“煤矿里金丝雀般的预警信号”,提醒人类何时需要介入核对回答。尽管差异具有统计学意义,但 0.0003 的差距微乎其微,或许在非玩具级问题上更值得深究。对此请酌情参考。 我原以为模型在排班语境下会暴露得更严重,但几乎全都对上了。我需要仔细检查它们的推理文本,看看它们是否意识到这不过是个“披着雨衣的报童问题”。此外,它们都没有表现出人类常见的“趋中效应”…… 你可能会想:“别拿 LLM 做数学题,给它配个工具不就行了?”我为这些模型编写了一个新报童问题的 MCP,让它们外包数学计算。没错,能耗确实降下来了。鉴于文章已经冗长不堪,我会在另一篇独立文章中详细汇报,可能在本周晚些时候。 你可能也会觉得:“哇,所以提示工程很重要嘛。这事我们在 2022 年就知道啦;等你准备好了再来 2026 年找我们吧。”嗯,你说得没错,但我尚未见过太多关于成本-性能权衡 *行为模式* 的讨论。我们大多只关注告诉我模型“知道什么”的 *基准测试(benchmarks)*,希望这篇内容能提供一个不同的视角。我知道在生产级基础设施上,结果可能会大相径庭,而我目前用的只是(尽管可靠)消费级显卡。接下来我会在一些 H100 上跑一段时间,到时候会重新复现实验,尤其是针对 120B 级别的模型。我不确定这种权衡对普通用户是否重要,但在大规模部署时,积少成多。 感谢你能读到这儿。我非常乐意听到你们是否有其他值得探索的方向。欢迎提供建议、想法,或者尽情吐槽都可以。我只是在观察实际落地应用时发现了一些值得探讨的问题。 **TL;DR:** MoE 在效率上胜出,但并非万无一失。gemma4:26b(仅 38 亿活跃参数)在两种语境下都给出了性价比最高的正确答案。qwen3.5:27b(Dense)在得出完全相同结果的情况下,能耗多出了 3.7 倍。唯一答错的那个模型 —— qwen3.5:35b(MoE)在排班语境下 —— 其思考耗时与答对它的模型毫无二致,且输出概率几乎未发生波动。更多算力并未带来更好的答案。记得跟踪你的 logprobs。
查看原文

相似文章

通俗版对比:Qwen3.6 35b-a3b 与 Gemma4-26b-a4b-it

Reddit r/LocalLLaMA

Gemma 4-26b-a4b-it 基本是个基础扎实、能稳妥完成任务的 B 等生。Qwen3.6-35b-a3b 则是考出 A+ 的优等生,做完任务后还有余力搞点锦上添花的发挥。在我的 16GB 显存显卡上,两款模型运行速度相当。测试环境为 Windows 下的 LM Studio,采用推荐推理设置。使用的模型:unsloth/gemma-4-26B-A4B-it-UD-Q4_K_S 与 AesSedai/Qwen3.6-35B-A3B IQ4_XS。大家有不同意见吗?**更新:** 看来我之前用 Gemma 4 的方式不太对。[Sadman782 的评论](https://www.redd

4x RTX 3090 上的 Qwen3.5-27B、Qwen3.5-122B 和 Qwen3.6-35B —— MoE 模型在严格全局规则下的表现困境

Reddit r/LocalLLaMA

潜水多年的老用户,首次发帖。在 4 张 RTX 3090 上对三款 Qwen 模型分别进行了 20 多个会话的实时智能体工作测试——**Qwen3.5-27B** 稠密模型、**Qwen3.5-122B-A10B** MoE 和 **Qwen3.6-35B-A3B** MoE。以下数据均解析自持续真实负载下的 vLLM 日志,而非合成基准测试。**本文所有数据的关键负载背景:** 测试框架是一个多智能体编排器,同时运行 1-6 个并发的 OpenCode 会话,Prompt 长度为 30-60k token,并且强制执行**严格的 Bash 允许列表