Amazon SageMaker モデル構築パイプラインを作成し、Amazon SageMaker PlatoBlockchain Data Intelligence で RStudio を使用して R モデルをデプロイします。 垂直検索。 あい。

Amazon SageMaker モデル構築パイプラインを作成し、Amazon SageMaker で RStudio を使用して R モデルをデプロイする

2021年XNUMX月、 RStudio PBC、我々 発表の の一般的な可用性 AmazonSageMakerのRStudioは、業界初の完全マネージド型 RStudio Workbench IDE であり、クラウド上にあります。 現在の RStudio ライセンスを持ち込んで、自己管理型の RStudio 環境を簡単に移行できるようになりました。 アマゾンセージメーカー ほんの数ステップで。

RStudio は、機械学習 (ML) およびデータ サイエンス プロジェクトの R 開発者の間で最も人気のある IDE の XNUMX つです。 RStudio は、R 用のオープンソース ツールと、データ サイエンス チームが組織内で作業を開発および共有するためのエンタープライズ対応のプロフェッショナル ソフトウェアを提供します。 RStudio を SageMaker に導入すると、完全に管理された方法で AWS インフラストラクチャにアクセスできるようになるだけでなく、SageMaker へのネイティブ アクセスも可能になります。

この投稿では、SageMaker で RStudio を介して SageMaker 機能を使用して、R モデルを構築、処理、トレーニング、登録する SageMaker パイプラインを構築する方法を探ります。 また、すべて R を使用して、モデルのデプロイに SageMaker を使用することも検討します。

ソリューションの概要

次の図は、ソリューションで使用されるアーキテクチャを示しています。 この例で使用されているすべてのコードは、 GitHubリポジトリ.

前提条件

この投稿をフォローするには、SageMaker で RStudio にアクセスする必要があります。 SageMaker で RStudio を初めて使用する場合は、以下を確認してください。 AmazonSageMakerでRStudioを使い始めましょう.

また、カスタム Docker コンテナを構築する必要があります。 を使用しております AWS コードビルド これらのコンテナを構築するには、いくつかの追加が必要です AWS IDおよびアクセス管理 (IAM) アクセス許可は、デフォルトでは持っていない可能性があります。 続行する前に、使用している IAM ロールに CodeBuild の信頼ポリシーがあることを確認してください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "codebuild.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

CodeBuild でビルドを実行し、イメージを Amazon エラスティック コンテナ レジストリ (アマゾン ECR):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:DeleteProject",
                "codebuild:CreateProject",
                "codebuild:BatchGetBuilds",
                "codebuild:StartBuild"
            ],
            "Resource": "arn:aws:codebuild:*:*:project/sagemaker-studio*"
        },
        {
            "Effect": "Allow",
            "Action": "logs:CreateLogStream",
            "Resource": "arn:aws:logs:*:*:log-group:/aws/codebuild/sagemaker-studio*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:GetLogEvents",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:log-group:/aws/codebuild/sagemaker-studio*:log-stream:*"
        },
        {
            "Effect": "Allow",
            "Action": "logs:CreateLogGroup",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr:CreateRepository",
                "ecr:BatchGetImage",
                "ecr:CompleteLayerUpload",
                "ecr:DescribeImages",
                "ecr:DescribeRepositories",
                "ecr:UploadLayerPart",
                "ecr:ListImages",
                "ecr:InitiateLayerUpload", 
                "ecr:BatchCheckLayerAvailability",
                "ecr:PutImage"
            ],
            "Resource": "arn:aws:ecr:*:*:repository/sagemaker-studio*"
        },
        {
            "Sid": "ReadAccessToPrebuiltAwsImages",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": [
                "arn:aws:ecr:*:763104351884:repository/*",
                "arn:aws:ecr:*:217643126080:repository/*",
                "arn:aws:ecr:*:727897471807:repository/*",
                "arn:aws:ecr:*:626614931356:repository/*",
                "arn:aws:ecr:*:683313688378:repository/*",
                "arn:aws:ecr:*:520713654638:repository/*",
                "arn:aws:ecr:*:462105765813:repository/*"
            ]
        },
        {
            "Sid": "EcrAuthorizationTokenRetrieval",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
              "s3:GetObject",
              "s3:DeleteObject",
              "s3:PutObject"
              ],
            "Resource": "arn:aws:s3:::sagemaker-*/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket"
            ],
            "Resource": "arn:aws:s3:::sagemaker*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetRole",
                "iam:ListRoles"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringLikeIfExists": {
                    "iam:PassedToService": "codebuild.amazonaws.com"
                }
            }
        }
    ]
}

