Ajuste fino supervisionado (SFT) - SageMaker Inteligência Artificial da Amazon

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 supervisionado (SFT)

As seções a seguir descrevem o processo de ajuste fino supervisionado (SFT), tanto o SFT de nível completo quanto o SFT com parâmetros eficientes.

Ajuste fino supervisionado (SFT) de nível completo

Ajuste supervisionado (SFT) é o processo de fornecer um conjunto de pares de prompt-resposta a um modelo de base para melhorar a performance de um modelo de base pré-treinado em uma tarefa específica. Os exemplos rotulados são formatados como prompts, pares de respostas a prompt e expressos como instruções. Esse processo de ajuste fino modifica os pesos do modelo.

Você deve usar o SFT quando tiver dados específicos do domínio que exijam que pares de prompt-resposta específicos sejam fornecidos para que resultados ideais sejam obtidos.

Observe que seus conjuntos de dados de entrada de treinamento e validação devem residir em buckets de propriedade do cliente, não em depósitos de garantia ou em buckets S3 gerenciados por serviços.

requisitos de dados

Para SFT de classificação completa e SFT de adaptador de baixa classificação (LoRa), os dados devem seguir o formato de operação do Amazon Bedrock Converse. Para obter exemplos e restrições desse formato, consulte Preparação de dados para ajuste fino. Compreendendo os modelos.

Para validar o formato do conjunto de dados antes do envio, recomendamos usar o script de validação do repositório de amostras Amazon Bedrock. Essa ferramenta de validação ajuda 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 seu trabalho de ajuste fino.

Os parâmetros do Amazon Nova que estão disponíveis para ajuste com o SFT são os seguintes:

  • Executar configuração

    • name: Um nome descritivo para seu trabalho de treinamento. Isso ajuda a identificar seu trabalho no AWS Management Console.

    • model_type: A variante do modelo Amazon Nova a ser usada. As opções disponíveis sãoamazon.nova-micro-v1:0:128k,amazon.nova-lite-v1:0:300k, ouamazon.nova-pro-v1:0:300k.

    • model_name_or_path: O caminho para o modelo básico a ser usado em seu treinamento. Selecione o modelo a ser usado emnova-micro/prod,, nova-lite/prodnova-pro/prod, ou o caminho S3 para o ponto de verificação pós-treinamento (). s3://<escrow bucket>/<job id>/outputs/checkpoints

    • replicas: o número de instâncias de computação a serem usadas para treinamento distribuído. Os valores disponíveis variam de acordo com o modelo escolhido. O Amazon Nova Micro oferece suporte a 2, 4 ou 8 réplicas. O Amazon Nova Lite oferece suporte a 4, 8, 16 ou 32 réplicas. O Amazon Nova Pro oferece suporte a 6, 12 ou 24 réplicas.

    • data_s3_path: a localização do conjunto de dados de treinamento no S3, que é um arquivo JSONL. Esse arquivo deve residir na mesma Conta da AWS região do cluster. Todos os locais do S3 dentro do caminho do S3 fornecido devem estar na mesma conta e região.

    • validation_data_s3_path: (Opcional) A localização do conjunto de dados de validação no S3, que é um arquivo JSONL. Esse arquivo deve residir na mesma conta e região do cluster. Todos os locais do S3 dentro do caminho do S3 fornecido devem estar na mesma conta e região.

    • output_s3_path: o local do S3 em que o manifesto e TensorBoard os registros são armazenados. Todos os locais do S3 dentro do caminho do S3 fornecido devem estar na mesma conta e região.

  • Configuração de treinamento

    • 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 suportado é de 65.536 tokens para SFT.

      Sequências mais longas melhorarão a eficiência do treinamento ao custo de maiores requisitos de memória. Recomendamos que você combine o max_length parâmetro com sua distribuição de dados.

  • Configurações do treinador

    • max_epochs: o número de passagens completas em seu conjunto de dados de treinamento. O valor máximo é 5.

      Em geral, conjuntos de dados maiores exigem menos épocas para convergir, enquanto conjuntos de dados menores exigem mais épocas para convergir. Recomendamos que você ajuste o número de épocas com base no tamanho dos seus dados.

  • Configurações do modelo

    • hidden_dropout: A probabilidade de descartar saídas de estado oculto. Aumente esse valor em aproximadamente 0,0-0,2 para reduzir o ajuste excessivo em conjuntos de dados menores. Os valores válidos estão entre 0-1, inclusive.

    • attention_dropout: A probabilidade de perder os pesos de atenção. Esse parâmetro pode ajudar na generalização. Os valores válidos estão entre 0-1, inclusive.

    • ffn_dropout: A probabilidade de perder as saídas da rede de feed-forward. Os valores válidos estão entre 0-1, inclusive.

  • Configuração do otimizador

    • lr: A taxa de aprendizado, que controla o tamanho da etapa durante a otimização. Os valores válidos estão entre 1e-6-1e-3, inclusive. Recomendamos valores entre 1e-6-1e-4 para um bom desempenho.

    • name: O algoritmo otimizador. No momento, só há compatibilidade com distributed_fused_adam.

    • weight_decay: A força de regularização de L2. Valores mais altos (entre 0,01-0,1) aumentam a regularização.

    • warmup_steps: O número de etapas para aumentar gradualmente a taxa de aprendizado. Isso melhora a estabilidade do treinamento. Os valores válidos estão entre 1 e 20, inclusive.

    • min_lr: A taxa mínima de aprendizado no final da decadência. Os valores válidos estão entre 0-1, inclusive, mas devem ser menores que a taxa de aprendizado.

