リアルタイム推論用のモデルをデプロイする - Amazon SageMaker

リアルタイム推論用のモデルをデプロイする

重要

Amazon SageMaker Studio または Amazon SageMaker Studio Classic に Amazon SageMaker リソースの作成を許可するカスタム IAM ポリシーでは、これらのリソースにタグを追加するアクセス許可も付与する必要があります。Studio と Studio Classic は、作成したリソースに自動的にタグ付けするため、リソースにタグを追加するアクセス許可が必要になります。IAM ポリシーで Studio と Studio Classic によるリソースの作成が許可されていても、タグ付けが許可されていない場合は、リソースを作成しようとしたときに「AccessDenied」エラーが発生する可能性があります。詳細については、「SageMaker リソースにタグ付けのアクセス許可を付与する」を参照してください。

SageMaker リソースを作成するためのアクセス許可を付与する Amazon SageMaker 向けの AWS マネージドポリシー には、それらのリソースの作成中にタグを追加するためのアクセス許可もあらかじめ含まれています。

SageMaker ホスティングサービスを使用してモデルをデプロイするには、複数のオプションがあります。SageMaker Studio を使用してモデルをインタラクティブにデプロイできます。または、SageMaker Python AWS SDK や SDK for Python (Boto3) などの SDK を使用し、プログラムからモデルをデプロイすることもできます。AWS CLI を使用してデプロイすることもできます。

開始する前に

SageMaker モデルをデプロイする前に、次を探して記録してください:

  • Amazon S3 バケットが配置された AWS リージョン リージョン

  • モデルアーティファクトが保存されている Amazon S3 URI パス

  • SageMaker の IAM ロール

  • 推論コードを含むカスタムイメージの Docker Amazon ECR URI レジストリパス、または AWS がサポートする組み込みの Docker イメージのフレームワークとバージョン。

各 AWS リージョンで使用可能な AWS のサービスのリストについては、「リージョンマップとエッジネットワーク」を参照してください。IAM ロールの作成については、「IAM ロールの作成」を参照してください。

重要

モデルアーティファクトが保存されている Amazon S3 バケットは、作成するモデルと同じ AWS リージョン に存在している必要があります。

複数のモデルでリソース使用率を共有する

Amazon SageMaker を使用して、エンドポイントにモデルを 1 つまたは複数デプロイできます。複数のモデルがエンドポイントを共有する場合は、そこでホストされるリソース (ML 演算処理インスタンス、CPU、アクセラレーターなど) を共同で使用します。エンドポイントに複数のモデルを柔軟にデプロイするには、各モデルを推論コンポーネントとして定義するのが一番です。

推論コンポーネント

推論コンポーネントは、モデルをエンドポイントにデプロイするために使用できる SageMaker ホスティングオブジェクトです。推論コンポーネント設定では、モデル、エンドポイント、およびエンドポイントがホストするリソースをモデルがどのように使用するかを指定します。モデルを指定する際、SageMaker Model オブジェクトを指定することも、モデルアーティファクトとイメージを直接指定することもできます。

設定では、必要な CPU コア、アクセラレータ、メモリをモデルに割り当てる方法を調整することで、リソース使用率を最適化できます。エンドポイントに複数の推論コンポーネントをデプロイし、各推論コンポーネントに 1 つのモデルと、そのモデルのリソース使用率のニーズを含めることができます。

推論コンポーネントをデプロイした後、SageMaker API で InvokeEndpoint アクションを使用すると、関連付けられたモデルを直接呼び出すことができます。

推論コンポーネントには以下の利点があります。

柔軟性

推論コンポーネントでは、モデルのホスティングの詳細がエンドポイント自体から切り離されます。そのため、モデルをエンドポイントでどのようにホスティングおよび提供するかを柔軟にコントロールできます。同じインフラストラクチャで複数のモデルをホスティングし、必要に応じてエンドポイントにモデルを追加または削除できます。各モデルは個別にアップデートできます。

スケーラビリティ

ホストする各モデルのコピー数を指定したり、モデルがリクエストを処理するために必要なコピーの最小数を設定したりできます。推論コンポーネントのコピーをゼロにスケールダウンすることで、別のコピーをスケールアップする余地を作成できます。

以下を使用してモデルをデプロイすると、SageMaker がモデルを推論コンポーネントとしてパッケージ化します。

  • SageMaker Studio Classic。

  • Model オブジェクトをデプロイする SageMaker Python SDK (エンドポイントタイプを EndpointType.INFERENCE_COMPONENT_BASED に設定した場合)。

  • エンドポイントにデプロイする InferenceComponent オブジェクトを定義する AWS SDK for Python (Boto3)。

SageMaker Studio を使用してモデルをデプロイする

SageMaker Studio を使用してモデルをインタラクティブに作成およびデプロイするには、次の手順を実行します。Studio の詳細については、Studio のドキュメントを参照してください。さまざまなデプロイシナリオの詳細なチュートリアルについては、ブログ「Package and deploy classical ML models and LLMs easily with Amazon SageMaker – Part 2」を参照してください。