ベースライン R コンテナーを作成する

SageMaker の処理およびトレーニング ジョブの処理およびトレーニングに R スクリプトを使用するには、独自のスクリプトを作成する必要があります。 ドッカーコンテナ 必要なランタイムとパッケージが含まれています。 SageMaker オファリングの一部である独自のコンテナを使用する機能により、開発者やデータ サイエンティストは、選択したツールやフレームワークを実質的に制限なしで使用できる優れた柔軟性が得られます。

R 対応の Docker コンテナーを XNUMX つ作成します。XNUMX つはジョブの処理用、もう XNUMX つはモデルのトレーニングとデプロイ用です。 通常、データの処理には、モデリングとは異なるパッケージとライブラリが必要になるため、ここでは XNUMX つの段階を分離し、異なるコンテナーを使用するのが理にかなっています。

SageMaker でコンテナを使用する方法の詳細については、次を参照してください。 SageMakerでのDockerコンテナの使用.

処理に使用されるコンテナーは、次のように定義されます。

FROM public.ecr.aws/docker/library/r-base:4.1.2

# Install tidyverse
RUN apt update && apt-get install -y --no-install-recommends 
    r-cran-tidyverse
    
RUN R -e "install.packages(c('rjson'))"

ENTRYPOINT ["Rscript"]

この投稿では、シンプルで比較的軽量なコンテナーを使用します。 ユーザーまたは組織のニーズに応じて、さらにいくつかの R パッケージをプレインストールすることが必要な場合があります。

トレーニングと展開に使用されるコンテナーは、次のように定義されます。

FROM public.ecr.aws/docker/library/r-base:4.1.2

RUN apt-get -y update && apt-get install -y --no-install-recommends 
    wget 
    apt-transport-https 
    ca-certificates 
    libcurl4-openssl-dev 
    libsodium-dev
    
RUN apt-get update && apt-get install -y python3-dev python3-pip 
RUN pip3 install boto3
RUN R -e "install.packages(c('readr','plumber', 'reticulate'),dependencies=TRUE, repos='http://cran.rstudio.com/')"

ENV PATH="/opt/ml/code:${PATH}"

WORKDIR /opt/ml/code

COPY ./docker/run.sh /opt/ml/code/run.sh
COPY ./docker/entrypoint.R /opt/ml/entrypoint.R

RUN /bin/bash -c 'chmod +x /opt/ml/code/run.sh'

ENTRYPOINT ["/bin/bash", "run.sh"]

RStudio カーネルは Docker コンテナーで実行されるため、Studio セッションで直接 Docker コマンドを使用してコンテナーをビルドおよびデプロイすることはできません。 代わりに、非常に便利なライブラリを使用できます sagemaker-studio-image-build、これは基本的にコンテナを構築するタスクを CodeBuild にアウトソーシングします。

次のコマンドを使用して、XNUMX つの Amazon ECR レジストリを作成します。 sagemaker-r-processing & sagemaker-r-train-n-deploy、後で使用するそれぞれのコンテナーをビルドします。

if (!py_module_available("sagemaker-studio-image-build")){py_install("sagemaker-studio-image-build", pip=TRUE)}
system("cd pipeline-example ; sm-docker build . —file ./docker/Dockerfile-train-n-deploy —repository sagemaker-r-train-and-deploy:1.0")
system("cd pipeline-example ; sm-docker build . —file ./docker/Dockerfile-processing —repository sagemaker-r-processing:1.0")

パイプラインを作成する

コンテナが構築されて準備が整ったので、モデル構築ワークフローを調整する SageMaker パイプラインを作成できます。 この完全なコードは、ファイルの下にあります pipeline.R リポジトリで。 SageMaker パイプラインを作成する最も簡単な方法は、ライブラリを使用してアクセスできる Python ライブラリである SageMaker SDK を使用することです。 網状. これにより、R 言語環境を離れることなく、SageMaker のすべての機能にアクセスできます。

