PEFT documentation

MonteCLoRA (Monte Carlo Low-Rank Adaptation)

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

MonteCLoRA (Monte Carlo Low-Rank Adaptation)

Esta é uma variante do LoRA e, portanto, tudo o que é possível com o LoRA é válido para este método, exceto quando indicado o contrário nesta página.

MonteCLoRA envolve um adaptador LoRA padrão com um pequeno módulo variacional que extrai amostras de Monte Carlo de perturbações estocásticas sobre a matriz A do LoRA durante o treinamento. Concretamente, ele aprende parâmetros variacionais (uma covariância baseada em Wishart, um termo de ruído multivariado normal por amostra e um peso Dirichlet sobre as amostras) e adiciona a perturbação resultante média a lora_A em cada passagem de frente. Um termo de divergência de KL + entropia é adicionado à perda de treinamento para manter esses parâmetros variacionais ancorados a um prior sensato. No momento da inferência, o amostrador é desativado e o MonteCLoRA se comporta exatamente como um adaptador LoRA regular, portanto não há custo extra de inferência nem parâmetros extras para mesclar. Para o método completo, veja https://huggingface.co/papers/2411.04358.

Você pode considerar o MonteCLoRA quando:

  • Você está fazendo fine-tuning em um conjunto de dados pequeno ou ruidoso e deseja uma regularização mais forte do que a do LoRA padrão. A média de Monte Carlo e o termo de KL, juntos, atuam como um regularizador de estilo bayesiano.
  • Você deseja uma melhor calibração de incerteza / robustidade do seu adaptador sem pagar um custo extra no tempo de inferência (o mecanismo variacional é usado apenas no treinamento).
  • O LoRA vanilla está sofrendo de overfitting e reduzir r ou aumentar lora_dropout não é suficiente.

Provavelmente você não precisa do MonteCLoRA quando possui um conjunto de dados grande e limpo e o LoRA padrão já treina de forma estável — nesse regime, os parâmetros variacionais extras adicionam principalmente sobrecarga de treinamento sem muito benefício.

Para habilitar o MonteCLoRA, passe um MontecloraConfig para LoraConfig:

from peft import LoraConfig, MontecloraConfig

monteclora_config = MontecloraConfig(
    num_samples=8,         # number of Monte Carlo samples per forward pass
    sample_scaler=1e-4,    # magnitude of the variational perturbation
    kl_loss_weight=1e-5,   # weight of the KL term added to the training loss
)
config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    monteclora_config=monteclora_config,
)

Durante o treinamento, você deve adicionar a perda de regularização variacional à perda da tarefa. A maneira mais simples é chamar LoraModel._get_monteclora_loss() no LoraModel subjacente:

task_loss = ...  # standard loss returned by your model
monteclora_loss = model._get_monteclora_loss()  # 0.0 if MonteCLoRA is not used
total_loss = task_loss + monteclora_loss
total_loss.backward()

Se você treinar com o Trainer do HF, basta misturar o peft.helpers.MontecloraTrainerMixin, que faz isso para você em compute_loss:

from transformers import Trainer
from peft.helpers import MontecloraTrainerMixin


class MontecloraTrainer(MontecloraTrainerMixin, Trainer):
    pass

Um exemplo completo e funcional está disponível em examples/monteclora_finetuning.

API

MonteCloraConfig

classe peft.MontecloraConfig

< >

( num_samples: int = 8use_entropy: bool = Falsedirichlet_prior: float = 0.1sample_scaler: float = 0.0001kl_loss_weight: float = 1e-05buffer_size: int = 150 )

Parâmetros

  • num_samples (int) — Número de amostras de Monte Carlo a serem extraídas por cada passagem de frente. Valores mais altos geralmente resultam em treinamento mais suave e melhores estimativas de incerteza, mas aumentam o uso de computação e memória. Reduza esse valor se o treinamento estiver lento demais ou se houver restrições de memória; aumente-o se o treinamento estiver estável e você desejar uma média de Monte Carlo mais robusta.
  • use_entropy (bool) — Se deve adicionar um termo de regularização de entropia que impede que os pesos de Monte Carlo colapsam para uma única amostra. Ative esta opção se observar que o amostrador está se tornando muito pontudo ou se desejar uma regularização mais forte; deixe-a desativada para imitar o LoRA padrão de forma mais próxima.
  • dirichlet_prior (float) — Parâmetro de concentração para a priori Dirichlet sobre os pesos de amostra/especialista. Valores maiores empurram os pesos para serem mais uniformes (regularização mais forte, menos esparsidade), enquanto valores positivos menores encorajam pesos mais esparsos e com picos mais acentuados. Aumente se o amostrador sofrer overfitting; diminua (mas mantenha > 0) se ele for muito conservador.
  • sample_scaler (float) — Fator de escala geral para as perturbações amostradas aplicadas aos pesos do LoRA. Aumentar esse valor torna o ruído de Monte Carlo mais forte (mais regularização e exploração, mas também mais instabilidade no treinamento); diminuí-lo aproxima o comportamento do LoRA determinístico padrão. Definir um valor muito próximo de 0 desativa em grande parte o efeito do Monteclora.
  • kl_loss_weight (float) — Peso do termo de divergência de KL entre a distribuição variacional e sua priori. Valores maiores dão mais ênfase à correspondência com a priori (regularização mais forte, potencialmente subajuste); valores menores confiam mais na verossimilhança dos dados (regularização mais fraca, potencialmente sobreajuste). Ajuste este parâmetro se você notar que a Monteclora está regularizando demais ou de menos o adaptador.
  • buffer_size (int) — Tamanho do buffer interno usado pelo amostrador de Monte Carlo (por exemplo, para armazenar estatísticas recentes). Valores maiores podem estabilizar os parâmetros variacionais estimados, ao custo de memória adicional; reduza este valor se estiver limitado em memória.

Esta é a classe de subconfiguração para armazenar a configuração do Monteclora (Monte Carlo Low-Rank Adaptation). O Monteclora introduz inferência variacional no LoRA ao adicionar amostragem de Monte Carlo aos pesos do adaptador.

Na prática, você pode pensar no Monteclora como a adição de perturbações estocásticas e aprendidas sobre os pesos do LoRA para obter um adaptador melhor calibrado e melhor regularizado. Os argumentos abaixo permitem equilibrar estabilidade, força da regularização e custo computacional.

Update on GitHub