アーティファクトとアクセス許可を準備する

SageMaker Studio でモデルを作成する前に、このセクションを完了してください。

アーティファクトを Studio に取り入れてモデルを作成する場合、次の 2 つのオプションがあります:

  1. モデルアーティファクト、カスタム推論コード、requirements.txt ファイルに記載されている依存関係を含めて tar.gz アーカイブにあらかじめパッケージ化できます。

  2. SageMaker からアーティファクトをパッケージ化できます。未加工のモデルアーティファクトと依存関係を requirements.txt ファイルに取り込むだけで、SageMaker によってデフォルトの推論コードが提供されます (または、デフォルトのコードを独自のカスタム推論コードで上書きすることもできます)。PyTorch、XGBoost のフレームワークであれば、SageMaker でこのオプションを使用できます。

モデル、AWS Identity and Access Management (IAM) ロール、および Docker コンテナ (または SageMaker に構築済みのコンテナがあるフレームワークとバージョン) を取り込むだけでなく、SageMaker Studio を使用してモデルを作成およびデプロイするためのアクセス許可を付与する必要もあります。

AmazonSageMakerFullAccess ポリシーを IAM ロールにアタッチし、SageMaker と他のサービスへのアクセスを可能にする必要があります。Studio でインスタンスタイプの料金を確認するには、AWSPriceListServiceFullAccess ポリシーもアタッチする必要があります (または、ポリシー全体をアタッチしない場合は、pricing:GetProducts アクションを使用します)。

モデルの作成時にモデルアーティファクトをアップロードする場合 (または推論レコメンデーションのサンプルペイロードファイルをアップロードする場合)、Amazon S3 バケットを作成する必要があります。バケット名には、 SageMakerという単語のプレフィックスを付ける必要があります。SageMaker 大文字小文字 (Sagemaker または sagemaker) は区別されません。

バケット命名規則 sagemaker-{Region}-{accountID} を使用することをお勧めします。このバケットは、アップロードしたアーティファクトを保存するために使用されます。

バケットを作成したら、次の CORS (クロスオリジンリソース共有) ポリシーをバケットにアタッチします。

[ { "AllowedHeaders": ["*"], "ExposeHeaders": ["Etag"], "AllowedMethods": ["PUT", "POST"], "AllowedOrigins": ['https://*.sagemaker.aws'], } ]

次のいずれかの方法で、CORS ポリシーを Amazon S3 バケットにアタッチします。

デプロイモデルを作成する

この手順では、アーティファクトおよびその他の項目 (コンテナとフレームワーク、カスタム推論コード、ネットワーク設定など) を SageMaker で入力して、モデルのデプロイ可能なバージョンを作成します。

SageMaker Studio でデプロイ可能なモデルを作成するには、次の手順を実行します。

  1. SageMaker Studio アプリケーションを開きます。

  2. 左のナビゲーションペインで [モデル] を選択します。

  3. [デプロイ可能なモデル] タブを選択します。

  4. デプロイ可能なモデルページで [作成] を選択します。

  5. デプロイ可能なモデルの作成ページの [モデル名] フィールドに、モデルの名前を入力します。

デプロイ可能なモデルの作成ページで入力するセクションは、他にもいくつかあります。

[コンテナ定義] セクションは次のスクリーンショットのようになります。

Studio でモデルを作成する際の [コンテナ定義] セクションのスクリーンショット。
[コンテナ定義] セクションで以下を実行します。
  1. [コンテナタイプ] には、SageMaker マネージドのコンテナを使用する場合は [構築済みコンテナ] を選択し、独自のコンテナを使用する場合は [独自のコンテナ] を選択します。

  2. [構築済みコンテナ] を選択した場合、使用する [コンテナフレームワーク][フレームワークバージョン]、および [ハードウェアタイプ] を選択します。

  3. [独自のコンテナ] を選択した場合は、[コンテナイメージへの ECR パス] にAmazon ECR パスを入力します。

次に、[アーティファクト]セクションを次のスクリーンショットのように入力します。

