翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SageMaker HyperPod クラスターで Slurm ジョブをスケジュールする
トレーニングジョブは、標準の Slurm sbatch
または srun
コマンドを使用して起動できます。例えば、8 ノードのトレーニングジョブを起動するには、、、、 conda
などのさまざまな環境で がトレーニングsrun -N 8 --exclusive train.sh
SageMaker HyperPod をサポートしますvenv
docker
enroot
。 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
フォルダにあります。
-
Awsome Distributed Training GitHub リポジトリ
のクローンを作成し、トレーニングジョブの例を Amazon FSx ファイルシステムにコピーします。 $
TRAINING_DIR=
/fsx/users/my-user/fsdp
$
git clone https://github.com/aws-samples/awsome-distributed-training/
-
create_conda_env.sh
スクリプトを実行します。これにより、Amazon FSx ファイルシステムに conda
環境が作成されます。ファイルシステムがクラスター内のすべてのノードにアクセスできることを確認します。 -
次のように単一ノードの slurm ジョブを起動して、仮想 Conda 環境を構築します。
$
srun -N 1
/path_to/create_conda_env.sh
-
環境が構築されたら、共有ボリュームの環境パスを指定してトレーニングジョブを起動できます。単一ノードとマルチノードの両方のトレーニングジョブを同じセットアップで起動できます。ジョブを起動するには、次のようにジョブランチャースクリプト (エントリポイントスクリプトとも呼ばれます) を作成します。
#!/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
。 -
このスクリプトを の共有ボリュームで実行し
/fsx/users/my_user/train.sh
、次のsrun
コマンドを実行して Slurm ジョブをスケジュールします。$
cd /fsx/users/my_user/
$
srun -N 8 train.sh