Início rápido com uma receita SFT completa

A seguir está uma receita para SFT de nível completo, destinada a você iniciar rapidamente um trabalho de SFT em um cluster. HyperPod Essa receita também pressupõe que você tenha se conectado ao seu HyperPod cluster usando as AWS credenciais corretas.

run: name: "my-sft-micro-job" # gets appended with a unique ID for HP jobs model_type: "amazon.nova-micro-v1:0:128k" model_name_or_path: "nova-micro/prod" replicas: 2 data_s3_path: s3:Replace with your S3 bucket name/input.jsonl validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## training specific configs training_config: max_length: 32768 save_steps: 100000 replicas: ${recipes.run.replicas} micro_batch_size: 1 task_type: sft global_batch_size: 64 weights_only: True allow_percentage_invalid_samples: 10 exp_manager: exp_dir: null create_wandb_logger: False create_tensorboard_logger: True project: null name: null checkpoint_callback_params: monitor: step save_top_k: 10 mode: max every_n_train_steps: ${recipes.training_config.save_steps} save_last: True create_early_stopping_callback: True early_stopping_callback_params: min_delta: 0.001 mode: min monitor: "val_loss" patience: 2 trainer: log_every_n_steps: 1 max_epochs: -1 max_steps: 16 val_check_interval: 100 limit_test_batches: 0 gradient_clip_val: 1.0 num_nodes: ${recipes.training_config.replicas} model: hidden_dropout: 0.0 # Dropout probability for hidden state transformer. attention_dropout: 0.0 # Dropout probability in the attention layer. ffn_dropout: 0.0 # Dropout probability in the feed-forward layer. sequence_parallel: True optim: lr: 1e-5 name: distributed_fused_adam bucket_cap_mb: 10 contiguous_grad_buffer: False overlap_param_sync: False contiguous_param_buffer: False overlap_grad_sync: False adam_w_mode: true eps: 1e-06 weight_decay: 0.0 betas: - 0.9 - 0.999 sched: name: CosineAnnealing warmup_steps: 10 constant_steps: 0 min_lr: 1e-6 mm_cfg: llm: freeze: false image_projector: freeze: true require_newline: true video_projector: freeze: true require_newline: false peft: peft_scheme: null training_validation: loader: args: data_loader_workers: 1 prefetch_factor: 2 collator: args: force_image_at_turn_beginning: false
Exemplo de receita completa

A seguir está um exemplo de receita completa para SFT com todos os componentes configurados corretamente.

## Run config run: name: "my-sft-run" # A descriptive name for your training job model_type: "amazon.nova-lite-v1:0:300k" # Model variant specification model_name_or_path: "nova-lite/prod" # Base model path replicas: 4 # Number of compute instances for training data_s3_path: s3:Replace with your S3 bucket name/input.jsonl validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## Training specific configs training_config: max_length: 32768 # Maximum context window size (tokens) trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states attention_dropout: 0.0 # Dropout for attention weights ffn_dropout: 0.0 # Dropout for feed-forward networks optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm adam_w_mode: true # Enable AdamW mode eps: 1e-06 # Epsilon for numerical stability weight_decay: 0.0 # L2 regularization strength betas: # Adam optimizer betas - 0.9 - 0.999 sched: warmup_steps: 10 # Learning rate warmup steps constant_steps: 0 # Steps at constant learning rate min_lr: 1e-6 # Minimum learning rate peft: peft_scheme: null # Set to null for full-parameter fine-tuning
Limitações

