SageMaker AI と Hybrid を使用して、ローカル開発からスケーラブルな実験まで機械学習ワークフローを合理化する - AWS 規範ガイダンス

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

SageMaker AI と Hybrid を使用して、ローカル開発からスケーラブルな実験まで機械学習ワークフローを合理化する

作成者: David Sauerwein (AWS)、Julian Ferdinand Grueber (AWS)、Marco Geiger (AWS)

概要

このパターンは、ローカルテストから Amazon SageMaker AI での本番稼働まで、機械学習 (ML) アルゴリズムを設定および実行する統一されたアプローチを提供します。ML アルゴリズムはこのパターンの焦点ですが、そのアプローチは特徴量エンジニアリング、推論、ML パイプライン全体に及びます。このパターンは、サンプルユースケースを通じて、ローカルスクリプト開発から SageMaker AI トレーニングジョブへの移行を示しています。

一般的な ML ワークフローは、ローカルマシンでソリューションを開発およびテストし、クラウドで大規模な実験 (異なるパラメータなど) を実行し、承認されたソリューションをクラウドにデプロイすることです。次に、デプロイされたソリューションをモニタリングして維持する必要があります。このワークフローに対する統一されたアプローチがない場合、デベロッパーは多くの場合、各段階でコードをリファクタリングする必要があります。ソリューションがこのワークフローのどの段階でも変更される可能性のある多数のパラメータに依存する場合、整理と一貫性を維持することがますます難しくなる可能性があります。

このパターンは、これらの課題に対処します。まず、ローカルマシン、コンテナ、または SageMaker AI のいずれで実行しても一貫性を保つ統一されたワークフローを提供することで、環境間でコードリファクタリングを行う必要がなくなります。次に、各実行の設定の自動ログ記録を使用して、パラメータを簡単に変更および結合できる個別の設定ファイルでパラメータを定義する、Hydroid の設定システムによるパラメータ管理を簡素化します。このパターンがこれらの課題にどのように対処するかの詳細については、「追加情報」を参照してください。

前提条件と制限

前提条件

  • アクティブな AWS アカウント

  • SageMaker AI トレーニングジョブをデプロイおよび開始するための AWS Identity and Access Management (IAM) ユーザーロール

  • AWS Command Line Interface (AWS CLI) バージョン 2.0 以降がインストールされ設定されている

  • Poetry バージョン 1.8 以降、2.0 より前、インストール済み

  • Docker がインストールされました

  • Python バージョン 3.10.x

制約事項

  • コードは現在、SageMaker AI トレーニングジョブのみを対象としています。処理ジョブや SageMaker AI パイプライン全体に拡張するのは簡単です。

  • 完全に実稼働化された SageMaker AI のセットアップでは、追加の詳細を設定する必要があります。例としては、コンピューティングとストレージの custom AWS Key Management Service (AWS KMS) キーや、ネットワーク設定などがあります。これらの追加オプションは、フォルダの専用サブフォルダで、Hyraid を使用して設定することもできますconfig

  • 一部の AWS のサービス は では使用できません AWS リージョン。リージョンの可用性については、AWS 「リージョン別のサービス」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択します。

アーキテクチャ

次の図は、 ソリューションのアーキテクチャを示しています。

SageMaker AI トレーニングまたは HPO ジョブを作成して実行するワークフロー。

この図表は、次のワークフローを示しています:

  1. データサイエンティストは、Docker や SageMaker AI を必要とせずに、ローカル環境でアルゴリズムを小規模に反復処理し、パラメータを調整し、トレーニングスクリプトを迅速にテストできます。(詳細については、「エピックで」タスクの「クイックテストをローカルで実行する」を参照してください。)

  2. アルゴリズムに満足すると、データサイエンティストは Docker イメージを構築し、 という名前の Amazon Elastic Container Registry (Amazon ECR) リポジトリにプッシュしますhydra-sm-artifact。(詳細については、「エピック」のSageMaker AI でワークフローを実行する」を参照してください)。 エピック

  3. データサイエンティストは、Python スクリプトを使用して SageMaker AI トレーニングジョブまたはハイパーパラメータ最適化 (HPO) ジョブを開始します。通常のトレーニングジョブの場合、調整された設定は という名前の Amazon Simple Storage Service (Amazon S3) バケットに書き込まれますhydra-sample-config。HPO ジョブの場合、 configフォルダにあるデフォルト設定セットが適用されます。

  4. SageMaker AI トレーニングジョブは Docker イメージをプルし、Amazon S3 バケット から入力データを読み取りhydra-sample-data、Amazon S3 バケットから設定を取得するhydra-sample-configか、デフォルト設定を使用します。トレーニング後、ジョブは出力データを Amazon S3 バケット に保存しますhydra-sample-data

自動化とスケール

  • 自動トレーニング、再トレーニング、推論では、 AWS CLI コードを AWS Lambda、、AWS CodePipelineAmazon EventBridge などのサービスと統合できます。

  • スケーリングは、インスタンスサイズの設定を変更するか、分散トレーニングの設定を追加することで実現できます。

