

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á.

# Criar um trabalho de otimização de inferência
<a name="model-optimize-create-job"></a>

Você pode criar um trabalho de otimização de inferência usando o Studio ou o SDK SageMaker AI Python. O trabalho otimiza seu modelo aplicando as técnicas que você escolher. Para obter mais informações, consulte [Técnicas de otimização](model-optimize.md#optimization-techniques).

**Preços de instâncias para trabalhos de otimização de inferência**  
Quando você cria um trabalho de otimização de inferência que aplica quantização ou compilação, a SageMaker IA escolhe qual tipo de instância usar para executar o trabalho. Você recebe cobranças com base na instância usada.  
Para ver os possíveis tipos de instância e seus detalhes de preços, consulte as informações de preços de otimização de inferência na página de [ SageMaker preços da Amazon](https://aws.amazon.com/sagemaker/pricing/).  
Você não terá custos adicionais para trabalhos que aplicam decodificação especulativa.

Para ver os modelos compatíveis que você pode otimizar, consulte [Referência de modelos compatíveis](optimization-supported-models.md).

## SageMaker Estúdio Amazon
<a name="optimize-create-studio"></a>

Conclua as etapas a seguir para criar um trabalho de otimização de inferência no Studio.

**Como começar a criar um trabalho de otimização**

1. No SageMaker AI Studio, crie um trabalho de otimização por meio de qualquer um dos seguintes caminhos:
   + Para criar um trabalho para um JumpStart modelo, faça o seguinte:

     1. No menu de navegação, selecione **JumpStart**.

     1. Na página **Todos os modelos públicos**, escolha um fornecedor de modelos e selecione um dos modelos que permitem otimização.

     1. Na página de detalhes do modelo, escolha **Otimizar**. Esse botão está habilitado somente para modelos que permitem otimização.

     1. Na página **Criar tarefa de otimização de inferência**, alguns JumpStart modelos exigem que você assine um contrato de licença de usuário final (EULA) antes de continuar. Se solicitado, analise os termos da licença na seção **Contrato de licença**. Se os termos forem aceitáveis para seu caso de uso, marque a caixa de seleção **Aceito o EULA e li os termos e condições**.
   + Para criar um trabalho para um JumpStart modelo ajustado, faça o seguinte:

     1. No painel de navegação, em **Trabalhos**, escolha **Treinamento**.

     1. Na página **Tarefas de treinamento**, escolha o nome de uma tarefa que você usou para ajustar um JumpStart modelo. Esses trabalhos têm o tipo **JumpStarttreinamento** na coluna **Tipo de trabalho**.

     1. Na página de detalhes da tarefa de treinamento, escolha **Otimizar**.
   + Para criar um trabalho para um modelo personalizado, faça o seguinte:

     1. No menu de navegação, em **Trabalho**, escolha **Otimização da inferência**.

     1. Escolha **Create new job** (Criar uma nova tarefa).

     1. Na página **Criar trabalho de otimização de inferência**, escolha **Adicionar modelo**.

     1. Na janela **Adicionar modelo**, escolha **Modelo personalizado**.

     1. Escolha uma das seguintes opções:

        **Use seu modelo existente:** selecione essa opção para otimizar um modelo que você já criou na SageMaker IA.

        **Nome do modelo existente** - insira o nome do seu modelo de SageMaker IA.

        **Do S3** - Selecione essa opção para fornecer artefatos de modelo do Amazon S3. Em **URI do S3**, insira o URI do local no Amazon S3 em que você armazenou os artefatos do seu modelo.

     1. (Opcional) Em ****Nome do modelo de saída****, você pode inserir um nome personalizado para o modelo otimizado que o trabalho cria. Se você não fornecer um nome, o Studio gerará automaticamente um com base na sua seleção.

1. Na página **Criar tarefa de otimização de inferência**, em **Job name**, você pode aceitar o nome padrão que a SageMaker IA atribui. Outra opção é, para inserir um nome de trabalho personalizado, escolher o campo **Nome do trabalho** e selecionar **Inserir nome do trabalho**.

**Como definir as configurações de otimização**

1. Em **Tipo de instância de implantação**, escolha o tipo de instância para o qual você deseja otimizar o modelo.

   O tipo de instância afeta as técnicas de otimização que você pode escolher. Para a maioria dos tipos que usam hardware de GPU, as técnicas permitidas são **quantização** e **decodificação especulativa**. Se você escolher uma instância que usa silício personalizado, como a instância AWS Inferentia ml.inf2.8xlarge, a técnica suportada é a **Compilação, que você pode usar para compilar** o modelo para esse tipo específico de hardware.

1. Selecione uma ou mais entre as técnicas de otimização que o Studio oferece:
   + Se você selecionar **Quantização**, escolha um tipo de dados para **Tipo de dados de precisão**. 
   + Se você selecionar **Decodificação especulativa**, escolha uma das seguintes opções:
     + **Use o modelo de rascunho de SageMaker IA** — Escolha usar o modelo de rascunho fornecido pela SageMaker IA.
**nota**  
Se você optar por usar o modelo de rascunho de SageMaker IA, também deverá habilitar o isolamento da rede. O Studio oferece essa opção em **Segurança**.
     + **Escolha o modelo de JumpStart rascunho** — Escolha selecionar um modelo do JumpStart catálogo para usar como seu modelo de rascunho.
     + **Escolher seu próprio modelo de rascunho**: opte por usar seu próprio modelo de rascunho e forneça o URI do S3 que o localiza.
   + Se você escolher **Carregamento rápido do modelo**, o Studio mostrará a variável de ambiente `OPTION_TENSOR_PARALLEL_DEGREE`. Use o campo **Valor** para definir o grau de paralelismo do tensor. O valor deve dividir uniformemente o número de GPUs na instância que você escolheu para o **tipo de instância de implantação**. Por exemplo, para fragmentar seu modelo ao usar uma instância com 8 GPUs, use os valores 2, 4 ou 8.
   + Se você definir o **tipo de instância de implantação** como uma instância AWS Inferentia ou AWS Trainium, o Studio poderá mostrar que a **compilação** é a única opção compatível. Nesse caso, o Studio seleciona essa opção para você.

1. Em **Saída**, insira o URI de um local no Amazon S3. Lá, a SageMaker IA armazena os artefatos do modelo otimizado que seu trabalho cria.

1. (Opcional) Expanda **Opções avançadas** para conseguir um controle mais refinado sobre as configurações, como o perfil do IAM, a VPC e as variáveis de ambiente. Para ter mais informações, consulte *Opções avançadas* abaixo.

1. Quando terminar de configurar o trabalho, escolha **Criar trabalho**.

   O Studio mostra a página de detalhes do trabalho, que exibe o status e todas as suas configurações do trabalho.

### Opções avançadas
<a name="set-advanced-optimization-options"></a>

Você pode definir as opções avançadas a seguir ao criar um trabalho de otimização de inferência.

Em **Configurações**, você pode definir as seguintes opções:

**Tensor de grau paralelo **  
Um valor para o grau de *paralelismo de tensores*. O paralelismo de tensores é um tipo de paralelismo de modelo no qual pesos, gradientes e estados do otimizador específicos do modelo são divididos entre dispositivos. O valor deve dividir uniformemente o número de GPUs em seu cluster.

**Tamanho máximo de tokens**  
O limite para o número de tokens a serem gerados pelo modelo. Observe que o modelo nem sempre gera o número máximo de tokens.

**Simultaneidade**  
A possibilidade de executar várias instâncias de um modelo no mesmo hardware subjacente. Use a simultaneidade para fornecer predições a vários usuários e maximizar a utilização de hardware.

**Tamanho do lote**  
Se seu modelo fizer *inferência em lote*, use essa opção para controlar o tamanho dos lotes que ele processa.  
A predição em lote, também conhecida como inferência off-line, gera predições de modelo em um lote de observações. A inferência em lote é uma boa opção para grandes conjuntos de dados ou quando você não precisa de uma resposta imediata a uma solicitação de predição de modelo. 

Em **Segurança**, você pode definir as seguintes opções:

**Perfil do IAM**  
Uma função do IAM que permite que a SageMaker IA execute tarefas em seu nome. Durante a otimização do modelo, a SageMaker IA precisa da sua permissão para:  
+ Ler dados de entrada de um bucket do S3.
+ Gravar artefatos do modelo em um bucket do S3.
+ Grave registros no Amazon CloudWatch Logs
+ Publique métricas na Amazon CloudWatch
Você concede permissões para todas essas tarefas a um perfil do IAM.  
Para obter mais informações, consulte [Como usar funções de execução de SageMaker IA](sagemaker-roles.md).

**Chave de criptografia do KMS**  
Uma chave em AWS Key Management Service (AWS KMS). SageMaker A IA usa a chave para criptografar os artefatos do modelo otimizado quando a SageMaker IA carrega o modelo no Amazon S3.

**VPC**  
SageMaker A IA usa essas informações para criar interfaces de rede e anexá-las aos seus contêineres de modelo. As interfaces de rede concedem aos contêineres de modelo uma conexão de rede na sua VPC, sem acesso à Internet. Além disso, permitem que o modelo conecte-se aos recursos da VPC privada.  
Para obter mais informações, consulte [Dê aos endpoints hospedados por SageMaker IA acesso aos recursos em sua Amazon VPC](host-vpc.md).

**Habilitar isolamento de rede**  
Ative essa opção se quiser restringir o acesso do contêiner à internet. Os contêineres que funcionam com isolamento de rede não podem fazer nenhuma chamada de rede de saída.  
Você deve ativar essa opção ao otimizar com decodificação especulativa e usar o modelo de rascunho de SageMaker IA.  
Para ter mais informações sobre níveis de isolamento, consulte [Isolamento de rede](mkt-algo-model-internet-free.md#mkt-algo-model-internet-free-isolation).

Em **Definição avançada de contêiner**, você pode definir as seguintes opções:

**Condição de interrupção**  
Especifica o tempo máximo durante o qual um trabalho pode ser executado. Quando o trabalho atinge o limite de tempo, a SageMaker IA termina o trabalho. Use essa opção para limitar os custos.

**Tags**  
Pares de chave-valor associados ao trabalho de otimização.  
Para ter mais informações sobre tags, consulte [Tagging AWS resources](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html) no *Referência geral da AWS*.

**Variáveis de ambiente**  
Pares de chave-valor que especificam as variáveis de ambiente que devem ser definidas no contêiner do modelo.

## SageMaker SDK AI para Python
<a name="optimize-create-pysdk"></a>

Você pode criar um trabalho de otimização de inferência usando o SDK SageMaker AI Python em seu projeto. Primeiro, defina uma instância `Model` usando a classe `ModelBuilder`. Em seguida, use o método `optimize()` para executar um trabalho que otimize seu modelo com quantização, decodificação especulativa ou compilação. Quando o trabalho estiver concluído, implante o modelo em um endpoint de inferência usando o método `deploy()`.

Para obter mais informações sobre as classes e os métodos usados nos exemplos a seguir, consulte [APIs](https://sagemaker.readthedocs.io/en/stable/api/index.html)a documentação do SDK para SageMaker AI Python.

**Como configurar o projeto**

1. No código da sua aplicação, importe as bibliotecas necessárias. O exemplo a seguir importa o SDK para Python (Boto3). Ele também importa as classes do SDK SageMaker AI Python que você usa para definir e trabalhar com modelos:

   ```
   import boto3
   from sagemaker.serve.builder.model_builder import ModelBuilder
   from sagemaker.serve.builder.schema_builder import SchemaBuilder
   from sagemaker.session import Session
   from pathlib import Path
   ```

1. Inicialize uma sessão de SageMaker IA. O seguinte exemplo usa a classe `Session()`:

   ```
   sagemaker_session = Session()
   ```

**Como definir seu modelo**

1. Crie uma instância `SchemaBuilder` e forneça amostras de entrada e saída. Forneça essa instância para a classe `ModelBuilder` ao definir um modelo. Com isso, a SageMaker IA gera automaticamente as funções de organização para serializar e desserializar a entrada e a saída.

   Para ter mais informações sobre como usar as classes `SchemaBuilder` e `ModelBuilder`, consulte [Crie um modelo na Amazon SageMaker AI com ModelBuilder](how-it-works-modelbuilder-creation.md).

   O seguinte exemplo apresenta amostras de strings de entrada e saída para a classe `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. Defina seu modelo para SageMaker IA. O seguinte exemplo define os parâmetros para inicializar uma instância `ModelBuilder`:

   ```
   model_builder = ModelBuilder(
       model="jumpstart-model-id",
       schema_builder=schema_builder,
       sagemaker_session=sagemaker_session,
       role_arn=sagemaker_session.get_caller_identity_arn(),
   )
   ```

   Este exemplo usa um JumpStart modelo. `jumpstart-model-id`Substitua pela ID de um JumpStart modelo, como`meta-textgeneration-llama-3-70b`.
**nota**  
Se você quiser otimizar com decodificação especulativa e usar o rascunho de SageMaker IA, você deve habilitar o isolamento da rede. Para habilitá-lo, inclua o seguinte argumento ao inicializar uma instância `ModelBuilder`:  

   ```
   enable_network_isolation=True,
   ```
Para ter mais informações sobre níveis de isolamento, consulte [Isolamento de rede](mkt-algo-model-internet-free.md#mkt-algo-model-internet-free-isolation).

**Como realizar a otimização com quantização**

1. Para executar um trabalho de quantização, use o método `optimize()` e defina o argumento `quantization_config`. O seguinte exemplo define `OPTION_QUANTIZE` como uma variável de ambiente no contêiner de otimização:

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       quantization_config={
           "OverrideEnvironment": {
               "OPTION_QUANTIZE": "awq",
           },
       },
       output_path="s3://output-path",
   )
   ```

   Neste exemplo, substitua *`instance-type`* por uma instância de ML, como `ml.p4d.24xlarge`. Substitua *`s3://output-path`* pelo caminho para o local do S3 onde você armazena o modelo otimizado criado pelo trabalho.

   O método `optimize()` exibe um objeto `Model`, que você pode usar para implantar o modelo em um endpoint.

1. Quando o trabalho for concluído, implante o modelo. O seguinte exemplo usa o método `deploy()`:

   ```
   predictor = optimized_model.deploy(
       instance_type="instance-type", 
       accept_eula=True,
   )
   ```

   Neste exemplo, substitua *`instance-type`* por uma instância de ML, como `ml.p4d.24xlarge`. 

   O método `deploy()` exibe um objeto preditor, que pode ser usado para enviar solicitações de inferência ao endpoint que hospeda o modelo.

**Para otimizar com decodificação especulativa usando o modelo de esboço de SageMaker IA**

Ao otimizar seu modelo com decodificação especulativa, você pode optar por usar um modelo de rascunho fornecido pela SageMaker IA ou usar o seu próprio. Os exemplos a seguir usam o modelo de rascunho de SageMaker IA.
**Pré-requisito**  
Para otimizar com a decodificação especulativa e o modelo de esboço de SageMaker IA, você deve ativar o isolamento da rede ao definir seu modelo.

1. Para executar um trabalho de decodificação especulativa, use o método `optimize()` e defina o argumento `speculative_decoding_config`. O exemplo a seguir define a `ModelProvider` chave `SAGEMAKER` para usar o modelo de rascunho fornecido pela SageMaker IA.

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       speculative_decoding_config={
           "ModelProvider": "SAGEMAKER",
       },
   )
   ```

   Neste exemplo, substitua *`instance-type`* por uma instância de ML, como `ml.p4d.24xlarge`.

   O método `optimize()` exibe um objeto `Model`, que você pode usar para implantar o modelo em um endpoint.

1. Quando o trabalho for concluído, implante o modelo. O seguinte exemplo usa o método `deploy()`:

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   O método `deploy()` exibe um objeto preditor, que você pode usar para enviar solicitações de inferência ao endpoint que hospeda o modelo.

**Como realizar a otimização com decodificação especulativa usando um modelo de rascunho personalizado**

Antes de fornecer seu modelo de rascunho personalizado para a SageMaker IA, você deve primeiro fazer o upload dos artefatos do modelo para o Amazon S3.

Os exemplos a seguir demonstram uma forma possível de fornecer um modelo de rascunho personalizado. Os exemplos baixam o rascunho do modelo do Hugging Face Hub, fazem upload no Amazon S3 e fornecem o URI do S3 para o argumento `speculative_decoding_config`.

1. Se você quiser baixar um modelo do Hugging Face Hub, adicione a biblioteca `huggingface_hub` ao seu projeto e baixe um modelo com o método `snapshot_download()`. O seguinte exemplo baixa um modelo em um diretório local:

   ```
   import huggingface_hub
   
   huggingface_hub.snapshot_download(
       repo_id="model-id",
       revision="main",
       local_dir=download-dir,
       token=hf-access-token,
   )
   ```

   Neste exemplo, substitua *`model-id`* pelo ID de um modelo do Hugging Face Hub, como `meta-llama/Meta-Llama-3-8B`. Substitua *`download-dir`* por um diretório local. Substitua *`hf-access-token`* pelo seu token de acesso de usuário. Para saber como obter seu token de acesso, consulte [User access tokens](https://huggingface.co/docs/hub/en/security-tokens) na documentação da Hugging Face.

   Para saber mais sobre a biblioteca `huggingface_hub`, consulte a [Hub client library](https://huggingface.co/docs/huggingface_hub/en/index) na documentação da Hugging Face.

1. Para disponibilizar seu modelo baixado para a SageMaker IA, faça o upload para o Amazon S3. O seguinte exemplo faz upload do objeto para com o objeto `sagemaker_session`:

   ```
   custom_draft_model_uri = sagemaker_session.upload_data(
       path=hf_local_download_dir.as_posix(),
       bucket=sagemaker_session.default_bucket(),
       key_prefix="prefix",
   )
   ```

   Neste exemplo, substitua *`prefix`* por um qualificador que ajude você a distinguir o modelo de rascunho no S3, como `spec-dec-custom-draft-model`.

   O método `upload_data()` exibe o URI do S3 para os artefatos do modelo.

1. Para executar um trabalho de decodificação especulativa, use o método `optimize()` e defina o argumento `speculative_decoding_config`. O seguinte exemplo define a chave `ModelSource` para o URI do S3 do modelo de rascunho personalizado:

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       speculative_decoding_config={
           "ModelSource": custom_draft_model_uri + "/",
       },
   )
   ```

   Neste exemplo, substitua *`instance-type`* por uma instância de ML, como `ml.p4d.24xlarge`.

   O método `optimize()` exibe um objeto `Model`, que você pode usar para implantar o modelo em um endpoint.

1. Quando o trabalho for concluído, implante o modelo. O seguinte exemplo usa o método `deploy()`:

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   O método `deploy()` exibe um objeto preditor, que você pode usar para enviar solicitações de inferência ao endpoint que hospeda o modelo.

**Como otimizar com a compilação**

1. Para executar um trabalho de compilação, use o método `optimize()` e defina o argumento `compilation_config`. O seguinte exemplo usa a chave `OverrideEnvironment` para definir as variáveis de ambiente necessárias no contêiner de otimização:

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       compilation_config={
           "OverrideEnvironment": {
               "OPTION_TENSOR_PARALLEL_DEGREE": "24",
               "OPTION_N_POSITIONS": "8192",
               "OPTION_DTYPE": "fp16",
               "OPTION_ROLLING_BATCH": "auto",
               "OPTION_MAX_ROLLING_BATCH_SIZE": "4",
               "OPTION_NEURON_OPTIMIZE_LEVEL": "2",
           }
       },
       output_path="s3://output-path",
   )
   ```

   Neste exemplo, defina *`instance-type`* como um tipo de instância de ML com hardware acelerado. Por exemplo, para inferência acelerada com AWS inferência, você pode definir o tipo como uma instância Inf2, como. `ml.inf2.48xlarge` Substitua *`s3://output-path`* pelo caminho para o local do S3 onde você armazena o modelo otimizado criado pelo trabalho.

1. Quando o trabalho for concluído, implante o modelo. O seguinte exemplo usa o método `deploy()`:

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   O método `deploy()` exibe um objeto preditor, que você pode usar para enviar solicitações de inferência ao endpoint que hospeda o modelo.

**Como testar seu modelo com uma solicitação de inferência**
+ Para enviar uma solicitação de inferência de teste ao modelo implantado, use o método `predict()` de um objeto preditor. O seguinte exemplo passa a variável `sample_input`, que também foi passada para a classe `SchemaBuilder` nos exemplos para definir seu modelo:

  ```
  predictor.predict(sample_input)
  ```

  A entrada da amostra tem o prompt `"What is the largest planet in the solar system?"`. O método `predict()` exibe a resposta que o modelo gerou, conforme mostrado no seguinte exemplo:

  ```
  {'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 . . .'}
  ```

## AWS SDK para Python (Boto3)
<a name="optimize-create-pysdk-boto"></a>

Você pode usar o AWS SDK para Python (Boto3) para criar e gerenciar programaticamente trabalhos de otimização de inferência. Esta seção fornece exemplos de diferentes técnicas de otimização.

**Pré-requisitos**

Antes de criar um trabalho de otimização com o Boto3, verifique se você tem:
+  AWS Credenciais configuradas - Configure suas AWS credenciais com as permissões apropriadas
+ Criou um modelo de SageMaker IA (se estiver usando um modelo existente)
+ Dados de treinamento preparados no S3 (para otimização de decodificação especulativa, comprimento de contexto suportado de até 4096)
+ Função do IAM com as permissões necessárias — Sua função de execução deve ter permissões para acessar o S3 e criar recursos SageMaker 

**Exemplo: Crie um Job de Otimização com a Decodificação EAGLE Speculative (Llama 3.3 70B)**

Este exemplo demonstra a criação de um trabalho de otimização para um grande modelo de linguagem usando a técnica de decodificação especulativa EAGLE:

```
import boto3

# Initialize SageMaker client
sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

# Step 1: Create a SageMaker model (if not already created)
model_response = sagemaker_client.create_model(
    ModelName='meta-llama-3-3-70b-instruct',
    ExecutionRoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    PrimaryContainer={
        'Image': '763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:<tag>',
        'ModelDataSource': {
            'S3DataSource': {
                'S3Uri': 's3://my-bucket/models/Llama-3.3-70B-Instruct/',
                'S3DataType': 'S3Prefix',
                'CompressionType': 'None'
            }
        },
        'Environment': {
            'SAGEMAKER_ENV': '1',
            'SAGEMAKER_MODEL_SERVER_TIMEOUT': '3600'
        }
    }
)

# Step 2: Create optimization job with speculative decoding
optimization_response = sagemaker_client.create_optimization_job(
    OptimizationJobName='llama-optim-job-eagle-speculative-decoding',
    RoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    ModelSource={
        'SageMakerModel': {
            'ModelName': 'meta-llama-3-3-70b-instruct'
        }
    },
    DeploymentInstanceType='ml.p4d.24xlarge',
    # MaxInstanceCount specifies the maximum number of instances for distributed training
    MaxInstanceCount=4,
    OptimizationConfigs=[
        {
            'ModelSpeculativeDecodingConfig': {
                'Technique': 'EAGLE',
                'TrainingDataSource': {
                    'S3Uri': 's3://my-bucket/training_data/ultrachat_8k/',
                    'S3DataType': 'S3Prefix'
                }
            }
        }
    ],
    OutputConfig={
        'S3OutputLocation': 's3://my-bucket/optimized-models/llama-optim-output/',
    },
    StoppingCondition={
        'MaxRuntimeInSeconds': 432000  # 5 days
    }
)

print(f"Optimization job ARN: {optimization_response['OptimizationJobArn']}")
```

**Exemplo: Criar um Job de Otimização a partir de artefatos do modelo S3 (Qwen3 32B)**

Este exemplo mostra como criar um trabalho de otimização usando artefatos de modelo diretamente do S3:

```
import boto3

sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

# Create model from S3 artifacts
model_response = sagemaker_client.create_model(
    ModelName='qwen3-32b',
    ExecutionRoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    PrimaryContainer={
        'Image': '763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:<tag>',
        'Mode': 'SingleModel',
        'ModelDataSource': {
            'S3DataSource': {
                'S3Uri': 's3://my-bucket/models/qwen3-32b/',
                'S3DataType': 'S3Prefix',
                'CompressionType': 'None'
            }
        },
        'Environment': {
            'AWS_REGION': 'us-west-2'
        }
    }
)

# Create optimization job with smaller training dataset
optimization_response = sagemaker_client.create_optimization_job(
    OptimizationJobName='qwen3-optim-job-eagle',
    RoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    ModelSource={
        'SageMakerModel': {
            'ModelName': 'qwen3-32b'
        }
    },
    DeploymentInstanceType='ml.g6.48xlarge',
    MaxInstanceCount=4,
    OptimizationConfigs=[
        {
            'ModelSpeculativeDecodingConfig': {
                'Technique': 'EAGLE',
                'TrainingDataSource': {
                    'S3Uri': 's3://my-bucket/training_data/ultrachat_1k/',
                    'S3DataType': 'S3Prefix'
                }
            }
        }
    ],
    OutputConfig={
        'S3OutputLocation': 's3://my-bucket/optimized-models/qwen3-optim-output/',
    },
    StoppingCondition={
        'MaxRuntimeInSeconds': 432000  # 5 days
    }
)

print(f"Optimization job ARN: {optimization_response['OptimizationJobArn']}")
```

**Exemplo: monitorar e gerenciar tarefas de otimização**

Depois de criar um trabalho de otimização, você pode monitorar seu progresso e gerenciá-lo usando estes comandos:

```
import boto3

sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

# Describe optimization job to check status
describe_response = sagemaker_client.describe_optimization_job(
    OptimizationJobName='llama-optim-job-eagle-speculative-decoding'
)

print(f"Job Status: {describe_response['OptimizationJobStatus']}")

# List all optimization jobs (with pagination)
list_response = sagemaker_client.list_optimization_jobs(
    MaxResults=10,
    SortBy='CreationTime',
    SortOrder='Descending'
)

print("\nRecent optimization jobs:")
for job in list_response['OptimizationJobSummaries']:
    print(f"- {job['OptimizationJobName']}: {job['OptimizationJobStatus']}")

# Stop a running optimization job if needed
# sagemaker_client.stop_optimization_job(
#     OptimizationJobName='llama-optim-job-eagle-speculative-decoding'
# )

# Delete a completed or failed optimization job
# sagemaker_client.delete_optimization_job(
#     OptimizationJobName='llama-optim-job-eagle-speculative-decoding'
# )
```

A decodificação especulativa com Eagle Heads executa quatro trabalhos de treinamento sequenciais. Cada trabalho produz uma saída que se torna a entrada para a próxima. Somente a saída do trabalho final é entregue ao seu bucket do S3. As saídas intermediárias são criptografadas e armazenadas em um bucket de serviços de SageMaker IA interno por até 20 dias. SageMaker A IA não tem permissões para descriptografá-los. Se você quiser que os dados intermediários sejam removidos antes desse período, verifique se seu trabalho foi concluído ou interrompido e, em seguida, abra um caso de suporte [[https://docs.aws.amazon.com/awssupport/latest/user/case-management.html\$1 creating-a-support-case](https://docs.aws.amazon.com/awssupport/latest/user/case-management.html#creating-a-support-case)] para que esses dados sejam excluídos. Inclua na solicitação o ID da sua AWS conta e o ARN do trabalho de otimização.

## Limitações do modelo preliminar de SageMaker IA
<a name="sm-draft-model-limitations"></a>

Para qualquer modelo que você otimize com o modelo preliminar de SageMaker IA, esteja ciente dos requisitos, restrições e variáveis de ambiente suportadas.

**Requisitos**

Faça o seguinte:
+ Use um modelo fornecido pela SageMaker JumpStart.
+ Habilite o isolamento de rede para a implantação do modelo.
+ Se você implantar o modelo em um contêiner de inferência de modelo grande (LMI), use um DJLServing contêiner na versão 0.28.0 ou superior.

  Para ver os contêineres disponíveis, consulte [Contêineres de inferência de modelos grandes](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) no GitHub repositório Deep Learning Containers.
+ Se você ajustar o JumpStart modelo, use o formato de sensores de segurança para os pesos do modelo.

  Para ter mais informações sobre esse formato, consulte [Safetensors](https://huggingface.co/docs/safetensors/en/index) na documentação da Hugging Face.

**Restrições**

Você não pode fazer o seguinte:
+ Use o modelo em ambientes de teste locais que você cria com o modo local. 

  Para obter mais informações sobre o modo local, consulte [Modo local](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode) na documentação do SDK para SageMaker AI Python.
+ Acesse o contêiner do modelo por meio do AWS Systems Manager Agente (Agente SSM). O SSM Agent fornece acesso em nível de shell ao seu contêiner de modelo para que você possa depurar processos e registrar comandos com a Amazon. CloudWatch 

  Para ter mais informações sobre esse recurso, consulte [Acesso a contêineres por meio do SSM](ssm-access.md).
+ Configure o contêiner do modelo para gerar um dump de memória se o processo falhar. 

  Para obter mais informações sobre despejos principais de contêineres de modelos, consulte [ProductionVariantCoreDumpConfig](sagemaker/latest/APIReference/API_ProductionVariantCoreDumpConfig.html).
+ Implante o modelo em endpoints multimodelo, endpoints de vários contêineres ou endpoints que hospedam componentes de inferência. 

  Para ter mais informações sobre esses tipos de endpoint, consulte [Endpoints multimodelo](multi-model-endpoints.md), [Endpoint com vários contêineres](multi-container-endpoints.md) e [Componentes de inferência](realtime-endpoints-deploy-models.md#inference-components).
+ Crie um pacote de modelo para o modelo. Você usa pacotes de modelos para criar modelos implantáveis nos quais você publica. AWS Marketplace

  Para ter mais informações sobre esse recurso, consulte [Criar um recurso de pacote de modelos](sagemaker-mkt-create-model-package.md).
+ Use o seu próprio código de inferência no contêiner do modelo.
+ Use um arquivo `requirements.txt` no contêiner do modelo. Esse tipo de arquivo lista as dependências do pacote.
+ Habilite o parâmetro `trust_remote_code` do Hugging Face.

**Variáveis de ambiente compatíveis**

É possível configurar o contêiner somente com as seguintes variáveis de ambiente:
+ Variáveis de ambiente comuns para contêineres de inferência de grandes modelos (LMI). 

  Para ter mais informações sobre essas variáveis, consulte [Environment Variable Configurations](https://docs.djl.ai/master/docs/serving/serving/docs/lmi/deployment_guide/configurations.html#environment-variable-configurations) na documentação do contêiner de LMI.
+ Variáveis de ambiente comuns para pacotes que o Hugging Face Hub fornece nos respectivos repositórios do Git. 

  Para os repositórios, consulte [Hugging Face on](https://github.com/huggingface). GitHub
+ Variáveis de ambiente comuns PyTorch e CUDA. 

  Para obter mais informações sobre essas variáveis, consulte [Variáveis de ambiente Torch](https://pytorch.org/docs/stable/torch_environment_variables.html) na PyTorch documentação.