

# SFT no Nova 2.0
<a name="nova-sft-2-fine-tune"></a>

O Amazon Nova Lite 2.0 traz recursos aprimorados para ajuste fino supervisionado, incluindo modo de raciocínio avançado, melhor compreensão multimodal e tratamento de contexto estendido. O SFT no Nova 2.0 permite que você adapte esses recursos avançados aos seus casos de uso específicos, mantendo o desempenho superior do modelo em tarefas complexas.

Os principais recursos do SFT no Nova 2.0 incluem:
+ **Suporte ao modo de raciocínio**: treine modelos para gerar rastros de raciocínio explícitos antes das respostas finais para aprimorar as capacidades analíticas.
+ **Treinamento multimodal avançado**: ajuste a compreensão de documentos (PDF), a compreensão de vídeos e as tarefas baseadas em imagens com maior precisão.
+ **Recursos de chamada de ferramentas**: treine modelos para usar ferramentas externas e chamadas de funções de forma eficaz em fluxos de trabalho complexos.
+ **Compatibilidade com contexto estendido**: aproveite janelas de contexto mais longas com melhor estabilidade e precisão para aplicações com uso intensivo de documentos.

**nota**  
Para obter mais informações sobre quais imagens de contêineres ou exemplos de fórmulas usar, acesse [Fórmulas do Amazon Nova](nova-model-recipes.md).

