翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SageMaker モデル並列処理ライブラリ v2 を使用する
このページでは、SageMaker モデル並列処理ライブラリ v2 の API の使い方と、SageMaker トレーニングプラットフォームまたは SageMaker HyperPod クラスターで PyTorch Fully Sharded Data Parallel (FSDP) トレーニングジョブの実行に着手する方法を説明します。
SMP v2 で PyTorch トレーニングジョブを実行する場合、さまざまなシナリオが考えられます。
-
SageMaker トレーニングでは、PyTorch v2.0.1 以降用の構築済みの SageMaker フレームワークコンテナのいずれかを使用します。これらのコンテナは、SMP v2 であらかじめパッケージ化されています。
-
SMP v2 バイナリファイルを使用して、SageMaker HyperPod クラスターで分散トレーニングワークロードを実行するための Conda 環境を設定します。
-
PyTorch v2.0.1 以降用の構築済みの SageMaker フレームワークコンテナを拡張して、ユースケースに合わせた追加の機能要件をインストールします。構築済みのコンテナを拡張する方法については、「構築済みコンテナを拡張する」を参照してください。
-
独自の Docker コンテナを持ち込み、SageMaker トレーニングツールキット
を使用して SageMaker トレーニング環境をすべて手動で設定し、SMP v2 バイナリファイルをインストールすることもできます。ただし、依存関係が複雑であるため、この選択肢は最も推奨されません。独自の Docker コンテナを実行する方法については、「独自のトレーニングコンテナの適応」を参照してください。
この入門ガイドでは、最初の 2 つのシナリオを扱います。
ステップ 1: PyTorch FSDP トレーニングスクリプトを適応させる
SMP v2 ライブラリを有効にして設定するには、まず、スクリプトの冒頭で torch.sagemaker.init()
モジュールをインポートして追加します。このモジュールは、「ステップ 2: トレーニングジョブを開始する」で準備する SMP v2 の主要機能の設定パラメータ の SMP 設定ディクショナリを取り込みます。また、SMP v2 のさまざまな主要機能を使用するには、トレーニングスクリプトを適応させるために、他にもいくつか変更が必要になる場合があります。SMP v2 の主要機能を使用するためにトレーニングスクリプトを適応させる具体的な手順については、「SageMaker モデル並列処理ライブラリ v2 の主要機能」を参照してください。
- SageMaker Training
-
トレーニングスクリプトで、次の 2 行のコードを追加します。SMP v2 でトレーニングを開始する場合、最低限この 2 行が必要です。「ステップ 2: トレーニングジョブを開始する」では、SageMaker
PyTorch
推定器クラスのオブジェクトを設定し、その推定器クラスのdistribution
引数に SMP 設定ディクショナリを指定します。import torch.sagemaker as tsm tsm.init()
注記
また、SMP v2 の主要機能の設定パラメータ の設定ディクショナリを
torch.sagemaker.init()
モジュールに直接渡すこともできます。ただし、「ステップ 2: トレーニングジョブを開始する」で PyTorch 推定器に渡されるパラメータが優先され、torch.sagemaker.init()
モジュールに指定されたパラメータは上書きされます。 - SageMaker HyperPod
-
トレーニングスクリプトで、次の 2 行のコードを追加します。「ステップ 2: トレーニングジョブを開始する」では、SMP 設定を JSON 形式で設定するための
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 SDK で PyTorch フレームワーク推定器
クラスのトレーニングジョブランチャーオブジェクトを設定するときに、以下に示すように、 distribution
引数を使用して SMP v2 の主要機能の設定パラメータ を設定します。注記
SMP v2 の
distribution
設定は、SageMaker Python SDK v2.200 以降に統合されています。必ず SageMaker Python SDK v2.200 以降を使用してください。注記
SMP v2 では、SageMaker
PyTorch
推定器のdistribution
引数でsmdistributed
とtorch_distributed
を設定する必要があります。ではtorch_distributed
、SageMaker AI はtorchrun
PyTorch Distributedのデフォルトのマルチノードジョブランチャーである を実行します。 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
} } } } )重要
最新バージョンではなく以前のバージョンの PyTorch または SMP を使用する場合は、
framework_version
とpy_version
のペアの代わりにimage_uri
引数を使用して SMP Docker イメージを直接指定する必要があります。次に例を示します。estimator = PyTorch( ..., image_uri="658645717510.dkr.ecr.us-west-2.amazonaws.com/smdistributed-modelparallel:2.2.0-gpu-py310-cu121" )
SMP Docker イメージ の URI の調べ方については、「サポートされるフレームワーク」を参照してください。
- SageMaker HyperPod
-
まず、次の前提条件が満たされていることを確認してください。
-
Amazon FSx 共有ディレクトリ (
/fsx
) が HyperPod クラスターにマウントされている。 -
FSx 共有ディレクトリに Conda がインストールされている。Conda のインストール方法については、「Conda User Guide」の「Installing on Linux
」の手順を参照してください。 -
HyperPod クラスターのヘッドノードとコンピューティングノードに
cuda11.8
またはcuda12.1
がインストールされている。
前提条件がすべて満たされている場合は、HyperPod クラスターで SMP v2 を使用してワークロードを開始する手順に進んでください。
-
SMP v2 の主要機能の設定パラメータ のディクショナリを含む
smp_config.json
ファイルを準備します。この 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、SMDDP、CUDA、その他の依存関係をインストールするスクリプトの例です。
# 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 Distributed Training 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
-
-