ツール

AWS のサービス

  • AWS CloudFormation は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および 全体のライフサイクルを通じてリソースを管理するのに役立ちます AWS リージョン。

  • AWS Command Line Interface (AWS CLI) は、コマンドラインシェルのコマンド AWS のサービス を使用して を操作するのに役立つオープンソースツールです。このパターンでは、 AWS CLI は初期リソース設定とテストの両方に役立ちます。

  • Amazon Elastic Container Registry (Amazon ECR) は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。

  • Amazon SageMaker AI は、ML モデルを構築およびトレーニングし、本番環境対応のホスト環境にデプロイするのに役立つマネージド機械学習 (ML) サービスです。SageMaker AI Training は、大規模な ML モデルのトレーニングを可能にする SageMaker AI 内のフルマネージド ML サービスです。このツールは、組み込みのスケーラビリティと他の との統合を利用して、トレーニングモデルの計算上の需要を効率的に処理できます AWS のサービス。SageMaker AI Training はカスタムアルゴリズムとコンテナもサポートしているため、幅広い ML ワークフローに柔軟に対応できます。

  • Amazon Simple Storage Service (Amazon S3) は、どのようなデータ量であっても、データを保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。

その他のツール

  • Docker は、オペレーティングシステムレベルの仮想化を使用してソフトウェアをコンテナで配信するサービスとしてのPlatform as a Service (PaaS) 製品のセットです。このパターンでは、開発からデプロイまで、さまざまなステージにわたって一貫した環境を確保し、依存関係とコードを確実にパッケージ化するために使用されました。Docker のコンテナ化により、ワークフロー全体のスケーリングとバージョン管理が容易になります。

  • Invalid は、複数の設定と動的リソース管理を柔軟に処理できる設定管理ツールです。環境設定の管理に役立ち、さまざまな環境にシームレスにデプロイできます。詳細については、「追加情報」を参照してください。

  • Python」は汎用のコンピュータープログラミング言語です。Python を使用して ML コードとデプロイワークフローを記述しました。

  • Poetry は、Python での依存関係の管理とパッケージングのためのツールです。

コードリポジトリ

このパターンのコードは、GitHub configuring-sagemaker-training-jobs-with-hydra リポジトリで入手できます。

ベストプラクティス

  • 最小権限の原則に従って SageMaker AI トレーニングジョブをデプロイおよび開始するための IAM ロールを選択し、タスクの実行に必要な最小限のアクセス許可を付与します。詳細については、IAM ドキュメントの「最小特権の付与」と「セキュリティのベストプラクティス」を参照してください。

  • 一時的な認証情報を使用して、ターミナルの IAM ロールにアクセスします。

エピック

タスク説明必要なスキル

仮想環境を作成してアクティブ化します。

仮想環境を作成してアクティブ化するには、リポジトリのルートで次のコマンドを実行します。

poetry install poetry shell
AWS 全般

インフラストラクチャを準備します。

CloudFormation を使用してインフラストラクチャをデプロイするには、次のコマンドを実行します。

aws cloudformation deploy --template-file infra/hydra-sagemaker-setup.yaml --stack-name hydra-sagemaker-setup --capabilities CAPABILITY_NAMED_IAM
AWS 全般、DevOps エンジニア

サンプルデータをダウンロードします。

openml からローカルマシンに入力データをダウンロードするには、次のコマンドを実行します。

python scripts/download_data.py
AWS 全般

クイックテストのためにローカルで を実行します。

テスト用にトレーニングコードをローカルで実行するには、次のコマンドを実行します。

python mypackage/train.py data.train_data_path=data/train.csv evaluation.base_dir_path=data

すべての実行のログは、実行時間ごとに というフォルダに保存されますoutputs。詳細については、GitHub リポジトリの「出力」セクションを参照してください。

--multirun 機能を使用して、パラメータが異なる複数のトレーニングを並行して実行することもできます。詳細については、「 のドキュメント」を参照してください。

データサイエンティスト
タスク説明必要なスキル

環境変数を設定します。

SageMaker AI でジョブを実行するには、 AWS リージョン と AWS アカウント ID を指定して、次の環境変数を設定します。

export ECR_REPO_NAME=hydra-sm-artifact export image_tag=latest export AWS_REGION="<your_aws_region>" # for instance, us-east-1 export ACCOUNT_ID="<your_account_id>" export BUCKET_NAME_DATA=hydra-sample-data-$ACCOUNT_ID export BUCKET_NAME_CONFIG=hydra-sample-config-$ACCOUNT_ID export AWS_DEFAULT_REGION=$AWS_REGION export ROLE_ARN=arn:aws:iam::${ACCOUNT_ID}:role/hydra-sample-sagemaker export INPUT_DATA_S3_PATH=s3://$BUCKET_NAME_DATA/hydra-on-sm/input/ export OUTPUT_DATA_S3_PATH=s3://$BUCKET_NAME_DATA/hydra-on-sm/output/
AWS 全般