**Topics**
+ [Seleção do modo de raciocínio (somente Nova 2.0)](#nova-sft-2-reasoning-mode)
+ [Formato de dados de chamada de ferramentas](#nova-sft-2-tool-calling)
+ [Formato de dados para compreensão de documentos](#nova-sft-2-document-understanding)
+ [Compreensão de vídeos para o SFT](#nova-sft-2-video-understanding)
+ [Instruções de upload de dados](#nova-sft-2-data-upload)
+ [Criação de uma tarefa de ajuste fino](#nova-sft-2-creating-job)
+ [Parâmetros de ajuste do SFT](#nova-sft-2-tuning-parameters)
+ [Orientações de hiperparâmetros](#nova-sft-2-hyperparameters)

## Exemplo de fórmula do SFT
<a name="nova-sft-2-sample-recipe"></a>

Confira abaixo um exemplo de fórmula para o SFT. Você pode encontrar essa fórmula e outras no repositório de [fórmulas](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/fine-tuning/nova).

```
run:
  name: my-full-rank-sft-run
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  data_s3_path: s3://my-bucket-name/train.jsonl  #  only and not compatible with SageMaker Training Jobs
  replicas: 4                                     # Number of compute instances for training, allowed values are 4, 8, 16, 32
  output_s3_path: s3://my-bucket-name/outputs/    # Output artifact path (HyperPod job-specific; not compatible with standard SageMaker Training Jobs)
  mlflow_tracking_uri: ""                         # Required for MLFlow
  mlflow_experiment_name: "my-full-rank-sft-experiment"  # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-full-rank-sft-run"         # Optional for MLFlow. Note: leave this field non-empty

training_config:
  max_steps: 100                    # Maximum training steps. Minimal is 4.
  save_steps: ${oc.select:training_config.max_steps}  # How many training steps the checkpoint will be saved
  save_top_k: 5                     # Keep top K best checkpoints. Note supported only for  jobs. Minimal is 1.
  max_length: 32768                 # Sequence length (options: 8192, 16384, 32768 [default], 65536)
  global_batch_size: 32             # Global batch size (options: 32, 64, 128)
  reasoning_enabled: true           # If data has reasoningContent, set to true; otherwise False

  lr_scheduler:
    warmup_steps: 15                # Learning rate warmup steps. Recommend 15% of max_steps
    min_lr: 1e-6                    # Minimum learning rate, must be between 0.0 and 1.0

  optim_config:                     # Optimizer settings
    lr: 1e-5                        # Learning rate, must be between 0.0 and 1.0
    weight_decay: 0.0               # L2 regularization strength, must be between 0.0 and 1.0
    adam_beta1: 0.9                  # Exponential decay rate for first-moment estimates
    adam_beta2: 0.95                 # Exponential decay rate for second-moment estimates

  peft:                             # Parameter-efficient fine-tuning (LoRA)
    peft_scheme: "null"             # Disable LoRA for PEFT
```

## Seleção do modo de raciocínio (somente Nova 2.0)
<a name="nova-sft-2-reasoning-mode"></a>

O Amazon Nova 2.0 é compatível com o modo de raciocínio para recursos analíticos aprimorados:
+ **Modo de raciocínio (habilitado)**:
  + Definir `reasoning_enabled: true` na configuração de treinamento
  + O modelo treina para gerar rastros de raciocínio antes das respostas finais
  + Melhora o desempenho em tarefas complexas de raciocínio
+ **Modo sem raciocínio (desabilitado)**:
  + Definir `reasoning_enabled: false` ou omitir o parâmetro (padrão)
  + SFT padrão sem raciocínio explícito
  + Adequado para tarefas que não se beneficiam do raciocínio passo a passo

**nota**  
Quando o raciocínio está habilitado, ele opera com alto esforço de raciocínio. Não há uma opção de baixo raciocínio para o SFT.
O conteúdo de raciocínio multimodal não é compatível com o SFT. O modo de raciocínio se aplica a entradas somente de texto.

### Uso do modo de raciocínio com conjuntos de dados sem raciocínio
<a name="nova-sft-2-reasoning-non-reasoning-data"></a>

É permitido treinar o Amazon Nova em um conjunto de dados sem raciocínio com `reasoning_enabled: true`. No entanto, isso pode fazer com que o modelo perca suas capacidades de raciocínio, pois o Amazon Nova aprende primariamente a gerar as respostas apresentadas nos dados sem aplicar o raciocínio.

Se estiver treinando o Amazon Nova em um conjunto de dados sem raciocínio, mas ainda quiser usar o raciocínio durante a inferência:

1. Desabilite o raciocínio durante o treinamento (`reasoning_enabled: false`)

1. Habilite o raciocínio posteriormente durante a inferência

Embora essa abordagem permita o raciocínio no momento da inferência, ela não garante um melhor desempenho em comparação com a inferência sem raciocínio.

**Prática recomendada:** habilite o raciocínio para treinamento e inferência ao usar conjuntos de dados de raciocínio, e desabilite-o para ambos ao usar conjuntos de dados sem raciocínio.

**nota**  
Para obter mais informações sobre quais imagens de contêineres ou exemplos de fórmulas usar, acesse [Fórmulas do Amazon Nova](nova-model-recipes.md).

## Formato de dados de chamada de ferramentas
<a name="nova-sft-2-tool-calling"></a>

O SFT é compatível com modelos de treinamento para usar ferramentas (chamada de função). Confira abaixo um exemplo de formato de entrada para chamada de ferramentas:

**Exemplo de entrada:**

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are an expert in composing function calls."
    }
  ],
  "toolConfig": {
    "tools": [
      {
        "toolSpec": {
          "name": "getItemCost",
          "description": "Retrieve the cost of an item from the catalog",
          "inputSchema": {
            "json": {
              "type": "object",
              "properties": {
                "item_name": {
                  "type": "string",
                  "description": "The name of the item to retrieve cost for"
                },
                "item_id": {
                  "type": "string",
                  "description": "The ASIN of item to retrieve cost for"
                }
              },
              "required": [
                "item_id"
              ]
            }
          }
        }
      },
      {
        "toolSpec": {
          "name": "getItemAvailability",
          "description": "Retrieve whether an item is available in a given location",
          "inputSchema": {
            "json": {
              "type": "object",
              "properties": {
                "zipcode": {
                  "type": "string",
                  "description": "The zipcode of the location to check in"
                },
                "quantity": {
                  "type": "integer",
                  "description": "The number of items to check availability for"
                },
                "item_id": {
                  "type": "string",
                  "description": "The ASIN of item to check availability for"
                }
              },
              "required": [
                "item_id", "zipcode"
              ]
            }
          }
        }
      }
    ]
  },
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "I need to check whether there are twenty pieces of the following item available. Here is the item ASIN on Amazon: id-123. Please check for the zipcode 94086"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "reasoningContent": {
            "reasoningText": {
              "text": "The user wants to check how many pieces of the item with ASIN id-123 are available in the zipcode 94086"
            }
          }
        },
        {
          "toolUse": {
            "toolUseId": "getItemAvailability_0",
            "name": "getItemAvailability",
            "input": {
              "zipcode": "94086",
              "quantity": 20,
              "item_id": "id-123"
            }
          }
        }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "toolResult": {
            "toolUseId": "getItemAvailability_0",
            "content": [
              {
                "text": "[{\"name\": \"getItemAvailability\", \"results\": {\"availability\": true}}]"
              }
            ]
          }
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Yes, there are twenty pieces of item id-123 available at 94086. Would you like to place an order or know the total cost?"
        }
      ]
    }
  ]
}
```

Considerações importantes sobre dados de chamada de ferramentas:
+ O ToolUse deve aparecer somente nos turnos do assistente
+ O ToolResult deve aparecer somente nos turnos do usuário
+ O ToolResult deve ser somente texto ou JSON; atualmente, outras modalidades não são compatíveis com os modelos do Amazon Nova
+ O inputSchema dentro no toolSpec deve ser um objeto de esquema JSON válido
+ Cada ToolResult deve fazer referência a um toolUseId válido de um assistente ToolUse anterior, com cada toolUseId usado exatamente uma vez por conversa

**nota**  
Para obter mais informações sobre quais imagens de contêineres ou exemplos de fórmulas usar, acesse [Fórmulas do Amazon Nova](nova-model-recipes.md).

## Formato de dados para compreensão de documentos
<a name="nova-sft-2-document-understanding"></a>

O SFT é compatível com modelos de treinamento em tarefas de compreensão de documentos. Confira abaixo um exemplo de formato de entrada:

**Exemplo de entrada**

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What are the ways in which a customer can experience issues during checkout on Amazon?"
        },
        {
          "document": {
            "format": "pdf",
            "source": {
              "s3Location": {
                "uri": "s3://my-bucket-name/path/to/documents/customer_service_debugging.pdf",
                "bucketOwner": "123456789012"
              }
            }
          }
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?"
        }
      ],
      "reasoning_content": [
        {
          "text": "I need to find the relevant section in the document to answer the question.",
          "type": "text"
        }
      ]
    }
  ]
}
```

