翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SageMaker モデル並列処理ライブラリ v2 を使用する
このページでは、 SageMaker モデル並列処理ライブラリ v2 を使用しAPIs、トレーニングプラットフォームまたは SageMaker HyperPod クラスターで PyTorch SageMaker完全シャードデータ並列 (FSDP) トレーニングジョブの実行を開始する方法について説明します。
SMP v2 で PyTorch トレーニングジョブを実行するには、さまざまなシナリオがあります。
-
SageMaker トレーニングには、v2 で事前にパッケージ化された v2.0.1 SMP 以降の構築済みの SageMaker フレームワークコンテナ PyTorchのいずれかを使用します。
-
SMP v2 バイナリファイルを使用して、 SageMaker HyperPod クラスターで分散トレーニングワークロードを実行するための Conda 環境を設定します。
-
PyTorch v2.0.1 以降の構築済みの SageMaker フレームワークコンテナを拡張して、ユースケースの追加機能要件をインストールします。構築済みのコンテナを拡張する方法については、「」を参照してください構築済みコンテナを拡張する。
-
また、独自の Docker コンテナを持ち込み、トレーニングツールキットを使用してすべての SageMakerトレーニング環境を手動でセットアップし、v2 SMP バイナリファイルをインストールすることもできます。 SageMaker
これは、依存関係が複雑であるため、最も推奨されないオプションです。独自の Docker コンテナを実行する方法については、「独自のトレーニングコンテナの適応」を参照してください。
この入門ガイドでは、最初の 2 つのシナリオについて説明します。
ステップ 1: トレーニングスクリプトを調整する PyTorch FSDP
SMP v2 ライブラリをアクティブ化して設定するには、まずスクリプトの上部にtorch.sagemaker.init()
モジュールをインポートして追加します。このモジュールは、 で準備SMP v2 コア機能設定パラメータする SMPの設定ディクショナリを取り込みますステップ 2: トレーニングジョブを起動する。また、v2 SMP が提供するさまざまなコア機能を使用するには、トレーニングスクリプトを適応させるためにさらにいくつかの変更を加える必要がある場合があります。SMP v2 コア機能を使用するようにトレーニングスクリプトを適応させる詳細な手順については、「」を参照してください SageMaker モデル並列処理ライブラリ v2 のコア機能。
- SageMaker Training
-
トレーニングスクリプトで、次の 2 行のコードを追加します。これは v2 SMP でトレーニングを開始する最小要件です。ではステップ 2: トレーニングジョブを起動する、推定器クラスの
distribution
引数を使用してSMP、設定ディクショナリを使用して推定器クラスのオブジェクト SageMakerPyTorch
を設定します。import torch.sagemaker as tsm tsm.init()
注記
また、 の設定ディクショナリSMP v2 コア機能設定パラメータを
torch.sagemaker.init()
モジュールに直接渡すこともできます。ただし、 で PyTorch 推定器に渡されたパラメータがステップ 2: トレーニングジョブを起動する優先され、torch.sagemaker.init()
モジュールに指定されたパラメータが上書きされます。 - SageMaker HyperPod
-
トレーニングスクリプトで、次の 2 行のコードを追加します。ではステップ 2: トレーニングジョブを起動する、 JSON形式のSMP設定を設定するための
smp_config.json
ファイルを設定し、 SageMaker HyperPod クラスターにマッピングされたストレージまたはファイルシステムにアップロードします。設定ファイルは、トレーニングスクリプトをアップロードするディレクトリと同じディレクトリに保持することをお勧めします。import torch.sagemaker as tsm tsm.init("
/dir_to_training_files/smp_config.json
")注記
また、 の設定ディクショナリSMP v2 コア機能設定パラメータを
torch.sagemaker.init()
モジュールに直接渡すこともできます。
ステップ 2: トレーニングジョブを起動する
SMP コア機能を使用してトレーニングジョブを起動 PyTorch FSDPするためのSMPディストリビューションオプションを設定する方法について説明します。
- SageMaker Training
-
SageMaker Python でPyTorch フレームワーク推定器
クラスのトレーニングジョブランチャーオブジェクトを設定するときはSDK、次のように引 distribution
数SMP v2 コア機能設定パラメータを使用して を設定します。注記
SMP v2
distribution
の設定は、v2.200 SDKから SageMaker Python に統合されています。 SageMaker Python v2.200 SDK 以降を使用していることを確認してください。注記
SMP v2 では、推定器の
distribution
引数torch_distributed
にsmdistributed
SageMakerPyTorch
を設定する必要があります。torch_distributed
では、PyTorch 分散のデフォルトのマルチノードジョブランチャー torchrun
である SageMaker を実行します。from sagemaker.pytorch import PyTorch estimator = PyTorch( framework_version=
2.2.0
, py_version="310
" # image_uri="<smp-docker-image-uri>" # For using prior versions, specify the SMP image URI directly. entry_point="your-training-script.py
", # Pass the training script you adapted with SMP from Step 1. ... # Configure other required and optional parameters distribution={ "torch_distributed": { "enabled": True }, "smdistributed": { "modelparallel": { "enabled": True, "parameters": { "hybrid_shard_degree":Integer
, "sm_activation_offloading":Boolean
, "activation_loading_horizon":Integer
, "fsdp_cache_flush_warnings":Boolean
, "allow_empty_shards":Boolean
, "tensor_parallel_degree":Integer
, "expert_parallel_degree":Integer
, "random_seed":Integer
} } } } )重要
最新バージョンSMPの代わりに PyTorch または の以前のバージョンを使用する場合は、
framework_version
とpy_version
ペアの代わりにimage_uri
引数を使用して Docker SMP イメージを直接指定する必要があります。以下は、 の例です。estimator = PyTorch( ..., image_uri="658645717510.dkr.ecr.us-west-2.amazonaws.com/smdistributed-modelparallel:2.2.0-gpu-py310-cu121" )
SMP Docker イメージ を検索するにはURIs、「」を参照してくださいサポートされるフレームワーク。
- SageMaker HyperPod
-
開始する前に、以下の前提条件を満たしていることを確認してください。
-
HyperPod クラスターにマウントされた Amazon FSx共有ディレクトリ (
/fsx
)。 -
Conda がFSx共有ディレクトリにインストールされました。Conda をインストールする方法については、Conda ユーザーガイドの Linux へのインストール
の手順を参照してください。 -
cuda11.8
または を HyperPod クラスターのヘッドノードとコンピューティングノードにcuda12.1
インストールします。
前提条件がすべて満たされている場合は、クラスターで HyperPod v2 SMP を使用してワークロードを起動する手順に進みます。
-
のディクショナリを含む
smp_config.json
ファイルを準備しますSMP v2 コア機能設定パラメータ。このJSONファイルをトレーニングスクリプトを保存する場所にアップロードするか、ステップ 1 でtorch.sagemaker.init()
モジュールに指定したパスにアップロードしてください。ステップ 1 のトレーニングスクリプトで設定ディクショナリをtorch.sagemaker.init()
モジュールに既に渡している場合は、このステップをスキップできます。// smp_config.json { "hybrid_shard_degree":
Integer
, "sm_activation_offloading":Boolean
, "activation_loading_horizon":Integer
, "fsdp_cache_flush_warnings":Boolean
, "allow_empty_shards":Boolean
, "tensor_parallel_degree":Integer
, "expert_parallel_degree":Integer
, "random_seed":Integer
} -
smp_config.json
ファイルシステムのディレクトリにファイルをアップロードします。ディレクトリパスは、ステップ 1 で指定したパスと一致する必要があります。トレーニングスクリプトの設定ディクショナリをtorch.sagemaker.init()
モジュールに既に渡している場合は、このステップをスキップできます。 -
クラスターのコンピューティングノードで、次のコマンドを使用してターミナルセッションを開始します。
sudo su -l ubuntu
-
コンピューティングノードに Conda 環境を作成します。次のコードは、Conda 環境を作成し、SMP、、SMDDPCUDA、およびその他の依存関係をインストールするスクリプトの例です。
# Run on compute nodes SMP_CUDA_VER=
<11.8 or 12.1>
source /fsx/<path_to_miniconda>
/miniconda3/bin/activate export ENV_PATH=/fsx/<path to miniconda>/miniconda3/envs/<ENV_NAME>
conda create -p ${ENV_PATH} python=3.10 conda activate ${ENV_PATH} # Verify aws-cli is installed: Expect something like "aws-cli/2.15.0*" aws ‐‐version # Install aws-cli if not already installed # https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html#cliv2-linux-install # Install the SMP library conda install pytorch="2.0.1=sm_py3.10_cuda
${SMP_CUDA_VER}*" packaging ‐‐override-channels \ -chttps://sagemaker-distributed-model-parallel.s3.us-west-2.amazonaws.com/smp-2.0.0-pt-2.0.1/2023-12-11/smp-v2/
\ -c pytorch -c numba/label/dev \ -c nvidia -c conda-forge # Install dependencies of the script as below python -m pip install packaging transformers==4.31.0 accelerate ninja tensorboard h5py datasets \ && python -m pip install expecttest hypothesis \ && python -m pip install "flash-attn>=2.0.4" ‐‐no-build-isolation # Install the SMDDP wheel SMDDP_WHL="smdistributed_dataparallel-2.0.2-cp310-cp310-linux_x86_64.whl
" \ && wget -qhttps://smdataparallel.s3.amazonaws.com/binary/pytorch/2.0.1/cu118/2023-12-07/
${SMDDP_WHL} \ && pip install ‐‐force ${SMDDP_WHL} \ && rm ${SMDDP_WHL} # cuDNN installation for Transformer Engine installation for CUDA 11.8 # Please download from below link, you need to agree to terms # https://developer.nvidia.com/downloads/compute/cudnn/secure/8.9.5/local_installers/11.x/cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz tar xf cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz \ && rm -rf /usr/local/cuda-$SMP_CUDA_VER/include/cudnn* /usr/local/cuda-$SMP_CUDA_VER/lib/cudnn* \ && cp ./cudnn-linux-x86_64-8.9.5.30_cuda11-archive/include/* /usr/local/cuda-$SMP_CUDA_VER/include/ \ && cp ./cudnn-linux-x86_64-8.9.5.30_cuda11-archive/lib/* /usr/local/cuda-$SMP_CUDA_VER/lib/ \ && rm -rf cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz \ && rm -rf cudnn-linux-x86_64-8.9.5.30_cuda11-archive/ # Please download from below link, you need to agree to terms # https://developer.download.nvidia.com/compute/cudnn/secure/8.9.7/local_installers/12.x/cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz \ # cuDNN installation for TransformerEngine installation for cuda12.1 tar xf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz \ && rm -rf /usr/local/cuda-$SMP_CUDA_VER/include/cudnn* /usr/local/cuda-$SMP_CUDA_VER/lib/cudnn* \ && cp ./cudnn-linux-x86_64-8.9.7.29_cuda12-archive/include/* /usr/local/cuda-$SMP_CUDA_VER/include/ \ && cp ./cudnn-linux-x86_64-8.9.7.29_cuda12-archive/lib/* /usr/local/cuda-$SMP_CUDA_VER/lib/ \ && rm -rf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz \ && rm -rf cudnn-linux-x86_64-8.9.7.29_cuda12-archive/ # TransformerEngine installation export CUDA_HOME=/usr/local/cuda-$SMP_CUDA_VER export CUDNN_PATH=/usr/local/cuda-$SMP_CUDA_VER/lib export CUDNN_LIBRARY=/usr/local/cuda-$SMP_CUDA_VER/lib export CUDNN_INCLUDE_DIR=/usr/local/cuda-$SMP_CUDA_VER/include export PATH=/usr/local/cuda-$SMP_CUDA_VER/bin:$PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-$SMP_CUDA_VER/lib python -m pip install ‐‐no-build-isolation git+https://github.com/NVIDIA/TransformerEngine.git@v1.0 -
テストトレーニングジョブを実行します。
-
共有ファイルシステム (
/fsx
) で、Awsome 分散トレーニング GitHub リポジトリ をクローンし、 3.test_cases/11.modelparallel
フォルダに移動します。git clone https://github.com/aws-samples/awsome-distributed-training/ cd awsome-distributed-training/3.test_cases/11.modelparallel
-
sbatch
次のように を使用してジョブを送信します。conda activate <ENV_PATH> sbatch -N 16 conda_launch.sh
ジョブの送信が成功した場合、この
sbatch
コマンドの出力メッセージは に似ているはずですSubmitted batch job ABCDEF
。 -
の現在のディレクトリにあるログファイルを確認します
logs/
。tail -f ./logs/
fsdp_smp_ABCDEF.out
-
-