Studio でモデルを作成する [アーティファクト] セクションのスクリーンショット。
[アーティファクト] セクションでは、以下を実行します。
  1. SageMaker でモデルアーティファクト (PyTorch または XGBoost) をパッケージ化できるフレームワークを使用している場合は、[アーティファクト][アーティファクトをアップロード] オプションを選択します。このオプションを使用すると、未加工のモデルアーティファクト、カスタム推論コード、および requirements.txt ファイルを指定するだけで、SageMaker によってアーカイブのパッケージ化が処理されます。以下の操作を実行します。

    1. [アーティファクト] で、[アーティファクトのアップロード] を選択して処理を続行します。または、tar.gz アーカイブにモデルファイル、推論コード、requirements.txt ファイルが含まれる場合は、[S3 の URI を事前パッケージ化アーティファクトに入力する] を選択します。

    2. アーティファクトのアップロードを選択した場合は、[S3 バケット] に、SageMaker がアーティファクトをパッケージ化した後にそれを保存する Amazon S3 のバケットへのパスを入力します。以下の手順を実行します。

    3. [モデルアーティファクトをアップロード] でモデルファイルをアップロードします。

    4. SageMaker が推論のために提供するデフォルトコードを使用する場合は、[推論コード][デフォルトの推論コード] を選択します。独自の推論コードを使用する場合は、[カスタマイズした推論コードをアップロード] を選択します。

    5. [requirements.txt をアップロード] で、実行時にインストールする依存関係のリストが入力されたテキストファイルをアップロードします。

  2. SageMaker でモデルアーティファクトをパッケージ化できるフレームワークを使用しない場合は、Studio に [事前パッケージ化アーティファクト] オプションが表示され、tar.gz アーカイブにパッケージ化されたすべてのアーティファクトを入力する必要があります。以下の操作を実行します。

    1. [事前パッケージ化アーティファクト] で、tar.gz アーカイブが Amazon S3 に既にアップロードされている場合は、[S3 の URI を事前パッケージ化モデルアーティファクトに入力する] を選択します。アーカイブを SageMaker に直接アップロードする場合は、[事前パッケージ化モデルアーティファクトをアップロード] を選択します。

    2. [S3 の URI を事前パッケージ化モデルアーティファクトに入力する]を選択した場合は、Amazon S3 のアーカイブへのパスを S3 URI に入力します。または、ローカルマシンからアーカイブを選択してアップロードします。

次のセクションは [セキュリティ] です。次のスクリーンショットのように表示されます。

Studio でモデルを作成する [セキュリティ] セクションのスクリーンショット。
[セキュリティ] セクションで、以下の操作を行います。
  1. [IAM ロール]に、IAM ロールの ARN を入力します。

  2. (オプション) [仮想プライベートクラウド (VPC)] で、モデル設定とアーティファクトを保存する Amazon VPC を選択します。

  3. (オプション) コンテナのインターネットアクセスを制限する場合は、[ネットワークの隔離] トグルをオンにします。

最後に、オプションで [詳細オプション] セクションに入力します。次のスクリーンショットのように表示されます。

Studio でモデルを作成する [詳細オプション] セクションのスクリーンショット。
(オプション) [詳細オプション] セクションで、以下の操作を行います:
  1. 作成されたモデルで Amazon SageMaker Inference Recommender ジョブを実行する場合は、[カスタマイズされたインスタンスのレコメンデーション] トグルをオンにします。Inference Recommender は、推論のパフォーマンスとコストを最適化できるインスタンスタイプを推奨するための機能です。これらのインスタンスのレコメンデーションは、モデルのデプロイを準備する際に表示されます。

  2. [環境変数を追加] には、コンテナの環境変数をキーと値のペアで入力します。

  3. [タグ] に任意のタグをキーと値のペアで入力します。

  4. モデルとコンテナの設定が完了したら、[デプロイ可能なモデルを作成] を選択します。

これで、SageMaker Studio にデプロイ可能なモデルが完成しました。

モデルをデプロイする

最後に、前の手順で設定したモデルを HTTPS エンドポイントにデプロイします。エンドポイントに 1 つまたは複数のモデルをデプロイできます。

モデルとエンドポイントの互換性

モデルをエンドポイントにデプロイする前に、以下の設定がモデルとエンドポイント間で同じであり、互換性が保たれていることを確認してください。

  • IAM ロール

  • Amazon VPC (サブネットとセキュリティグループ)

  • ネットワークの隔離 (有効または無効)

互換性のないエンドポイントにモデルがデプロイされないよう、Studio で次の処理が行われます。

  • 新しいエンドポイントにモデルをデプロイすると、SageMaker は互換性を維持するようにエンドポイントを設定します。この設定を変更して互換性が失われると、Studio はアラートを表示し、デプロイが失敗します。

  • 既存のエンドポイントにデプロイすると、エンドポイントに互換性がない場合は Studio がアラートを表示し、デプロイが失敗します。

  • デプロイに複数のモデルを追加する場合、相互に互換性がなければ、Studio によってモデルのデプロイがエラーになります。

Studio にモデルとエンドポイントの非互換性に関するアラートが表示された場合、[詳細を表示] を選択して、どの設定で互換性が失われたかを確認できます。

