Amazon SageMaker PlatoBlockchain Data Intelligenceを使用して、Terraformで機械学習パイプラインをデプロイおよび管理します。 垂直検索。 愛。

Amazon SageMakerを使用して、Terraformで機械学習パイプラインをデプロイおよび管理します

AWSのお客様は、クラウドインフラストラクチャの設計、開発、および管理をInfrastructure as Code(IaC)に依存しています。 IaCは、開発オペレーション(DevOps)の分野でのベストプラクティスに従うことができる一方で、顧客のインフラストラクチャとサービスが一貫性があり、スケーラブルで、再現可能であることを保証します。

IaCを使用してAWSインフラストラクチャとサービスを管理するためのXNUMXつの可能なアプローチは次のとおりです。 テラフォーム、これにより、開発者はインフラストラクチャを再利用可能なコードモジュールに編成できます。 この側面は、機械学習(ML)の分野でますます重要になっています。 TerraformをIaCとして使用したトレーニングと推論を含む、MLパイプラインの開発と管理により、インフラストラクチャを最初から開発することなく、複数のMLユースケースまたはリージョンに合わせて簡単に拡張できます。 さらに、MLパイプラインのさまざまな実装間でトレーニングと推論を行うためのインフラストラクチャ(インスタンスのタイプやサイズなど)に一貫性を提供します。 これにより、リクエストと着信トラフィックを別の場所にルーティングできます アマゾンセージメーカー エンドポイント

この投稿では、TerraformとAmazonSageMakerを使用してMLパイプラインをデプロイおよび管理する方法を紹介します。

ソリューションの概要

この投稿では、コードを提供し、AmazonSageMakerを使用したモデルのトレーニングと推論のためにTerraformを使用してMLパイプライン用のAWSインフラストラクチャをデプロイするために必要な手順を説明します。 MLパイプラインは AWSステップ関数 次の図に示すように、MLパイプラインに実装されているさまざまなステップを調整します。

ステップ関数のステップ

ステップ関数は開始します AWSラムダ 関数、一意のジョブIDを生成します。これは、SageMakerトレーニングジョブを開始するときに使用されます。 ステップ関数は、推論に使用されるモデル、エンドポイント構成、およびエンドポイントも作成します。 追加のリソースには、次のものがあります。

Dockerイメージを使用したトレーニングと推論のためのML関連のコードは、主に以下の既存の作業に依存しています GitHubリポジトリ.

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

アーキテクチャ図

次の大まかな手順を説明します。

  1. Terraformを使用してAWSインフラストラクチャをデプロイします。
  2. DockerイメージをAmazonECRにプッシュします。
  3. MLパイプラインを実行します。
  4. エンドポイントを呼び出します。

リポジトリ構造

この投稿に使用されたコードとデータを含むリポジトリは、次の場所にあります。 GitHubリポジトリ.

リポジトリには、次のディレクトリが含まれています。

  • /terraform –次のサブフォルダーで構成されます。
    • ./infrastructure –インフラストラクチャのデプロイに使用する変数宣言に加えて、MLパイプラインモジュールを呼び出すmain.tfファイルが含まれています
    • ./ml-pipeline-module –再利用できるTerraformMLパイプラインモジュールが含まれています
  • /src –次のサブフォルダーで構成されます。
    • ./container –Dockerイメージの定義を使用したトレーニングと推論のサンプルコードが含まれています
    • ./lambda_function – SageMakerトレーニングジョブの一意のジョブIDなど、構成を生成するLambda関数のPythonコードが含まれています
  • /data –次のファイルが含まれています。
    • ./iris.csv –MLモデルをトレーニングするためのデータが含まれています

前提条件

このチュートリアルでは、次の前提条件を満たしている必要があります。

Terraformを使用してAWSインフラストラクチャをデプロイする

MLパイプラインをデプロイするには、必要に応じていくつかの変数と名前を調整する必要があります。 このステップのコードは /terraform ディレクトリにあります。

初めて初期化するときは、ファイルを開きます terraform/infrastructure/terraform.tfvars 変数を調整します プロジェクト名 変数に加えて、プロジェクトの名前に 地域 別のリージョンにデプロイする場合。 トレーニングや推論のために、インスタンスタイプなどの追加の変数を変更することもできます。

次に、次のコマンドを使用して、Terraformでインフラストラクチャを展開します。

export AWS_PROFILE=<your_aws_cli_profile_name>
cd terraform/infrastructure
terraform init
terraform plan
terraform apply

出力をチェックして、計画されたリソースが正しく表示されることを確認し、すべてが正しいかどうかを適用段階でyesで確認します。 次に、Amazon ECRコンソールに移動し(またはターミナルでTerraformの出力を確認し)、Terraformを介して作成したECRリポジトリのURLを取得します。

出力は、ECRリポジトリのURLを含め、次の表示出力のようになります。

Apply complete! Resources: 19 added, 0 changed, 0 destroyed. Outputs: ecr_repository_url = <account_number>.dkr.ecr.eu-west-1.amazonaws.com/ml-pipeline-terraform-demo

DockerイメージをAmazonECRにプッシュします

