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

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

Amazon Web Services、David Sauerwein、Marco Geiger、Julian Ferdinand Grueber

概要

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

一般的な ML ワークフローでは、ローカルマシンでソリューションを開発およびテストし、クラウドで大規模な実験 (異なるパラメータを使用した実験など) を実行して、承認されたソリューションをクラウドにデプロイします。その後、デプロイされたソリューションをモニタリングして保守する必要があります。通常、このワークフローに対する統一されたワークフローがない場合、開発者は各段階でコードのリファクタリングを実行する必要が生じます。ソリューションが多数のパラメータに依存しており、そのパラメータがこのワークフローのいずれかの段階で変更される可能性があると、整合性と一貫性の維持がさらに困難になりかねません。

このパターンでは、このような課題に対処します。まず、実行環境 (ローカルマシン、コンテナ、SageMaker AI) にかかわらず一貫性を保つ統一ワークフローを提供することで、環境間でのコードのリファクタリングを不要にします。次に、Hydra の設定システムを通じてパラメータ管理を簡素化します。このシステムでは、パラメータが個別の設定ファイルに定義されているため、変更や組み合わせが容易です。また、各実行の設定が自動的にログに記録されます。このパターンがこれらの課題にどのように対処するかについては、「追加情報」を参照してください。

前提条件と制限

前提条件

制限

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

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

  • 一部の AWS のサービスは、利用できる AWS リージョンが限られる場合があります。利用可能なリージョンについては、「AWS サービス (リージョン別)」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択してください。

アーキテクチャ

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

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

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

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

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

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

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

自動化とスケール

  • 自動トレーニング、再トレーニング、推論では、AWS CLI コードを AWS LambdaAWS 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 のコンテナ化により、ワークフロー全体でのスケーリングとバージョン管理が容易になりました。

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

  • 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 機能を使用することで、異なるパラメータで複数のトレーニングを並行して実行することもできます。詳細については、Hydra のドキュメントを参照してください。

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

環境変数を設定します。

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 での大規模実験への移行はシームレスで、既存のセットアップの見直しは必要ありません。

  • 継続的な改善 – 環境間で同じコードを使用するため、新機能の開発やアルゴリズムの継続的な改善が容易です。

設定管理 – このパターンでは、設定管理ツールである Hydra を活用することで次のような利点があります。

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

  • さまざまなパラメータセットの入れ替えや組み合わせを簡単に実行できます。

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

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

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

  • 設定の分割 – プロジェクト設定を管理しやすい小単位に分割できます (それぞれ個別に変更可能)。このアプローチにより、複雑なプロジェクトを簡単に処理できます。

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

  • CLI 入力と設定ファイルの連携 – コマンドライン入力を設定ファイルとスムーズに組み合わせることができます。このアプローチにより、煩雑さや混乱が軽減され、時間経過に合わせたプロジェクトの管理がより簡単になります。