

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

# 使用執行個體集區部署至多個執行個體類型
<a name="realtime-endpoints-heterogeneous"></a>

當您將模型部署到 SageMaker AI 端點時，通常會為生產變體指定單一執行個體類型。如果該執行個體類型在目標可用區域中無法使用，部署會失敗，但容量錯誤 (ICE) 不足，而且您必須以不同的執行個體類型手動重試。

使用執行個體集區，您可以為生產變體指定最多五個執行個體類型的排序清單。SageMaker AI 會嘗試從最高優先順序類型 （優先順序 1) 開始佈建執行個體，並在容量無法使用時自動回復為較低優先順序類型。這消除了手動重試的需求，並改善了端點可用性。

執行個體集區支援即時和非同步推論端點。您可以搭配單一模型端點和推論元件使用它們。

下列步驟說明執行個體集區佈建的運作方式：

1. SageMaker AI 會嘗試從最高優先順序集區佈建執行個體 （優先順序 1)。

1. 如果 SageMaker AI 遇到目前執行個體類型的容量不足錯誤 (ICE)，會自動依優先順序回到下一個集區。

1. 這會持續到佈建所需的執行個體數量、所有集區都用盡，或達到總佈建逾時 (`VariantInstanceProvisionTimeoutInSeconds`)。

