SageMaker マネージドウォームプールを使用したトレーニング - Amazon SageMaker

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

SageMaker マネージドウォームプールを使用したトレーニング

SageMaker マネージドウォームプールを使用すると、トレーニングジョブの完了後にプロビジョニングされたインフラストラクチャを保持して再利用できるため、反復実験や多数のジョブの連続実行など、反復的なワークロードのレイテンシーを短縮できます。指定されたパラメータに一致する後続のトレーニングジョブは、保持されているウォームプールインフラストラクチャ上で実行されます。これにより、リソースのプロビジョニングに費やす時間が減り、起動時間が短縮されます。

重要

SageMaker マネージドウォームプールは請求可能なリソースです。詳細については、「「請求」」を参照してください。

仕組み

SageMaker マネージドウォームプールを使用し、同様の連続トレーニングジョブ間のレイテンシーを減らすには、 でKeepAlivePeriodInSeconds値を指定するトレーニングジョブを作成しますResourceConfig。この値は、設定したリソースを以降のトレーニングジョブのためにウォームプールに保持する時間を秒単位で表します。同じような構成で複数のトレーニングジョブを実行する必要がある場合、専用の永続キャッシュディレクトリを使用して情報を保存し、別のジョブで再利用することで、レイテンシーと課金対象時間をさらに短縮できます。

ウォームプールのライフサイクル

  1. KeepAlivePeriodInSeconds 値が 0 より大きい最初のトレーニングジョブを作成します。この最初のトレーニングジョブを実行すると、通常の起動時間でクラスターが「コールドスタート」されます。

  2. 最初のトレーニングジョブが完了すると、プロビジョニングされたリソースは、KeepAlivePeriodInSeconds 値に指定された期間、ウォームプールに保持されます。クラスターが正常で、ウォームプールが指定の KeepAlivePeriodInSeconds の範囲内にある間は、ウォームプールのステータスは Available になります。

  3. ウォームプールは、一致するトレーニングジョブを見つけて再利用するか、指定された KeepAlivePeriodInSeconds を超えて終了するまで Available のままです。KeepAlivePeriodInSeconds に許容される最大時間は 3600 秒 (60 分) です。ウォームプールのステータスが Terminated の場合、ウォームプールのライフサイクルは終了します。

  4. ウォームプールが、インスタンス数やインスタンスタイプなどの仕様が一致する 2 つ目のトレーニングジョブを識別した場合、ウォームプールは最初のトレーニングジョブから 2 番目のトレーニングジョブに移動して再利用します。1 つ目のトレーニングジョブのウォームプールのステータスは Reused になります。これで、最初のトレーニングジョブのウォームプールのライフサイクルは終了します。

  5. ウォームプールを再利用した 2 つ目のトレーニングジョブのステータスは InUse になります。2 つ目のトレーニングジョブが完了すると、ウォームプールは 2 つ目のトレーニングジョブで指定された KeepAlivePeriodInSeconds 期間だけ Available になります。ウォームプールは、最大 28 日間、対応するトレーニングジョブに引き続き移行できます。

  6. ウォームプールが再利用できなくなった場合、ウォームプールのステータスは Terminated になります。ウォームプールは、ユーザーによって終了されたり、パッチアップデートのため終了されたり、指定された KeepAlivePeriodInSeconds を超えたりすると使用できなくなります。

ウォームプールのステータスオプションの詳細については、「Amazon SageMaker API リファレンスWarmPoolStatus」の「」を参照してください。

ウォームプールの作成

最初のトレーニングジョブが正常に完了し、KeepAlivePeriodInSeconds 値が 0 より大きい場合は、ウォームプールが作成されます。クラスターが既に起動した後でトレーニングジョブを停止しても、ウォームプールは保持されます。アルゴリズムまたはクライアントのエラーによりトレーニングジョブが失敗した場合でも、ウォームプールは保持されます。クラスターの状態を損なう可能性のあるその他の理由でトレーニングジョブが失敗した場合、ウォームプールは作成されません。

ウォームプールが正常に作成されたことを確認するには、トレーニングジョブのウォームプールのステータスを確認します。ウォームプールのプロビジョニングが成功すると、ウォームプールのステータスは Available になります。ウォームプールがプロビジョニングに失敗した場合、ウォームプールのステータスは Terminated になります。

