Дообучение LLM методом Full Fine-Tuning

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1564 услуг
Дообучение LLM методом Full Fine-Tuning
Сложный
от 1 недели до 3 месяцев
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1347
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1247
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    948
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1183
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    642
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    921

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

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

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

Практический разбор LLM: fine-tuning, RAG, агенты, деплой

Модель GPT‑4 или Claude 3.5 Sonnet через публичное API — не решение, а просто инструмент. Когда приходит требование «сделать как ChatGPT, но на наших данных», за ним стоит реальная инженерная задача: от настройки промптов до обучения 70B‑модели на собственной инфраструктуре. Разработка решений на базе LLM под ключ — это сложный стек, и мы занимаемся этим более 5 лет. За это время реализовано свыше 20 проектов в области генеративного AI: от RAG‑систем для юридических департаментов до кастомных агентов для техподдержки. Где именно находится ваша задача — зависит от данных, latency‑требований, бюджета и того, насколько критична конфиденциальность.

Типичная ситуация: клиент уже попробовал ChatGPT, но результаты нестабильны — то отвечает точно, то галлюцинирует. Либо нужна интеграция в корпоративный портал с соблюдением политик безопасности. Разберём каждый слой стека в деталях — от RAG до production‑деплоя.

Почему RAG‑системы ломаются и как это исправить?

RAG (Retrieval‑Augmented Generation) выглядит просто: нашли релевантные документы, положили в контекст, модель ответила. На практике сбоит в нескольких местах.

Chunking без перекрытия. Классическая ошибка: chunk_size=512, overlap=0. Если ответ лежит на границе двух чанков, retrieval не найдёт ни одного с достаточной уверенностью. Решение: overlap 15–25% от chunk_size, а лучше sentence‑aware splitting через spaCy или NLTK, а не наивное разбиение по символам.

Плохой embedder. Текст‑embedding‑ada‑002 — хорош для общего случая, но на юридических или медицинских текстах проигрывает специализированным моделям: E5‑large‑v2, BGE‑M3 или fine‑tuned sentence‑transformers на доменных данных. Разница в Recall@5 может составлять 15–25%.

Отсутствие re‑ranking. Векторный поиск оптимизирован по скорости, не по релевантности. Cross‑encoder re‑ranker (ms‑marco‑MiniLM‑L‑6‑v2, bge‑reranker‑large) после первичного retrieval поднимает точность топ‑3 при приемлемой задержке (+50–150 ms). Это часто важнее улучшения embedding‑модели.

Гибридный поиск. Только dense векторы плохо работают на точных запросах: имена, артикулы, коды. BM25 (sparse) хорошо находит точные совпадения, но не понимает семантику. Гибрид через RRF (Reciprocal Rank Fusion) — оптимальный компромисс. Qdrant, Weaviate и pgvector 0.7+ поддерживают гибридный поиск нативно.

Типичная production‑архитектура корпоративного knowledge base
  1. Документы → preprocessing (PyMuPDF, Unstructured)
  2. Chunking → embedding (BGE‑M3)
  3. Qdrant (гибридный dense+sparse)
  4. Cross‑encoder re‑ranking
  5. Контекст → LLM (vLLM или OpenAI API)
  6. Ответ с источниками (RAGAS для оценки качества)

Когда стоит fine‑tune, а не промпт‑инжиниринг?

Промпт‑инжиниринг решает ~70% задач адаптации LLM под домен. Оставшиеся 30% требуют дообучения. Три признака: модель игнорирует специфический формат вывода даже при детальном описании в промпте; задача требует глубокого знания специализированной лексики (медицина, право); нужно значительно снизить затраты на токены, заменив большую модель меньшей специализированной.

LoRA и QLoRA — стандарт для SFT. LoRA добавляет trainable low‑rank матрицы к attention‑слоям. Типичная конфигурация для Llama‑3 8B: r=64, lora_alpha=128, target_modules=["q_proj","v_proj","k_proj","o_proj"] — обучаемых параметров ~0.8%, обучение на одной A100 40GB. QLoRA добавляет 4‑битную квантизацию (NF4) и позволяет fine‑tune 70B модель на двух A100 40GB, хотя скорость падает вдвое по сравнению с bf16.