Docker イメージを作成してプッシュします。

Docker イメージを作成して Amazon ECR リポジトリにプッシュするには、次のコマンドを実行します。

chmod +x scripts/create_and_push_image.sh scripts/create_and_push_image.sh $ECR_REPO_NAME $image_tag $AWS_REGION $ACCOUNT_ID

このタスクは、 環境に有効な認証情報があることを前提としています。Docker イメージは、前のタスクの環境変数で指定された Amazon ECR リポジトリにプッシュされ、トレーニングジョブが実行される SageMaker AI コンテナをアクティブ化するために使用されます。

ML エンジニア、AWS 全般

入力データを Amazon S3 にコピーします。

SageMaker AI トレーニングジョブは、入力データを取得する必要があります。データの入力データを Amazon S3 バケットにコピーするには、次のコマンドを実行します。

aws s3 cp data/train.csv "${INPUT_DATA_S3_PATH}train.csv"
データエンジニア、AWS 全般

SageMaker AI トレーニングジョブを送信します。

スクリプトの実行を簡素化するには、 default.yaml ファイルでデフォルトの設定パラメータを指定します。このアプローチは、実行間の一貫性を確保するだけでなく、必要に応じてデフォルト設定を簡単に上書きする柔軟性も提供します。次の例を参照してください。

python scripts/start_sagemaker_training_job.py sagemaker.role_arn=$ROLE_ARN sagemaker.config_s3_bucket=$BUCKET_NAME_CONFIG sagemaker.input_data_s3_path=$INPUT_DATA_S3_PATH sagemaker.output_data_s3_path=$OUTPUT_DATA_S3_PATH
AWS 全般、ML エンジニア、データサイエンティスト

SageMaker AI ハイパーパラメータチューニングを実行します。

SageMaker AI ハイパーパラメータチューニングの実行は、SageMaker AII トレーニングジョブの送信と似ています。ただし、実行スクリプトは、start_sagemaker_hpo_job.py ファイルに表示されるように、いくつかの重要な点で異なります。チューニングするハイパーパラメータは、トレーニングジョブへのチャネルではなく、boto3 ペイロードを通過する必要があります。

ハイパーパラメータ最適化 (HPO) ジョブを開始するには、次のコマンドを実行します。

python scripts/start_sagemaker_hpo_job.py sagemaker.role_arn=$ROLE_ARN sagemaker.config_s3_bucket=$BUCKET_NAME_CONFIG sagemaker.input_data_s3_path=$INPUT_DATA_S3_PATH sagemaker.output_data_s3_path=$OUTPUT_DATA_S3_PATH
データサイエンティスト

トラブルシューティング

問題ソリューション

期限切れのトークン

新しい AWS 認証情報をエクスポートします。

IAM アクセス許可の欠如

CloudFormation テンプレートをデプロイし、SageMaker AI トレーニングジョブを開始するために必要なすべての IAM アクセス許可を持つ IAM ロールの認証情報をエクスポートしてください。

関連リソース

追加情報

このパターンでは、以下の課題に対処します。

ローカル開発から大規模なデプロイまでの一貫性 – このパターンでは、開発者はローカル Python スクリプトを使用しているか、ローカル Docker コンテナを実行しているか、SageMaker AI で大規模な実験を実行しているか、SageMaker AI で本番環境にデプロイしているかに関係なく、同じワークフローを使用できます。この一貫性は、以下の理由で重要です。

  • イテレーションの高速化 – スケールアップ時に大幅な調整を必要とせずに、ローカルでの実験を高速化できます。

  • リファクタリングなし – SageMaker AI での大規模な実験への移行はシームレスで、既存のセットアップの見直しは必要ありません。

  • 継続的な改善 – コードは環境間で同じであるため、新機能の開発とアルゴリズムの継続的な改善は簡単です。

設定管理 - このパターンでは、設定管理ツールであるhttps://hydra.cc/「Hyrady」を活用して、次の利点を提供します。

  • パラメータは、コードとは別に設定ファイルで定義されます。

  • さまざまなパラメータセットを簡単にスワップまたは組み合わせることができます。

  • 実験の追跡は、各実行の設定が自動的にログに記録されるため、簡素化されます。

  • クラウド実験では、ローカル実行と同じ設定構造を使用して一貫性を確保できます。

Invalid を使用すると、設定を効果的に管理し、次の機能を有効にできます。

  • 設定を分割する – プロジェクト設定を小さく管理しやすい部分に分割し、個別に変更できます。このアプローチにより、複雑なプロジェクトを簡単に処理できます。

  • デフォルトを簡単に調整 – ベースライン設定をすばやく変更できるため、新しいアイデアをより簡単にテストできます。

  • CLI 入力と設定ファイルの整列 – コマンドライン入力を設定ファイルとスムーズに組み合わせます。このアプローチにより、乱雑な作業や混乱が軽減され、時間の経過とともにプロジェクトをより管理しやすくなります。