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á.
Ajuste fino de reforço (RFT) para modelos Amazon Nova
Visão geral do
O que é RFT?
O ajuste fino de reforço (RFT) melhora o desempenho do modelo treinando em sinais de feedback — pontuações mensuráveis ou recompensas que indicam o desempenho do modelo — em vez de 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 iterativamente o modelo para maximizar essas recompensas. Essa abordagem é excelente quando definir a saída exata correta é um desafio, mas você pode medir com segurança a qualidade da resposta.
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
Aplicativos 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 medida 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 estruturada de dados
Tarefas que exigem step-by-step raciocínio 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 programaticamente por meio de resultados de execução ou métricas de desempenho
Modelos compatíveis
Amazon NovaLite 2.0
Formato de dados
Os dados de treinamento do RFT devem seguir o formato OpenAI Reinforcement Fine-Tuning. Cada exemplo de treinamento é um objeto JSON contendo:
Uma
messagesmatriz com turnos de conversação, usosysteme funçõesuserUm
reference_answercampo contendo o resultado esperado ou os critérios de avaliação para o cálculo da recompensa
nota
Limitação atual: somente texto. Entradas multimodais não são suportadas para RFT.
Exemplo: problema matemático
{ "id": "sample-001", "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"] } }
O reference_answer campo 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. Ela não se limita a resultados estruturados — ela pode conter qualquer formato que ajude sua função de recompensa a avaliar a qualidade.
Recomendações de tamanho do conjunto de dados
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 (recompensa superior a 95 por cento) — o RFT pode ser desnecessário porque seu modelo já tem um bom desempenho
Desempenho muito baixo (recompensa de 0%) — Mude primeiro para o SFT para estabelecer as capacidades básicas
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 a RFT é a abordagem certa para seu caso de uso, identifique e corrija problemas com antecedência e teste o fluxo de trabalho antes de aumentar a escala.
Características dos dados de treinamento efetivos
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, solicitações ambíguas e respostas de referência conflitantes. Qualquer ambigüidade enganará o processo de treinamento e fará com que o modelo aprenda comportamentos não intencionais.
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. Inclua diferentes formatos de entrada e casos extremos, mapeie os padrões reais de uso da produção a partir de registros e análises de usuários, faça amostras de todos os tipos de usuários, regiões geográficas e variações sazonais e inclua níveis de dificuldade de problemas simples a complexos.
Considerações sobre a função de recompensa
Crie sua função de recompensa para um treinamento eficiente. Ele deve ser executado em segundos (não minutos), paralelizar de forma eficazAWS Lambda, retornar pontuações consistentes e confiáveis e lidar com diferentes tipos de saídas do modelo com elegância. As funções de recompensa rápidas e escaláveis permitem uma iteração rápida e uma experimentação econômica.
Propriedades adicionais
O formato de dados RFT oferece suporte a campos personalizados além dos requisitos principais do esquema (messagesereference_answer). Essa flexibilidade permite que você adicione quaisquer dados adicionais que sua função de recompensa precise para uma avaliação adequada.
nota
Você não precisa configurar isso em sua receita. O formato de dados suporta inerentemente campos adicionais. Basta incluí-los em seus dados de treinamento JSON e eles serão passados para sua função de recompensa em metadata campo.
Propriedades adicionais comuns
task_id— Identificador exclusivo para rastreamentodifficulty_level— Indicador de complexidade do problemadomain— Área temática ou categoriaexpected_reasoning_steps— Número de etapas na solução
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.
Exemplos com propriedades adicionais
Implementando funções de recompensa
As funções de recompensa são implementadas como funções Lambda que avaliam as respostas do modelo e retornam pontuações numéricas. A função Lambda recebe mensagens e verdades fundamentais no formato OpenAI e deve retornar pontuações como um dicionário.
permissões do IAM
Certifique-se de que sua função de execução de SageMaker IA tenha InvokeFunction permissões para a função Lambda.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-reward-function-lambda" } ] }
Diretrizes para projeto
Ao escrever funções de recompensa, faça o seguinte:
Classifique as respostas — Dê à melhor resposta uma pontuação claramente mais alta
Use verificações consistentes — Avalie a conclusão da tarefa, a aderência ao formato, a segurança e a duração razoável
Mantenha o escalonamento estável — mantenha as pontuações normalizadas e não exploráveis
Formato da interface
Sua função de recompensa deve aceitar e devolver dados no formato a seguir.
Estrutura de entrada
[{ "id": "123", "messages": [ { "role": "user", "content": "Do you have a dedicated security team?" }, { "role": "assistant", "content": "As an AI developed by Amazon, I don not have a dedicated security team..." } ], "metadata": { "reference_answer": { "compliant": "No", "explanation": "As an AI developed by Company, I do not have a traditional security team..." }, "my_key": "sample-001" } }]
Estrutura de saída
[{ "id": "123", "aggregate_reward_score": 0.85, "metrics_list": [ { "name": "accuracy", "value": 0.9, "type": "Reward" }, { "name": "policy_compliance", "value": 0.8, "type": "Metric" } ] }]
Exemplo de função Lambda
from typing import List import json from dataclasses import asdict, dataclass @dataclass class RewardOutput: """Reward service output.""" id: str aggregate_reward_score: float def lambda_handler(event, context): """Main lambda handler""" return lambda_grader(event) def lambda_grader(samples: list[dict]) -> list[dict]: """Core grader function""" scores: List[RewardOutput] = [] for sample in samples: idx = sample["id"] ground_truth = sample.get("metadata", {}).get("reference_answer") if "messages" not in sample: print(f"Messages is None/empty for id: {idx}") ro = RewardOutput(id=idx, aggregate_reward_score=0.0) scores.append(ro) continue if ground_truth is None: print(f"No answer found in ground truth for id: {idx}") ro = RewardOutput(id=idx, aggregate_reward_score=0.0) scores.append(ro) continue # Get model's response (last turn is assistant turn) last_message = sample["messages"][-1] assert last_message["role"] == "assistant", "Last message must be from assistant" model_text = last_message["content"] ground_truth_text = _extract_ground_truth_text(ground_truth) if model_text.lower() == ground_truth_text.lower(): score = 1.0 else: score = 0.0 ro = RewardOutput(id=idx, aggregate_reward_score=score) scores.append(ro) return [asdict(score) for score in scores] def _extract_ground_truth_text(ground_truth) -> str: """Turn the ground_truth field into a plain string.""" if isinstance(ground_truth, str): return ground_truth if isinstance(ground_truth, dict): if "explanation" in ground_truth and isinstance(ground_truth["explanation"], str): return ground_truth["explanation"] if "answer" in ground_truth and isinstance(ground_truth["answer"], str): return ground_truth["answer"] return json.dumps(ground_truth, ensure_ascii=False) return str(ground_truth)
Configuração do treinamento
Use o modelo de caderno SageMaker AI Training Job para iniciar um trabalho de treinamento. Para obter mais informações, consulte Criar um trabalho de treinamento.
Contêiner de treinamento
708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-RFT-latest
Requisitos de instância
O contêiner oferece suporte ao treinamento Full Rank e LoRa:
Treinamento LoRa — 2/4/6/8 × instâncias p5.48xlarge ou p5en.48xlarge
Treinamento Full Rank — 2/4/6/8 × instâncias vv48xlarge (obrigatório)
Seleção do modo de raciocínio
Modos disponíveis
none— Sem raciocínio (omita oreasoning_effortcampo)low— Sobrecarga mínima de raciocíniohigh— Capacidade máxima de raciocínio (padrão quandoreasoning_effortespecificado)
nota
Não há opção média para RFT. Se o reasoning_effort campo estiver ausente da sua configuração, o raciocínio será desativado. Quando o raciocínio está ativado, você deve definir como 32768 max_new_tokens para acomodar saídas de raciocínio estendidas.
Quando usar cada modo
Use o high raciocínio para tarefas analíticas complexas, resolução de problemas matemáticos, dedução lógica em várias etapas e tarefas em que o pensamento agrega valor. step-by-step
Use none (omitareasoning_effort) ou low raciocine para consultas factuais simples, classificações diretas, otimização de velocidade e custo e respostas diretas a perguntas.
Compensações de custo e desempenho
Modos de raciocínio mais altos aumentam o tempo e o custo do treinamento, a latência e o custo da inferência e a capacidade de modelar para tarefas complexas de raciocínio.
Treinamento de monitoramento
Os registros de treinamento incluem métricas abrangentes em cada etapa. As principais categorias métricas incluem o seguinte:
Métricas de recompensa —
critic/rewards/meancritic/rewards/max,,critic/rewards/min(distribuição de recompensas) eval-score/rewards/mean@1(recompensas de validação)Comportamento do modelo —
actor/entropy(variação da política; quanto maior, mais exploratório)Saúde do treinamento —
actor/pg_loss(perda do gradiente da política),actor/pg_clipfrac(frequência de atualizações recortadas) eactor/grad_norm(magnitude do gradiente)Características de resposta —
prompt_length/mean,prompt_length/max,prompt_length/min(estatísticas do token de entrada),response_length/mean,response_length/max,response_length/min(estatísticas do token de saída) eresponse/aborted_ratio(taxa de geração incompleta; 0 é igual a tudo concluído)Desempenho —
perf/throughput(produtividade do treinamento),perf/time_per_step(tempo por etapa do treinamento) etiming_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) eperf/cpu_memory_used_gb(memória da CPU)
Usando modelos ajustados
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 nos registros de treinamento e no manifest.json arquivo no local de saída do Amazon S3 (definido em seu output_s3_uri notebook).
Limitações e melhores práticas
Limitações
Tempo limite do Lambda — as funções de recompensa devem ser concluídas em 15 minutos (evita processos descontrolados e gerencia custos)
Somente em um único turno — conversas em vários turnos não são suportadas
Requisitos de dados — precisa de diversidade suficiente; tem dificuldades com recompensas escassas (menos de 5% de exemplos positivos)
Custo computacional — Mais caro do que o ajuste fino supervisionado
Práticas recomendadas
Comece pequeno — comece com 100-200 exemplos, valide a exatidão da função de recompensa e escale gradualmente com base nos resultados
Avaliação pré-treinamento — Teste o desempenho do modelo básico antes do RFT. Se as recompensas forem consistentemente de 0%, use primeiro o SFT para estabelecer as capacidades básicas. Se as recompensas forem maiores que 95 por cento, o RFT pode ser desnecessário.
Monitore o treinamento — Acompanhe as pontuações médias e a distribuição das recompensas. Cuidado com o ajuste excessivo (as recompensas de treinamento aumentam enquanto as recompensas de validação diminuem). Procure padrões preocupantes, como estabilização das recompensas abaixo de 0,15, aumento da variação da recompensa ao longo do tempo e diminuição do desempenho de validação.
Otimize as funções de recompensa — Execute em segundos (não em minutos), minimize as chamadas externas de API, use algoritmos eficientes, implemente o tratamento adequado de erros e aproveite o escalonamento paralelo do Lambda
Estratégia de iteração — Se as recompensas não estiverem melhorando, ajuste o design da função de recompensa, aumente a diversidade do conjunto de dados, adicione exemplos mais representativos e verifique se os sinais de recompensa são claros e consistentes