Дообучение 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 недель

Стоимость проекта — от $4.5k–6.5k, точная цена зависит от объёма данных и конфигурации. Оценим ваш проект и предложим оптимальное решение. Свяжитесь с нашими инженерами для консультации.

Наш опыт: более 10 лет в NLP и 50+ проектов по дообучению LLM. Гарантируем прозрачный процесс и достижение целевых метрик.