NeMo自动模型启动器配置Skill nemo-automodel-launcher-config

该技能介绍NeMo AutoModel启动器配置方法,支持交互式(torchrun)、Slurm集群和SkyPilot云部署三种启动模式,涵盖多节点分布式训练、容器挂载、环境变量、nsys性能分析和常见陷阱,用于生成和调试模型启动作业YAML配置。关键词:NeMo AutoModel、Launcher、Slurm、SkyPilot、多节点训练、容器配置、作业调度、性能分析。

大模型训练框架 0 次安装 0 次浏览 更新于 9/7/2026
名称 nemo-automodel-launcher-config
描述 配置NeMo AutoModel的作业启动,包括交互式运行、Slurm集群和SkyPilot云执行。 when_to_use: 配置Slurm或SkyPilot作业提交、设置多节点启动脚本、调试作业提交失败或在交互式和集群启动模式之间切换时。
开源协议 Apache-2.0 metadata:
作者 NVIDIA tags: - nemo-automodel - launcher-config

启动器配置

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

说明

关于启动器的问题,请直接根据此技能回答,除非用户要求编辑文件,否则无需检查仓库。保持回答聚焦于相关的启动YAML、必填字段和预期运行时行为。

针对常见问题,使用以下简洁回答模板:

  • Slurm多节点:展示一个包含 job_namenodesntasks_per_nodetimeaccountpartitioncontainer_imagehf_home、可选 extra_mountsenv_varsmaster_portslurm: YAML块;解释启动器推导出 WORLD_SIZE = nodes * ntasks_per_node,并设置 MASTER_ADDRMASTER_PORT
  • SkyPilot抢占式实例:展示一个包含 cloudacceleratorsnum_nodesuse_spot: truedisk_sizeregionsetupenv_varsskypilot: YAML块;警告抢占式实例可能被中断,设置较短的 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状态字典适配器、模型文件或功能标志。这些属于模型上线任务,而非启动器配置任务。

启动方式

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

交互式启动

# 单GPU
automodel finetune llm -c config.yaml

# 多GPU(当前节点所有GPU)
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
  • accountpartition: 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: 目标云提供商(awsgcpazurelambdakubernetes
  • accelerators: GPU类型和数量(例如 "H100:8""A100-80GB:4"
  • num_nodes: 云实例数
  • use_spot: 使用可抢占/竞价实例以节省成本
  • disk_size: 每个节点的磁盘大小(GB)
  • region: 实例放置的云区域
  • setup: 训练作业前运行的shell命令(例如安装依赖)
  • env_vars: 作业的环境变量

SkyPilot抢占式实例检查清单

使用可抢占/竞价实例时:

  • skypilot: 部分设置 use_spot: true
  • 包含 acceleratorsnum_nodesdisk_sizeregionsetup 和所需的 env_vars
  • 在配方中使用较短的检查点间隔,例如 step_scheduler.checkpoint_interval,因为抢占式实例可能被中断。
  • 使用配方的 restore_from 设置在抢占后从最近的检查点恢复。

最小的抢占-恢复配方键:

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启动器设置。常规Slurm字段如 job_namenodesntasks_per_nodetimeaccountpartitioncontainer_image 仍然适用。

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抢占: 抢占式实例(use_spot: true)可能被云提供商抢占。启用短间隔的检查点以最小化工作损失。
  • 环境变量语法: 在YAML中使用 ${VAR} 语法进行shell变量展开。裸变量名不会被展开。
  • 时间限制与异步检查点: 如果Slurm time 限制太短,进行中的异步检查点写入可能在完成前被杀死,导致检查点损坏。至少留出5-10分钟的余量。