← 返回 2026-02-13

使用分布式GPU预训练大语言模型:一种内存高效的去中心化范式 Pretraining A Large Language Model using Distributed GPUs: A Memory-Efficient Decentralized Paradigm

Jinrui Zhang, Chaodong Xiao, Aoqi Wu, Xindong Zhang, Lei Zhang 📅 2026-02-12 👍 6 2026-07-13 08:35
MoE 内存优化 分布式预训练 去中心化训练 混合专家模型

SPES框架将MoE专家分散到不同节点训练,大幅降低LLM预训练的内存和通信开销

前置知识

Mixture-of-Experts (MoE)

混合专家模型是一种条件计算架构,由多个专家子网络(通常为前馈网络FFN)和一个门控路由器组成。对于每个输入token,路由器通过softmax函数计算门控分数,选择Top-K个专家进行处理,最终输出为被选中专家的加权和。这种设计使得模型总参数量可以很大(如7B或9B),但每个token只激活其中一小部分参数(如1.6B),从而在不等比增加计算量的前提下扩展模型容量。本文中使用的drop-less MoE设计确保所有专家都有机会被激活,最大化专家利用率。

SPES的核心思想是将MoE的各个专家分配到不同节点独立训练,理解MoE的专家路由和参数结构是理解本文方法的前提

联邦学习与FedAvg

联邦学习是一种分布式机器学习范式,允许多个客户端在不共享本地数据的情况下协作训练全局模型。FedAvg(Federated Averaging)是最经典的联邦优化算法,每个客户端在本地数据上执行多步SGD更新,然后将模型参数的变化量(delta)发送到中心服务器进行平均聚合。聚合公式为 $\theta^{(t)} = \text{OuterOpt}(\theta^{(t-1)}, \frac{1}{N}\sum_{i=1}^{N}(\theta_i^{(t)} - \theta^{(t-1)}))$,当外层优化器为SGD时即为标准FedAvg。这种方法大幅减少了通信轮次,但每个节点仍需维护完整模型的优化器状态和梯度。

SPES继承了FedAvg的聚合框架,但通过只同步部分专家参数进一步降低了通信和内存开销,理解FedAvg有助于理解SPES的设计选择

去中心化训练(Decentralized Training)

去中心化训练是指多个独立的计算节点通过互联网等低带宽网络连接,协作训练大模型的范式。与传统的集中式训练(使用RDMA高速互联的GPU集群)不同,去中心化训练中各节点独立进行本地更新,周期性地与对等节点同步参数。代表工作包括DiLoCo和Photon,它们通过FedAvg式聚合将通信需求降低了数个数量级。然而,这些方法仍然要求每个节点训练完整模型,导致内存开销与集中式训练相当。

本文正是在去中心化训练的基础上,进一步解决了每个节点必须训练完整模型带来的内存瓶颈问题

任务算术(Task Arithmetic)

任务算术是一种通过简单的向量运算来合并或编辑模型参数的技术。基本思想是将不同模型的参数变化视为向量,通过加法、减法等操作实现知识的组合。在本文的专家合并策略中,使用加权平均的方式将相似专家的参数进行合并:$\tilde{\phi}_j^{(t)} = \phi_j^{(t)} + \frac{\alpha}{K} \sum_{k \in Q_j} (\phi_k^{(t)} - \phi_j^{(t)})$,其中 $Q_j$ 是与专家 $j$ 最相似的 $K$ 个专家集合,$\alpha$ 控制合并强度。这种技术使得每个专家可以从其他节点的相似专家那里获得知识,改善稀疏训练中的token利用率问题。

专家合并warm-up是本文的关键创新之一,使用任务算术来实现跨节点的专家知识共享

研究动机

预训练大语言模型通常需要由数千张高显存GPU(如H100/A100)组成的集中式集群,并配备高速互联设备(如RDMA)。例如LLaMA3-405B使用多达16,000张H100 GPU进行训练,OLMo2 7B也在1,024张H100 GPU的集群上完成训练。这种极高的基础设施要求使得绝大多数研究者无法参与LLM预训练。虽然DiLoCo和Photon等去中心化训练方法通过联邦优化降低了通信开销,使训练可以在地理分布的异构GPU集群上进行,但它们仍然要求每个节点训练完整模型参数。以AdamW优化器为例,优化器状态和梯度通常占据静态显存的75%,每个节点仍需存储完整的模型参数、梯度和优化器状态,导致单节点显存需求居高不下。在训练2B参数的MoE模型时,DiLoCo在每个节点需要55GB显存,这超出了常见的48GB GPU的容量,使得在消费级GPU上预训练LLM变得不可行。

