ローリングデプロイ - Amazon SageMaker

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

ローリングデプロイ

エンドポイントを更新するときに、ローリングデプロイを指定して、トラフィックを古いフリートから新しいフリートに徐々に移行することができます。評価期間を指定して古いフリートのインスタンスを終了する前に新しいインスタンスに問題がないか監視できるだけでなく、移行トラフィックのステップのサイズも制御できます。ローリングデプロイでは、各トラフィックが新しいフリートに移行された後、古いフリートのインスタンスがクリーンアップされるので、エンドポイントの更新に必要な追加インスタンスの量が減ります。これは、高需要の高速化されたインスタンスで特に役立ちます。

ローリングデプロイでは、設定可能なバッチサイズでエンドポイントを更新することにより、モデルの以前のバージョンのデプロイを新しいバージョンに徐々に置き換えます。ローリングデプロイのトラフィックの移行動作はブルー/グリーンデプロイの線形トラフィック移行モードに似ていますが、ブルー/グリーンデプロイと比較し、ローリングデプロイにはキャパシティ要件が削減されるというメリットがあります。ローリングデプロイでは、一度にアクティブになるインスタンスが少なくなり、新しいフリートで更新するインスタンスの数をきめ細かく制御できます。大規模モデルや多くのインスタンスを持つ大規模エンドポイントを使用している場合は、ブルー/グリーンデプロイの代わりにローリングデプロイの使用を検討する必要があります。

次のリストでは、Amazon でのローリングデプロイの主な機能について説明します SageMaker。

  • ベーキング期間。ベーキング期間とは、次のデプロイステージに進む前に新しいフリートを監視する一定の時間のことです。どのベーキング期間中においても、事前に指定したアラームのいずれかが作動した場合、すべてのエンドポイントトラフィックは古いフリートにロールバックされます。ベーキング期間は、トラフィックシフトを永続的なものにする前に、更新の信頼を構築するのに役立ちます。

  • ローリングのバッチサイズ。トラフィック移行のための各バッチサイズ、または各バッチで更新するインスタンスの数をきめ細かく制御できます。この数値は、フリートのサイズの 5~50% の範囲で設定できます。バッチサイズは、インスタンス数、またはフリート全体の割合として指定できます。

  • 自動ロールバック。が新しいフリートのモニタリング SageMaker に使用する Amazon CloudWatch アラームを指定できます。更新されたコードの問題によってアラームが作動した場合、 は可用性を維持するために古いフリートへの自動ロールバック SageMaker を開始し、リスクを最小限に抑えます。

注記

エンドポイントが [除外事項] ページに一覧表示されているいずれかの機能を使用している場合、ローリングデプロイは使用できません。

仕組み

ローリングデプロイ中、 は、すべての新しいインスタンスを一度にプロビジョニングすることなく、古いフリートから新しいフリートにトラフィックをシフトするインフラストラクチャ SageMaker を提供します。 は、トラフィックをシフトするために次のステップ SageMaker を使用します。

  1. SageMaker は、新しいフリート内のインスタンスの最初のバッチをプロビジョニングします。

  2. トラフィックの一部は、古いインスタンスから新しいインスタンスの最初のバッチに移行されます。

  3. ベーキング期間の後、Amazon CloudWatch アラームが作動しない場合、 は古いインスタンスのバッチを SageMaker クリーンアップします。

  4. SageMaker は、デプロイが完了するまでインスタンスをバッチでプロビジョニング、シフト、クリーンアップし続けます。

いずれかのベーキング期間中にアラームが作動すると、トラフィックは指定したサイズのバッチで古いフリートにロールバックされます。また、ローリングデプロイを指定し、アラームが作動した場合にトラフィックの 100% を古いフリートに戻すこともできます。

次の図は、前のステップで説明したように、ローリングデプロイが成功する場合の進行状況を示しています。

ローリングデプロイのトラフィックが古いフリートから新しいフリートに正常に移行するステップ。

目的のデプロイ構成を指定するだけでローリングデプロイを作成できます。次に、新しいインスタンスのプロビジョニング、古いインスタンスの終了、トラフィックの移行 SageMaker を処理します。デプロイを作成および管理するには、既存の および UpdateEndpoint CreateEndpoint SageMaker APIおよび AWS Command Line Interface コマンドを使用します。

前提条件

ローリングデプロイを設定する前に、エンドポイントからメトリクスを監視する Amazon CloudWatch アラームを作成する必要があります。ベーキング期間中にアラームが作動した場合、トラフィックは古いフリートにロールバックされます。エンドポイントで CloudWatch アラームを設定する方法については、「Auto-Rollback Configuration and Monitoring」の前提条件ページを参照してください。 CloudWatch アラームの詳細については、「Amazon CloudWatch ユーザーガイド」の「Amazon アラームの使用 CloudWatch 」を参照してください。

また、[除外事項] ページを確認して、エンドポイントがローリングデプロイの要件を満たしていることを確認してください。