Considerações importantes sobre a compreensão de documentos:
+ Somente arquivos PDF são compatíveis
+ O tamanho máximo do documento é de 10 MB
+ Um exemplo pode conter documentos e texto, mas não pode misturar documentos com outras modalidades (como imagens ou vídeo)

**nota**  
Para obter mais informações sobre quais imagens de contêineres ou exemplos de fórmulas usar, acesse [Fórmulas do Amazon Nova](nova-model-recipes.md).

## Compreensão de vídeos para o SFT
<a name="nova-sft-2-video-understanding"></a>

O SFT é compatível com modelos de ajuste fino para tarefas de compreensão de vídeo. Confira abaixo um exemplo de formato de entrada:

**Exemplo de entrada**

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What are the ways in which a customer can experience issues during checkout on Amazon?"
        },
        {
          "video": {
            "format": "mp4",
            "source": {
              "s3Location": {
                "uri": "s3://my-bucket-name/path/to/videos/customer_service_debugging.mp4",
                "bucketOwner": "123456789012"
              }
            }
          }
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?"
        }
      ],
      "reasoning_content": [
        {
          "text": "I need to find the relevant section in the video to answer the question.",
          "type": "text"
        }
      ]
    }
  ]
}
```

Considerações importantes sobre compreensão de vídeos:
+ Os vídeos podem ter um máximo de 50 MB
+ Os vídeos podem ter até 15 minutos de duração
+ Somente um vídeo é permitido por exemplo; não há compatibilidade com vários vídeos no mesmo exemplo
+ Um exemplo pode conter vídeo e texto, mas não pode misturar vídeo com outras modalidades (como imagens ou documentos)

**nota**  
Para obter mais informações sobre quais imagens de contêineres ou exemplos de fórmulas usar, acesse [Fórmulas do Amazon Nova](nova-model-recipes.md).

## Instruções de upload de dados
<a name="nova-sft-2-data-upload"></a>

Faça upload de conjuntos de dados de treinamento e validação para um bucket do S3. Especifique esses locais no bloco `run` da fórmula:

```
## Run config
run:
  ...
  data_s3_path: "s3://<bucket-name>/<training-directory>/<training-file>.jsonl"
