🧠 第一章 AI入门:认识人工智能模型训练
📄 一句话概括

同一个 6710 亿参数的模型:稠密版每 token 要 1.34 TFLOPs,MoE 版只要 0.07 TFLOPs, 差 18.1 倍。但权重显存一模一样,都是 336 GB。 一句话概括:算的时候省,装的时候一点都不省。

📝 本节和前面几节的关系

1.2 节把大模型的内部结构拆完了:注意力、位置编码、神经网络。 这一节落到一个具体模型上——DeepSeek 凭什么在同样的参数规模下把价格打下来。

一、它不是「更聪明的模型」,是「更省的模型」

2024 年底到 2025 年初,DeepSeek 上桌靠三件事:V3 的架构、R1 的推理链、 以及把权重和技术报告一起放出来。 三件事里最硬的是第一件——它没有把模型做大,而是把「算一次要花多少」做小了。 参数规模上它和同期头部模型同一档,都是几千亿级;但 API 的价格低一个数量级。 这个价差不是补贴打出来的,是结构差出来的。 所以「爆火」这件事,用技术的说法是: 在效果不掉队的前提下,把每个 token 的计算量压到了一个别人做不到的水平。

二、MoE:把「用哪个参数」变成一道选择题

稠密模型的做法是:每生成一个字,所有权重都参与一次乘法。 6710 亿参数,就是一个字乘 6710 亿次——算力跟参数量绑死。 MoE(混合专家)换了思路:把前馈层切成很多个小专家,再加一个路由器。 每来一个 token,路由器先判断「这次该找哪几个专家」,只让被选中的那几个干活。 DeepSeek-V3 的配置是 1 个共享专家加 256 个路由专家,每个 token 激活 8 个路由专家, 加起来约 370 亿参数参与计算。 于是就有了 Demo 里那两行: 显存 336 GB 对 336 GB 一模一样,计算量 1.34 对 0.07 TFLOPs。 差别全在第五列。

三、省的是计算,不省的是显存

这一条最容易被说反,必须说清楚:权重全都得待在显存里。 因为路由器是运行时才决定的——不知道下一个字会挑哪 8 个专家,所以 256 个专家的权重一个都不能卸载。 所以「6710 亿参数」这句话要拆成两个数讲: 总共 6710 亿,每次只用 370 亿。前者决定它要多大的机器,后者决定它跑起来多便宜。 家用显卡跑不动满血版,不是算力不够,是装不下——int4 量化也要三百多 GB 显存。 这也是为什么下一章本地部署讲的都是几 B 到几十 B 的小模型。

四、爆火还有三个非技术原因

一是开源权重:能下载、能自己部署,企业才敢拿去评估、才敢放进内网。 闭源模型再便宜,数据过不去就是零。 二是技术报告写得够细:数据量、并行策略、FP8 混合精度训练、通信优化,别人能照着复现思路。 这在小圈子里等于免费做了半年广告。 三是定价:API 直接压到「试一试不心疼」的档位。用量是试出来的,不是说服出来的。 但有一件事得纠正:官方技术报告里写的「约 278.8 万美元训练费用」,指的是最后那次正式训练租卡的钱。 前期试错、数据准备、人力全都不在里面。拿这个数当「大模型门槛很低」的证据,是误读。

五、动手 Demo:同一个 6710 亿参数:显存都是 336 GB,计算量差 18.1 倍

按 DeepSeek-V3 的公开配置建个模型:总参数 6710 亿、每 token 激活 370 亿。 和同样 6710 亿的稠密模型对比两件事——int4 量化下权重占多少显存、每生成一个 token 要做多少浮点运算。 再把账算到「一天一百万次请求」这个量级上。

total = 671e9      # 总参数
act = 37e9        # 每 token 激活参数

for nm, npar, nact in ((u'稠密模型 671B', total, total),
                       (u'MoE 模型 671B', total, act)):
    gb4 = npar * 4 / 8 / 1e9      # int4:一个参数半个字节
    fl = 2.0 * nact               # 前向一次,一乘一加算两次浮点
    print(nm, gb4, fl)

# 算到一天的请求量上:单卡有效算力按 50 TFLOPS 估
fl = req * tok * 2.0 * nact
hours = fl / 5e13 / 3600.0

实跑输出:

