mcpField
N
nemo-automodel-launcher-config

nemo-automodel-launcher-config

github.com/promptingcompanyクラウド・DevOps039 回インストール17 週間前に更新
リポジトリ

nemo-automodel-launcher-config について

nemo-automodel-launcher-configは、NeMo AutoModelの起動設定に関する質問に答えるスキルです。対話型torchrun、Slurm、SkyPilotを扱い、マルチノード設定、コンテナ、マウント、Slurmのプロファイリングを説明します。

主な機能

  1. 01対話型torchrun起動の案内
  2. 02SlurmのYAML設定
  3. 03SkyPilotクラウドジョブ設定
  4. 04マルチノードのランデブー環境設定
  5. 05SlurmでのNsight Systemsプロファイリング

活用シーン

  1. 01単一ノードの開発実行
  2. 02マルチノードSlurmトレーニングの設定
  3. 03スポットインスタンスでSkyPilotジョブを送信
  4. 04Slurmトレーニングのプロファイリング

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/promptingcompany/nv-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(クラウド非依存)の 3 つの起動方法をサポートしています。

手順

起動に関する質問には、ユーザーがファイルの編集を依頼した場合を除き、リポジトリを調査せず、このスキルの内容に基づいて直接回答してください。回答は、該当する起動用 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 のスポットインスタンス:cloud、accelerators、 num_nodes、use_spot: true、disk_size、region、setup、 env_vars を含む skypilot: YAML ブロックを示してください。スポットインスタンスはプリエンプトされる可能性があることに注意を促し、短い step_scheduler.checkpoint_interval を設定して、restore_from.path で再開してください。
  • Slurm での Nsight Systems:通常の Slurm フィールドとともに slurm.nsys_enabled: true を示してください。起動処理がトレーニングコマンドを 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 の出力設定が構成されている場合はその設定を使用し、それ以外の場合は .nsys-rep レポートが Slurm ジョブの作業ディレクトリまたは出力ディレクトリに書き込まれると説明してください。

対象範囲

このスキルは、インタラクティブ実行、Slurm、SkyPilot、コンテナ、マウント、環境変数、ランデブー設定、プロファイリングなど、起動の仕組みに限って使用してください。

新しいモデルアーキテクチャの実装や登録、Hugging Face の state-dict アダプター、モデルファイル、機能フラグにはこのスキルを使用しないでください。これらはモデルのオンボーディング作業であり、起動設定の作業ではありません。

起動方法

  1. インタラクティブ(デフォルト):現在のノードで torchrun を実行します。単一ノードでの開発やデバッグに適しています。
  2. Slurm:HPC クラスターのスケジューラーにバッチジョブを送信します。マルチノード設定、コンテナ管理、環境設定を処理します。
  3. SkyPilot:AWS、GCP、Azure、Lambda、Kubernetes へのクラウド非依存のジョブ送信を行います。スポットインスタンスをサポートします。

インタラクティブ起動

# 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 の場合、Nsight Systems プロファイリングのためにトレーニングコマンドを nsys profile でラップします

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: コスト削減のためにプリエンプティブル/スポットインスタンスを使用する
  • disk_size: ノードあたりのディスクサイズ (GB)
  • region: インスタンスを配置するクラウドリージョン
  • setup: トレーニングジョブの前に実行するシェルコマンド (例: 依存関係のインストール)
  • env_vars: ジョブの環境変数
SkyPilot スポットチェックリスト

スポットまたはプリエンプティブルインスタンスを使用する場合:

  • skypilot: セクションで use_spot: true を設定します。
  • accelerators、num_nodes、disk_size、region、setup、および必要な 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 ランチャーの設定です。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 のスポットプリエンプション: スポットインスタンス (use_spot: true) はクラウドプロバイダーによってプリエンプトされる可能性があります。短い間隔でチェックポイントを有効にして、失われる作業を最小限に抑えてください。
  • 環境変数の構文: シェル変数の展開には YAML で ${VAR} 構文を使用してください。裸の変数名は展開されません。
  • 制限時間と非同期チェックポイント: Slurm の time 制限が短すぎると、進行中の非同期チェックポイントの書き込みが完了前に強制終了され、チェックポイントが破損する可能性があります。少なくとも 5~10 分の余裕を残してください。

コメント