トレーニングジョブのマッチング

ウォームプールを維持するには、KeepAlivePeriodInSeconds 値に指定された時間内に一致するトレーニングジョブを見つける必要があります。次の値が同じであれば、次のトレーニングジョブは一致します。

  • RoleArn

  • ResourceConfig 値:

    • InstanceCount

    • InstanceType

    • VolumeKmsKeyId

    • VolumeSizeInGB

  • VpcConfig 値:

    • SecurityGroupIds

    • Subnets

  • EnableInterContainerTrafficEncryption

  • EnableNetworkIsolation

  • トレーニングジョブの を EnableSessionTagChainingに設定してトレーニングジョブTrueセッションタグを渡した場合SessionChainingConfig、一致するトレーニングジョブも EnableSessionTagChainingを に設定Trueし、同じセッションキーを持つ必要があります。詳細については、「マルチテナンシートレーニングの属性ベースのアクセスコントロール (ABAC)」を参照してください。

ウォームプールを次のトレーニングジョブに移動して再利用するには、これらの値がすべて同じである必要があります。

ウォームプールの最大持続時間

1 つのトレーニングジョブの最大 KeepAlivePeriodInSeconds は 3600 秒 (60 分) で、ウォームプールクラスターが連続してトレーニングジョブを実行し続けることができる最大時間は 28 日間です。

それ以降の各トレーニングジョブでも KeepAlivePeriodInSeconds 値を指定する必要があります。ウォームプールが次のトレーニングジョブに移動すると、そのトレーニングジョブの ResourceConfig で指定された新しい KeepAlivePeriodInSeconds 値が継承されます。これにより、ウォームプールをトレーニングジョブからトレーニングジョブへと最大 28 日間移動させ続けることができます。

KeepAlivePeriodInSeconds が指定されていない場合、ウォームプールはトレーニングジョブの完了後にスピンダウンします。

永続キャッシュを使用する

ウォームプールを作成すると、 はウォームプールのライフサイクルを通じて保持される特別なディレクトリをボリュームに SageMaker マウントします。このディレクトリには、別のジョブで再利用する情報を保存するのにも使用できます。

永続キャッシュを使用すると、以下を必要とするジョブでウォームプールだけを使用する場合よりもレイテンシーと課金対象時間を短縮できます。

  • 類似の設定での複数のやりとり

  • 段階的トレーニングジョブ

  • ハイパーパラメータの最適化

例えば、永続キャッシュディレクトリ内に pip キャッシュディレクトリを設定することで、繰り返し実行する際に同じ Python 依存関係をダウンロードすることを回避できます。このディレクトリの内容を管理する責任は、すべてユーザーにあります。レイテンシーと請求対象時間を短縮するために永続キャッシュに入れることができる情報の種類の例を以下に示します。

  • pip によって管理される依存関係。

  • conda によって管理される依存関係。

  • チェックポイント情報

  • トレーニング中に生成されたその他の情報。

永続キャッシュの場所は /opt/ml/sagemaker/warmpoolcache です。環境変数 SAGEMAKER_MANAGED_WARMPOOL_CACHE_DIRECTORY は永続キャッシュディレクトリの場所を指します。

以下のコード例は、ウォームプールを設定し、永続キャッシュを使用して pip の依存関係を保存して後続のジョブで使用する方法を示しています。後続のジョブは、パラメータ keep_alive_period_in_seconds で指定された時間枠内で実行する必要があります。

import sagemakerfrom sagemaker import get_execution_rolefrom sagemaker.tensorflow import TensorFlow # Creates a SageMaker session and gets execution role session = sagemaker.Session() role = get_execution_role() # Creates an example estimator estimator = TensorFlow( ... entry_point='my-training-script.py', source_dir='code', role=role, model_dir='model_dir', framework_version='2.2', py_version='py37', job_name='my-training-job-1', instance_type='ml.g4dn.xlarge', instance_count=1, volume_size=250, hyperparameters={ "batch-size": 512, "epochs": 1, "learning-rate": 1e-3, "beta_1": 0.9, "beta_2": 0.999, }, keep_alive_period_in_seconds=1800, environment={"PIP_CACHE_DIR": "/opt/ml/sagemaker/warmpoolcache/pip"} )

