

# Ajustar o Nova 1.0
<a name="nova-fine-tune-1"></a>

**nota**  
Você pode ajustar a série de modelos do Amazon Nova 1.0 usando o ajuste fino supervisionado (SFT) e a otimização direta de preferências. Para ajustar os modelos Nova 2.0, consulte [Ajustar o Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-fine-tune-2.html).

## Pré-requisitos
<a name="nova-model-training-jobs-prerequisites"></a>

Antes de iniciar uma tarefa de treinamento, observe o seguinte:
+ Os buckets do Amazon S3 para armazenar seus dados de entrada e as saídas das tarefas de treinamento. Você pode usar um bucket para ambos ou buckets separados para cada tipo de dados. Seus buckets devem estar na mesma Região da AWS onde você cria todos os outros recursos para treinamento. Para ter mais informações, consulte [Criar um bucket de uso geral](https://docs.aws.amazon.com//AmazonS3/latest/userguide/create-bucket-overview.html).
+ Um perfil do IAM com permissões para executar uma tarefa de treinamento. Você deve anexar uma política do IAM com `AmazonSageMakerFullAccess`. Para obter mais informações, consulte [Como usar os perfis de execução do SageMaker AI](https://docs.aws.amazon.com//sagemaker/latest/dg/sagemaker-roles.html).
+ Fórmulas básicas do Amazon Nova, consulte [Obter fórmulas do Amazon Nova](nova-model-recipes.md#nova-model-get-recipes).

## Preparação de dados
<a name="nova-model-training-prepare-data"></a>

Preparar dados de alta qualidade e formatados adequadamente é uma etapa inicial essencial no processo de ajuste fino de grandes modelos de linguagem. Se você estiver usando ajuste fino supervisionado (SFT) ou otimização direta de preferências (DPO), com abordagens de adaptação de classificação completa ou de baixa classificação (LoRA), seus dados deverão aderir a requisitos de formato específicos para garantir o êxito do treinamento do modelo. Esta seção descreve os formatos de dados necessários, os métodos de validação e as práticas recomendadas para ajudar você a preparar conjuntos de dados de forma eficaz e ajustar modelos do Amazon Nova.

### Requisitos de formato de dados
<a name="nova-model-training-prepare-data-format"></a>

**SFT**

Requisitos de formato de dados de SFT: tanto para o SFT full-rank quanto para o SFT LoRA, os dados devem seguir o formato mostrado abaixo. Para ver exemplos e restrições desse formato, consulte [Preparar dados para o ajuste dos modelos de compreensão](https://docs.aws.amazon.com//nova/latest/userguide/fine-tune-prepare-data-understanding.html).

Validação de dados de SFT: para validar o formato do conjunto de dados antes do envio, recomendamos usar o script de validação a seguir do [repositório de amostras do Amazon Bedrock](https://github.com/aws-samples/amazon-bedrock-samples/blob/main/custom-models/bedrock-fine-tuning/nova/understanding/dataset_validation/nova_ft_dataset_validator.py). Essa ferramenta de validação ajudará a garantir que seus arquivos `jsonl` estejam de acordo com as especificações de formato exigidas e a identificar possíveis problemas antes de enviar sua tarefa de ajuste fino.

**DPO**

Requisitos de formato de dados de DPO: tanto para o DPO em full-rank quanto para DPO com LoRA, os dados devem seguir o formato mostrado abaixo. O conjunto de dados também precisa estar no formato semelhante ao do SFT, exceto que o último turno precisa ter pares de preferências.

Outras restrições do conjunto de dados de DPO: as outras restrições nos conjuntos de dados são iguais às do SFT. Para ter mais informações, consulte [Restrições de conjuntos de dados](https://docs.aws.amazon.com//nova/latest/userguide/fine-tune-prepare-data-understanding.html). Espera-se um único arquivo JSONL para treinamento e um único arquivo JSONL para validação. O conjunto de validação é opcional.

Recomendamos que de conjunto de dados de DPO: no mínimo mil pares de preferências para que o treinamento seja eficaz. Dados de preferência de alta qualidade vão gerar resultados mais eficientes.

### Exemplos
<a name="nova-model-training-prepare-data-example"></a>

**Exemplo de formato de dados de DPO**

```
// N-1 turns same as SFT format
{
    "role": "assistant",
    "candidates": [
        {
            "content": [
                {
                    "text": "..."
                } // content list can contain multiple 'text' objects
            ],
            "preferenceLabel": "preferred"
        },
        {
            "content": [
                {
                    "text": "..."
                } // content list can contain multiple 'text' objects
            ],
            "preferenceLabel": "non-preferred"
        }
    ]
}
```

**Exemplo de formato de dados de DPO (vários turnos)**

```
{
    "system": [
        {
            "text": "..."
        }
    ],
    "messages":[
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "assistant",
            "candidates": [
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "preferred"
                },
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "non-preferred"
                }
            ]
        }
    ],
}
```

**Exemplo de formato de dados de DPO (com imagens)**

```
{
    "system": [
        {
            "text": "..."
        }
    ],
    "messages":[
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                },
                {
                    "text": "..."
                },
                {
                    "image": {
                        "format": "jpeg",
                        "source": {
                            "s3Location": {
                                "uri": "s3://your-bucket/your-path/your-image.jpg",
                                "bucketOwner": "your-aws-account-id"
                            }
                        }
                    }
                } // "content" can have multiple "text" and "image" objects.
                 // max image count is 10
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                },
                {
                    "text": "..."
                },
                {
                    "image": {
                        "format": "jpeg",
                        "source": {
                            "s3Location": {
                                "uri": "s3://your-bucket/your-path/your-image.jpg",
                                "bucketOwner": "your-aws-account-id"
                            }
                        }
                    }
                } // "content" can have multiple "text" and "image" objects.
                 // max image count is 10
            ]
        },
        {
            "role": "assistant",
            "candidates": [
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "preferred"
                },
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "non-preferred"
                }
            ]
        }
    ],
}
```

### Limites de conjunto de dados
<a name="nova-model-training-prepare-data-limits"></a>

As tarefas de treinamento têm como padrão um limite de tempo de um dia, embora as estimativas nas tabelas abaixo assumam uma duração de treinamento de cinco dias para fins ilustrativos. Como prática recomendada, sugerimos aumentar o limite de tempo de treinamento para no máximo 28 dias para atender a workloads de treinamento mais longas. Para solicitar um aumento de limite, consulte [Solicitar um aumento de cota](https://docs.aws.amazon.com//servicequotas/latest/userguide/request-quota-increase.html).

**Limites do conjunto de dados de SFT**

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/nova/latest/userguide/nova-fine-tune-1.html)

Limites do conjunto de dados de DPO

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/nova/latest/userguide/nova-fine-tune-1.html)

Ao reduzir o número de épocas ou o tamanho do contexto de seus registros, você pode fornecer mais registros.

## Configurações de SFT de classificação completa e PEFT LoRa
<a name="nova-model-training-jobs-recipe-config"></a>

Esta seção aborda orientações sobre configurações de fórmulas para abordagens de ajuste fino supervisionado (SFT) de classificação completa e ajuste fino com eficiência de parâmetros com adaptação de baixa classificação (PEFT LoRa). Esses arquivos de fórmula servem como esquema para seus trabalhos de personalização de modelo, permitindo que você especifique parâmetros de treinamento, hiperparâmetros e outras configurações essenciais que determinam como o modelo aprende com os dados. Para ajustar os hiperparâmetros, siga as diretrizes em [Selecionar hiperparâmetros](https://docs.aws.amazon.com//nova/latest/userguide/customize-fine-tune-hyperparameters.html).

### Configurações de ajuste fino (SFT de classificação completa e PEFT LoRA)
<a name="nova-model-training-jobs-recipe-config-1"></a>

A única diferença entre SFT de classificação completa e PEFT LoRa em termos de fórmula é a configuração PEFT LoRa, que é definida como “nula” para classificação completa e com valores apropriados se estiver usando o ajuste fino baseado em PEFT LoRa. Exemplos de fórmulas estão disponíveis no repositório de [fórmulas](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes) do GitHub. As tabelas a seguir mostram configurações detalhadas que podem ser úteis.

Sobre a **configuração “run”**.


|  | Chave | Definição | Micro | Light | Profissional | 
| --- | --- | --- | --- | --- | --- | 
| Configuração da execução | model\$1type |  Especifica a variante do modelo do Nova a ser usada. Não modifique esse campo.   |  “amazon.nova-micro-v1:0:128k”  |  “amazon.nova-lite-v1:0:300k”  |  “amazon.nova-pro-v1:0:300k”  | 
|  | model\$1name\$1or\$1path |  O caminho para o modelo de base.  |  “nova-micro/prod”  |  “nova-lite/prod”  |  “nova-pro/prod”  | 
|  | réplicas |  O número de instâncias de computação de ML a serem utilizadas no trabalho de transformação.  |  2, 4 ou 8  |  4, 8 ou 16  |  6, 12 ou 24  | 

Sobre a **configuração “training\$1config”**.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/nova/latest/userguide/nova-fine-tune-1.html)

### Ajustar configurações específicas (DPO)
<a name="nova-model-training-jobs-recipe-config-2"></a>

A única diferença entre a otimização direta de preferências (DPO) em comparação com PEFT LoRA e SFT de classificação completa refere-se à configuração de dpo\$1cfg e aos valores permitidos. Consulte a tabela abaixo do exemplo para ver as permissões específicas de DPO. Exemplos de fórmulas estão disponíveis no repositório de [fórmulas](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes) do GitHub. A tabela a seguir mostra configurações detalhadas que podem ser úteis.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/nova/latest/userguide/nova-fine-tune-1.html)

## Executar um modelo Nova personalizado em tarefas de treinamento do SageMaker
<a name="nova-model-training-jobs-notebook"></a>

Esta seção demonstra como executar um modelo Nova personalizado em tarefas de treinamento do SageMaker por meio de um ambiente de caderno Jupyter. Você encontrará um exemplo completo que mostra o processo de configuração e execução de uma tarefa de treinamento, com tabelas de referência para selecionar as configurações de instância e os URIs de imagem de contêiner apropriados. Essa abordagem oferece controle programático sobre seus fluxos de trabalho de ajuste fino e, ao mesmo tempo, utiliza a infraestrutura gerenciada do SageMaker AI para personalização de modelos. Para ter mais informações, consulte [Usar um estimador do SageMaker AI para executar uma tarefa de treinamento](https://docs.aws.amazon.com//sagemaker/latest/dg/docker-containers-adapt-your-own-private-registry-estimator.html).

### Tabelas de referência
<a name="nova-model-training-jobs-reference-table"></a>

Antes de executar o caderno de amostra, consulte as tabelas a seguir para selecionar as configurações de instância e os URIs de imagem de contêiner apropriados.

**Selecionar o URI da imagem**


| Fórmula | URI da imagem | 
| --- | --- | 
|  URI da imagem de SFT  | 708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-SFT-latest | 
|  URI da imagem de DPO  | 708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest | 

**Selecionar o tipo e da contagem de instâncias**


| Modelo | Tipo de tarefa de ajuste fino | Tipo de técnica | Tipo de instância | Contagem de instâncias recomendada | Contagem de instâncias permitidas | 
| --- | --- | --- | --- | --- | --- | 
| Amazon Nova Micro | SFT | LoRa | g5.12xlarge, g6.12xlarge, g5.48xlarge, g6.48xlarge | 1 | 1 | 
|  |  | LoRA\$1Full rank | g5.48xlarge, g6.48xlarge | 1 | 1 | 
|  |  |  | p4d.24xlarge | 2 | 2, 4, 8 | 
|  |  |  | p5.48xlarge, p5en.48xlarge | 1 | 1, 2, 4, 8 | 
|  | DPO | LoRa | g5.12xlarge, g6.12xlarge, g5.48xlarge, g6.48xlarge | 1 | 1 | 
|  |  | LoRA\$1Full rank | p4d.24xlarge, p5.48xlarge, p5en.48xlarge | 2 | 2, 4, 8 | 
| Amazon Nova Lite | SFT | LoRa | g5.12xlarge, g6.12xlarge, g5.48xlarge, g6.48xlarge | 1 | 1 | 
|  |  |  | p5.48xlarge, p5en.48xlarge | 1 | 1, 4, 8, 16 | 
|  |  | LoRA\$1Full rank | p4d.24xlarge | 4 | 4, 8, 16 | 
|  |  |  | p5.48xlarge, p5en.48xlarge | 2 | 2, 4, 8, 16 | 
|  | DPO | LoRa | g5.48xlarge, g6.48xlarge | 1 | 1 | 
|  |  | LoRA\$1Full rank | p4d.24xlarge, p5.48xlarge, p5en.48xlarge | 4 | 4, 8, 16 | 
| Amazon Nova Pro | SFT | LoRa | p4d.24xlarge | 6 | 6, 12, 24 | 
|  |  |  | p5.48xlarge, p5en.48xlarge | 3 | 3, 6, 12, 24 | 
|  |  | LoRA\$1Full rank | p5.48xlarge, p5en.48xlarge | 6 | 6, 12, 24 | 
|  | DPO | LoRa | p4d.24xlarge | 6 | 6, 12, 24 | 
|  |  | LoRA\$1Full rank | p4d.24xlarge | 12 | 12, 24 | 
|  |  |  | p5.48xlarge, p5en.48xlarge | 4 | 4, 8, 16 | 

### Exemplo de bloco de notas
<a name="nova-model-training-jobs-notebook"></a>

O exemplo de caderno a seguir demonstra como executar uma tarefa de treinamento. Para ver outros cadernos de introdução sobre como personalizar modelos Nova usando tarefas de treinamento do SageMaker, consulte [Usar um estimador do SageMaker AI para executar uma tarefa de treinamento](https://docs.aws.amazon.com//sagemaker/latest/dg/docker-containers-adapt-your-own-private-registry-estimator.html).

```
# 1. Install dependencies

!pip install sagemaker==2.254.1

# 2. Import dependencies and initialize sagemaker session

import sagemaker,boto3

sm = boto3.client('sagemaker', region_name='us-east-1')
sagemaker_session = sagemaker.session.Session(boto_session=boto3.session.Session(), sagemaker_client=sm)

# 3. Configure your job
# Define the core configuration for launching a SageMaker Training Job. This includes input/output S3 URIs, container image, hardware setup, and other runtime parameters. Update the placeholders below before submitting the job.

job_name = "<Your Job Name>"

input_s3_uri = "<S3 path to input data>"
validation_s3_uri = "<S3 path to validation data>" # optional, leave blank if no validation data

output_s3_uri = "<S3 path to output location>"

image_uri = "<Image URI from documentation>" # you can choose the image for SFT/DPO
instance_type = "ml.p5.48xlarge" # do not change
instance_count = <Integer number of hosts> # change hosts as needed. Refer to documentation for allowed values based on model type.
role_arn = "<IAM Role you want to use to run the job>"
recipe_path = "<Local path to the recipe file>"
output_kms_key = "<KMS key arn to encrypt trained model in Amazon-owned S3 bucket>" # optional, leave blank for Amazon managed encryption

# 4. Launch SageMaker Training Job
# This block sets up and runs the SageMaker training job using the PyTorch estimator. It configures the training image, hardware, input channels, and TensorBoard integration. Validation data is included if provided.

from sagemaker.debugger import TensorBoardOutputConfig
from sagemaker.pytorch import PyTorch
from sagemaker.inputs import TrainingInput

tensorboard_output_config = TensorBoardOutputConfig(
    s3_output_path=output_s3_uri,
)

estimator = PyTorch(
    output_path=output_s3_uri,
    base_job_name=job_name,
    role=role_arn,
    instance_count=instance_count,
    instance_type=instance_type,
    training_recipe=recipe_path,
    sagemaker_session=sagemaker_session,
    image_uri=image_uri,
    tensorboard_output_config=tensorboard_output_config, # Add the setting for using TensorBoard.
    disable_profiler=True,
    debugger_hook_config=False,
    output_kms_key=output_kms_key
)

trainingInput = TrainingInput(
    s3_data=input_s3_uri,
    distribution='FullyReplicated',
    s3_data_type='Converse'
)

if (validation_s3_uri):
    validationInput = TrainingInput(
        s3_data=validation_s3_uri,
        distribution='FullyReplicated',
        s3_data_type='Converse'
    )

    estimator.fit(inputs={"train": trainingInput, "validation": validationInput}) # inputs must be called "train" and "validation", do not change
else:
    estimator.fit(inputs={"train": trainingInput})
```

## Orientação sobre otimização de hiperparâmetros
<a name="nova-model-hyperparameter"></a>

Para ajustar um LLM do Nova, é necessário selecionar cuidadosamente os hiperparâmetros. Embora esta seção explique a estrutura e os componentes básicos das fórmulas, a otimização de hiperparâmetros para seu caso de uso específico geralmente requer orientação adicional. Para ver recomendações abrangentes sobre seleção de hiperparâmetros, práticas recomendadas e estratégias de otimização, consulte [Selecionar hiperparâmetros](https://docs.aws.amazon.com//nova/latest/userguide/customize-fine-tune-hyperparameters.html). Esse recurso oferece orientação detalhada sobre como selecionar taxas de aprendizado, tamanhos de lote, épocas de treinamento e outros parâmetros essenciais apropriados com base nas características do conjunto de dados e nos objetivos do treinamento. Recomendamos consultar este guia ao ajustar a configuração da fórmula para obter o desempenho ideal do modelo.

Para obter detalhes sobre valores mínimos, máximos e padrão para épocas, taxa de aprendizado e etapas de aquecimento do aprendizado, consulte [Hiperparâmetros para modelos de compreensão](https://docs.aws.amazon.com//nova/latest/userguide/fine-tune-hyperparameters-understanding-models.html).

**Modificações comuns nas fórmulas**

Veja abaixo alguns ajustes de fórmula comuns com base em casos de uso específicos:
+ **Para conjuntos de dados menores (< 1.000 exemplos)**

  ```
  training_config:
      max_epochs: 2  # More passes through a smaller dataset
  model:
      hidden_dropout: 0.1  # Increase regularization
      weight_decay: 0.01   # Increase regularization
  ```
+ **Para eficiência com computação limitada**

  ```
  peft:
      peft_scheme: "lora"
      lora_tuning:
  ```
+ **Para ajustes complexos de instruções**

  ```
  optim:
      lr: 5e-6  # Lower learning rate for more stable learning
      sched:
          warmup_steps: 100  # Longer warmup for stability
  ```