相信年前至今,关于DeepSeek的解读信息大家已经看得足够多了,从最开始的震惊海外、用户激增,一直到国运之争。虽然其中也不乏深度的分析和多元的视角,但归根结底除了一篇去年7月份已经拜读过的《暗涌》对梁文锋的采访以外,很少有来自DeepSeek第一方的信源,总觉得有些隔靴搔痒。恰恰昨天看到了张小珺Jùn|商业访谈录中一期3个多小时的播客,由香港科技大学计算机系助理教授何俊贤主讲的:《逐篇讲解DeepSeek关键9篇论文及创新点——“勇敢者的游戏”》(之前还有一期对R1和kimi1.5的论文的解读也非常精彩)

其实想想,论文不正是最最一手的信源吗?更何况不是单单一篇R1的论文,而是从24年初开始的所有公开论文。其中或许暗藏了多少没有被媒体老师们和AI科技KOL们发掘的内容,也能真的让人理解过去这一年甚至更漫长的时间线里,DeepSeek是怎么做到如今的成就的。于是认真听完,顺带手借助通义听悟的播客转文字以及GPT-o1的精调术语能力做了一份文字版,share给大家。
最好的致敬是学习,学习使人快乐!
以上。
从稠密模型到混合专家,再到推理方向
回顾 DeepSeek 过去一年多发表的核心论文,我们大致能将其研究分为两条主要脉络:
- 基座模型(Foundation Models):从最早的 Dense(稠密)结构一路演进到 MOE(混合专家)模式,并在这个过程中不断发明和采用新的高效训练算法。
- 推理能力(Reasoning):包括解数学题、代码生成、逻辑问答乃至定理证明等,更强调大模型的“思考深度”,并在如何进行强化学习方面进行了连续多次创新。
在阅读这份逐篇解读之前,可以先记住 DeepSeek 的几大特色:对实验和数据极度重视、有足够的冒险精神尝试新架构和新算法、且真正愿意分享内部研究细节,为社区提供可复现的技术报告。
第一篇 2024年1月
《DeepSeek LLM :Scaling Open-Source Language Models with Longtermism》
这个工作简单说下定位:实际上DeepSeek的第一篇论文并没有特别多的创新,因为本质上这是对 Llama 2 的一个复现。当时 Llama 2 刚出来,而 DeepSeek 作为一家初创公司,在起步时也很合理,先去试着复现 Llama 2 的性能,然后再进一步做一些改进。所以说这个工作的大部分内容其实都是 follow Llama 2。
当然在数据上有所不同,比如 DeepSeek 做的是一个中英文模型,数据准备的质量也可能更高。但整个模型的架构,以及一些训练的方法都和 Llama 2 完全相同。模型主要有两个规模,一个是小的 7B,一个是大的 67B,对标 Llama 2 也有 7B 和 70B。接着他们用了 2T token 数据(这个和 Llama 一脉相承),后面做了 SFT、DPO 之类的后训练。他们的实验结果显示,最终超过了 Llama 2 70B,这也比较正常。因为 Llama 2 在前发布,后面的工作基本上可以把数据质量做得更好一些,当时国内不少模型都声称超过了 Llama 2 70B。这篇论文的整体意义,就是在于对 Llama 2 的复现,以及 DeepSeek 体现出的比较严谨的科学态度。我会重点讲一下他们几个地方展现出这种严谨性:
比如说他们在学习率调度(learning rate schedule)上选用了 multistep 的方式。一般来说,大模型训练常用的是余弦退火(cosine schedule),也就是让学习率沿着一个余弦曲线逐渐变小。但这样做有个问题:一开始就要指定好要训练多少 token,才能规划整条曲线。如果在实际训练过程中,数据量动态变化,比如中途又准备了新数据想加进去,这就对原先的余弦曲线不太好调整。因此 DeepSeek 采用了 multistep 的学习率策略:一开始是常数,训练到一定程度就降低,再保持新的常数值。虽然他们最后发现和余弦退火在最终性能上差别不大,但这种方式更灵活。
第二点是他们跟 Llama 2 的区别:做了非常仔细的 Scaling Law研究。Scaling Law 大概的意思,就是想要在训练资源(算力)固定的情况下,如何事先预测模型大小、数据大小以及超参数的最优配置。因为大模型的实验代价极其昂贵,需要一种可外推的方法来减少反复实验。DeepSeek 的论文对 Scaling Law 做了更严谨的研究。首先他们对超参数(比如 batch size、学习率等)做了专门的缩放实验,而很多之前的工作并没有进行这方面的系统研究。对于业界而言,可能直接参考 Llama 2 的设置就算了,但 DeepSeek 把它当成一个学术问题来研究,做了很多严谨的实验,类似高校的做法。他们还挑战了之前一些对算力估计过于粗糙的地方,比如把注意力(attention)带来的计算开销也纳入估算中。他们提出一个新的公式,和之前的公式在参数上略有不同,但会带来一定的区别。这样在实际外推时,对最优配置的预测会更精细。这里可以看出 DeepSeek 并不是简单照搬之前的方法,而是像研究者一样,认真实验并审视背后的科学逻辑。这种方法对于大模型很有价值,因为无法多次尝试,只能在小模型上试验后做外推。
他们还强调数据质量对 Scaling Law 的影响,比如如果数据质量高,最优的模型和数据规模配置也会不一样。之前很多工作也知道数据质量很重要,但不清楚会如何精确地影响最优配置。DeepSeek 将这些要素纳入考虑,显得非常严谨。
最后来说说这篇论文里让人印象深刻的地方之一:他们很坦率地讨论了”刷榜”现象。在 2023 年时,中文评测榜单 C-Eval出现了很多大模型刷榜的情况:因为 C-Eval 大多是选择题(四选一),如果在训练时特意对这类多选题进行强化,就能在榜单上取得非常高的分数,但模型的实际泛化能力未必高。DeepSeek 做了一个对照实验:他们发现在原始模型只能得 47 分,但如果刻意针对多选题进行专门训练,可以瞬间达到 71 分,差距非常明显。令人敬佩的是,他们把这个刷榜过程如实写进论文,而很多公司不会公开这件事;它们只会说“我分数比谁谁谁高”,却不提背后的训练方式。当时我们也做了很多排查,因为 C-Eval 是由我们维护和更新的,我们深知很多模型都是”高分低能”,通过刷榜达到好看的分数。但 DeepSeek 却在论文里正面揭示了这个现象,还强调他们的公开模型并没有刷榜。我个人非常尊重这种诚实的态度,也看得出这家公司更倾向于学术研究的风格,追求对背后科学原理的理解,而不是单纯做宣传。国内还有另一家公司 昆仑天工也做了类似的揭示,这在当时非常少见。因为对一些公司来说,上榜宣传比坦诚更重要。DeepSeek 这样就更像一个学术团队,用科学的方式来呈现他们的研究。
总结来说,这篇 DeepSeek LLM 论文本身对比 Llama 2 没有特别多新的模型创新,但他们很严谨地分析了背后的原理,补充了一些之前没有深入探讨的点,比如 Attention 的额外计算开销、数据质量与最优配置的关系等。他们还在论文中诚恳地展示了刷榜对评测成绩造成的巨大影响,并主动声明自己的模型没有刷榜。这种风格在当时的国内环境里非常难得,也让人对这家公司刮目相看。
第二篇 2024年1月
《DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models》
从第二篇论文开始,其实DeepSeek就开始变成混合专家模型,就是MoE。因为它的第一个模型其实还是Dense Model(稠密模型),因为LLaMA一直都是做稠密的。MoE是指把transformer里面的神经网络分成了好几份,每一份比如说通俗一点讲都是一个专家,所以说它叫混合专家。然后当有数据进来想要预测,就可能不会经过所有的专家。就比如可能有个专家是擅长数学的,有个专家是擅长物理的,有个专家是擅长文学的,那如果过来的是一道数学题,就只用第一个专家就可以了,其他的专家是不需要用的。混合专家模型又叫稀疏模型,为什么呢?就像刚刚说这个概念,就是因为尽管你有N个专家,但是你可能过来的数学题,你其实只用上了一个专家,你其他专家都没有发挥作用,所以说他就所谓的是稀疏的。然后稠密模型就是你随便进来什么东西,它所有的参数都在发挥作用,所以它就是稠密的。这是一个比较通俗的理解。
为什么大家要做混合专家?其实DeepSeek做MoE并不是说它第一个做,MOE很早期的时候就有。ChatGPT出来之前,其实google就有MoE的模型。然后后来其实在DeepSeek做MOE之前,其实那个时候就已经有广泛的谣言是说ChatGPT是MoE模型,所以说他们在inference的时候,可以把成本降低。所以说DeepSeek MOE其实follow这个也是很理所应当的一个事情。然后为什么MoE很重要?因为MOE模型非常promising,它帮助你可以scale up,就是你模型可以做得很大,但是你同时推理成本又可以很低的一个方案。从DeepSeek MoE开始到V2、V3其实都是MoE,包括到R1。
然后这篇paper其实不是一个非常ready的一个模型产品。跟刚刚讲的那篇paper不一样,那篇paper是他们比较seriously的把做出来了这个模型,然后release给大家。而这篇paper更像是一个study,他们把前期的一些算法策略和实验结果就写成了一篇paper release出来。在paper中他们做实验是2B的模型,最终出了一个16B的模型,但16B的MoE其实是一个很小的MoE。然后我这里主要想讲他们做的一个不太一样的地方,其实这篇paper的创新点就是两点:
第一个就是他们用了很多的experts,一般大家做MoE都怎么做呢?大家一般用的专家数量比较少,就是8或16。但是这个paper希望做的更细分一点。就比如说你分成8个专家或者16个专家,你这个分的还是太笼统了。我希望比如说分成64个甚至128个专家,这样有个什么好处呢?就是可以更细粒度,比如说我分成128个专家,我每次选的时候可能就从这128个里面选两个,因为它分得很细。它解决的问题是什么呢?就是以前大家分的这个专家比较少的时候,比如说8和16就会出现一个什么现象呢?就是不同的专家之间区分不明显。因为你的这个专家太少了,然后你可能就出现我两个专家、三个专家要学很多大家share的东西,要学很多新的东西,就是区分不明显。但是我分成比如说很多很多128个,我就非常的细腻度。然后你可能每个专家就会学到很不一样的东西。这是这个paper在这个设置上是做的跟以前工作很不一样的一个地方。其实这个paper出来之后,当时掀起了一股讨论,就是在这讨论做MoE是不是应该像DeepSeek一样,要用很多专家来做,而不是说像之前都是8个16个,这是DeepSeek一个我觉得还很创新很大的地方。
然后第二个就是他们除了这种混合专家,他们也有shared的专家。他觉得如果你这128个专家彼此都不一样,但模型基本的一些理解能力,比如对语言的理解、比如常识,它其实对于所有的query都是share的,那我应该也有一些shared的专家,也就是他既有专有的,又有那种通用的。其实这个设计也比较符合直觉,但这里我想强调一点什么呢?就是想到这个东西,其实也不是那么难,但是其实要做这个尝试还是很勇敢。因为你要在一个很大的规模上,花很大的算力投入去探索。毕竟MoE以前有人已经做过了,比如说就是8个expert做过了这效果也还行,那你就直接这样照着做,其实最简单也可能风险也比较低,为啥非要自己去搞一些不一样的东西?DeepSeek在后面的paper今天会提到会有很多这样的尝试。对,我觉得都是非常勇敢。我觉得作为公司来说,在业界是很少见的。
他们这个东西用了多少个expert呢?用了64个。后面的V2包括V3的paper用的更多,在这里他们用了64个expert。这里我们这里看一下参数,这里参数这里写了每一个layer有两个share expert,专有的是64个。然后其实这个模型并不大,就是2B、16B。然后16B他们因为做的MoE,他们激活参数只有2.8B,2.8B大家可以看到它的效果其实跟之前的差不太多。这里总结成一句话,就是with only 40%的computation,然后DeepSeek MoE就达到了跟之前那个级别差不多的效果。40%什么概念?就是比如说你去部署这个模型,你的这个成本就降低到了40%。这些都是之前跟别人做得不太一样,然后他们就冲出来发现效果不错。我觉得这是给了他们信心,然后去做后面的V2。
这篇paper就是告诉大家一件事情,我这样来设计MoE的expert,然后我在可能在不是特别大的规模情况下验证它效果很好。
第三篇 2024年5月
《DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model》
然后接下来V2,就是他们在真的大规模的情况下,依然验证DeepSeek MoE,来顺着这个基座向下一个基座,非常的顺理成章就变成了DeepSeekV2。DeepSeekV2基本上就是刚刚DeepSeek MoE那个paper的scale up。它其实是先在DeepSeek MoE那边paper上,在比较小的范围内做了一些验证实验,做了很科学很严谨的study,然后在这样一个大规模投入比较多的情况下才敢于去做这样的事情。V2把experts数量上到了160个专家,像之前大家做大模型都是8个16个,他这里突然比别人多了十倍。但是这个也不是一蹴而就的,就像刚刚讲的那篇paper,其实也是一步一步走过来。
我们先看一下paper上先看一下这个配置V2是一个236B的MoE模型,这个规模大家知道就很大。然后这236B实际上激活参数只有21B,然后它的length很强,支持128k length。可以看到Compared with DeepSeek 67B主要的结论就是67B就是第一篇paper的那个67B他们的performance更好。这里可以看到它的generation throughput。就比如说每一秒可以生成多少个token,比之前快了5.76倍。这是什么概念呢?就是它的这个模型有200多B参数,比之前的第一版的那个67B其实大了很多,接近4倍那么大,但是它的算力比之前节约了40%,它的生成速度还比之前快了5倍多,而且performance还比之前好。所以说大家可以看到DeepSeek其实从这个开始,我觉得他们对于成本的这种经济的概念就一直贯穿在他们这些paper里面。
这个paper有一个很重要的东西,是另一个东西,Multi-Head Latent Attention(MLA,多头潜在注意力),其实最近在国外也很受到关注,因为这是这个东西真的是DeepSeek第一个提出来的,不是说别人的,是DeepSeek自己提出来的。我尝试简单讲一下这个东西。大家知道transformer里面叫所谓的多头注意力,然后多头注意力就是我有很多个head,然后每个头里面都有自己的K和value,然后来做attention。因为attention就是三元组,就是query、key、value,然后你去做attention。比如说ChatGPT或者DeepSeek在生成的时候,比如说你问他一个问题,他生成是一个token一个token往后面生成,然后每他说是每一个词他都要去跟前面的每一个词做一个attention。比如说你给它输入了两篇文章,这两篇文章加起来有5000个词,然后你这个时候要让他给你写一篇新的文章,可能也又要写5000个词。你新生成的这5000个词里面的每一个词,都要跟前面这5000个词的每一个词去做attention。然后这个attention有很多个head,然后就每一个头都要这样做,这样就会在具体大家是怎么实现的呢?因为前面的这些历史背景我们叫history,它每一个词在实际上都会算出K和value。实际上大家肯定不想重复计算,你肯定不可能说我每生成一个词我都去重新算一遍这个K和value。因为这个key、value是跟前面绑定的,跟你现在生成的词无关。所以说一般大家都是说我前面,比如说你前面有5000个词,这5000个词的这个K、value都存下来。样的话你来一个新的词,你只需要算query就可以把attention算出来了,这样就节约了时间。但节约时间你就会付出更多的空间的代价,就是空间换时间,这里就会出现一个东西叫KV cache,就是指你前面存的这些K和value的大小占了多少你的GPU的memory上,这带来一个部署的算力成本。然后大家为了减少这个KV cache,其实有一些paper,比如说group query attention(GQA),就是说虽然我有很多个头,但是我多个头之间共享一个K和value。DeepSeek的第一篇paper就是GQA。然后第三个东西就很激进,叫multi-query attention (MQA)。这是什么呢?就是我所有的query用同一个K和value,我只有一个。我虽然是多头,但是所有的头都是统一的这个K和value,相当于我的这个KV cache变得更少了。这个当然就很激进,但是这里面是有trade-off的。这里的去理解有什么trade-off?就是虽然从MHA到GQA到MQA,大家会发现KV cache越做越少,但是它performance也会越来越差。虽然说你变得更成本更低、更efficient,但是你效果也下降了,所以说这里面是需要一个平衡。然后DeepSeek就搞了一个叫multi-head latent attention。就是它实际上就是这里标的叫compress latent的KV,就是一个低维的向量,它上面的这些K和value就并不需要自己显式地算出来,还是从这个低维的map到高维的。他们叫low-rank,它不光是latent,它还是low-rank。Low-rank什么意思呢?就是在在线性代数里面,比如说我本来这个vector是1024维,就很高维。你的高维的向量,你可能需要的计算也更多。但是我现在low-rank比如说变成只有100维,我在这100维上面算算了之后,我再用一个矩阵把它映射回去。就是所谓的low-rank key-value joint compression。这样有一个什么好处呢?这样带来的好处就是utility。当然这里有一些非常深入的技术细节,我尝试讲的简单一点。就是你部署的时候要存这个K和value就要存很多,之前的方法就是想存得越来越少,然后DeepSeek的方法就是我依然想要这么多个头,我不想把我的头的数量变少,但是我想存得变少,那么它存什么呢?就只存这个compress的latent KV。大家可以认为是我存的时候,我就不直接存这个K和value了,我就只存这个中间的这个latent的东西。然后我在计算的时候,从它这K和value其实是可以换算出来的。本来K和value是1024维,我现在变成了100维,那我这个存储空间直接就少了十倍,这个KV cache就很小,相对来说它部署需要的memory就少了很多,这篇paper中KV cache就降低了93%。
我觉得DeepSeek的发明,当然也是基于成本的考虑。他们之前也是用的GQA,可能想进一步压缩成本,但是觉得直接用MQA performance效果也会受到损耗,他们就想取一个折中,然后设计了一个这样的方法。然后这个东西本身还涉及到会去处理一些关于RoPE(Rotary Position Embedding),这里中文应该叫位置编码的一些艺术,那么他们也有一些独特的方式处理它,这里就不展开讲了。
当然MoE里面我这里可能稍微说一点点技术细节,它需要balance不同的专家。就是因为你是不希望训练到最后所有的data都依赖其中的两个专家,其他专家从来没被用过。然后他们比如说这里还为了来最大化保证efficiency,他们还搞不同的GPU之间平衡,甚至不同的GPU不同的device之间通信的平衡。他们希望我不光我的专家要被用的比较平衡,而且我不同的GPU也要被用的比较平衡,而且我不同的GPU之间的通信也比较平衡。因为这样平衡,efficiency才能被最大化。这也是我觉得DeepSeek做得很好的地方,我觉得这些东西可能听起来没有那么创新,它可能更多的像是一些经验上的或者说工程上的一些优化实现。但是这在最后DeepSeek到后面V3的成本控制中也是起到了很大的作用。
我觉得这还是很勇敢的创新,因为这个训练其实代价就很大了。这是一个236B的模型,这里他们训了8.1T token,他们还是在这样大的规模下,第一次用这样的配置,用他们自己发明的一个新的attention来做这样大规模的训练,我觉得也是非常难得的,因为对于当下很多同期的公司,我觉得其他的大模型公开不公开的我们不知道,但公开的基本上没有人做这么大的创新。
剩下的这里long context extension这些就是一些常规操作,别的人也会做。最后它的长度就到128K的context,基本上也是现有的技术,当然这里就很难展开讲了。他们用了一个延长RoPE,就是旋转位置编码的技术。这个paper也很有名,基本上很多人也这么在做。
效果大家可以看一下,比如说他们跟Mistral对比,Mistral是8乘22B,8个专家,总的模型就一百多B。后来Mistral的模型开源时候大家发现一个问题,就是这8个专家并没有真的很分化,然后就没有达到MoE的初衷。而DeepSeek V2其实设计这么多专家就是为了让它更分化,让专家细粒度更高。而且Mistral和DeepSeek V2我觉得基本上算是同期做的,大家就可以看到,尽管是国外这种非常leading的公司,其实并没有勇气去做那么大的创新。而在这样的一个同期的工作上,这个DeepSeekV2其实是160个专家。所以说大家可以看到同样是MoE的模型,其实这两个就很不一样,就很不一样。然后DeepSeek V2当然总的模型也会大,比Mistral的这个大了90B,但是它的激活参数还比它少,所以说它的推部署成本甚至比Mistral还要小。然后V2对比Lama3对其实模型效果差不太多,但是Lama3的训练token好像要多很多。对,然后这里总结下来就是这样一句话,就是with only 21B的激活参数,然后DeepSeek V2就achieve了这个跟开源的一些模型比,就是比较top的performance。
然后这里有显示出它的多专家之间是怎么设置的,就是不同的专家负责什么样的领域。这个是自动学出来的,并不是人为设置的,对,就具体什么领域他们这个paper没有讲太多的分析。然后可能他们专门讲了training cost,这里可以看一下,说他们是在H800的这个集群上,然后每一个万亿token使用30个GPU日,他们这个模型虽然有两百多B但是它的training cost比他们之前的那个67B的模型节省了42.5%。对然后推理成本可以看到它比之前的那个67B模型快了5.76倍。然后当然他们还做了一些额外的优化,比如在部署的时候就会把参数变成FP8的precision,相当于表示小数的精度变低了。他们会做很多这样额外的优化,包括他们KV cache刚刚提到的也会做一些量化,就相当于把它精度变低,然后来做这样的部署。
我这也是为什么DeepSeek V2在当时在国内引发了一个现象。如果我没记错的话,好像是从DeepSeek V2开始,国内大模型API开始出现价格战。这个其实帮我们理解为什么他他可以这么干的,然后它的原理是什么。但是我觉得当时给我一种感觉就是DeepSeek V2,包括DeepSeek自己当时可能也没有那么在乎这个产品,我一直觉得DeepSeek的模型,特别是早期的这些模型,在后训练上并没有做很精细的RLHF,或者说做得特别精细,比如刷榜或者怎么样,他们就做的很像一个research work。然后他可能就稍微部署了一下,因为他们部署成本也很低,然后他们可能也不是很在乎他比别人价格低什么的,给我是这种感觉。所以说我觉得还是比较低调,包括他们这个部署了之后,我感觉他们也没有做啥宣传。然后后来因为他们价格很低,可能有一些开始有些媒体开始报道,开始有一些关注度了。
DeepSeekV2是在DeepSeek MoE基础上的scale up,做了很多科学严谨的study,引入了MLA这样的原创方法,实现了236B参数下160个专家的LLM在性能和效果上的极大提升,同时其极低成本引发了行业大模型成本战的开端。
第四篇 2024年12月
《DeepSeek-V3 Technical Report》
最后一篇在基座方面的论文就是最近的这一篇,DeepSeek V3,24年12月份的工作。这个工作就开始关注度就很高了,先看一下摘要中基本的东西,这个模型就很大了,6710亿(671B),这也是后面非常出名的R1的基础模型。然后这个大家可以看到比V2还大了,差不多接近三倍,V2只有两百多亿。它大部分的内容就是延续了V2的思路,比如说MLA,包括他们做DeepSeek MoE的策略,但是它的规模很大,当时他们在这里提到它的成本,然后这个也很引发大家关注,因为大家觉得它成本很低。最后一个其实也很让人印象深刻的地方,就是他们特别在摘要里面强调了这句话:“一次性训练完成(one-shot training process)。” 也就是说他们的训练非常稳定,整个训练过程中都没有经历任何的损失峰值(loss spike)。简单解释一下,就是训练过程中,本来损失会突然出现一个极端峰值——比如突然变得很大,或者出现训练异常。这在过去是很常见的,因为过去的大规模预训练会出现各种问题,比如GPU或者机器故障,或者某些不可知原因导致损失出现峰值,然后就得停下来回滚(roll back),然后重新来一遍。但是他们说,这次训练很稳定,整个训练一次就顺利完成了,没有做任何回滚。我觉得这是很了不起的。这背后肯定是他们非常好的工程优化以及团队支持。所以说DeepSeek V3其实在他们的论文中有大量篇幅在写他们的工程实现。这和之前的论文风格不一样,之前的论文其实没有花那么大的篇幅来写这些工程细节。
这个论文比较受关注,一是因为它花了多少钱,他们用H800来训练DeepSeek V3只用了2000张卡,特别是对于一个六百多亿参数量级的模型。大家也知道,不管国内外有好些公司卡都超过上万张,特别是国外可能达到数十万甚至更多张H100,甚至更好的卡。国内一些大厂卡数量也远远多于这个数字。DeepSeek 其实在早期的时候五千张、一万张H100的规模在国内已经算挺大的,但后来来看,DeepSeek 的卡和很多公司相比并不是特别多。这篇论文他们也很坦诚地说了,他们用的就是2000张H800,最终训练成本大约是557万美元。在当时这是很让人震惊的,因为当时有人对比过,比如Llama 3.1——一个4000亿规模(400B)的模型,训练成本应该花了三千万美金左右,差不多多出了六倍的差距。我觉得也是从V3开始,越来越多的人开始认真关注DeepSeek MoE和DeepSeek V2里他们自己发明的MLA(多头隐式注意力)技术等等。其实在那之前,特别是对于国外开发者和主要的大模型团队来说,可能并没有将它们视为主流,直到V3出现,大家发现V3既强大,成本又低,才开始回溯DeepSeek以前做的那些工作。我觉得从过去这一年,他们一步步从DeepSeek MoE到V2再到v3,也不是突然冒出来的成果,因为V3其实就是在V2基础上的直接扩展。
下面主要说一下V3和V2一些不一样的地方。不同之处在于他们在做负载均衡(balance)的时候采用了新的方式——虽然这部分并不是很核心,但他们提到多卡、多专家之间如何平衡。之前的平衡通常是在训练时加一个新的损失函数一起训练,而这次他们搞了一个“loss-free balancing”,也就是利用一个常数来监控某个专家是否被过度使用。如果使用很频繁,就调整常数,让后面少用这个专家。这是一个非常直觉化的启发式方式,不需要显式训练。这是一个比较小的地方。
主要的地方是这儿:multiple token prediction(MTP)。这也是第一次在DeepSeek里出现这个东西。当然它并不是V3团队自己原创的,而是参考了一篇新的论文,提出了多词元预测的损失函数(multiple token prediction loss)。这个损失函数做什么呢?我们都知道语言模型就是要预测下一个token。但在训练时,采用多词元预测就意味着不只预测下一个token,还会同时预测下面的更多token。这有一个好处:训练信号会更丰富,因为不再只预测一个token,还要预测多个,这样模型就能学到如何更好地推断更远的内容。他们在论文里也提到,模型需要在生成时做好一定计划,从而更好地预测将来的token。听起来很直观,但其实在大规模上尝试是有风险的。虽然论文里小规模实验可能验证不错,但大规模训练可能导致不稳定或者各种意外结果,导致整个训练失败。不过DeepSeek很敢于去尝试新东西,他们可能判断这个方向有潜力,就真的大规模去做。说到底,这也和DeepSeek从一开始的文化有关。之前并没有人真正大规模用过这个技术,DeepSeek V2也没有用过,它们完全可以照着V2做,为什么要加新东西?我觉得这又是DeepSeek比较独特的地方。就算他们已经证明V2的成本很低,做了扩展,MLA也是V2的成果,但是他们还要在V3加入新的尝试。这体现了他们不停迭代和勇于创新的团队文化。然后多词元预测(MTP)还有一个好处,就是训练时可以一次预测多个token,那么在推理阶段也可以一次生成多个token,不一定得一个接一个地生成。这里他们提到了可以重新利用这个多词元预测模块进行推测式解码(speculative decoding),用来进一步降低生成延迟。推测式解码就是一次预测多个token,然后可能用另一个小模型来判断是否接受这几个token,如果不行就撤回等等。LLM在推理时比较慢,是因为它是自回归生成,需要一个token一个token往后预测。这个多词元预测就能一次性出好几个,不必先出第一个再等下一个。当然部署时到底这么做,会不会影响效果,还要进一步研究。
然后说一下算力方面,使用了2048张H800。而且并非H100,而是H800。对比起其他公司,2000张H800对于这个规模来说并不算多。他们做了极致的工程优化,让训练速度和成本都很可观。也因此在论文里很大篇幅描述了工程和基础设施,包括通信、低精度混合训练等等。这里值得一提的是,他们采用了FP8低精度训练。在大规模训练中,常常使用FP16或更高精度的浮点运算,但DeepSeek 在训练中使用FP8,这会极大地提升效率,降低成本,但风险是训练不稳定或效果下降,需要大量工程实验去确保可行。他们在论文里指出,虽然在推理中很多团队会做低精度量化,但几乎没有人在真正大规模的训练中用过FP8。而DeepSeek 是最早大规模成功采用FP8训练的团队之一,这对他们降低成本帮助很大。比如说他们专门研究哪些中间变量必须保留更高精度,哪些可以用FP8,这样才能保证训练稳定,他们做了很精细的实验,最后证明了这种混合精度训练是可行的,也取得了比较好的效果。这也是DeepSeek 非常独特的地方,他们不仅在算法上创新,也非常注重工程层面的优化。
然后看他们的多专家(MoE)配置,每个阶段只设一个共享专家和256个专有专家。这和V2也不一样,V2是两个共享专家和160个专有专家。这次模型更大了,所以专家数量也增加到256。但可以看到DeepSeek 从最初的MoE到V2再到V3,都一直坚持最早的思路。相比之下,像Llama系列从Llama 1到Llama 2再到Llama 3,就始终用的是稠密(dense)模型,没有用多专家(MoE),这就导致Llama 3的训练成本尤其高。他们在论文里也对比了Llama 3.1——一个四千亿(400B)规模的模型。Llama 3的激活参数非常多,而DeepSeek V3同等规模的激活参数却只有30亿左右。部署成本上,DeepSeek V3比Llama 3少了十倍不止,而且在英文、代码、数学尤其是中文上都超过了Llama 3的400B基础模型。更难得的是,他们训练只花了五百万美金,部署成本又很低,所以V3当时引起了很大轰动。、
论文里还有一些对照实验,比如验证MTP有没有用。他们在大概200亿规模的MoE模型上做了对照,结果确实会变好。我相信DeepSeekk在正式应用到V3前,也是在小规模上先验证过,确认有效才会大规模采用。这也显示了他们的创新性。
最后说说V3的后训练(post-training)。因为之前讲的主要是大模型基座本身,后续的有监督微调(SFT)和强化学习可能讲得不多,但在V3上还是有一些值得提的:他们的SFT数据只有150万条(1.5M),对于一个6000多亿参数的模型来说并不多。我记得Llama 3后训练数据达到了上千万甚至两千万条。然而DeepSeek V3只用了150万条,规模很小。他们在Reasoning数据上采用了DeepSeek R1做蒸馏,但那个时候R1的论文还没出来,相当于是内部版本。而深层推理的数据还用到2.5(其实就是V2在数据和细节上做了更多优化的版本)对V3进行蒸馏,然后还做了强化学习(RL)。值得一提的是,他们在数学和代码这类可验证性强的任务上,使用了规则反馈机制取代奖励模型,而对开放式问答才使用奖励模型。可以说到V3这个阶段,他们已经开始偏向规则方式,而不是完全依赖模型本身去评判。然后他们在强化学习阶段采用了GRPO,这是后面Reasoning部分会提到的内容。
最后,他们的V3最终效果的最好版本就是在基座模型上做了这些后续步骤。SFT数据量不大,但加了一些内部蒸馏数据,再做了强化学习,效果提升也比较明显。但是相对来说,他们并没有在论文里花太多篇幅去讨论刷榜。我个人感觉DeepSeek V3的团队态度上并不是太热衷于跑各种排行榜,至少从论文中给人的感觉是这样。以前DeepSeek V1时代在榜单上还挺努力,但到了 V3,好像不再过度关注这方面,他们也没刻意在基座模型里融入大量评测数据去刷分,这和很多团队不同。反正从Paper的公开态度上看,DeepSeek V3给人的印象就是更专注在低成本高效率和工程创新,这可能也与他们短期对产品落地并没那么急切有关.
DeepSeekV3是在DeepSeek MoE/V2基础上的进一步scale up,引入了MTP等创新方法,实现了671B参数下256个专家的LLM在性能和效果上的进一步提升,2000张H800下500万美金的单次训练成本与动则十万卡集群几千万美金训练成本的美国友商形成对比,引发了行业关注。
以上就是第一部分关于DeepSeek基座模型的介绍。笔者时间有限,明天接着更新Reason线模型(也就是强化学习RL相关)的以下Paper解读:
DeepSeek-Coder/ DeepSeek-Coder-V2/ DeepSeek-Prover/ DeepSeek-R1