ステップ 2: SageMaker Python SDK を使用してトレーニングJob を起動する - Amazon SageMaker

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

ステップ 2: SageMaker Python SDK を使用してトレーニングJob を起動する

SageMaker Python SDK は、 TensorFlow PyTorchやなどの ML フレームワークによるモデルのマネージドトレーニングをサポートします。これらのフレームワークのいずれかを使用してトレーニングジョブを開始するには、 SageMaker TensorFlow SageMaker PyTorch 変更したトレーニングスクリプトとモデル並列処理設定を使用するエスティメーター、エスティメーター、 SageMaker または汎用エスティメーターを定義します

とエスティメータを使用する SageMaker TensorFlow PyTorch

TensorFlow および PyTorch estimator distribution クラスにはパラメータが含まれており、これを使用して分散型トレーニングフレームワークを使用するための設定パラメータを指定できます。 SageMaker モデルparallel ライブラリは、ハイブリッドデータとモデル並列処理に内部的に MPI を使用するため、ライブラリでは MPI オプションを使用する必要があります。

TensorFlow PyTorch 以下のまたは推定器のテンプレートは、MPI SageMaker でモデルparallel distribution ライブラリを使用するためのパラメーターを構成する方法を示しています。

Using the SageMaker TensorFlow estimator
import sagemaker from sagemaker.tensorflow import TensorFlow smp_options = { "enabled":True, # Required "parameters": { "partitions": 2, # Required "microbatches": 4, "placement_strategy": "spread", "pipeline": "interleaved", "optimize": "speed", "horovod": True, # Use this for hybrid model and data parallelism } } mpi_options = { "enabled" : True, # Required "processes_per_host" : 8, # Required # "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none" } smd_mp_estimator = TensorFlow( entry_point="your_training_script.py", # Specify your train script source_dir="location_to_your_script", role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.p3.16xlarge', framework_version='2.6.3', py_version='py38', distribution={ "smdistributed": {"modelparallel": smp_options}, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')
Using the SageMaker PyTorch estimator
import sagemaker from sagemaker.pytorch import PyTorch smp_options = { "enabled":True, "parameters": { # Required "pipeline_parallel_degree": 2, # Required "microbatches": 4, "placement_strategy": "spread", "pipeline": "interleaved", "optimize": "speed", "ddp": True, } } mpi_options = { "enabled" : True, # Required "processes_per_host" : 8, # Required # "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none" } smd_mp_estimator = PyTorch( entry_point="your_training_script.py", # Specify your train script source_dir="location_to_your_script", role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.p3.16xlarge', framework_version='1.13.1', py_version='py38', distribution={ "smdistributed": {"modelparallel": smp_options}, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')

このライブラリを有効にするには、Estimator "smdistributed" "mpi" distribution コンストラクターの引数を使用してコンフィギュレーションディクショナリをおよびキーに渡す必要があります。 SageMaker

モデル並列処理の設定パラメーター SageMaker
  • "smdistributed" キーについては、"modelparallel" キーと次の内部ディクショナリを含むディクショナリを渡します。

    注記

    1 つのトレーニングジョブでの "modelparallel""dataparallel" の使用はサポートされていません。

    • "enabled" – 必須。モデル並列処理を有効にするには、 "enabled": True を設定します。

    • "parameters" – 必須。モデル並列処理の一連のパラメーターを指定します。 SageMaker

  • "mpi" キーには、以下を含むディクショナリを渡します。

    • "enabled" – 必須。MPI で分散型トレーニングジョブを開始するように True を設定します。

    • "processes_per_host" – 必須。各ホストで MPI が起動するプロセスの数を指定します。では SageMaker、ホストは単一の Amazon EC2 ML インスタンスです。 SageMaker Python SDK は、モデルとデータの並列処理全体にわたってプロセスと GPU one-to-one 間のマッピングを維持します。つまり、各プロセスを 1 つの別々の GPU SageMaker にスケジュールし、GPU に複数のプロセスが含まれることはありません。を使用している場合は PyTorch、各プロセスを専用のデバイスに限定する必要があります。torch.cuda.set_device(smp.local_rank())詳細については、「による自動分割 PyTorch」を参照してください。

      重要

      process_per_host は、インスタンスあたりの GPU の数を超えてはならず、通常はインスタンスあたりの GPU の数と等しくなります。

    • "custom_mpi_options" (オプション) - このキーを使って、必要なカスタム MPI オプションがあればそれを渡します。MPI カスタムオプションを何もキーに渡さない場合、MPI オプションはデフォルトで次のフラグに設定されます。

      --mca btl_vader_single_copy_mechanism none
      注記

      このデフォルトフラグをキーに明示的に指定する必要はありません。明示的に指定すると、分散モデル並列トレーニングジョブが次のエラーで失敗する可能性があります。

      The following MCA parameter has been listed multiple times on the command line: MCA param: btl_vader_single_copy_mechanism MCA parameters can only be listed once on a command line to ensure there is no ambiguity as to its value. Please correct the situation and try again.
      ヒント

      ml.p4d.24xlargeml.p3dn.24xlarge などの EFA 対応のインスタンスタイプを使ってトレーニングジョブを起動する場合、次のフラグを使用するとベストパフォーマンスが得られます。

      -x FI_EFA_USE_DEVICE_RDMA=1 -x FI_PROVIDER=efa -x RDMAV_FORK_SAFE=1

SageMaker 推定器とモデルのparallel 構成トレーニングスクリプトを使用してトレーニングジョブを起動するには、関数を実行します。estimator.fit()

Python SDK のモデル並列処理機能の使用方法の詳細については、以下のリソースを参照してください。 SageMaker

SageMakerの分散モデル並列ライブラリを含むビルド済みの Docker コンテナを拡張します。

ビルド済みのコンテナーを拡張してそのモデル並列処理ライブラリを使用するには SageMaker、 AWS またはに使用できるDeep Learning Containers (DLC) イメージのいずれかを使用する必要があります。 PyTorch TensorFlow SageMaker モデル並列処理ライブラリは CUDA () の DLC イメージ TensorFlow (2.3.0 以降) および PyTorch (1.6.0 以降) に含まれています。cuxyzDLC イメージの完全なリストについては、 GitHub ディープラーニングコンテナーリポジトリの「利用可能なDeep Learning Containers ナーイメージ」を参照してください。AWS

ヒント

TensorFlowモデル並列処理ライブラリの最新バージョンを含むイメージを使用するか PyTorch 、 up-to-date SageMaker ほとんどのバージョンのモデル並列処理ライブラリにアクセスすることをお勧めします。

例えば、Dockerfile は次と同じような FROM ステートメントを含むことになります。

# Use the SageMaker DLC image URI for TensorFlow or PyTorch FROM aws-dlc-account-id.dkr.ecr.aws-region.amazonaws.com/framework-training:{framework-version-tag} # Add your dependencies here RUN ... ENV PATH="/opt/ml/code:${PATH}" # this environment variable is used by the SageMaker container to determine our user code directory. ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code

さらに、OR PyTorch TensorFlow Estimator を定義するときは、トレーニングスクリプト用にそれを指定する必要があります。entry_pointこれは、Dockerfile の ENV SAGEMAKER_SUBMIT_DIRECTORY で識別されるパスと同じにしてください。

ヒント

この Docker コンテナを Amazon Elastic Container Registry (Amazon ECR) にプッシュし、イメージ URI (image_uri) SageMaker を使用してトレーニング用の見積もりを定義する必要があります。詳細については、「構築済みコンテナを拡張する」を参照してください。

Docker コンテナのホスティングとコンテナのイメージ URI の取得が完了したら、次のように見積もりオブジェクトを作成します。 SageMaker PyTorchこの例では、smp_optionsmpi_options が既に定義されていることを前提としています。

smd_mp_estimator = Estimator( entry_point="your_training_script.py", role=sagemaker.get_execution_role(), instance_type='ml.p3.16xlarge', sagemaker_session=sagemaker_session, image_uri='your_aws_account_id.dkr.ecr.region.amazonaws.com/name:tag' instance_count=1, distribution={ "smdistributed": smp_options, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')

分散モデル並列ライブラリを使用して独自の Docker コンテナを作成します。 SageMaker

トレーニング用に独自の Docker コンテナを構築し、 SageMaker モデルparallel ライブラリを使用するには、 SageMaker分散parallel ライブラリの正しい依存関係とバイナリファイルを Dockerfile に含める必要があります。このセクションでは、 SageMaker トレーニング環境とモデルparallel ライブラリを独自の Docker コンテナに適切に準備するために含める必要のある最小限のコードブロックセットについて説明します。

注記

SageMaker モデルparallel ライブラリをバイナリとするこのカスタム Docker オプションは、でのみ使用できます PyTorch。

SageMaker トレーニングツールキットとモデルparallel ライブラリを含む Dockerfile を作成するには
  1. NVIDIA CUDA ベースイメージの 1 つから始めます。

    FROM <cuda-cudnn-base-image>
    ヒント

    AWS 公式のディープラーニングコンテナ (DLC) イメージは NVIDIA CUDA ベースイメージから構築されます。AWS Deep Learning Container の公式 Dockerfiles を調べて、インストールする必要のあるライブラリのバージョンと設定方法を確認することをお勧めします。 PyTorch公式の Dockerfile は、およびディープラーニングコンテナサービスチームによって完成され、ベンチマークテストされ、管理されています。 SageMaker 表示されたリンクで、 PyTorch使用するバージョンを選択し、CUDA (cuxyz) フォルダーを選択し、末尾がまたはの Dockerfile を選択します。.gpu .sagemaker.gpu

  2. 分散型トレーニング環境を設定するには、Elastic Fabric Adapter (EFA)NVIDIA Collective Communications Library (NCCL)Open MPI などの通信およびネットワークデバイス用のソフトウェアをインストールする必要があります。選択する CUDA PyTorch のバージョンによっては、互換性のあるバージョンのライブラリをインストールする必要があります。

    重要

    SageMaker モデルparallel SageMaker ライブラリでは以降の手順でデータparallel ライブラリが必要になるため、 SageMaker の指示に従って分散トレーニング用のトレーニング環境を適切に設定することを強くお勧めします。 SageMaker 分散データparallel ライブラリを使用して独自の Docker コンテナを作成

    NCCL と Open MPI を使用した EFA の設定の詳細については、「EFA と MPI の開始方法」と「EFA とNCCL の開始方法」を参照してください。

  3. 次の引数を追加して、 SageMaker の分散型トレーニングパッケージの URL を指定します PyTorch。 SageMaker モデルparallel ライブラリでは、 SageMaker データparallel ライブラリがノード間のリモートダイレクトメモリアクセス (RDMA) を使用する必要があります。

    ARG SMD_MODEL_PARALLEL_URL=https://sagemaker-distributed-model-parallel.s3.us-west-2.amazonaws.com/pytorch-1.10.0/build-artifacts/2022-02-21-19-26/smdistributed_modelparallel-1.7.0-cp38-cp38-linux_x86_64.whl ARG SMDATAPARALLEL_BINARY=https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.10.2/cu113/2022-02-18/smdistributed_dataparallel-1.4.0-cp38-cp38-linux_x86_64.whl
  4. SageMaker モデルparallel ライブラリに必要な依存関係をインストールします。

    1. METIS ライブラリをインストールします。

      ARG METIS=metis-5.1.0 RUN rm /etc/apt/sources.list.d/* \ && wget -nv http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/${METIS}.tar.gz \ && gunzip -f ${METIS}.tar.gz \ && tar -xvf ${METIS}.tar \ && cd ${METIS} \ && apt-get update \ && make config shared=1 \ && make install \ && cd .. \ && rm -rf ${METIS}.tar* \ && rm -rf ${METIS} \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean
    2. RAPIDS メモリマネージャーライブラリをインストールします。これには CMake 3.14 以降が必要です。

      ARG RMM_VERSION=0.15.0 RUN wget -nv https://github.com/rapidsai/rmm/archive/v${RMM_VERSION}.tar.gz \ && tar -xvf v${RMM_VERSION}.tar.gz \ && cd rmm-${RMM_VERSION} \ && INSTALL_PREFIX=/usr/local ./build.sh librmm \ && cd .. \ && rm -rf v${RMM_VERSION}.tar* \ && rm -rf rmm-${RMM_VERSION}
  5. SageMaker モデルparallel ライブラリをインストールします。

    RUN pip install --no-cache-dir -U ${SMD_MODEL_PARALLEL_URL}
  6. SageMaker データparallel ライブラリをインストールします。

    RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
  7. sagemaker-training-toolkit をインストールします。ツールキットには、 SageMaker トレーニングプラットフォームと SageMaker Python SDK と互換性のあるコンテナを作成するために必要な共通機能が含まれています。

    RUN pip install sagemaker-training
  8. Dockerfile の作成が完了したら、「Adapting Your Own Training Container」を参照して、Docker コンテナを構築し、Amazon ECR でホストする方法について確認してください。

ヒント

トレーニング用のカスタム Dockerfile の作成に関する一般的な情報については SageMaker、「独自のトレーニングアルゴリズムの使用」を参照してください。