モデルをデプロイするために、Studio で以下を実行する方法を選択できます。

  1. SageMaker Studio アプリケーションを開きます。

  2. 左のナビゲーションペインで [モデル] を選択します。

  3. モデルページで、SageMaker モデルのリストから 1 つ以上のモデルを選択します。

  4. [デプロイ] を選択します。

  5. [エンドポイント名] で、ドロップダウンメニューを開きます。既存のエンドポイントを選択するか、モデルをデプロイする新しいエンドポイントを作成します。

  6. [インスタンスタイプ] で、エンドポイントに使用するインスタンスタイプを選択します。モデルに対して以前に Inference Recommender ジョブを実行している場合は、推奨されるインスタンスタイプが [推奨] というタイトルのリストに表示されます。実行していない場合は、モデルに適した [想定インスタンス] がいくつか表示されます。

    JumpStart のインスタンスタイプの互換性

    JumpStart モデルをデプロイする場合、Studio にはモデルがサポートするインスタンスタイプのみが表示されます。

  7. [初期インスタンス数] には、エンドポイントにプロビジョニングするインスタンスの初期数を入力します。

  8. [最大インスタンス数] には、トラフィックの増加に合わせてスケールアップする場合にエンドポイントにプロビジョニング可能なインスタンスの最大数を指定します。

  9. デプロイするモデルがモデルハブで最も使用されている JumpStart LLM のいずれかである場合は、[代替設定] オプションが [インスタンスタイプ] と [インスタンス数] フィールドの後に表示されます。

    最も使用されている JumpStart LLMの場合、AWS は、コストまたはパフォーマンスを最適化できるベンチマーク済みのインスタンスタイプを提示します。このデータを使用し、どのインスタンスタイプを LLM のデプロイに使用するかを判断できます。[代替設定] を選択して、ベンチマーク済みのデータを表示するダイアログボックスを開きます。パネルは次のスクリーンショットのようになります。

    [代替設定] ボックスのスクリーンショット

    [代替設定] ボックスで以下の操作を行います。

    1. インスタンスのタイプを選択します。[1 時間あたりのコスト] または [最高のパフォーマンス] を選択して、モデルのコストやパフォーマンスを最適化するインスタンスを表示します。[その他のサポートされているインスタンス] を選択して、JumpStart モデルと互換性のある他のインスタンスタイプのリストを表示することもできます。ここでインスタンスタイプを選択すると、手順 6 で指定したインスタンスが上書きされることに注意してください。

    2. (任意) [選択した設定をカスタマイズ] トグルをオンにして、[トークン合計の最大数] (許可するトークンの最大数。入力トークンおよびモデルで生成されるトークンの合計)、[入力するトークンの最大長] (各リクエストで入力が許可されるトークンの最大数)、および [最大同時リクエスト] (モデルが一度に処理できるリクエストの最大数) を指定します。

    3. [選択] を選択して、インスタンスタイプと設定を確認します。

  10. [モデル] フィールドには、デプロイするモデルの名前がすでに入力されています。[モデルの追加] を選択して、デプロイにモデルを追加します。追加するモデルごとに、次のフィールドを入力します:

    1. [CPU コアの数] に、モデルのみで使用される CPU コアを入力します。

    2. [最小コピー数] には、任意の時点でエンドポイントでホストされるモデルコピーの最小数を入力します。

    3. [最小 CPU メモリ (MB)] には、モデルに必要な最小メモリ量 (MB) を入力します。

    4. [最大 CPU メモリ (MB)] には、モデルに使用を許可するメモリの最大量 (MB) を入力します。

  11. (オプション) [詳細オプション] で、以下の操作を行います:

    1. [IAM ロール] で、デフォルトの SageMaker IAM 実行ロールを使用するか、必要なアクセス許可を含む独自のロールを指定します。この IAM ロールは、デプロイ可能なモデルの作成時に指定したロールと同じである必要があります。

    2. [仮想プライベートクラウド (VPC)] では、エンドポイントをホストする VPC を指定します。

    3. [暗号化 KMS キー] で、エンドポイントをホストする ML コンピューティングインスタンスにアタッチされたストレージボリュームのデータを暗号化するための AWS KMS キーを選択します。

    4. [ネットワーク分離の有効化] トグルをオンにして、コンテナのインターネットアクセスを制限します。

    5. [タイムアウト設定] で、[モデルデータのダウンロードタイムアウト (秒)][コンテナ起動のヘルスチェックタイムアウト (秒)] フィールドに値を入力します。これらの値によって、SageMaker がモデルをコンテナにダウンロードする最大時間と、コンテナを起動する最大時間が決まります。

    6. [タグ] に任意のタグをキーと値のペアで入力します。

    注記

    SageMaker は、IAM ロール、VPC、およびネットワーク隔離の設定を、デプロイするモデルと互換性のある初期値を使用して設定します。この設定を変更して互換性が失われると、Studio はアラートを表示し、デプロイが失敗します。

オプションを設定すると、ページが次のスクリーンショットのように表示されます。

Studio のデプロイモデルページのスクリーンショット。

デプロイを設定したら、[デプロイ] を選択してエンドポイントを作成し、モデルをデプロイします。

Python SDK でモデルをデプロイする

