Дообучение (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-адаптер можно:
- Использовать отдельно (PEFT inference): загружать базовую модель + адаптер
- Слить в одну модель (
merge_and_unload()): упрощает деплой, убирает overhead PEFT - Квантизировать после 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 в вашу инфраструктуру с максимальной отдачей.







