mcpField
N
nemo-automodel-launcher-config

nemo-automodel-launcher-config

github.com/nvidia云与 DevOps3.8k1.9k 次安装今天更新
代码仓库

关于 nemo-automodel-launcher-config

面向 NeMo AutoModel 用户的启动配置指南,涵盖交互式、Slurm 和 SkyPilot 启动方式,并说明 YAML 字段、分布式设置及 Slurm 性能分析行为。

主要功能

  1. 01交互式 torchrun 启动
  2. 02Slurm 作业配置
  3. 03SkyPilot 云端作业配置
  4. 04多节点环境设置
  5. 05Slurm Nsight Systems 性能分析

适用场景

  1. 01配置单节点交互式运行
  2. 02设置多节点 Slurm 训练
  3. 03Spot 实例中断后恢复训练
  4. 04生成短时 Slurm 性能分析报告

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/nvidia/skills --skill nemo-automodel-launcher-config

安装后在 Claude Code 中输入/nemo-automodel-launcher-config确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

BENCHMARK.md
skill-card.md
skill.oms.sig
evals/
evals.json

详细介绍

启动器配置

NeMo AutoModel 支持三种启动方式:交互式(torchrun)、Slurm(HPC 集群)和 SkyPilot(云平台无关)。

说明

对于启动器相关问题,请直接依据本技能作答,除非用户要求编辑文件,否则不要检查代码仓库。回答应聚焦于相关的启动 YAML、必填字段和预期的运行行为。

常见问题请使用以下精简回答模板:

  • Slurm 多节点:展示一个包含 job_name、nodes、 ntasks_per_node、time、account 或 partition、container_image、 hf_home、可选的 extra_mounts、env_vars 和 master_port 的 slurm: YAML 块;说明启动器会计算得出 WORLD_SIZE = nodes * ntasks_per_node,并设置 MASTER_ADDR 和 MASTER_PORT。
  • SkyPilot spot:展示一个包含 cloud、accelerators、num_nodes、 use_spot: true、disk_size、region、setup 和 env_vars 的 skypilot: YAML 块;提醒用户 spot 实例可能会被抢占,设置较短的 step_scheduler.checkpoint_interval,并使用 restore_from.path 恢复。
  • Slurm 上使用 Nsight Systems:展示 slurm.nsys_enabled: true 以及常规 Slurm 字段,说明启动器会使用 nsys profile 包装训练命令,并指出会生成 .nsys-rep 报告文件。将性能分析视为仅用于诊断的操作:使用较短的性能分析运行;正常生产训练时应禁用,因为这会增加开销并产生大型文件。

对于 Slurm 相关回答,请从以下最简模板开始,然后只调整用户询问的字段:

slurm:
  job_name: llm_finetune
  nodes: 2
  ntasks_per_node: 8
  time: "04:00:00"
  account: my_account
  partition: batch
  container_image: nvcr.io/nvidia/nemo:dev
  hf_home: ~/.cache/huggingface
  master_port: 13742
  env_vars:
    HF_TOKEN: "${HF_TOKEN}"

对于仅涉及 Slurm 的问题,除非用户提出要求,否则不要讨论 SkyPilot 或性能分析。对于性能分析问题,请说明 .nsys-rep 报告会写入 Slurm 作业的工作目录或输出目录;如果配置了启动器的 Nsys 输出设置,则按该设置写入。

路由边界

本技能仅用于启动机制:交互式执行、Slurm、SkyPilot、容器、挂载、环境变量、集合通信设置和性能分析。

不要使用本技能来实现或注册新的模型架构、Hugging Face state-dict 适配器、模型文件或能力标志。这些属于模型接入任务,而非启动器配置任务。

启动方式

  1. 交互式(默认):在当前节点上运行 torchrun。适用于单节点开发和调试。
  2. Slurm:向 HPC 集群调度器提交批处理作业。负责处理多节点设置、容器管理和环境配置。
  3. SkyPilot:向 AWS、GCP、Azure、Lambda 或 Kubernetes 提交云平台无关的作业。支持 spot 实例。

交互式启动

# Single GPU
automodel finetune llm -c config.yaml

# Multi-GPU (all GPUs on current node)
torchrun --nproc_per_node=8 -m nemo_automodel._cli.app finetune llm -c config.yaml

交互模式无需额外的 YAML 配置段。当配置中没有 slurm: 或 skypilot: 配置段时,CLI 会自动使用 torchrun。

Slurm 配置

SlurmConfig 数据类会根据模板生成 SBATCH 脚本。

YAML 示例
slurm:
  job_name: llm_finetune
  nodes: 2
  ntasks_per_node: 8
  time: "04:00:00"
  account: my_account
  partition: batch
  container_image: nvcr.io/nvidia/nemo:dev
  hf_home: ~/.cache/huggingface
  extra_mounts:
    - source: /data
      dest: /data
  env_vars:
    WANDB_API_KEY: "${WANDB_API_KEY}"
    HF_TOKEN: "${HF_TOKEN}"
