SageMaker モデル並列処理ライブラリ v2 を使用する - Amazon SageMaker

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

SageMaker モデル並列処理ライブラリ v2 を使用する

このページでは、 SageMaker モデル並列処理ライブラリ v2 を使用しAPIs、トレーニングプラットフォームまたは SageMaker HyperPod クラスターで PyTorch SageMaker完全シャードデータ並列 (FSDP) トレーニングジョブの実行を開始する方法について説明します。

SMP v2 で PyTorch トレーニングジョブを実行するには、さまざまなシナリオがあります。

  1. SageMaker トレーニングには、v2 で事前にパッケージ化された v2.0.1 SMP 以降の構築済みの SageMaker フレームワークコンテナ PyTorchのいずれかを使用します。

  2. SMP v2 バイナリファイルを使用して、 SageMaker HyperPod クラスターで分散トレーニングワークロードを実行するための Conda 環境を設定します。

  3. PyTorch v2.0.1 以降の構築済みの SageMaker フレームワークコンテナを拡張して、ユースケースの追加機能要件をインストールします。構築済みのコンテナを拡張する方法については、「」を参照してください構築済みコンテナを拡張する

  4. また、独自の 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、設定ディクショナリを使用して推定器クラスのオブジェクト SageMaker PyTorchを設定します。

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、次のように引distributionSMP v2 コア機能設定パラメータを使用して を設定します。

注記

SMP v2 distributionの設定は、v2.200 SDKから SageMaker Python に統合されています。 SageMaker Python v2.200 SDK 以降を使用していることを確認してください。

注記

SMP v2 では、推定器の distribution 引数torch_distributedsmdistributed SageMaker PyTorchを設定する必要があります。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_versionpy_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 を使用してワークロードを起動する手順に進みます。

  1. のディクショナリを含む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 }
  2. smp_config.json ファイルシステムのディレクトリにファイルをアップロードします。ディレクトリパスは、ステップ 1 で指定したパスと一致する必要があります。トレーニングスクリプトの設定ディクショナリをtorch.sagemaker.init()モジュールに既に渡している場合は、このステップをスキップできます。

  3. クラスターのコンピューティングノードで、次のコマンドを使用してターミナルセッションを開始します。

    sudo su -l ubuntu
  4. コンピューティングノードに 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 \ -c https://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 -q https://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
  5. テストトレーニングジョブを実行します。

    1. 共有ファイルシステム (/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
    2. sbatch 次のように を使用してジョブを送信します。

      conda activate <ENV_PATH> sbatch -N 16 conda_launch.sh

      ジョブの送信が成功した場合、このsbatchコマンドの出力メッセージは に似ているはずですSubmitted batch job ABCDEF

    3. の現在のディレクトリにあるログファイルを確認しますlogs/

      tail -f ./logs/fsdp_smp_ABCDEF.out