```

**Observação**: substitua `<bucket-name>`, `<training-directory>`, `<validation-directory>`, `<training-file>` e `<validation-file>` por caminhos reais do S3.

**Observação**: no momento, os conjuntos de dados de validação não são compatíveis com o SFT com o Amazon Nova 2.0. Se um conjunto de dados de validação for fornecido, ele será ignorado.

## Criação de uma tarefa de ajuste fino
<a name="nova-sft-2-creating-job"></a>

Defina o modelo base usando os campos `model_type` e `model_name_or_path` no bloco `run`:

```
## Run config
run:
  ...
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  ...
```

## Parâmetros de ajuste do SFT
<a name="nova-sft-2-tuning-parameters"></a>

Os parâmetros que estão disponíveis para ajuste com o SFT incluem:

**Configuração da execução**  

+ **name**: um nome descritivo para a tarefa de treinamento. Isso ajuda a identificar sua tarefa no Console de Gerenciamento da AWS.
+ **model\_type**: a variante do modelo do Amazon Nova a ser usada. As opções disponíveis são `amazon.nova-2-lite-v1:0:256k`.
+ **model\_name\_or\_path**: o caminho para o modelo de base a ser usado em seu treinamento. As opções disponíveis são `nova-lite-2/prod` ou o caminho do S3 para o ponto de verificação pós-treinamento (`s3://customer-escrow-bucket-unique_id/training_run_name`).
+ **replicas**: o número de instâncias de computação a serem usadas no treinamento distribuído. Os valores disponíveis variam de acordo com o modelo escolhido. O Amazon Nova Lite 2.0 é compatível com 4, 8, 16 ou 32 réplicas.
+ **data\_s3\_path**: o local no S3 do conjunto de dados de treinamento, que é um arquivo JSONL. Esse arquivo deve residir na mesma conta e região da AWS que o cluster. Todos os locais do S3 fornecidos devem estar na mesma conta e região.
+ **validation\_data\_s3\_path**: (opcional) o local no S3 do conjunto de dados de validação, que é um arquivo JSONL. Esse arquivo deve estar na mesma conta e região que o cluster. Todos os locais do S3 fornecidos devem estar na mesma conta e região.
+ **output\_s3\_path**: o local do S3 onde o manifesto e os logs do TensorBoard são armazenados. Todos os locais do S3 fornecidos devem estar na mesma conta da AWS e região da AWS.
+ **mlflow\_tracking\_uri**: o ARN da aplicação MLFlow a ser usada para o registro em log do MLFlow.
+ **mlflow\_experiment\_name**: nome do experimento do MLFlow.
+ **mlflow\_run\_name**: nome de execução do MLFlow.

**Configuração do treinamento**  

