用途:指导在 SLURM 集群上启动 Megatron-LM 分布式训练作业,给出可直接套用的 sbatch 骨架与多节点启动规则。
主要能力与要点:
- 从所有节点可见的共享工作树路径提交,并在脚本中先 cd 到该路径。
- 每节点一个 srun 任务,用 uv run python -m torch.distributed.run 启动,而非裸 torchrun。
- 设置 MASTER_ADDR(scontrol show hostnames "$SLURM_JOB_NODELIST" | head -n1)、MASTER_PORT、NNODES=${SLURM_NNODES}、GPUS_PER_NODE、WORLD_SIZE=$((NNODES * GPUS_PER_NODE))。
- 向 torch.distributed.run 传 --nnodes、--nproc-per-node、--node-rank、--master-addr、--master-port。
- CUDA_DEVICE_MAX_CONNECTIONS:Blackwell 前(Hopper/Ampere)且 TP>1 或 CP>1 且非 FSDP 时为 1;Blackwell/GB200 不需要;Torch-FSDP2 或 Megatron-FSDP 不可为 1;overlap_moe_expert_parallel_comm 时为 32。
前置条件:有 GPU 分区提交权限的 SLURM 登录;Megatron-LM 检出在所有节点可见的共享文件系统(NFS、Lustre 等);安装 uv 并先执行 uv sync --extra training --extra dev(或 --extra lts)使 .venv 对所有节点可见。
用法:将最小 sbatch 脚本保存为 run_megatron.slurm,用 mkdir -p logs && JOB_ID=$(sbatch --parsable run_megatron.slurm) 提交。多节点须使用一个跨节点的 torchrun worker 组,--nproc-per-node 等于每节点可见 GPU 数,检查点、tensorboard 与日志写入共享存储。容器场景下 .venv 须在容器内可见,镜像需提供仓库期望的 CUDA/NCCL/torch 版本,并用调度器容器参数包裹 srun。
监控与排查:用 squeue、sacct、scancel 查看与取消作业;轮询结果产物而非只等 squeue 状态。排查时扫描所有 rank 的 stderr,最早的非 NCCL Python traceback 通常是根因;按 OOM、形状/整除错误、导入错误、无 traceback 的 NCCL 失败分类。常见坑:忘记 uv sync、日志写节点本地路径、盲目设 CUDA_DEVICE_MAX_CONNECTIONS=1、使用裸 torchrun。