PEFT documentation
VeLoRA
VeLoRA
Il s’agit d’une variante de LoRA et, par conséquent, tout ce qui est possible avec LoRA s’applique à cette méthode, sauf indication contraire sur cette page.
VeLoRA est une variante de LoRA qui réduit la mémoire d’entraînement en compressant les activations enregistrées pour LoRA lors de la passe avant, puis en les reconstruisant lors de la passe arrière pour appliquer les règles de mise à jour. Dans PEFT, VeLoRA est configuré comme une variante de LoRA via l’argument velora_config de 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 est appliqué à chaque couche LoRA sélectionnée par target_modules. num_groups contrôle la manière dont la profondeur des activations d’entrée est divisée avant la compression. Si la profondeur des activations n’est pas divisible par num_groups, VeLoRA remplit la représentation groupée en interne et supprime le remplissage après la reconstruction. scale rééchelonne les activations reconstruites lors de la passe arrière, et init_type détermine la méthode d’initialisation de la projection.
Utilisez batch_average_once pour initialiser la projection à partir du premier lot d’entraînement, batch_average pour la mettre à jour à chaque passe avant d’entraînement, ou random pour l’initialiser immédiatement à partir d’un vecteur aléatoire normalisé.
Voici quelques résultats avec le MetaMathQA benchmark.
| Variante | Perte d'entraînement | Mémoire maximale (GiB) | Tokens/s |
|---|---|---|---|
| LoRA | 0.5427 | 27.69 | 2366.2 |
| LoRA + GC | 0.5426 | 13.17 | 1671.8 |
| LoRA+VeLoRA | 0.5427 | 19.94 | 2057.6 |
Limites
- VeLoRA est actuellement pris en charge uniquement sur les couches linéaires LoRA standard.