Ajuste fino supervisionado (SFT)
As seções a seguir descrevem o processo de ajuste fino supervisionado (SFT), tanto o SFT de classificação completa quanto o SFT com eficiência de parâmetros.
Ajuste fino supervisionado (SFT) de classificação completa
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 do 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 Converse do Amazon Bedrock. Para ver exemplos e restrições desse formato, consulte Preparar dados para o ajuste dos modelos de compreensão.
Para validar o formato do conjunto de dados antes do envio, recomendamos usar o script de validação do repositório de amostras do Amazon Bedrock
Os parâmetros do Amazon Nova 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ãoamazon.nova-micro-v1:0:128k,amazon.nova-lite-v1:0:300kouamazon.nova-pro-v1:0:300k. -
model_name_or_path: o caminho para o modelo de base a ser usado em seu treinamento. Selecione o modelo a ser usado, comonova-micro/prod,nova-lite/prodounova-pro/prod, ou o caminho do 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 no treinamento distribuído. Os valores disponíveis variam de acordo com o modelo escolhido. O Amazon Nova Micro permite 2, 4 ou 8 réplicas. O Amazon Nova Lite permite 4, 8, 16 ou 32 réplicas. O Amazon Nova Pro permite 6, 12 ou 24 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 região e Conta da AWS que o 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) 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 dentro do caminho do S3 fornecido 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 dentro do caminho do S3 fornecido devem estar na mesma conta e região.
-
-
Configuração do 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 permitido é 65.536 tokens para SFT.Sequências mais longas melhorarão a eficiência do treinamento à custa de maiores requisitos de memória. Recomendamos que você compatibilize o parâmetro
max_lengthcom sua distribuição de dados.
-
-
Configurações do treinador
-
max_epochs: o número de passagens completas pelo 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 sobreajuste em conjuntos de dados menores. Os valores válidos estão entre 0 e 1, inclusive. -
attention_dropout: a probabilidade de descartar os pesos de atenção. Esse parâmetro pode ajudar na generalização. Os valores válidos estão entre 0 e 1, inclusive. -
ffn_dropout: a probabilidade de descartar as saídas da rede de alimentação direta. Os valores válidos estão entre 0 e 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 e 1e-3, inclusive. Recomendamos valores entre 1e-6 e 1e-4 para um obter bom desempenho. -
name: o algoritmo otimizador. No momento, só há compatibilidade comdistributed_fused_adam. -
weight_decay: a força de regularização de L2. Valores mais altos (entre 0,01 e 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 queda. 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 fórmula de SFT de classificação completa
A seguir é apresentada uma fórmula para SFT de classificação completa, para que você possa iniciar rapidamente um trabalho de SFT em um cluster do HyperPod. Essa fórmula também pressupõe que você tenha se conectado ao cluster do HyperPod usando as credenciais corretas da AWS.
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 fórmula de classificação completa
A seguir é apresentado um exemplo de fórmula de classificação 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
Não é possível publicar métricas no Weights & Biases e MLflow.
Os pontos de verificação intermediários não são salvos para avaliação e não é possível 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 Selecionar 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 de base a novos domínios ou tarefas. Mais especificamente, o PEFT de adaptador de baixa classificação (LoRa) ajusta os modelos de base com eficiência, introduzindo matrizes de pesos 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 PEFT de adaptador LoRa expande o modelo de base incorporando camadas de adaptador leve 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 PEFT LoRa nos seguintes cenários:
-
Você quer começar com um procedimento de treinamento rápido.
-
O desempenho do modelo de base 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 PEFT LoRa também ajudam a evitar sobreajuste e a mitigar os riscos de que modelo “esqueça” o domínio original. Isso garante que o modelo continue versátil e adaptável para várias aplicações.
-
Você quer executar 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 conjuntos de dados grandes e rotulados que excedem os limites de dados de personalização do Amazon Bedrock. Nesse caso, você pode usar o PEFT LoRa no SageMaker AI para gerar resultados melhores.
-
Se você já alcançou resultados promissores com o ajuste fino do Amazon Bedrock, o PEFT LoRa no SageMaker AI poderá ajudar a otimizar ainda mais os hiperparâmetros do modelo.
Os parâmetros do Amazon Nova que estão disponíveis para ajuste com o PEFT LoRa 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 Nova a ser usada. As opções disponíveis sãoamazon.nova-micro-v1:0:128k,amazon.nova-lite-v1:0:300kouamazon.nova-pro-v1:0:300k. -
model_name_or_path: o caminho para o modelo de base a ser usado em seu treinamento. Selecione o modelo a ser usado. As opções disponíveis sãonova-micro/prod,nova-lite/prod,nova-pro/prodou o caminho do 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 no treinamento distribuído. Os valores disponíveis variam de acordo com o modelo usado. O Amazon Nova Micro permite 2, 4 ou 8 réplicas. O Amazon Nova Lite permite 4, 8, 16 ou 32 réplicas. O Amazon Nova Pro permite 6, 12 ou 24 réplicas. -
output_s3_path: o local do S3 onde o manifesto e os logs do TensorBoard são armazenados. Todos os locais do S3 dentro do caminho do S3 fornecido devem estar na mesma conta e região.
-
-
Configuração do 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 permitido é 65.536 tokens para PEFT LoRa.Sequências mais longas melhorarão a eficiência do treinamento à custa de maiores requisitos de memória. Recomendamos que você compatibilize o parâmetro
max_lengthcom sua distribuição de dados.
-
-
Configurações do treinador
-
max_epochs: o número de passagens completas pelo conjunto de dados de treinamento. Você pode definirmax_stepsoumax_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 e 1, inclusive. -
attention_dropout: a probabilidade de descartar os pesos de atenção. Esse parâmetro pode ajudar na generalização. Os valores válidos estão entre 0 e 1, inclusive. -
ffn_dropout: a probabilidade de descartar as saídas da rede de alimentação direta. Os valores válidos estão entre 0 e 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 e 1e-4 para um obter bom desempenho. Os valores válidos estão entre 0 e 1, inclusive. -
name: o algoritmo otimizador. No momento, só há compatibilidade comdistributed_fused_adam. -
weight_decay: a força de regularização de L2. Valores mais altos (entre 0,01 e 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 queda. Os valores válidos estão entre 0-1, inclusive, mas devem ser menores que a taxa de aprendizado.
-
-
Parâmetros de configuração do LoRA
-
peft_scheme: defina comolorapara permitir a adaptação de baixa classificação. -
alpha: o fator de ajuste de escala para pesos de LoRa. Normalmente, isso é definido com o mesmo valor deadapter_dim. -
adaptor_dropout: o parâmetro de regularização para LoRA.
-
Fórmula do PEFT
A seguir é apresentada uma fórmula para PEFT LoRA.
## 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 não é possível retomar a partir de um ponto de verificação intermediário. Somente o último ponto de verificação é salvo.
-
Não é possível usar o registro em log do MLflow.
Solução de problemas
Use as seguintes informações para ajudar a resolver os problemas que podem ser encontrados:
-
O conjunto de dados de entrada de treinamento e validação deve residir em buckets de propriedade do cliente, não em depósitos de garantia ou em buckets do S3 gerenciados por serviços.
-
Se você receber um erro de região não encontrada na 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 Selecionar hiperparâmetros.