SageMaker Python SDK を使用すると、2 つの方法でモデルを構築できます。1 つ目は、Model クラスまたは ModelBuilder クラスからモデルオブジェクトを作成する方法です。Model クラスを使用して Model オブジェクトを作成する場合は、モデルパッケージまたは推論コード (モデルサーバーによって異なります) を指定し、クライアントとサーバー間のデータのシリアル化と逆シリアル化を処理するスクリプトと、Amazon S3 にアップロードされる依存関係を指定する必要があります。2 つ目は、ModelBuilder を使用してモデルアーティファクトまたは推論コードを提供する方法です。ModelBuilder は依存関係を自動的に取得し、必要なシリアル化およびシリアル化解除関数を推論し、依存関係をパッケージ化して Model オブジェクトを作成します。ModelBuilder の詳細については、「ModelBuilder を使用して Amazon SageMaker でモデルを作成します」を参照してください。

次のセクションでは、モデルを作成する方法と、モデルオブジェクトをデプロイする方法を説明します。

セットアップする

以下に、モデルデプロイプロセスを準備する例を示します。必要なライブラリをインポートし、モデルアーティファクトを指す S3 URL を定義します。

SageMaker Python SDK
例 import ステートメント

次の例は、SageMaker Python SDK、SDK for Python (Boto3)、および Python 標準ライブラリからモジュールをインポートします。これらのモジュールはモデルのデプロイ便利であり、以下の例でも使用されています。

import boto3 from datetime import datetime from sagemaker.compute_resource_requirements.resource_requirements import ResourceRequirements from sagemaker.predictor import Predictor from sagemaker.enums import EndpointType from sagemaker.model import Model from sagemaker.session import Session
boto3 inference components
例 import ステートメント

次の例は、SDK for Python (Boto3) と Python 標準ライブラリからモジュールをインポートします。これらのモジュールはモデルのデプロイ便利であり、以下の例でも使用されています。

import boto3 import botocore import sys import time
boto3 models (without inference components)
例 import ステートメント

次の例は、SDK for Python (Boto3) と Python 標準ライブラリからモジュールをインポートします。これらのモジュールはモデルのデプロイ便利であり、以下の例でも使用されています。

import boto3 import botocore import datetime from time import gmtime, strftime
例 モデルアーティファクト URL

次のコードは、Amazon S3 URL を構築する例です。URL は、Amazon S3 バケット内の事前トレーニング済みモデルのモデルアーティファクトを指します。

# Create a variable w/ the model S3 URL # The name of your S3 bucket: s3_bucket = "amzn-s3-demo-bucket" # The directory within your S3 bucket your model is stored in: bucket_prefix = "sagemaker/model/path" # The file name of your model artifact: model_filename = "my-model-artifact.tar.gz" # Relative S3 path: model_s3_key = f"{bucket_prefix}/"+model_filename # Combine bucket name, model file name, and relate S3 path to create S3 model URL: model_url = f"s3://{s3_bucket}/{model_s3_key}"

完全な Amazon S3 URL が変数 model_url に保存され、次の例で使用されます。

概要

SageMaker Python SDK または SDK for Python (Boto3) を使用してモデルをデプロイする方法は複数あります。以下のセクションでは、いくつかのアプローチで実行する手順をまとめて説明します。それらの手順を、以下の例で示しています。

SageMaker Python SDK

SageMaker Python SDK を使用すると、次のいずれかの方法でモデルを構築できます:

  • Model クラスからモデルオブジェクトを作成する – モデルパッケージまたは推論コード (モデルサーバーによって異なります) を指定し、クライアントとサーバー間のデータのシリアル化と逆シリアル化を処理するスクリプトと、Amazon S3 にアップロードされる依存関係を指定する必要があります。

  • ModelBuilder クラスからモデルオブジェクトを作成する – モデルアーティファクトまたは推論コードを指定すると、ModelBuilder が依存関係を自動的にキャプチャし、必要なシリアル化およびシリアル化解除関数を推測して、依存関係をパッケージ化した Model オブジェクトを作成します。

    ModelBuilder の詳細については、「ModelBuilder を使用して Amazon SageMaker でモデルを作成します」を参照してください。詳細については、ブログ「Package and deploy classical ML models and LLMs easily with SageMaker – Part 1」をご覧ください。

以下の例では、モデルを作成する方法と、モデルオブジェクトをデプロイする方法を説明します。これらの方法でモデルをデプロイするには、次の手順を実行します。

  1. モデルに割り当てるエンドポイントリソースを、ResourceRequirements オブジェクトを使用して定義します。

  2. Model クラスまたは ModelBuilder クラスからモデルオブジェクトを作成します。ResourceRequirements オブジェクトはモデル設定で指定します。

  3. Model オブジェクトの deploy メソッドを使用して、モデルをエンドポイントにデプロイします。

boto3 inference components

