本文由 Epoch AI 官方发布,主要探讨了 DeepSeek 最新发布的开源推理模型 DeepSeek-R1 的训练过程、架构、性能和定价,并对围绕其训练成本的争议进行了分析。文章的核心观点包括:
- DeepSeek-R1 的成功很大程度上归功于其高质量的基座模型 DeepSeek v3,后者是 R1 成功的关键技术基础。
- DeepSeek 公布的 DeepSeek v3 预训练成本是合理的,并没有低估或虚报。
- DeepSeek-R1 通过强化学习 (RL) 从 v3 基座模型进化而来,RL 阶段的估计成本约为 $ 1M 美元。
- DeepSeek-R1 在基准测试中表现与 OpenAI 的 o1 模型相当,但价格却显著低于 o1,使其在性价比上更具优势。
- 尽管 DeepSeek 在软件效率方面可能略微落后于顶尖的美国实验室,但其模型以接近边际成本的价格提供服务,对用户来说更具吸引力。
关键细节
架构: DeepSeek-R1 的架构与 DeepSeek v3 完全相同,采用稀疏混合专家模型 (MoE),总参数量为 6710 亿,但每个 token 仅激活 370 亿参数。模型使用了多头隐式注意力 (MLA) 机制,以降低 KV 缓存大小,同时保持性能。
预训练 (DeepSeek v3): DeepSeek v3 的预训练使用了混合精度 FP8,在包含 2048 块 H800 GPU 的集群上进行。训练 1 万亿 token 耗时 3.7 天,总共训练了 14.8 万亿 token,预训练总成本约为 266 万 H800 小时,或约 $ 530 万美元(按每 H800 小时 $ 2 美元计算)。模型的模型 FLOP 利用率 (MFU) 约为 23%,考虑到 MoE 训练的复杂性和 GPU 间通信,这个数字并不算高。DeepSeek 采用了专家并行、通信重叠和优化专家激活模式等技术来降低通信成本。
强化学习训练 (DeepSeek-R1-Zero): DeepSeek-R1 使用了群体相对策略优化 (GRPO) 算法进行强化学习。第一阶段 RL 训练的计算成本估计约为 $ 100 万美元。成本估算的关键参数包括:总梯度步数 N*K 约为 8000,平均完成长度 L 约为 4000 token,以及假设的批大小 B = 1024 和生成数 G = 64。RL 训练包括 token 生成和反向传播。在 R1-Zero 之后,DeepSeek 还进行了第二阶段 RL 训练和监督微调,但具体成本尚不明确。
性能与定价: DeepSeek-R1 在基准测试中与 OpenAI 的 o1 模型性能相当,在 11 个基准测试中,o1 在 6 个上略胜一筹。然而,DeepSeek-R1 的定价为每百万输出 token $ 2.2 美元,而 o1 的定价为每百万输出 token $ 60 美元。巨大的价格差异使得 DeepSeek-R1 在性价比上远超 o1。
软件效率与市场竞争: 作者估计 DeepSeek 在软件效率方面可能落后于 OpenAI 和 Anthropic 等美国顶尖实验室约六个月。尽管如此,DeepSeek 以接近边际成本的价格提供模型服务,使其在市场竞争中更具吸引力,并可能对美国实验室的 API 利润率构成挑战。
原文
在 2025 年 1 月 20 日,DeepSeek 发布了他们最新的开放权重推理模型 DeepSeek-R1,该模型在基准性能上与 OpenAI 的 o1 匹敌。此次发布引发了大量的争议,最引人注目的是关于 DeepSeek 可能低估或歪曲了他们模型的训练成本的可能性。我认为这个说法难以置信,原因我会在本文中阐述。
除了关于模型训练成本的观点外,我还想澄清我们实际了解的关于模型的架构、训练过程、性能和定价的信息。
架构
DeepSeek R1 的架构与 DeepSeek v3 相同,后者是该公司在 2024 年 12 月发布的早期模型。我在两周前的Gradient Updates一期中介绍了该模型的关键架构细节,因此我在这里只提供一个简要的高级概述。
总的来说,该模型是一个非常稀疏的混合专家架构 (mixture-of-experts),总共有 6710 亿个参数,但每个 Token 只有 370 亿个激活参数。这些专家被分为两类:一个“共享专家”,每个 Token 始终被路由到该专家;以及 256 个“路由专家组 (routed experts)”,其中 8 个对于任何特定的处理 Token 是激活的,并且模型训练试图确保平衡路由。大多数参数是路由专家组的 MoE 参数,我们可以通过以下基于 HuggingFace 的模型配置文件的合理性验证来确认这一点:
路由 MoE 参数 = (MoE 块) * (路由专家组) * (每个专家组的张量) * (MoE 中间维度) * (模型隐藏维度) = 58 * 256 * 3 * 2048 * 7168 = 6530 亿
DeepSeek v3 还使用了一种称为多头潜在注意力 (multi-head latent attention, MLA) 的新机制来减少 KV 缓存的大小,而不会像其他流行的诸如分组查询和多查询注意力等方法那样造成性能损失。这样做会增加解码期间注意力的算术成本,使得 DeepSeek v3 在长上下文推理期间成为其他语言模型中不常见的算术密集型而非内存密集型模型。注意力的算术成本与过去 5000 个 Token 上下文长度附近的参数乘积累加相当,而例如 Llama 3 70B 只有在 50,000 个 Token 的上下文长度附近才会发生这种情况。
DeepSeek v2 论文中介绍该方法的分解实验表明,使用 MLA 比使用 GQA 和 MQA 获得了显著的性能提升。我们不清楚在多大程度上可以相信这些结果,但这可能有助于基础模型在相对较低的推理成本下保持高质量。
许多这些创新都相当早:例如,MLA 是在 2024 年 6 月发布的 v2 论文中引入的。R1 相对于 V3 的真正改进是使用强化学习 (reinforcement learning, RL) 来提高推理性能,我将在下一节中介绍。然而,基础模型的架构仍然很重要,因为强化学习在本身性能 (intrinsic performance) 已经很高的基础模型上效果更好,因为这降低了强化学习期间初始奖励信号的稀疏性。因此,了解 DeepSeek 如何构建一个高性能的基础模型来在其上构建推理器仍然很重要。
训练
我看到关于 R1 的公开讨论经常混淆模型训练的预训练 (pre-training) 和强化学习阶段,因此我想在这里明确区分这两个阶段。
预训练
DeepSeek r1 的预训练运行是 DeepSeek v3。v3 的技术报告给出了关于他们如何训练模型的惊人细节:他们在 2048 个 H800 GPU 的集群上使用了混合精度 FP8 训练 (mixed FP8 precision training),并且在这个集群上处理每万亿个训练数据 Token 花费了他们 3.7 天,大约 180,000 个 H800 小时。他们还说他们的总训练数据集大小为 14.8 万亿个 Token,这意味着训练成本约为 14.8 * 180,000 = 266 万个 H800 小时,如果我们将 H800 小时的成本定为 2 美元,则约为 530 万美元。
令人惊讶的是,人们对这些数字持怀疑态度,但对于以这种方式训练的具有这种架构的模型来说,这些数字如果说高的话,也只是相对而言。14.8 万亿个 Token 的数据集大小是合理的,并且与其他这种规模的模型一致。假设这是有效的,那么该模型的预训练将需要 6 * (370 亿) * (14.8 万亿) = 3e24 FLOP。如果我们假设 DeepSeek 的训练集群由具有 PCIe 外形的 H800 组成,那么每个应该能够达到每秒 1.5e15 FP8,并且 DeepSeek v3 的 55 天训练运行的隐含模型计算效率 (model FLOP utilization, MFU) 最终约为 23%。
人们怀疑 3e24 FLOP 数字的一个原因是,该模型的性能似乎与其他使用相当数量的资源训练的模型不一致。例如,Llama 3 70B 及其后来的迭代版本需要大约两倍的计算量来训练,并且它们在基准测试中的表现明显不如 DeepSeek v3。性能差异背后的原因是算法进步:我们知道 Llama 3 70B 缺乏许多用于创建 DeepSeek v3 的关键架构创新,因此它的计算效率较低也就不足为奇了。我们对数据质量方面发生的事情了解较少,但我不会感到惊讶,如果 DeepSeek 在这方面也比 Llama 系列有所改进。
如果说有什么问题的话,那么平淡无奇的模型计算效率表明,关于 DeepSeek 训练运行的真正谜团不是为什么它如此便宜,而是为什么它如此昂贵。 显而易见的答案是 MoE 训练很困难,但这相当肤浅,并没有解决实际问题,因此我将提供一个粗略的计算,说明为什么我们预计以高 MFU 协调此训练运行会很困难。
DeepSeek 在他们的训练运行中使用了 64 路专家并行机制 (expert parallelism)。在这种情况下,大多数专家位于彼此不同的 GPU 上,因此如果我们假设连续层的专家激活是不相关的,那么在进入和退出 MoE 块时,几乎所有 Token 都需要 GPU 间通信。这种通信的成本是多少?
一个粗略的估计是,由于每个 Token 都由 8 个激活专家处理,因此维度为 7168 的残差向量 (residual stream vector) 必须发送给每个激活专家。这需要发生在每个块和每个 Token 上,并且由于激活的精度为 16 位,因此我们需要总共激活读取量为
16 位 * 8 * 7168 * 58 * 14.8 万亿 = 1e20 字节
让我们悲观地假设所有这些通信都必须通过 InfiniBand 进行,DeepSeek 的集群可能支持每个 GPU 50 GB/s 的读取带宽。在这种情况下,仅前向传播中 MoE 进入通信所需的时间为
1e20 字节 / (2048 * 50 GB/s) = **11 天 7 小时**
这非常糟糕,因为我们需要将其乘以几次,以进行 MoE 后的全局规约和全互连操作 (all-reduce and all-to-all operations),并再次乘以 2,以考虑反向传播以及前向传播。如果我们进行所有这些调整,我们很容易得出仅专家并行通信就占用超过 55 天的时间。DeepSeek 意识到了这一点,他们采取了一些措施来解决这个问题:
他们实现了专家并行通信与算术的有效重叠,以隐藏一些通信时间。
他们仔细调整了他们的训练设置,以便即使每个路由专家组大约在 1/32 的 Token 中处于活动状态,专家组的激活也不是彼此独立的。在网络拓扑中彼此靠近的专家组更有可能一起被激活,这通过将大部分专家并行通信转移到通过 NVLink 进行,从而显著降低了上述通信成本。
<p>H800 的 NVLink 比 H100 的 NVLink 慢(全局规约带宽约为 100 GB/s,而 H100 为 225 GB/s),但它们的 NVLink 仍然比 InfiniBand 快四倍,因此如果它起作用,这将是一个巨大的胜利。</p>
尽管他们付出了惊人的硬件优化努力,但他们仍然只能将 MFU 提高到 23%,这表明在实践中训练 MoE 模型是多么令人恼火。在现实世界中,它们远不如纯粹基于算术的计算表明它们在理论上应该具有的效率,正如我在过去一期关注 MoE 推理的文章中所讨论的那样。
R1-Zero 的强化学习训练
现在我们转到 r1 论文本身的贡献:将基础 v3 模型转化为推理器的强化学习。这篇论文不如 v3 技术报告详细,但仍然包含足够的信息,让我们推断出强化学习阶段必须需要多少计算量。
以下是 DeepSeek-R1(产生检查点 Deepseek-R1-Zero 的那个)的核心基于推理的强化学习循环的样子:
- 我们采样一批 B 个问题。对于其中的每一个,模型生成 G 个可能的答案补全。模型决定这些何时终止,但假设在整个强化学习训练过程中,补全的平均长度为 L。
- 每个补全 i = 1, 2, …, G 被分配一个奖励 r_i。这有时以基于规则的方式完成(例如,代码的单元测试和数学问题的最终答案正确性检查),有时通过使用另一个大语言模型 (LLM) 来执行答案评分。
- 我们通过减去平均值并除以标准差来标准化 G 个奖励。
- 然后,我们对替代期望奖励目标 (surrogate expected reward objective) 执行 K 步梯度上升,以使我们的模型更有可能产生高奖励答案,而不太可能产生低奖励答案。由于我们的 G 次 rollout 为远离我们当前模型的策略行为提供了较差的指导,因此我们在目标中惩罚偏离我们当前策略太远的行为。
- 我们重复上述过程 N 次。整个强化学习算法称为组相对策略优化 (group-relative policy optimization, GRPO),DeepSeek 在先前的研究中将其作为更常用的 PPO 的更便宜的替代方案引入。
当我们以这种方式分解过程时,很容易为强化学习训练第一阶段的 FLOP 成本提供粗略的表达式。通常,我们可以通过假设每次前向传播和反向传播 (forward and backward pass) 中每个参数每个 Token 消耗 6 个 FLOP 来做到这一点,但 DeepSeek v3 独特的算术密集型注意力机制提高了这一成本。在其强化学习期间使用的平均上下文长度 L = 4000 时,注意力 FLOP 最终与解码期间的参数 FLOP 相当,因此平均而言,我们每个激活参数和每个生成的 Token 花费 4 个 FLOP 而不是 2 个 FLOP。我们只需要在每次探索阶段之后采取的第一个梯度步骤支付一次此成本,因为后续步骤依赖于我们之前采样的轨迹。
反向传播步骤也会受到影响,但事实证明,我们可以忽略这种影响,而不会造成太多麻烦。由于我们在一个长序列长度上执行每一步,我们可以将键和值向量从它们的潜在向量中解压缩,并传播通过与我们完成前向传播不同的计算图。这增加了一些额外的成本,但它并不大,因此我们可以近似地假设反向传播的通常成本为每个激活参数每个 Token 4 个 FLOP。
考虑到 DeepSeek v3 的 370 亿个激活参数计数,我们得到最终的估计值
推理强化学习计算成本 = N * B * G * (L 个 Token) * (370 亿个参数) * (8 FLOP/参数/Token) +
N * (K-1) * B * G * (L 个 Token) * (370 亿个参数) * (6 FLOP/参数/Token)
该论文提供了有关计算中关键参数的信息:
N*K 是整个强化学习训练中的梯度步数总数,我们从论文中的各种图中得知这大约等于 8000。在先前的工作中,DeepSeek 使用 K = 1,在这种情况下,我们有 N = 8000。
通过查看论文中的图 3,我们可以推断出这些步骤的平均 L 值约为 4000。
B 和 G 在本文中没有明确说明,但在先前的工作中,DeepSeek 使用 B = 1024 和 G = 64。这是我计算中最大的不确定性来源。例如,DeepSeek 很可能对 R1 使用了 B = 512,在这种情况下,此处的所有成本估算都将高出 2 倍。
<p>我暂时使用 B = 1024,但在解释结果时请务必记住这一点。</p>
综合所有这些,我们得出初始推理强化学习阶段的最终成本估计为 6.1e23 FLOP,如果强化学习阶段的 MFU 与预训练相似,则约为 100 万美元。 这明显低于 DeepSeek v3 本身的预训练算术成本。强化学习期间的 MFU 必须比预训练差 5 倍左右,约为 5%,强化学习的成本才能在 GPU 小时数方面与预训练的成本相当。
我们可以估计强化学习阶段可能需要多长时间,以查看如此低的 MFU 数字是否合理。假设基于DeepSeekMath 论文,K = 1,则生成的顺序 Token 总数约为 N * L,即 3200 万。DeepSeek 以每请求每秒约 50 个 Token 的速度为推理提供 R1,按照该速度,可以在 7 到 8 天内生成 3200 万个串行 Token。这足够短,我们不期望串行时间限制成为他们强化学习设置的问题,因此每秒 50 个 Token 的速度足够好。有趣的是,这也与他们的 2048 H800 集群在以与 DeepSeek v3 的预训练相似的 MFU 运行时所需的算术运算量一致。
在这种速度下,强化学习的 Token 生成部分会花费多少钱?对于整个强化学习阶段,我们需要生成总共 N*B*G*L = 2T 个 Token,而 DeepSeek 最初的 v3 未打折 API 价格为每百万输出 Token 1.1 美元,因此成本最多应为 (2T 个 Token) * (1.1 美元/百万个 Token) = 220 万美元。以当前每百万 Token 0.3 美元的折扣价计算,此估算值降至 60 万美元,如果我们也考虑反向传播的成本,则大致与早先的 100 万美元估算值一致。
所有这些表明,要使强化学习的成本与预训练成本相当所需的极低 MFU 数字是不现实的,并且我们可以从原始 FLOP 成本得出的结论大致是准确的。
R1 的后续训练
产生 R1-Zero 的强化学习循环是推理训练的核心,但这并不是训练最终 R1 模型之前的唯一步骤。在此检查点之上,DeepSeek 策划了一个冷启动数据 (cold-start dataset)(部分包括清理后的 R1-Zero 输出),以在进行另一阶段的强化学习训练之前微调基础 v3 模型,类似于产生 R1-Zero 的过程。这种冷启动可防止强化学习训练的早期不稳定,并确保模型的输出和思维链条 (chain-of-thought) 是人类可读的。我们在论文中对第二阶段的强化学习的细节了解较少,但如果我们想保持保守,我们可以假设它的成本与第一阶段相似,并将我们最初的成本估计值加倍以考虑在内。
完成此操作后,DeepSeek 从最后一个检查点创建了一个大约 60 万个推理样本的监督微调 (supervised fine-tuning, SFT) 数据集,以及 20 万个在微调 v3-base 之前进入 v3 本身后训练的样本,并在此所有数据上进行两个 epoch 的微调。如果每个样本的平均长度约为 8K,这与 R1-Zero 在训练结束时实现的目标一致,则此 SFT 数据集总共有 80 万 * 8K = 64 亿个 Token,因此微调本身的成本可以忽略不计。此步骤很有趣,因为它表明对推理轨迹进行有限的微调足以将基础模型转化为合格的推理器,这解释了为什么像 OpenAI 这样的实验室可能对保持其推理轨迹的秘密感兴趣。
总的来说,我认为从 V3 开始训练 R1 的 GPU 时间的美元成本的合理估计约为 100 万美元,这还不包括 V3 本身预训练的 500 万美元。我没有简单地将早先的 100 万美元数字加倍的原因是,我不知道 B = 1024 的选择是否正确,或者第二阶段的强化学习是否确实具有与第一阶段相同的成本。在 100 万美元的总成本估算中,我认为我在任何一个方向上犯错的可能性大致相同,因此这似乎是一个合适的数字。
最后一点,所有这些数字都忽略了实验、人员成本、管理费用等的计算成本。它们严格来说是上述意义上 R1 训练运行的硬件时间成本。
性能和定价
DeepSeek-R1 在我们有两者的分数可用的基准测试中,性能似乎与 OpenAI 的 o1 相似。在 DeepSeek 引用的两个模型的结果的 11 个基准测试中,o1 在 6 个中击败了 R1,这与我们预期的结果一样接近。我认为由于实验室在发布其自身模型的基准分数时通常会存在发表偏差 (publication bias),因此 o1 在整体性能上应该仍然优于 R1,但差异不大,并且对于大多数用例,这些模型应该是可比的。
然而,虽然这两个模型之间的性能差异很小,但定价差异肯定不是。R1 的定价为每百万输出 Token 2.2 美元,而 o1 的定价为每百万输出 Token 60 美元,而且 R1 的推理速度也不慢。这种巨大差异意味着,当根据消费者的价格进行调整时,R1 绝对是比 o1 更好的模型。
我认为这种差异不是源于 R1 作为模型本身更高效,而是因为与 OpenAI 收取的高额溢价 (markups) 相比,DeepSeek 在提供模型时的毛利率非常低。R1 的推理轨迹的平均长度也可能更短,尽管这一点不太清楚。DeepSeek 和其他中国实验室的成本竞争在多大程度上会影响美国实验室的 API 利润率,这还有待观察,但我认为这对他们来说不是好消息。
结论
以下是我希望读者从本期中了解到的主要观点:
虽然在 R1 发布后公众对 DeepSeek 模型的兴趣激增,但从技术角度来看,R1 成功的绝大部分要素都是 DeepSeek 在 2024 年逐步开发的。拥有像 v3 这样高质量、廉价且快速的基础模型是使此强化学习设置工作的大部分难点所在。
DeepSeek 报告的 v3 集群规模和训练成本估算与我们对具有 v3 架构的模型的预训练所期望的一致,并且没有证据表明他们低估了成本。
虽然 DeepSeek 没有就 DeepSeek-R1 的强化学习成本做出任何明确的声明,但根据他们在论文中披露的信息,我估计约为 100 万美元。
DeepSeek-R1 的性能与 OpenAI 通过 API 提供的最佳版本 o1 大致相当,而对消费者的价格却便宜约 30 倍。这种差异可能主要是由于 OpenAI 的高额溢价造成的,尽管我们不能排除其中一部分是由于 R1 本身就是一个效率更高的模型造成的。
我最好的猜测是,在软件效率方面,DeepSeek 仍然落后于像 OpenAI 和 Anthropic 这样的顶尖美国实验室 (frontier US labs)。然而,差距并不大:根据将 DeepSeek v3 基础模型与我们从顶尖实验室看到的模型进行比较,我估计 DeepSeek 落后大约六个月。此外,DeepSeek 愿意以接近边际成本的价格提供他们的模型,这使得它们对用户来说总体上更具吸引力。