Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。

Amazon SageMaker シャドウ テストで ML モデルの更新による本番環境への影響を最小限に抑える

アマゾンセージメーカー モデル サービス スタックの新しいバージョンのパフォーマンスを、本番環境への完全なロールアウトの前に現在デプロイされているバージョンと比較できるようになりました。 影のテスト. シャドウ テストは、潜在的な構成エラーやパフォーマンスの問題がエンド ユーザーに影響を与える前に特定するのに役立ちます。 SageMaker を使用すると、シャドー テスト インフラストラクチャの構築に投資する必要がないため、モデルの開発に専念できます。 SageMaker は、本番リクエストを処理する現在のバージョンと一緒に新しいバージョンをデプロイし、リクエストの一部をシャドウ バージョンにルーティングします。 その後、レイテンシーやエラー率などのメトリックを使用して、XNUMX つのバージョンのパフォーマンスを比較できます。 これにより、SageMaker 推論エンドポイントへの本番ロールアウトがパフォーマンスの低下を引き起こさないという確信が高まり、偶発的な設定ミスによる停止を回避するのに役立ちます。

この投稿では、この新しい SageMaker 機能を紹介します。 対応するサンプル ノートブックは、この GitHub で入手できます。 倉庫.

ソリューションの概要

モデル サービス インフラストラクチャは、機械学習 (ML) モデル、サービス コンテナー、またはコンピューティング インスタンスで構成されます。 次のシナリオを考えてみましょう。

  • オフラインで検証された新しいモデルを本番環境に昇格することを検討していますが、この決定を下す前に、待機時間、エラー率などの運用パフォーマンス メトリックを評価したいと考えています。
  • 脆弱性のパッチ適用や新しいバージョンへのアップグレードなど、サービング インフラストラクチャ コンテナの変更を検討しており、本番環境に昇格する前にこれらの変更の影響を評価したいと考えています。
  • ML インスタンスの変更を検討しており、ライブの推論リクエストで新しいインスタンスがどのように機能するかを評価したいと考えています。

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

これらのシナリオごとに、テストする本番バリアントを選択すると、SageMaker は自動的に新しいバリアントをシャドウ モードでデプロイし、同じエンドポイント内でリアルタイムで推論リクエストのコピーをルーティングします。 プロダクション バリアントの応答のみが呼び出し側アプリケーションに返されます。 オフライン比較のために、シャドウ バリアントの応答を破棄するかログに記録するかを選択できます。 必要に応じて、組み込みのダッシュボードを使用して、パフォーマンス メトリックを並べて比較しながらバリアントを監視できます。 この機能は、SageMaker 推論更新エンドポイント API または SageMaker コンソールを介して使用できます。

シャドウ バリアントは、SageMaker 推論エンドポイントのプロダクション バリアント機能の上に構築されます。 繰り返しますが、 生産バリアント ML モデル、サービング コンテナ、および ML インスタンスで構成されます。 各バリアントは他のバリアントから独立しているため、バリアント間で異なるモデル、コンテナー、またはインスタンス タイプを使用できます。 SageMaker では、バリアントごとに Auto Scaling ポリシーを指定できるため、受信負荷に基づいて個別にスケーリングできます。 SageMaker は、エンドポイントごとに最大 10 個の本番バリアントをサポートします。 バリアントの重みを設定して受信トラフィックの一部を受信するようにバリアントを構成するか、受信要求でターゲット バリアントを指定することができます。 プロダクション バリアントからの応答は、呼び出し元に転送されます。

A シャドウ バリアント (新規) 生産バリアントと同じコンポーネントがあります。 リクエストのユーザー指定部分。 トラフィック サンプリングの割合、シャドウ バリアントに転送されます。 シャドウ バリアントの応答をログに記録することを選択できます。 Amazon シンプル ストレージ サービス (Amazon S3) または破棄します。

SageMaker は、エンドポイントごとに最大 XNUMX つのシャドウ バリアントをサポートすることに注意してください。 シャドウ バリアントを持つエンドポイントの場合、最大 XNUMX つのプロダクション バリアントが存在できます。

