Доопрацювання LLM методом Full Fine-Tuning

Доопрацювання LLM методом Full Fine-Tuning

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1439
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1001

Доопрацювання LLM методом Full Fine-Tuning

На одному з проєктів для фінансового регулятора LoRA з рангом 64 дав F1 лише 0,79 — розрив з цільовими метриками залишався критичним. Тоді ми застосували повне доопрацювання всіх ваг моделі (Full Fine-Tuning) і отримали F1 0,91. Цей метод оновлює всі параметри мовної моделі, а не лише адаптерні шари. Він дає найвищу якість адаптації, але потребує серйозних обчислювальних ресурсів та акуратного управління навчанням. Ми проводимо Full Fine-Tuning під ключ, надаючи повний цикл: від аудиту даних до деплою оптимізованої моделі. У цій статті розберемо, коли варто обирати повне доопрацювання, як налаштувати розподілене навчання з DeepSpeed ZeRO та FSDP, і на що звернути увагу, щоб уникнути катастрофічного забування.

Коли Full Fine-Tuning виправданий

Full FT обирають не за замовчуванням. Підстави:

  • Недостатня якість LoRA/QLoRA: якщо після оптимізації LoRA-параметрів розрив з базлайном залишається суттєвим, повне доопрацювання може дати додаткові 3–8% за метриками.
  • Принципово новий домен: коли модель потрібно навчити на нотації чи мові, що суттєво відрізняються від передтренованого розподілу (спеціальні символи, формальні граматики, унікальна термінологія).
  • Continual Pre-training: додавання нового знання в модель через продовження передтренування, а потім Instruction Tuning.
  • Зміна архітектурних параметрів: розширення словника, зміна довжини контексту через RoPE-масштабування.

Чому повне доопрацювання ефективніше за LoRA для складних доменів?

Причина — оновлення всіх ваг дозволяє моделі адаптувати свої внутрішні представлення під новий розподіл даних. LoRA ж модифікує лише низькорангові адаптери, залишаючи вихідні ваги незмінними. Якщо домен сильно відрізняється від передтренованого, LoRA не вистачає гнучкості. На практиці різниця може сягати 10–15 відсоткових пунктів за ключовими метриками.

Як підготувати дані для Full Fine-Tuning?

Якість датасету критична. Ми використовуємо такі практики:

  • Ретельне очищення від дублікатів та шуму.
  • Балансування класів, якщо задача класифікації.
  • Розділення на train/val/test з урахуванням часової або тематичної стратифікації.
  • Для генерації інструкцій застосовуємо шаблони chain-of-thought та few-shot приклади.

Технічні аспекти Full Fine-Tuning

Вимоги до пам'яті

Для повного доопрацювання моделі з N параметрами в bf16:

  • Параметри моделі: 2N bytes
  • Градієнти: 2N bytes (bf16) або 4N bytes (fp32)
  • Оптимізатор (AdamW): 8N bytes (fp32 моменти)
  • Активації: залежать від batch size та довжини послідовності

Разом — мінімум 12N bytes без активацій. Для 7B моделі: ~84 GB, для 70B: ~840 GB.

DeepSpeed ZeRO для розподіленого навчання

ZeRO (Zero Redundancy Optimizer) розбиває параметри, градієнти та стани оптимізатора між GPU:

{ "zero_optimization": { "stage": 3, "offload_optimizer": {"device": "cpu"}, "offload_param": {"device": "cpu"}, "overlap_comm": true, "contiguous_gradients": true, "reduce_bucket_size": "auto", "stage3_prefetch_bucket_size": "auto", "stage3_param_persistence_threshold": "auto" }, "bf16": {"enabled": true}, "gradient_accumulation_steps": 8, "gradient_clipping": 1.0, "train_micro_batch_size_per_gpu": 2 } 
Докладніше про конфігурацію DeepSpeed

ZeRO Stage 3 з CPU offloading дозволяє навчати 7B модель на 4×A100 40GB замість 8 GPU. Як зазначено в документації DeepSpeed, ця техніка суттєво знижує вимоги до відеопам'яті.

FSDP як альтернатива DeepSpeed

PyTorch Fully Sharded Data Parallel (FSDP) — нативна альтернатива DeepSpeed, краще інтегрована з екосистемою PyTorch. Документація з FSDP доступна на офіційному сайті.