A publicação de métricas em Weights & Biases não MLFlow é suportada.

Os pontos de verificação intermediários não são salvos para avaliação e você não pode retomar a partir de um ponto de verificação intermediário. Somente o último ponto de verificação é salvo.

Para ajustar os hiperparâmetros, siga as orientações em Seleção de hiperparâmetros.

Ajuste fino com eficiência de parâmetros (PEFT)

O ajuste fino com eficiência de parâmetros (PEFT) envolve o retreinamento de um pequeno número de pesos adicionais para adaptar um modelo básico a novas tarefas ou domínios. Especificamente, o adaptador de baixa classificação (LoRa) PEFT ajusta com eficiência os modelos básicos introduzindo matrizes de peso treináveis de baixa classificação em camadas específicas do modelo, reduzindo o número de parâmetros treináveis e mantendo a qualidade do modelo.

Um adaptador LoRa PEFT aumenta o modelo básico ao incorporar camadas leves de adaptador que modificam os pesos do modelo durante a inferência, mantendo intactos os parâmetros originais do modelo. Essa abordagem também é considerada uma das técnicas de ajuste mais econômicas. Para obter mais informações, consulte Fine-tune models with adapter inference components.

Você deve usar o LoRa PEFT nos seguintes cenários:

  • Você quer começar com um procedimento de treinamento rápido.

  • O desempenho do modelo básico já é satisfatório. Nesse caso, o objetivo do PEFT LoRa é aprimorar as habilidades do modelo em várias tarefas relacionadas, como resumo de texto ou tradução de idiomas. As propriedades de regularização do LoRa PEFT ajudam a evitar o sobreajuste e mitigar os riscos de o modelo “esquecer” o domínio de origem. Isso garante que o modelo continue versátil e adaptável para várias aplicações.

  • Você deseja realizar cenários de ajuste fino de instruções com conjuntos de dados relativamente pequenos. A performance do PEFT LoRa é melhor com conjuntos de dados menores, específicos para as tarefas, que com conjuntos de dados maiores e mais abrangentes.

  • Você tem grandes conjuntos de dados rotulados que excedem os limites de dados de personalização do Amazon Bedrock. Nesse caso, você pode usar o LoRa PEFT na SageMaker IA para gerar melhores resultados.

  • Se você já alcançou resultados promissores por meio do ajuste fino do Amazon Bedrock, o LoRa PEFT em SageMaker IA pode ajudar a otimizar ainda mais os hiperparâmetros do modelo.

