Aivaro
  • Оглавление
  • Вопросы
  • Практика
  • Вики
  • Материалы сообщества
  • Тесты
  • Поиск
✈Telegram @ai_varo
RUEN中文
…
Оглавление/Вопросы/#973

Какие фреймворки для fine-tuning вы используете? (Hugging Face PEFT, Unsloth, Axolotl, LLaMA-Factory)

1. Hugging Face PEFT: стандарт (LoRA, IA³)

Hugging Face PEFT — де-факто стандартный набор инструментов для параметро-эффективной донастройки. Основные методы:

МетодСутьКогда использовать
LoRAНизкоранговые адаптеры к матрицам весовПрактически любой fine-tuning
IA³Умножение на обучаемые векторы (infused adapter)Лёгкая адаптация, малый бюджет параметров
AdaLoRAАвтоматическое распределение рангаКогда нужно оптимальное качество
Prefix TuningОбучаемые префиксы к скрытым состояниямГенеративные задачи без изменения весов

PEFT тесно интегрирован с Transformers и Accelerate, что позволяет применять его в любых пайплайнах.

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import get_peft_model, LoraConfig, TaskType

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-1B")
lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type=TaskType.CAUSAL_LM
)
model = get_peft_model(model, lora_config)

Плюсы:

  • Поддержка любой модели из Model Hub.
  • Гибкость в комбинировании адаптеров.

Минусы:

  • Скорость обучения неоптимальна на крупных моделях.
  • Нужно самостоятельно писать сценарии обучения.

2. Unsloth: очень быстрый (2x+)

Unsloth — оптимизированная тонкая настройка с ускорением до 2.5× и снижением памяти в 2 раза. Достигается за счёт ручного написания ядер CUDA для операций LoRA и квантизации.

ОсобенностьЗначение
Поддерживаемые методыLoRA, QLoRA, FFT (полная настройка)
Квантизация4-bit, 8-bit через BitsAndBytes
Ускорение обучения1.7×…2.5×
Экономия памятидо 50% на весах адаптеров

Пример использования:

from unsloth import FastLanguageModel
import torch

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="unsloth/Llama-3.2-1B",
    max_seq_length=2048,
    dtype=None,
    load_in_4bit=True,
)
model = FastLanguageModel.get_peft_model(
    model,
    r=16,
    target_modules=["q_proj", "v_proj"],
    lora_alpha=32,
    use_gradient_checkpointing="unsloth",  # специализированная реализация
)

Ключевые преимущества:

  • Интеграция с TRL (SFTTrainer).
  • Сохранение совместимости с llama.cpp после конвертации.

Минусы:

  • Ограниченный набор моделей (оптимизировано под Llama, Mistral, Gemma).
  • Меньше сообщество, чем у Hugging Face.

3. Axolotl: конфиги, production-ready

Axolotl — инструмент для воспроизводимого fine-tuning на основе YAML-конфигураций. Он абстрагирует большую часть ручного кода, предоставляя единый пайплайн: загрузка датасета → предобработка → обучение → сохранение.

Пример конфигурации config.yml:

base_model: mistralai/Mistral-7B-v0.3
model_type: MistralForCausalLM
tokenizer_type: LlamaTokenizer

load_in_8bit: false
load_in_4bit: true
strict: false

datasets:
  - path: ./data/train.jsonl
    type: alpaca
dataset_prepared_path: last_run_prepared
val_set_size: 0.05

output_dir: ./axolotl-out

sequence_len: 2048
sample_packing: true

lora_r: 16
lora_alpha: 32
lora_dropout: 0.05
lora_target_modules:
  - q_proj
  - v_proj

train_on_inputs: false
group_by_length: false
gradient_accumulation_steps: 4
micro_batch_size: 2
num_epochs: 3
optimizer: adamw_bnb_8bit
lr_scheduler: cosine
learning_rate: 2e-4

wandb_project: my-finetune
wandb_watch: gradients

Запуск: accelerate launch -m axolotl.cli.train config.yml.

Плюсы:

  • Воспроизводимость благодаря единому конфигу.
  • Поддержка DeepSpeed, FSDP, Flash Attention 2.
  • Встроенные рецепты для популярных моделей.

Минусы:

  • Большие накладные расходы на установку зависимостей.
  • Меньше гибкости для нестандартных архитектур.

4. LLaMA-Factory: UI, много моделей

LLaMA-Factory — фреймворк с веб-интерфейсом на Gradio, поддерживающий более 100 моделей (Llama, Mistral, Qwen, DeepSeek, ChatGLM) и множество методов PEFT: LoRA, QLoRA, DoRA, GaLore, LoRA+.

ВозможностьОписание
UIВеб-форма для загрузки датасета, выбора модели и гиперпараметров
CLIСкрипты для автоматизации
Поддерживаемые задачиSFT, DPO, PPO, Reward Modelling
ЭкспортGGUF, Llama.cpp, vLLM
ДашбордМониторинг метрик через Wandb/TensorBoard

Пример CLI-запуска:

llamafactory-cli train \
    --model_name_or_path Qwen/Qwen2.5-0.5B \
    --dataset alpaca_zh \
    --finetuning_type lora \
    --output_dir ./qwen-lora

Плюсы:

  • Низкий порог входа: веб-интерфейс позволяет обучать без программирования.
  • Обширная библиотека моделей и датасетов.

Минусы:

  • Обучение через UI менее гибкое, чем конфиги или код.
  • Меньше оптимизации для продакшена, чем Axolotl.

5. Пет-проект для закрепления

Задача: Обучить PEFT-модель для генерации кратких описаний товаров с помощью разных фреймворков и сравнить скорость и качество.

Инструменты:

  • Python 3.10+
  • Hugging Face PEFT, Unsloth, Axolotl, LLaMA-Factory
  • Датасет: yahma/alpaca-cleaned (субсэмпл 500 примеров)
  • Базовая модель: unsloth/Llama-3.2-1B

Шаги:

  1. Подготовить датасет в едином формате (JSONL с полями instruction/input/output).
  2. Настроить обучение через PEFT (Trainer), замерить время и perplexity.
  3. Повторить с Unsloth, используя FastLanguageModel и SFTTrainer.
  4. Создать конфиг Axolotl с теми же гиперпараметрами, запустить accelerate launch.
  5. Загрузить датасет в LLaMA-Factory UI, выполнить обучение.
  6. Собрать метрики: wall-time, потребление VRAM, loss на валидации.

Ожидаемый результат:

  • Unsloth покажет наименьшее время (примерно 1.8× быстрее PEFT) при сопоставимом качестве.
  • Axolotl обеспечит воспроизводимость и простоту переключения моделей.
  • LLaMA-Factory продемонстрирует удобство для быстрых прототипов.

Связь с другими вопросами

ВопросТема
33. Архитектура transformerAttention, блоки энкодера/декодера
972LoRA, QLoRA, IA³, DoRA
974Soft prompts, Prefix tuning

Навигация

  • Предыдущий: 972
  • Следующий: 974
  • Индекс: 00. Индекс разборов