PEFT documentation
VeLoRA
VeLoRA
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.
VeLoRA é uma variante do LoRA que reduz a memória de treinamento ao comprimir as ativações salvas para o LoRA na passagem direta e, em seguida, reconstruí-las na passagem reversa para implementar as regras de atualização. No PEFT, o VeLoRA é configurado como uma variante do LoRA por meio do argumento velora_config em LoraConfig.
from peft import LoraConfig, VeloraConfig
config = LoraConfig(
target_modules=["q_proj", "v_proj"],
velora_config=VeloraConfig(
num_groups=64,
scale=0.2,
init_type="batch_average",
),
)VeLoRA é aplicado a cada camada LoRA selecionada por target_modules. num_groups controla como a profundidade da ativação de entrada é dividida antes da compressão. Se a profundidade da ativação não for divisível uniformemente por num_groups, o VeLoRA adiciona padding à representação agrupada internamente e remove o padding após a reconstrução. scale reescala as ativações reconstruídas durante a passagem reversa, e init_type define como a projeção é inicializada.
Use batch_average_once para inicializar a projeção a partir do primeiro lote de treinamento, batch_average para atualizá-la a cada passagem de treinamento para frente, ou random para inicializá-la imediatamente a partir de um vetor normalizado aleatório.
Abaixo estão alguns resultados com o benchmark MetaMathQA.
| Variante | Perda de Treinamento | Memória Máxima (GiB) | Tokens/seg |
|---|---|---|---|
| LoRA | 0.5427 | 27.69 | 2366.2 |
| LoRA + GC | 0.5426 | 13.17 | 1671.8 |
| LoRA+VeLoRA | 0.5427 | 19.94 | 2057.6 |
Observações
- VeLoRA é atualmente suportado apenas em camadas lineares padrão de LoRA.