前のコード例では、環境パラメータを使用してディレクトリ /opt/ml/sagemaker/warmpoolcache/pip を指すように環境変数 PIP_CACHE_DIRECTORY をエクスポートします。この環境変数をエクスポートすると、pip がキャッシュを保存する場所が新しい場所に変わります。永続キャッシュディレクトリ内に作成したすべてのディレクトリ (ネストされたディレクトリを含む) は、その後のトレーニング実行時に再利用できます。前のコード例では、pip というディレクトリが、pip を使用してインストールされた依存関係をキャッシュするデフォルトの場所に変更されています。

永続キャッシュの場所には、次のコード例に示すように、環境変数を使用して Python トレーニングスクリプト内からアクセスすることもできます。

import os import shutil if __name__ == '__main__': PERSISTED_DIR = os.environ["SAGEMAKER_MANAGED_WARMPOOL_CACHE_DIRECTORY"] # create a file to be persisted open(os.path.join(PERSISTED_DIR, "test.txt"), 'a').close() # create a directory to be persisted os.mkdir(os.path.join(PERSISTED_DIR, "test_dir")) # Move a file to be persisted shutil.move("path/of/your/file.txt", PERSISTED_DIR)

「請求」

SageMaker マネージドウォームプールは請求可能なリソースです。トレーニングジョブのウォームプールのステータスを取得して、ウォームプールの請求対象時間を確認できます。ウォームプールのステータスは、 または DescribeTrainingJob API コマンドAmazon SageMaker コンソールの使用から直接確認できます。詳細については、「Amazon SageMaker API リファレンスWarmPoolStatus」の「」を参照してください。

注記

パラメータ KeepAlivePeriodInSeconds で指定された時間が経過すると、ウォームプールと永続キャッシュの両方がシャットダウンされ、内容は削除されます。

ウォームプールのリソース制限

開始するには、まず SageMaker マネージドウォームプールのサービス制限の引き上げをリクエストする必要があります。ウォームプールのデフォルトリソース制限は 0 です。

KeepAlivePeriodInSeconds を指定してトレーニングジョブを作成したが、ウォームプールの制限の引き上げをリクエストしなかった場合、ウォームプールはトレーニングジョブの完了後に保持されません。ウォームプールは、ウォームプールの制限に十分なリソースがある場合にのみ作成されます。ウォームプールが作成されると、リソースは一致するトレーニングジョブに移動したとき、または KeepAlivePeriodInSeconds の期限が切れたとき (ウォームプールのステータスが Reused または Terminated の場合) にリリースされます。

ウォームプールのクォータの引き上げをリクエストする

AWS Service Quotas コンソールを使用してウォームプールのクォータの引き上げをリクエストします。

注記

ウォームプールインスタンスの使用はすべて、 SageMaker トレーニングリソースの制限にカウントされます。ウォームプールのリソース制限を増やしてもインスタンス制限は増加しませんが、リソース制限の一部がウォームプールトレーニングに割り当てられます。

  1. AWS Service Quotas コンソールを開きます。

  2. 左側のナビゲーションパネルで、[AWS のサービス] を選択します。

  3. Amazon SageMaker を検索して選択します。

  4. キーワード warm pool を検索すると、利用可能なすべてのウォームプールサービスクォータが表示されます。

  5. ウォームプールのクォータを増やしたいインスタンスタイプを見つけ、そのインスタンスタイプのウォームプールサービスクォータを選択し、[クォータの引き上げをリクエストする] を選択します。

  6. [クォータ値の変更] に、リクエストしたインスタンス制限数を入力します。新しい値は現在の適用されたクォータ値より大きくなければなりません。

  7. [リクエスト] を選択します。

アカウントごとに保持できるインスタンス数には制限があり、インスタンスタイプで決まります。リソースの制限は、AWS Service Quotas コンソールで確認することも、list-service-quotas AWS CLI コマンドを使用して直接確認することもできます。 AWS Service Quotas の詳細については、「Service Quotas ユーザーガイド」の「クォータの引き上げのリクエスト」を参照してください。