DPO вместо RLHF. Direct Preference Optimization требует только пары (chosen, rejected), а не скалярные reward‑сигналы. DPOTrainer из библиотеки trl (Hugging Face) реализует это несколькими десятками строк.

Типичная ошибка. Датасет из 500 примеров, 5 эпох, validation loss 0.8 — кажется норм. Но на тесте модель деградировала на общих инструкциях. Причина: catastrophic forgetting. Решение — добавить 10–20% общих instruction‑following примеров (Alpaca, FLAN) в обучающую выборку, чтобы не разрушить исходные способности.

Как выбрать базовую модель: 8B или 70B?

Модель Параметры Сильные стороны Контекст
Llama‑3.1 8B 8B Баланс качество/скорость 128k
Llama‑3.1 70B 70B Сложные рассуждения 128k
Mistral 7B / Mixtral 8x7B 7B / 47B Эффективность на размер 32k
Qwen2.5 72B 72B Код, мультиязычность 128k
Gemma 2 27B 27B Открытая лицензия 8k

Для большинства задач fine‑tuning 8B модели достаточно. 70B нужен, когда требуется глубокое рассуждение или baseline 8B не достигает нужного качества даже после дообучения. Стоимость инференса Llama‑3 8B через vLLM на A100 — около $0.001/1K токенов, что в 15 раз дешевле GPT‑4.

Что даёт PagedAttention в production?

vLLM — первый выбор для serving open‑source моделей. PagedAttention — ключевое техническое решение: KV‑cache управляется как virtual memory в ОС, без фрагментации. Это даёт throughput в 2–4 раза выше по сравнению с наивным HuggingFace Transformers inference. Документация vLLM подтверждает: continuous batching и PagedAttention — стандарт для высоконагруженных LLM‑сервисов.

Типичные числа на A100 80GB для Llama‑3 8B (bf16): 400–600 req/s, P50 latency 200–400ms, P99 latency 600–900ms при concurrency 64. Для 70B на двух A100 с tensor parallelism: 80–120 req/s, P99 latency 1.5–2.5s. Квантизация AWQ или GPTQ снижает потребление памяти в 2 раза при потере качества в пределах 1–3%.

Мультиагентные системы

Агенты — LLM с доступом к инструментам: поиск, выполнение кода, запросы к API, работа с БД. Основные паттерны:

  • ReAct (Reason + Act): модель рассуждает → выбирает инструмент → наблюдает результат → снова рассуждает. LangChain и LlamaIndex реализуют из коробки.
  • Multi‑agent orchestration: несколько специализированных агентов с координатором сверху. Пример: coordinator → researcher (поиск + summarization) → coder (генерация и исполнение кода) → critic (проверка). Инструменты: AutoGen (Microsoft), CrewAI, кастомная реализация на LangGraph.

В продакшене агентные системы недетерминированы. Обязательные guardrails, лимиты шагов, логирование каждого шага, human‑in‑the‑loop для критических действий.

Как мы работаем: этапы, сроки, результат

Этап Длительность Что получаете
Аудит и сбор данных 1–2 нед. Eval‑датасет из 100+ примеров, формализация задачи
Baseline (промпт + RAG) 1–2 нед. Рабочий прототип, метрики качества
Fine‑tuning (если нужно) 2–4 нед. Обученная модель, LoRA‑веса, model card
Деплой и мониторинг 1–2 нед. vLLM сервер, Grafana + Prometheus
Документация и обучение 1 нед. API‑документация, обучение команды

Что входит в работу

Мы передаём:

  • Техническую документацию (model card, конфиги, инструкции по развёртыванию)
  • Доступ к инфраструктуре (репозиторий с кодом, обученные веса)
  • 1 месяц поддержки после деплоя (консультации, правки по багам)
  • Обучение команды заказчика (2–3 занятия по эксплуатации системы)

Сроки: базовый RAG‑прототип — 1–2 недели. Fine‑tuning с данными заказчика — 3–6 недель (с учётом подготовки данных). Production‑система с мониторингом и переобучением — 2–4 месяца. Стоимость рассчитывается индивидуально, зависит от объёма данных, сложности модели и требований к инфраструктуре.

Хотите оценить свой проект? Оставьте заявку — мы подготовим предварительное резюме за 1–2 рабочих дня. Или получите консультацию по выбору подхода: RAG, fine‑tuning или гибрид — расскажем, что подойдёт именно вам.