MLパイプラインとSageMakerが推論のためにSageMakerエンドポイントをトレーニングおよびプロビジョニングするには、Dockerイメージを提供してAmazonECRに保存する必要があります。 あなたはディレクトリで例を見つけることができます src/container。 前の手順でAWSインフラストラクチャをすでに適用している場合は、説明されているようにDockerイメージをプッシュできます。 Dockerイメージが開発されたら、次のアクションを実行して、Amazon ECRにプッシュできます(必要に応じてAmazon ECR URLを調整します)。

cd src/container
export AWS_PROFILE=<your_aws_cli_profile_name>
aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin <account_number>.dkr.ecr.eu-west-1.amazonaws.com
docker build -t ml-training .
docker tag ml-training:latest <account_number>.dkr.ecr.eu-west-1.amazonaws.com/<ecr_repository_name>:latest
docker push <account_number>.dkr.ecr.eu-west-1.amazonaws.com/<ecr_repository_name>

すでにTerraformでAWSインフラストラクチャを適用している場合は、Terraformを介して再度デプロイすることなく、コードとDockerイメージの変更をAmazonECRに直接プッシュできます。

MLパイプラインを実行する

MLパイプラインをトレーニングして実行するには、StepFunctionsコンソールに移動して実装を開始します。 ステートマシンの視覚化で、各ステップの進行状況を確認できます。 SageMakerトレーニングジョブの進行状況とSageMakerエンドポイントのステータスを確認することもできます。

ステップ関数の開始

ステップ関数でステートマシンを正常に実行すると、SageMakerエンドポイントが作成されたことがわかります。 SageMakerコンソールで、 推論 ナビゲーションペインで、次に エンドポイント。 ステータスがInServiceに変わるのを必ず待ってください。

SageMakerエンドポイントステータス

エンドポイントを呼び出す

エンドポイントを呼び出すには(この例では、アイリスデータセットに対して)、次のPythonスクリプトを AWS SDK for Python(Boto3)。 これは、SageMakerノートブックから実行するか、次のコードスニペットをLambda関数に埋め込むことができます。

import boto3
from io import StringIO
import pandas as pd client = boto3.client('sagemaker-runtime') endpoint_name = 'Your endpoint name' # Your endpoint name.
content_type = "text/csv"   # The MIME type of the input data in the request body. payload = pd.DataFrame([[1.5,0.2,4.4,2.6]])
csv_file = StringIO()
payload.to_csv(csv_file, sep=",", header=False, index=False)
payload_as_csv = csv_file.getvalue() response = client.invoke_endpoint(
EndpointName=endpoint_name,
ContentType=content_type,
Body=payload_as_csv
) label = response['Body'].read().decode('utf-8')
print(label)

クリーンアップ

コマンドterraformdestroyを使用して、Terraformによって作成されたインフラストラクチャを破棄できますが、最初にS3バケット内のデータとファイルを削除する必要があります。 さらに、SageMakerエンドポイント(または複数回実行される場合は複数のSageMakerエンドポイント)はステップ関数を介して作成され、Terraformを介して管理されません。 これは、ステップ関数を使用してMLパイプラインを実行するときにデプロイが行われることを意味します。 したがって、不要なコストを回避するために、StepFunctionsMLパイプラインを介して作成されたXNUMXつまたは複数のSageMakerエンドポイントも削除してください。 次の手順を実行します。

  1. Amazon S3コンソールで、S3トレーニングバケットのデータセットを削除します。
  2. AmazonS3コンソールまたはAWSCLIのいずれかを介して、S3モデルバケットのMLパイプラインを介してトレーニングしたすべてのモデルを削除します。
  3. Terraformを介して作成されたインフラストラクチャを破棄します。
    cd terraform/infrastructure
    terraform destroy

  4. SageMakerコンソールまたはAWSCLIのいずれかで、Step Functionsを介して作成されたSageMakerエンドポイント、エンドポイント設定、およびモデルを削除します。

まとめ

おめでとう! SageMakerとTerraformを使用してMLパイプラインをデプロイしました。 このソリューション例は、MLパイプライン用のAWSインフラストラクチャとサービスを再利用可能な方法で簡単にデプロイする方法を示しています。 これにより、複数のユースケースまたはリージョンに合わせてスケーリングでき、ワンクリックで一貫した方法でMLモデルのトレーニングとデプロイが可能になります。 さらに、たとえば、新しいデータが利用可能になったときや、アルゴリズムコードを変更したいときに、MLパイプラインを複数回実行できます。 リクエストまたはトラフィックをさまざまなSageMakerエンドポイントにルーティングすることもできます。

ニーズと潜在的な企業標準に従って、セキュリティ機能の追加とセキュリティのベストプラクティスの採用を検討することをお勧めします。 さらに、このソリューションをCI / CDパイプラインに組み込むことで、要件に応じてDevOpsのベストプラクティスと標準を採用および確立するためのさらなる機能が提供されます。


著者について

Amazon SageMaker PlatoBlockchain Data Intelligenceを使用して、Terraformで機械学習パイプラインをデプロイおよび管理します。 垂直検索。 愛。オリバー・ゾリコファー アマゾンウェブサービスのデータサイエンティストです。 彼は、グローバル企業の顧客が機械学習モデルを構築、トレーニング、デプロイできるようにするだけでなく、MLOpsを使用してMLモデルのライフサイクルを管理できるようにします。 さらに、彼は関連するクラウドソリューションを構築および設計しています。

タイムスタンプ:

より多くの AWS機械学習