ローリングのバッチサイズを決定する

エンドポイントを更新する前に、新しいフリートにトラフィックを段階的に移行するのに使用するバッチサイズを決定します。

ローリングデプロイでは、バッチサイズにフリートの容量の 5~50% を指定できます。大きいバッチサイズを選択すると、デプロイはより短時間で完了します。ただし、エンドポイントが更新中に必要とする容量は、バッチサイズのオーバーヘッドとほぼ同じであることに注意してください。小さいバッチサイズを選択した場合、デプロイには時間がかかりますが、デプロイ中に使用する容量は少なくなります。

ローリングデプロイを設定する

デプロイの準備が整い、エンドポイントの CloudWatch アラームを設定したら、 の SageMaker UpdateEndpointAPIまたは update-endpoint コマンドを使用してデプロイ AWS Command Line Interface を開始できます。

エンドポイントを更新する方法

次の例は、Boto3 SageMaker クライアントの update_endpoint メソッドを使用して、ローリングデプロイでエンドポイントを更新する方法を示しています。

ローリングデプロイを設定するには、次の例とフィールドを使用します。

  • EndpointName には、更新する既存のエンドポイントの名前を使用します。

  • EndpointConfigName には、使用するエンドポイント設定の名前を使用します。

  • AutoRollbackConfiguration オブジェクトの Alarmsフィールド内で、 CloudWatch アラームを名前で追加できます。使うアラームごとに 1 つの AlarmName: <your-cw-alarm> エントリを作成します。

  • DeploymentConfig で、RollingUpdatePolicy オブジェクトに次のフィールドを指定します。

    • MaximumExecutionTimeoutInSeconds — デプロイの合計制限時間。この制限を超えるとタイムアウトになります。このフィールドに指定できる最大値は 28800 秒、つまり 8 時間です。

    • WaitIntervalInSeconds — ベーキング期間の長さ。 は新しいフリートの各バッチのアラームを SageMaker モニタリングします。

    • MaximumBatchSize — 使用するバッチの Type (インスタンス数またはフリート全体に対する割合) と Value、または各バッチのサイズを指定します。

    • RollbackMaximumBatchSize — このオブジェクトを使用して、アラームが作動した場合のロールバック戦略を指定します。使用するバッチの Type (インスタンス数またはフリート全体に対する割合) と Value、または各バッチのサイズを指定します。これらのフィールドを指定しない場合、または値をエンドポイントの 100% に設定すると、 はブルー/グリーンロールバック戦略 SageMaker を使用し、アラームが作動するとすべてのトラフィックを古いフリートにロールバックします。

import boto3 client = boto3.client("sagemaker") response = client.update_endpoint( EndpointName="<your-endpoint-name>", EndpointConfigName="<your-config-name>", DeploymentConfig={ "AutoRollbackConfiguration": { "Alarms": [ { "AlarmName": "<your-cw-alarm>" }, ] }, "RollingUpdatePolicy": { "MaximumExecutionTimeoutInSeconds": number, "WaitIntervalInSeconds": number, "MaximumBatchSize": { "Type": "INSTANCE_COUNT" | "CAPACITY_PERCENTAGE" (default), "Value": number }, "RollbackMaximumBatchSize": { "Type": "INSTANCE_COUNT" | "CAPACITY_PERCENTAGE" (default), "Value": number }, } } )

エンドポイントを更新した後、ローリングデプロイのステータスやエンドポイントの正常性を確認したい場合があります。 SageMaker コンソールでエンドポイントのステータスを確認するか、 DescribeEndpoint を使用してエンドポイントのステータスを確認できますAPI。

によって返される VariantStatus オブジェクトでAPI、 DescribeEndpoint Statusフィールドはエンドポイントの現在のデプロイまたは運用ステータスを示します。可能なステータスとその意味の詳細については、「」を参照してくださいProductionVariantStatus

ローリングデプロイを試み、エンドポイントのステータスが UpdateRollbackFailed の場合、トラブルシューティングヘルプについて次のセクションを参照してください。

障害処理

ローリングデプロイが失敗し、自動ロールバックも同様の場合、エンドポイントのステータスは UpdateRollbackFailed のままです。このステータスは、エンドポイントの背後にあるインスタンスに異なるエンドポイント設定がデプロイされ、古いエンドポイント設定と新しいエンドポイント設定が混在してサービスが稼働中であることを意味しています。

に再度呼び出しUpdateEndpointAPIて、エンドポイントを正常な状態に戻すことができます。目的のエンドポイント設定とデプロイ設定 (ローリングデプロイ、ブルー/グリーンデプロイ、またはどちらでもない) を指定して、エンドポイントを更新します。

を呼び出しDescribeEndpointAPIてエンドポイントの状態を再度確認できます。これは、 VariantStatus オブジェクトで Statusフィールドとして返されます。更新が成功すると、エンドポイントの StatusInService に戻ります。