关于 nemo-automodel-launcher-config
面向 NeMo AutoModel 用户的启动配置指南,涵盖交互式、Slurm 和 SkyPilot 启动方式,并说明 YAML 字段、分布式设置及 Slurm 性能分析行为。
主要功能
- 01交互式 torchrun 启动
- 02Slurm 作业配置
- 03SkyPilot 云端作业配置
- 04多节点环境设置
- 05Slurm Nsight Systems 性能分析
适用场景
- 01配置单节点交互式运行
- 02设置多节点 Slurm 训练
- 03Spot 实例中断后恢复训练
- 04生成短时 Slurm 性能分析报告
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nvidia/ skills --skill nemo-automodel-launcher-config安装后在 Claude Code 中输入/nemo-automodel-launcher-config确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
BENCHMARK.mdskill-card.mdskill.oms.sigevals/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 适配器、模型文件或能力标志。这些属于模型接入任务,而非启动器配置任务。
启动方式
- 交互式(默认):在当前节点上运行 torchrun。适用于单节点开发和调试。
- Slurm:向 HPC 集群调度器提交批处理作业。负责处理多节点设置、容器管理和环境配置。
- 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:每个节点的磁盘大小,单位为 GBregion:实例所在的云区域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 数据类、VolumeMappingcomponents/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 分钟的余量。