プロダクション バリアントとシャドウ バリアントを設定したら、 呼び出しメトリック プロダクション バリアントとシャドウ バリアントの両方 アマゾンクラウドウォッチAWS/SageMaker 名前空間。 SageMaker エンドポイントへのすべての更新は、 ブルー/グリーン展開 可用性を損なうことなく発生します。 エンドポイントは、シャドウ バリアントを追加、変更、または削除しても、プロダクション リクエストに応答し続けます。

この機能は、次の XNUMX つの方法のいずれかで使用できます。

  • SageMaker コンソールを使用したマネージド シャドウ テスト – コンソールを活用して、ガイド付きエクスペリエンスを提供し、シャドウ テストのエンド ツー エンドのジャーニーを管理できます。 これにより、事前定義された期間のシャドウ テストをセットアップし、ライブ ダッシュボードで進行状況を監視し、完了時にクリーンアップし、結果に基づいて行動することができます。
  • SageMaker Inference API を使用したセルフサービスのシャドウ テスト – デプロイ ワークフローでエンドポイントの作成/更新/削除 API を既に使用している場合は、引き続きそれらを使用してシャドウ バリアントを管理できます。

以下のセクションでは、これらの各シナリオについて説明します。

シナリオ 1 – SageMaker コンソールを使用したマネージド シャドウ テスト

シャドウ テストの結果を作成、管理、処理するエンドツーエンドのワークフローを管理するために SageMaker を選択する場合は、SageMaker コンソールの [推論] セクションでシャドウ テストの機能を使用することを検討してください。 前述のように、これにより、事前定義された期間のシャドウ テストをセットアップし、ライブ ダッシュボードで進行状況を監視し、完了時にクリーンアップ オプションを提示し、結果に基づいて行動することができます。 詳細については、シャドウ テストを参照してください。 この機能の段階的なウォークスルーについては、ドキュメントを参照してください。

前提条件

本番用とシャドウ用のモデルは、SageMaker で作成する必要があります。 を参照してください。 CreateModel API こちら.

ステップ 1 – シャドウ テストを作成する

に移動します 推論 SageMaker コンソールの左側のナビゲーション パネルのセクションをクリックし、[シャドウ テスト] を選択します。 これにより、スケジュール済み、実行中、および完了したすべてのシャドウ テストを含むダッシュボードが表示されます。 クリック 'シャドー テストを作成する」. テストの名前を入力し、次へを選択します。

これにより、シャドウ テストの設定ページが表示されます。 既存の IAM ロールを選択するか、 AmazonSageMakerFullAccess IAM ポリシーが添付されています。 次に、「新しいエンドポイントを作成します' 名前 (xgb-prod-shadow-1) を入力します。 「追加' バリアントセクションにあります。 ' で作成したモデルを選択できます。モデルを追加' ダイアログボックス。 これにより、生産またはバリアントが作成されます。 必要に応じて、各バリアントに関連付けられたインスタンス タイプと数を変更できます。

すべてのトラフィックはプロダクション バリアントに送られ、呼び出しリクエストに応答します。 を変更することで、シャドウ バリアントにルーティングされるリクエストの一部を制御できます。 Traffic Sampling Percentage.

テストの期間は、30 時間から 7 日間まで制御できます。 指定しない場合、デフォルトは XNUMX 日間です。 この期間が過ぎると、テストは完了としてマークされます。 既存のエンドポイントでテストを実行している場合、完了時にテストを開始する前の状態にロールバックされます。

オプションで、Shadow バリアントのリクエストとレスポンスをキャプチャすることができます。 データキャプチャ オプション。 指定しない場合、シャドウ バリアントの応答は破棄されます。

Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。

Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。

ステップ 2 – シャドー テストを監視する

に移動して、シャドウ テストのリストを表示できます。 Shadow Tests 推論の下のセクション。 前の手順で作成したシャドウ テストをクリックして、シャドウ テストの詳細を表示し、進行中または完了後に監視します。

Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。

メトリクス セクションでは、主要なメトリクスの比較を提供し、プロダクション バリアントとシャドウ バリアント間のオーバーレイ グラフと、説明的な統計情報を提供します。 次のような呼び出しメトリックを比較できます。 ModelLatency および Invocation4xxErrors などのインスタンス メトリックと同様に、 CPUUtilization および DiskUtilization.

Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。

ステップ 3 – シャドウ バリアントを新しいプロダクション バリアントにプロモートする