本文的目标是本文的目标是提出一种内存高效的去中心化LLM预训练框架,使得研究者可以使用普通显存(48GB)的独立GPU,通过互联网等低带宽连接进行LLM预训练,并且训练出的模型性能能够与在类似计算预算下集中式训练的模型相媲美。具体来说,作者希望在16张独立的48GB NVIDIA L40S GPU上训练一个2B参数的MoE LLM,同时将每GPU的显存占用控制在40GB以内,并将通信开销相比DiLoCo降低至少33%。

与已有工作不同的是,本文的独特切入角度在于利用MoE架构的天然模块性来解决去中心化训练的内存瓶颈。已有工作(如FSDP、ZeRO)在集中式设置中对模型进行分片,但需要高带宽互联来保证同步效率;DiLoCo等去中心化方法降低了通信需求,但仍需每个节点训练完整模型。SPES观察到MoE模型中各专家子网络可以独立管理,因此将不同专家分配到不同节点训练,每个节点只需维护被分配专家的梯度和优化器状态,从而将显存需求从 $4 \times (|\psi| + |\Phi|)$ 降至 $4 \times |\psi| + |\Phi| + 3 \times |\Phi_i|$。这种"按专家分片"的思路与已有"按参数分片"或"按数据分片"的范式形成互补,为低资源环境下的LLM训练开辟了新路径。

核心方法

SPES的方法可以类比为一个"分布式学徒制":想象一个由16个工作室组成的手工坊,每个工作室负责制作产品的不同部件(专家),大家各自在自己的工作台上精进技艺,定期交换制成品来互相学习。技术上,SPES首先采用标准的decoder-only MoE LLM架构,包含自注意力层、稀疏专家前馈网络和RMSNorm归一化层。然后将所有专家参数 $\Phi = \{\phi_j\}_{j=1}^{M}$ 划分为 $N$ 个不相交的子集 $\Phi_1, \Phi_2, \ldots, \Phi_N$,分别分配给 $N$ 个节点。每个节点在本地数据上执行 $H$ 步更新,但只更新被分配的专家和共享模块(注意力层、归一化层等),其余专家保持冻结。同步阶段,各节点只需传输更新过的参数,共享参数通过FedAvg聚合,专家参数直接赋值。为解决稀疏训练中token利用率不足的问题,引入专家合并warm-up策略,在训练初期通过任务算术合并相似专家的参数。

SPES的核心创新在于将MoE的专家级独立性转化为去中心化训练的内存效率优势。与DiLoCo等方法的根本区别是:DiLoCo中每个节点训练完整模型的所有参数,优化器状态和梯度的显存开销与集中式训练相同;而SPES利用MoE架构中各专家可以独立训练的特性,将专家参数分配到不同节点,每个节点只为被分配的专家维护梯度和优化器状态。这带来双重节省:第一,显存方面,以AdamW为例,每节点显存从 $4 \times (|\psi| + |\Phi|)$ 降至 $4 \times |\psi| + |\Phi| + 3 \times |\Phi_i|$;第二,通信方面,每轮通信量从 $N \times (2 \times |\psi| + |\Phi|)$ 降至 $N \times (2 \times |\psi| + |\Phi| + |\Phi_i|)$,对于2B模型16节点的设置,通信成本降低33.3%。另一个关键创新是专家合并warm-up策略,通过计算专家输入投影层之间的余弦相似度,找到最相似的K个专家,使用任务算术进行参数合并,使得每个专家能从多个节点的梯度中受益,改善了token利用率。

方法步骤详情

SPES的完整训练流程分为四个步骤。第一步是专家分配:将 $M$ 个专家参数 $\Phi$ 划分为 $N$ 个不相交子集分配给 $N$ 个节点,每个节点 $\eta_i$ 获得共享模块参数 $\psi_i$ 和专属专家参数 $\Phi_i$,未被分配的专家 $\bar{\Phi}_i$ 保持冻结。第二步是本地训练:在每个通信轮次 $t$ 的开始,节点 $\eta_i$ 接收上一轮的全局模型参数 $\theta^{(t-1)}$,然后在其本地数据 $D_i$ 上执行 $H$ 步AdamW更新,只更新 $\psi_i$ 和 $\Phi_i$,梯度和优化器状态只针对这些参数维护。第三步是稀疏同步:本地训练结束后,各节点上传更新过的参数,共享参数通过FedAvg聚合($\psi^{(t+1)} = \frac{1}{N}\sum_{i=1}^{N}\psi_i^{(t)}$),专家参数直接从其所有者节点赋值($\phi_j^{(t+1)} = \phi_{j,o(j)}^{(t)}$),聚合后的全局参数广播给所有节点。第四步是专家合并warm-up(仅在训练初期执行):对每个专家 $j$,计算其输入投影层 $w_j^{in}$ 与其他专家的余弦相似度 $A_{j,k}$,选择最相似的 $K$ 个专家 $Q_j = \text{TopK}(A_{j,k})$,通过 $\tilde{\phi}_j^{(t)} = \phi_j^{(t)} + \frac{\alpha}{K}\sum_{k \in Q_j}(\phi_k^{(t)} - \phi_j^{(t)})$ 合并参数,合并强度 $\alpha$ 线性衰减至零,合并仅在前 $T_w = 12500$ 步内执行,间隔 $T_i = 300$ 步。