構築するパイプラインには、次のコンポーネントがあります。

  • 前処理ステップ – これは SageMaker 処理ジョブです ( sagemaker-r-processing コンテナー) は、データの前処理と、データのトレーニング データセットとテスト データセットへの分割を担当します。
  • トレーニングステップ – これは SageMaker トレーニングジョブです ( sagemaker-r-train-n-deploy コンテナ) モデルのトレーニングを担当します。 この例では、単純な線形モデルをトレーニングします。
  • 評価ステップ – これは SageMaker 処理ジョブです ( sagemaker-r-processing コンテナ) モデルの評価を実行します。 特にこの例では、テスト データセットの RMSE (二乗平均平方根誤差) に関心があり、これを次のステップで使用し、モデル自体に関連付けたいと考えています。
  • 条件付きステップ – これは、SageMaker パイプラインにネイティブな条件付きステップであり、いくつかのパラメーターに基づいてパイプライン ロジックを分岐できるようにします。 この場合、パイプラインは、前のステップで計算された RMSE の値に基づいて分岐します。
  • モデルの登録手順 – 前の条件付きステップが Trueであり、モデルのパフォーマンスが許容範囲内である場合、モデルはモデル レジストリに登録されます。 詳細については、次を参照してください。 モデル レジストリを使用してモデルを登録およびデプロイする.

最初に upsert 関数を呼び出してパイプラインを作成 (または更新) し、次に start 関数を呼び出して実際にパイプラインの実行を開始します。

source("pipeline-example/pipeline.R")
my_pipeline <- get_pipeline(input_data_uri=s3_raw_data)

upserted <- my_pipeline$upsert(role_arn=role_arn)
started <- my_pipeline$start()

パイプラインとモデル レジストリを検査する

SageMaker で RStudio を使用することの優れた点の XNUMX つは、SageMaker プラットフォーム上にいることで、適切なジョブに適切なツールを使用し、必要に応じてツールをすばやく切り替えることができることです。

パイプラインの実行を開始するとすぐに、に切り替えることができます Amazon SageMakerスタジオ、これにより、パイプラインを視覚化し、現在および以前の実行を監視できます。

作成して実行したパイプラインの詳細を表示するには、Studio IDE インターフェイスに移動し、 SageMakerリソース、選択する パイプライン ドロップダウン メニューで、パイプラインを選択します (この場合、 AbalonePipelineUsingR).

Amazon SageMaker モデル構築パイプラインを作成し、Amazon SageMaker PlatoBlockchain Data Intelligence で RStudio を使用して R モデルをデプロイします。 垂直検索。 あい。

これにより、現在および以前のすべての実行を含む、パイプラインの詳細が明らかになります。 次のスクリーンショットのように、最新のものを選択して、パイプラインの視覚的表現を表示します。

パイプラインの DAG は、ステップ間のデータの依存関係、およびカスタムで追加された依存関係 (この例では追加されていません) に基づいて、サービスによって自動的に作成されます。

実行が完了すると、成功した場合、すべてのステップが緑色に変わります。

Amazon SageMaker モデル構築パイプラインを作成し、Amazon SageMaker PlatoBlockchain Data Intelligence で RStudio を使用して R モデルをデプロイします。 垂直検索。 あい。

個々のステップのいずれかを選択すると、入力、出力、ログ、初期構成設定など、特定のステップに関する詳細が表示されます。 これにより、パイプラインをドリルダウンして、失敗したステップを調査できます。

同様に、パイプラインの実行が完了すると、モデルがモデル レジストリに保存されます。 アクセスするには、 SageMakerリソース ペイン、選択 モデルレジストリ ドロップダウンでモデルを選択します。 これにより、次のスクリーンショットに示すように、登録されたモデルのリストが表示されます。 XNUMX つを選択して、その特定のモデル バージョンの詳細ページを開きます。

Amazon SageMaker モデル構築パイプラインを作成し、Amazon SageMaker PlatoBlockchain Data Intelligence で RStudio を使用して R モデルをデプロイします。 垂直検索。 あい。

モデルのバージョンを開いた後、 ステータスの更新 & 承認 モデルを承認します。

この時点で、ユースケースに基づいて、この承認を設定して、ニーズに応じたモデルのデプロイなど、さらなるアクションをトリガーできます。

