

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Implemente em vários tipos de instância com grupos de instâncias
<a name="realtime-endpoints-heterogeneous"></a>

Quando você implanta um modelo em um endpoint de SageMaker IA, normalmente especifica um único tipo de instância para a variante de produção. Se esse tipo de instância não estiver disponível na zona de disponibilidade de destino, a implantação falhará com um erro de capacidade insuficiente (ICE) e você deverá tentar manualmente novamente com um tipo de instância diferente.

Com grupos de instâncias, você pode especificar uma lista ordenada de até cinco tipos de instância para uma variante de produção. SageMaker A IA tenta provisionar instâncias começando com o tipo de maior prioridade (prioridade 1) e automaticamente volta para os tipos de menor prioridade quando a capacidade não está disponível. Isso elimina a necessidade de repetição manual e melhora a disponibilidade do endpoint.

Os pools de instâncias oferecem suporte a endpoints de inferência em tempo real e assíncronos. Você pode usá-los com endpoints de modelo único e com componentes de inferência.

As etapas a seguir descrevem como funciona o provisionamento do pool de instâncias:

1. SageMaker A IA tenta provisionar instâncias do pool de maior prioridade (prioridade 1).

1. Se a SageMaker IA encontrar um erro de capacidade insuficiente (ICE) para o tipo de instância atual, ela automaticamente retornará ao próximo pool em ordem de prioridade.

1. Isso continua até que o número necessário de instâncias seja provisionado, todos os pools estejam esgotados ou o tempo limite total de provisionamento () seja atingido. `VariantInstanceProvisionTimeoutInSeconds`