关键字段
  • job_name:Slurm 作业标识符
  • nodes:要申请的节点数
  • ntasks_per_node:每个节点的任务数(GPU 数)
  • time:HH:MM:SS 格式的最长运行时间
  • account、partition:Slurm 调度参数
  • container_image:Enroot/Pyxis 容器镜像路径
  • nemo_mount:容器内 NeMo AutoModel 源码的挂载点
  • hf_home:HuggingFace 缓存目录路径
  • extra_mounts:用于额外容器绑定挂载的 VolumeMapping(source, dest) 列表
  • master_port:分布式通信端口(默认值为 13742)
  • env_vars:传入作业的环境变量
  • nsys_enabled:为 true 时,使用 nsys profile 包装训练命令,以进行 Nsight Systems 性能分析

SkyPilot 配置

SkyPilotConfig 数据类定义云作业参数。

YAML 示例
skypilot:
  cloud: aws
  accelerators: "H100:8"
  num_nodes: 2
  use_spot: true
  disk_size: 200
  region: us-east-1
  setup: "pip install nemo-automodel"
  env_vars:
    HF_TOKEN: "${HF_TOKEN}"
关键字段
  • cloud:目标云服务提供商(aws、gcp、azure、lambda、kubernetes)
  • accelerators:GPU 类型和数量(例如,"H100:8"、"A100-80GB:4")
  • num_nodes:云实例数量
  • use_spot:使用可抢占 / Spot 实例以节省成本
  • disk_size:每个节点的磁盘大小,单位为 GB
  • region:实例所在的云区域
  • setup:训练任务运行前执行的 shell 命令(例如,安装依赖项)
  • env_vars:任务的环境变量
SkyPilot Spot 清单

使用 Spot 或可抢占实例时:

  • 在 skypilot: 部分设置 use_spot: true。
  • 包含 accelerators、num_nodes、disk_size、region、setup 和所需的 env_vars。
  • 在配方中使用较短的检查点间隔,例如 step_scheduler.checkpoint_interval,因为 Spot 实例可能会被抢占。
  • 实例被抢占后,使用配方的 restore_from 设置从最新检查点恢复。

最简 Spot 恢复配方键:

step_scheduler:
  checkpoint_interval: 100

restore_from:
  path: /checkpoints/latest

多节点环境

对于多节点训练(Slurm 和 SkyPilot 均适用),启动器会自动配置:

  • MASTER_ADDR:第一个节点的主机名
  • MASTER_PORT:用于会合的端口(默认值为 13742)
  • WORLD_SIZE:进程总数(nodes * ntasks_per_node)
  • 用于优化集合通信的 NCCL 环境变量

Nsys 性能分析

在 Slurm 任务中启用 Nsight Systems 性能分析:

slurm:
  job_name: llm_profile
  nodes: 1
  ntasks_per_node: 8
  time: "00:30:00"
  account: my_account
  partition: batch
  container_image: nvcr.io/nvidia/nemo:dev
  nsys_enabled: true

这是 Slurm 启动器设置。job_name、nodes、ntasks_per_node、time、account 或 partition 以及 container_image 等常规 Slurm 字段仍然适用。

当 nsys_enabled: true 时,启动器会使用 nsys profile 封装训练命令,并在 Slurm 任务的工作目录或输出目录中写入 .nsys-rep 报告文件,以便进行性能分析。 性能分析仅用于诊断:请在短时间排查问题时运行,并预期会产生额外开销和较大的文件;正常生产训练时请将其关闭。

代码锚点

  • components/launcher/slurm/config.py - SlurmConfig 数据类、VolumeMapping
  • components/launcher/slurm/template.py - SBATCH 脚本模板生成
  • components/launcher/slurm/utils.py - Slurm 提交工具
  • components/launcher/skypilot/config.py - SkyPilotConfig 数据类
  • _cli/app.py - CLI 入口和启动器路由逻辑

注意事项

  • 端口冲突:如果同一节点上的其他任务正在使用默认的 master_port(13742),请更改端口以避免连接失败。
  • 容器挂载:extra_mounts 中的 source 路径必须在分配的所有节点上都存在。路径缺失会导致容器启动失败。
  • Slurm 容错:容错插件仅适用于 Slurm,不能与 SkyPilot 或交互模式搭配使用。
  • SkyPilot Spot 抢占:云服务提供商可能会抢占 Spot 实例(use_spot: true)。请启用检查点并设置较短的间隔,以尽量减少工作损失。
  • 环境变量语法:在 YAML 中使用 ${VAR} 语法展开 shell 变量。仅写变量名不会展开。
  • 时间限制与异步检查点:如果 Slurm 的 time 限制过短,正在进行的异步检查点写入可能会在完成前被终止,从而导致检查点损坏。请至少预留 5-10 分钟的余量。

评论

支持 Markdown