Free-LLMs

Инструменты для дообучения LLM: Unsloth, Axolotl, PEFT и TRL

Сравнение Unsloth, Axolotl, PEFT и TRL и минимальный рабочий путь LoRA/QLoRA.

Fine-tuning
Unsloth, Axolotl, TRL
🤖
Мониторинг бесплатных моделей в Telegram Бот @freellms_bot присылает новые бесплатные модели и AI-акции.
→

Для первого дообучения LLM проще всего взять TRL с PEFT: это стандартный стек Hugging Face, и весь запуск LoRA или QLoRA умещается в один скрипт. Unsloth удобен, когда нужно быстро стартовать на одной видеокарте или в ноутбуке, а Axolotl, когда вы хотите описывать обучение YAML-файлом и масштабировать на несколько GPU. Это не конкуренты в чистом виде: Unsloth строится поверх Transformers, PEFT и TRL, а PEFT и TRL лежат в основе большинства остальных. Ниже сравнение, версии на 25 октября 2026 года и минимальные рабочие примеры.

Кто за что отвечает

  • PEFT: библиотека адаптеров (LoRA и другие методы). Замораживает базовую модель и добавляет небольшие обучаемые матрицы. Сама не обучает: ей нужен тренер.
  • TRL: тренеры для SFT, DPO, GRPO и других постобучающих методов поверх Transformers. SFTTrainer принимает peft_config и quantization_config, то есть собирает LoRA и QLoRA в одном месте.
  • bitsandbytes: 4-битная и 8-битная загрузка модели, на которой стоит QLoRA.
  • Unsloth: фреймворк для дообучения и RL с собственными ядрами, плюс десктопное приложение и веб-интерфейс Studio.
  • Axolotl: конфигурируемая обвязка, где датасет, адаптер, оптимизатор и распределённая схема задаются в YAML, а запуск идёт командой axolotl train.

Чтобы понять, зачем всё это, вспомните идею LoRA: веса базовой модели замораживаются, а в слои добавляются обучаемые матрицы малого ранга, что по статье Hu и соавторов сокращает число обучаемых параметров и память по сравнению с полным дообучением. QLoRA идёт дальше: базовая модель хранится в 4-битном формате NF4, а градиенты проходят через неё в адаптеры, что позволило авторам дообучать модель на 65B на одной карте 48 ГБ.

Сравнение

TRL + PEFTUnslothAxolotl
Версия на PyPItrl 1.16.0 (15.10.2026), peft 0.21.2 (01.10.2026)unsloth 2026.10.8 (23.10.2026)axolotl 0.21.0 (16.10.2026)
ЛицензияApache-2.0Apache-2.0 для ядра; интерфейс Studio под AGPL-3.0Apache-2.0
ИнтерфейсPython-кодPython-код, ноутбуки, Studio и десктоп-приложениеYAML и CLI
Python3.11 и новееот 3.9 до 3.143.12 и новее
ОборудованиеТо, что поддерживает PyTorch и Transformers; для QLoRA нужен bitsandbytesWindows, Linux, WSL, macOS; NVIDIA, AMD, Intel, CPU по заявлению проектаNVIDIA Ampere и новее или AMD; на Windows рекомендуют WSL2 или Docker
Мульти-GPUЧерез Accelerate, DeepSpeed, FSDPЗаявлена поддержка нескольких GPUDeepSpeed, FSDP, мульти-нод в документации
Сложность запускаНизкая для одной карты, больше ручной работы для больших схемНизкая: готовые ноутбуки и приложениеСредняя: нужно строгое окружение (Python, PyTorch, CUDA), зато проще воспроизвести через конфиг
Сильная сторонаПрозрачность, методы DPO и GRPO, совместимость с экосистемой HFНизкий порог входа: готовые ноутбуки, приложение и StudioКонфиг как артефакт эксперимента, упаковка, экспорт в GGUF

Данные из таблицы взяты со страниц trl, репозитория Unsloth и установки Axolotl. Документация TRL приводит заявление Unsloth об ускорении до 2 раз и экономии до 70 процентов VRAM; это цифры проекта для его собственных сценариев, поэтому на своей модели и данных их нужно мерить, а не ждать автоматически.

