

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

# 使用轉接器推論元件微調模型
<a name="realtime-endpoints-adapt"></a>

使用 Amazon SageMaker AI，您可以託管預先訓練的基礎模型，而無需從頭開始建立自己的模型。不過，若要針對業務的獨特需求量身打造一般用途的基礎模型，您必須建立經過微調的版本。低秩適應 (LoRA) 是具成本效益的微調技術之一。LoRA 的原理是，只需更新大型基礎模型的一小部分，就能使模型適應新的任務或領域。LoRA 轉接器只需幾個額外的轉接器層，即可增強基本基礎模型的推論。

如果您使用 SageMaker AI 推論元件託管基本基礎模型，您可以透過建立*轉接器推論元件*來使用 LoRA 轉接器微調該基本模型。當您建立轉接器推論元件時，可以指定下列項目：
+ 要包含轉接器推論元件的*基本推論元件*。基本推論元件包含您想要調整的基礎模型。轉接器推論元件會使用您指派給基本推論元件的運算資源。
+ 您已在 Amazon S3 中存放 LoRA 轉接器的位置。

建立轉接器推論元件之後，您可以直接調用它。當您這麼做時，SageMaker AI 會將轉接器與基本模型結合，以增強產生的回應。

**開始之前**

您必須先符合下列需求，才能建立轉接器推論元件：
+ 您有一個基本推論元件，其中包含要調整的基礎模型。您已將此推論元件部署至 SageMaker AI 端點。

  如需將推論元件部署至端點的詳細資訊，請參閱[部署用於即時推論的模型](realtime-endpoints-deploy-models.md)。
+ 您有 LoRA 轉接器模型，而且已將模型成品儲存為 Amazon S3 中的 `tar.gz` 檔案。您可以在建立轉接器推論元件時指定成品的 S3 URI。

下列範例使用 SDK for Python (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` 金鑰。當您調用轉接器推論元件時，會由基本推論元件載入該元件。轉接器推論元件使用基本推論元件的運算資源。  
如需使用 SDK for Python (Boto3) 建立和部署推論元件的詳細資訊，請參閱[使用 Python SDK 部署模型](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* – 推論請求的提示。
如需使用 SDK for Python (Boto3) 調用推論元件的詳細資訊，請參閱[調用模型以進行即時推論](realtime-endpoints-test-endpoints.md)。