from torch.distributed.fsdp import FullyShardedDataParallel as FSDP from torch.distributed.fsdp.wrap import transformer_auto_wrap_policy from transformers import LlamaDecoderLayer fsdp_config = { "fsdp": "full_shard auto_wrap", "fsdp_config": { "fsdp_auto_wrap_policy": "TRANSFORMER_BASED_WRAP", "fsdp_transformer_layer_cls_to_wrap": "LlamaDecoderLayer", "fsdp_state_dict_type": "FULL_STATE_DICT", "fsdp_offload_params": False, } } 

Gradient Checkpointing

Знижує споживання пам'яті активацій за рахунок повторного обчислення частини forward pass при backward:

model.gradient_checkpointing_enable() # Зниження пам'яті активацій ~4× при уповільненні навчання ~20% 

Порівняння методів доопрацювання

Параметр Full FT LoRA QLoRA
Оновлювані параметри Всі Адаптери (0.1–1%) Адаптери
Пам'ять на 7B (bf16) ~84 GB ~16 GB ~8 GB
Якість на складних доменах Висока Середня Середня
Час навчання Довго Помірно Швидко

Управління learning rate при повному доопрацюванні

При Full FT критично важлива схема навчання:

  • Warmup: перші 5–10% кроків lr зростає з 0 до цільового значення. Запобігає ранньому вибуху градієнтів.
  • Cosine decay: плавне зниження lr до 10% від пікового значення до кінця навчання.
  • Цільові значення: для Full FT на спеціалізованому датасеті — 1e-5 to 5e-5. Для CPT — 1e-5 або нижче.
  • Catastrophic Forgetting: повне оновлення ваг може знищити загальні знання моделі. Мітигується: малим lr, replay буфером (змішування з загальними даними), EWC.

Практичний кейс: повне доопрацювання для фінансового регулятора

Задача

Спеціалізована модель для ЦБ-аналітики — аналіз звітності банків за форматами XBRL, виявлення ознак порушень пруденційних нормативів, генерація приписів.

Чому Full FT, а не LoRA

Специфічна мова регуляторних приписів (юридичні конструкції, посилання на нормативи), нові символьні патерни. LoRA r=64 давав F1=0.79, повне доопрацювання — F1=0.91.

Інфраструктура

8×A100 80GB, DeepSpeed ZeRO Stage 2, bf16.

Датасет

6800 прикладів (форма звітності → аналіз + припис).

Параметри навчання

lr=2e-5, warmup_ratio=0.05, cosine decay, 3 епохи, effective batch size=64.

Результати

  • F1 виявлення порушень: 0.79 (LoRA r=64) → 0.91 (Full FT)
  • ROUGE-L для приписів: 0.61 → 0.74
  • Час навчання: 14 годин на 8×A100

Інфраструктурні вимоги Full Fine-Tuning

Модель GPU (без offload) GPU (ZeRO Stage 3 + CPU) Час (3 епохи, 5K прикладів)
7B 4×A100 40GB 2×A100 40GB 4–8ч
13B 8×A100 40GB 4×A100 40GB 8–16ч
70B 8×A100 80GB 4×A100 80GB 24–48ч
70B 16×H100 80GB 8×H100 80GB 12–24ч

Що входить у проєкт

  • Аудит поточної моделі та датасету, рекомендації щодо стратегії доопрацювання.
  • Налаштування розподіленого навчання (DeepSpeed/FSDP) під вашу інфраструктуру.
  • Розробка пайплайну підготовки даних, включаючи розмітку та аугментацію.
  • Проведення навчання з моніторингом метрик та logging в Weights & Biases.
  • Оцінка якості, A/B-тестування та деплой оптимізованої моделі.
  • Документація та навчання вашої команди роботі з моделлю.

Строки проєкту

  • Аудит та планування: 1–2 тижні
  • Підготовка інфраструктури: 1 тиждень
  • Підготовка даних: 2–6 тижнів
  • Навчання та ітерації: 2–4 тижні
  • Оцінка, A/B, деплой: 1–2 тижні
  • Разом: 7–15 тижнів

Вартість проєкту визначається після аналізу обсягу даних та конфігурації. Оцінимо ваш проєкт та запропонуємо оптимальне рішення. Зв'яжіться з нашими інженерами для консультації.

Наш досвід: понад 10 років у NLP та 50+ проєктів з доопрацювання LLM. Гарантуємо прозорий процес та досягнення цільових метрик.