**Topics**
+ [使用執行個體集區設定端點](#heterogeneous-endpoint-setup)
+ [監控執行個體集區](#heterogeneous-endpoint-observability)
+ [使用執行個體集區自動擴展](#heterogeneous-endpoint-autoscaling)

## 使用執行個體集區設定端點
<a name="heterogeneous-endpoint-setup"></a>

若要使用執行個體集區，請以 `InstancePools`清單取代生產變體中的 `InstanceType` 參數。每個項目都會指定執行個體類型和優先順序 (1 到 5，其中 1 是最高）。您可以選擇性地設定 `VariantInstanceProvisionTimeoutInSeconds`(300 到 3600 秒），以控制 SageMaker AI 在操作失敗之前嘗試跨所有集區佈建執行個體的總時間。

### 使用單一模型的即時端點
<a name="heterogeneous-endpoint-setup-realtime"></a>

下列範例會建立具有兩個執行個體集區的端點組態。如果`ml.g6.2xlarge`執行個體無法使用，SageMaker AI 會回到 `ml.g6e.2xlarge`。

```
import boto3

sagemaker_client = boto3.client("sagemaker")

endpoint_config_name = "my-heterog-endpoint-config"

sagemaker_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "VariantName": "AllTraffic",
            "ModelName": "my-model",
            "InitialInstanceCount": 2,
            "InstancePools": [
                {
                    "InstanceType": "ml.g6.2xlarge",
                    "Priority": 1,
                },
                {
                    "InstanceType": "ml.g6e.2xlarge",
                    "Priority": 2,
                },
            ],
            "VariantInstanceProvisionTimeoutInSeconds": 600,
        }
    ],
)

sagemaker_client.create_endpoint(
    EndpointName="my-heterog-endpoint",
    EndpointConfigName=endpoint_config_name,
)
```

您也可以在每個集區中使用 `ModelNameOverride` 參數，指定針對該執行個體類型最佳化的不同模型。例如，您可以在一個執行個體類型上部署針對 GPU 編譯的模型，並在另一個執行個體類型上部署未編譯的版本。

### 具有推論元件的即時端點
<a name="heterogeneous-endpoint-setup-ic"></a>

當您搭配執行個體集區使用推論元件時，您有兩個定義規格的選項：
+ **單一 `Specification`** — 在端點執行個體集區中的所有執行個體類型中使用相同的模型和資源組態。當模型可以在具有相同資源需求的任何佈建執行個體類型上執行時，就會運作。
+ **多個 `Specifications`** — 使用 `Specifications` 參數 （複數） 為每個執行個體類型定義不同的模型或資源組態。每個規格都包含一個 `InstanceType` 欄位，其會映射到端點執行個體集區中的執行個體類型。

下列範例會建立具有per-instance-type規格的推論元件：

```
sagemaker_client.create_inference_component(
    InferenceComponentName="my-ic",
    EndpointName="my-heterog-endpoint",
    VariantName="AllTraffic",
    Specifications=[
        {
            "InstanceType": "ml.g6.2xlarge",
            "ModelName": "my-model-g6",
            "Container": {
                "Image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/my-image:latest",
            },
            "ComputeResourceRequirements": {
                "NumberOfAcceleratorDevicesRequired": {{1}},
                "MinMemoryRequiredInMb": {{4096}},
            },
        },
        {
            "InstanceType": "ml.g6e.2xlarge",
            "ModelName": "my-model-g6e",
            "Container": {
                "Image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/my-image:latest",
            },
            "ComputeResourceRequirements": {
                "NumberOfAcceleratorDevicesRequired": {{1}},
                "MinMemoryRequiredInMb": {{8192}},
            },
        },
    ],
    RuntimeConfig={
        "CopyCount": 2,
    },
)
```

## 監控執行個體集區
<a name="heterogeneous-endpoint-observability"></a>

當您使用執行個體集區時`Invocations`，跨變體中的所有執行個體彙總的現有 CloudWatch 指標會繼續以相同的方式運作，例如 `ModelLatency`、 和 `CPUUtilization` 。此外，CloudWatch 會使用 `InstanceType`維度發佈這些指標，以便您可以分別監控每個執行個體類型的效能。

### Per-instance-type指標
<a name="heterogeneous-observability-per-type"></a>

當生產變體使用執行個體集區時，下列維度組合可在 CloudWatch 中用於per-instance-type監控：


| 維度組合 | 使用案例 | 
| --- | --- | 
| EndpointName, VariantName, InstanceType | 篩選變體中特定執行個體類型的端點層級和調用指標 （例如 CPUUtilization、Invocations、ModelLatency)。 | 
| InferenceComponentName, InstanceType | 篩選特定執行個體類型的推論元件指標。使用此項目來比較相同推論元件在不同執行個體類型之間的執行方式。 | 

這些維度適用於標準 CloudWatch 指標和增強型指標。如需可用指標的完整清單，請參閱 [Amazon CloudWatch 中的 Amazon SageMaker AI 指標](monitoring-cloudwatch.md)和 [適用於推論端點的 Amazon SageMaker AI 增強指標](monitoring-cloudwatch-enhanced-metrics.md)。

### 檢查機群分佈
<a name="heterogeneous-observability-distribution"></a>

若要查看每個集區的目前執行個體計數，請呼叫 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) API。回應`ProductionVariants`中的 包含`InstancePools`清單，其中包含每個執行個體類型的目前計數。這會顯示您在佈建後的機群合成，包括低優先順序集區中的任何備用執行個體。

如果您使用推論元件，[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeInferenceComponent.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeInferenceComponent.html)回應會在執行時間組態摘要中包含 `PlacementStatus` 欄位，顯示每個執行個體類型的複製計數。使用此項目來了解推論元件複本如何分散到機群中的執行個體類型。

## 使用執行個體集區自動擴展
<a name="heterogeneous-endpoint-autoscaling"></a>

使用執行個體集區的自動擴展會遵循與標準端點自動擴展相同的程序。您可以註冊可擴展的目標、定義擴展政策，並將其套用至您的端點。如需一般自動調整規模設定，請參閱 [Amazon SageMaker AI 模型的自動擴展](endpoint-auto-scaling.md)。

關鍵差異在於 SageMaker AI 如何在擴展事件觸發時佈建和發行執行個體：

橫向擴展 （新增執行個體）  
SageMaker AI 佈建從最高優先順序集區 （最低優先順序值） 開始的執行個體。如果 SageMaker AI 遇到目前執行個體類型的容量不足錯誤，會自動依優先順序回到下一個集區。SageMaker AI 繼續跨集區重試，直到佈建執行個體或`VariantInstanceProvisionTimeoutInSeconds`達到總計為止。

向內擴展 （移除執行個體）  
SageMaker AI 會從最低優先順序集區 （最高優先順序值） 開始發行執行個體。您偏好的較高優先順序執行個體類型會盡可能長時間持續執行，並且會先發行備用執行個體。

### 使用預先定義的擴展指標
<a name="heterogeneous-autoscaling-predefined"></a>

預先定義的擴展指標，例如`SageMakerVariantInvocationsPerInstance`繼續使用執行個體集區。這些指標會彙總變體中的所有執行個體類型，因此擴展行為與標準端點相同。當集區中的所有執行個體類型具有類似的容量時，這是最簡單的方法。

如需目標追蹤和步進擴展政策設定，請參閱 [Amazon SageMaker AI 模型的自動擴展](endpoint-auto-scaling.md)。

### 使用混合機群的加權自訂指標
<a name="heterogeneous-autoscaling-weighted"></a>

當您的執行個體集區包含具有不同運算容量的執行個體類型時，您可以使用 CloudWatch 指標數學來建立加權擴展訊號。這可讓您控制每個執行個體類型的負載對整體擴展決策的貢獻程度。

下列範例會建立目標追蹤政策，在兩種執行個體類型`ConcurrentRequestsPerModel`中使用 的加權平均值。權重決定擴展政策對每種類型負載的敏感度：

```
import boto3

aas_client = boto3.client("application-autoscaling")

# Register the scalable target
aas_client.register_scalable_target(
    ServiceNamespace="sagemaker",
    ResourceId="endpoint/my-heterog-endpoint/variant/AllTraffic",
    ScalableDimension="sagemaker:variant:DesiredInstanceCount",
    MinCapacity=1,
    MaxCapacity=10,
)

# Define target tracking policy with weighted metric math
aas_client.put_scaling_policy(
    PolicyName="weighted-concurrent-requests",
    ServiceNamespace="sagemaker",
    ResourceId="endpoint/my-heterog-endpoint/variant/AllTraffic",
    ScalableDimension="sagemaker:variant:DesiredInstanceCount",
    PolicyType="TargetTrackingScaling",
    TargetTrackingScalingPolicyConfiguration={
        "TargetValue": {{10.0}},
        "CustomizedMetricSpecification": {
            "Metrics": [
                {
                    "Id": "cr_g6",
                    "Label": "ConcurrentRequests-g6-2xlarge",
                    "MetricStat": {
                        "Metric": {
                            "Namespace": "AWS/SageMaker",
                            "MetricName": "ConcurrentRequestsPerModel",
                            "Dimensions": [
                                {"Name": "EndpointName", "Value": "my-heterog-endpoint"},
                                {"Name": "VariantName", "Value": "AllTraffic"},
                                {"Name": "InstanceType", "Value": "ml.g6.2xlarge"},
                            ],
                        },
                        "Stat": "Average",
                    },
                    "ReturnData": False,
                },
                {
                    "Id": "cr_g6e",
                    "Label": "ConcurrentRequests-g6e-2xlarge",
                    "MetricStat": {
                        "Metric": {
                            "Namespace": "AWS/SageMaker",
                            "MetricName": "ConcurrentRequestsPerModel",
                            "Dimensions": [
                                {"Name": "EndpointName", "Value": "my-heterog-endpoint"},
                                {"Name": "VariantName", "Value": "AllTraffic"},
                                {"Name": "InstanceType", "Value": "ml.g6e.2xlarge"},
                            ],
                        },
                        "Stat": "Average",
                    },
                    "ReturnData": False,
                },
                {
                    "Id": "weighted_avg",
                    "Label": "WeightedConcurrentRequests",
                    "Expression": "{{0.5}} * cr_g6 + {{0.5}} * cr_g6e",
                    "ReturnData": True,
                },
            ],
        },
    },
)
```

在此範例中， `cr_g6`和 `cr_g6e` 會擷取per-instance-type`ConcurrentRequestsPerModel`指標。`weighted_avg` 表達式會結合它們與相等的權重 (0.5 / 0.5)。調整權重以變更政策對每個執行個體類型載入的回應方式。

**權重如何影響擴展行為：**執行個體類型的權重越高，表示擴展政策對該類型的負載*更為敏感*，而不是越少。權重較低的類型訊號會受到阻尼，因此它可以在觸發擴展事件之前以更高的使用率執行。


| 權重策略 | 高優先順序類型容錯能力 | 低優先順序類型容錯 | 最適合 | 
| --- | --- | --- | --- | 
| 高優先順序的較高權重 (0.7 / 0.3) | 較低 （受保護） | 較高 （執行較熱） | 保護昂貴或高容量的執行個體免於過載 | 
| 等於 (0.5 / 0.5) | 平衡 | 平衡 | 大多數工作負載的預設建議 | 
| 低優先順序的較高權重 (0.3 / 0.7) | 較高 （執行較熱） | 較低 （受保護） | 防止較小的備用執行個體變得飽和 | 

如需使用自動調整規模自訂指標的詳細資訊，請參閱 [定義自訂指標 (CloudWatch 指標：CPUUtilization)](endpoint-auto-scaling-add-code-define.md#endpoint-auto-scaling-add-code-custom)。