Os parâmetros do Amazon Nova que estão disponíveis com o LoRa PEFT incluem:

  • Executar configuração

    • name: Um nome descritivo para seu trabalho de treinamento. Isso ajuda a identificar seu trabalho no AWS Management Console.

    • model_type: A variante do modelo Nova a ser usada. As opções disponíveis sãoamazon.nova-micro-v1:0:128k,amazon.nova-lite-v1:0:300k, ouamazon.nova-pro-v1:0:300k.

    • model_name_or_path: O caminho para o modelo básico a ser usado em seu treinamento. Selecione o modelo a ser usado. As opções disponíveis sãonova-micro/prod,, nova-lite/prodnova-pro/prod, ou o caminho S3 para o ponto de verificação pós-treinamento (). s3://<escrow bucket>/<job id>/outputs/checkpoints

    • replicas: o número de instâncias de computação a serem usadas para treinamento distribuído. Os valores disponíveis variam de acordo com o modelo que você usa. O Amazon Nova Micro oferece suporte a 2, 4 ou 8 réplicas. O Amazon Nova Lite oferece suporte a 4, 8, 16 ou 32 réplicas. O Amazon Nova Pro oferece suporte a 6, 12 ou 24 réplicas.

    • output_s3_path: o local do S3 em que o manifesto e TensorBoard os registros são armazenados. Todos os locais do S3 dentro do caminho do S3 fornecido devem estar na mesma conta e região.

  • Configuração de treinamento

    • 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 suportado é de 65.536 tokens para LoRa PEFT.

      Sequências mais longas melhorarão a eficiência do treinamento ao custo de maiores requisitos de memória. Recomendamos que você combine o max_length parâmetro com sua distribuição de dados.

  • Configurações do treinador

    • max_epochs: o número de passagens completas em seu conjunto de dados de treinamento. Você pode definir um max_steps ou doismax_epochs, mas não recomendamos definir os dois. O valor máximo é 5.

      Em geral, conjuntos de dados maiores exigem menos épocas para convergir, enquanto conjuntos de dados menores exigem mais épocas para convergir. Recomendamos que você ajuste o número de épocas com base no tamanho dos seus dados.

  • Configurações do modelo

    • hidden_dropout: A probabilidade de descartar saídas de estado oculto. Aumente esse valor em aproximadamente 0,0-0,2 para reduzir o sobreajuste em conjuntos de dados menores. Os valores válidos estão entre 0-1, inclusive.

    • attention_dropout: A probabilidade de perder os pesos de atenção. Esse parâmetro pode ajudar na generalização. Os valores válidos estão entre 0-1, inclusive.

    • ffn_dropout: A probabilidade de perder as saídas da rede de feed-forward. Os valores válidos estão entre 0-1, inclusive.

  • Configuração do otimizador

    • lr: A taxa de aprendizado, que controla o tamanho da etapa durante a otimização. Recomendamos valores entre 1e-6-1e-4 para um bom desempenho. Os valores válidos estão entre 0-1, inclusive.

    • name: O algoritmo otimizador. No momento, só há compatibilidade com distributed_fused_adam.

    • weight_decay: A força de regularização de L2. Valores mais altos (entre 0,01-0,1) aumentam a regularização.

    • warmup_steps: O número de etapas para aumentar gradualmente a taxa de aprendizado. Isso melhora a estabilidade do treinamento. Os valores válidos estão entre 1 e 20, inclusive.

    • min_lr: A taxa mínima de aprendizado no final da decadência. Os valores válidos estão entre 0-1, inclusive, mas devem ser menores que a taxa de aprendizado.

  • Parâmetros de configuração LoRa

    • peft_scheme: Defina como para lora permitir a adaptação de baixa classificação.

    • alpha: O fator de escala para pesos LoRa. Normalmente, isso é definido com o mesmo valor deadapter_dim.

    • adaptor_dropout: O parâmetro de regularização para LoRa.

Receita PEFT

A seguir está uma receita para LoRa PEFT.

## Run config run: name: "my-lora-run" # A descriptive name for your training job model_type: "amazon.nova-lite-v1:0:300k" # Model variant specification model_name_or_path: "nova-lite/prod" # Base model path replicas: 4 # Number of compute instances for training output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## Training specific configs training_config: max_length: 32768 # Maximum context window size (tokens) trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states attention_dropout: 0.0 # Dropout for attention weights ffn_dropout: 0.0 # Dropout for feed-forward networks optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm adam_w_mode: true # Enable AdamW mode eps: 1e-06 # Epsilon for numerical stability weight_decay: 0.0 # L2 regularization strength betas: # Adam optimizer betas - 0.9 - 0.999 sched: warmup_steps: 10 # Learning rate warmup steps constant_steps: 0 # Steps at constant learning rate min_lr: 1e-6 # Minimum learning rate peft: peft_scheme: "lora" # Enable LoRA for parameter-efficient fine-tuning lora_tuning: loraplus_lr_ratio: 8.0 # LoRA+ learning rate scaling factor alpha: 32 # Scaling factor for LoRA weights adapter_dropout: 0.01 # Regularization for LoRA parameters
Limitações

O PEFT tem as seguintes limitações:

  • A configuração de treinamento fornecida anteriormente tem os valores recomendados para cada parâmetro.

  • Os pontos de verificação intermediários não são salvos para avaliação e você não pode retomar a partir de um ponto de verificação intermediário. Somente o último ponto de verificação é salvo.

  • MLflow o registro não é suportado.

Solução de problemas

Use as informações a seguir para ajudar a resolver problemas que você possa encontrar:

  • O conjunto de dados de entrada para treinamento e validação deve residir em buckets de propriedade do cliente, não em depósitos de garantia ou em buckets S3 gerenciados por serviços.

  • Se você receber um erro Região não encontrada no AWS CLI, reenvie o trabalho com a região anexada ao comando start-job. Por exemplo: AWS_REGION=us-east-1 hyperpod start-job ...Job Parameters.

  • Para ajustar os hiperparâmetros, siga as orientações em Seleção de hiperparâmetros.