AWS サポートセンターを使用して、クォータの引き上げをリクエストすることもできます。リージョン別の使用可能なインスタンスタイプのリストについては、「Amazon の SageMaker 料金」を参照し、「オンデマンド料金表」の「トレーニング」を選択します。

SageMaker マネージドウォームプールの使用方法

SageMaker マネージドウォームプールは、 SageMaker Python SDK、Amazon SageMaker コンソール、または低レベル APIsから使用できます。管理者はオプションで sagemaker:KeepAlivePeriod 条件キーを使用して、特定のユーザーまたはグループの KeepAlivePeriodInSeconds 制限をさらに制限できます。

SageMaker Python SDK の使用

SageMaker Python SDK を使用してウォームプールを作成、更新、または終了します。

注記

この機能は、 SageMaker Python SDK v2.110.0 以降で使用できます。

ウォームプールを作成する

ウォームプールを作成するには、 SageMaker Python SDK を使用して 0 より大きいkeep_alive_period_in_seconds値を持つ推定器を作成し、 を呼び出しますfit()。トレーニングジョブが完了すると、ウォームプールは保持されます。トレーニングスクリプトと推定器の詳細については、 SageMaker 「Python SDK を使用してモデルをトレーニングする」を参照してください。スクリプトでウォームプールが作成されない場合は、「ウォームプールの作成」の考えられる説明を参照してください。

import sagemaker from sagemaker import get_execution_role from sagemaker.tensorflow import TensorFlow # Creates a SageMaker session and gets execution role session = sagemaker.Session() role = get_execution_role() # Creates an example estimator estimator = TensorFlow( ... entry_point='my-training-script.py', source_dir='code', role=role, model_dir='model_dir', framework_version='2.2', py_version='py37', job_name='my-training-job-1', instance_type='ml.g4dn.xlarge', instance_count=1, volume_size=250, hyperparameters={ "batch-size": 512, "epochs": 1, "learning-rate": 1e-3, "beta_1": 0.9, "beta_2": 0.999, }, keep_alive_period_in_seconds=1800, ) # Starts a SageMaker training job and waits until completion estimator.fit('s3://my_bucket/my_training_data/')

次に、一致する 2 つ目のトレーニングジョブを作成します。この例では、my-training-job-1 と一致する必要な属性がすべて含まれ、実験用に別のハイパーパラメータを持つ my-training-job-2 を作成します。2 つ目のトレーニングジョブはウォームプールを再利用し、1 つ目のトレーニングジョブよりも早く起動します。次のコード例では Tensorflow 推定器を使用しています。ウォームプール機能は、Amazon で実行される任意のトレーニングアルゴリズムで使用できます SageMaker。どの属性が一致する必要があるかについての詳細は、「トレーニングジョブのマッチング」を参照してください。

# Creates an example estimator estimator = TensorFlow( ... entry_point='my-training-script.py', source_dir='code', role=role, model_dir='model_dir', framework_version='py37', py_version='pyxy', job_name='my-training-job-2', instance_type='ml.g4dn.xlarge', instance_count=1, volume_size=250, hyperparameters={ "batch-size": 512, "epochs": 2, "learning-rate": 1e-3, "beta_1": 0.9, "beta_2": 0.999, }, keep_alive_period_in_seconds=1800, ) # Starts a SageMaker training job and waits until completion estimator.fit('s3://my_bucket/my_training_data/')

両方のトレーニングジョブのウォームプールのステータスをチェックして、my-training-job-1 のウォームプールが Reusedmy-training-job-2 のウォームプールが InUse になっていることを確認します。

注記

トレーニングジョブ名には日付/時刻のサフィックスが付いています。この例のトレーニングジョブ名 my-training-job-1 および my-training-job-2 を実際のトレーニングジョブ名に置き換えてください。estimator.latest_training_job.job_name コマンドを使用して、実際のトレーニングジョブ名を取得できます。

session.describe_training_job('my-training-job-1') session.describe_training_job('my-training-job-2')

describe_training_job の結果には、特定のトレーニングジョブに関するすべての詳細が表示されます。WarmPoolStatus 属性を検索して、トレーニングジョブのウォームプールに関する情報を確認します。出力は以下の例のようになります。