技术新颖性

SPES在技术上具有多方面的新颖性。首先,在去中心化训练范式上实现了从"全模型同步"到"稀疏专家同步"的转变:DiLoCo和Photon要求每个节点训练并同步完整模型,而SPES利用MoE的模块化特性实现了专家级别的分布式训练,这是一个根本性的架构创新。其次,专家合并warm-up策略是首次在去中心化MoE训练中引入跨节点的专家知识共享机制,通过余弦相似度识别相似专家并使用任务算术合并,在不增加通信开销的前提下改善了稀疏训练的token利用率问题。第三,SPES与其他并行策略具有互补性:当每个节点有多张GPU时,SPES可以与FSDP等节点内分片策略结合使用,实现"节点间按专家分片 + 节点内按参数分片"的两级内存优化。最后,SPES提供了理论收敛分析,证明了在L-光滑性假设下,SPES的收敛速率为 $O(1/T)$,且专家合并warm-up带来的额外扰动是可衰减的。

不同预训练范式的比较
Figure 1: 不同预训练范式的比较
模型结构与SPES框架示意图
Figure 2: 模型结构与SPES框架示意图
专家合并关键超参数的消融实验
Figure A1: 专家合并关键超参数的消融实验

实验结果

SPES在多个尺度和设置下展现了出色的性能。在1B模型50B tokens的受控对比实验中,SPES在8个常识推理基准上的平均得分为50.95,优于集中式训练的50.02和DiLoCo的49.79,尤其在BoolQ上达到60.95(集中式55.50),在ARC-Easy上达到52.11(集中式50.18)。在内存效率方面,训练2B模型时DiLoCo需要每GPU 55GB显存,而SPES仅需35GB,降低了36.4%;训练7B模型时SPES将每GPU显存控制在41-44GB范围。在通信效率方面,2B模型中SPES每轮上行通信量为2.8GB/节点,远低于DiLoCo的8GB/节点;7B模型中SPES为9.8GB/节点,DiLoCo为28.6GB/节点,降低65.7%。在训练速度方面,SPES在H=50时达到3.67k tokens/s/GPU,与集中式训练的3.79k tokens/s/GPU接近。在与其他开源LLM的对比中,SPES-2B使用16张48GB GPU训练500B tokens,在SciQ上达到85.0,PIQA上69.3,与使用更大数据集和集中式基础设施的MobiLlama、OpenELM等模型竞争力相当。SPES-7B在500B tokens训练后,SciQ达89.9,PIQA达74.7,ARC-E达72.1。SPES-9B(从Qwen3-1.7B-Base上采样初始化)表现最为突出,在SciQ上达95.3,PIQA达78.9,ARC-E达81.5,BoolQ达77.3,MMLU达63.7,C-Eval达44.7,全面超越同规模的MoE++和LLaMA-MoE等模型。专家合并warm-up的消融实验表明,使用合并后平均得分从48.99提升至50.95,BoolQ上提升7.10个百分点,ARC-Easy上提升3.34个百分点。

不同训练范式的性能对比
Table 1: 不同训练范式的性能对比
与已有LLM的性能对比
Table 3: 与已有LLM的性能对比
专家合并策略的效果对比
Table 4: 专家合并策略的效果对比
不同训练范式的显存和通信成本比较
Figure 3: 不同训练范式的显存和通信成本比较
不同训练范式的训练过程中性能比较
Figure 4: 不同训练范式的训练过程中性能比较
同步步数H的消融实验
Figure A2: 同步步数H的消融实验
查看结构化数据
任务指标本文基线提升
常识推理平均(1B模型,50B tokens) 8个基准平均分 50.95 集中式50.02 / DiLoCo 49.79 +1.86% / +2.33%
BoolQ(1B模型) 0-shot准确率 60.95 集中式55.50 / DiLoCo 60.09 +9.82% / +1.43%
ARC-Easy(1B模型) 0-shot准确率 52.11 集中式50.18 / DiLoCo 46.84 +3.85% / +11.25%
GPU显存(2B模型,16节点) 每GPU显存(GB) 35 DiLoCo 55 / 集中式 >50 降低36.4%
通信量(7B模型,4节点) 每轮上行数据量(GB/节点) 9.8 DiLoCo 28.6 降低65.7%
通信量(2B模型,16节点) 每轮上行数据量(GB/节点) 2.8 DiLoCo 8.0 降低65.0%
训练吞吐量(7B模型) tokens/s/GPU 3.67k 集中式 3.79k 仅低3.2%
SPES-9B MMLU 5-shot准确率 63.7 MoE++ 7B 24.6 +158.9%
SPES-9B SciQ 0-shot准确率 95.3 MoE++ 7B 89.7 +6.2%
SPES-9B ARC-E 0-shot准确率 81.5 MoE++ 7B 66.9 +21.8%