モデルのサーバーレス デプロイ

SageMaker でモデルをトレーニングして登録した後、SageMaker にモデルをデプロイするのは簡単です。

バッチ推論、リアルタイム エンドポイント、非同期エンドポイントなど、モデルをデプロイする方法にはいくつかのオプションがあります。 各メソッドには、必要なインスタンス タイプやスケーリング メカニズムの選択など、いくつかの必要な構成が付属しています。

この例では、最近発表された SageMaker の機能を使用します。 サーバーレス推論 (執筆時点ではプレビュー モード)、R モデルをサーバーレス エンドポイントにデプロイします。 このタイプのエンドポイントでは、推論のためにモデルに割り当てたい RAM の量と、モデルの同時呼び出しの許容最大数のみを定義します。 SageMaker は、必要に応じてモデルのホスティングと自動スケーリングを処理します。 モデルが使用した正確な秒数とデータに対してのみ課金され、アイドル時間の料金は発生しません。

次のコードを使用して、モデルをサーバーレス エンドポイントにデプロイできます。

model_package_arn <- 'ENTER_MODEL_PACKAGE_ARN_HERE'
model <- sagemaker$ModelPackage(
                        role=role_arn, 
                        model_package_arn=model_package_arn, 
                        sagemaker_session=session)
serverless_config <- sagemaker$serverless$ServerlessInferenceConfig(
                        memory_size_in_mb=1024L, 
                        max_concurrency=5L)
model$deploy(serverless_inference_config=serverless_config, 
             endpoint_name="serverless-r-abalone-endpoint")

エラーが表示された場合 ClientError: An error occurred (ValidationException) when calling the CreateModel operation: Invalid approval status "PendingManualApproval" デプロイするモデルが承認されていません。 前のセクションの手順に従って、モデルを承認します。

デプロイした HTTP エンドポイントにリクエストを送信してエンドポイントを呼び出すか、代わりに SageMaker SDK を使用します。 次のコードでは、いくつかのテスト データでエンドポイントを呼び出します。

library(jsonlite)
x = list(features=format_csv(abalone_t[1:3,1:11]))
x = toJSON(x)

# test the endpoint
predictor <- sagemaker$predictor$Predictor(endpoint_name="serverless-r-abalone-endpoint", sagemaker_session=session)
predictor$predict(x)

呼び出したエンドポイントはサーバーレス エンドポイントであったため、正確な期間と使用されたデータに対して課金されます。 エンドポイントを初めて呼び出すと、応答に約 XNUMX 秒かかることに気付くかもしれません。 これは、サーバーレス エンドポイントのコールド スタート時間が原因です。 すぐに別の呼び出しを行うと、モデルはすでにウォームであるため、リアルタイムで予測を返します。

エンドポイントの実験が終了したら、次のコマンドでエンドポイントを削除できます。

predictor$delete_endpoint(delete_endpoint_config=TRUE)

まとめ

この投稿では、RStudio 環境で R を使用して SageMaker パイプラインを作成するプロセスを説明し、SageMaker モデル レジストリを使用して SageMaker のサーバーレス エンドポイントに R モデルをデプロイする方法を紹介しました。

RStudio と SageMaker を組み合わせることで、当社が選択した優先言語である R を使用して、AWS で完全なエンドツーエンドの ML ワークフローを作成および調整できるようになりました。

このソリューションをさらに深く掘り下げるために、このソリューションのソース コードと他の例を次のサイトで確認することをお勧めします。 GitHubの.


著者について

Amazon SageMaker モデル構築パイプラインを作成し、Amazon SageMaker PlatoBlockchain Data Intelligence で RStudio を使用して R モデルをデプロイします。 垂直検索。 あい。ゲオルギオス・シナス は、EMEA地域のAI/MLのスペシャリストソリューションアーキテクトです。 彼はロンドンを拠点とし、英国とアイルランドの顧客と緊密に協力しています。 Georgiosは、MLOpsの実践に特に関心を持ち、顧客が大規模な機械学習を実行できるようにすることで、顧客がAWSで本番環境に機械学習アプリケーションを設計およびデプロイするのを支援します。 余暇には、旅行、料理、友人や家族との時間を楽しんでいます。

タイムスタンプ:

より多くの AWS機械学習