

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 部署預先最佳化的模型
<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 文件中的 [API](https://sagemaker.readthedocs.io/en/stable/api/index.html)。

**設定專案**

1. 在您的應用程式程式碼中，匯入必要的程式庫。以下範例會使用適用於 Python 的 SDK (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` 取代為 JumpStart 模型的 ID，例如 `meta-textgeneration-llama-3-70b`。

**檢索基準指標**

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",
   )
   ```

   *`config-name`* 將取代為資料表中的組態名稱，例如 `lmi-optimized`。`instance-type` 將取代為資料表中的執行個體類型，例如 `ml.p4d.24xlarge`。

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