

# Ajuste fino por reforço (RFT) com modelos do Amazon Nova
<a name="nova-reinforcement-fine-tuning"></a>

## Visão geral
<a name="nova-rft-overview"></a>

**O que é o RFT?**

O ajuste fino por reforço (RFT) melhora o desempenho do modelo treinando com sinais de feedback (pontuações mensuráveis ou recompensas que indicam o desempenho do modelo) em vez de com respostas corretas exatas. Ao contrário do ajuste fino supervisionado que aprende com pares de entrada e saída, o RFT usa funções de recompensa para avaliar as respostas do modelo e otimiza de forma iterativa o modelo para maximizar essas recompensas. Essa abordagem se destaca quando a definição exata da saída correta é difícil, mas a avaliação da qualidade da resposta é confiável.

**Quando usar o RFT**

Use o RFT quando você puder definir critérios de sucesso claros e mensuráveis, mas tiver dificuldade em fornecer resultados exatos e corretos para o treinamento. É ideal para:
+ Tarefas em que a qualidade é subjetiva ou multifacetada (escrita criativa, otimização de código, raciocínio complexo)
+ Cenários com várias soluções válidas em que algumas são claramente melhores do que outras
+ Aplicações que exigem aprimoramento iterativo, personalização ou adesão a regras de negócios complexas
+ Casos em que coletar exemplos rotulados de alta qualidade é caro ou impraticável

**Melhores casos de uso**

O RFT se destaca em domínios em que a qualidade da saída pode ser avaliada objetivamente, mas as respostas ideais são difíceis de definir de antemão:
+ Resolução de problemas matemáticos e geração de código
+ Raciocínio científico e análise de dados estruturados
+ Tarefas que exigem raciocínio passo a passo ou solução de problemas em vários turnos
+ Aplicações que equilibram vários objetivos (precisão, eficiência, estilo)
+ Cenários em que o sucesso pode ser verificado de forma programática por meio de resultados de execução ou métricas de desempenho

**Modelos compatíveis**

Nova Lite 2.0

## Visão geral do formato de dados
<a name="nova-rft-data-format"></a>

