SuperAPI AI 工具集

mcore-run-on-slurm

部署与运维

查看项目

更新于 10-16 02:34

技能介绍

用途:指导在 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。