+ **max\_steps**: o número de etapas de treinamento a serem executadas. Cada etapa treinará o modelo com a quantidade de elementos definida no `global_batch_size`.
+ **save\_steps**: a frequência (em etapas) na qual os pontos de verificação do modelo são salvos durante o treinamento.
+ **save\_top\_k**: o número máximo dos melhores pontos de verificação a serem retidos com base nas métricas de validação.
+ **max\_length**: o tamanho máximo da sequência em tokens. Isso determina o tamanho da janela de contexto para treinamento. O valor máximo permitido é 32.768 tokens para o SFT.

  Sequências mais longas melhorarão a eficiência do treinamento à custa de maiores requisitos de memória. Recomendamos que você faça a correspondência do parâmetro max\_length com sua distribuição de dados.
+ **global\_batch\_size**: o número total de exemplos de treinamento processados juntos em uma única etapa de propagação (forward ou backward) em todos os dispositivos e operadores.

  Esse valor multiplica o tamanho do lote por dispositivo e o número de dispositivos. Isso afeta a estabilidade do treinamento e o throughput. Recomendamos que você comece com um tamanho de lote que caiba confortavelmente na memória e possa ter a escala aumentada verticalmente a partir daí. Para dados específicos do domínio, lotes maiores podem suavizar demais os gradientes.
+ **reasoning\_enabled**: sinalizador booleano para habilitar recursos de raciocínio durante o treinamento.

**Programador da taxa de aprendizado**  

+ **warmup\_steps**: o número de etapas para aumentar gradualmente a taxa de aprendizado. Isso melhora a estabilidade do treinamento.
+ **min\_lr**: a taxa mínima de aprendizado ao término do decaimento. Os valores válidos estão entre 0-1, inclusive, mas devem ser menores que a taxa de aprendizado.

**Configuração do otimizador**  

+ **lr**: a taxa de aprendizado, que controla o tamanho da etapa durante a otimização. Recomendamos valores entre 1e-6 e 1e-4 para um obter bom desempenho. Os valores válidos estão entre 0 e 1, inclusive.
+ **weight\_decay**: a força de regularização de L2. Valores mais altos (entre 0,01 e 0,1) aumentam a regularização.
+ **adam\_beta1**: a taxa de decaimento exponencial para as estimativas do primeiro momento no otimizador Adam. O padrão é de 0.9.
+ **adam\_beta2**: a taxa de decaimento exponencial para as estimativas do segundo momento no otimizador Adam. A padrão é 0.95.

**Configuração do PEFT**  

+ **peft\_scheme**: o esquema de ajuste fino com eficiência de parâmetros a ser usado. As opções são `'null'` para ajuste fino de full-rank ou `lora` para ajuste fino baseado em LoRA.

**Ajuste LoRA (quando peft\_scheme é 'lora')**  

+ **alpha**: o parâmetro de escala LoRA. Controla a magnitude da adaptação de low-rank. Os valores típicos variam de 8 a 128.
+ **lora\_plus\_lr\_ratio**: a taxa de aprendizado para a otimização via LoRA\+. Esse multiplicador ajusta a taxa de aprendizado especificamente para os parâmetros LoRA.

## Orientações de hiperparâmetros
<a name="nova-sft-2-hyperparameters"></a>

Use os seguintes hiperparâmetros recomendados com base na abordagem de treinamento:

**Treinamento de full-rank**
+ **Épocas**: 1
+ **Taxa de aprendizado (lr)**: 1e-5
+ **Taxa mínima de aprendizado (min\_lr)**: 1e-6

**LoRA (Low-Rank Adaptation)**
+ **Épocas**: 2
+ **Taxa de aprendizado (lr)**: 5e-5
+ **Taxa mínima de aprendizado (min\_lr)**: 1e-6

**Observação**: ajuste esses valores com base no tamanho do conjunto de dados e no desempenho da validação. Monitore as métricas de treinamento para evitar sobreajuste.