比較すると、シャドウ バリアントを新しいプロダクション バリアントにプロモートするか、シャドウ バリアントを削除するかを選択できます。 これらの両方のオプションについて、「完了をマーク' ページの上部にあります。 これにより、シャドウ バリアントを昇格または削除するオプションが提示されます。

昇格を選択すると、展開ページが表示され、展開前にバリアント設定を確認できます。 展開する前に、呼び出しトラフィックを 100% 処理できるようにシャドウ バリアントのサイズを調整することをお勧めします。 別のインスタンス タイプまたはサイズを評価するためにシャドー テストを使用していない場合は、「生産バリアント設定を保持. それ以外の場合は、'シャドウ バリアント設定を保持. このオプションを選択する場合は、トラフィック サンプリングが 100% に設定されていることを確認してください。 または、これらの設定をオーバーライドする場合は、インスタンスのタイプと数を指定できます。

デプロイを確認すると、SageMaker はエンドポイントの更新を開始して、シャドウバリアントを新しい本番バリアントに昇格させます。 SageMaker のすべての更新と同様に、更新中もエンドポイントは引き続き動作します。

Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。

Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。

シナリオ 2: SageMaker 推論 API を使用したシャドウテスト

このセクションでは、既存の SageMaker create/update/delete-endpoint API を使用してシャドウ バリアントをデプロイする方法について説明します。

この例では、事前トレーニング済みのモデルの XNUMX つの異なるバージョンを表す XNUMX つの XGBoost モデルがあります。 model.tar.gz は、現在本番環境にデプロイされているモデルです。 model2 は新しいモデルであり、本番環境での使用を決定する前に、レイテンシなどの運用指標の観点からパフォーマンスをテストしたいと考えています。 展開します model2 のシャドウ バリアントとして model.tar.gz. 両方の事前トレーニング済みモデルはパブリック S3 バケットに保存されます s3://sagemaker-sample-files. 最初にモデルをローカル コンピューティング インスタンスにダウンロードしてから、S3 にアップロードします。

この例のモデルは、モバイル顧客が現在のモバイルオペレーターを離れる確率を予測するために使用されます。 私たちが使用するデータセットは公開されており、本で言及されています データの知識を発見する ダニエル・T・ラローズ著。 これらのモデルは、 XGBチャーン予測ノートブック SageMaker で。 独自の事前トレーニング済みモデルを使用することもできます。その場合、ダウンロードをスキップできます。 s3://sagemaker-sample-files 独自のモデルを model/ フォルダーに直接コピーします。

!aws s3 cp s3://sagemaker-sample-files/models/xgb-churn/xgb-churn-prediction-model.tar.gz model/
!aws s3 cp s3://sagemaker-sample-files/models/xgb-churn/xgb-churn-prediction-model2.tar.gz model/

ステップ 1 – モデルを作成する

モデルファイルを独自の S3 バケットにアップロードし、XNUMX つの SageMaker モデルを作成します。 次のコードを参照してください。

