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

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Дообучение (Fine-Tuning) языковой модели Llama (Meta)
Сложная
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

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

Llama 3.x — семейство открытых языковых моделей Meta, доступных для коммерческого использования и полного контроля над весами. В отличие от GPT-4o или Claude, вы получаете файлы весов, можете развернуть модель на своей инфраструктуре и дообучать без ограничений API. Это делает Llama приоритетным выбором для задач с требованиями к конфиденциальности данных, on-premise деплою и большому объёму инференса.

Модельный ряд 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.

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

Full Fine-Tuning: обновляются все веса. Максимальное качество, но требует значительных вычислительных ресурсов. Для 8B модели — минимум одна A100 80GB, для 70B — 4×A100 или 8×A6000.

LoRA / QLoRA: обновляются только низкоранговые адаптеры, добавленные поверх замороженных весов. QLoRA дополнительно квантизирует базовую модель до 4-bit, позволяя обучать 70B на двух A100 40GB. Качество близко к full fine-tuning при 5–15% задач.

Instruction Tuning: специализированный вариант supervised fine-tuning для адаптации к формату инструкций. Важен при обучении с нуля на domain-specific данных.

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

Основной инструментарий — библиотека trl (Transformer Reinforcement Learning) в паре с peft:

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()

Глубокий разбор: выбор 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.

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

Задача: дообучить 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

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

После обучения 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.

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

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