Дообучение (Fine-Tuning) Llama: on-premise, LoRA, QLoRA

Дообучение (Fine-Tuning) языковой модели Llama (Meta)

Направления 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

Дообучение (Fine-Tuning) языковой модели Llama (Meta)

Представьте: ваша компания обрабатывает тысячи юридических документов. Вы хотите автоматизировать извлечение данных с точностью 95%. GPT-4o справляется, но стоимость API растёт с объёмом токенов. Решение — дообучение Llama 3.1 on-premise. Вы получаете файлы весов, разворачиваете модель на своей инфраструктуре и дообучаете без ограничений API.

Мы — команда AI/ML инженеров с 5+ лет опыта в fine-tuning открытых моделей (Transformer, GPT, LLaMA). Предоставляем услугу под ключ: от анализа ваших данных до деплоя модели в production. Оцените экономию — self-hosted инференс на Llama 3.1 8B обходится в 10–15 раз дешевле аналогичного по качеству вызова OpenAI API при высоких нагрузках.

Модельный ряд Llama 3.x

Модель Параметры VRAM (fp16) Применение
Llama 3.2 1B 1B 2 GB Edge, встроенные системы
Llama 3.2 3B 3B 6 GB Мобильные, лёгкие агенты
Llama 3.1 8B 8B 16 GB Общие задачи, fine-tuning
Llama 3.1 70B 70B 140 GB Сложные задачи, конкурентен GPT-4
Llama 3.1 405B 405B 800+ GB State-of-the-art, multi-GPU

Для большинства задач fine-tuning оптимален Llama 3.1 8B или 70B. Первый обучается на одной A100 80GB, второй требует 2–4 GPU.

Почему стоит выбрать Llama для on-premise развертывания?

В отличие от GPT-4o или Claude, вы получаете файлы весов. Можете развернуть модель на своей инфраструктуре и дообучать без ограничений API. Это даёт полный контроль над данными. По нашим оценкам, self-hosted инференс на Llama 3.1 8B обходится в 10–15 раз дешевле. Сравнение с аналогичным по качеству вызовом OpenAI API. Особенно заметна разница при высоких нагрузках. Кроме того, мы имеем сертифицированных специалистов и опыт внедрения в индустриях с жёсткими требованиями к безопасности.

Методы дообучения

Метод Параметры VRAM (8B) VRAM (70B) Качество
Full Fine-Tuning все веса 80 GB 560 GB max
LoRA (rank=16) 0.1% весов 16 GB 140 GB ~98% от full
QLoRA (4-bit) 0.1% весов 12 GB 48 GB ~95% от full

Full Fine-Tuning обновляет все веса — максимальное качество, но требует больших ресурсов. LoRA (Low-Rank Adaptation) (Hu et al., 2021) обновляет только низкоранговые адаптеры поверх замороженных весов. QLoRA дополнительно квантизирует базовую модель до 4-bit. Для 95% задач достаточно LoRA или QLoRA: они дают качество, близкое к полному обучению, при затратах в 5–15%.

Какой target_modules выбрать для LoRA?

Параметр target_modules определяет, какие слои получат LoRA-адаптеры. В Llama 3 архитектура — трансформер с GQA (Grouped Query Attention). Типичные цели:

  • q_proj, k_proj, v_proj, o_proj — attention слои (минимальный набор)
  • gate_proj, up_proj, down_proj — MLP слои (добавляет выразительность)
  • Все 6 вместе — максимальное качество, больше параметров адаптера

LoRA rank r определяет размер адаптера: r=8 даёт ~0.1% дополнительных параметров, r=64 — ~0.8%. Для специализации стиля достаточно r=8–16, для сложных задач извлечения знаний — r=32–64.

Техстек: TRL + PEFT + Hugging Face

Основной инструментарий — библиотека trl в паре с peft. Пример конфигурации QLoRA:

