Какие фреймворки для 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
Шаги:
- Подготовить датасет в едином формате (JSONL с полями instruction/input/output).
- Настроить обучение через PEFT (Trainer), замерить время и
perplexity. - Повторить с Unsloth, используя
FastLanguageModelиSFTTrainer. - Создать конфиг Axolotl с теми же гиперпараметрами, запустить
accelerate launch. - Загрузить датасет в LLaMA-Factory UI, выполнить обучение.
- Собрать метрики: wall-time, потребление VRAM, loss на валидации.
Ожидаемый результат:
- Unsloth покажет наименьшее время (примерно 1.8× быстрее PEFT) при сопоставимом качестве.
- Axolotl обеспечит воспроизводимость и простоту переключения моделей.
- LLaMA-Factory продемонстрирует удобство для быстрых прототипов.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 33. Архитектура transformer | Attention, блоки энкодера/декодера |
| 972 | LoRA, QLoRA, IA³, DoRA |
| 974 | Soft prompts, Prefix tuning |
Навигация
- Предыдущий: 972
- Следующий: 974
- Индекс: 00. Индекс разборов