

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

# SageMaker AI と Hybrid を使用して、ローカルでの開発からスケーラブルな実験に至るまでの機械学習ワークフローを合理化する
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker"></a>

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

## 概要
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-summary"></a>

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

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

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

## 前提条件と制限
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ SageMaker AI トレーニングジョブをデプロイおよび開始するための AWS Identity and Access Management (IAM) [ユーザーロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) 
+ AWS Command Line Interface (AWS CLI) バージョン 2.0 以降[がインストールされ](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)、[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)されている
+ [Poetry](https://python-poetry.org/) バージョン 1.8 以降かつ 2.0 以前をインストール済み
+ [Docker](https://www.docker.com/) をインストール済み
+ Python [バージョン 3.10.x](https://www.python.org/downloads/release/python-31011/)

**制限事項**
+ 現在、コードは SageMaker AI トレーニングジョブのみを対象としています。処理ジョブや SageMaker AI パイプライン全体に容易に拡張できます。
+ 完全に本番稼働化された SageMaker AI のセットアップでは、追加の詳細設定を行う必要があります。例としては、コンピューティングとストレージの custom AWS Key Management Service (AWS KMS) キーや、ネットワーク設定などがあります。これらの追加オプションは、`config` フォルダの専用サブフォルダにある Hydra を使用して設定することもできます。
+ 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「[AWS サービス (リージョン別)](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。特定のエンドポイントについては、「[サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照して、サービスのリンクを選択してください。

## アーキテクチャ
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-architecture"></a>

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

![SageMaker AI トレーニングまたは HPO ジョブを作成して実行するワークフロー。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/1db57484-f85c-49a6-b870-471dade02b26/images/d80e7474-a975-4d92-8f66-2d34e33053fd.png)


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

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

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

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

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

**自動化とスケール**
+ 自動トレーニング、再トレーニング、推論では、 AWS CLI コードを [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)、、[AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)[Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) などのサービスと統合できます。
+ スケーリングは、インスタンスサイズの設定を変更するか、分散トレーニングの設定を追加することで実現できます。

## ツール
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-tools"></a>

**AWS のサービス**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および 全体のライフサイクルを通じてリソースを管理するのに役立ちます AWS リージョン。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) は、コマンドラインシェルのコマンド AWS のサービス を使用して を操作するのに役立つオープンソースツールです。このパターンでは、 AWS CLI は初期リソース設定とテストの両方に役立ちます。
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) はマネージド型の機械学習 (ML) サービスで、ML モデルの構築とトレーニングを行い、それらを本番稼働環境に対応したホスティング環境にデプロイします。SageMaker AI Training は、大規模な ML モデルのトレーニングを可能にする SageMaker AI 内の完全マネージド型 ML サービスです。このツールは、組み込みのスケーラビリティと他の との統合を利用して、トレーニングモデルの計算上の需要を効率的に処理できます AWS のサービス。SageMaker AI Training はカスタムアルゴリズムとコンテナもサポートしているため、幅広い ML ワークフローに柔軟に対応できます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

**その他のツール**
+ [Docker](https://www.docker.com/) は、オペレーティングシステムレベルの仮想化を使用してソフトウェアをコンテナで配信するサービスとしての Platform as a Service (PaaS) 製品のセットです。このパターンでは、開発からデプロイまでのさまざまな段階で一貫した環境を確保し、依存関係とコードを確実にパッケージ化するために使用されています。Docker のコンテナ化により、ワークフロー全体でのスケーリングとバージョン管理が容易になりました。
+ [Hydra](https://hydra.cc/) は、複数の設定と動的リソース管理を柔軟に処理できる設定管理ツールです。環境設定の管理に役立ち、さまざまな環境でのシームレスなデプロイを可能にします。Hydra の詳細については、「[追加情報](#streamline-machine-learning-workflows-by-using-amazon-sagemaker-additional)」を参照してください。
+ 「[Python](https://www.python.org/)」は汎用のコンピュータプログラミング言語です。Python は、ML コードとデプロイワークフローの記述に使用されています。
+ [Poetry](https://python-poetry.org/) は、Python での依存関係管理とパッケージングのためのツールです。

**コードリポジトリ**

このパターンのコードは、GitHub の [configuring-sagemaker-training-jobs-with-hydra](https://github.com/aws-samples/configuring-sagemaker-training-jobs-with-hydra) リポジトリで入手できます。

## ベストプラクティス
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-best-practices"></a>
+ SageMaker AI トレーニングジョブをデプロイおよび開始するための IAM ロールを選択します。最小特権の原則に従い、タスクの実行に必要な最小限の権限を付与してください。詳細については、IAM ドキュメントの「[最小限の特権を認める。](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)」と「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。
+ 一時的な認証情報を使用して、ターミナルの IAM ロールにアクセスします。

## エピック
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-epics"></a>

### 環境をセットアップする
<a name="set-up-the-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 仮想環境を作成してアクティブ化します。 | 仮想環境を作成してアクティブ化するには、リポジトリのルートで次のコマンドを実行します。<pre>poetry install <br />poetry shell</pre> | AWS 全般 | 
| インフラストラクチャを準備します。 | CloudFormation を使用してインフラストラクチャをデプロイするには、次のコマンドを実行します。<pre>aws cloudformation deploy --template-file infra/hydra-sagemaker-setup.yaml --stack-name hydra-sagemaker-setup  --capabilities CAPABILITY_NAMED_IAM</pre> | AWS 全般、DevOps エンジニア | 
| サンプルデータをダウンロードします。 | [openml](https://www.openml.org/) からローカルマシンに入力データをダウンロードするには、次のコマンドを実行します。<pre>python scripts/download_data.py</pre> | AWS 全般 | 
| クイックテストのためにローカルで実行します。 | テストのためにトレーニングコードをローカルで実行するには、次のコマンドを実行します。<pre>python mypackage/train.py data.train_data_path=data/train.csv evaluation.base_dir_path=data</pre><br />すべての実行のログは、実行時間ごとに `outputs` というフォルダに保存されます。詳細については、[GitHub リポジトリ](https://github.com/aws-samples/configuring-sagemaker-training-jobs-with-hydra)の「出力」セクションを参照してください。<br />`--multirun` 機能を使用することで、異なるパラメータで複数のトレーニングを並行して実行することもできます。詳細については、[Hydra のドキュメント](https://hydra.cc/docs/tutorials/basic/running_your_app/multi-run/)を参照してください。 | データサイエンティスト | 

### SageMaker AI でワークフローを実行する
<a name="run-workflows-on-sm"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 環境変数を設定します。 | SageMaker AI でジョブを実行するには、 AWS リージョン と AWS アカウント ID を指定して、次の環境変数を設定します。<pre>export ECR_REPO_NAME=hydra-sm-artifact<br />export image_tag=latest<br />export AWS_REGION="<your_aws_region>" # for instance, us-east-1<br />export ACCOUNT_ID="<your_account_id>"<br />export BUCKET_NAME_DATA=hydra-sample-data-$ACCOUNT_ID<br />export BUCKET_NAME_CONFIG=hydra-sample-config-$ACCOUNT_ID<br />export AWS_DEFAULT_REGION=$AWS_REGION<br />export ROLE_ARN=arn:aws:iam::${ACCOUNT_ID}:role/hydra-sample-sagemaker<br />export INPUT_DATA_S3_PATH=s3://$BUCKET_NAME_DATA/hydra-on-sm/input/<br />export OUTPUT_DATA_S3_PATH=s3://$BUCKET_NAME_DATA/hydra-on-sm/output/</pre> | AWS 全般 | 
| Docker イメージを作成してプッシュします。 | Docker イメージを作成して Amazon ECR リポジトリにプッシュするには、次のコマンドを実行します。<pre>chmod +x scripts/create_and_push_image.sh<br />scripts/create_and_push_image.sh $ECR_REPO_NAME $image_tag $AWS_REGION $ACCOUNT_ID</pre><br />このタスクは、環境に有効な認証情報があることを前提としています。Docker イメージは、前のタスクの環境変数で指定された Amazon ECR リポジトリにプッシュされ、トレーニングジョブが実行される SageMaker AI コンテナをアクティブ化するために使用されます。 | ML エンジニア、AWS 全般 | 
| 入力データを Amazon S3 にコピーします。 | SageMaker AI トレーニングジョブでは、入力データを取得する必要があります。入力データをデータ用の Amazon S3 バケットにコピーするには、次のコマンドを実行します。<pre>aws s3 cp data/train.csv "${INPUT_DATA_S3_PATH}train.csv" </pre> | データエンジニア、AWS 全般 | 
| SageMaker AI トレーニングジョブを送信します。 | スクリプトの実行を簡素化するには、`default.yaml` ファイルでデフォルトの設定パラメータを指定します。このアプローチでは、実行間の一貫性の維持に加えて、必要に応じてデフォルト設定を柔軟に上書きできます。次の例を参照してください。<pre>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</pre> | AWS 全般、ML エンジニア、データサイエンティスト | 
| SageMaker AI ハイパーパラメータチューニングを実行します。 | SageMaker AI ハイパーパラメータチューニングの実行は、SageMaker AII トレーニングジョブの送信に似ています。ただし、[start\_sagemaker\_hpo\_job.py](https://github.com/aws-samples/configuring-sagemaker-training-jobs-with-hydra/blob/main/scripts/start_sagemaker_hpo_job.py) ファイルで確認できるように、実行スクリプトにはいくつかの重要な点で相違があります。チューニングするハイパーパラメータは、トレーニングジョブへのチャネルではなく、boto3 ペイロードを通過する必要があります。<br />ハイパーパラメータの最適化 (HPO) ジョブを開始するには、次のコマンドを実行します。<pre>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</pre> | データサイエンティスト | 

## トラブルシューティング
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| 期限切れのトークン | 新しい AWS 認証情報をエクスポートします。 | 
| IAM アクセス許可の欠如 | CloudFormation テンプレートをデプロイし、SageMaker AI トレーニングジョブを開始するために必要なすべての IAM アクセス許可を持つ IAM ロールの認証情報をエクスポートしてください。 | 

## 関連リソース
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-resources"></a>
+ [Amazon SageMaker AI を使用してモデルをトレーニング](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html)する (AWS ドキュメント)
+ [ハイパーパラメータチューニングとは何ですか?](https://aws.amazon.com/what-is/hyperparameter-tuning/#:~:text=Hyperparameter%20tuning%20allows%20data%20scientists,the%20model%20as%20a%20hyperparameter.)

## 追加情報
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-additional"></a>

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

**ローカル開発から大規模なデプロイまでの一貫性** – このパターンでは、ローカル Python スクリプトを使用しているか、ローカル Docker コンテナを実行しているか、SageMaker AI で大規模実験を実行しているか、SageMaker AI で本番環境にデプロイしているかに関係なく、開発者が同じワークフローを使用できます。この一貫性は、次の理由により重要です。
+ **イテレーションの高速化** – スケールアップする際に大幅な調整を必要とせずに、ローカルで迅速に実験できます。
+ **リファクタリング不要** – SageMaker AI での大規模実験への移行はシームレスで、既存のセットアップの見直しは必要ありません。
+ **継続的な改善** – 環境間で同じコードを使用するため、新機能の開発やアルゴリズムの継続的な改善が容易です。

**設定管理** – このパターンでは、設定管理ツールである [Hydra](https://hydra.cc/) を活用することで次のような利点があります。
+ パラメータは、コードとは別に設定ファイルで定義されます。
+ さまざまなパラメータセットの入れ替えや組み合わせを簡単に実行できます。
+ 各実行の設定は自動的にログに記録されるため、実験の追跡が簡素化されます。
+ クラウド実験では、ローカル実行と同じ設定構造を使用して一貫性を確保できます。

Hydra を使用すると、設定を効果的に管理し、次の機能を有効にできます。
+ **設定の分割** – プロジェクト設定を管理しやすい小単位に分割できます (それぞれ個別に変更可能)。このアプローチにより、複雑なプロジェクトを簡単に処理できます。
+ **デフォルト調整が容易** – ベースライン設定をすばやく変更できるため、新しいアイデアをより簡単にテストできます。
+ **CLI 入力と設定ファイルの連携** – コマンドライン入力を設定ファイルとスムーズに組み合わせることができます。このアプローチにより、煩雑さや混乱が軽減され、時間経過に合わせたプロジェクトの管理がより簡単になります。

 