Какие модели можно обучать

Все три инструмента работают с архитектурами из Transformers, но поддержка новых семейств появляется с разной скоростью. На главной странице Unsloth в качестве поддерживаемых названы Qwen3.8, GLM-5.3-Flash, Kimi K3, Gemma 4, DeepSeek-V4; в новостях Axolotl за сентябрь 2026 отмечена поддержка Qwen3.6 и Qwen3.8-Flash-Next. Перед выбором откройте список поддержки инструмента и проверьте именно вашу модель и версию.

Помните про размер. Модель вроде Qwen3.8 27B влезает в QLoRA на одной карте с большим объёмом памяти, а MoE с сотнями миллиардов параметров требует несколько GPU и узкоспециализированных конфигов. Для первого эксперимента берите модель на 0,5-8B: цикл обучения в десятки минут, ошибки в датасете видны сразу. Как считать память, показано в статье про выбор размера LLM.

Минимальный путь: TRL + PEFT, QLoRA

Установка (Linux или WSL, Python 3.11+, видеокарта NVIDIA):

python -m venv .venv && source .venv/bin/activate
pip install torch
pip install -U trl peft bitsandbytes datasets

Скрипт train_qlora.py. Модель и датасет взяты из примеров документации TRL; замените их на свои.

import torch
from datasets import load_dataset
from peft import LoraConfig
from transformers import BitsAndBytesConfig
from trl import SFTConfig, SFTTrainer

MODEL = "Qwen/Qwen3-0.6B"            # для проверки пайплайна; затем замените на свою базу

bnb = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_use_double_quant=True,
    bnb_4bit_compute_dtype=torch.bfloat16,
)

lora = LoraConfig(
    r=16,
    lora_alpha=32,
    lora_dropout=0.05,
    target_modules="all-linear",      # как в QLoRA: адаптеры на все линейные слои
    task_type="CAUSAL_LM",
)

dataset = load_dataset("trl-lib/Capybara", split="train[:2000]")

args = SFTConfig(
    output_dir="./out/qlora-demo",
    per_device_train_batch_size=2,
    gradient_accumulation_steps=8,
    learning_rate=1e-4,              # для адаптеров обычно выше, чем для полного обучения
    num_train_epochs=1,
    bf16=True,
    gradient_checkpointing=True,
    logging_steps=10,
    save_strategy="epoch",
)

trainer = SFTTrainer(
    model=MODEL,
    args=args,
    train_dataset=dataset,
    peft_config=lora,
    quantization_config=bnb,
)
trainer.train()
trainer.save_model("./out/qlora-demo/adapter")

Что здесь важно. Для LoRA без квантования уберите quantization_config и обучайте в bf16. Если данные в формате «промпт и ответ», по умолчанию потери считаются только на ответе (документация SFTTrainer), а для диалогов с ролями есть assistant_only_loss=True. Значение target_modules="all-linear" в документации PEFT соответствует подходу QLoRA, где адаптеры стоят на всех линейных слоях, а не только на query и value. Параметр max_length и другие поля SFTConfig могут отличаться между версиями, поэтому при ошибке сверяйтесь с документацией установленной версии.

Чтобы использовать адаптер, подгрузите его поверх базы или слейте с ней:

from peft import AutoPeftModelForCausalLM

model = AutoPeftModelForCausalLM.from_pretrained("./out/qlora-demo/adapter")
merged = model.merge_and_unload()
merged.save_pretrained("./out/merged")

Слитую модель можно конвертировать в GGUF и запустить в llama.cpp или Ollama; про форматы квантования читайте в материале про GGUF.

Тот же путь в Axolotl

Установка по документации проекта (нужны Python 3.12, PyTorch 2.13 и видеокарта NVIDIA Ampere или новее, либо AMD; версию CUDA подберите под свою карту):

curl -LsSf https://astral.sh/uv/install.sh | sh
export UV_TORCH_BACKEND=cu130        # или cu128, по вашей карте
uv venv --python 3.12 && source .venv/bin/activate
uv pip install torch==2.14.0 torchvision
uv pip install --no-build-isolation "axolotl[deepspeed]"
axolotl fetch examples