局限与改进

作者明确指出了几个重要局限。首先,受计算资源限制,实验最大只验证到9B参数规模和不到500B tokens的训练量,更大模型和更长训练时间的可扩展性尚未得到验证。其次,本文仅关注语言理解任务,未涉及多模态推理和生成任务的适用性。从我的分析来看,还存在以下局限:第一,SPES的收敛速度在训练初期略慢于集中式训练,这在Fig. 4中可以看到,虽然最终收敛到相近水平,但对于训练预算有限的场景可能是一个问题。第二,专家合并warm-up引入了额外的超参数($\alpha$、$T_w$、$T_i$、$K$),消融实验表明这些超参数对性能有显著影响(如$\alpha$从0.1变到0.8时性能下降明显),增加了调参难度。第三,当前的专家分配是静态的,一旦训练开始就不改变,如果某些节点的计算能力或数据质量差异较大,可能导致部分专家训练不足。第四,实验中每个节点的数据是从全局数据集中随机采样的,未测试数据非独立同分布(non-IID)场景下的表现,这在真实去中心化环境中是一个常见挑战。

独立分析的弱点

首先,SPES的专家合并warm-up依赖于余弦相似度来识别相似专家,这是一种相对粗糙的相似度度量。在训练早期,专家的输入投影层尚未充分分化,余弦相似度可能无法准确反映专家间的功能关系。一个改进方向是引入基于专家在验证集上激活模式的相似度度量,或者使用可学习的路由信息来指导合并。其次,当前的静态专家分配策略在训练全程不变,缺乏对专家训练进度的自适应调整。可以考虑引入动态重分配机制,根据各专家的梯度范数或损失变化来调整分配,让训练困难的专家获得更多节点的支持。第三,SPES在同步时使用简单的FedAvg聚合共享参数,对于节点间数据分布差异较大的场景,这可能导致聚合后的模型偏向某些节点的数据分布。可以借鉴SCAFFOLD等联邦学习算法,引入控制变量来修正客户端漂移。第四,实验未充分探索SPES与更先进优化器的结合,如DiLoCo的后续工作NoLoCo已提出无需All-Reduce的训练方法,SPES与其结合可能进一步降低通信开销。

未来方向

作者提出的主要未来方向包括验证SPES在更大模型(如13B、34B甚至70B)和更长训练时间下的可扩展性,以及将框架扩展到多模态推理和生成任务。基于SPES的成果,还可以延伸以下研究方向:第一,探索SPES与更先进的MoE架构(如MoE++中的零计算专家、DeepSeekMoE的极致专家特化)的结合,进一步提升模型效率。第二,研究非IID数据场景下SPES的鲁棒性,这在真实的去中心化环境中(如不同地理位置的节点拥有不同语言/领域的数据)至关重要。第三,将SPES与参数高效微调(如LoRA)结合,在去中心化环境中实现"SPES预训练 + 联邦LoRA微调"的全流程方案。第四,探索SPES在MoE模型的持续学习中的应用,允许新节点带着新专家加入训练网络,实现模型能力的持续扩展。第五,研究SPES框架下的隐私保护机制,如差分隐私或安全聚合,使得框架适用于敏感数据场景。

复现评估

SPES的可复现性较好。作者已将代码开源在GitHub(https://github.com/zjr2000/SPES),并基于主流的OLMo预训练代码库实现,使用自定义的gRPC跨节点同步协议。数据方面,2B和7B模型使用公开的Ultra-FineWeb、SlimPajama、OLMo-Mix-1124子集等数据集训练,9B upcycled模型使用Nemotron Pretraining Dataset,所有数据均可公开获取。算力需求方面,2B模型需要16张48GB GPU(L40S),7B模型需要4节点乘8张A800 GPU,9B模型同样在4节点A800集群上训练,对中等规模的实验室来说是可负担的。消融实验详细报告了关键超参数($\alpha=0.1$、$T_w=12500$、$T_i=300$、$K=4$、$H=50$)的搜索范围和最优值,降低了调参难度。总体而言,一个拥有16张48GB GPU和普通以太网连接的研究团队即可复现2B模型的实验,复现难度为中等。