次の例は、モデルを推論コンポーネントに割り当てた後、推論コンポーネントをエンドポイントにデプロイする方法を示しています。この方法でモデルをデプロイするには、次の手順を実行します:

  1. (オプション) create_model メソッドを使用して SageMaker モデルオブジェクトを作成します。

  2. エンドポイント設定オブジェクトを作成して、エンドポイントの設定を指定します。create_endpoint_config メソッドを使用して作成します。

  3. create_endpoint メソッドを使用してエンドポイントを作成し、作成したエンドポイント設定をリクエストに指定します。

  4. create_inference_component メソッドを使用して推論コンポーネントを作成します。設定で、次のいずれかを実行してモデルを指定します。

    • SageMaker モデルオブジェクトを指定する

    • モデルイメージ URI と S3 URL を指定する

    また、エンドポイントリソースをモデルに割り当てます。推論コンポーネントを作成することで、モデルがエンドポイントにデプロイされます。モデルごとに 1 つずつ、複数の推論コンポーネントを作成することで、複数のモデルをエンドポイントにデプロイできます。

boto3 models (without inference components)

次の例は、モデルオブジェクトを作成し、モデルをエンドポイントにデプロイする方法を示しています。この方法でモデルをデプロイするには、次の手順を実行します:

  1. create_model メソッドを使用して SageMaker モデルを作成します。

  2. エンドポイント設定オブジェクトを作成して、エンドポイントの設定を指定します。create_endpoint_config メソッドを使用して作成します。エンドポイント設定で、モデルオブジェクトを本番稼働用のバリアントに割り当てます。

  3. create_endpoint メソッドを使用してエンドポイントを作成します。作成したエンドポイント設定をリクエストに指定します。

    エンドポイントを作成すると、SageMaker はエンドポイントリソースをプロビジョニングし、モデルをエンドポイントにデプロイします。

構成する

次の例では、モデルをエンドポイントにデプロイするために必要なリソースを設定します。

SageMaker Python SDK

次の例は、ResourceRequirements オブジェクトを持つモデルにエンドポイントリソースを割り当てています。これらのリソースには、CPU コア、アクセラレーター、メモリが含まれます。次に、この例のように Model クラスからモデルオブジェクトを作成します。または、ModelBuilder クラスをインスタンス化して build を実行することで、モデルオブジェクトを作成することもできます。このメソッドも例に示されています。ModelBuilder はモデルをパッケージ化する統合インターフェイスを提供し、このインスタンスでは大規模にデプロイするためのモデルを準備しています。この例は、ModelBuilder を使用して Hugging Face モデルをコンストラクトします。(JumpStart モデルを渡すこともできます)。モデルを構築したら、モデルオブジェクトでリソース要件を指定します。次の手順では、このオブジェクトを使用してモデルをエンドポイントにデプロイします。

