

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 部署预先优化的模型
<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 会自动生成用于序列化和反序列化输入和输出的 marshalling 函数。

   有关使用 `SchemaBuilder` 和 `ModelBuilder` 类的更多信息，请参阅 [使用 Amazon A SageMaker I 创建模型 ModelBuilder](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