
DeepSeek V3原理
混合专家模型(Mixture of Experts, MoE)是一种模块化的神经网络架构,其核心思想是通过多个“专家”子模型分工协作来解决复杂的任务。每个专家通常是一个独立的神经网络,专注于处理特定类型的输入或任务。例如,在自然语言处理领域,一个专家可能擅长处理语法结构,而另一个专家则更擅长语义理解。门控网络(Gating Network)负责根据输入数据的特性动态分配任务给不同的专家,并决定每个
文章目录
这是系列博客,记录了我学习DeepSeek V3/R1时的学习笔记。其他博客:
- DeepSeek 简介
- DeepSeek R1原理
- DeepSeek V3原理
- DeepSeek 优化方式
- 在Deepseek-R1-ZERO出现前,为何无人尝试放弃微调对齐,通过强化学习生成思考链推理模型?
- MoE硬件部署
DeepSeek V3原理
参考资料:漫谈DeepSeek及其背后的核心技术
混合专家模型(MoE)架构
为什么要用稀疏专家(Sparse MoE)?
参考资料:关于 MoE 大模型负载均衡策略演进的回顾:坑点与经验教训
先说点背景吧。MoE 架构之所以瞬间火起来,是因为人们发现,你可以在不等比例增加计算开销(FLOPs)的前提下,让模型拥有极其庞大的参数量。核心思路在于:对每个 token,只激活少量的专家参与计算,而不是让所有参数统统上场。
但这种“只让部分专家工作”的做法,很快就暴露了一大问题:如果只把 token 分给几个专家,那怎么保证负载是均衡的?要是某个专家被一大堆 token 疯狂轰炸,而其他专家却闲得无聊怎么办?这就是负载均衡的本质,也是 MoE 要大规模应用时必须解决的一道难题。
定义与核心思想
混合专家模型(Mixture of Experts, MoE)是一种模块化的神经网络架构,其核心思想是通过多个“专家”子模型分工协作来解决复杂的任务。每个专家通常是一个独立的神经网络,专注于处理特定类型的输入或任务。例如,在自然语言处理领域,一个专家可能擅长处理语法结构,而另一个专家则更擅长语义理解。门控网络(Gating Network)负责根据输入数据的特性动态分配任务给不同的专家,并决定每个专家对最终输出的贡献权重。这种设计使得MoE能够高效地处理多样化的任务,同时避免单一模型在复杂场景下的过载问题。
MoE的核心目标是通过模块化的方式提高模型的表达能力和效率。相比于传统的单一大型模型,MoE能够在保持高性能的同时显著降低计算成本。这是因为MoE允许模型在推理过程中仅激活一部分专家,而不是让所有专家同时参与计算。这种稀疏激活机制特别适合大规模模型和资源受限的场景。
MoE架构的主要组成部分
MoE架构主要由三个部分组成:专家(Experts)、门控网络(Gating Network)和混合机制(Mixture Mechanism)。
专家是一组独立的子模型,通常由多层神经网络构成,每个专家负责处理特定的任务或输入特征。例如,在图像分类任务中,可以设计一些专家专门处理纹理特征,另一些专家专门处理形状特征。门控网络的作用是对输入数据进行分析,并根据其特性选择最合适的专家组合。门控网络通常是一个小型的神经网络,它会输出一组权重值,表示每个专家对最终结果的贡献比例。最后,混合机制将所有专家的输出按照门控网络提供的权重进行加权组合,生成最终的结果。
此外,MoE架构还可以进一步扩展为稀疏激活模型。在这种模型中,只有少数专家会被激活,从而大幅减少计算开销。例如,Google提出的Switch Transformer就是一种典型的稀疏激活MoE模型,它通过简单的路由机制选择最合适的专家,大幅提升了模型的效率。
MoE模型的分类与应用场景
MoE模型可以根据其设计方式分为多种类型。一种常见的分类是基于专家数量和分配策略的不同。固定专家数量型MoE模型会在训练前预先设定好专家的数量,并在训练过程中调整门控网络的参数以优化任务分配策略。这种模型适用于任务特性较为明确的场景。另一种是动态扩展型MoE模型,这类模型允许根据任务复杂度或数据分布动态增加或减少专家的数量。例如,在多任务学习场景中,动态扩展型MoE可以根据任务需求自适应地调整专家配置。
MoE模型的应用场景非常广泛。在自然语言处理领域,MoE可以用于机器翻译、文本生成等任务,其中每个专家可以专注于处理特定的语言特性或上下文信息。在推荐系统中,MoE可以通过为不同用户群体分配不同的专家,实现个性化推荐。在强化学习领域,MoE可以用来建模复杂的策略空间,其中每个专家代表一种特定的行为策略。
MoE模型的优势与挑战
MoE模型具有许多优势,但也面临着一些挑战。首先,MoE模型通过模块化设计提高了模型的灵活性和表达能力,使其能够更好地适应多样化任务的需求。其次,稀疏激活机制显著降低了计算成本,使得MoE模型在大规模场景下更具实用性。
然而,MoE模型的训练过程也存在一定的复杂性。由于专家和门控网络之间的相互依赖,传统的反向传播算法可能难以收敛。此外,如何有效地设计门控网络以避免过拟合也是一个重要问题。为了解决这些问题,研究者们提出了多种改进方法,例如引入正则化技术或使用更高效的优化算法。
总之,MoE模型作为一种灵活且高效的架构,已经在许多深度学习任务中展现了巨大的潜力。未来,随着硬件加速器的发展和算法的改进,MoE有望在更多领域发挥更大的作用。
深度学习中的核心架构:Transformer、MoE、MHA
在深度学习领域,Transformer、混合专家模型(Mixture of Experts, MoE)、多头注意力机制(Multi-Head Attention, MHA)是几种关键的技术和架构。这些方法各自具有独特的定义和目的,并且在实际应用中彼此之间存在一定的联系与区别。以下将对这些概念进行深入探讨。
Transformer:序列建模的革命性架构
Transformer是一种基于自注意力机制(Self-Attention Mechanism)的神经网络架构,最初由Vaswani等人于2017年提出,旨在解决传统循环神经网络(RNN)和长短时记忆网络(LSTM)在处理长序列数据时效率低下的问题。其核心思想是通过计算输入序列中每个位置与其他位置之间的关系权重,实现全局上下文依赖的学习。
具体来说,Transformer由**编码器(Encoder)和解码器(Decoder)**两部分组成。编码器负责将输入序列转换为高维特征表示,而解码器则根据这些特征生成目标序列。例如,在机器翻译任务中,编码器将源语言句子转化为隐藏状态表示,解码器则根据这些隐藏状态逐步生成目标语言句子。
此外,Transformer的主要目的是提供一种高效且并行化的方法来处理序列数据。相比于传统的RNN或LSTM,Transformer允许所有位置的词同时参与计算,从而显著减少了训练时间。这种并行化的特性使得Transformer成为自然语言处理(NLP)领域的主流架构之一。值得注意的是,Transformer还引入了位置编码(Positional Encoding)技术,以弥补自注意力机制无法捕捉序列顺序信息的不足。位置编码通过为每个输入词添加与其位置相关的向量,帮助模型理解词序的重要性。
Transformer的成功不仅限于文本任务,它还被广泛应用于语音识别、图像生成等领域。例如,Vision Transformer(ViT)将图像划分为固定大小的块,并将其视为“词”序列输入到Transformer中,从而实现了高效的图像分类任务。
混合专家模型(MoE):模块化与稀疏化的结合
混合专家模型(MoE)是一种模块化的神经网络架构,其核心思想是将复杂的任务分解为多个子任务,并分配给不同的“专家”子模型来处理。每个专家可以是一个独立的神经网络,专注于解决特定类型的输入或任务。门控网络(Gating Network)负责分析输入数据,并决定每个专家对最终输出的贡献权重。MoE的主要目的是通过分工协作的方式提高模型的效率和性能,尤其是在大规模模型和多任务学习场景下。
例如,在自然语言处理任务中,一个专家可能擅长处理语法相关的任务,而另一个专家则更擅长语义理解。MoE还可以进一步分为固定专家数量型和动态扩展型。前者预先设定好专家的数量并在训练过程中调整门控网络参数,后者则允许根据任务复杂度动态调整专家数量。此外,基于稀疏激活的MoE模型仅激活一小部分专家,从而显著降低计算成本。例如,Google提出的Switch Transformer就是一种典型的稀疏激活MoE模型,它通过简单的路由机制选择最合适的专家,大幅提升了模型的效率。
MoE的分类还包括静态分配和动态分配两种方式。静态分配意味着在训练前确定每个专家的任务范围,而动态分配则允许模型根据输入数据的特性实时调整专家的选择策略。这种灵活性使得MoE在处理多样化的任务时表现出色,但同时也增加了模型设计和训练的复杂性。
多头注意力机制(MHA):捕捉多样化的上下文关系
参考链接:Transformer学习笔记二:Self-Attention(自注意力机制)
简介
多头注意力机制(MHA)是Transformer架构中的一个重要组成部分,其设计初衷是为了捕捉输入序列中多样化的关系模式。传统的单头注意力机制只能在一个固定的子空间中计算注意力权重,而MHA通过并行运行多个独立的注意力头,分别在不同的子空间中提取特征,最后将这些结果拼接并线性变换为最终输出。这种机制使得模型能够同时关注输入序列的不同方面,例如局部依赖和全局依赖,从而提升其表达能力。
例如,在自然语言处理任务中,MHA可以帮助模型更好地理解句子中单词之间的复杂关系。假设输入句子为“我喜欢吃苹果”,MHA可以通过不同的注意力头分别关注“我”与“喜欢”、“喜欢”与“吃”、“吃”与“苹果”等不同层次的关系。这种多视角的建模能力使得Transformer在处理长距离依赖问题时表现尤为突出。此外,MHA不仅适用于Transformer,还可以被集成到其他神经网络架构中,以增强其上下文建模能力。
需要注意的是,MHA的计算成本随着注意力头数量的增加而上升。为了平衡性能和效率,通常会限制注意力头的数量,并通过共享参数等方式优化计算资源的使用。此外,MHA还可以进一步扩展为分层注意力机制(Hierarchical Attention Mechanism),以适应更复杂的任务需求。
MHA中的注意力本质
在多头注意力(Multi-Head Attention, MHA)中,注意力是一种自注意力(Self-Attention)机制,其核心是通过计算输入序列中不同位置之间的相关性,动态分配权重以聚焦关键信息。具体来说:
-
数学定义:
对于输入序列的每个元素,通过查询(Query)、键(Key)、值(Value)三元组计算注意力权重:
Attention ( Q , K , V ) = Softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{Softmax}\left( \frac{QK^T}{\sqrt{d_k}} \right)V Attention(Q,K,V)=Softmax(dkQKT)V
其中 d k d_k dk 是键向量的维度,用于缩放点积结果,防止梯度消失。 -
多头扩展:
MHA通过并行多个独立的注意力头(如8或16个),每个头使用不同的线性变换参数( W i Q , W i K , W i V W_i^Q, W_i^K, W_i^V WiQ,WiK,WiV),将输入映射到不同的子空间,从而捕捉多样化的特征。
注意力头的输入与输出
1. 输入组成
每个注意力头的输入均来自同一输入序列,但经过独立的线性变换:
-
输入源:
原始输入 X ∈ R n × d model X \in \mathbb{R}^{n \times d_{\text{model}}} X∈Rn×dmodel(序列长度 n n n,模型维度 d model d_{\text{model}} dmodel)。 -
线性变换:
每个头 i i i 通过以下操作生成独立的 Q i , K i , V i Q_i, K_i, V_i Qi,Ki,Vi:
Q i = X W i Q , K i = X W i K , V i = X W i V Q_i = X W_i^Q, \quad K_i = X W_i^K, \quad V_i = X W_i^V Qi=XWiQ,Ki=XWiK,Vi=XWiV
其中 W i Q , W i K ∈ R d model × d k W_i^Q, W_i^K \in \mathbb{R}^{d_{\text{model}} \times d_k} WiQ,WiK∈Rdmodel×dk, W i V ∈ R d model × d v W_i^V \in \mathbb{R}^{d_{\text{model}} \times d_v} WiV∈Rdmodel×dv(通常 d k = d v = d model / h d_k = d_v = d_{\text{model}}/h dk=dv=dmodel/h, h h h 为头数)。
2. 输出过程
每个头独立计算注意力并输出结果:
-
注意力计算:
head i = Softmax ( Q i K i T d k ) V i \text{head}_i = \text{Softmax}\left( \frac{Q_i K_i^T}{\sqrt{d_k}} \right) V_i headi=Softmax(dkQiKiT)Vi
输出维度为 R n × d v \mathbb{R}^{n \times d_v} Rn×dv。 -
输出拼接:
所有头的输出沿特征维度拼接为 Concat ( head 1 , . . . , head h ) ∈ R n × h d v \text{Concat}(\text{head}_1, ..., \text{head}_h) \in \mathbb{R}^{n \times h d_v} Concat(head1,...,headh)∈Rn×hdv,再通过线性变换 W O ∈ R h d v × d model W^O \in \mathbb{R}^{h d_v \times d_{\text{model}}} WO∈Rhdv×dmodel 得到最终输出。
在多头注意力(MHA)中,每个注意力头独立生成键(Key)和值(Value)对的核心原因在于增强模型的多样性与表达能力。以下是具体分析:
捕捉多维度特征
-
子空间独立性:每个注意力头通过独立的线性变换(不同的权重矩阵)生成独有的键(K)和值(V),从而将输入映射到不同的子空间。例如:
- 头1的键可能关注语法结构(如主谓宾关系);
- 头2的键可能捕捉语义关联(如近义词或反义词);
- 头3的键可能聚焦位置信息(如词序依赖)。
-
数学表达:
对于第 i i i 个头,其键和值通过独立参数生成:
K i = X ⋅ W i K , V i = X ⋅ W i V K_i = X \cdot W_i^K, \quad V_i = X \cdot W_i^V Ki=X⋅WiK,Vi=X⋅WiV
其中 W i K W_i^K WiK 和 W i V W_i^V WiV 是头 i i i 独有的参数矩阵。
避免特征冗余
- 多样性需求:若所有头共享同一组键值对,模型可能在不同头中重复学习相似特征,导致信息冗余。例如,若所有头都关注“动词-宾语”关系,则无法有效捕捉“修饰词-名词”等其他关系。
- 实验支持:研究表明,独立键值对能使不同头学习到互补特征。例如,在机器翻译任务中,某些头负责对齐源语言和目标语言的词序,而另一些头则处理语义匹配。
提升模型容量
- 参数自由度:每个头独立的键值对增加了模型的参数数量,从而扩展了模型的容量(Capacity)。这使得MHA能够处理更复杂的模式,例如:
- 长距离依赖(如段落级指代消解);
- 多粒度语义(如词义消歧和上下文推理)。
- 对比变体(MQA/GQA):
- MQA(多查询注意力):所有头共享同一组键值对,虽减少计算量,但牺牲了多样性,导致性能下降(尤其在复杂任务中)。
- GQA(分组查询注意力):折中方案,组内共享键值对,平衡效率与性能,但仍弱于MHA的表达能力。
注意力权重的差异化计算
-
动态交互:每个头通过独立的键值对生成不同的注意力权重,从而对输入序列进行多角度交互。例如:
- 在文本生成中,某个头可能关注“当前词与上文关键词”的关系,而另一个头可能计算“当前词与固定模板”的关联。
-
公式对比:
-
MHA中第 i i i 个头的注意力计算:
Attention i = Softmax ( Q i K i T d k ) V i \text{Attention}_i = \text{Softmax}\left( \frac{Q_i K_i^T}{\sqrt{d_k}} \right) V_i Attentioni=Softmax(dkQiKiT)Vi -
若共享键值对(如MQA),则所有头使用相同的 K K K 和 V V V,导致注意力模式趋同。
-
实际应用中的优势
- 任务适应性:在需要细粒度建模的任务(如问答、文本摘要)中,独立键值对允许模型同时捕捉局部细节与全局结构。
- 可视化证据:
通过注意力热图可观察到,不同头确实聚焦于输入的不同部分。例如,在BERT中,某些头专门处理句法,而另一些头处理语义。
总结
MHA中每个头生成独立键值对的核心目的是通过多子空间、多角度的特征提取,增强模型的表达能力和任务适应性。虽然这会增加参数量和计算开销,但为复杂任务提供了必要的灵活性。后续的MQA、GQA等变体通过牺牲部分表达能力来优化效率,适用于对实时性要求更高的场景。
区别与联系:从功能到架构的互补性
多头注意力机制(MHA, Multi-Head Attention)和多头潜在注意力(MLA, Multi-Head Latent Attention)是深度学习中两种重要的注意力机制,它们与混合专家模型(MoE, Mixture of Experts)的结合方式各有侧重,但在实际应用中可以实现功能上的互补。
MHA与MoE的结合主要体现在通过多头注意力机制为不同的专家分配任务。在MoE架构中,每个专家负责处理特定类型的输入或任务,而门控网络(Gating Network)决定每个专家对最终输出的贡献权重。MHA可以通过捕捉输入数据中的复杂关系,帮助门控网络更准确地选择合适的专家。例如,在自然语言处理任务中,MHA可以分析句子中单词之间的语法和语义关系,并根据这些关系将任务分配给擅长不同子任务的专家。假设一个句子包含复杂的从句结构,MHA可以识别出哪些部分需要语法解析,哪些部分需要语义理解,从而动态调整专家的选择策略。这种结合方式不仅提高了模型的表达能力,还降低了计算成本,因为只有少量专家会被激活参与计算。
Transformer层
Transformer模型由多个关键层组成,每个层在序列处理中承担独特作用。以下是各层的详细解释:
输入处理层
(1) 词嵌入层(Embedding Layer)
- 作用:将输入的词索引(整数)转换为高维稠密向量(词向量),捕捉词语的语义信息。
- 细节:
- 编码器和解码器各有一个嵌入层,分别处理输入序列和目标序列。
- 输入序列(如英语句子)通过编码器的嵌入层(输入嵌入),目标序列(如翻译结果)通过解码器的嵌入层(输出嵌入)。
- 输出形状:
(batch_size, sequence_length, embedding_dim)
。
(2) 位置编码层(Positional Encoding Layer)
-
作用:为序列中的每个词添加位置信息,弥补Transformer并行处理序列时丢失的位置关系。
-
细节:
-
使用正弦和余弦函数生成固定位置编码,公式为:
P E ( p o s , 2 i ) = sin ( p o s / 1000 0 2 i / d m o d e l ) , P E ( p o s , 2 i + 1 ) = cos ( p o s / 1000 0 2 i / d m o d e l ) PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d_{model}}), \quad PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d_{model}}) PE(pos,2i)=sin(pos/100002i/dmodel),PE(pos,2i+1)=cos(pos/100002i/dmodel) -
位置编码与词嵌入相加后输入编码器或解码器。
-
编码器层(Encoder Layer)
编码器由N个相同层堆叠(通常N=6),每层包含两个子层:
(1) 自注意力层(Self-Attention Layer)
- 作用:捕捉序列内部词与词之间的依赖关系,通过计算词与所有词的注意力权重,动态聚合上下文信息。
- 细节:
- 输入通过线性变换生成查询(Query)、键(Key)、值(Value)矩阵。
- 计算注意力得分: Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQKT)V。
- 多头注意力:将Q、K、V拆分为多个头并行计算,增强模型捕捉不同子空间信息的能力。
(2) 前馈网络层(Feed-Forward Network, FFN/MLP)
-
作用:对自注意力输出进行非线性变换,增强模型表达能力。
-
结构:两层全连接网络,中间通过ReLU激活:
FFN ( x ) = ReLU ( x W 1 + b 1 ) W 2 + b 2 \text{FFN}(x) = \text{ReLU}(xW_1 + b_1)W_2 + b_2 FFN(x)=ReLU(xW1+b1)W2+b2- 输入和输出维度相同(如512维),中间层维度更大(如2048维)。
(3) 残差连接与层归一化(Residual Connection & Layer Norm)
- 残差连接:将子层输入直接加到输出上(如
x + Sublayer(x)
),缓解梯度消失。 - 层归一化:对残差结果进行归一化,加速训练收敛。
解码器层(Decoder Layer)
解码器同样由N个相同层堆叠,每层包含三个子层:
(1) 掩码自注意力层(Masked Self-Attention Layer)
- 作用:防止解码时看到未来信息(避免信息泄露)。
- 细节:
- 在训练时,通过掩码矩阵将未来位置的注意力得分设为负无穷,使softmax后权重为0。
- 例如,生成第i个词时,只能关注前i个词。
(2) 编码器-解码器注意力层(Encoder-Decoder Attention Layer)
- 作用:让解码器关注编码器的输出,建立输入与输出序列的关联。
- 细节:
- Query来自解码器的掩码自注意力输出,Key和Value来自编码器的最终输出。
- 类似自注意力机制,但跨序列计算。
(3) 前馈网络层(FFN)
- 结构与编码器的FFN相同,进行非线性变换。
(4) 残差连接与层归一化
- 每个子层后同样应用残差连接和层归一化。
输出层
- 线性投影(Linear Projection):将解码器输出的高维向量映射到词汇表大小维度。
- Softmax:生成每个位置的概率分布,选择最高概率词作为输出。
协作流程
- 输入序列经过词嵌入和位置编码后输入编码器。
- 编码器通过自注意力和FFN逐层提取特征,输出上下文感知的表示。
- 解码器依次生成目标序列:
- 使用掩码自注意力处理已生成部分。
- 通过编码器-解码器注意力融合输入序列信息。
- FFN进一步处理后预测下一个词。
- 输出层生成最终翻译或预测结果。
关键设计思想
- 并行计算:自注意力机制替代RNN的串行处理,提升训练速度。
- 多头注意力:从多个子空间学习不同模式的关系。
- 残差与归一化:确保深层网络稳定训练。
以上结构使得Transformer在机器翻译、文本生成等任务中表现卓越。
RoPE(Rotary Position Embedding,旋转位置编码)
RoPE(Rotary Position Embedding,旋转位置编码)是当前大语言模型(如Llama、ChatGLM、PaLM等)广泛采用的位置编码技术,其核心思想是通过旋转操作将绝对位置信息转化为相对位置关系,从而提升模型对序列位置特征的捕捉能力。以下从原理、特性、应用及数学实现四个维度展开说明:
一、基本原理
-
旋转操作融入位置信息
RoPE通过旋转矩阵对输入向量的每个维度进行旋转,旋转角度与位置相关。对于位置为$ m 的 t o k e n ,其对应的 Q u e r y 和 K e y 向量会乘以旋转矩阵 的token,其对应的Query和Key向量会乘以旋转矩阵 的token,其对应的Query和Key向量会乘以旋转矩阵 R_{\theta,m}^d ,使得内积计算结果自动包含 ,使得内积计算结果自动包含 ,使得内积计算结果自动包含 m-n $的相对位置差。 -
复数域到向量空间的映射
将词向量拆分为复数形式(二维子空间),通过欧拉公式构造旋转矩阵。例如,二维空间中位置$ m 的旋转角度为 的旋转角度为 的旋转角度为 m\theta_i ,其中 ,其中 ,其中 \theta_i=10000^{-2i/d} $,高维情况下通过分组旋转实现。
二、核心优势
-
长序列适应性
传统位置编码(如Sinusoidal)存在周期性重复问题,而RoPE通过旋转矩阵的连续变化避免位置编码重复,支持更长的上下文窗口。 -
相对位置建模
注意力内积$ q_m^T k_n 仅与相对位置 仅与相对位置 仅与相对位置 m-n $相关,天然具备对局部关系的捕捉能力,尤其适合命名实体识别、句法分析等任务。 -
计算高效性
相比动态相对位置编码(如T5),RoPE无需在生成新token时重新计算历史位置信息,保持了KV缓存的有效性,降低内存占用。 -
兼容线性注意力
RoPE是目前唯一支持线性注意力机制的位置编码方式,可将Attention复杂度从$ O(n^2) 降至 降至 降至 O(n) $,显著提升长文本处理效率。
三、应用场景
-
长文本处理
在预训练长度外推任务中(如扩展上下文窗口),RoPE通过调整旋转角度实现平滑过渡,避免模型崩溃。 -
多模态扩展
核心思想可迁移至图像处理,捕捉像素或区域间的相对位置关系。 -
主流模型应用
- Llama系列:通过RoPE提升长文本理解能力。
- ChatGLM/Qwen:在中文NER、文本分类等任务中显著提升效果。
四、数学实现简析
以二维向量 x m = [ x 0 , x 1 ] \mathbf{x}_m = [x_0, x_1] xm=[x0,x1]为例,RoPE的旋转公式为:
x m ′ = [ cos m θ − sin m θ sin m θ cos m θ ] [ x 0 x 1 ] \mathbf{x}_m' = \begin{bmatrix} \cos m\theta & -\sin m\theta \\ \sin m\theta & \cos m\theta \end{bmatrix} \begin{bmatrix} x_0 \\ x_1 \end{bmatrix} xm′=[cosmθsinmθ−sinmθcosmθ][x0x1]
高维情况下,向量按奇偶索引分组(如 ( x 0 , x 1 ) , ( x 2 , x 3 ) (x_0, x_1), (x_2, x_3) (x0,x1),(x2,x3)等),每组独立旋转不同角度。最终,注意力内积结果为:
$
q_m^T k_n = \text{Re} \left[ \sum_{i=0}^{d/2-1} (x_m^{(2i)} + i x_m^{(2i+1)}) (x_n^{(2i)} - i x_n^{(2i+1)}) e^{i(m-n)\theta_i} \right]
$
其中$ \text{Re} $表示取复数实部,证明相对位置信息已融入计算。
五、未来方向
- 多模态扩展:探索RoPE在视觉、语音等领域的应用。
- 动态频率调整:针对不同任务自适应调整旋转角度参数$ \theta_i $。
- 高效外推方法:结合NTK-aware插值、位置基频缩放等技术,进一步提升长文本外推能力。
DeepSeek-V3 简介
参考链接:张慧敏.DeepSeek-R1是怎样炼成的?[J/OL].深圳大学学报(理工版).https://link.cnki.net/urlid/44.1401.N.20250210.1628.002
DeepSeek-V3 模型采用混合专家(mixture of experts,MoE) 模型架构,通过细粒度设计和共享专家策略,实现高效的计算资源利用;MoE 模型架构中的稀疏激活机制和无损负载均衡策略显著提高了模型训练的效率和性能。
多头潜在注意力(multi-head latent attention,MLA) 机制通过减少内存使用和加速推理过程,降低了模型训练和推理成本;引入多 token 预测(multi-token prediction,MTP)和 8 位浮点数(floating point 8-bit,FP8)混合精度训练技术,提升了模型的上下文理解能力和训练效率,并通过优化并行线程执行(parallel thread execution,PTX)代码显著提高了图形处理器(graphics processing unit,GPU)的计算效率.
DeepSeek-V3 的高效构架与创新技术
虽然 DeepSeek 采用了 Transformer 架构,在架构和算法的各个方面都进行了极致优化,并融入了令人赞叹的创新和最新技术.
参考链接:DeepSeek-V3推理系统分析
高效的模型架构:混合专家模型
万字解析DeepSeek MOE架构——从Switch Transformers到DeepSeek v1/v2/v3
DeepSeek-V3采用混合专家(mixture of experts,MoE)模型,这也是目前大多数AI大模型都使用的技术,但也有一些不依赖MoE的模型,如Anthropic的Claude和Meta的LLaMA系列。由于信息不透明,目前无法确定OpenAI的ChatGPT 3.5和ChatGPT 4.0是否采用了MoE架构。
MoE模型通过组合多个专家模型来处理复杂任务,每个专家模型专注于输入数据的不同部分,门控网络决定如何加权这些专家的输出,其核心思想是将任务分解为多个子任务,再由不同的专家处理,从而提高模型的灵活性和性能。MoE模型在自然语言处理和计算机视觉等领域表现出色,尤其适合处理大规模数据和复杂任务。通过动态分配计算资源,MoE能够高效利用硬件,同时保持高精度和泛化能力。
DeepSeekMoE架构独特之处在于细粒度设计和共享专家策略。其他MoE模型每层可能拥有几个到几十个专家,如xAI公司的Grok-1采用了8个专家的MoE架构,每处理1个token会激活2个专家。在DeepSeekMoE框架中,每个MoE层由1个共享专家和256个路由专家组成。每个token会从这些路由专家中选择8个最合适的专家进行处理。
与ds-v2相同,仍然使用细粒度专家,具体的,采用了256个routed experts和top-8 routing(比v2的160个激活6个要更多),有1个shared expert。
可能由于专家数量增大的原因,ds-v3的routing score计算和传统MoE模型不同,ds-v3使用sigmoid取topk再做归一化来计算routing score,常规MoE模型直接使用softmax并且不做归一化。
DeepSeekMoE架构中的共享专家策略是一项重要创新,包括专家分类、特点、目的和优势。共享专家数量固定且较少,每个MoE层通常包含1个始终处于激活状态的共享专家,负责捕获和整合不同上下文中的共同知识,减少了知识冗余,提高了参数效率,使得独立路由专家能专注于更专业化的知识。共享专家策略提高了模型的泛化能力和整体效率,减轻了其他路由专家之间的参数冗余,与细粒度专家分割相结合,实现了高效的模型架构。
这种精细的MoE设计在工程上非常复杂且极具挑战性。由于缺乏足够的高性能GPU,DeepSeek团队不得不通过精心设计和努力,使模型在效率和性能方面达到新的高度。这种创新无疑为AI领域树立了新标杆。
在训练过程中,每个token在每个MoE层中仅激活8个路由专家,最多可路由至4个节点,这种方法被称为稀疏激活。稀疏激活机制可以在不显著增加计算成本的情况下,大幅扩展模型容量。
细粒度专家系统和稀疏激活具有明显的优点。首先,通过减少连接和激活的数量,大大减少了网络的参数量,从而降低了模型的存储需求和计算开销。此外,稀疏的连接和激活模式使模型更具解释性,有助于理解模型的决策过程。限制连接和激活还可以降低数据噪声和冗余信息的影响,提高模型对干扰和变化的鲁棒性。通过提取最相关和最重要的特征,增强了模型的泛化能力,有效减少了过拟合的风险。此外,通过只保留最重要的激活值,大大减少了计算量和内存使用,同时几乎不影响模型性能。
但缺点也是显而易见的:实现复杂度较高,需要复杂的路由机制和专门的硬件支持;在训练阶段可能需要更多的计算资源来优化专家分配和激活模式,这对于资源有限的团队来说是一个挑战;精心平衡专家数量、激活策略和模型性能,需要大量的实验和调优,也是一个复杂的过程。
用MoE架构训练超大模型,最大的挑战是负载均衡,它会涉及效率、性能瓶颈、训练稳定性、可扩展性和通信开销等方方面面。如果负载不均衡,有些专家会被过度使用,而其他专家则被闲置,导致计算资源浪费和训练效率降低。负载不均衡还会导致系统性能瓶颈,热门专家负载过高,冷门专家负载过低,形成自我强化的循环。随着模型规模增大,负载不均衡也会限制可扩展性,导致收益递减。此外,在分布式训练中,负载不均衡会增加节点间通信开销,影响训练速度。
无辅助损失的负载均衡策略
DeepSeek团队提出无辅助损失负载均衡(auxiliary-loss-free load balancing,ALFLB)策略。该策略通过动态偏差调整路由任务,依据专家近期负载改变偏差值,实现自适应负载分配。专家过载时,系统降低其接收新任务概率;负载低时则提高。与传统辅助损失方法相比,它避免干扰模型主要训练目标,显著提升模型性能和训练效率,减少内存消耗与计算资源,还能在不增加键值(KV)缓存大小的情况下增加注意力头数量,进而潜在提高模型能力,为大语言模型提供了高效低成本的解决方案。
创新的注意力机制:多头潜在注意力机制
参考链接:deepseek技术解读(1)-彻底理解MLA(Multi-Head Latent Attention)
DeepSeek中的Multi-head Latent Attention技术
ChatGPT生成文本时,会综合考虑输入上下文及之前生成的词,为这些词分配不同权重,以此捕捉关键信息生成优质文本,这就是注意力机制。Transformer通过引入查询矩阵(Q)、键矩阵(K)和值矩阵(V)计算注意力。
多头注意力(MHA)机制是对自注意力的扩展改进,让模型能从多角度捕捉不同特征和相关性,扩展模型表示空间,增强学习复杂特征的能力,多个注意力头可并行计算,提升处理速度、减少过拟合风险、增强泛化能力,助力模型在自然语言处理任务中表现出色。
DeepSeek在DeepSeek-V2模型中提出多头潜在注意力(MLA)机制,解决大型语言模型训练和推理时KV缓存占用大量内存的问题。MLA所需显存仅为MHA的5% - 13% ,减少KV缓存,加快推理,尤其在处理长序列时效果好,且在大幅减少资源占用的情况下性能与MHA相当甚至更强,降低训练和推理成本。
MLA机制采用低秩键值联合压缩技术,将MHA机制的键、值矩阵压缩为低维潜在向量,减少内存占用,实现注意力高效计算,在保持或提升模型性能的同时降低计算资源需求。
在预训练阶段,MLA机制在扩大模型容量、增加批量大小、优化计算与内存平衡方面优势显著,虽增加计算复杂性,但节省的内存资源和潜在性能改进优势更突出,在内存硬件受限场景下尤为明显。在推理阶段,MLA机制减少KV缓存、降低维度,将键值矩阵投影到低维潜在空间,降低内存占用、提高推理效率,虽增加计算量,但减少内存带宽和存储需求,还能在不增加KV缓存大小的情况下增加注意力头数量,提升模型能力且不影响推理速度。
不同注意力机制主要减少KV Cache的使用。
大大降低了MoE大模型部署成本。
多token预测的应用
简介
DeepSeek-V3模型采用多token预测(multi-token prediction,MTP)技术。MTP工作原理是用多个输出头并行预测多个token,由主输出头验证并选择最可能结果。模型用n个独立输出头预测n个未来token,共享主干网络生成的上下文潜在表征,再送入n个独立头网络,设计简单易实现,无需复杂架构改变。
Meta研究表明,MTP通过预测多个token,为模型提供更丰富监督信号,助其更快学习语言结构和规律。4-token预测训练的模型推理速度比单token快3倍,还能帮助模型学习token间长距离依赖关系,更好理解上下文,在编程任务中表现出色,增强分布外泛化能力。
不过,MTP需要更多计算资源,模型规模大时,简单实现MTP可能导致内存使用量剧增,需特殊优化技术解决。在某些特定NLP任务,如标准选择题任务中,MTP表现不如传统单token预测。
DeepSeek通过极致内存和通讯管理,率先将MTP技术用于DeepSeek-V3和DeepSeek-R1训练,发挥其高效优势,包括提高数据效率、增强预测能力、减少训练时间和提升模型泛化能力,提升了效率和性能,使其在AI技术前沿领先。
MTP可以额外预测多个token。如上边这张图所示,额外预测2个token需要2个MTP Module。在61层跑完之后,在output head输出之前,将activation输入到MTP Module,与右移一位的input token沿着dimension维度拼接起来,经过投影矩阵,再过一层Transformer block。每个MTP Module与Main Model共享Embedding Layer和Output Head。
MTP的主要目的是提升训练效果,推理阶段可不开启MTP。
实际在ds-v3中会额外预测1个token,额外预测的那个token的准确率在85%-90%,在推理阶段可以开启投机采样,decode阶段能加速1.8x。
MTP的核心目标
MTP(Multi-Token Prediction)是一种改进Transformer模型训练效率的技术,核心目标是通过同时预测多个未来token(如1-2个),增强模型对序列全局依赖关系的理解。
- 传统方法缺陷:普通Transformer仅预测下一个token(如GPT),可能导致模型过度关注局部模式,忽略长程关联。
- MTP优势:通过强制模型同时预测多个位置(如第t+1和t+2个token),迫使模型学习更全局的上下文表示。
MTP模块的运作流程(以预测2个token为例)
-
输入处理
-
主模型输出:主Transformer(61层)输出的激活值(activation)维度为
[batch_size, seq_len, hidden_dim]
。 -
右移拼接:将输入序列右移1位(类似传统语言模型的移位操作),与主模型的激活值沿特征维度(dimension)拼接,形成扩展特征向量。
-
数学表达:
拼接后输入 = Concat ( activation , 右移的input_embeddings ) \text{拼接后输入} = \text{Concat}(\text{activation}, \text{右移的input\_embeddings}) 拼接后输入=Concat(activation,右移的input_embeddings)
-
-
投影与计算
- 投影矩阵:通过线性变换(矩阵乘法)将拼接后的高维向量压缩到与主模型隐藏层相同的维度。
- 独立Transformer Block:每个MTP模块包含一个轻量级Transformer层(与主模型参数不共享),处理投影后的特征。
-
输出与共享机制
- 共享输出头:MTP模块复用主模型的Embedding层(词向量)和Output Head(预测层),避免增加额外参数。
- 多目标预测:每个MTP模块输出对应位置的logits(如第1个模块预测t+1,第2个预测t+2),训练时计算多个位置的交叉熵损失。
训练与推理的差异
-
训练阶段
- 联合优化:主模型和MTP模块同时更新参数,但MTP模块仅用于辅助训练(类似正则化器)。
- 损失计算:总损失 = 主模型的下一个token预测损失 + MTP模块的额外token预测损失(加权求和)。
-
推理阶段
- 关闭MTP:仅使用主模型预测下一个token,MTP模块不参与计算(无性能损失)。
- 投机采样加速(可选):
- 原理:利用MTP预测的额外token作为“草案”,通过主模型快速验证其正确性。
- 示例:若MTP预测t+1位置token准确率90%,主模型可直接接受该预测,跳过部分计算步骤,实现1.8倍加速。
实际效果(以DeepSeek-V3为例)
-
训练效率提升
- 收敛速度:引入MTP后,模型在相同训练步数下困惑度(Perplexity)降低5-8%。
- 长文本理解:在需要长程依赖的任务(如代码生成)中,生成质量提升显著。
-
推理加速机制
- 投机采样流程:
- MTP生成1个候选token(如"apple");
- 主模型并行验证该token是否符合上下文;
- 若验证通过(概率>85%),直接输出并跳过该步解码计算。
- 实测效果:在A100 GPU上,4096长度文本生成延迟从180ms降至100ms,加速比1.8x。
- 投机采样流程:
总结
MTP通过多目标预测和参数共享设计,在几乎不增加计算成本的条件下:
- 提升训练时的模型表征能力;
- 为推理提供高准确率的候选token,结合投机采样实现加速。
这一设计类似于“学生在练习时同时解答多道关联题目(训练),考试时快速验证已记住的答案(推理)”。
混合精度训练
[Technical Report] 详解原生支持DeepSeek-V3&R1 FP8的计算方案
DeepSeek-R1模型架构深度解读(七)弄懂FP8-Training
DeepSeek-V3引入8位浮点数(floating point 8-bit,FP8)混合精度训练框架,是重大创新。FP8混合精度训练用8 bit浮点数表示数据,相比传统32 bit(FP32)和16 bit(FP16)格式,占用空间更小、计算速度更快。混合精度策略用FP8实现大部分核心计算内核,如前向传播、激活反向传播和权重反向传播,输出结果用BF16或FP32格式,向量激活值以FP8格式存储用于反向传播。这种方法显著提升性能,理论上计算速度翻倍,大幅降低内存消耗。
DeepSeek通过创新的误差累积解决方案,将FP8混合精度训练的精度损失控制在0.25%以内,几乎不影响模型性能,首次在超大规模模型上验证其有效性,让DeepSeek-V3在降低GPU内存占用和计算开销的同时保持高性能,提高单位GPU小时计算利用率,降低整体训练成本。
混合精度训练概念易理解,但实际操作困难,要求设计团队全面精准把握大模型训练各环节计算精度。许多大模型未采用,而DeepSeek成功运用,实属不易。
通过直接编写和优化PTX代码来提升GPU计算效率
PTX(parallel thread execution)是英伟达CUDA架构的中间表示语言,介于高级GPU编程语言(如CUDAC/C++)和低级机器代码SASS之间。PTX提供了更接近底层的指令集架构,允许开发者进行细粒度的优化。
DeepSeek在训练DeepSeek-V3模型时,通过编写和优化PTX代码提高GPU计算效率,包括将132个流式多处理器(streaming multiprocessors,SMs)中的20个专用于服务器间通信,绕过通信带宽限制;优化寄存器分配和线程调度,减少数据搬运开销;对GPU进行深度适配等。这些优化带来了显著的性能提升,实现了比Meta高出10倍的GPU计算效率。通过直接控制寄存器和线程调度,充分发挥GPU潜力;通过针对特定硬件(如H800)的深度优化,获得极致性能。
然而,PTX更接近汇编语言,需要深厚的硬件知识和编程技能;可维护性差,代码难以阅读和维护,不利于团队协作和长期开发;可移植性低,针对特定硬件优化的PTX代码难以在不同GPU型号间迁移。因此,这种方法并未被广泛采用。
数据并行和模型并行
DeepSeek-V3的并行策略非常复杂和精细,包括3层并行策略:16路流水线并行、跨8个节点的64路专家并行以及ZeRO-1数据并行。此外,DeepSeek-V3还引入了创新的DualPipe流水线并行算法,显著减少了流水线停滞现象,并实现了计算与通信阶段的重叠。这种设计大大提高了GPU利用率,同时减少了通信开销。
在专家并行方面,DeepSeek-V3的模型由256个路由专家和1个共享专家组成,每个token会激活8个专家,并确保最多被发送到4个节点。这种多层次的并行策略不仅充分利用了硬件资源,还通过创新的算法设计大幅提高了训练效率,使DeepSeek-V3能在较短时间内完成大规模模型的训练。此外,模型在软硬件架构联合设计、内存和计算能力的合理调配以及负载均衡策略上也达到了极致。
通过这些技术的综合应用,DeepSeek在有限的GPU资源和较短的训练时间内,成功训练出了通用语言大模型DeepSeek-V3。
模型架构对推理系统的影响
-
MLA
-
- 减小KV cache,容纳更大的batchsize
- 加速attention计算
-
MTP
-
- 可以直接用于推测解码,加速1.8x
-
DeepSeekMoE
-
- 稀疏的设计容易造成计算资源浪费:每个expert需要足够的input,要求系统有超大batchsize
- 细粒度专家为负载均衡设计提出挑战
V3/R1训练架构的独特优势
V3/R1训练流程
SFT --> RL --> SFT --> RL迭代的流程。
PD阶段
在大语言模型(LLM)推理过程中,Prefill阶段和Decode阶段是核心的两个计算阶段,它们在任务目标、计算特性和资源需求上存在显著差异:
Prefill阶段(预填充阶段)
- 任务目标:处理用户输入的完整提示(prompt),生成所有输入token的Key-Value(KV)缓存,并输出第一个生成的token。例如,输入“中国的首都是哪里?”时,Prefill阶段会解析整个句子并生成回答的第一个token(如“北京”)。
- 计算特性:
- 计算密集型:需并行处理所有输入token的注意力计算,计算量随输入长度线性增长。
- 高GPU利用率:由于并行性强,GPU算力可被充分使用。
- 生成KV Cache:将中间结果(如自注意力机制的Key和Value矩阵)缓存,供后续Decode阶段复用。
- 资源消耗:虽然单次计算量大,但仅需运行一次,对显存带宽压力较小。
Decode阶段(解码阶段)
- 任务目标:基于Prefill阶段的KV Cache,以自回归方式逐个生成后续token,直至输出终止符。例如,生成“北京”后,继续生成“是中国的政治中心”等后续内容。
- 计算特性:
- 内存/IO密集型:每次仅处理最新生成的token,需频繁读取KV Cache和模型权重,显存带宽成为瓶颈。
- 低GPU利用率:单次计算量小,需通过增大批量(batch size)提升并行性。
- 迭代依赖:每个新token的生成依赖于前序结果,导致计算无法完全并行。
- 资源消耗:占推理总时间的90%以上,且输出成本通常是输入的3-4倍,主要因资源利用率低。
关键差异对比
维度 | Prefill阶段 | Decode阶段 |
---|---|---|
输入长度 | 长序列(用户完整prompt) | 单token(自回归生成) |
计算瓶颈 | 算力(GEMM操作) | 显存带宽(KV Cache访问) |
并行性 | 高(所有token并行计算) | 低(需批量处理提升利用率) |
缓存作用 | 生成KV Cache供后续使用 | 复用并更新KV Cache |
系统优化 | 拆分长序列(Chunk Prefill) | 动态批处理(Continuous Batching) |
技术优化方向
- PD分离部署:将Prefill和Decode阶段分配到不同硬件资源(如计算型GPU与高带宽GPU),避免资源竞争,提升吞吐量和时延稳定性。
- KV Cache压缩:通过量化、稀疏化等技术减少缓存占用,支持更大批量推理。
- Chunk Prefill:将长输入拆分为短块处理,与Decode阶段交错执行,优化资源利用率。
在自回归生成(如LLM的Decode阶段)中,每个新token的生成必须依赖前序结果,这主要与模型的自注意力机制和生成逻辑密切相关。以下是详细解释:
自注意力机制的限制
Transformer模型的核心是自注意力机制(Self-Attention),它需要所有已生成token的上下文信息来计算当前token的权重。具体来说:
- 预填充阶段(Prefill) :输入是完整且已知的(例如用户输入的提示词),所有token可以并行计算注意力。
- 解码阶段(Decode) :输出token是逐个生成的,每个新token的注意力计算需要:
- 前序所有token的Key-Value(KV)缓存:模型需要知道之前生成的所有token的Key和Value矩阵。
- 因果掩码(Causal Masking) :为了防止模型“偷看”未来信息,每个位置的token只能关注自身及之前的token(如下图所示)。
结论:自注意力机制要求每个新token的计算必须等待前序所有token生成并缓存,导致顺序依赖。
自回归生成的逻辑
大语言模型(LLM)的生成过程是 自回归(Autoregressive) 的,即:
- 单步生成:每次仅预测下一个token的概率分布,基于已生成的所有token。
- 条件概率链式分解:生成整个序列的概率可以分解为多个条件概率的乘积:
P ( 输出序列 ) = P ( Token 1 ) × P ( Token 2 ∣ Token 1 ) × . . . × P ( Token n ∣ Token 1 , . . . , Token n − 1 ) P(\text{输出序列}) = P(\text{Token}_1) \times P(\text{Token}_2 | \text{Token}_1) \times ... \times P(\text{Token}_n | \text{Token}_1, ..., \text{Token}_{n-1}) P(输出序列)=P(Token1)×P(Token2∣Token1)×...×P(Tokenn∣Token1,...,Tokenn−1)
- 实际生成流程:
- 输入Prompt → 生成第一个Token(Token₁)。
- 输入Prompt + Token₁ → 生成第二个Token(Token₂)。
- 输入Prompt + Token₁ + Token₂ → 生成第三个Token(Token₃),依此类推。
类比:这就像写文章时,每一句话都需要基于前文内容,无法跳过前面的段落直接写结尾。
KV缓存的动态更新
在Decode阶段,模型需要维护一个不断增长的KV缓存(存储历史token的Key和Value矩阵),具体过程如下:
- KV缓存的作用:避免重复计算历史token的注意力权重,加速生成。
- 更新规则:
- 生成Token₁时,缓存其Key₁和Value₁。
- 生成Token₂时,需要Key₁、Value₁和Token₂自身的Key₂、Value₂。
- 生成Tokenₙ时,需要Key₁Keyₙ和Value₁Valueₙ。
- 依赖关系:每个新token的Key和Value必须基于前序所有token的KV缓存计算。
示例:
假设输入是“中国的首都是哪里?”,输出生成过程如下:
- Prefill阶段:处理整个输入,生成KV缓存,输出第一个Token“北”。
- Decode阶段:
- 输入“北” → 生成“京”(需要KV缓存中的“北”)。
- 输入“北京” → 生成“是”(需要KV缓存中的“北”“京”)。
- 输入“北京是” → 生成“中国”(需要KV缓存中的“北”“京”“是”),依此类推。
为什么不能并行生成多个Token?
- 技术限制:
- 自注意力机制需要完整的上下文(已生成的所有Token)。
- 模型无法提前知道未来生成的Token是什么。
- 工程限制:
- 显存带宽瓶颈:频繁读写KV缓存导致内存访问成为瓶颈。
- 计算浪费:如果猜测多个可能的Token并行生成,最终可能因预测错误导致大量计算被丢弃。
例外情况:投机采样(Speculative Sampling)
近年来,一些优化技术(如投机采样)尝试突破顺序依赖的限制:
- 核心思想:用小模型(Draft Model)快速生成多个候选Token,再用大模型(LLM)并行验证这些候选。
- 流程:
- Draft Model生成候选序列(Token₁~Token₃)。
- LLM并行验证这些候选,接受正确的部分,拒绝错误的Token并重新生成。
- 效果:在保持生成质量的同时,提升吞吐量(例如DeepMind的《加速大模型推理:投机采样的理论与实践》)。
总结
- 根本原因:自注意力机制需要历史Token的完整上下文,且生成逻辑是链式条件概率。
- 依赖表现:每个新Token的生成必须等待前序所有Token的KV缓存更新。
- 优化方向:通过投机采样等技术部分打破依赖,但核心逻辑仍无法完全并行化。
- Prefill阶段通过高效并行计算初始化上下文,而Decode阶段以内存受限的方式逐步生成内容。两者的差异直接影响系统设计,需结合计算优化(如算子定制)和调度策略(如动态批处理)实现高效推理。
DeepSeek推理系统具体配置
硬件配置与互联技术
-
计算集群架构:
- 使用NVIDIA H800 GPU,每节点8卡,节点内通过NVLink互联(单向带宽160GB/s,理论值200GB/s),节点间通过 InfiniBand(IB) 互联(单向带宽50GB/s)。
- NVLink实测带宽约为理论值的80%,而IB带宽存在实际性能损耗,无法达到理论峰值。
-
NVLink与IB的带宽差异:
- NVLink带宽是IB的3.2倍(160GB/s vs 50GB/s),这一差距直接影响通信策略设计。例如,通过限制每个Token最多分发到4个节点,可减少IB流量。
-
通信优化策略:
- Token路由时,优先通过IB传输到目标节点的对应GPU,再通过NVLink转发至最终GPU,实现IB与NVLink通信的重叠。
- 采用确定性路由策略和warp specialization技术,确保高效转发。
并行策略设计
-
PD分离(Prefill/Decode阶段分离):
-
Prefill阶段(生成初始隐藏状态):
-
最小部署单元为32卡(4节点)。
-
Attention部分:4-way张量并行(TP)与8-way数据并行(DP)结合。TP=4可减少通信开销,因H800的NVLink带宽受限。
-
MoE部分:32-way专家并行(EP),每卡部署8个专家。
-
-
Decode阶段(逐Token生成):
-
最小部署单元为320卡(40节点),规模极大。
-
Attention部分:4-way TP与80-way DP结合,DP=80最大化全局批次大小,提升专家处理的Token数量。
-
MoE部分:320-way EP,每卡仅部署1个专家,实现极细粒度并行。
-
-
-
序列并行(SP)的具体实现:
- Megatron序列并行:沿序列维度切分LayerNorm和加法操作,与TP结合不增加通信量,但推理阶段收益有限。
- Megatron上下文并行:对Attention中的KV进行切分,采用Ring Attention,尽管增加通信复杂度,但可避免KV缓存复制。
- 在Decode阶段(seqlen=1),只能使用上下文并行。
关键技术推导
-
矩阵吸收技巧的应用:
- 通过TP与上下文并行的组合(TP沿Head维度切分,SP沿序列维度切分),避免了KV缓存的冗余存储。
- 结合证据推测,DeepSeek-v3在Prefill阶段仍使用该技巧优化计算效率。
-
通信与计算的平衡:
- 通过路由策略限制每个Token的节点分发数(如4个节点),匹配IB与NVLink的带宽差异(3.2倍),确保通信时间重叠。
- 仅需20个流多处理器(SM)即可充分利用IB和NVLink带宽。
总结
该推理系统通过以下设计实现高效推理:
- 硬件层面:利用NVLink高带宽特性(节点内)与IB扩展性(节点间)的组合。
- 并行策略:针对Prefill/Decode阶段特点,分别设计TP/DP/EP策略,最大化计算资源利用率。
- 通信优化:通过路由策略、矩阵吸收技巧和确定性通信路径,减少跨节点通信开销。
- 软件创新:结合Megatron的序列并行与上下文并行,平衡内存占用与通信复杂度。
更多推荐
所有评论(0)