# Warm pool status for training-job-1 ... 'WarmPoolStatus': {'Status': 'Reused', 'ResourceRetainedBillableTimeInSeconds': 1000, 'ReusedByName': my-training-job-2} ... # Warm pool status for training-job-2 ... 'WarmPoolStatus': {'Status': 'InUse'} ...

ウォームプールを更新する

トレーニングジョブが完了し、ウォームプールのステータスが Available になったら、KeepAlivePeriodInSeconds 値を更新できます。

session.update_training_job(job_name, resource_config={"KeepAlivePeriodInSeconds":3600})

ウォームプールを終了する

ウォームプールを手動で終了するには、KeepAlivePeriodInSeconds 値を 0 に設定します。

session.update_training_job(job_name, resource_config={"KeepAlivePeriodInSeconds":0})

ウォームプールは、指定された KeepAlivePeriodInSeconds 値を超えたり、クラスターにパッチアップデートが行われたりすると自動的に終了します。

Amazon SageMaker コンソールの使用

コンソールから、ウォームプールを作成したり、ウォームプールをリリースしたり、特定のトレーニングジョブのウォームプールのステータスや課金対象時間を確認したりできます。また、一致するどのトレーニングジョブがウォームプールを再利用したかを確認することもできます。

  1. Amazon SageMaker コンソールを開き、ナビゲーションペインからトレーニングジョブを選択します。該当する場合、各トレーニングジョブのウォームプールのステータスは [ウォームプールのステータス] 列に表示され、アクティブなウォームプールの残り時間は [残り時間] 列に表示されます。

  2. ウォームプールを使用するトレーニングジョブをコンソールから作成するには、[トレーニングジョブの作成] を選択します。次に、トレーニングジョブリソースを設定するときに、必ず [キープアライブ期間] フィールドに値を指定してください。この値は、時間を秒単位で表す 1 から 3600 までの整数でなければなりません。

  3. ウォームプールをコンソールから解放するには、特定のトレーニングジョブを選択し、[アクション] ドロップダウンメニューから [クラスターをリリースする] を選択します。

  4. ウォームプールの詳細を確認するには、トレーニングジョブ名を選択します。ジョブの詳細ページで、[ウォームプールのステータス] セクションまでスクロールして、ウォームプールのステータス、ウォームプールのステータスが Available である場合は残り時間、ウォームプールの請求可能な秒数、ウォームプールのステータスが Reused である場合はウォームプールを再利用したトレーニングジョブの名前を確認します。

低レベル SageMaker APIs

SageMaker API または AWS CLI のいずれかで SageMaker マネージドウォームプールを使用します。

SageMaker API

次のコマンドで SageMaker API を使用して SageMaker マネージドウォームプールを設定します。

AWS CLI

次のコマンドで AWS CLI を使用して SageMaker マネージドウォームプールを設定します。

IAM 条件キー

管理者は、オプションで sagemaker:KeepAlivePeriod条件キーを使用して、特定のユーザーまたはグループのKeepAlivePeriodInSeconds制限をさらに制限できます。 SageMaker マネージドウォームプールは 3600 秒 (60 分) KeepAlivePeriodInSecondsの値に制限されますが、管理者は必要に応じてこの制限を下げることができます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceKeepAlivePeriodLimit", "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob" ], "Resource": "*", "Condition": { "NumericLessThanIfExists": { "sagemaker:KeepAlivePeriod": 1800 } } } ] }

詳細については、「サービス認証リファレンス」の「Amazon の条件キー SageMaker」を参照してください。

考慮事項

SageMaker マネージドウォームプールを使用する場合は、次の項目を考慮してください。

  • SageMaker マネージドウォームプールは、異種クラスタートレーニングでは使用できません。

  • SageMaker マネージドウォームプールはスポットインスタンスでは使用できません。

  • SageMaker マネージドウォームプールは 3600 秒 (60 分) KeepAlivePeriodInSecondsの値に制限されています。

  • ウォームプールが指定された KeepAlivePeriodInSeconds 値内のトレーニングジョブと正常に一致し続けると、クラスターは最大 28 日間しか稼働し続けることができません。