用途:在 SLURM 集群上启动 Megatron-LM 分布式训练作业,提供最小 sbatch 骨架与多节点运行规则。
前提:拥有可提交 GPU 分区的 SLURM 登录权限;Megatron-LM 检出到所有节点可见的共享文件系统(NFS、Lustre 等),代码、数据、检查点、输出路径一致;安装 uv,并在提交前于工作树执行一次 uv sync --extra training --extra dev(或 --extra lts),使 .venv 对所有节点可见。
用法:将最小 sbatch 脚本保存为 run_megatron.slurm,设置 --account、--partition、--nodes、--gpus-per-node、--time 等;脚本内 cd 到工作树,导出 MASTER_ADDR(取 SLURM_JOB_NODELIST 首个主机名)、MASTER_PORT(默认 29500)、NNODES、GPUS_PER_NODE、WORLD_SIZE,再用 srun 每节点一个任务执行 uv run python -m torch.distributed.run,传入 --nnodes、--nproc-per-node、--node-rank(取 SLURM_NODEID)、--master-addr、--master-port 及 pretrain_gpt.py 参数。提交:mkdir -p logs && JOB_ID=$(sbatch --parsable run_megatron.slurm)。
多节点规则:从目标工作树提交或在脚本内 cd;所有节点须访问同一共享路径;使用单一 torchrun worker 组,不要启动独立单节点作业;--nproc-per-node 等于每节点可见 GPU 数;检查点、TensorBoard 数据与日志写入共享存储。
CUDA_DEVICE_MAX_CONNECTIONS:不要无条件导出。Pre-Blackwell(Hopper、Ampere)且 TP>1 或 CP>1、非 FSDP 时设为 1(否则断言失败);Blackwell 不需要且无效果;Torch-FSDP2 或 Megatron-FSDP 不得为 1;启用 overlap_moe_expert_parallel_comm 时设为 32。
容器:若在容器中运行,uv 管理的 .venv 须在容器内可见,镜像需提供仓库期望的 CUDA/NCCL/torch 版本(见 docker/.ngc_version.dev 与 .ngc_version.lts),并用调度器容器参数包裹 srun。
监控与诊断:用 squeue、sacct、scancel 管理作业;轮询结果产物而非仅等 squeue 状态。失败时扫描所有 rank 的 stderr,最早的非 NCCL Python traceback 通常是根因;按 OOM、形状/整除错误、导入错误、无 traceback 的 NCCL 失败分类排查。常见陷阱:忘记 uv sync、日志写入节点本地路径、盲目设置 CUDA_DEVICE_MAX_CONNECTIONS=1、使用裸 torchrun 而非 uv run python -m torch.distributed.run。