resources = ResourceRequirements( requests = { "num_cpus": 2, # Number of CPU cores required: "num_accelerators": 1, # Number of accelerators required "memory": 8192, # Minimum memory required in Mb (required) "copies": 1, }, limits = {}, ) now = datetime.now() dt_string = now.strftime("%d-%m-%Y-%H-%M-%S") model_name = "my-sm-model"+dt_string # build your model with Model class model = Model( name = "model-name", image_uri = "image-uri", model_data = model_url, role = "arn:aws:iam::111122223333:role/service-role/role-name", resources = resources, predictor_cls = Predictor, ) # Alternate mechanism using ModelBuilder # uncomment the following section to use ModelBuilder /* model_builder = ModelBuilder( model="<HuggingFace-ID>", # like "meta-llama/Llama-2-7b-hf" schema_builder=SchemaBuilder(sample_input,sample_output), env_vars={ "HUGGING_FACE_HUB_TOKEN": "<HuggingFace_token>}" } ) # build your Model object model = model_builder.build() # create a unique name from string 'mb-inference-component' model.model_name = unique_name_from_base("mb-inference-component") # assign resources to your model model.resources = resources */
boto3 inference components

次の例は、create_endpoint_config メソッドを使用してエンドポイントを設定しています。この設定を、エンドポイントの作成時に割り当てます。設定で、1 つ以上の本番稼働用バリアントを定義します。バリアントごとに、Amazon SageMaker がプロビジョニングするインスタンスタイプを選択し、マネージドインスタンススケーリングを有効化できます。

endpoint_config_name = "endpoint-config-name" endpoint_name = "endpoint-name" inference_component_name = "inference-component-name" variant_name = "variant-name" sagemaker_client.create_endpoint_config( EndpointConfigName = endpoint_config_name, ExecutionRoleArn = "arn:aws:iam::111122223333:role/service-role/role-name", ProductionVariants = [ { "VariantName": variant_name, "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1, "ManagedInstanceScaling": { "Status": "ENABLED", "MinInstanceCount": 1, "MaxInstanceCount": 2, }, } ], )
boto3 models (without inference components)
例 モデルの定義

次の例では、AWS SDK for Python (Boto3) で create_modelメソッドを使用して SageMaker モデルを定義します。

model_name = "model-name" create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = "arn:aws:iam::111122223333:role/service-role/role-name", PrimaryContainer = { "Image": "image-uri", "ModelDataUrl": model_url, } )

この例では以下を指定します:

  • ModelName: モデルの名前 (この例では、model_name という文字列変数として保存されています)。

  • ExecutionRoleArn: Amazon SageMaker が機械学習コンピューティングインスタンスへのデプロイまたはバッチ変換ジョブのためにモデルアーティファクトや Docker イメージにアクセスするのに使用できる IAM ロールの Amazon リソースネーム (ARN)。

  • PrimaryContainer: 推論コード、関連アーティファクト、予測のためにモデルがデプロイされるときに推論コードが使用するカスタム環境マップを含むプライマリ Docker イメージの場所。

例 エンドポイント設定

次の例は、create_endpoint_config メソッドを使用してエンドポイントを設定しています。Amazon SageMaker はこの設定を使用してモデルをデプロイします。この設定では、create_model メソッドを使用して作成された 1 つ以上のモデルを特定して、Amazon SageMaker がプロビジョンするリソースをデプロイします。

endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName = "endpoint-config-name", # List of ProductionVariant objects, one for each model that you want to host at this endpoint: ProductionVariants = [ { "VariantName": "variant-name", # The name of the production variant. "ModelName": model_name, "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1 # Number of instances to launch initially. } ] )

この例では、ProductionVariants フィールドに次のキーを指定します:

デプロイ

次の例は、モデルをエンドポイントにデプロイしています。

SageMaker Python SDK

次の例は、モデルオブジェクトの deploy メソッドを使用して、モデルをリアルタイムの HTTPS エンドポイントにデプロイします。モデルの作成とデプロイの両方の resources 引数に値を指定する場合は、デプロイに指定するリソースが優先されます。

predictor = model.deploy( initial_instance_count = 1, instance_type = "ml.p4d.24xlarge", endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED, resources = resources, )

この例では instance_type フィールドにモデルの Amazon EC2 インスタンスタイプの名前を指定します。initial_instance_count フィールドには、エンドポイントで実行されるインスタンスの初期数を指定します。

次のコードサンプルは、モデルをエンドポイントにデプロイし、別のモデルを同じエンドポイントにデプロイする別のケースを示しています。この場合、両方のモデルの deploy メソッドに同じエンドポイント名を指定する必要があります。

# Deploy the model to inference-component-based endpoint falcon_predictor = falcon_model.deploy( initial_instance_count = 1, instance_type = "ml.p4d.24xlarge", endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED, endpoint_name = "<endpoint_name>" resources = resources, ) # Deploy another model to the same inference-component-based endpoint llama2_predictor = llama2_model.deploy( # resources already set inside llama2_model endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED, endpoint_name = "<endpoint_name>" # same endpoint name as for falcon model )
boto3 inference components

エンドポイント設定が完了したら、create_endpoint メソッドを使用してエンドポイントを作成します。エンドポイント名は、お使いの AWS アカウントの AWS リージョン 内で一意である必要があります。

次の例では、リクエストで指定されたエンドポイント設定を使用してエンドポイントを作成しています。Amazon SageMaker は、エンドポイントを使用してリソースをプロビジョニングします。

sagemaker_client.create_endpoint( EndpointName = endpoint_name, EndpointConfigName = endpoint_config_name, )

エンドポイントを作成したら、推論コンポーネントを作成することで、エンドポイントに 1 つまたは複数のモデルをデプロイできます。次の例では、create_inference_component メソッドを使用して 1 つ作成しています。

sagemaker_client.create_inference_component( InferenceComponentName = inference_component_name, EndpointName = endpoint_name, VariantName = variant_name, Specification = { "Container": { "Image": "image-uri", "ArtifactUrl": model_url, }, "ComputeResourceRequirements": { "NumberOfCpuCoresRequired": 1, "MinMemoryRequiredInMb": 1024 } }, RuntimeConfig = {"CopyCount": 2} )
boto3 models (without inference components)
例 デプロイメント

SageMaker にエンドポイント設定を提供します。このサービスは、ML コンピューティングインスタンスを起動し、設定で指定された 1 つ以上のモデルをデプロイします。

モデルとエンドポイントの設定が完了したら、create_endpoint メソッドを使用してエンドポイントを作成します。エンドポイント名は、お使いの AWS アカウントの AWS リージョン 内で一意である必要があります。

次の例では、リクエストで指定されたエンドポイント設定を使用してエンドポイントを作成しています。Amazon SageMaker は、エンドポイントを使用してリソースをプロビジョニングし、モデルをデプロイします。

create_endpoint_response = sagemaker_client.create_endpoint( # The endpoint name must be unique within an AWS Region in your AWS account: EndpointName = "endpoint-name" # The name of the endpoint configuration associated with this endpoint: EndpointConfigName = "endpoint-config-name")

AWS CLI を使用してモデルをデプロイする

AWS CLI を使用して、モデルをエンドポイントにデプロイします。

概要

AWS CLI を使用してモデルをデプロイする場合、推論コンポーネントを使用して、または使用せずにデプロイできます。その両方のアプローチで実行するコマンドを、以下のセクションにまとめます。これらのコマンドは、以下の例で示されています。

With inference components

推論コンポーネントを使用してモデルをデプロイするには、以下を実行します。

  1. (オプション) create-model コマンドを使用してモデルを作成します。

  2. エンドポイント設定を作成して、エンドポイントを設定します。作成するには、create-endpoint-config コマンドを実行します。

  3. create-endpoint コマンドを使用してエンドポイントを作成します。コマンド本文で、作成したエンドポイント設定を指定します。

  4. create-inference-component コマンドを使用して推論コンポーネントを作成します。設定で、次のいずれかを実行してモデルを指定します。

    • SageMaker モデルオブジェクトを指定する

    • モデルイメージ URI と S3 URL を指定する

    また、エンドポイントリソースをモデルに割り当てます。推論コンポーネントを作成することで、モデルがエンドポイントにデプロイされます。モデルごとに 1 つずつ、複数の推論コンポーネントを作成することで、複数のモデルをエンドポイントにデプロイできます。

Without inference components

推論コンポーネントを使用せずにモデルをデプロイするには、以下を実行します。

  1. create-model コマンドを使用して SageMaker モデルを作成します。

  2. エンドポイント設定オブジェクトを作成して、エンドポイントの設定を指定します。作成するには、create-endpoint-config コマンドを使用します。エンドポイント設定で、モデルオブジェクトを本番稼働用のバリアントに割り当てます。

  3. create-endpoint コマンドを使用してエンドポイントを作成します。コマンド本文で、作成したエンドポイント設定を指定します。

    エンドポイントを作成すると、SageMaker はエンドポイントリソースをプロビジョニングし、モデルをエンドポイントにデプロイします。

構成する

次の例では、モデルをエンドポイントにデプロイするために必要なリソースを設定します。

With inference components
例 create-endpoint-config コマンド

以下の例は、create-endpoint-config コマンドを使用してエンドポイント設定を作成します。

aws sagemaker create-endpoint-config \ --endpoint-config-name endpoint-config-name \ --execution-role-arn arn:aws:iam::111122223333:role/service-role/role-name\ --production-variants file://production-variants.json

この例で、次の JSON を使用して本番稼働用バリアントを production-variants.json ファイルに定義します。

[ { "VariantName": "variant-name", "ModelName": "model-name", "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1 } ]

コマンドが成功すると、AWS CLI が作成したリソースの ARN で応答します。

{ "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name" }
Without inference components
例 create-model コマンド

次の例では、create-model コマンドを使用してモデルを作成します。

aws sagemaker create-model \ --model-name model-name \ --execution-role-arn arn:aws:iam::111122223333:role/service-role/role-name \ --primary-container "{ \"Image\": \"image-uri\", \"ModelDataUrl\": \"model-s3-url\"}"

コマンドが成功すると、AWS CLI が作成したリソースの ARN で応答します。

{ "ModelArn": "arn:aws:sagemaker:us-west-2:111122223333:model/model-name" }
例 create-endpoint-config コマンド

以下の例は、create-endpoint-config コマンドを使用してエンドポイント設定を作成します。

aws sagemaker create-endpoint-config \ --endpoint-config-name endpoint-config-name \ --production-variants file://production-variants.json

この例で、次の JSON を使用して本番稼働用バリアントを production-variants.json ファイルに定義します。

[ { "VariantName": "variant-name", "ModelName": "model-name", "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1 } ]

コマンドが成功すると、AWS CLI が作成したリソースの ARN で応答します。

{ "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name" }

デプロイ

次の例は、モデルをエンドポイントにデプロイしています。

With inference components
例 create-endpoint コマンド

次の例は、create-endpoint コマンドを使用してエンドポイントを作成します。

aws sagemaker create-endpoint \ --endpoint-name endpoint-name \ --endpoint-config-name endpoint-config-name

コマンドが成功すると、AWS CLI が作成したリソースの ARN で応答します。

{ "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name" }
例 create-inference-component コマンド

次の例は、create-inference-component コマンドを使用して推論コンポーネントを作成します。

aws sagemaker create-inference-component \ --inference-component-name inference-component-name \ --endpoint-name endpoint-name \ --variant-name variant-name \ --specification file://specification.json \ --runtime-config "{\"CopyCount\": 2}"

この例では、コンテナと演算処理リソースが、次の JSON を使用して specification.json ファイルに定義されています。

{ "Container": { "Image": "image-uri", "ArtifactUrl": "model-s3-url" }, "ComputeResourceRequirements": { "NumberOfCpuCoresRequired": 1, "MinMemoryRequiredInMb": 1024 } }

コマンドが成功すると、AWS CLI が作成したリソースの ARN で応答します。

{ "InferenceComponentArn": "arn:aws:sagemaker:us-west-2:111122223333:inference-component/inference-component-name" }
Without inference components
例 create-endpoint コマンド

次の例は、create-endpoint コマンドを使用してエンドポイントを作成します。

aws sagemaker create-endpoint \ --endpoint-name endpoint-name \ --endpoint-config-name endpoint-config-name

コマンドが成功すると、AWS CLI が作成したリソースの ARN で応答します。

{ "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name" }