model_url = S3Uploader.upload(
    local_path="model/xgb-churn-prediction-model.tar.gz",
    desired_s3_uri=f"s3://{bucket}/{prefix}",
)
model_url2 = S3Uploader.upload(
    local_path="model/xgb-churn-prediction-model2.tar.gz",
    desired_s3_uri=f"s3://{bucket}/{prefix}",
from sagemaker import image_uris
image_uri = image_uris.retrieve("xgboost", boto3.Session().region_name, "0.90-1")
image_uri2 = image_uris.retrieve("xgboost", boto3.Session().region_name, "0.90-2")

model_name = f"DEMO-xgb-churn-pred-{datetime.now():%Y-%m-%d-%H-%M-%S}"
model_name2 = f"DEMO-xgb-churn-pred2-{datetime.now():%Y-%m-%d-%H-%M-%S}"

resp = sm.create_model(
    ModelName=model_name,
    ExecutionRoleArn=role,
    Containers=[{"Image": image_uri, "ModelDataUrl": model_url}],
)

resp = sm.create_model(
    ModelName=model_name2,
    ExecutionRoleArn=role,
    Containers=[{"Image": image_uri2, "ModelDataUrl": model_url2}],
)

ステップ 2 – XNUMX つのモデルを本番バリアントとシャドウ バリアントとしてリアルタイム推論エンドポイントにデプロイする

プロダクション バリアントとシャドウ バリアントを含むエンドポイント構成を作成します。 の ProductionVariants および ShadowProductionVariants は特に興味深いものです。 これらの両方のバリアントには、5 つの vCPU と 4 GiB のメモリを備えた ml.m16.xlarge インスタンスがあり、初期インスタンス数は 1 に設定されています。次のコードを参照してください。

ep_config_name = f"Shadow-EpConfig-{datetime.now():%Y-%m-%d-%H-%M-%S}"
production_variant_name = "production"
shadow_variant_name = "shadow"
create_endpoint_config_response = sm.create_endpoint_config(
    EndpointConfigName=ep_config_name,
    ProductionVariants=[
    # Type: Array of ProductionVariant (https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html) objects
      { 
         "VariantName": shadow_variant_name,
        {
            "VariantName": production_variant_name,
            "ModelName": model_name,
            "InstanceType": "ml.m5.xlarge",
            "InitialInstanceCount": 2,
            "InitialVariantWeight": 1,
        }
    ],
     # Type: Array of ShadowProductionVariants 
    ShadowProductionVariants = [
         "ModelName": model_name2,
         "InitialInstanceCount": 1,
         "InitialVariantWeight": 0.5,
         "InstanceType": "ml.m5.xlarge" 
      }
   ]
)

最後に、プロダクション バリアントとシャドウ バリアントを作成します。

endpoint_name = f"xgb-prod-shadow-{datetime.now():%Y-%m-%d-%H-%M-%S}"
create_endpoint_api_response = sm.create_endpoint(
                                    EndpointName=endpoint_name,
                                    EndpointConfigName=ep_config_name,
                                )

ステップ 3 – テストのためにエンドポイントを呼び出す

エンドポイントが正常に作成されたら、呼び出しを開始できます。 約 3,000 件のリクエストを順次送信します。

def invoke_endpoint(endpoint_name, wait_interval_sec=0.01, should_raise_exp=False):
    with open("test_data/test-dataset-input-cols.csv", "r") as f:
        for row in f:
            payload = row.rstrip("n")
            try:
                for i in range(10): #send the same payload 10 times for testing purpose
                    response = sm_runtime.invoke_endpoint(
                        EndpointName=endpoint_name, ContentType="text/csv", Body=payload
                    )
            except Exception as e:
                print("E", end="", flush=True)
                if should_raise_exp:
                    raise e

invoke_endpoint(endpoint_name)

ステップ 4 – 指標を比較する

本番モデルとシャドウ モデルの両方をデプロイしたので、呼び出しメトリックを比較してみましょう。 比較可能な呼び出しメトリックのリストについては、次を参照してください。 Amazon CloudWatchでAmazon SageMakerを監視する. プロダクション バリアントとシャドウ バリアントの呼び出しを比較することから始めましょう。

  InvocationsPerInstance メトリックは、本番バリアントに送信された呼び出しの数を指します。 バリアントの重みで指定されたこれらの呼び出しの一部は、シャドウ バリアントに送信されます。 インスタンスあたりの呼び出しは、呼び出しの総数をバリアント内のインスタンスの数で割ることによって計算されます。 次のグラフに示すように、プロダクション バリアントとシャドウ バリアントの両方が、エンドポイント構成で指定された重みに従って呼び出しリクエストを受信して​​いることを確認できます。

Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。

次に、モデルのレイテンシーを比較してみましょう (ModelLatency メトリクス) プロダクション バリアントとシャドウ バリアントの間。 モデルレイテンシーは、SageMaker から見たモデルが応答するのにかかる時間です。 エンドユーザーをシャドウ バリアントにさらすことなく、シャドウ バリアントのモデル レイテンシがプロダクション バリアントとどのように比較されるかを観察できます。

Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。

オーバーヘッドのレイテンシ (OverheadLatency メトリクス) をプロダクション バリアントとシャドウ バリアント間で比較できるようにします。 オーバーヘッドレイテンシーは、SageMaker がリクエストを受信して​​からクライアントにレスポンスを返すまでの間隔から、モデルのレイテンシーを差し引いたものです。

Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。

ステップ 5 - シャドウ バリアントをプロモートする

シャドウ モデルを本番環境に昇格するには、現在のエンドポイント構成を使用して新しいエンドポイント構成を作成します。 ShadowProductionVariant 新しいとして ProductionVariant を削除します ShadowProductionVariant. これにより、現在の ProductionVariant シャドウ バリアントをプロモートして、新しいプロダクション バリアントにします。 いつものように、すべての SageMaker の更新は内部でブルー/グリーン デプロイとして調整され、更新の実行中に可用性が失われることはありません。

オプションで、活用できます 展開ガードレール 更新中に一括トラフィックシフトと自動ロールバックを使用する場合。

promote_ep_config_name = f"PromoteShadow-EpConfig-{datetime.now():%Y-%m-%d-%H-%M-%S}"

create_endpoint_config_response = sm.create_endpoint_config(
    EndpointConfigName=promote_ep_config_name,
    ProductionVariants=[
        {
            "VariantName": shadow_variant_name,
            "ModelName": model_name2,
            "InstanceType": "ml.m5.xlarge",
            "InitialInstanceCount": 2,
            "InitialVariantWeight": 1.0,
        }
    ],
)
print(f"Created EndpointConfig: {create_endpoint_config_response['EndpointConfigArn']}")

update_endpoint_api_response = sm.update_endpoint(
    EndpointName=endpoint_name,
    EndpointConfigName=promote_ep_config_name,
)

wait_for_endpoint_in_service(endpoint_name)

sm.describe_endpoint(EndpointName=endpoint_name)

ステップ6–クリーンアップ

このエンドポイントを今後使用する予定がない場合は、追加料金が発生しないようにエンドポイントを削除し、このブログで作成された他のリソースをクリーンアップする必要があります。

dsm.delete_endpoint(EndpointName=endpoint_name)
sm.delete_endpoint_config(EndpointConfigName=ep_config_name)
sm.delete_endpoint_config(EndpointConfigName=promote_ep_config_name)
sm.delete_model(ModelName=model_name)
sm.delete_model(ModelName=model_name2)

まとめ

この投稿では、SageMaker 推論の新しい機能を紹介し、シャドーテストとして知られるデプロイの安全プラクティスを使用して、完全な本番ロールアウトの前に、スタックを提供するモデルの新しいバージョンのパフォーマンスを現在デプロイされているバージョンと比較しました。 シャドウ バリアントとメソッドを使用してバリアントを構成する利点について説明しました。 エンドツーエンドの例. シャドウ バリアントの詳細については、シャドウ テストを参照してください。 ドキュメント.


著者について

Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。ラグーラメシャ は、Amazon SageMaker Service チームの機械学習ソリューション アーキテクトです。 彼は、お客様が ML 本番ワークロードを大規模に構築、デプロイ、および SageMaker に移行するのを支援することに重点を置いています。 機械学習、AI、コンピューター ビジョンの分野を専門とし、UT ダラスでコンピューター サイエンスの修士号を取得しています。 余暇には、旅行と写真を楽しんでいます。

Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。チンウェイ・リー アマゾンウェブサービスの機械学習スペシャリストです。 彼は博士号を取得しました。 アドバイザーの研究助成金口座を破り、約束したノーベル賞を授与できなかった後、オペレーションズリサーチで。 現在、彼は金融サービスおよび保険業界の顧客がAWSで機械学習ソリューションを構築するのを支援しています。 暇なときは、読書と教育が好きです。

Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。趙奇雲 Amazon SageMaker 推論プラットフォームチームのシニアソフトウェア開発エンジニアです。 彼は Deployment Guardrails と Shadow Deployments の主任開発者であり、高可用性を備えた大規模な ML ワークロードとデプロイを顧客が管理できるよう支援することに重点を置いています。 彼はまた、迅速で安全な ML ジョブの展開と ML オンライン実験の実行を容易にするためのプラットフォーム アーキテクチャの進化にも取り組んでいます。 余暇には、読書、ゲーム、旅行を楽しんでいます。

Amazon SageMaker シャドウ テスト PlatoBlockchain Data Intelligence を使用して、ML モデルの更新による本番環境への影響を最小限に抑えます。垂直検索。あい。タルン・サイラム Amazon SageMaker Inference のシニア プロダクト マネージャーです。 彼は、機械学習の最新トレンドについて学び、顧客がそれらを活用できるよう支援することに関心があります。 余暇には、サイクリング、スキー、テニスを楽しんでいます。

タイムスタンプ:

より多くの AWS機械学習