Дообчання 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.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Тонке налаштування 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 адаптація

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) Точність Час навчання
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 тижнів