--------------------------------------------------------------------
DeepSeek 为什么爆火:MoE 省的是算力,一点都不省显存
--------------------------------------------------------------------
  模型             总参数   每 token 激活   权重显存(int4)   每 token 计算量
  -------------------------------------------------------------------------
  稠密模型 671B   6710 亿         6710 亿           336 GB       1.34 TFLOPs
  MoE 模型 671B   6710 亿          370 亿           336 GB       0.07 TFLOPs

  看第 4 列和第 5 列:**显存一模一样,计算量差 18.1 倍。**
  这就是 MoE(混合专家)的全部秘密:模型里有几百个小专家,但每算一个字只挑其中几个出来干活。**参数摊在显存里不省,算的时候省。**
  所以「6710 亿参数」这个说法容易误导:它不是一个 6710 亿参数的稠密模型,而是「总共 6710 亿、每次只用 370 亿」。

  再算一笔实际的账:一天 100 万次请求、每次 500 个 token,要多少算力。
  模型        总浮点运算   单卡卡时   电费(元)   算力租用(元)
  --------------------------------------------------------------
  稠密 671B     6.71e+20       3728          671             7456
  MoE 671B      3.70e+19        206           37              411
  一天的量:稠密要烧 3728 小时单卡时间,MoE 只要 206 小时。
  注意最后两列的量级——**电费几百块,租卡几千块。** 「推理很便宜」这个说法里,钱几乎全在硬件上,不在电上。

  18 倍的差距摆在这里,但**这 18 倍不是白拿的**,代价有三个:
  ① 显存没省               6710 亿参数的权重全得放进去,int4 也要几百 GB
  ② 显存带宽吃紧           每个 token 都要调用不同的专家,权重来回搬
  ③ 训练更难               专家会「偏科」——几个专家被过度使用,其余吃闲饭
  所以家用显卡跑不动满血的 6710 亿,不是因为算力不够,是因为**装不下**。这也是为什么本地部署那一章讲的都是几 B 到几十 B 的小模型。

第一张表只有两行,但这两行是整节的骨头。 第四列一模一样,第五列差 18.1 倍。MoE 的全部秘密就在这个「一样」和这个「差」之间的错位上。 第五列是怎么来的:前向一次,每个参数要做一次乘加,算两次浮点运算,所以是 2 × 激活参数。 稠密版 2 × 6710 亿 = 1.34 万亿次,MoE 版 2 × 370 亿 = 740 亿次。 第二张表把它折算成钱:一天一百万次请求、每次 500 个 token,稠密要烧 3728 小时单卡时间, MoE 只要 206 小时。差的就是那 18 倍。 注意最后两列的量级:电费几百块,租卡几千块。「推理很便宜」这句话里,钱几乎全在硬件上, 不在电上。所以「省电」从来不是重点,「省卡」才是。 还有一个数要提一下:单卡 50 TFLOPS 是我给的估值,真实卡在 fp16 下能到几百 TFLOPS, 但实际吞吐会被显存带宽卡住。这张表要看的不是绝对卡时,是两行之间的比例。

30 秒实验

  1. 把激活参数从 370 亿改成 200 亿,看第五列变成多少,同时问自己:第四列变不变? 答案是不变——省算力不等于省显存,这两件事在 MoE 里是分开的。
  2. 把总参数从 6710 亿加到 1.5 万亿,激活参数保持 370 亿不动。看哪一列炸了、哪一列没动。 这就是「参数量」和「计算量」解耦之后的样子。
  3. 把单卡算力从 50 TFLOPS 改成 20,卡时变成 2.5 倍。 再想想:如果 MoE 的显存带宽成了瓶颈,这个线性换算还成不成立?

常见误区

  1. 「MoE 模型的参数比稠密模型少」。总参数一样多,只是每次只用一部分。 说「6710 亿」的时候指的是总量,说「370 亿」的时候指的是激活量,两个数都对,场景不同。
  2. 「MoE 省显存,所以能在小卡上跑」。 恰恰相反,MoE 的显存一分不省,而且因为专家分散在不同卡上,通信开销更大。 它省的是算力和电,不是显存。
  3. 「训练成本 278 万美元,说明做模型很便宜」。那个数只算最后一次训练的租卡钱。 之前的架构探索、数据清洗、失败重跑,一样都不少。
自测三问(点开对答案) 1. MoE 省的是哪一部分,不省的是哪一部分? —— 省的是每 token 的计算量(只激活一部分专家),不省的是权重占的显存(所有专家都得常驻, 因为路由是运行时才定的)。 2. 为什么每个 token 只用 370 亿参数,显存里却要放 6710 亿? —— 因为路由器要看到全部专家才能决定挑哪几个。 这一秒用 8 号专家,下一秒可能用 200 号,卸载任何一个都可能导致算不出来。 3. Demo 里那个「18.1 倍」是怎么算出来的? —— 两个模型的前向浮点运算量之比:2 × 6710 亿 ÷ (2 × 370 亿) = 18.1。 常数 2 会约掉,所以本质上就是总参数除以激活参数。

算力省下来,落到用户身上就是价格。下一节把「你用哪种方式调它、每月花多少钱」这笔账算清楚。

相关笔记