**Topics**
+ [Configurar um endpoint com grupos de instâncias](#heterogeneous-endpoint-setup)
+ [Monitore grupos de instâncias](#heterogeneous-endpoint-observability)
+ [Auto-scaling com grupos de instâncias](#heterogeneous-endpoint-autoscaling)

## Configurar um endpoint com grupos de instâncias
<a name="heterogeneous-endpoint-setup"></a>

Para usar grupos de instâncias, você substitui o `InstanceType` parâmetro em sua variante de produção por uma `InstancePools` lista. Cada entrada especifica um tipo de instância e uma prioridade (de 1 a 5, em que 1 é a mais alta). Opcionalmente, você pode definir `VariantInstanceProvisionTimeoutInSeconds` (300 a 3600 segundos) para controlar o tempo total que a SageMaker IA gasta tentando provisionar instâncias em todos os pools antes que a operação falhe.

### Real-time endpoint com um único modelo
<a name="heterogeneous-endpoint-setup-realtime"></a>

O exemplo a seguir cria uma configuração de endpoint com dois grupos de instâncias. Se as `ml.g6.2xlarge` instâncias não estiverem disponíveis, a SageMaker IA volta para o. `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,
)
```

Você também pode usar o `ModelNameOverride` parâmetro em cada pool para especificar um modelo diferente otimizado para esse tipo de instância. Por exemplo, você pode implantar um modelo compilado para GPU em um tipo de instância e uma versão não compilada em outro.

### Real-time endpoint com componentes de inferência
<a name="heterogeneous-endpoint-setup-ic"></a>

Ao usar componentes de inferência com grupos de instâncias, você tem duas opções para definir especificações:
+ **Único `Specification`** — use o mesmo modelo e configuração de recursos em todos os tipos de instância nos pools de instâncias do endpoint. Isso funciona quando o modelo pode ser executado em qualquer um dos tipos de instância provisionados com os mesmos requisitos de recursos.
+ **Múltiplo `Specifications`** — Use o `Specifications` parâmetro (plural) para definir diferentes configurações de modelo ou recurso para cada tipo de instância. Cada especificação inclui um `InstanceType` campo que a mapeia para um tipo de instância nos pools de instâncias do endpoint.

O exemplo a seguir cria um componente de inferência com especificações por tipo de instância:

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

## Monitore grupos de instâncias
<a name="heterogeneous-endpoint-observability"></a>

As CloudWatch métricas existentes que são agregadas em todas as instâncias em uma variante`Invocations`, como`ModelLatency`, e`CPUUtilization`, continuam funcionando da mesma forma quando você usa grupos de instâncias. Além disso, CloudWatch publica essas métricas com uma `InstanceType` dimensão para que você possa monitorar o desempenho de cada tipo de instância separadamente.

### Per-instance-type métricas
<a name="heterogeneous-observability-per-type"></a>

Quando uma variante de produção usa grupos de instâncias, as seguintes combinações de dimensões ficam disponíveis CloudWatch para monitoramento por tipo de instância:


| Combinação de dimensões | Caso de uso | 
| --- | --- | 
| EndpointName, VariantName, InstanceType | Filtre métricas de invocação e de endpoint (comoCPUUtilization,Invocations,ModelLatency) para um tipo de instância específico dentro da variante. | 
| InferenceComponentName, InstanceType | Filtre as métricas do componente de inferência para um tipo específico de instância. Use isso para comparar o desempenho do mesmo componente de inferência em diferentes tipos de instância. | 

Essas dimensões estão disponíveis tanto para CloudWatch métricas padrão quanto para métricas aprimoradas. Para ver a lista completa das métricas disponíveis, consulte [Métricas de SageMaker IA da Amazon na Amazon CloudWatch](monitoring-cloudwatch.md) [Métricas aprimoradas da Amazon SageMaker AI para endpoints de inferência](monitoring-cloudwatch-enhanced-metrics.md) e.

### Verifique a distribuição da frota
<a name="heterogeneous-observability-distribution"></a>

Para ver a contagem atual de instâncias de cada pool, chame 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`Na resposta, inclua uma `InstancePools` lista com a contagem atual de cada tipo de instância. Isso mostra a composição da sua frota após o provisionamento, incluindo quaisquer instâncias alternativas de pools de menor prioridade.

Se você usa componentes de inferência, a [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeInferenceComponent.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeInferenceComponent.html)resposta inclui um `PlacementStatus` campo no resumo da configuração do tempo de execução que mostra a contagem de cópias por tipo de instância. Use isso para entender como as cópias dos componentes de inferência são distribuídas entre os tipos de instância em sua frota.

## Auto-scaling com grupos de instâncias
<a name="heterogeneous-endpoint-autoscaling"></a>

Auto-scaling com grupos de instâncias segue o mesmo processo do auto-scaling padrão de endpoints. Você registra alvos escaláveis, define políticas de escalabilidade e as aplica ao seu endpoint. Para a configuração geral do auto-scaling, consulte. [Escalabilidade automática dos modelos de SageMaker IA da Amazon](endpoint-auto-scaling.md)

A principal diferença é como a SageMaker IA provisiona e libera instâncias quando um evento de escalabilidade é acionado:

Expandir (adição de instâncias)  
SageMaker A IA provisiona instâncias começando com o pool de maior prioridade (valor de prioridade mais baixo). Se a SageMaker IA encontrar um erro de capacidade insuficiente para o tipo de instância atual, ela voltará automaticamente para o próximo pool em ordem de prioridade. SageMaker A IA continua tentando novamente em todos os pools até que as instâncias sejam provisionadas ou o total `VariantInstanceProvisionTimeoutInSeconds` seja atingido.

Aumentar a escala (remover instâncias)  
SageMaker A IA libera instâncias começando com o pool de menor prioridade (valor de maior prioridade). Seus tipos de instância preferidos e de maior prioridade são mantidos em execução pelo maior tempo possível, e as instâncias alternativas são lançadas primeiro.

### Use métricas de escalabilidade predefinidas
<a name="heterogeneous-autoscaling-predefined"></a>

Métricas de escalabilidade predefinidas, como `SageMakerVariantInvocationsPerInstance` continuar trabalhando com grupos de instâncias. Essas métricas são agregadas em todos os tipos de instância na variante, portanto, o comportamento de escalabilidade é o mesmo de um endpoint padrão. Essa é a abordagem mais simples quando todos os tipos de instância em seus pools têm capacidade semelhante.

Para monitoramento de metas e configuração da política de escalonamento de etapas, consulte[Escalabilidade automática dos modelos de SageMaker IA da Amazon](endpoint-auto-scaling.md).

### Use métricas personalizadas ponderadas para frotas mistas
<a name="heterogeneous-autoscaling-weighted"></a>

Quando seus pools de instâncias contêm tipos de instâncias com capacidades computacionais diferentes, você pode usar a matemática CloudWatch métrica para criar um sinal de escalabilidade ponderado. Isso permite controlar o quanto a carga de cada tipo de instância contribui para a decisão geral de escalabilidade.

O exemplo a seguir cria uma política de rastreamento de metas que usa uma média ponderada de `ConcurrentRequestsPerModel` dois tipos de instância. Os pesos determinam a sensibilidade da política de escalabilidade à carga de cada tipo:

```
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,
                },
            ],
        },
    },
)
```

Neste exemplo, `cr_g6e` busque `cr_g6` a métrica por tipo de instância`ConcurrentRequestsPerModel`. A `weighted_avg` expressão os combina com pesos iguais (0,5/0,5). Ajuste os pesos para alterar a forma como a política responde à carga em cada tipo de instância.

**Como os pesos afetam o comportamento de escalabilidade:** um peso maior em um tipo de instância significa que a política de escalabilidade é *mais sensível* à carga desse tipo, não menos. O sinal do tipo com menor peso é atenuado, para que ele possa funcionar com maior utilização antes de acionar um evento de escalonamento.


| Estratégia de peso | High-priority tolerância de tipo | Low-priority tolerância de tipo | Melhor para | 
| --- | --- | --- | --- | 
| Maior peso em alta prioridade (0,7/ 0,3) | Inferior (protegido) | Mais alto (funciona mais quente) | Protegendo instâncias caras ou de alta capacidade contra sobrecarga | 
| Igual (0,5/0,5) | Balanceado | Balanceado | Recomendação padrão para a maioria das cargas de trabalho | 
| Maior peso em baixa prioridade (0,3/ 0,7) | Mais alto (funciona mais quente) | Inferior (protegido) | Evitando que instâncias menores de fallback fiquem saturadas | 

Para obter mais informações sobre métricas personalizadas com auto-scaling, consulte. [Defina uma métrica personalizada (CloudWatch métrica: CPUUtilization)](endpoint-auto-scaling-add-code-define.md#endpoint-auto-scaling-add-code-custom)