ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Megatron-LM多卡集群搭建实战:并行策略与NCCL通信全解析

Megatron-LM多卡集群搭建实战:并行策略与NCCL通信全解析 手把手用Megatron-LM搭多卡集群这件事我一直想找机会系统拆开讲一遍。很多人一听到“分布式训练”就觉得门槛高其实一旦把Megatron-LM里数据并行、张量并行、流水线并行这三条主线理清楚再把NCCL通信、节点拓扑、启动脚本这几个环节逐个落地整个多卡集群的搭建就是叠积木的过程。这篇文章我会从硬件规划开始一路讲到软件配置、参数计算、启动验证和故障排查尽量把每一步为什么这么做都说透保证你照着做就能跑起来。适用的人我直接说想把自己的模型从单卡搬到多卡正在犹豫选型、被各种并行策略绕晕或者已经跑通了但速度上不去的同学这篇文章都值得花二十分钟看完。1. 为什么是Megatron-LM多卡训练的思路先理清在开始动手之前先把“多卡训练到底在解决什么问题”这件事聊透。因为很多人在配置阶段出错不是命令不会敲而是脑子里对并行的理解是乱的。1.1 单卡到大集群算力瓶颈的必然选择先看一组很现实的账。假设你想训练一个7B参数的大语言模型只算参数本身在BF16混合精度下模型权重就要占大约14GB显存。但训练和推理不一样前向计算产生的激活值、反向传播要用的梯度、优化器状态比如Adam的动量项和方差项这些都会在显存里堆积。跑一个7B模型保守估计需要50GB以上的单卡显存这已经超过了A100 40GB的容量更不用说消费级的RTX 4090 24GB了。就算你把模型压到单卡勉强放得下训练时间也是大问题。单张A100对7B模型做一次微批次前向加反向可能要几十秒一个完整epoch要跑几百万个token算下来得按周计算。现实中做大模型预训练动辄跑几千亿token单卡根本不可能在合理时间窗口内完成。所以必须把模型和计算同时拆到多张卡上这也就是分布式训练存在的根本原因。Megatron-LM在这个背景下几乎是绕不开的选择。NVIDIA官方开源专门针对Transformer结构做极致优化GPT系列、BERT这类主流架构都能直接套用而且它把分布式训练里最复杂的部分——模型并行策略——做了完整的工程实现。你在命令行里看到的--tensor-model-parallel-size、--pipeline-model-parallel-size对应到实际训练中就是把一整张大网拆成若干个计算单元的过程。1.2 数据并行、张量并行和流水线并行三条腿走路多卡训练听起来玄乎但拆到最底层其实就是三种并行策略的排列组合。Megatron-LM的核心贡献就是把这三种并行策略拧在一起工作让显存、带宽、算力都物尽其用。数据并行Data Parallel最好理解每张卡上都放一份完整的模型副本喂进去不同的数据批次前向反向完成后大家把梯度做一次同步平均再用平均后的梯度去更新各自的参数。这种方式的通信量跟模型体积成正比模型越大通信越频繁所以在超大模型场景下必须配合模型并行来用。张量并行Tensor Parallel是把一个算子内部的矩阵拆开。比如Transformer里的nn.Linear原本是一个巨大的矩阵乘法现在把权重矩阵按列切成两块两张卡各算一半再用一次AllReduce把结果拼起来。张量并行直接降低单卡显存压力但代价是每一步计算都涉及通信因此要求卡间网络极快——同一台机器内的NVLink是最佳选择跨节点做张量并行的通信延迟会非常感人。流水线并行Pipeline Parallel换了个思路按层切分模型把GPU分成一个个stage每个stage负责若干层。数据像流水线一样先在GPU 0上算前几层再传给GPU 1算后面几层一层接一层向后传。这种并行通信量小但因为要等前面的stage算完自己才能开始天然存在流水线气泡bubble需要靠微批次micro-batch来缓解。Megatron-LM把这三种并行策略统一在同一个配置体系里你不需要自己去写复杂的通信逻辑只要填几个参数框架就会自动把模型切开、把数据调度好。这也是为什么我建议你做多卡训练时优先用成熟框架而不是自己裸写DDP。1.3 Megatron-LM在主流方案里的位置和DeepSpeed、Fairscale这些框架相比Megatron-LM有几件事做得特别极致一是对Transformer类模型的张量并行和流水线并行做了手工优化切分点、通信顺序都是调过的二是对序列并行Sequence Parallelism、激活重计算Activation Recompute这类显存优化手段支持得非常成熟三是NVIDIA官方和DGX等主流硬件深度适配跑在H100集群上几乎就是为它量身定制的。DeepSpeed的优势在ZeRO系列的显存优化和数据并行效率上两者其实是互补关系。你现在看到很多大模型训练框架其实是把Megatron-LM的模型并行和DeepSpeed的ZeRO混在一起用的。但如果你是从零开始搭多卡集群先把Megatron-LM玩明白你对整套训练体系的理解会上一个台阶。2. 动手之前先把硬件和网络环境盘清楚很多人忽略这一步上来就装环境最后卡在网络不通或者显存不够上再回头补课效率极低。硬件规划是分布式训练里最不该省的一步。2.1 GPU选型与显存计算先搞清楚一个公式训练一个大模型到底需要多少显存。粗略估算分三块。第一块是参数、梯度和优化器状态。以BF16混合精度为例模型参数占2字节每参数梯度占2字节每参数Adam优化器状态下FP32的主权重占4字节一阶动量占4字节二阶动量占4字节。加在一起每参数大约需要16字节。所以一个70亿参数的模型光这部分就要112GB显存——这就是为什么7B模型基本要8张A100 80GB才能训得比较舒服即使把权重切片后每卡分担1/8左右。第二块是激活值。前向传播中间结果也会占显存取决于序列长度、隐层维度和微批次大小。7B模型、2048序列长度、微批次大小为1的情况下激活值一般在数GB级别。开启激活重计算之后这部分显存能省掉一大块代价是多算一遍前向训练速度会下降10%-20%左右。第三块是通信缓冲区、CUDA context之类的固定开销一张卡大概占1-2GB。结论很直接如果只是学习实验用4张RTX 409024GB或者4张A100 40GB搭个小集群足够了能跑的模型规模在1B到13B之间。想认真预训练大模型直接上8卡A100/H100节点加上InfiniBand网络这才是大厂标配。2.2 CPU内存与NVMe硬盘的准备GPU显存是主角但CPU内存和硬盘往往成为被忽略的瓶颈特别是数据加载环节。大语言模型训练的数据集动辄几百GB到几TB如果数据读盘速度跟不上GPU的消耗速度GPU就会空等训练吞吐直线下降。我的经验是每张GPU预留至少64GB的CPU内存用来做数据预取和shuffle数据盘一定要用NVMe固态硬盘机械盘在数据加载环节会卡到你想摔键盘。检查点checkpoint保存也会吃硬盘空间7B模型的一个完整检查点大约几十GB建议准备至少2TB的NVMe空间。2.3 网络是集群的生命线InfiniBand与RoCE网络这个部分我必须强调一句数据并行可以容忍千兆以太网勉强跑但张量并行和流水线并行对网络延迟和带宽极度敏感。如果通信性能不达标GPU会长时间空转等待数据同步整体训练效率可能连50%都跑不到。首选方案是InfiniBand单端口200Gbps起步配合RDMA技术延迟极低。如果没有条件上IB退而求其次可以用RoCERDMA over Converged Ethernet把RDMA跑在以太网上25Gbps以上的网卡也勉强能用。最次的选择是普通千兆以太网只适合做数据并行而且模型小时都勉强。这里有一个排布经验张量并行一定放在单机内部因为一台机器内的多张卡通过PCIe或NVLink互联带宽高、延迟低跨节点的连接一般只走数据并行或者流水线并行。在规划集群网络拓扑时优先保证单机内部卡的连通性再考虑节点间的高速互联。2.4 一张集群硬件清单参考为了方便对比我列一个两节点集群的典型配置。入门学习的环境可以适当缩水但生产环境建议直接对标下面的方案。组件入门方案单节点生产方案两节点GPU4x RTX 4090 24GB8x H100 80GBCPU16核64核以上内存128GB512GB以上系统盘1TB NVMe2TB NVMe数据盘2TB NVMe4TB NVMe以上网卡25Gbps RoCE200Gbps InfiniBand交换机支持RoCE的万兆交换机IB交换机这个表的用意是让你心里有数分布式训练的瓶颈通常不在单卡算力而在显存是否放得下模型、网络是否扛得住通信。硬件规划阶段就有意识地按照“显存够、网络快、存储不拖后腿”的原则筛选后面踩坑的概率会小很多。3. 软件环境搭建从驱动到Megatron-LM源码硬件盘清楚了接下来就是搭软件环境。这部分看起来琐碎但每一步都有明确的目的版本匹配是最大的坑。3.1 GPU驱动与CUDA版本匹配先装驱动用nvidia-smi确认驱动正常然后根据驱动支持的CUDA版本去装配套的CUDA Toolkit。这里有个常见的误区很多人误以为驱动的版本号越高越好其实驱动只需要“大于等于”CUDA要求的版本就行。举个例子CUDA 12.1要求驱动版本大于等于530.30你机器上如果已经装了550的驱动那CUDA Toolkit装12.1完全没问题。在Megatron-LM场景下主流搭配是CUDA 11.8或12.1对应PyTorch 2.0以上版本。注意CUDA Toolkit的作用是提供编译器和运行时库真正在训练时用的CUDA runtime其实随PyTorch一起打包了所以PyTorch的版本选择比系统级CUDA更重要。3.2 容器方案用起来别在裸机上折腾说到这个我必须分享一个强烈建议用NGC容器不要自己从零搭环境。NVIDIA官方维护的PyTorch容器镜像已经把CUDA、cuDNN、NCCL、PyTorch这些依赖打包在一起版本匹配关系全都验证好了直接拉下来跑就行。我自己第一次搭环境时手动装依赖光NCCL和PyTorch的版本冲突就折腾了一整天后来切到NGC容器二十分钟搞定。拉镜像的命令很简单docker pull nvcr.io/nvidia/pytorch:24.01-py3启动容器的时候注意加上--gpus all和--ipchost前者是让容器能访问GPU后者是避免共享内存太小影响DataLoader的并行进程。多节点场景下每个节点都要确保以相同的方式启动容器容器内的网络和宿主机保持一致这样才能正常通信。3.3 PyTorch与NCCL的搭配Megatron-LM底层的分布式通信依赖NCCLNVIDIA Collective Communications Library。NGC容器里已经内置了NCCL但你最好确认一下版本是否和当前网络硬件匹配。验证NCCL和网络环境是否正常最直接的办法是跑一遍NCCL的带宽测试这个我后面实操环节会详细讲。容器内检查版本python -c import torch; print(torch.__version__, torch.version.cuda) python -c import torch.distributed as dist; print(dist.is_available())如果一切正常你会看到PyTorch版本、CUDA版本以及distributed组件的可用状态为True。3.4 拉取Megatron-LM仓库和目录结构Megatron-LM本身是个源码仓库没有复杂的安装流程直接clone下来即可git clone https://github.com/NVIDIA/Megatron-LM.git cd Megatron-LM真正进入训练时核心入口是pretrain_gpt.py这个脚本。它负责解析训练参数、初始化模型并行策略、配置数据加载器和优化器然后启动训练循环。megatron/目录下是框架的核心实现包括模型定义model/、并行策略core/、数据管线data/等模块。目录结构清楚之后出了问题至少知道去哪个文件里查。如果环境里没有预先安装Apex有些混合精度功能可能需要它建议按官方README里的提示安装对应版本。这一步在不同PyTorch版本下差异较大我建议直接看仓库的README不要凭记忆操作。4. 配置文件逐行拆解手把手教你填参数环境搭好之后就到了最关键的环节读懂并配置Megatron-LM的训练参数。这部分我会用一个具体的例子——8卡集群上训练7B GPT模型——把所有关键参数逐个讲明白。4.1 模型规模与并行策略的计算关系一切参数的基础是模型结构。以常见的GPT-7B来说典型配置是层数32层隐层维度4096注意力头数32序列长度2048词表大小50257。为什么这些数字重要因为并行策略的切分方式直接依赖这些结构参数。张量并行切分的是隐层维度和注意力头隐层维度4096可以切成4份每份1024分配到4张卡上32个注意力头也能均匀切成4组每组8个头。流水线并行切分的是层维度32层Transformer层可以切成4个stage每个stage负责8层。所以一个很现实的问题是张量并行度和流水线并行度的乘积不能超过GPU总数。比如8卡环境你可以选TP4、PP24×28或者TP8、PP1也可以TP2、PP4。不同组合对显存和通信的影响差异很大下面会展开。4.2 数据并行、张量并行、流水线并行怎么设才合理并行度设置是整个配置中最核心也最容易踩坑的地方。我先把三者的关系和推导公式写出来数据并行度 总GPU数 / (张量并行度 × 流水线并行度)举例8卡TP4、PP2那么DP8/(4×2)1也就是说数据并行度为1没有数据并行。这种情况下所有卡都在做模型并行没有多余卡做数据并行梯度的同步方式完全由模型并行内部的通信决定。如果改成TP4、PP1则DP2也就是有两条数据并行副本每4张卡内部做一个张量并行组。两组之间的梯度需要做跨组AllReduce。怎么选这里有个经验法则单卡放得下完整模型时优先纯数据并行TP1、PP1、DP8简单高效。单卡放不下整个模型时先加张量并行尽量限制在同一节点的GPU数量内。比如单机8卡TP8是最自然的因为8卡之间走NVLink通信带宽高延迟低。模型大到TP单节点GPU数也放不下时再加流水线并行让每个节点负责一个或多个stage。不要轻易让张量并行跨节点除非你的网络是InfiniBand级别的超低延迟不然通信会成为最大的瓶颈。我贴一个常见的8卡配置示例对应7B模型、单节点--tensor-model-parallel-size 4 --pipeline-model-parallel-size 2 --num-layers 32 --hidden-size 4096 --num-attention-heads 32为什么7B模型要设TP4、PP2而不是TP8因为7B模型在A100 40GB上单卡放不下TP4时每张卡承担约1/4的模型参数大概3.5G参数对应的权重、梯度和优化器状态再加上激活值40GB勉强够用。PP2再把层切成两半进一步降低每卡的激活值和梯度存储压力。如果你用的是A100 80GBTP8也是可以的省去了流水线气泡带来的效率损耗。4.3 训练的核心参数微批次、梯度累积和全局批次Megatron-LM的参数配置里有三个名称相似的批次参数很多人在这里混淆--micro-batch-size微批次大小。每次前向/反向计算实际喂给一张卡的数据样本数量。这个值受显存限制通常设为1或2。--gradient-accumulation-steps梯度累积步数。攒够多少步微批次后再做一次参数更新。--global-batch-size全局批次大小。一次参数更新实际消耗的样本总数。三者关系是全局批次大小 数据并行度 × 微批次大小 × 梯度累积步数举例DP2micro-batch-size1gradient-accumulation-steps16那么global-batch-size2×1×1632。注意--global-batch-size可以不显式设置让Megatron根据前两者自动计算但我建议显式设置避免算错。显存调节逻辑先固定global-batch-size比如256如果OOM优先降micro-batch-size然后增大gradient-accumulation-steps来补偿保证global-batch-size不变。这样既保住了模型的收敛效果又压低了显存占用。4.4 关键环境变量网络通信调优除了Megatron自身的参数分布式训练还高度依赖几个NCCL环境变量特别是多节点场景。我把最常用、最影响性能的几个列出来export NCCL_IB_GID_INDEX3 # InfiniBand设备使用的GID索引RoCE环境下很关键 export NCCL_IB_DISABLE0 # 开启InfiniBand通信没有IB卡时置1 export NCCL_SOCKET_IFNAMEib0 # 指定通信使用的网络接口多网卡时必须显式指定 export NCCL_DEBUGINFO # 打印NCCL调试信息排查问题利器 export CUDA_DEVICE_MAX_CONNECTIONS1NCCL_SOCKET_IFNAME是多机环境最容易出错的地方。机器上通常同时有千兆以太网口eth0和高速网口ib0或eno1如果NCCL选错了网口通信就会走慢速链路训练速度直接掉好几个数量级。确认方法是在每台节点上运行ip a查看网口名称然后明确指定。NCCL_DEBUGINFO在排查通信故障时非常有用它能显示NCCL初始化时选择的设备、建立的连接数以及每次通信的原语。正常训练时不建议开着因为日志量非常大会拖慢速度。4.5 一个完整的启动脚本样例下面是单节点8卡的完整启动脚本可以直接改改路径拿来用#!/bin/bash GPUS_PER_NODE8 NNODES1 NODE_RANK0 MASTER_ADDRlocalhost MASTER_PORT6000 export NCCL_DEBUGINFO export NCCL_SOCKET_IFNAMEib0 DISTRIBUTED_ARGS --nproc_per_node $GPUS_PER_NODE \ --nnodes $NNODES \ --node_rank $NODE_RANK \ --master_addr $MASTER_ADDR \ --master_port $MASTER_PORT GPT_MODEL_ARGS --num-layers 32 \ --hidden-size 4096 \ --num-attention-heads 32 \ --seq-length 2048 \ --max-position-embeddings 2048 TRAIN_ARGS --micro-batch-size 1 \ --gradient-accumulation-steps 16 \ --tensor-model-parallel-size 4 \ --pipeline-model-parallel-size 2 \ --lr 1.5e-4 \ --train-iters 100000 \ --lr-decay-style cosine \ --min-lr 1e-5 \ --weight-decay 0.1 \ --clip-grad 1.0 DATA_ARGS --data-path /data/train.jsonl \ --tokenizer-type GPT2BPETokenizer \ --vocab-file /data/vocab.json \ --merge-file /data/merges.txt \ --split 98,2,0 OUTPUT_ARGS --log-interval 10 \ --save-interval 1000 \ --eval-interval 1000 \ --eval-iters 10 \ --save /checkpoints \ --load /checkpoints torchrun $DISTRIBUTED_ARGS \ pretrain_gpt.py \ $GPT_MODEL_ARGS \ $TRAIN_ARGS \ $DATA_ARGS \ $OUTPUT_ARGS注意脚本里的--seq-length 2048和--max-position-embeddings 2048是GPT类模型的标配前者是训练时的输入序列长度后者是位置编码的最大长度两者要保持一致。--split 98,2,0表示用98%的数据训练、2%做验证、0%做测试按实际数据量调整。5. 分布式训练的启动流程与验证技巧脚本写完下一步就是启动和验证。这里有很多小技巧能让你在训练刚跑起来的第一分钟就判断出配置是否正确。5.1 单节点与多节点的启动差异单节点8卡直接用torchrun启动上面脚本就能跑。多节点环境假设两个节点各8卡需要同时在每个节点上执行启动脚本只是环境变量不同节点0export MASTER_ADDR192.168.1.10 export MASTER_PORT6000 export NODE_RANK0 bash run.sh节点1export MASTER_ADDR192.168.1.10 export MASTER_PORT6000 export NODE_RANK1 bash run.sh这里MASTER_ADDR是rank 0节点的IP两个节点都必须相同NODE_RANK则分别是0和1。实际操作中可以用pdsh、mpirun或者Slurm一次在两个节点上分发任务。如果没有统一的调度系统我推荐用tmux在两个节点分别开会话启动方便查看日志。多节点常见的启动报错是connection refused几乎全是两个问题一是MASTER_ADDR写错或不可达二是防火墙没放行MASTER_PORT。排查时先用ping确认节点间网络通不通再检查防火墙规则。5.2 日志里怎么看并行策略是否生效启动Megatron-LM后日志会先输出模型初始化信息其中会打印类似下面的内容 number of parameters: 7.01B | per pipeline rank: 1752.38M | per tensor rank: 438.09M这几行非常关键。它告诉你总参数量、每个流水线卡上的参数量、每个张量并行卡上的参数量。如果你设了TP4、PP2总卡数8那么per tensor rank的值约等于总参数量除以(TP×PP×某个系数)可以用来验证并行切分是否正确。训练进入正常迭代后日志会周期性打印iteration 10/100000 | elapsed time per iteration: 12.3s | tokens per second: 17456 | ...这里的tokens per second是最值得关注的指标。7B模型在8卡A100上合理吞吐量应该在每秒2万到5万token具体取决于配置和显存限制。如果低于1000说明配置出了问题多半是通信或者数据加载卡住了。5.3 用监控工具验证集群状态训练跑起来之后别急着走用三个工具做一轮快速体检。第一个是nvidia-smi看每张卡的利用率。正常训练时GPU利用率应该在90%以上。nvidia-smi dmon -s puct -d 1第二个是NCCL测试工具nccl-tests专门用来验证通信带宽。先跑all_reduce_bench看结果是否达到预期。H100加IB网络的理论AllReduce带宽应该在100GB/s以上如果只有10GB/s网络配置大概率有问题。mpirun -np 2 ./build/all_reduce_perf -b 128M -e 8G -f 2第三个是htop看CPU和内存是否被打满。如果GPU利用率低但CPU全部跑满说明数据加载环节拖了后腿需要调整--num-workers或者换成NVMe盘。6. 常见问题排查NCCL、OOM、带宽低迷最后这部分是我最想写的因为几乎每个来问我的同学踩的坑都是重复的。我把调度中最常见的问题和排查方法整理成一个速查表再展开讲几个典型的场景。症状可能原因排查/解决NCCL初始化失败网口选择错误、防火墙封锁设置NCCL_SOCKET_IFNAME检查MASTER_PORT训练速度极慢网络走了慢速链路、IB没启用检查NCCL_DEBUG日志确认ibstatCUDA OOMmicro-batch过大、激活值占用过高调小micro-batch开启recompute多节点卡在“waiting for rank”MASTER_ADDR、NODE_RANK配置不对确认rank 0的IP和端口可访问无法保存检查点存储路径无权限、磁盘空间不足检查目录权限和df -h6.1 NCCL初始化失败的排查思路NCCL报错是最劝退的一类问题但逻辑其实很清晰。最常见的报错是NCCL ERROR: NET/IB : Got Completion with error 12, opcode 0, len 0这是InfiniBand通信出了问题。排查顺序是先确认IB设备是否存在并处于Active状态用ibstat查看再确认NCCL的GID索引设置是否正确RoCE环境一般要设置NCCL_IB_GID_INDEX3最后确认通信接口没选错在日志里搜索NCCL_SOCKET_IFNAME相关的输出看它实际用的是哪个网口。如果机器上没有IB设备需要显式设置NCCL_IB_DISABLE1强制NCCL走以太网。不设置的话NCCL会尝试找IB设备找不到可能导致初始化挂起或超时。6.2 OOM与激活重计算的调节技巧CUDA OOM是训练中最常见的崩溃原因。我给的排查顺序是先把--micro-batch-size降到1这一步能释放大量显存还不行就开启激活重计算Megatron-LM里的参数是--recompute-activations。开启后前向计算的中间激活值会被丢弃反向时重新计算一遍显存占用能降50%左右。代价是训练吞吐下降。实测在7B模型上开启激活重计算吞吐大概下降15%-20%但总比OOM崩溃强。如果开完重计算还是OOM基本可以断定是并行度设置不合理要么加大TP分割模型参数要么换更大的显存卡。有一个容易被忽视的显存杀手是--num-layers和--hidden-size配置太大导致单个PP stage的显存都超限。建议用日志里的per pipeline rank做预估如果单卡负责的参数量超过2G大约对应40GB显存就要考虑增加TP或者PP。6.3 训练速度上不去的调试清单训练能跑但速度远低于预期这种情况比OOM更磨人。我通常会按下面的顺序逐层排查。第一层看GPU利用率。如果所有卡都在50%以下说明计算和通信之间存在等待。打开NCCL_DEBUG日志看每次迭代的通信时间占比。通信占比超过30%时优先优化网络确认高速网卡启用、设置GID索引、检查交换机有无丢包。第二层看数据加载。把--num-workers调高到8或16默认是2如果速度有明显提升说明是数据加载瓶颈。也可以用--dataloader-type cyclic减少数据加载器的重建频率。第三层看并行策略是否合理。TP8的配置在单机内可以跨节点就必须改成TP≤4否则每步Transformer计算都要跨节点通信延迟高到无法接受。我之前见过一个案例两节点各8卡但设置TP16训练吞吐只有正常值的十分之一改成TP8、PP2后立刻恢复。6.4 集群运维的日常注意事项最后分享几个长期跑训练时积累的运维经验。第一检查点保存和加载的路径一定要确认有足够磁盘空间建议保留最近3-5个检查点更早的自动清理。第二训练中断恢复时用--load参数加上--no-load-optim和--no-load-rng可以只加载模型权重不加载优化器状态加快恢复速度。第三长时间训练建议用nohup或者systemd托管启动进程避免SSH断开导致训练直接中断。检查点保存路径下会自动生成latest_checkpointed_iteration.txt文件记录当前迭代数。恢复训练时直接指定--load /checkpoints框架会自动根据这个文件从最近的保存点续训。我搭过多机多卡环境太多次最深的体会是分布式训练的矛盾点不在单个环节而在各个环节的协同——显存、网络、存储、并行策略每一样都要匹配得当。刚开始跑不顺利太正常了按这篇文章的思路从硬件检查、环境验证、参数推导到日志解读一步步来大部分问题都能定位到具体环节。如果真的卡住了回头看看日志里你设置的那几个并行参数再用NCCL测试验证一下网络多半能找到答案。
返回列表