

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

# Amazon SageMaker AI モデルに対する推論の最適化
<a name="model-optimize"></a>

Amazon SageMaker AI を使用すると、推論の最適化手法を適用して生成 AI モデルのパフォーマンスを向上できます。モデルを最適化することで、ユースケースのコストパフォーマンスを向上できます。モデルを最適化する場合、量子化、投機的デコーディング、コンパイルなど、サポートされている最適化手法のいずれかを選択して適用します。モデルを最適化したら、評価を実行して、レイテンシー、スループット、料金のパフォーマンスメトリクスを確認できます。

また、SageMaker AI では、多くのモデルについて、事前に最適化されたバージョンをいくつか提供しており、それぞれがレイテンシーとスループットに対するさまざまなアプリケーションのニーズに対応しています。このようなモデルを使用すれば、最初にモデルを自分で最適化することなく、最適化されたバージョンのいずれかをデプロイできます。

## 最適化手法
<a name="optimization-techniques"></a>

Amazon SageMaker AI は、以下の最適化手法に対応しています。

### コンパイル
<a name="compilation"></a>

*コンパイル*により、精度を損なわずに、選択したハードウェアタイプで利用可能な最高のパフォーマンスを実現するためにモデルが最適化されます。モデルコンパイルを適用すると、GPU インスタンス、AWS Trainium インスタンス、AWS Inferentia インスタンスなどの高速ハードウェアに対して LLM を最適化できます。

コンパイルを使用してモデルを最適化する場合、事前にコンパイルできるというメリットがあります。これにより、モデルのデプロイ時間と自動スケーリングレイテンシーを短縮できます。モデルが新しいインスタンスにデプロイされるときに、モデルの重みに JIT コンパイルが不要になるためです。

GPU インスタンスのモデルをコンパイルすることにした場合、SageMaker AI では TensorRT-LLM ライブラリを使用してコンパイルを実行します。AWS Trainium インスタンスか AWS Inferentia インスタンスのモデルをコンパイルすることにした場合、SageMaker AI では AWS Neuron SDK を使用してコンパイルを実行します。

### 量子化
<a name="quantization"></a>

*量子化*は、重みとアクティベーションに精度の低いデータ型を使用することで、モデルのハードウェア要件を下げる手法です。量子化でモデルを最適化すると、より安価でより利用しやすい GPU でホストできます。ただし、量子化されたモデルは、最適化したソースモデルよりも精度が低い場合があります。

量子化のために SageMaker AI でサポートされているデータ形式はモデルによって異なります。サポートされている形式には以下が含まれています。
+ INT4-AWQ – 4 ビットデータ形式。Activation-aware Weight Quantization (AWQ) は、効率的で、正確、低ビット、重み専用の LLM のための量子化手法です。
+ FP8 – 8 ビット浮動小数点 (FP8) は、浮動小数点数の低精度形式です。この形式では、標準の FP16 浮動小数点形式よりもビット数が少ない値を表すことで、メモリ効率とモデル精度のバランスを取っています。
+ INT8-SmoothQuant – 8 ビットデータ形式。SmoothQuant は、動的範囲のバランスを取ることで、アクティベーションと重みの両方をスケールする混合精度量子化方法です。

### 投機デコーディング
<a name="speculative-decoding"></a>

*投機的デコーディング*とは、大規模な LLM のデータコーディング処理の速度を向上させる技術です。生成されたテキストの品質を損なうことなく、レイテンシーに対してモデルを最適化します。

この手法では、*ドラフト*モデルと呼ばれる、より高速で処理できる小さなモデルを使用します。ドラフトモデルは候補トークンを生成し、サイズが大きく処理に時間がかかる*ターゲット*モデルによって検証されます。反復ごとに、ドラフトモデルは複数の候補トークンを生成します。ターゲットモデルはトークンを検証し、特定のトークンが受け入れられないことが判明した場合、トークンを拒否して再生成します。このように、ターゲットモデルは、トークンの検証と少量のトークンの生成を行います。

ドラフトモデルはターゲットモデルよりも処理がはるかに高速です。すべてのトークンを迅速に生成し、検証のためにそれらのバッチをターゲットモデルに送信します。ターゲットモデルはこれらすべてを並列で評価するため、最終的なレスポンスが高速化されます。

SageMaker AI には、構築済みのドラフトモデルが使用できる状態で用意されており、独自のドラフトモデルを構築する必要はありません。SageMaker AI は独自のカスタムドラフトモデルの使用にも対応しているため、必要に応じてモデルを選択できます。

### 高速モデルロード
<a name="fast-model-loading"></a>

*高速モデルロード*手法では、SageMaker AI が ML インスタンスによりすばやくロードできるように LLM を準備します。

モデルを準備するために、SageMaker AI は、分散推論のためにそれぞれが別々の GPU に存在することができる部分に分割することで、事前にモデルをシャードします。また、SageMaker AI は、SageMaker AI がインスタンスに同時にロードできる同じサイズのチャンクにモデルの重みを保存します。

SageMaker AI が最適化されたモデルをインスタンスにロードすると、モデルの重みが Amazon S3 から直接インスタンスの GPU にストリーミングされます。重みをストリーミングすることで、SageMaker AI は通常必要ないくつかの時間のかかるステップを省略します。これらのステップには、Amazon S3 からディスクへのモデルアーティファクトのダウンロード、ホストメモリへのモデルアーティファクトのロード、最後にシャードを GPU にロードする前のホストへのモデルのシャードが含まれます。

ロードを高速化するためにモデルを最適化したら、SageMaker AI エンドポイントにより迅速にモデルをデプロイできます。また、自動スケーリングを使用するようにエンドポイントを設定すると、トラフィックの増加に対応するためにより迅速にスケールアウトされます。

# 事前に最適化されたモデルのデプロイ
<a name="model-optimize-preoptimized"></a>

JumpStart の一部のモデルは SageMaker AI によって事前に最適化されています。つまり、最初に推論最適化ジョブを作成することなく、これらのモデルの最適化されたバージョンをデプロイできます。