Os dados de treinamento do RFT devem seguir o [formato](https://platform.openai.com/docs/api-reference/fine-tuning/reinforcement-input) de ajuste fino por reforço da OpenAI. Cada exemplo de treinamento é um objeto JSON que contém:
+ Uma matriz de `messages` com turnos de conversação usando os perfis `system` e `user`
+ Um campo `reference_answer` contendo o resultado esperado ou os critérios de avaliação para o cálculo da recompensa

**Limitações atuais**
+ Somente texto

### Exemplos de formato de dados
<a name="nova-rft-data-examples"></a>

Cada exemplo deve estar em uma única linha no arquivo JSONL, com um objeto JSON por linha.

------
#### [ Chemistry problem ]

```
{
  "id": "chem-01",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful chemistry assistant"
    },
    {
      "role": "user",
      "content": "Calculate the molecular weight of caffeine (C8H10N4O2)"
    }
  ],
  "reference_answer": {
    "molecular_weight": 194.19,
    "unit": "g/mol",
    "calculation": "8(12.01) + 10(1.008) + 4(14.01) + 2(16.00) = 194.19"
  }
}
```

------
#### [ Math problem ]

```
{
  "id": "sample-001",  // Optional
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  }
}
```

------
#### [ Code problem ]

```
{
  "id": "code-002",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful programming assistant"
    },
    {
      "role": "user",
      "content": "Write a Python function that reverses a string without using built-in reverse methods"
    }
  ],
  "reference_answer": {
    "code": "def reverse_string(s):  \n    result = ''  \n    for i in range(len(s) - 1, -1, -1):  \n        result += s[i]  \n    return result",
    "test_cases": [
      {
        "input": "hello",
        "expected_output": "olleh"
      },
      {
        "input": "",
        "expected_output": ""
      },
      {
        "input": "a",
        "expected_output": "a"
      },
      {
        "input": "Python123",
        "expected_output": "321nohtyP"
      }
    ],
    "all_tests_pass": true
  }
}
```

------

O campo `reference_answer` contém o resultado esperado ou os critérios de avaliação que sua função de recompensa usa para pontuar a resposta do modelo. Ele não se limita a resultados estruturados. Ele pode conter qualquer formato que ajude sua função de recompensa a avaliar a qualidade.

## Recomendações de tamanho do conjunto de dados
<a name="nova-rft-dataset-size"></a>

**Ponto de partida**
+ Mínimo de 100 exemplos de treinamento
+ Mínimo de 100 exemplos de avaliação

**Abordagem que prioriza a avaliação**

Antes de investir em treinamento de RFT em grande escala, avalie o desempenho básico do seu modelo:
+ **Alto desempenho (>95% de recompensa)**: o RFT pode ser desnecessário, pois seu modelo já tem um bom desempenho
+ **Desempenho muito baixo (0% de recompensa)**: mude primeiro para o SFT para estabelecer os recursos básicos
+ **Desempenho moderado**: o RFT provavelmente é apropriado

Começar com um pequeno conjunto de dados permite que você:
+ Valide que sua função de recompensa está livre de bugs
+ Confirme que o RFT é a abordagem certa para o seu caso de uso
+ Identifique e corrija problemas com antecedência
+ Teste o fluxo de trabalho antes de aumentar a escala verticalmente

Depois de validado, você pode expandir para conjuntos de dados maiores para melhorar ainda mais o desempenho.

## Características dos dados de treinamento efetivos
<a name="nova-rft-effective-data"></a>

**Clareza e consistência**

Bons exemplos de RFT exigem dados de entrada claros e inequívocos que permitam o cálculo preciso da recompensa em diferentes saídas do modelo. Evite ruídos em seus dados, incluindo:
+ Formatação inconsistente
+ Rótulos ou instruções contraditórios
+ Prompts ambíguos
+ Respostas de referência conflitantes

Qualquer ambiguidade induzirá o processo de treinamento ao erro, fazendo com que o modelo aprenda comportamentos indesejados.

**Diversidade**

Seu conjunto de dados deve capturar toda a diversidade de casos de uso de produção para garantir um desempenho robusto no mundo real. Inclusão:
+ Diferentes formatos de entrada e casos de borda
+ Mapear padrões reais de uso em produção de logs e analytics de usuários
+ Amostra de todos os tipos de usuários, regiões geográficas e variações sazonais
+ Incluir níveis de dificuldade de problemas simples a complexos

**Considerações sobre a função de recompensa**

Projete sua função de recompensa para um treinamento eficiente:
+ Execute em segundos (não em minutos)
+ Paralelize de forma eficaz com o Lambda
+ Retorne pontuações consistentes e confiáveis
+ Lide com diferentes tipos de saídas de modelo de forma resiliente

As funções de recompensa rápidas e escaláveis permitem uma iteração rápida e uma experimentação econômica.

## Propriedades adicionais
<a name="nova-rft-additional-properties"></a>

O formato de dados de RFT é compatível com campos personalizados além dos requisitos principais do esquema (`messages` e `reference_answer`). Essa flexibilidade permite que você adicione quaisquer dados adicionais de que sua função de recompensa precise para uma avaliação adequada.

**nota**  
Você não precisa configurar isso em sua fórmula. O formato de dados é inerentemente compatível com campos adicionais. Basta incluí-los em seus dados de treinamento JSON e eles serão passados para sua função de recompensa no campo `metadata`.

**Propriedades comuns adicionais**

Campos de metadados de exemplo:
+ `task_id`: identificador único de rastreamento
+ `difficulty_level`: indicador de complexidade do problema
+ `domain`: área ou categoria do assunto
+ `expected_reasoning_steps`: número de etapas na solução

**Exemplo com propriedades adicionais**

```
{
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  },
  "task_id": "algebra_001",
  "difficulty_level": "easy",
  "domain": "algebra",
  "expected_reasoning_steps": 3
}
```

Esses campos adicionais são passados para sua função de recompensa durante a avaliação, permitindo uma lógica de pontuação sofisticada adaptada ao seu caso de uso específico.

## Configuração do treinamento
<a name="nova-rft-training-config"></a>

**Exemplo de fórmula**

```
# Note:
# This recipe can run on p5.48xlarge and p5en.48xlarge instance types.
run:
  name: "my-rft-run"                           # Unique run name (appears in logs/artifacts).
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  data_s3_path: s3://<bucket>/<data file>      # Training dataset in JSONL;
  replicas: 4
  reward_lambda_arn: arn:aws:lambda:<region>:<account-id>:function:<function-name>

  ## MLFlow configs
  mlflow_tracking_uri: "" # Required for MLFlow
  mlflow_experiment_name: "my-rft-experiment" # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-rft-run" # Optional for MLFlow. Note: leave this field non-empty

## SMTJ GRPO Training specific configs
training_config:
  max_length: 8192                              # Context window (tokens) for inputs+prompt;
  global_batch_size: 16                         # Total samples per optimizer step across all replicas (16/32/64/128/256).
  reasoning_effort: high                        # Enables reasoning mode high / low / or null for non-reasoning

  rollout:                                      # How responses are generated for GRPO/advantage calc.
    advantage_strategy:
      number_generation: 2                      # N samples per prompt to estimate advantages (variance vs cost).
    generator:
      max_new_tokens: 6000                      # Cap on tokens generated per sample
      set_random_seed: true                     # Seed generation for reproducibility across runs.
      temperature: 1                            # Softmax temperature;
      top_k: 1                                  # Sample only from top-K logits
    rewards:
      preset_reward_function: null              # Usage of preset reward functions [exact_match]
      api_endpoint:
        lambda_arn: arn:aws:lambda:<region>:<account-id>:function:<function-name>
        lambda_concurrency_limit: 12             # Max concurrent Lambda invocations (throughput vs. throttling).

  trainer:
    max_steps: 2                                 # Steps to train for. One Step = global_batch_size
    save_steps: 5
    test_steps: 1

    # RL parameters
    ent_coeff: 0.0                              # A bonus added to the policy loss that rewards higher-output entropy.
    kl_loss_coef: 0.001                         # Weight on the KL penalty between the actor (trainable policy) and a frozen reference model

    optim_config:                    # Optimizer settings
        lr: 5e-5                       # Learning rate
        weight_decay: 0.0              # L2 regularization strength (0.0–1.0)
        adam_beta1: 0.9
        adam_beta2: 0.95

    peft:                            # Parameter-efficient fine-tuning (LoRA)
        peft_scheme: "lora"            # Enable LoRA for PEFT
        lora_tuning:
            alpha: 32
            lora_plus_lr_ratio: 64.0     # LoRA+ learning rate scaling factor (0.0–100.0)
```

## Treinamento de RFT usando o LLM como avaliador
<a name="nova-rft-llm-judge"></a>

### Visão geral
<a name="nova-rft-llm-judge-overview"></a>

Os grandes modelos de linguagem (LLMs) estão sendo cada vez mais usados como avaliadores em fluxos de trabalho de ajuste fino por reforço (RFT), fornecendo sinais de recompensa automatizados que orientam a otimização do modelo. Nessa abordagem, um LLM avalia os resultados do modelo em relação a critérios específicos, seja avaliando a exatidão, a qualidade, a aderência ao estilo ou a equivalência semântica, e atribui recompensas que impulsionam o processo de aprendizado por reforço.

Isso é particularmente valioso para tarefas em que as funções de recompensa tradicionais são difíceis de definir de forma programática, como determinar se representações diferentes (como “1/3”, “0,333” e “um terço”) são semanticamente equivalentes, ou avaliar qualidades subjetivas, como coerência e relevância. Ao usar avaliadores baseados em LLM como funções de recompensa, você pode escalar o RFT para domínios complexos sem exigir anotações humanas extensivas, permitindo uma iteração rápida e a melhoria contínua de seus modelos em diversos casos de uso, além dos problemas tradicionais de alinhamento.

### Seleção do modo de raciocínio
<a name="nova-rft-reasoning-mode"></a>

**Modos disponíveis**
+ none: sem raciocínio (omita o campo reasoning\_effort)
+ low: sobrecarga mínima de raciocínio
+ high: capacidade máxima de raciocínio (padrão quando reasoning\_effort é especificado)

**nota**  
Não há a opção medium para o RFT. Se o campo reasoning\_effort estiver ausente da sua configuração, o raciocínio será desabilitado. Quando o raciocínio está habilitado, você deve definir `max_new_tokens` como 32.768 para acomodar saídas de raciocínio estendidas.

**Quando usar cada modo**

Use o raciocínio high para:
+ Tarefas analíticas complexas
+ Resolução de problemas matemáticos
+ Dedução lógica de várias etapas
+ Tarefas em que o pensamento passo a passo agrega valor

Use raciocínio none (omita reasoning\_effort) ou low para:
+ Consultas factuais simples
+ Classificações diretas
+ Velocidade e otimização de custos
+ Respostas diretas a perguntas

**Compensações de custo e desempenho**

Os modos de raciocínio mais altos aumentam:
+ O tempo e o custo do treinamento
+ A latência e o custo da inferência
+ A capacidade de modelar para tarefas complexas de raciocínio

### Validação do seu LLM como avaliador
<a name="nova-rft-validating-judge"></a>

Antes de implantar um LLM como avaliador na produção, valide se as avaliações do modelo do avaliador estão alinhadas com a avaliação humana. Isso envolve:
+ Avaliar as taxas de concordância entre o LLM como avaliador e os avaliadores humanos em amostras representativas de sua tarefa
+ Garantir que a concordância do LLM com humanos atinja ou supere as taxas de concordância entre humanos
+ Identificar possíveis vieses no modelo do avaliador
+ Criar confiança de que o sinal de recompensa guia seu modelo na direção pretendida

Essa etapa de validação ajuda a garantir que o processo de avaliação automatizado produza modelos que atendam aos seus critérios de qualidade de produção.

### Configuração do Lambda para o LLM como avaliador
<a name="nova-rft-lambda-config"></a>

Usar um LLM como avaliador é uma extensão do uso das funções do Lambda para aprendizado por reforço com recompensas verificáveis (RLVR). Dentro da função do Lambda, você faz uma chamada para um dos modelos hospedados no Amazon Bedrock.

**Requisitos de configuração importantes:**


| Configuração | Requisito | Detalhes | 
| --- | --- | --- | 
| Throughput do Amazon Bedrock | Cota suficiente | Certifique-se de que sua cota de throughput para o modelo do Amazon Bedrock usado seja suficiente para sua workload de treinamento | 
| tempo limite do Lambda | Tempo limite estendido | Configure o tempo limite da função do Lambda em até o máximo de 15 minutos. A configuração padrão é de 3 segundos, o que é insuficiente para as respostas dos modelos do Amazon Bedrock | 
| Simultaneidade do Lambda | Aumento da simultaneidade | O Lambda é invocado paralelamente durante o treinamento. Aumente a simultaneidade para maximizar o throughput disponível | 
| Configuração de fórmula | Correspondência das configurações do Lambda | O limite de simultaneidade deve ser configurado em sua fórmula | 

## Criação e execução de tarefas
<a name="nova-rft-creating-jobs"></a>

**Início de uma tarefa de treinamento**

Use o modelo do caderno de tarefas de treinamento do SageMaker: [https://docs.aws.amazon.com/sagemaker/latest/dg/nova-fine-tuning-training-job.html#nova-model-training-jobs-notebook](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-fine-tuning-training-job.html#nova-model-training-jobs-notebook)

**Requisitos de instância**

O contêiner é compatível com o treinamento de full-rank e LoRA:
+ **Treinamento LoRA**: 2/4/6/8 × instâncias p5.48xlarge ou p5en.48xlarge
+ **Treinamento de full-rank**: 2/4/6/8 × instâncias p5.48xlarge (obrigatório)

## Monitoramento do treinamento
<a name="nova-rft-monitoring"></a>

Os logs de treinamento incluem métricas abrangentes em cada etapa. Principais categorias métricas:

**Métricas de recompensa**
+ `critic/rewards/mean`, `critic/rewards/max`, `critic/rewards/min`: distribuição de recompensas
+ `val-score/rewards/mean@1`: recompensas de validação

**Comportamento do modelo**
+ `actor/entropy`: variação da política (maior = mais exploratória)

**Integridade do treinamento**
+ `actor/pg_loss`: perda de gradiente de política
+ `actor/pg_clipfrac`: frequência de atualizações cortadas
+ `actor/grad_norm`: magnitude do gradiente

**Características das respostas**
+ `prompt_length/mean`, `prompt_length/max`, `prompt_length/min`: estatísticas dos tokens de entrada
+ `response_length/mean`, `response_length/max`, `response_length/min`: estatísticas dos tokens de saída
+ `response/aborted_ratio`: taxa de geração incompleta (0 = tudo concluído)

**desempenho**
+ `perf/throughput`: throughput do treinamento
+ `perf/time_per_step`: tempo por etapa de treinamento
+ `timing_per_token_ms/*`: tempos de processamento por token

**Uso de recursos**
+ `perf/max_memory_allocated_gb`, `perf/max_memory_reserved_gb`: memória da GPU
+ `perf/cpu_memory_used_gb`: memória da CPU

## Uso de modelos ajustados
<a name="nova-rft-using-models"></a>

Após a conclusão do treinamento, o ponto de verificação final do modelo é salvo no local de saída especificado. O caminho do ponto de verificação está disponível em:
+ Logs de treinamento
+ Arquivo `manifest.json` no local de saída do Amazon S3 (definido por `output_s3_uri` em seu caderno)

## Limitações e práticas recomendadas
<a name="nova-rft-limitations"></a>

**Limitações**
+ **Tempo limite do Lambda**: as funções de recompensa devem ser concluídas em até 15 minutos (evita processos descontrolados e gerencia custos)
+ **Somente um único turno**: conversas em vários turnos não são compatíveis
+ **Requisitos de dados**: precisa de diversidade suficiente; tem dificuldades com recompensas esparsas (<5% de exemplos positivos)
+ **Custo computacional**: mais caro do que o ajuste fino supervisionado
+ **Nenhum dado multimodal**: somente o tipo de dados de texto é compatível

**Práticas recomendadas**

**Comece devagar**
+ Comece com 100 a 200 exemplos
+ Valide a exatidão da função de recompensa
+ Escale gradualmente com base nos resultados

**Avaliação pré-treinamento**
+ Teste o desempenho do modelo de linha de base antes do RFT
+ Se as recompensas forem consistentemente de 0%, use o SFT primeiro para estabelecer as capacidades básicas
+ Se as recompensas forem >95%, o RFT poderá ser desnecessário

**Monitorar o treinamento**
+ Acompanhe as pontuações médias e a distribuição das recompensas
+ Observe o sobreajuste (as recompensas de treinamento aumentam enquanto as recompensas de validação diminuem)
+ Procure padrões de atenção:
  + Recompensas se estabilizando abaixo de 0,15
  + Aumento da variação da recompensa ao longo do tempo
  + Queda no desempenho de validação

**Otimizar as funções de recompensa**
+ Execute em segundos (não em minutos)
+ Minimize as chamadas de API externas
+ Use algoritmos eficientes
+ Implemente o tratamento adequado de erros
+ Aproveite as vantagens da escalabilidade paralela do Lambda

**Estratégia de iteração**

Se as recompensas não estiverem melhorando:
+ Ajuste o design da função de recompensa
+ Aprimore a diversidade do conjunto de dados
+ Adicione mais exemplos representativos
+ Verifique se os sinais de recompensa são claros e consistentes

## Recursos avançados: Nova Forge
<a name="nova-rft-advanced"></a>

Para usuários que precisam de recursos avançados além das limitações padrão do RFT, o Nova Forge está disponível como uma oferta de serviço de assinatura paga:
+ Compatível com conversa de vários turnos
+ Funções de recompensa com mais de 15 minutos de tempo de execução
+ Algoritmos adicionais e opções de ajuste
+ Modificações personalizadas das fórmulas de treinamento
+ Técnicas de IA de última geração

O Nova Forge é executado no SageMaker HyperPod e foi projetado para ajudar clientes empresariais a criar seus próprios modelos de fronteira.

## Comandos e dicas úteis
<a name="nova-rft-useful-commands"></a>

Uma coleção de [scripts de observabilidade](https://github.com/aws-samples/amazon-nova-samples/tree/main/customization/SageMakerUilts/SageMakerJobsMonitoring) está disponível para ajudar a monitorar o status e o progresso das tarefas de treinamento.

Os scripts disponíveis são:
+ Habilitar notificações por e-mail para atualizações do status da tarefa de treinamento
+ Obter estimativas de tempo de treinamento com base nas configurações da tarefa
+ Obter estimativas da duração do treinamento para tarefas em andamento

**Instalação**

**nota**  
Certifique-se de atualizar suas credenciais da AWS antes de usar qualquer um dos scripts a seguir.

```
pip install boto3
git clone https://github.com/aws-samples/amazon-nova-samples.git
cd amazon-nova-samples/customization/SageMakerUilts/SageMakerJobsMonitoring/
```

**Uso básico**

```
# Enabling email notifications for training job status updates
python enable_sagemaker_job_notifs.py --email test@amazon.com test2@gmail.com --region us-east-1 --platform SMTJ

Creating resources........
Please check your email for a subscription confirmation email, and click 'Confirm subscription' to start receiving job status email notifications!
You'll receive the confirmation email within a few minutes.
```

```
# Obtaining training time estimates based on job configurations
python get_training_time_estimate.py
```

```
# Obtaining approximations for how long training is expected to take for in-progress jobs
python get-training-job-progress.py --region us-east-1 --job-name my-training-job --num-dataset-samples 1000
```

Consulte [aqui](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/SageMakerUilts/SageMakerJobsMonitoring/README.md) para obter mais detalhes e exemplos.