模型基本信息
-
模型类型:DeepSeek - V3是一种专家混合(MoE)语言模型。MoE模型是将多个专家模型组合在一起,根据输入数据的特点动态地选择和组合不同专家的输出,以提高模型的性能和泛化能力。
-
参数规模:总共有6710亿参数,每个token激活370亿参数。参数数量是衡量语言模型规模和表示能力的一个重要指标,更多的参数通常意味着模型能够学习到更复杂的语言模式和语义信息。
技术架构与创新
-
采用的架构
-
多头潜在注意力(MLA):能让模型同时关注输入的多个方面,从而提高推理效率。通过对输入文本的不同部分进行并行处理和分析,捕捉更丰富的语义信息和上下文关系,使模型在理解和生成文本时更加准确和灵活。
-
DeepSeekMoE架构:采用MoE方法来优化训练成本和性能。利用多个专家模块处理不同类型的任务或数据模式,在训练过程中根据输入的特点自动分配任务到合适的专家,既提高了模型的能力,又能在一定程度上降低计算成本。
-
-
创新策略
-
无辅助损失的负载平衡策略:传统的负载平衡方法可能会使用辅助损失函数来确保各个专家模块的负载均衡,但DeepSeek - V3开创了一种无需辅助损失的策略。这种策略可以均匀地分配计算负载,避免了辅助损失对模型性能可能产生的负面影响,使模型训练更加稳定,并且在推理阶段能够更准确地生成结果。
-
多token预测训练目标:与传统的每次只预测一个token的方式不同,DeepSeek - V3设置了多token预测训练目标,模型可以同时预测多个token。这样能增加训练信号的密度,让模型更好地理解上下文之间的长期依赖关系,从而生成更流畅、更合理的文本,还可用于推测性解码以加速推理。
-
训练过程
-
预训练:在14.8万亿个多样的高质量token上进行预训练。预训练是语言模型学习语言基础知识和通用模式的重要阶段,通过对大量文本数据的学习,模型能够掌握语言的语法、语义、逻辑等方面的知识,为后续的微调等任务奠定基础。
-
后续阶段:预训练之后,还进行了监督微调(Supervised Fine - Tuning)和强化学习阶段。监督微调可以让模型在特定任务或领域上进一步优化性能,强化学习则有助于模型更好地与人类偏好对齐,提高模型在实际应用中的表现,增强其泛化能力,使其能够更好地处理未见过的数据和任务。
-
训练成本与效率:DeepSeek - V3仅需278.8万H800 GPU小时就能完成完整训练,相比其他大规模语言模型,其训练成本大幅降低。同时,它采用了FP8混合精度训练框架,首次在超大规模模型上验证了FP8训练的可行性和有效性,通过优化算法、框架和硬件的协同设计,克服了跨节点MoE训练中的通信瓶颈,几乎实现了计算和通信的完全重叠,显著提高了训练效率。
性能表现
综合评估显示,DeepSeek - V3在多项基准测试中表现出色,超过了其他开源模型,并且取得了与领先的闭源模型相当的性能。例如在MATH500(EM)测试中准确率高达90.2%,在Codeforces(Percentile)测试中准确率为51.6%,在多语言编程测试排行榜中,已超越Anthropic的Claude 3.5 Sonnet大模型,仅次于OpenAI GPT - 4,在数学能力方面超过了所有开源闭源模型。
模型可用性
模型检查点可在https://github.com/deepseek - ai/DeepSeek - V3获取,方便研究人员和开发者下载和使用,推动相关研究和应用的发展。
1 Introduction
近年来,大语言模型(LLMs)发展迅速,其性能与通用人工智能(AGI)的差距逐渐缩小。这一进步主要得益于闭源模型(如Anthropic、Google、OpenAI等)和开源模型(如DeepSeek、LLaMA、Qwen、Mistral等)的快速发展。这些模型通过不断迭代和优化,逐渐缩小了开源与闭源模型之间的性能差距。
为了进一步提升开源模型的能力,DeepSeek团队推出了DeepSeek-V3,这是一个拥有6710亿参数的混合专家(MoE)模型,每个token激活370亿参数。该模型的目标是通过大规模参数化和高效的训练策略,实现强大的性能和经济的成本。
1.1 DeepSeek-V3的核心创新与设计
架构设计
DeepSeek-V3的架构设计基于以下两个核心组件:
-
多头潜在注意力(MLA):MLA是一种高效的注意力机制,已在DeepSeek-V2中验证,能够显著提升模型的推理效率。
-
DeepSeekMoE架构:这种架构通过优化MoE(混合专家)模型的训练过程,实现了经济高效的训练。MoE模型通过在每个token上激活部分参数,减少了计算负担,同时保持了大规模参数模型的强大性能。
此外,DeepSeek-V3还引入了两项创新策略:
-
无辅助损失的负载均衡策略:在MoE模型中,负载均衡是一个关键问题。传统的负载均衡方法可能会引入额外的辅助损失,从而影响模型性能。DeepSeek-V3通过一种创新的无辅助损失策略,有效减少了负载均衡对性能的负面影响。
-
多token预测训练目标:这种训练目标不仅提升了模型在基准测试中的性能,还可以用于推理加速,进一步优化模型效率。
高效训练策略
为了实现高效训练,DeepSeek-V3采用了以下策略:
-
FP8混合精度训练:FP8是一种低精度数据格式,能够在减少内存占用的同时加速计算。DeepSeek-V3首次在超大规模模型中验证了FP8训练的可行性和有效性,通过支持FP8计算和存储,显著降低了GPU内存使用量。
-
优化训练框架:DeepSeek-V3引入了DualPipe算法,通过减少流水线气泡和实现计算与通信的重叠,进一步提升了训练效率。此外,团队还开发了高效的跨节点通信内核,充分利用了InfiniBand和NVLink的带宽。
-
内存优化:通过精心设计,DeepSeek-V3能够在不使用昂贵的张量并行的情况下进行训练,进一步降低了硬件成本。
预训练与后训练
-
预训练:
-
DeepSeek-V3在14.8万亿个高质量、多样化的token上进行了预训练。预训练过程非常稳定,没有出现不可恢复的损失峰值,也无需回滚。
-
预训练阶段的最大上下文长度从32K扩展到128K,进一步提升了模型对长文本的处理能力。
-
预训练的经济成本极低,仅需266.4万H800 GPU小时,显著低于其他类似规模的模型。
-
-
后训练:
-
包括监督微调(SFT)和强化学习(RL)阶段,进一步优化模型性能,使其与人类偏好保持一致。
-
从DeepSeek-R1系列模型中提炼推理能力,通过知识蒸馏将长思维链(CoT)模型的推理能力融入DeepSeek-V3,显著提升了其推理性能。
-
1.2 性能评估
DeepSeek-V3在多个基准测试中表现出色,尤其是在代码和数学任务上:
-
知识类任务:
-
在MMLU、MMLU-Pro和GPQA等教育基准测试中,DeepSeek-V3超越了所有其他开源模型,性能与GPT-4o和Claude-Sonnet-3.5等闭源模型相当。
-
在事实性基准测试中,DeepSeek-V3在SimpleQA和Chinese SimpleQA上表现出色,尤其在中文事实知识方面超越了其他模型。
-
-
代码、数学与推理任务:
-
在数学相关基准测试中,DeepSeek-V3取得了最先进的性能,甚至在某些任务上超越了闭源模型。
-
在编码竞赛基准测试(如LiveCodeBench)中,DeepSeek-V3表现最佳,巩固了其在代码生成领域的领先地位。
-
1.3 训练成本总结
DeepSeek-V3的训练成本非常经济:
-
预训练阶段:266.4万H800 GPU小时。
-
上下文长度扩展:11.9万H800 GPU小时。
-
后训练阶段:0.5万H800 GPU小时。
-
总训练成本:278.8万H800 GPU小时,折合557.6万美元(假设每GPU小时2美元)。
这一成本显著低于其他类似规模的模型,体现了DeepSeek-V3在训练效率上的巨大优势。
1.4 未来方向与局限性
尽管DeepSeek-V3取得了显著进展,但仍存在一些局限性:
-
训练稳定性:尽管训练过程非常稳定,但在更大规模的模型训练中,仍需进一步优化以应对潜在的挑战。
-
推理效率:虽然多token预测训练目标有助于推理加速,但在实际应用中,推理效率仍需进一步提升。
-
模型性能:尽管DeepSeek-V3在多个任务上表现出色,但在某些任务上仍落后于闭源模型,未来需要进一步优化模型架构和训练策略。
DeepSeek-V3通过创新的架构设计、高效的训练策略和经济的成本控制,显著提升了开源大语言模型的性能。其在多个基准测试中的表现证明了其强大的能力,尤其是在代码和数学任务上。未来,DeepSeek团队将继续优化模型,进一步缩小与闭源模型的差距,并探索更多应用场景。
2 Architecture
我们首先介绍DeepSeek - V3的基本架构,其特点是采用了多头潜在注意力(MLA)(DeepSeek - AI,2024c)以实现高效推理,以及采用了DeepSeekMoE(Dai等人,2024)以实现经济高效的训练。然后,我们提出了多标记预测(MTP)训练目标,我们发现该目标能提高模型在评估基准上的整体性能。对于其他未明确提及的细节,DeepSeek - V3遵循DeepSeek - V2的设置(DeepSeek - AI,2024c)。
2.1 Basic Architecture 基础架构
-
模型基础框架:DeepSeek-V3的基本架构仍然基于Transformer(Vaswani等人在2017年提出)框架。Transformer框架是当前许多先进语言模型的基础架构,为DeepSeek-V3提供了一个通用的、强大的架构基础,使其能够处理自然语言等序列数据。
-
采用的技术架构
-
MLA和DeepSeekMoE:为了实现高效推理和经济的训练,DeepSeek-V3采用了多头潜在注意力(MLA)和DeepSeekMoE架构,这些架构在DeepSeek-V2中已经得到了充分验证,证明其能够在保证模型性能的同时,实现高效的训练和推理。
-
无辅助损失的负载均衡策略:与DeepSeek-V2相比,DeepSeek-V3引入了无辅助损失的负载均衡策略,这是为了减轻在确保DeepSeekMoE负载均衡时对模型性能产生的负面影响,让模型在训练过程中各个部分的负载更加均衡,提高训练的稳定性和效率,避免因负载不均衡导致的性能下降。
-
-
架构图示:图2展示了DeepSeek-V3的基本架构,后续会在相应部分简要回顾MLA和DeepSeekMoE的细节,帮助读者进一步理解模型的具体构造和工作原理。
Multi-Head Latent Attention
DeepSeek - V3模型中多头潜在注意力(MLA)架构的具体实现,包括键值对(KV)和查询(Q)的处理过程,以及最终注意力输出的计算方式。下面将逐步解释其中的各个部分:
1 符号定义
-
d:嵌入维度,即每个词元(token)被转换为向量后的维度大小。
-
n_h:注意力头的数量。多头注意力机制允许模型在不同的表示子空间中并行地关注输入序列的不同部分。
-
d_h:每个注意力头的维度。
-
h_t ∈ R^d:在给定注意力层中,第t个词元的注意力输入。
2 键值(KV)的低秩联合压缩
MLA的核心思想之一是对注意力的键(keys)和值(values)进行低秩联合压缩,以减少推理过程中的键值(KV)缓存。具体步骤如下:
在生成过程中,仅需缓存c_{KV}^t和k_R^t,这大大减少了KV缓存的大小,同时保持了与标准多头注意力(MHA)相当的性能。
3 查询(Q)的低秩压缩
为了减少训练过程中的激活内存,对注意力查询也进行了低秩压缩,具体步骤如下:
4. 最终注意力输出的计算
综上所述,DeepSeek - V3的MLA架构通过对键值和查询进行低秩压缩,在减少计算和存储开销的同时,保持了较好的性能,提高了模型的推理效率和训练效率。
DeepSeekMoE with Auxiliary-Loss-Free Load Balancing-无辅助损失负载均衡策略
1. DeepSeekMoE的基本架构
-
与传统MoE对比:相比传统MoE架构如GShard,DeepSeekMoE采用更细粒度的专家网络,还将部分专家网络设为共享专家网络,这有助于模型更灵活地处理不同输入,提高计算效率和模型性能。
2. 无辅助损失的负载均衡
-
传统方法问题:传统MoE模型中,专家网络负载不均衡会导致路由崩溃和计算效率降低,通常依赖辅助损失解决,但过大的辅助损失会损害模型性能。
-
创新策略
-
引入偏置项:为每个专家网络引入偏置项b_i,添加到亲和度得分s_{i,t}上确定Top - K路由。偏置项仅用于路由,门控值仍由原始亲和度得分计算。
-
动态调整:训练中监控专家网络负载,若专家网络过载则减少偏置项,若负载不足则增加偏置项,γ是偏置更新速度超参数。通过动态调整,模型能在训练中保持专家网络负载均衡,提升性能。
-
无辅助损失的负载均衡策略的核心概念
无辅助损失的负载均衡策略是一种用于解决深度学习中混合专家系统(MoE)负载不均衡问题的方法。它不依赖额外的辅助损失函数来实现负载均衡,而是通过直接调整专家接收输入的概率来平衡各个专家的负载。
核心机制:
-
动态调整接收概率:
-
系统会根据每个专家的历史利用率情况,动态地调整其接收新任务的概率。对于利用率过高的专家,降低其接收新任务的概率,使得其他相对空闲的专家有更多机会接收任务;而对于利用率较低的专家,则提高其接收新任务的概率。
-
-
无需辅助损失函数:
-
传统方法可能会引入额外的辅助损失函数来惩罚负载不均衡的情况,但无辅助损失的负载均衡策略摒弃了这种方式,直接基于专家的实际负载情况进行概率调整,避免了因引入辅助损失函数可能带来的模型训练复杂性增加和潜在的收敛问题。
-
-
动态偏置调整:
-
在训练过程中,系统会监控每个专家的负载情况,包括处理的输入数据量、计算资源的占用情况等。基于这些实时数据,系统动态调整偏置项,确保负载分布的动态平衡。如果某个专家的负载过高,系统会自动降低其偏置项,从而减少该专家的激活频率;反之,如果某个专家的负载过低,系统则会增加其偏置项,使其更容易被激活。
-
举例说明
假设一个MoE模型中有4个专家,分别为专家A、专家B、专家C和专家D,它们负责处理不同类型的自然语言理解任务,例如情感分析、实体识别、语义角色标注和文本分类。
场景: 在训练的初始阶段,由于数据分布的原因,专家A和专家B的负载较高,而专家C和专家D的负载较低。具体如下:
-
专家A:处理情感分析任务,负载较高。
-
专家B:处理实体识别任务,负载较高。
-
专家C:处理语义角色标注任务,负载较低。
-
专家D:处理文本分类任务,负载较低。
动态调整过程:
-
监控负载:
-
系统监控每个专家的负载情况,发现专家A和专家B的负载过高,而专家C和专家D的负载较低。
-
-
调整偏置项:
-
系统降低专家A和专家B的偏置项,减少它们接收新任务的概率;同时提高专家C和专家D的偏置项,增加它们接收新任务的概率。
-
-
重新分配任务:
-
在后续的任务分配中,系统根据调整后的偏置项重新分配任务。例如,原本分配给专家A的任务现在可能被分配给专家C或专家D,从而实现负载的均衡。
-
优势
-
性能提升:
-
无辅助损失的负载均衡策略避免了传统辅助损失函数可能带来的干扰梯度,从而减少了模型性能的下降,并提升了模型的性能上限。
-
-
负载均衡:
-
通过动态调整偏置项,系统能够确保每个专家的负载分布更加均匀,避免了部分专家过载或空闲的情况。
-
-
简化训练过程:
-
摒弃辅助损失函数,减少了模型训练的复杂性,避免了潜在的收敛问题。
-
应用场景
无辅助损失的负载均衡策略广泛应用于大规模预训练和推理任务中,特别是在DeepSeek-V3模型中表现突出。例如:
-
大规模预训练:在14.8T标记的预训练任务中,DeepSeek-V3仅需2.664M H800 GPU小时即可完成训练,显著降低了计算成本。
-
推理阶段:通过动态调整负载分配,提升了推理速度和效率。
无辅助损失的负载均衡策略通过动态调整专家的偏置项,实现了负载的动态平衡,同时避免了传统辅助损失函数可能带来的问题。这种方法在提升模型性能和简化训练过程方面表现出色,特别适用于大规模预训练和推理任务。
3. 互补的序列级辅助损失
-
目的:尽管无辅助损失策略可实现整体负载均衡,但为防止单个序列内极端不均衡,引入序列级平衡损失。
互补的序列级辅助损失的核心概念
互补的序列级辅助损失是一种用于优化混合专家(MoE)模型中负载均衡的策略。它主要解决的问题是:尽管全局负载均衡可以通过无辅助损失策略实现,但在单个序列内部,仍可能出现极端不平衡的情况。这种不平衡可能导致某些专家在特定序列中被过度使用,而其他专家则几乎不被使用。
核心机制:
-
序列级负载均衡:
-
互补的序列级辅助损失通过在单个序列的粒度上引入一个额外的损失函数,鼓励每个序列中的专家负载保持平衡。
-
这种损失函数的目的是在单个序列内均匀分配token到各个专家,避免某些专家被过度使用。
-
-
平衡因子(𝛼):
-
平衡因子是一个超参数,用于控制序列级辅助损失的权重。在DeepSeek-V3中,这个值通常被设置为极小,以确保其对模型整体性能的影响最小化。
-
-
损失函数的形式:
-
该损失函数通常基于每个专家在整个序列中的平均概率和实际被选择的次数来计算。
-
优势
-
细粒度的负载均衡:
-
互补的序列级辅助损失能够有效防止单个序列内的极端不平衡,确保每个序列中的专家负载更加均匀。
-
-
对模型性能的影响最小化:
-
通过将平衡因子设置为极小值,该损失函数对模型整体性能的影响被最小化。
-
-
提升模型稳定性:
-
在训练过程中,这种细粒度的负载均衡策略有助于提升模型的稳定性和收敛速度。
-
互补的序列级辅助损失是一种用于优化MoE模型负载均衡的策略,特别适用于防止单个序列内的极端不平衡。通过引入一个细粒度的损失函数,该策略能够在不显著影响模型性能的情况下,实现更均匀的负载分配。
4. 节点受限路由
-
机制:为限制训练通信成本,采用受限路由机制,确保每个词元最多被发送到M个节点,节点根据分布在其上的专家网络的前K_r / M个最高亲和度得分之和选择。
-
效果:在该约束下,MoE训练框架可实现计算与通信的高度重叠,提高训练效率。
5. 无词元丢弃
-
训练阶段:有效的负载均衡策略使DeepSeek - V3在训练中保持良好负载均衡,无需丢弃词元,可充分利用训练数据,提升模型性能。
-
推理阶段:实施特定部署策略确保推理时负载均衡,推理过程中也不丢弃词元,保证推理结果的完整性和准确性。
2.2 Multi-Token Prediction
1. MTP的设计灵感与目标
-
灵感来源:受Gloeckle等人(2024)的启发,为DeepSeek - V3设定MTP目标,将每个位置的预测范围扩展到多个未来词元。
-
目标优势:一是使训练信号更密集,提高数据利用效率;二是帮助模型提前规划表示,提升对未来词元的预测能力。
-
实现差异:与Gloeckle等人不同,他们采用独立输出头并行预测D个额外词元,而本文通过顺序预测额外词元,并在每个预测深度维持完整的因果链。
2. MTP模块
3. MTP训练目标
4. MTP在推理中的应用
-
常规推理:MTP策略主要是为了提升主模型性能,在推理时可以直接丢弃MTP模块,主模型能够独立正常地进行推理,这保证了推理过程的简洁性和高效性,避免了额外模块带来的计算负担。
-
优化推理:也可以将MTP模块重新用于推测解码,通过利用MTP模块提前预测多个未来词元,减少实际生成过程中的计算步骤,从而进一步降低生成延迟,提高模型在生成任务中的响应速度。
3 Infrastructures
3.1 Compute Clusters
DeepSeek - V3在一个配备2048块NVIDIA H800 GPU的集群上进行训练。H800集群中的每个节点包含8块GPU,这些GPU在节点内部通过NVLink和NVSwitch相连。而在不同节点之间,则利用InfiniBand(IB)互连技术来实现通信。
3.2 Training Framework
DeepSeek - V3 的训练由 HAI - LLM 框架支持,这是一个由我们的工程师全新打造的高效轻量级训练框架。总体而言,DeepSeek - V3 采用了 16 路管道并行(PP)(齐等人,2023a)、跨 8 个节点的 64 路专家并行(EP)(列皮欣等人,2021)以及 ZeRO - 1 数据并行(DP)(拉杰班达里等人,2020)。
为了促进 DeepSeek - V3 的高效训练,我们实施了精细的工程优化。首先,我们设计了用于高效管道并行的 DualPipe 算法。与现有的管道并行方法相比,它使正向和反向过程中的计算和通信阶段重叠,从而解决了跨节点专家并行带来的通信开销大的问题。其次,我们开发了高效的跨节点全连接通信内核,以充分利用 InfiniBand(IB)和 NVLink 的带宽,并节省用于通信的流式多处理器(SM)。最后,我们对训练过程中的内存占用进行了精细优化,从而使我们能够在不使用成本高昂的张量并行(TP)的情况下训练 DeepSeek - V3。
DualPipe and Computation-Communication Overlap
在 DeepSeek-V3 的训练中,使用了跨节点的专家并行(cross-node expert parallelism)。这种并行方式允许模型在多个计算节点上分布专家模块(Experts),从而实现大规模的模型训练。然而,这种并行方式也带来了通信开销的问题:
-
通信开销:在跨节点并行中,不同节点之间的专家模块需要频繁通信(如全对全通信,all-to-all communication),这导致了显著的通信开销。
-
低效的计算与通信比:通信开销使得计算与通信的效率比大约为 1:1,这意味着模型花费大量时间在通信上,而计算时间被浪费,效率低下。
为了解决这一问题,DeepSeek-V3 引入了一种创新的流水线并行算法——DualPipe。
DualPipe 算法的核心思想
DualPipe 的目标是通过优化流水线并行(pipeline parallelism)来减少通信开销,并提高计算与通信的重叠效率。其关键思想包括:
-
重叠计算与通信:
-
在传统的流水线并行中,计算和通信是分开的,这导致了流水线气泡(pipeline bubbles),即计算资源在某些时刻被闲置。
-
DualPipe 的核心是将计算和通信重叠,使得通信操作可以在计算过程中“隐藏”(即同时进行),从而减少闲置时间。
-
-
块(Chunk)的划分:
-
每个前向(forward)和反向(backward)传播的块被划分为四个主要部分:
-
注意力机制(Attention):用于处理输入序列的自注意力模块。
-
全对全分发(All-to-All Dispatch):将数据分发到不同的专家模块。
-
MLP(多层感知器):用于进一步处理数据的前馈网络。
-
全对全合并(All-to-All Combine):将不同专家模块的输出合并。
-
在反向传播中,注意力机制和 MLP 进一步拆分为两部分:输入的反向和权重的反向。这种拆分方式类似于 ZeroBubble(一种优化方法)。
-
-
流水线并行通信(PP Communication):
-
DualPipe 还引入了一个流水线并行通信组件,用于在不同节点之间同步数据。
-
DualPipe 的优化策略
-
双向流水线调度(Bidirectional Pipeline Scheduling):
-
DualPipe 采用双向流水线调度,即从流水线的两端同时输入微批次(micro-batches)。这种双向调度方式使得大部分通信操作可以完全隐藏在计算过程中,从而减少流水线气泡。
-
-
动态调整 GPU 资源分配:
-
DualPipe 通过手动调整 GPU 流处理器(SMs)分配给通信和计算的比例,确保通信和计算的高效重叠。这种动态调整使得在执行过程中,全对全通信和流水线并行通信可以完全隐藏。
-
-
扩展性优势:
-
随着模型规模的进一步扩大,只要保持恒定的计算与通信比,DualPipe 仍然可以使用细粒度的专家模块,同时实现近乎零的全对全通信开销。这意味着即使模型规模增加,通信开销也不会显著增加。
-
与现有方法的对比
-
减少流水线气泡:
-
DualPipe 显著减少了流水线气泡,相比其他方法(如 ZB1P 和 1F1B)表现出更高的效率。
-
虽然 DualPipe 需要保留两份模型参数,但由于训练时使用了较大的专家并行规模,这并不会显著增加内存消耗。
-
-
灵活性:
-
DualPipe 只要求流水线阶段和微批次能被 2 整除,而不要求微批次能被流水线阶段整除。这使得 DualPipe 在实际应用中更加灵活。
-
随着微批次数量的增加,DualPipe 的气泡和激活内存都不会增加,这进一步提升了其扩展性。
-
DualPipe 是一种创新的流水线并行算法,专门针对 DeepSeek-V3 的大规模分布式训练设计。它通过重叠计算与通信、优化流水线调度和动态调整资源分配,显著减少了通信开销,提高了训练效率。与现有方法相比,DualPipe 不仅减少了流水线气泡,还保持了较低的内存消耗和较高的灵活性,使其在大规模模型训练中表现出色。
Efficient Implementation of Cross-Node All-to-All Communication
1 通信内核的定制化
为了确保 DualPipe 的高效运行,DeepSeek-V3 团队定制了跨节点的全对全(all-to-all)通信内核。这些内核的作用是高效地分发和合并数据,同时减少用于通信的 GPU 流处理器(SM)数量。具体优化包括:
协同设计
-
与 MoE 门控算法协同设计:通信内核与混合专家(MoE)模型的门控算法进行了协同优化。门控算法负责决定每个输入数据(token)应该被发送到哪些专家模块,而通信内核则负责高效地将数据传输到目标节点。
-
与网络拓扑协同设计:通信内核还针对集群的网络拓扑进行了优化,充分利用了不同网络技术(如 InfiniBand 和 NVLink)的特点。
网络拓扑优化
-
跨节点通信(IB):集群中的 GPU 节点通过 InfiniBand(IB)网络互联。IB 提供了 50 GB/s 的带宽。
-
节点内通信(NVLink):节点内的 GPU 之间通过 NVLink 通信,其带宽高达 160 GB/s,大约是 IB 的 3.2 倍。
-
优化策略:为了充分利用这两种网络的带宽,DeepSeek-V3 限制每个 token 最多只能被分发到 4 个节点上,从而减少 IB 的流量压力。
2 通信流程的优化
DeepSeek-V3 通过以下步骤优化了 token 的分发和合并过程:
分发过程
-
IB 发送:每个 token 首先通过 IB 网络发送到目标节点上具有相同节点内索引的 GPU。
-
IB 到 NVLink 转发:到达目标节点后,token 通过 NVLink 转发到托管目标专家模块的特定 GPU。
-
NVLink 接收:目标 GPU 接收 token 并处理。
合并过程
-
NVLink 发送:处理后的 token 通过 NVLink 发送回目标节点的 GPU。
-
NVLink 到 IB 转发和累加:token 通过 NVLink 转发到 IB 网络,并进行累加操作。
-
IB 接收和累加:最终结果通过 IB 网络接收并完成累加。
3 动态调整与资源利用
为了进一步优化通信效率,DeepSeek-V3 采用了以下技术:
Warp Specialization(Warp 专业化)
-
Warp:GPU 中的一个 warp 是一组同时执行相同指令的线程集合。
-
Warp Specialization:通过将 20 个 SM 划分为 10 个通信通道,每个通道专门处理特定的通信任务(如 IB 发送、NVLink 转发等)。
-
动态调整:根据实际工作负载,动态调整分配给每个通信任务的 warp 数量,以确保资源的高效利用。
PTX 指令与通信块大小优化
-
PTX 指令:使用定制的 PTX(Parallel Thread Execution)指令来优化通信内核的执行效率。
-
通信块大小优化:通过自动调整通信块的大小,减少对 L2 缓存的使用,从而降低对其他计算任务的干扰。
4 性能优势
通过上述优化,DeepSeek-V3 实现了以下性能优势:
-
高效利用带宽:仅需 20 个 SM 即可充分利用 IB 和 NVLink 的带宽。
-
减少通信开销:通过限制 token 的分发范围和优化通信流程,显著减少了通信开销。
-
扩展性:尽管实际使用了 8 个专家模块,但该策略可以扩展到最多 13 个专家模块(4 个节点 × 每个节点 3.2 个专家),而不会增加额外的通信成本。
Extremely Memory Saving with Minimal Overhead
DeepSeek-V3 在训练过程中为了减少内存占用而采用的三种技术。这些技术通过优化计算和存储策略,显著提高了内存效率,使得大规模模型训练更加可行。以下是对这些技术的详细解释:
1 RMSNorm 和 MLA 上投影的重新计算
在深度学习中,模型的前向传播(forward pass)会计算各种操作(如归一化、线性变换等)的输出,并将这些输出(激活值)存储起来。在反向传播(backward pass)时,这些存储的激活值会被用来计算梯度。然而,存储这些激活值会占用大量显存,尤其是在大规模模型中。
技术细节
-
RMSNorm(Root Mean Square Layer Normalization):一种归一化技术,用于稳定训练过程。
-
MLA 上投影(MLA Up-Projection):与多头潜在注意力(MLA)相关的操作,用于将输入数据映射到更高维度。
为了减少内存占用,DeepSeek-V3 选择在反向传播时重新计算这些操作的输出ÿ