Конфиг qlora.yml, взятый из примера examples/llama-3/qlora-1b.yml репозитория Axolotl:

base_model: NousResearch/Llama-3.2-1B

load_in_8bit: false
load_in_4bit: true
adapter: qlora

datasets:
  - path: teknium/GPT4-LLM-Cleaned
    type: alpaca
dataset_prepared_path: last_run_prepared
val_set_size: 0.1
output_dir: ./outputs/qlora-out

sequence_len: 2048
sample_packing: true
eval_sample_packing: true

lora_r: 32
lora_alpha: 16
lora_dropout: 0.05
lora_target_modules:
  - gate_proj
  - down_proj
  - up_proj
  - q_proj
  - v_proj
  - k_proj
  - o_proj

gradient_accumulation_steps: 4
micro_batch_size: 2
num_epochs: 1
optimizer: adamw_bnb_8bit
lr_scheduler: cosine
learning_rate: 0.0002
bf16: auto
gradient_checkpointing: true
attn_implementation: flash_attention_2
warmup_ratio: 0.1
evals_per_epoch: 4
saves_per_epoch: 1
special_tokens:
  pad_token: " "

Запуск и дальнейшие шаги (быстрый старт):

axolotl train qlora.yml
axolotl inference qlora.yml --lora-model-dir="./outputs/qlora-out"
axolotl merge-lora qlora.yml --lora-model-dir="./outputs/qlora-out"

Слитая модель окажется в outputs/qlora-out/merged. Axolotl также умеет экспортировать в GGUF командой axolotl export (по новостям проекта за сентябрь 2026). Для замены датасета меняйте блок datasets и его type под формат ваших данных, а для полного обучения уберите строки adapter и load_in_4bit. Если Flash Attention не установлен или карта старше Ampere, замените attn_implementation на sdpa.

Где Unsloth

Unsloth ставится через pip install unsloth или uv pip install unsloth --torch-backend=auto, а на Windows сначала нужно поставить torchao. Он же предлагает готовые ноутбуки для Colab и Kaggle и приложение с веб-интерфейсом. Там задаются те же параметры: max_seq_length, load_in_4bit для QLoRA, load_in_16bit для LoRA в 16 битах, full_finetuning для полного обучения; в руководстве проекта для старта рекомендуют QLoRA на Instruct-моделях и предупреждают, что прыгать сразу в полное дообучение не стоит. Если ваш процесс уже построен на TRL, Unsloth подключается как ускоряющая прослойка без смены тренера. Помните про лицензию: ядро под Apache-2.0, а часть для интерфейса Studio под AGPL-3.0, что важно, если вы встраиваете её в закрытый продукт.

Как выбрать

  • Один эксперимент на одной карте или в Colab: Unsloth или чистый TRL.
  • Воспроизводимость и командная работа: Axolotl, где весь эксперимент описан одним файлом, который можно положить в репозиторий.
  • Нестандартные методы (DPO, GRPO, своя функция потерь) и полный контроль над циклом: TRL.
  • Windows без WSL: Unsloth заявляет поддержку, для Axolotl проект рекомендует WSL2 или Docker.

Перед любым запуском решите, нужно ли обучение вообще: промпт, RAG или fine-tuning. А после обучения сравните адаптер с базовой моделью на своих запросах, как в статье про сравнение LLM.

Итого

  • Для старта: TRL SFTTrainer + PEFT LoRA + bitsandbytes 4-bit, около 50 строк кода.
  • Версии на 25.10.2026: trl 1.16.0, peft 0.21.2, unsloth 2026.10.8, axolotl 0.21.0, bitsandbytes 0.50.2. Закрепляйте их в requirements.txt, API тренеров меняется между релизами.
  • Начинайте с маленькой модели и 1-2 тысяч примеров, проверьте пайплайн и оценку, только потом берите крупную базу.
  • Слияние адаптера и экспорт в GGUF позволяют запускать результат локально.
FL
Редакция Free-LLMsКоманда каталога бесплатных LLM API. Проверяем лимиты провайдеров и тестируем модели и инструменты руками.

Читайте также