SageMaker HyperPod クラスターで Slurm ジョブをスケジュールする - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SageMaker HyperPod クラスターで Slurm ジョブをスケジュールする

トレーニングジョブは、標準の Slurm sbatchまたは srun コマンドを使用して起動できます。例えば、8 ノードのトレーニングジョブを起動するには、、、、 condaなどのさまざまな環境で がトレーニングsrun -N 8 --exclusive train.sh SageMaker HyperPod をサポートしますvenvdockerenroot。 SageMaker HyperPod クラスターでライフサイクルスクリプトを実行することで、ML 環境を設定できます。Amazon FSx などの共有ファイルシステムをアタッチすることもできます。これは仮想環境としても使用できます。

次の例は、Amazon FSx 共有ファイルシステムを使用して SageMaker HyperPod クラスターで完全シャーディングデータ並列処理 (FSDP) 手法を使用して Llama-2 をトレーニングするためのジョブを実行する方法を示しています。Awsome Distributed Training GitHub リポジトリ からさらに例を見つけることもできます。

ヒント

すべての SageMaker HyperPod 例は、Awsome Distributed Training GitHub リポジトリ3.test_casesフォルダにあります。

  1. Awsome Distributed Training GitHub リポジトリ のクローンを作成し、トレーニングジョブの例を Amazon FSx ファイルシステムにコピーします。

    $ TRAINING_DIR=/fsx/users/my-user/fsdp $ git clone https://github.com/aws-samples/awsome-distributed-training/
  2. create_conda_env.sh スクリプトを実行します。これにより、Amazon FSx ファイルシステムにconda環境が作成されます。ファイルシステムがクラスター内のすべてのノードにアクセスできることを確認します。

  3. 次のように単一ノードの slurm ジョブを起動して、仮想 Conda 環境を構築します。

    $ srun -N 1 /path_to/create_conda_env.sh
  4. 環境が構築されたら、共有ボリュームの環境パスを指定してトレーニングジョブを起動できます。単一ノードとマルチノードの両方のトレーニングジョブを同じセットアップで起動できます。ジョブを起動するには、次のようにジョブランチャースクリプト (エントリポイントスクリプトとも呼ばれます) を作成します。

    #!/usr/bin/env bash set -ex ENV_PATH=/fsx/users/my_user/pytorch_env TORCHRUN=$ENV_PATH/bin/torchrun TRAINING_SCRIPT=/fsx/users/my_user/pt_train.py WORLD_SIZE_JOB=$SLURM_NTASKS RANK_NODE=$SLURM_NODEID PROC_PER_NODE=8 MASTER_ADDR=(`scontrol show hostnames \$SLURM_JOB_NODELIST | head -n 1`) MASTER_PORT=$(expr 10000 + $(echo -n $SLURM_JOBID | tail -c 4)) DIST_ARGS="--nproc_per_node=$PROC_PER_NODE \ --nnodes=$WORLD_SIZE_JOB \ --node_rank=$RANK_NODE \ --master_addr=$MASTER_ADDR \ --master_port=$MASTER_PORT \ " $TORCHRUN $DIST_ARGS $TRAINING_SCRIPT
    ヒント

    の自動再開機能を使用してハードウェア障害に対するトレーニングジョブの回復力を高める場合は SageMaker HyperPod、エントリポイントスクリプトMASTER_ADDRで 環境変数を適切に設定する必要があります。詳細については、「自動再開」を参照してください。

    このチュートリアルでは、このスクリプトが として保存されていることを前提としています/fsx/users/my_user/train.sh

  5. このスクリプトを の共有ボリュームで実行し/fsx/users/my_user/train.sh、次のsrunコマンドを実行して Slurm ジョブをスケジュールします。

    $ cd /fsx/users/my_user/ $ srun -N 8 train.sh