

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

# 使用适配器推理组件微调模型
<a name="realtime-endpoints-adapt"></a>

借助 Amazon SageMaker AI，您可以托管预先训练好的基础模型，而无需从头开始创建自己的模型。但是，要根据业务的独特需要量身定制通用基础模型，您必须创建该模型的经过微调的版本。一种具有成本效益的微调技术是低秩适应（LoRA）。LoRA 背后的原理是，大型基础模型中只有一小部分需要更新以适应新的任务或域。LoRA 适配器仅需几个额外的适配器层，即可增强从基本的基础模型中进行推理的能力。

如果您使用 SageMaker AI 推理组件托管基础模型，则可以通过创建*适配器推理组件来使用 LoRa 适配器*对该基础模型进行微调。创建适配器推理组件时，请指定以下各项：
+ 要包含适配器推理组件的*基本推理组件*。基本推理组件包含您要调整的基础模型。适配器推理组件使用您分配给基本推理组件的计算资源。
+ Amazon S3 中已存储 LoRA 适配器的位置。

创建适配器推理组件后，可以直接调用它。当你这样做时， SageMaker AI 会将适配器与基本模型结合起来，以增强生成的响应。

**开始前的准备工作**

在创建适配器推理组件之前，必须满足以下要求：
+ 您有一个基本推理组件，其中包含要调整的基础模型。您已将此推理组件部署到 A SageMaker I 终端节点。

  有关将推理组件部署到端点的更多信息，请参阅[为实时推理部署模型](realtime-endpoints-deploy-models.md)。
+ 您有 LoRA 适配器模型，并且已将模型构件作为 `tar.gz` 文件存储在 Amazon S3 中。在创建适配器推理组件时，您可以指定构件的 S3 URI。

以下示例使用适用于 Python 的 SDK（Boto3）来创建和调用适配器推理组件。

**Example `create_inference_component` 调用，用于创建适配器推理组件**  
以下示例创建一个适配器推理组件并将其分配给基本推理组件：  

```
sm_client.create_inference_component(
    InferenceComponentName = adapter_ic_name,
    EndpointName = endpoint_name,
    Specification={
        "BaseInferenceComponentName": base_inference_component_name,
        "Container": {
            "ArtifactUrl": adapter_s3_uri
        },
    },
)
```
当您在自己的代码中使用此示例时，请按如下方式替换占位符值：  
+ *adapter\$1ic\$1name*— 适配器推理组件的唯一名称。
+ *endpoint\$1name*— 托管基本推理组件的端点的名称。
+ *base\$1inference\$1component\$1name*— 包含要调整的基础模型的基本推理组件的名称。
+ *adapter\$1s3\$1uri*— 使用您的 LoRa 适配器工件查找`tar.gz`文件的 S3 URI。
您可以使用与普通推理组件的代码相似的代码来创建适配器推理组件。一个区别是，对于 `Specification` 参数，可以省略 `ComputeResourceRequirements` 键。当您调用适配器推理组件时，它由基本推理组件加载。适配器推理组件使用基本推理组件的计算资源。  
有关使用适用于 Python 的 SDK（Boto3）创建和部署推理组件的更多信息，请参阅[使用 Python 部署模型 SDKs](realtime-endpoints-deploy-models.md#deploy-models-python)。

创建适配器推理组件后，您可以通过在 `invoke_endpoint` 请求中指定其名称来调用该组件。

**Example `invoke_endpoint` 调用，用于调用适配器推理组件**  
以下示例调用适配器推理组件：  

```
response = sm_rt_client.invoke_endpoint(
    EndpointName = endpoint_name,
    InferenceComponentName = adapter_ic_name,
    Body = json.dumps(
        {
            "inputs": prompt,
            "parameters": {"max_new_tokens": 100, "temperature":0.9}
        }
    ),
    ContentType = "application/json",
)

adapter_reponse = response["Body"].read().decode("utf8")["generated_text"]
```
当您在自己的代码中使用此示例时，请按如下方式替换占位符值：  
+ *endpoint\$1name*— 托管基础和适配器推理组件的端点的名称。
+ *adapter\$1ic\$1name*— 适配器推理组件的名称。
+ *prompt*— 推理请求的提示。
有关使用适用于 Python 的 SDK（Boto3）调用推理组件的更多信息，请参阅[调用模型进行实时推理](realtime-endpoints-test-endpoints.md)。