Дообучение LLM методом PEFT (Parameter-Efficient Fine-Tuning)

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Дообучение LLM методом PEFT (Parameter-Efficient Fine-Tuning)
Средняя
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Дообучение LLM методом PEFT (Parameter-Efficient Fine-Tuning)

PEFT — не единственный метод, а семейство подходов к параметрически эффективному дообучению, объединённых библиотекой peft от Hugging Face. LoRA и QLoRA — наиболее популярные представители, но PEFT включает и другие техники: Prefix Tuning, Prompt Tuning, IA³, AdaLoRA. Выбор конкретного метода зависит от задачи, объёма данных, доступных ресурсов и требований к инференсу.

Методы PEFT: сравнение

Метод Обучаемые параметры Инференс overhead Применение
LoRA 0.1–5% Нет (после merge) Генерация, классификация
QLoRA 0.1–5% Нет (после merge) То же, меньше VRAM
DoRA 0.1–5% Нет (после merge) Улучшенная LoRA
AdaLoRA 0.1–3% Нет (после merge) Адаптивный rank
Prefix Tuning <0.1% Да (prefix токены) Мало данных, NLU
Prompt Tuning <0.01% Да Минимум данных
IA³ <0.01% Нет (мультипликация) Few-shot adaptation

AdaLoRA: адаптивный выбор ранга

AdaLoRA автоматически распределяет «бюджет» параметров между слоями, выделяя больший ранг важным слоям:

from peft import AdaLoraConfig, get_peft_model

config = AdaLoraConfig(
    init_r=12,          # Начальный ранг
    target_r=8,         # Целевой средний ранг
    beta1=0.85,
    beta2=0.85,
    deltaT=10,          # Шаг обновления рангов
    lora_alpha=32,
    target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
    task_type="CAUSAL_LM",
)

model = get_peft_model(model, config)

AdaLoRA полезна, когда неизвестно заранее, какие слои наиболее важны для адаптации.

Prefix Tuning: мягкие токены для задачи

Prefix Tuning добавляет обучаемые «мягкие токены» (virtual tokens) в начало каждого слоя модели. Базовые веса полностью заморожены:

from peft import PrefixTuningConfig

config = PrefixTuningConfig(
    task_type="CAUSAL_LM",
    num_virtual_tokens=20,  # Количество prefix токенов
    prefix_projection=True, # MLP для проекции
)

Преимущество: крайне мало параметров (<0.1%). Недостаток: prefix токены занимают часть контекстного окна при каждом инференсе.

IA³: In-context Activation Augmentation

IA³ вводит масштабирующие векторы в attention и FFN слои:

from peft import IA3Config

config = IA3Config(
    target_modules=["k_proj", "v_proj", "down_proj"],
    feedforward_modules=["down_proj"],
    task_type="CAUSAL_LM",
)

IA³ даёт впечатляющие результаты при few-shot сценариях с минимальными данными (50–200 примеров), но уступает LoRA при большем объёме.

Практическое сравнение методов на одном датасете

Задача: классификация тональности финансовых новостей (Positive/Negative/Neutral).

Датасет: 1200 примеров, базовая модель Llama 3.1 8B Instruct.

Метод Параметры VRAM (A100) Accuracy Время обучения
5-shot (без FT) 0 16 GB 0.74
IA³ ~0.01% 16 GB 0.81 15 мин
Prefix Tuning (20 tokens) ~0.05% 16 GB 0.83 25 мин
LoRA r=8 ~0.2% 18 GB 0.89 45 мин
LoRA r=16 ~0.4% 19 GB 0.91 55 мин
QLoRA r=16 (4-bit base) ~0.4% 9 GB 0.90 70 мин
Full FT 100% 4×A100 0.93 8 ч

Вывод: LoRA r=16 — оптимальный выбор для большинства задач. IA³ оправдан только при критическом ограничении ресурсов или очень малом датасете.

Управление несколькими адаптерами через PEFT

PEFT позволяет загружать и переключать несколько адаптеров в одной модели:

from peft import PeftModel

# Загрузка базовой модели
base_model = AutoModelForCausalLM.from_pretrained("meta-llama/Meta-Llama-3.1-8B-Instruct")

# Загрузка нескольких адаптеров
model = PeftModel.from_pretrained(base_model, "./adapter-legal", adapter_name="legal")
model.load_adapter("./adapter-finance", adapter_name="finance")
model.load_adapter("./adapter-medical", adapter_name="medical")

# Динамическое переключение
model.set_adapter("legal")
output_legal = model.generate(...)

model.set_adapter("finance")
output_finance = model.generate(...)

Это архитектурный паттерн «один базовый инстанс — несколько специализаций», который снижает расход памяти при обслуживании нескольких доменов.

Сроки

  • Выбор метода PEFT и эксперименты: 3–7 дней
  • Подготовка данных: 2–4 недели
  • Обучение и сравнение методов: 1–2 недели
  • Итого: 3–6 недель