from datasets import load_dataset from trl import SFTTrainer, SFTConfig from peft import LoraConfig, get_peft_model from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig import torch # QLoRA конфигурация bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16, ) model = AutoModelForCausalLM.from_pretrained( "meta-llama/Meta-Llama-3.1-8B-Instruct", quantization_config=bnb_config, device_map="auto" ) lora_config = LoraConfig( r=16, lora_alpha=32, target_modules=["q_proj", "v_proj", "k_proj", "o_proj"], lora_dropout=0.05, task_type="CAUSAL_LM" ) model = get_peft_model(model, lora_config) trainer = SFTTrainer( model=model, args=SFTConfig( output_dir="./llama3-finetuned", num_train_epochs=3, per_device_train_batch_size=4, gradient_accumulation_steps=4, learning_rate=2e-4, bf16=True, logging_steps=10, ), train_dataset=dataset["train"], ) trainer.train() 

Практический пример: юридический ассистент

Задача: дообучить Llama 3.1 8B для анализа российских арбитражных решений и извлечения структурированных данных (стороны, предмет спора, решение суда, сумма).

Датасет: 3200 пар (текст решения → JSON). Данные получены из публичной базы kad.arbitr.ru с ручной аннотацией 20% и синтетической разметкой GPT-4o для остальных (с ручной верификацией выборки).

Инфраструктура: одна A100 80GB, обучение 4 часа (3 эпохи). Результаты:

  • F1 извлечения суммы иска: 0.58 → 0.91
  • Точность определения инициатора (истец/ответчик): 82% → 97%
  • Token generation speed: 47 tok/s (vLLM, A100)
  • Стоимость инференса vs GPT-4o API: в 12 раз ниже при self-hosted
Детали построения датасета

Исходные тексты решений (PDF) конвертировали в Markdown через pdfminer.six. Затем разбили на chunks по 512 токенов с overlap 64. Для парсинга JSON использовали Pydantic. 20% размечено вручную двумя аннотаторами (Cohen's kappa = 0.89). Остальное — синтетика через GPT-4o с последующей верификацией случайной выборки.

Инференс дообученной модели

После обучения LoRA-адаптер можно:

  1. Использовать отдельно (PEFT inference): загружать базовую модель + адаптер
  2. Слить в одну модель (merge_and_unload()): упрощает деплой, убирает overhead PEFT
  3. Квантизировать после merge: GGUF через llama.cpp, AWQ через autoawq, GPTQ — для снижения требований к VRAM
# Слияние адаптера с базовой моделью merged_model = model.merge_and_unload() merged_model.save_pretrained("./llama3-merged") tokenizer.save_pretrained("./llama3-merged") 

Для продакшн-деплоя используем vLLM — он даёт PagedAttention и continuous batching, увеличивая throughput в 2–5× по сравнению с наивным инференсом через transformers.

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

  • Подготовка данных (сбор, очистка, аннотация, аугментация)
  • Выбор модели и метода fine-tuning
  • Обучение и валидация (метрики, тесты, бейзлайн)
  • Слияние адаптера, квантизация и оптимизация инференса
  • Деплой на вашей инфраструктуре (vLLM, TGI, llama.cpp)
  • Документация и обучение вашей команды
  • Гарантия поддержки 1 месяц после сдачи

Сроки и инфраструктура

  • Подготовка данных и разметка: 2–6 недель
  • Обучение (8B, LoRA, A100): 2–8 часов
  • Обучение (70B, QLoRA, 2×A100): 12–48 часов
  • Оценка и итерации: 1–2 недели
  • Деплой с vLLM/TGI: 3–5 дней

Итого от старта до продакшна: 4–10 недель

Как оценить эффективность дообученной модели?

Используйте метрики в зависимости от задачи: для генерации — ROUGE, BLEU, F1; для QA — точность, полнота; для инструкций — human eval или LLM-as-judge. Мы закладываем этап A/B-тестирования: сравниваем дообученную модель с бейзлайном (API или базовая Llama) на репрезентативной выборке. Закажите консультацию — мы поможем определить метрики для вашего кейса.

Почему выбирают нас

5+ лет коммерческого опыта в NLP и Computer Vision. 30+ успешных проектов fine-tuning для клиентов из финтеха, юриспруденции и медицины. Сертифицированные специалисты по Hugging Face, PyTorch, Triton Inference Server. Мы работаем с локальными инсталляциями, гарантируем конфиденциальность данных и предоставляем полную документацию.

Заинтересованы? Свяжитесь с нами, чтобы обсудить ваш проект и получить предварительную оценку. Мы поможем внедрить Llama в вашу инфраструктуру с максимальной отдачей.