PEFT documentation
VeLoRA
VeLoRA
Это вариант LoRA, поэтому всё, что возможно с LoRA, применимо и к этому методу, если на этой странице не указано иное.
VeLoRA — это вариант LoRA, который снижает объём памяти, используемой при обучении, за счёт сжатия активаций, сохраняемых для LoRA на прямом проходе, и их последующей реконструкции на обратном проходе для реализации правил обновления. В PEFT VeLoRA настраивается как вариант LoRA через аргумент velora_config в 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 применяется к каждому слою LoRA, выбранному с помощью target_modules. Параметр num_groups определяет, как глубина входных активаций разделяется перед сжатием. Если глубина активаций не делится нацело на num_groups, VeLoRA внутренним образом дополняет сгруппированное представление и удаляет дополнения после реконструкции. Параметр scale масштабирует реконструированные активации во время обратного прохода, а init_type определяет способ инициализации проекции.
Используйте batch_average_once, чтобы инициализировать проекцию из первой обучающей партии, batch_average, чтобы обновлять её на каждом проходе прямой передачи в обучении, или random, чтобы инициализировать её сразу из случайного нормированного вектора.
Ниже приведены некоторые результаты на бенчмарке MetaMathQA.
| Вариант | Потери обучения | Максимальная память (ГБ) | Токенов/сек |
|---|---|---|---|
| LoRA | 0.5427 | 27.69 | 2366.2 |
| LoRA + GC | 0.5426 | 13.17 | 1671.8 |
| LoRA+VeLoRA | 0.5427 | 19.94 | 2057.6 |
Ограничения
- VeLoRA в настоящее время поддерживается только для стандартных линейных слоёв LoRA.