新機能!モデルの比較ができるAmazon SageMakerのShadow Testsを試してみた

記事タイトルとURLをコピーする

こんにちは。クラウドインテグレーション部の村上です。

AWS re:Invent 2022、終わりましたね。今回も「アップデート数半端ないって!」でしたね。

さて、今回のre:Inventで発表されたAmazon SageMakerのShadow Testsを試してみましたので、よければ見てください。

Shadow Testsとは

絵で見るとイメージしやすいと思います。公式ブログからの引用です。

aws.amazon.com

絵から分かることとしては、、

  • 本番環境(production variant)とテスト環境(shadow variant)に対して単一の推論エンドポイントが払い出される
  • リクエストは本番環境・テスト環境どちらにも送られ、クライアントへのレスポンスは本番環境が行う。
  • テスト環境も推論するが、レスポンスはS3バケットに送られる

以上3点ですね。ブルー/グリーンデプロイみたいだな、と理解しました!

試してみた

早速試してみます。

モデルを2つ作成する

モデルを本番・テスト用に2つ作成する必要があるので、たまたま最近やっていたAmazon SageMaker Clarifyのサンプルノートブックを少しいじって作成しました。

sagemaker-examples.readthedocs.io

年齢や学歴等の情報から年収が一定額以上かどうか予測するタスクです。

趣旨とずれるので詳細は記載しませんが、30162件あるデータでトレーニングしたXGBoostモデルと、半分の15081件でトレーニングしたXGBoostモデルを作成しました。

モデルの名前はDEMO-train-half-model-02-12-2022-05-05-37DEMO-train-whole-model-02-12-2022-05-16-19です。

Shadow Testsを作成する

コンソール画面からShadow Testsにいきます。

名前を入力します。

続いて、本番稼働用バリアントとシャドウバリアントを定義します。今はモデルを作成しただけでエンドポイントは存在しないので、「新しいエンドポイントを作成」します。

各バリアントにはモデルをホストするインスタンスタイプやインスタンス数などを設定できます。また、推論リクエストの50%だけをシャドウバリアントにルーティングする、といったことも可能です。

次にシャドウテストを行う期間と、シャドウバリアントが推論した結果を保存するS3バケットを指定します。

これで準備は完了です。

推論リクエストを送ってみる

本番稼働用バリアント

手元のPCから推論リクエストを送ってみます。

>>> # 本番バリアントへの推論リクエスト
>>> endpoint = 'shadow-test-endpoint'
>>> csv_text = '55,2,121912,15,10,2,13,0,4,1,0,0,24,38'
>>> response = runtime.invoke_endpoint(EndpointName=endpoint, ContentType='text/csv', Body=csv_text)
>>> result = json.loads(response['Body'].read().decode())
>>> print(result)
0.3144284784793854

年収が一定額以上である確率は31.4%と返ってきました。

シャドウバリアント

指定したS3バケットを見にいくと、結果が保存されていました。

リクエストの内容と、シャドウバリアントが推論した結果がBase64エンコードした状態で保存されていました。

シャドウバリアントは40.5%で年収が一定以上であると返してきました。

{
    "captureData": {
        "endpointInput": {
            "observedContentType": "text/csv",
            "mode": "INPUT",
            "data": "NTUsMiwxMjE5MTIsMTUsMTAsMiwxMywwLDQsMSwwLDAsMjQsMzg=",
            "encoding": "BASE64"
        },
        "endpointOutput": {
            "observedContentType": "text/csv; charset=utf-8",
            "mode": "OUTPUT",
            "data": "MC40MDUyMDA3MTk4MzMzNzQ=",
            "encoding": "BASE64"
        }
    },
    "eventMetadata": {
        "eventId": "cc06de0c-fe2b-4b0c-8ebe-6da7f19008ba",
        "invocationSource": "ShadowExperiment",
        "inferenceTime": "2022-12-02T06:03:05Z"
    },
    "eventVersion": "0"
}

レイテンシーなども比較できる

公式ブログにもあるようにレイテンシーやCPU使用率などのメトリクスを比較できます。

同じモデルどうしでインスタンスタイプを変更したいときなども使えそうですね。

シャドウバリアントをデプロイする

テストの結果が良ければ、シャドウバリアントを本番として使用することになるかと思います。そんなときもコンソール画面からポチっと設定可能です。

まとめ

Amazon SageMakerのShadow Tests、かなりいいんじゃないでしょうか!

新モデルを作成して、簡単に本番同様のリクエストでパフォーマンスを試せるなんて素敵ですね。

ここまで読んでいただいてありがとうございました。

村上博哉 (執筆記事の一覧)

2020年4月入社。機械学習が好きです。記事へのご意見など:hiroya.murakami@serverworks.co.jp