事前に最適化されたオプションが用意されているモデルのリストについては、「[事前に最適化された JumpStart モデル](#pre-optimized-js)」を参照してください。

## Amazon SageMaker Studio
<a name="preoptimized-studio"></a>

Amazon SageMaker Studio を使用して事前に最適化された JumpStart モデルをデプロイするには、次の手順に従います。

**事前に最適化されたモデルをデプロイするには**

1. Studio の左側のナビゲーションメニューで、**[JumpStart]** を選択します。

1. **[すべてのパブリックモデル]** ページで、事前に最適化されているモデルのいずれかを選択します。

1. モデルの詳細ページで、**[デプロイ]** を選択します。

1. 一部の JumpStart モデルでは、デプロイページで、続行する前にエンドユーザーライセンス契約 (EULA) に署名する必要があります。要求された場合、**[ライセンス契約]** セクションのライセンス条項を確認してください。その条項がユースケースで受け入れられる場合は、**[EULA に同意し、利用規約を読みました]** のチェックボックスをオンにします。

   詳細については、「[エンドユーザーライセンス契約](jumpstart-foundation-models-choose.md#jumpstart-foundation-models-choose-eula)」を参照してください。

1. **[エンドポイント名]** と **[初期インスタンス数]** は、デフォルト値を受け入れるか、カスタム値を設定します。

1. **[インスタンスタイプ]** は、デフォルト値のままにします。それ以外の場合、事前に最適化された設定をデプロイできません。

1. **[モデル]** で、モデル設定を展開します。Studio の表に、事前い最適化され、選択可能な設定が表示されます。各オプションには、レイテンシーとスループットのメトリクスがあります。アプリケーションのニーズに最適なオプションを選択します。

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

## SageMaker AI Python SDK
<a name="preoptimized-sdk"></a>

プロジェクトで SageMaker AI Python SDK を使用して、事前最適化済みモデルをデプロイできます。まず、`ModelBuilder` クラスを使用して `Model` インスタンスを定義します。次に、`set_deployment_config()` メソッドを使用して、デプロイする事前最適化済み構成を設定します。その後、`build()` メソッドを使用してモデルを構築します。最後に、`deploy()` メソッドを使用してそれを推論エンドポイントにデプロイします。

次の例で使用されているクラスとメソッドの詳細については、SageMaker AI Python SDK ドキュメントの「[APIs](https://sagemaker.readthedocs.io/en/stable/api/index.html)」を参照してください。

**プロジェクトをセットアップするには**

1. アプリケーションコードで、必要なライブラリをインポートします。以下の例では、SDK for Python (Boto3) をインポートします。また、モデルの定義と操作に使用するモジュールを SageMaker AI Python SDK からインポートします。

   ```
   import boto3
   from sagemaker.serve.builder.model_builder import ModelBuilder
   from sagemaker.serve.builder.schema_builder import SchemaBuilder
   from sagemaker.session import Session
   ```

1. SageMaker AI セッションを初期化します。次の例では `Session()` クラスを使用しています。

   ```
   sagemaker_session = Session()
   ```

**モデルを定義するには**

1. `SchemaBuilder` インスタンスを作成し、入力サンプルと出力サンプルを提供します。モデルを定義するときに、このインスタンスを `ModelBuilder` クラスに指定します。これにより、SageMaker AI は入力と出力をシリアル化および逆シリアル化するためのマーシャリング関数を自動的に生成します。

   `SchemaBuilder` または `ModelBuilder` クラスの使用の詳細については、「[ModelBuilder を使用して Amazon SageMaker AI でモデルを作成する](how-it-works-modelbuilder-creation.md)」を参照してください。

   次の例では、`SchemaBuilder` クラスに入力文字列の例と出力文字列の例を提供します。

   ```
   response = "Jupiter is the largest planet in the solar system. It is the fifth planet from the sun."
   sample_input = {
       "inputs": "What is the largest planet in the solar system?",
       "parameters": {"max_new_tokens": 128, "top_p": 0.9, "temperature": 0.6},
   }
   sample_output = [{"generated_text": response}]
   schema_builder = SchemaBuilder(sample_input, sample_output)
   ```

1. モデルを SageMaker AI に定義します。次の例では、`ModelBuilder` インスタンスを初期化するようにパラメータを設定します。

   ```
   model_builder = ModelBuilder(
       model="jumpstart-model-id",
       schema_builder=schema_builder,
       sagemaker_session=sagemaker_session,
       role_arn=sagemaker_session.get_caller_identity_arn(),
   )
   ```

   この例では、JumpStart モデルを使用しています。`jumpstart-model-id` を `meta-textgeneration-llama-3-70b` などの JumpStart モデルの ID に置き換えます。

**ベンチマークメトリクスを取得するには**

1. デプロイ対象の事前に最適化された設定を確認するには、SageMaker AI が提供するオプションを調べます。次の例をご覧ください。

   ```
   model_builder.display_benchmark_metrics()
   ```

   この `display_benchmark_metrics()` メソッドにより、次のようなテーブルが出力されます。

   ```
   | Instance Type   | Config Name   |   Concurrent Users |   Latency, TTFT (P50 in sec) |   Throughput (P50 in tokens/sec/user) |
   |:----------------|:--------------|-------------------:|-----------------------------:|--------------------------------------:|
   | ml.g5.48xlarge  | lmi-optimized |                  1 |                         2.25 |                                 49.70 |
   | ml.g5.48xlarge  | lmi-optimized |                  2 |                         2.28 |                                 21.10 |
   | ml.g5.48xlarge  | lmi-optimized |                  4 |                         2.37 |                                 14.10 |
   . . .
   | ml.p4d.24xlarge | lmi-optimized |                  1 |                         0.10 |                                137.40 |
   | ml.p4d.24xlarge | lmi-optimized |                  2 |                         0.11 |                                109.20 |
   | ml.p4d.24xlarge | lmi-optimized |                  4 |                         0.13 |                                 85.00 |
   . . .
   ```

   テーブルの最初の列には、選択した JumpStart モデルのホストに使用できる潜在的なインスタンスタイプが一覧表示されています。インスタンスタイプごとに、`Config Name` の下に、事前に最適化された設定の名前が一覧表示されます。SageMaker AI が提供する設定の名前は `lmi-optimized` です。インスタンスタイプと設定ごとに、テーブルにベンチマークメトリクスが表示されます。これらのメトリクスは、モデルがさまざまな数の同時ユーザーに対して対応するスループットとレイテンシーを示します。

1. ベンチマークメトリクスに基づいて、パフォーマンスニーズに最適なインスタンスタイプと設定名を選択します。これらの値は、デプロイ設定を作成するときに使用します。

**事前に最適化されたモデルをデプロイするには**

1. デプロイ設定を作成します。次の例では、`ModelBuilder` インスタンスを使用します。インスタンスタイプと設定名が `set_deployment_config()` メソッドに渡されます。

   ```
   model_builder.set_deployment_config(
       config_name="config-name", 
       instance_type="instance-type",
   )
   ```

   `lmi-optimized` などのテーブルの設定名 を *`config-name`* に置き換えます。`ml.p4d.24xlarge` などのテーブルのインスタンスタイプを `instance-type` に置き換えます。

1. モデルをビルドします。次の例では、`ModelBuilder` インスタンスの `.build()` メソッドを使用します。

   ```
   optimized_model = model_builder.build()
   ```

   `.build()` メソッドはデプロイ可能な `Model` インスタンスを返します。

1. モデルを推論エンドポイントにデプロイします。次の例では、`Model` インスタンスの `.deploy()` メソッドを使用します。

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   `deploy()` メソッドは `Predictor` インスタンスを返します。このインスタンスを使用すると、モデルに推論リクエストを送信できます。

**推論リクエストを使用してモデルをテストするには**
+ モデルを推論エンドポイントにデプロイしたら、モデル予測をテストします。次の例では、`Predictor` インスタンスを使用して推論リクエストを送信します。

  ```
  predictor.predict(sample_input)
  ```

  モデルは、次のようなレスポンスで生成されるテキストを返します。

  ```
  {'generated_text': ' Jupiter is the largest planet in the solar system. It is the fifth planet from the sun. It is a gas giant with . . .'}
  ```

## 事前に最適化された JumpStart モデル
<a name="pre-optimized-js"></a>

設定が事前に最適化されている JumpStart モデルを次に示します。

**Meta**
+ Llama 3.1 70B Instruct
+ Llama 3.1 70B
+ Llama 3.1 405B Instruct FP8
+ Llama 3.1 405B FP8
+ Llama 3 8B Instruct
+ Llama 3 8B
+ Llama 3 70B Instruct
+ Llama 3 70B
+ Llama 2 70B Chat
+ Llama 2 7B Chat
+ Llama 2 13B Chat

**HuggingFace**
+ Mixtral 8x7B Instruct
+ Mixtral 8x7B
+ Mistral 7B Instruct
+ Mistral 7B

### 事前にコンパイルされた JumpStart モデル
<a name="pre-compiled"></a>

一部のモデルと設定について、SageMaker AI では、特定の AWS Inferentia インスタンスと AWS Trainium インスタンス用に事前にコンパイルされたモデルを利用できます。これらのモデルについて、コンパイル最適化ジョブを作成し、デプロイインスタンスタイプとして ml.inf2.48xlarge または ml.trn1.32xlarge を選択した場合、SageMaker AI はコンパイルされたアーティファクトを取得します。ジョブは、既にコンパイルされているモデルを使用するため、コンパイルを初めから実行する必要がなく、迅速に完了します。

以下は、SageMaker AI によってモデルが事前にコンパイルされた JumpStart モデルです。

**Meta**
+ Llama3 8B
+ Llama3 70B
+ Llama2 7B
+ Llama2 70B
+ Llama2 13B
+ Code Llama 7B
+ Code Llama 70B

**HuggingFace**
+ Mistral 7B

# 推論最適化ジョブを作成する
<a name="model-optimize-create-job"></a>

Studio または SageMaker AI Python SDK を使用して、推論最適化ジョブを作成できます。ジョブでは、選択した手法を適用してモデルを最適化します。詳細については、「[最適化手法](model-optimize.md#optimization-techniques)」を参照してください。

**推論最適化ジョブのインスタンス料金**  
量子化またはコンパイルを適用する推論最適化ジョブを作成すると、SageMaker AI は、ジョブを実行するのに使用するインスタンスタイプを選択します。料金は、使用されたインスタンスに基づいて請求されます。  
可能なインスタンスタイプとその料金の詳細については、「[Amazon SageMaker の料金](https://aws.amazon.com/sagemaker/pricing/)」ページの推論の最適化の料金情報を参照してください。  
投機的デコードを適用するジョブについては、追加コストは発生しません。

最適化できるサポート対象モデルについては、「[サポートされているモデルリファレンス](optimization-supported-models.md)」を参照してください。

## Amazon SageMaker Studio
<a name="optimize-create-studio"></a>

Studio で推論最適化ジョブを作成するには、次の手順を実行します。

**最適化ジョブの作成を開始するには**

1. SageMaker AI Studio で、次のいずれかのパスを使用して最適化ジョブを作成します。
   + JumpStart モデルのジョブを作成するには、次の手順を実行します。

     1. ナビゲーションメニューで、**[JumpStart]** を選択します。

     1. **[すべてのパブリックモデル]** ページで、モデルプロバイダーを選択して、最適化に対応するモデルのいずれかを選択します。

     1. モデルの詳細ページで、**[最適化]** を選択します。このボタンは、最適化に対応するモデルでのみ有効です。

     1. 一部の JumpStart モデルでは、**[推論最適化ジョブの作成]** ページで、続行する前にエンドユーザーライセンス契約 (EULA) に署名する必要があります。要求された場合、**[ライセンス契約]** セクションのライセンス条項を確認してください。その条項がユースケースで受け入れられる場合は、**[EULA に同意し、利用規約を読みました]** のチェックボックスをオンにします。
   + ファインチューニングされた JumpStart モデルのジョブを作成するには、以下を実行します。

     1. ナビゲーションペインの **[ジョブ]** で、**[トレーニング]** を選択します。

     1. **[トレーニングジョブ]** ページで、JumpStart モデルのファインチューニングに使用したジョブの名前を選択します。これらのジョブのタイプは、**[ジョブタイプ]** 列で **[JumpStart トレーニング]** が指定されています。

     1. トレーニングジョブの詳細ページで、**[最適化]** を選択します。
   + カスタムモデルのジョブを作成するには、次の手順を実行します。

     1. ナビゲーションメニューの **[ジョブ]** で、**[推論最適化]** を選択します。

     1. [**Create new job (新しいジョブを作成)**] を選択します。

     1. **[推論最適化ジョブの作成]** ページで、**[モデルを追加]** を選択します。

     1. **[モデルを追加]** ウィンドウで、**[カスタムモデル]** を選択します。

     1. 以下のオプションのいずれかを選択してください。

        **既存のモデルを使用する** - SageMaker AI で既に作成したモデルを最適化するには、このオプションを選択します。

        **既存のモデル名** - SageMaker AI モデルの名前を入力します。

        **S3 から** - Amazon S3 からモデルアーティファクトを提供するには、このオプションを選択します。**[S3 URI]** には、モデルアーティファクトを保存した Amazon S3 の場所の URI を入力します。

     1. (オプション) ****出力モデル名****には、ジョブが作成する最適化されたモデルのカスタム名を入力できます。名前を指定しない場合、Studio は選択内容に基づいて名前を自動的に生成します。

1. **[推論最適化ジョブの作成]** ページの **[ジョブ名]** では、SageMaker AI によって割り当てられたデフォルト名を受け入れてもかまいません。カスタムジョブ名を入力する場合は、**[ジョブ名]** フィールドを選択して、**[ジョブ名を入力]** を選択します。

**最適化設定を設定するには**

1. **[デプロイインスタンスタイプ]** で、モデルを最適化するインスタンスタイプを選択します。

   インスタンスタイプにより、選択できる最適化手法は影響を受けます。GPU ハードウェアを使用するほとんどのタイプでは、サポートされている手法は**量子化**と**投機的デコード**です。Inferentia インスタンス ml.inf2.8xlarge AWS など、カスタムシリコンを使用するインスタンスを選択した場合、サポートされている手法は**コンパイル**です。これは、その特定のハードウェアタイプのモデルをコンパイルするために使用できます。

1. Studio が提供する最適化手法を 1 つ以上選択します。
   + **[量子化]** では、**[Precision データ型]**を選択します。
   + **[投機デコーディング]** を選択する場合は、以下のオプションの 1 つを選択します。
     + **SageMaker AI ドラフトモデルを使用する** – SageMaker AI に用意されているドラフトモデルを使用する場合に選択します。
**注記**  
SageMaker AI ドラフトモデルを使用することにした場合は、ネットワーク分離も有効にする必要があります。Studio では、このオプションが **[セキュリティ]** の下にあります。
     + **JumpStart ドラフトモデルを選択** – ドラフトモデルとして使用する JumpStart カタログからモデルを選択する場合に選択します。
     + **独自のドラフトモデルを選択** - 独自のドラフトモデルを使用し、その場所の S3 URI を指定する場合に選択します。
   + **[高速モデルロード]** を選択すると、Studio に `OPTION_TENSOR_PARALLEL_DEGREE` 環境変数が表示されます。**[値]** フィールドを使用して、テンソル並列処理の度合いを設定します。値は、**[デプロイインスタンスタイプ]** に対して選択したインスタンス内の GPU の数を均等に分割する必要があります。例えば、GPU 数が 8 のインスタンスを使用している場合にモデルをシャーディング (分割) するには、値 2、4、または 8 を使用します。
   + **デプロイインスタンスタイプ**を AWS Inferentia または AWS Trainium インスタンスに設定すると、Studio は**サポートされている**オプションの 1 つであることを示す場合があります。この場合、Studio ではこのオプションを選択します。

1. **[出力]** で、Amazon S3 の場所の URI を入力します。ここで、SageMaker AI は、ジョブで作成された最適化モデルのアーティファクトを保存します。

1. (オプション) IAM ロール、VPC、環境変数などの設定をよりきめ細かく制御するには、**[詳細オプション]** を展開します。詳細については、以下の「*詳細オプション*」を参照してください。

1. ジョブの設定が完了したら、**[ジョブの作成]** を選択します。

   Studio にジョブの詳細ページが表示され、ジョブのステータスとそのすべての設定を確認できます。

### 高度なオプション
<a name="set-advanced-optimization-options"></a>

推論最適化ジョブを作成する際、次の詳細オプションを設定できます。

**[設定]**では、次のオプションを設定できます。

**テンソル並列度 **  
*テンソル並列*度の値。テンソル並列処理は、特定のモデルの重み、勾配、オプティマイザ状態がデバイス間で分割されるモデル並列処理の一種です。クラスター内の GPU の数を割り切れる値にする必要があります。

**トークンの最大長**  
モデルによって生成されるトークンの数の制限。モデルが常にトークンの最大数を生成するとは限りません。

**同時実行**  
同じ基盤となるハードウェアでモデルの複数のインスタンスを実行する機能。同時実行を使用すると、複数のユーザーに予測を提供し、ハードウェア使用率を最大化できます。

**バッチサイズ**  
モデルで*バッチ推論*が実行される場合は、このオプションを使用して、モデルが処理するバッチのサイズを制御します。  
バッチ推論は、バッチ観測に基づいてモデル予測を生成します。このオプションは、データセットが大きい場合や、推論のリクエストにすぐに応答する必要がない場合に適しています。

**[セキュリティ]** では、次のオプションを設定できます。

**IAM ロール**  
SageMaker AI がユーザーに代わってタスクを実行できるようにする IAM ロール。モデルの最適化中、SageMaker AI には以下のアクセス許可が必要です。  
+ S3 バケットからの入力データの読み取り
+ S3 バケットへのモデルアーティファクトを書き込み
+ Amazon CloudWatch Logs へのログの書き込み
+ Amazon CloudWatch へのメトリクスの公開
これらのすべてのタスクに対するアクセス許可を IAM ロールに付与します。  
詳細については、「[SageMaker AI 実行ロールの使用方法](sagemaker-roles.md)」を参照してください。

**暗号化 KMS キー**  
 AWS Key Management Service () のキーAWS KMS。SageMaker AI は、SageMaker AI がモデルを Amazon S3 にアップロードするときに、これらのキーを使用して、最適化されたモデルのアーティファクトを暗号化します。

**VPC**  
SageMaker AI は、この情報を使用してネットワークインターフェイスを作成し、モデルコンテナにアタッチします。ネットワークインターフェイスは、インターネットに接続されていない VPC 内のネットワーク接続をモデルコンテナに提供します。また、モデルがプライベート VPC 内のリソースに接続できるようにします。  
詳細については、「[Amazon VPC のリソースへのアクセス権を SageMaker AI のホストされたエンドポイントに付与する](host-vpc.md)」を参照してください。

**ネットワーク分離の有効化**  
コンテナのインターネットアクセスを制限する場合は、このオプションを有効にします。ネットワーク分離で実行されるコンテナは、アウトバウンドネットワークコールを実行できません。  
このオプションは、投機的デコードで最適化し、SageMaker AI ドラフトモデルを使用するときにアクティブ化する必要があります。  
ネットワーク分離の詳細については、「[ネットワークの隔離](mkt-algo-model-internet-free.md#mkt-algo-model-internet-free-isolation)」を参照してください。

**[詳細なコンテナ定義]** では、次のオプションを設定できます。

**停止条件**  
ジョブの実行時間の制限を指定します。ジョブが制限時間に達すると、SageMaker AI はジョブを終了します。このオプションを使用してコストを制限します。

**タグ**  
最適化ジョブに関連付けられたキーと値のペア。  
タグの詳細については、「*AWS 全般のリファレンス*」の「[Tagging your AWS resources](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html)」を参照してください。

**環境変数**  
モデルコンテナに設定する環境変数を定義するキーと値のペア。

## SageMaker AI Python SDK
<a name="optimize-create-pysdk"></a>

プロジェクトで SageMaker AI Python SDK を使用して、推論最適化ジョブを作成できます。まず、`ModelBuilder` クラスを使用して `Model` インスタンスを定義します。次に、`optimize()` メソッドを使用して、量子化、投機的デコード、またはコンパイルでモデルを最適化するジョブを実行します。ジョブが完了したら、`deploy()` メソッドを使用してモデルを推論エンドポイントにデプロイします。

次の例で使用されているクラスとメソッドの詳細については、SageMaker AI Python SDK ドキュメントの「[APIs](https://sagemaker.readthedocs.io/en/stable/api/index.html)」を参照してください。

**プロジェクトをセットアップするには**

1. アプリケーションコードで、必要なライブラリをインポートします。以下の例では、SDK for Python (Boto3) をインポートします。また、モデルの定義と操作に使用するクラスを SageMaker AI Python SDK からインポートします。

   ```
   import boto3
   from sagemaker.serve.builder.model_builder import ModelBuilder
   from sagemaker.serve.builder.schema_builder import SchemaBuilder
   from sagemaker.session import Session
   from pathlib import Path
   ```

1. SageMaker AI セッションを初期化します。次の例では `Session()` クラスを使用しています。

   ```
   sagemaker_session = Session()
   ```

**モデルを定義するには**

1. `SchemaBuilder` インスタンスを作成し、入力サンプルと出力サンプルを提供します。モデルを定義するときに、このインスタンスを `ModelBuilder` クラスに指定します。これにより、SageMaker AI は入力と出力をシリアル化および逆シリアル化するためのマーシャリング関数を自動的に生成します。

   `SchemaBuilder` または `ModelBuilder` クラスの使用の詳細については、「[ModelBuilder を使用して Amazon SageMaker AI でモデルを作成する](how-it-works-modelbuilder-creation.md)」を参照してください。

   次の例では、`SchemaBuilder` クラスに入力文字列の例と出力文字列の例を提供します。

   ```
   response = "Jupiter is the largest planet in the solar system. It is the fifth planet from the sun."
   sample_input = {
       "inputs": "What is the largest planet in the solar system?",
       "parameters": {"max_new_tokens": 128, "top_p": 0.9, "temperature": 0.6},
   }
   sample_output = [{"generated_text": response}]
   schema_builder = SchemaBuilder(sample_input, sample_output)
   ```

1. モデルを SageMaker AI に定義します。次の例では、`ModelBuilder` インスタンスを初期化するようにパラメータを設定します。

   ```
   model_builder = ModelBuilder(
       model="jumpstart-model-id",
       schema_builder=schema_builder,
       sagemaker_session=sagemaker_session,
       role_arn=sagemaker_session.get_caller_identity_arn(),
   )
   ```

   この例では、JumpStart モデルを使用しています。`jumpstart-model-id` を `meta-textgeneration-llama-3-70b` などの JumpStart モデルの ID に置き換えます。
**注記**  
投機的デコードで最適化し、SageMaker AI ドラフトを使用する場合は、ネットワーク分離を有効にする必要があります。これを有効にするには、`ModelBuilder` インスタンスを初期化するときに次の引数を含めます。  

   ```
   enable_network_isolation=True,
   ```
ネットワーク分離の詳細については、「[ネットワークの隔離](mkt-algo-model-internet-free.md#mkt-algo-model-internet-free-isolation)」を参照してください。

**量子化で最適化するには**

1. 量子化ジョブを実行するには、`optimize()` メソッドを使用して `quantization_config` 引数を設定します。次の例では、最適化コンテナの環境変数として `OPTION_QUANTIZE` を設定しています。

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       quantization_config={
           "OverrideEnvironment": {
               "OPTION_QUANTIZE": "awq",
           },
       },
       output_path="s3://output-path",
   )
   ```

   この例では、*`instance-type`* を `ml.p4d.24xlarge` などの ML インスタンスに置き換えます。*`s3://output-path`* を、ジョブが作成する最適化されたモデルを保存する S3 の場所へのパスに置き換えます。

   `optimize()` メソッドは、モデルをエンドポイントにデプロイするために使用できる `Model` オブジェクトを返します。

1. ジョブが完了したら、モデルをデプロイします。次の例では、`deploy()` メソッドを使用しています。

   ```
   predictor = optimized_model.deploy(
       instance_type="instance-type", 
       accept_eula=True,
   )
   ```

   この例では、*`instance-type`* を `ml.p4d.24xlarge` などの ML インスタンスに置き換えます。

   `deploy()` メソッドは、モデルをホストするエンドポイントに推論リクエストを送信するために使用できる予測子オブジェクトを返します。

**SageMaker AI ドラフトモデルを使用して投機的デコードで最適化するには**

投機的デコードでモデルを最適化する際は、SageMaker AI に用意されているドラフトモデルを使用するか、独自のモデルを使用するかを選択できます。次の例では、SageMaker AI ドラフトモデルを使用しています。
**前提条件**  
投機的デコードと SageMaker AI ドラフトモデルで最適化するには、モデルを定義する際にネットワーク分離を有効にする必要があります。

1. 投機的デコードジョブを実行するには、`optimize()` メソッドを使用し、`speculative_decoding_config` 引数を設定します。次の例では、SageMaker AI に用意されているドラフトモデルを使用するように `ModelProvider` キーを `SAGEMAKER` に設定しています。

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       speculative_decoding_config={
           "ModelProvider": "SAGEMAKER",
       },
   )
   ```

   この例では、*`instance-type`* を `ml.p4d.24xlarge` などの ML インスタンスに置き換えます。

   `optimize()` メソッドは、モデルをエンドポイントにデプロイするために使用できる `Model` オブジェクトを返します。

1. ジョブが完了したら、モデルをデプロイします。次の例では、`deploy()` メソッドを使用しています。

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   `deploy()` メソッドは、モデルをホストするエンドポイントに推論リクエストを送信するために使用できる予測子オブジェクトを返します。

**カスタムドラフトモデルを使用して投機的デコードで最適化するには**

カスタムドラフトモデルを SageMaker AI に提供する前に、まずモデルアーティファクトを Amazon S3 にアップロードする必要があります。

次の例は、カスタムドラフトモデルを提供する 1 つの方法を示しています。この例では、Hugging Face Hub からドラフトモデルをダウンロードし、それを Amazon S3 にアップロードして、`speculative_decoding_config` 引数に S3 URI を提供しています。

1. Hugging Face Hub からモデルをダウンロードする場合は、`huggingface_hub` ライブラリをプロジェクトに追加し、`snapshot_download()` メソッドを使用してモデルをダウンロードします。次の例では、モデルをローカルディレクトリにダウンロードしています。

   ```
   import huggingface_hub
   
   huggingface_hub.snapshot_download(
       repo_id="model-id",
       revision="main",
       local_dir=download-dir,
       token=hf-access-token,
   )
   ```

   この例では、*`model-id`* を Hugging Face Hub のモデルの ID（例：`meta-llama/Meta-Llama-3-8B`）に置き換えます。*`download-dir`* をローカルディレクトリに置き換えます。*`hf-access-token`* をユーザーアクセストークンに置き換えます。アクセストークンを取得する方法については、Hugging Face ドキュメントの「[User access tokens](https://huggingface.co/docs/hub/en/security-tokens)」を参照してください。

   `huggingface_hub` ライブラリの詳細については、Hugging Face ドキュメントの「[Hub client library](https://huggingface.co/docs/huggingface_hub/en/index)」を参照してください。

1. ダウンロードしたモデルを SageMaker AI で使用できるようにするには、Amazon S3 にアップロードします。次の例では、`sagemaker_session` オブジェクトを使用してモデルをアップロードしています。

   ```
   custom_draft_model_uri = sagemaker_session.upload_data(
       path=hf_local_download_dir.as_posix(),
       bucket=sagemaker_session.default_bucket(),
       key_prefix="prefix",
   )
   ```

   この例では、*`prefix`* を S3 のドラフトモデルを区別するのに役立つ修飾子（例: `spec-dec-custom-draft-model`）に置き換えます。

   `upload_data()` メソッドは、モデルアーティファクトの S3 URI を返します。

1. 投機的デコードジョブを実行するには、`optimize()` メソッドを使用し、`speculative_decoding_config` 引数を設定します。次の例では、`ModelSource` キーをカスタムドラフトモデルの S3 URI に設定しています。

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       speculative_decoding_config={
           "ModelSource": custom_draft_model_uri + "/",
       },
   )
   ```

   この例では、*`instance-type`* を `ml.p4d.24xlarge` などの ML インスタンスに置き換えます。

   `optimize()` メソッドは、モデルをエンドポイントにデプロイするために使用できる `Model` オブジェクトを返します。

1. ジョブが完了したら、モデルをデプロイします。次の例では、`deploy()` メソッドを使用しています。

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   `deploy()` メソッドは、モデルをホストするエンドポイントに推論リクエストを送信するために使用できる予測子オブジェクトを返します。

**コンパイルで最適化するには**

1. コンパイルジョブを実行するには、`optimize()` メソッドを使用して `compilation_config` 引数を設定します。次の例では、`OverrideEnvironment` キーを使用して、最適化コンテナに必要な環境変数を設定しています。

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       compilation_config={
           "OverrideEnvironment": {
               "OPTION_TENSOR_PARALLEL_DEGREE": "24",
               "OPTION_N_POSITIONS": "8192",
               "OPTION_DTYPE": "fp16",
               "OPTION_ROLLING_BATCH": "auto",
               "OPTION_MAX_ROLLING_BATCH_SIZE": "4",
               "OPTION_NEURON_OPTIMIZE_LEVEL": "2",
           }
       },
       output_path="s3://output-path",
   )
   ```

   この例では、*`instance-type`* を高速ハードウェアを使用した ML インスタンスタイプに設定しています。たとえば、 AWS Inferentia による高速推論の場合、 タイプを などの Inf2 インスタンスに設定できます`ml.inf2.48xlarge`。*`s3://output-path`* を、ジョブが作成する最適化されたモデルを保存する S3 の場所へのパスに置き換えます。

1. ジョブが完了したら、モデルをデプロイします。次の例では、`deploy()` メソッドを使用しています。

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   `deploy()` メソッドは、モデルをホストするエンドポイントに推論リクエストを送信するために使用できる予測子オブジェクトを返します。

**推論リクエストを使用してモデルをテストするには**
+ デプロイされたモデルにテスト推論リクエストを送信するには、予測子オブジェクトの `predict()` メソッドを使用します。次の例では、モデルを定義するために、例の `SchemaBuilder` クラスにも渡された `sample_input` 変数を渡しています。

  ```
  predictor.predict(sample_input)
  ```

  サンプル入力にはプロンプト `"What is the largest planet in the solar system?"` があります。次の例に示すように、`predict()` メソッドはモデルが生成したレスポンスを返します。

  ```
  {'generated_text': ' Jupiter is the largest planet in the solar system. It is the fifth planet from the sun. It is a gas giant with . . .'}
  ```

## AWS SDK for Python (Boto3)
<a name="optimize-create-pysdk-boto"></a>

 AWS SDK for Python (Boto3) を使用して、推論最適化ジョブをプログラムで作成および管理できます。このセクションでは、さまざまな最適化手法の例を示します。

**前提条件**

Boto3 で最適化ジョブを作成する前に、以下を確認してください。
+ 設定された AWS 認証情報 - 適切なアクセス許可で AWS 認証情報をセットアップする
+ SageMaker AI モデルを作成した (既存のモデルを使用している場合)
+ S3 で準備されたトレーニングデータ (投機的デコード最適化用、最大 4096 のコンテキスト長をサポート)
+ 必要なアクセス許可を持つ IAM ロール - 実行ロールには、S3 にアクセスして SageMaker リソースを作成するアクセス許可が必要です 

**例: EAGLE 投機的デコードを使用した最適化ジョブの作成 (Llama 3.3 70B)**

この例では、EAGLE 投機的デコード手法を使用して大規模言語モデルの最適化ジョブを作成する方法を示します。

```
import boto3

# Initialize SageMaker client
sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

# Step 1: Create a SageMaker model (if not already created)
model_response = sagemaker_client.create_model(
    ModelName='meta-llama-3-3-70b-instruct',
    ExecutionRoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    PrimaryContainer={
        'Image': '763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:<tag>',
        'ModelDataSource': {
            'S3DataSource': {
                'S3Uri': 's3://my-bucket/models/Llama-3.3-70B-Instruct/',
                'S3DataType': 'S3Prefix',
                'CompressionType': 'None'
            }
        },
        'Environment': {
            'SAGEMAKER_ENV': '1',
            'SAGEMAKER_MODEL_SERVER_TIMEOUT': '3600'
        }
    }
)

# Step 2: Create optimization job with speculative decoding
optimization_response = sagemaker_client.create_optimization_job(
    OptimizationJobName='llama-optim-job-eagle-speculative-decoding',
    RoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    ModelSource={
        'SageMakerModel': {
            'ModelName': 'meta-llama-3-3-70b-instruct'
        }
    },
    DeploymentInstanceType='ml.p4d.24xlarge',
    # MaxInstanceCount specifies the maximum number of instances for distributed training
    MaxInstanceCount=4,
    OptimizationConfigs=[
        {
            'ModelSpeculativeDecodingConfig': {
                'Technique': 'EAGLE',
                'TrainingDataSource': {
                    'S3Uri': 's3://my-bucket/training_data/ultrachat_8k/',
                    'S3DataType': 'S3Prefix'
                }
            }
        }
    ],
    OutputConfig={
        'S3OutputLocation': 's3://my-bucket/optimized-models/llama-optim-output/',
    },
    StoppingCondition={
        'MaxRuntimeInSeconds': 432000  # 5 days
    }
)

print(f"Optimization job ARN: {optimization_response['OptimizationJobArn']}")
```

**例: S3 モデルアーティファクトから最適化ジョブを作成する (Qwen3 32B)**

この例では、S3 から直接モデルアーティファクトを使用して最適化ジョブを作成する方法を示します。

```
import boto3

sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

# Create model from S3 artifacts
model_response = sagemaker_client.create_model(
    ModelName='qwen3-32b',
    ExecutionRoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    PrimaryContainer={
        'Image': '763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:<tag>',
        'Mode': 'SingleModel',
        'ModelDataSource': {
            'S3DataSource': {
                'S3Uri': 's3://my-bucket/models/qwen3-32b/',
                'S3DataType': 'S3Prefix',
                'CompressionType': 'None'
            }
        },
        'Environment': {
            'AWS_REGION': 'us-west-2'
        }
    }
)

# Create optimization job with smaller training dataset
optimization_response = sagemaker_client.create_optimization_job(
    OptimizationJobName='qwen3-optim-job-eagle',
    RoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    ModelSource={
        'SageMakerModel': {
            'ModelName': 'qwen3-32b'
        }
    },
    DeploymentInstanceType='ml.g6.48xlarge',
    MaxInstanceCount=4,
    OptimizationConfigs=[
        {
            'ModelSpeculativeDecodingConfig': {
                'Technique': 'EAGLE',
                'TrainingDataSource': {
                    'S3Uri': 's3://my-bucket/training_data/ultrachat_1k/',
                    'S3DataType': 'S3Prefix'
                }
            }
        }
    ],
    OutputConfig={
        'S3OutputLocation': 's3://my-bucket/optimized-models/qwen3-optim-output/',
    },
    StoppingCondition={
        'MaxRuntimeInSeconds': 432000  # 5 days
    }
)

print(f"Optimization job ARN: {optimization_response['OptimizationJobArn']}")
```

**例: 最適化ジョブのモニタリングと管理**

最適化ジョブを作成したら、次のコマンドを使用してその進行状況をモニタリングし、管理できます。

```
import boto3

sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

# Describe optimization job to check status
describe_response = sagemaker_client.describe_optimization_job(
    OptimizationJobName='llama-optim-job-eagle-speculative-decoding'
)

print(f"Job Status: {describe_response['OptimizationJobStatus']}")

# List all optimization jobs (with pagination)
list_response = sagemaker_client.list_optimization_jobs(
    MaxResults=10,
    SortBy='CreationTime',
    SortOrder='Descending'
)

print("\nRecent optimization jobs:")
for job in list_response['OptimizationJobSummaries']:
    print(f"- {job['OptimizationJobName']}: {job['OptimizationJobStatus']}")

# Stop a running optimization job if needed
# sagemaker_client.stop_optimization_job(
#     OptimizationJobName='llama-optim-job-eagle-speculative-decoding'
# )

# Delete a completed or failed optimization job
# sagemaker_client.delete_optimization_job(
#     OptimizationJobName='llama-optim-job-eagle-speculative-decoding'
# )
```

Eagle Heads による投機的デコードは、4 つのシーケンシャルトレーニングジョブを実行します。各ジョブは、次のジョブへの入力となる出力を生成します。最終ジョブからの出力のみが S3 バケットに配信されます。中間出力は暗号化され、内部 SageMaker AI サービスバケットに最大 20 日間保存されます。SageMaker AI には、それらを復号するアクセス許可がありません。その期間より前に中間データを削除する場合は、ジョブが完了または停止したことを確認し、このデータを削除するサポートケース [[https://docs.aws.amazon.com/awssupport/latest/user/case-management.html\$1creating-a-support-case](https://docs.aws.amazon.com/awssupport/latest/user/case-management.html#creating-a-support-case)] を開きます。 AWS アカウント ID と最適化ジョブ ARN をリクエストに含めます。

## SageMaker AI ドラフトモデルの制限事項
<a name="sm-draft-model-limitations"></a>

SageMaker AI ドラフトモデルで最適化するモデルについては、要件、制限、サポートされている環境変数に注意してください。

**要件**

以下を実行する必要があります。
+ SageMaker JumpStart に用意されているモデルを使用します。
+ モデルデプロイに対してネットワーク分離を有効にします。
+ モデルを大規模モデル推論 (LMI) コンテナにデプロイする場合は、バージョン 0.28.0 以降の DJLServing コンテナを使用します。

  使用可能なコンテナについては、Deep Learning Containers GitHub リポジトリの「[Large Model Inference Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers)」を参照してください。
+ JumpStart モデルをファインチューニングする場合は、モデルの重みに Safetensor 形式を使用します。

  この形式の詳細については、Hugging Face ドキュメントの「[Safetensors](https://huggingface.co/docs/safetensors/en/index)」を参照してください。

**制限事項**

次のことはできません。
+ ローカルモードで作成したローカルテスト環境でモデルを使用する。

  ローカルモードの詳細については、SageMaker AI Python SDK ドキュメントの「[ローカルモード](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode)」を参照してください。
+  AWS Systems Manager エージェント (SSM エージェント) を介してモデルコンテナにアクセスします。SSM エージェントはモデルコンテナへのシェルレベルのアクセスを提供するため、Amazon CloudWatch でプロセスをデバッグし、コマンドをログに記録できます。

  この機能の詳細については、「[SSM 経由でコンテナにアクセスする](ssm-access.md)」を参照してください。
+ プロセスがクラッシュした場合に発生するコアダンプのモデルコンテナを設定する。

  モデルコンテナからのコアダンプの詳細については、「[ProductionVariantCoreDumpConfig](sagemaker/latest/APIReference/API_ProductionVariantCoreDumpConfig.html)」を参照してください。
+ モデルをマルチモデルエンドポイント、マルチコンテナエンドポイント、または推論コンポーネントをホストするエンドポイントにデプロイする。

  これらのエンドポイントタイプについては、「[マルチモデルエンドポイント](multi-model-endpoints.md)」、「[マルチコンテナエンドポイント](multi-container-endpoints.md)」、「[推論コンポーネント](realtime-endpoints-deploy-models.md#inference-components)」を参照してください。
+ モデル用のモデルパッケージを作成する。モデルパッケージを使用して、公開するデプロイ可能なモデルを作成します AWS Marketplace。

  この機能の詳細については、「[モデルパッケージのリソースを作成する](sagemaker-mkt-create-model-package.md)」を参照してください。
+ モデルコンテナで独自の推論コードを使用する。
+ モデルコンテナで `requirements.txt` ファイルを使用する。このタイプのファイルにはパッケージの依存関係が一覧表示されます。
+ Hugging Face パラメータ `trust_remote_code` を有効にする。

**サポートされている環境変数**

次の環境変数ではコンテナのみを設定できます。
+ 大規模モデル推論 (LMI) コンテナの一般的な環境変数。

  これらの変数の詳細については、LMI コンテナドキュメントの「[Environment Variable Configurations](https://docs.djl.ai/master/docs/serving/serving/docs/lmi/deployment_guide/configurations.html#environment-variable-configurations)」を参照してください。
+ Hugging Face Hub が Git リポジトリで提供しているパッケージの一般的な環境変数。

  リポジトリについては、GitHub の「[Hugging Face](https://github.com/huggingface)」を参照してください。
+ 一般的な PyTorch および CUDA 環境変数。

  これらの変数の詳細については、PyTorch ドキュメントの「[Torch Environment Variables](https://pytorch.org/docs/stable/torch_environment_variables.html)」を参照してください。

# 最適化ジョブの結果を表示する
<a name="model-optimize-view-results"></a>

1 つ以上の最適化ジョブを作成したら、Studio を使用してすべてのジョブの概要テーブルを表示し、個々のジョブの詳細を表示できます。

## Amazon SageMaker Studio
<a name="optimization-results-studio"></a>

**最適化ジョブの概要テーブルを表示するには**
+ Studio ナビゲーションメニューの **[ジョブ]** で、**[推論最適化]** を選択します。

  **[推論最適化]** ページにテーブルが表示され、作成したジョブを確認できます。ジョブごとに、適用した最適化設定とジョブのステータスが表示されます。

**ジョブの詳細を表示するには**
+ **[推論最適化]** ページの概要テーブルで、ジョブの名前を選択します。

  Studio にジョブの詳細ページが表示され、ジョブのステータスと、ジョブの作成時に適用したすべての設定を確認できます。ジョブが正常に完了すると、SageMaker AI は最適化されたモデルアーティファクトを **[最適化されたモデルの S3 URI]** の Amazon S3 の場所に保存します。

# 最適化されたモデルのパフォーマンスを評価する
<a name="model-optimize-evaluate"></a>

最適化ジョブを使用して最適化されたモデルを作成したら、モデルのパフォーマンスの評価を実行できます。この評価により、レイテンシー、スループット、および料金のメトリクスが得られます。これらのメトリクスを使用すると、最適化されたモデルがユースケースのニーズを満たしているかどうか、またはさらなる最適化が必要かどうかを判断できます。

パフォーマンス評価を実行できるのは、Studio のみです。この機能は、Amazon SageMaker AI API または Python SDK には搭載されていません。

## [開始する前に]
<a name="eval-prereqs"></a>

パフォーマンス評価を作成する前に、まず推論最適化ジョブを作成してモデルを最適化する必要があります。Studio で評価できるのは、これらのジョブで作成したモデルのみです。

## パフォーマンス評価を作成する
<a name="create-perf-eval"></a>

Studio で次の手順を実行して、最適化されたモデルのパフォーマンス評価を作成します。

1. Studio ナビゲーションメニューの **[ジョブ]** で、**[推論最適化]** を選択します。

1. 評価する最適化モデルを作成したジョブの名前を選択します。

1. ジョブの詳細ページで、**[パフォーマンスの評価]** を選択します。

1. 一部の JumpStart モデルでは、**[パフォーマンスの評価]** ページで、続行する前にエンドユーザーライセンス契約 (EULA) に署名する必要があります。要求された場合、**[ライセンス契約]** セクションのライセンス条項を確認してください。その条項がユースケースで受け入れられる場合は、**[EULA に同意し、利用規約を読みました]** のチェックボックスをオンにします。

1. **[トークナイザーのモデルを選択]** では、デフォルトを受け入れるか、評価のトークナイザーとして機能する特定のモデルを選択します。

1. **[入力データセット]** では、以下の手順を実行するどうかを選択します。
   + SageMaker AI のデフォルトのサンプルデータセットを使用する。
   + 独自のサンプルデータセットを指す S3 URI を指定する。

1. **[パフォーマンス結果の S3 URI]** では、評価結果を保存する Amazon S3 の場所を指す URI を指定します。

1. **[評価]** を選択します。

   Studio に **[パフォーマンス評価]** ページが表示され、評価ジョブを確認できます。**[ステータス]** 列には、評価のステータスが表示されます。

1. ステータス **[完了済み]** になったら、ジョブの名前を選択して評価結果を表示します。

評価の詳細ページには、レイテンシー、スループット、および料金のパフォーマンスメトリクスが含まれているテーブルが表示されます。各メトリクスの詳細については、「[推論パフォーマンス評価のメトリクスのリファレンス](#performance-eval-metrics-reference)」を参照してください。

## 推論パフォーマンス評価のメトリクスのリファレンス
<a name="performance-eval-metrics-reference"></a>

最適化モデルのパフォーマンスを正常に評価すると、Studio の評価の詳細ページに次のメトリクスが表示されます。

### レイテンシーメトリクス
<a name="latency-metrics"></a>

**[レイテンシー]** セクションには、次のメトリクスが表示されます。

**同時実行**  
エンドポイントを同時に呼び出すために評価がシミュレートした同時ユーザーの数。

**最初のトークンまでの時間 (ミリ秒)**  
リクエストが送信されてからストリーミングレスポンスの最初のトークンが受信されるまでに経過した時間。

**トークン間レイテンシー (ミリ秒)**  
リクエストごとに出力トークンを生成する時間。

**クライアントレイテンシー (ミリ秒)**  
リクエストが送信されてからレスポンス全体が受信されるまでのリクエストレイテンシー。

**入力トークン/秒 (数)**  
すべてのリクエストで生成された入力トークンの合計数を、同時実行の合計時間 (秒単位) で割った値。

**出力トークン/秒 (数)**  
すべてのリクエストで生成された出力トークンの合計数を、同時実行の合計時間 (秒単位) で割った値。

**クライアント呼び出し (数)**  
同時実行時にすべてのユーザーにエンドポイントに送信された推論リクエストの合計数。

**クライアント呼び出しエラー (数)**  
呼び出しエラーが発生した特定の同時実行時に、すべてのユーザーにエンドポイントに送信された推論リクエストの合計数。

**トークン化に失敗 (数)**  
トークナイザーがリクエストまたはレスポンスの解析に失敗した推論リクエストの総数。

**空の推論レスポンス (数)**  
出力トークンがゼロになったか、トークナイザーがレスポンスの解析に失敗した推論リクエストの合計数。

### スループットメトリクス
<a name="throughput-metrics"></a>

**[スループット]** セクションには、次のメトリクスが表示されます。

**同時実行**  
エンドポイントを同時に呼び出すために評価がシミュレートした同時ユーザーの数。

**入力トークン/秒/リクエスト (数)**  
リクエストごとの 1 秒あたりに生成された入力トークンの合計数。

**出力トークン/秒/リクエスト (数)**  
リクエストごとの 1 秒あたりに生成された出力トークンの合計数。

**入力トークン (数)**  
リクエストごとに生成された入力トークンの合計数。

**出力トークン (数)**  
リクエストごとに生成された出力トークンの合計数。

### 料金メトリクス
<a name="price-metrics"></a>

**[料金]** セクションには、次のメトリクスが表示されます。

**同時実行**  
エンドポイントを同時に呼び出すために評価がシミュレートした同時ユーザーの数。

**100 万入力トークンあたりの料金**  
100 万入力トークンの処理コスト。

**100 万出力トークンあたりの料金**  
100 万出力トークンの生成コスト。

# サポートされているモデルリファレンス
<a name="optimization-supported-models"></a>

次の表に、SageMaker AI が推論最適化をサポートしているモデルと、サポートされている最適化手法を示します。


**サポートされている Llama モデル**  

| モデル名 | 量子化でサポートされているデータ形式 | 投機的デコーディングをサポート | 高速モデルロードをサポート | コンパイルに使用されるライブラリ | 
| --- | --- | --- | --- | --- | 
| Meta Llama 2 13B |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  AWSニューロン TensorRT-LLM  | 
| Meta Llama 2 13B Chat |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  AWSニューロン TensorRT-LLM  | 
| Meta Llama 2 70B |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  AWSニューロン TensorRT-LLM  | 
| Meta Llama 2 70B Chat |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  AWSニューロン TensorRT-LLM  | 
| Meta Llama 2 7B |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  AWSニューロン TensorRT-LLM  | 
| Meta Llama 2 7B Chat |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  AWSニューロン TensorRT-LLM  | 
| Meta Llama 3 70B |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  AWSニューロン TensorRT-LLM  | 
| Meta Llama 3 70B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  AWSニューロン TensorRT-LLM  | 
| Meta Llama 3 8B |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  AWSニューロン TensorRT-LLM  | 
| Meta Llama 3 8B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  AWSニューロン TensorRT-LLM  | 
| Meta Code Llama 13B |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Meta Code Llama 13B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Meta Code Llama 13B Python |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Meta Code Llama 34B |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Meta Code Llama 34B Instruct  |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Meta Code Llama 34B Python |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Meta Code Llama 70B |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Meta Code Llama 70B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Meta Code Llama 70B Python |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Meta Code Llama 7B |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Meta Code Llama 7B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Meta Code Llama 7B Python |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Meta Llama 2 13B Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Llama 2 13B Chat Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Llama 2 70B Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Llama 2 70B Chat Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Llama 2 7B Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Llama 2 7B Chat Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Llama 3 70B Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Llama 3 70B Instruct Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Llama 3 8B Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Llama 3 8B Instruct Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Code Llama 70B Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Code Llama 7B Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Code Llama 7B Python Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Llama 3.1 405B FP8 | なし | はい | はい |  なし  | 
| Meta Llama 3.1 405B Instruct FP8 | なし | はい | はい |  なし  | 
| Meta Llama 3.1 70B |  INT4-AWQ FP8  | はい | はい |  なし  | 
| Meta Llama 3.1 70B Instruct |  INT4-AWQ FP8  | はい | はい |  なし  | 
| Meta Llama 3.1 8B |  INT4-AWQ FP8  | はい | はい |  なし  | 
| Meta Llama 3.1 8B Instruct |  INT4-AWQ FP8  | はい | はい |  なし  | 
| Meta Llama 3.1 70B Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Llama 3.1 70B Instruct Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Llama 3 1 8B Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Meta Llama 3.1 8B Instruct Neuron | なし | いいえ | 不可 |  AWSニューロン  | 


**サポートされている Mistral モデル**  

| モデル名 | 量子化でサポートされているデータ形式 | 投機的デコーディングをサポート | 高速モデルロードをサポート | コンパイルに使用されるライブラリ | 
| --- | --- | --- | --- | --- | 
| Mistral 7B |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  AWSニューロン TensorRT-LLM  | 
| Mistral 7B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  AWSニューロン TensorRT-LLM  | 
| Mistral 7B Neuron | なし | いいえ | 不可 |  AWSニューロン  | 
| Mistral 7B Instruct Neuron | なし | いいえ | 不可 |  AWSニューロン  | 


**サポートされている Mixtral モデル**  

| モデル名 | 量子化でサポートされているデータ形式 | 投機的デコーディングをサポート | 高速モデルロードをサポート | コンパイルに使用されるライブラリ | 
| --- | --- | --- | --- | --- | 
| Mixtral-8x22B-Instruct-v0.1 |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Mixtral-8x22B V1 |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Mixtral 8x7B |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 
| Mixtral 8x7B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | はい | はい |  TensorRT-LLM  | 


**サポートされているモデルアーキテクチャと EAGLE タイプ**  

|  モデルアーキテクチャ名  |  EAGLE タイプ  | 
| --- | --- | 
|  LlamaForCausalLM  |  EAGLE 3  | 
|  Qwen3ForCausalLM  |  EAGLE 3  | 
|  Qwen3NextForCausalLM  |  EAGLE 2  | 
|  Qwen3MoeForCausalLM   |  EAGLE 3  | 
|  Qwen2ForCausalLM  |  EAGLE 3  | 
|  GptOssForCausalLM  |  EAGLE 3  | 