Unsloth против Axolotl, TRL и LLaMA-Factory: сравнение фреймворков для дообучения LLM по скорости, VRAM и масштабированию на нескольких GPU
Ключевые выводы
- •Unsloth обеспечивает до 2x скорости обучения на одном GPU благодаря вручную написанным ядрам Triton, а преимущество усиливается для моделей Mixture-of-Experts вроде gpt-oss-20b, где он достиг 7.3x ускорения относительно Transformers v5 при контексте 8K.
- •Axolotl предоставляет наиболее полную поддержку multi-GPU параллелизма, сочетая data, tensor, context и expert parallelism через PyTorch DeviceMesh, тогда как multi-GPU возможности Unsloth остаются ограниченными и требуют ручной настройки.
- •LLaMA-Factory не пишет собственные ядра, а делегирует оптимизации другим фреймворкам через флаги конфигурации; его путь FSDP+QLoRA позволяет дообучать модели 70B на двух 24 GB GPU — это самый дешевый задокументированный маршрут в сравнении.
- •TRL работает как базовый слой API тренеров, который Axolotl и LLaMA-Factory вызывают внутренне, предоставляя корректные примитивы вместо настроенных defaults и требуя от пользователей собственных конфигураций параллелизма и оптимизации памяти.
- •Четыре фреймворка заметно сближаются по сильным сторонам: Unsloth добавляет multi-GPU поддержку, LLaMA-Factory интегрирует backend Megatron-core, а Axolotl внедряет оптимизации на уровне ядер, вдохновленные Unsloth.

Сегодня в дообучении больших языковых моделей доминируют четыре open-source проекта: Unsloth, Axolotl, TRL и LLaMA-Factory. Все четыре используют один и тот же базовый стек PyTorch и Hugging Face, но различаются тем, на чем сосредоточены их инженерные усилия. Unsloth переписывает ядра ради максимальной скорости. Axolotl фокусируется на компонуемых стратегиях параллелизма. TRL определяет API тренеров, на которых строятся остальные. LLaMA-Factory делает приоритетом широкий охват моделей и работу без написания кода.
По мере того как модели с открытыми весами от Meta, Alibaba, Google и других компаний сокращают разрыв в качестве с проприетарными API, предприятия все чаще дообучают модели локально, а не платят повышенную цену за каждый токен. Это превращает уровень фреймворка в прямой рычаг управления затратами, поскольку GPU-часы остаются основной статьей расходов в любом пайплайне кастомизации.
В этом сравнении рассматриваются три параметра, с которыми практики регулярно сталкиваются на практике: пропускная способность обучения, пиковое использование VRAM и масштабирование на нескольких GPU.
Обзор фреймворков
TRL служит эталонным слоем реализации. Он поставляет SFTTrainer, DPOTrainer, GRPOTrainer, KTOTrainer, RewardTrainer и RLOOTrainer. И Axolotl, и LLaMA-Factory внутренне обращаются к нему. Текущая стабильная ветка релизов — v1.8.0.
Unsloth заменяет части кода моделирования вручную написанными ядрами Triton. Шаги обратного распространения выводятся вручную, а не генерируются autograd. Собственная публикация Hugging Face отмечает, что деградация точности составляет 0% по сравнению со стандартным QLoRA, поскольку приближения не вводятся.
Axolotl — это управляемая YAML обертка над Transformers, PEFT, TRL, Accelerate и DeepSpeed. Его ключевое отличие — компонуемость стратегий параллелизма, а не оптимизация на уровне ядер.
LLaMA-Factory описан в демонстрационной системной статье ACL 2024 и включает веб-интерфейс Gradio под названием LlamaBoard. Репозиторий покрывает более 100 LLM и VLM.
Скорость
Unsloth: прирост на уровне ядер на одном GPU
Опубликованные бенчмарки Unsloth показывают 2x скорость обучения для Llama 3.1 8B и Llama 3.3 70B. В тестовой конфигурации использовался датасет Alpaca, batch size 2 и gradient accumulation 4. QLoRA запускался с rank 32 на всех линейных слоях.
Результаты для моделей Mixture-of-Experts (MoE) выражены сильнее. Unsloth дообучил unsloth/gpt-oss-20b-BF16 на NVIDIA B200, сообщив 712.33 ms на шаг при контексте 8K против 5,226.86 ms у Transformers v5 — разрыв 7.3x. При контексте 4K разрыв сужается до 4.82x, а при 1K составляет только 1.37x.
Направление тренда зависит от модели. Документация MoE Unsloth ограничивает это конкретное утверждение gpt-oss, где ускорение растет вместе с длиной последовательности; это связывается с Flex Attention и MoE-ядрами.
Qwen3-30B-A3B на B200 демонстрирует обратную картину. Заявленное ускорение падает с 1.7x при контексте 1K до 1.1x при 16K. Экономия памяти движется в противоположном направлении, увеличиваясь примерно с 2% до 15%.
Qwen3-30B-A3B на H100 достигает до 1.77x. GLM-4.7-Flash на RTX PRO 6000 достигает 2.1x. Сотрудничество с AMD измерило Llama-3.1-8B LoRA SFT на уровне 2.07 s/step, тогда как TRL плюс FlashAttention-2 занял 2.87 s/step — разрыв 1.39x при совпадающих кривых loss.
Axolotl: заимствованные ядра, нативный параллелизм
В феврале 2025 года Axolotl добавил собственные ядра Triton и функции autograd для LoRA, прямо указав Unsloth как источник вдохновения. Они включаются опционально через lora_mlp_kernel, lora_qkv_kernel и lora_o_kernel.
Недавние примечания к релизам добавили поддержку SonicMoE LoRA, обеспечивающую до 1.45x ускорения и 30% сокращения памяти по сравнению с baseline grouped_mm для Qwen3.5-35B-A3B 8-bit LoRA на одном H100 SXM.
Axolotl также поставляет FlashAttention 2/3/4, xFormers, Flex Attention, SageAttention, Liger Kernel, Cut Cross Entropy и ScatterMoE.
TRL: baseline, с которым все сравниваются
TRL обычно выступает точкой отсчета, а не победителем по чистой пропускной способности на одном GPU. Он компенсирует это широким набором рычагов управления памятью и скоростью, описанных в Reducing Memory Usage и Speeding Up Training. Среди них packing, batching без padding, truncation, Liger Kernel и vLLM sleep mode для GRPO. У TRL также есть официальная интеграция с Unsloth, поэтому эти два варианта не являются взаимоисключающими.
LLaMA-Factory: скорость через делегирование
LLaMA-Factory не пишет собственные ядра. Вместо этого он предоставляет оптимизации других фреймворков через флаги конфигурации. Установка use_unsloth: true активирует патч Unsloth; changelog проекта сообщает о 170% относительной скорости на этом пути. Обучение Unsloth на длинных последовательностях указано как 117% скорости и 50% памяти. LLaMA-Factory также поддерживает enable_liger_kernel: true и FlashAttention-2 через flash_attn: fa2.
VRAM
Заявленные минимумы памяти
Unsloth публикует таблицу требований к VRAM, отсортированную по числу параметров. В ней указано 6 GB для модели 8B в 4-bit QLoRA и 41 GB для 70B. LoRA в 16-bit требует 22 GB и 164 GB для тех же моделей соответственно.
Аппаратная таблица в README LLaMA-Factory охватывает тот же режим 4-bit QLoRA: 6 GB для 7B, 24 GB для 30B и 48 GB для 70B. Полное bf16-дообучение 70B указано на уровне 600 GB.
Обе таблицы описывают минимумы. Batch size, длина последовательности и выбор оптимизатора влияют на фактическое потребление.
Длина контекста как более резкий дифференциатор
Пиковая VRAM при фиксированной длине контекста менее важна, чем максимальный контекст, который позволяет заданный бюджет VRAM. Бенчмарки длины контекста Unsloth для Llama 3.1 8B QLoRA с rank 32 и batch size 1 выглядят резко. Unsloth объясняет это своим алгоритмом gradient checkpointing в сочетании с Apple Cut Cross Entropy. Для Llama 3.3 70B на 80 GB A100 он сообщает 89,389 токенов — по сравнению с 6,916 у baseline FA2.
История памяти в MoE
Обучение MoE — область, где поведение памяти сильнее всего изменилось в 2026 году. Unsloth сообщает о дообучении gpt-oss-20b в пределах 12.8 GB, тогда как Qwen3-30B-A3B при 16-bit LoRA требует 63 GB.
В запуске gpt-oss на B200 Unsloth использовал 47.43 GB при контексте 8K, тогда как Transformers v5 использовал 73.80 GB. При 16K у Transformers v5 произошел out of memory, а Unsloth использовал 55.13 GB.
Механизм основан на формулировке split-LoRA. PEFT материализует LoRA delta по всем экспертам перед MoE matmul. Unsloth вместо этого переупорядочивает операции, что математически идентично, но позволяет избежать этапа материализации.
Axolotl решает ту же проблему через квантизацию MoE-экспертов, квантизуя веса экспертов во время загрузки модели и сразу освобождая исходный bf16 tensor. Это стало необходимо после изменения в Transformers v5, где expert layers были перенесены с nn.Linear на fused nn.Parameter 3D tensors, из-за чего bitsandbytes больше не мог квантизовать их при загрузке. Документация Axolotl сообщает, что GLM-4.7-Flash QLoRA снижает reserved memory примерно с 127 GiB до примерно 23 GiB при quantize_moe_experts: true.
Multi-GPU
Multi-GPU — это область, где рейтинг на одном GPU переворачивается. Лидерство Unsloth на одном GPU не переносится дальше.
Axolotl: самая глубокая матрица параллелизма
Руководство по multi-GPU Axolotl предлагает три взаимоисключающие стратегии шардинга: DeepSpeed ZeRO stages 1 through 3, FSDP и DDP. Рекомендуемый путь — FSDP2, а FSDP1 считается deprecated.
Поверх этого руководство по N-D Parallelism компонует data, tensor, context и expert parallelism через PyTorch DeviceMesh. Задокументированная матрица поддержки подтверждает FSDP+TP, HSDP+TP, FSDP+CP, FSDP+TP+CP и FSDP+EP. Две комбинации явно не поддерживаются: expert parallelism не может сочетаться с TP или CP в v1, а чистый DDP также не может сочетаться с ними.
Sequence parallelism в Axolotl использует библиотеку ring-flash-attention. Его опубликованный бенчмарк H100 для Llama 3.1 8B QLoRA иллюстрирует компромисс: контекст масштабируется почти линейно, но эффективность пропускной способности резко падает. На 4090s при SP degree 8 тот же бенчмарк фиксирует 0.88x speedup — обучение фактически стало медленнее, хотя контекст достиг 32,768 токенов.
Axolotl также поддерживает multi-node обучение через torchrun и Ray.
TRL: два backend для разбиения последовательностей
Руководство по распределенному обучению TRL четко разделяет два подхода. Context Parallelism использует Ring Attention на FSDP2, требует Accelerate 1.11.0+, использует cp_size с cp_backend="torch" и сейчас поддерживает только SDPA — FlashAttention на этом пути не поддерживается. Последовательности должны делиться без остатка на cp_size * 2.
Sequence Parallelism использует ALST/Ulysses на DeepSpeed, требует DeepSpeed 0.18.1+ и Accelerate 1.12.0+. Он использует sp_size с sp_backend="deepspeed" и работает с FlashAttention-2, но ограничен числом attention heads, требуя num_heads >= sp_size.
Рекомендации TRL конкретны: Ring Attention подходит для последовательностей 1M+ токенов и ограниченной сетевой топологии, тогда как Ulysses подходит для соединений NVLink или InfiniBand и последовательностей примерно до 500k токенов. Собственный бенчмарк Ring Attention в TRL дообучал Qwen3-8B на 1, 2, 4 и 8 H100 GPUs; при 8 GPUs стали обучаемыми длины контекста выше 300k токенов.
LLaMA-Factory: стандартные движки с Megatron
Документация по распределенному обучению LLaMA-Factory покрывает DDP, DeepSpeed и FSDP, включая FSDP2 и Ray для single-node и multi-node запусков. Документация также описывает DeepSpeed AutoTP, который сочетает tensor parallelism с ZeRO.
Самым существенным добавлением 2025 года стал backend обучения Megatron-core через mcore_adapter, открывающий реальный путь к крупномасштабному pretraining. Путь FSDP+QLoRA дообучает модель 70B на двух 24 GB GPU — это самый дешевый задокументированный маршрут к 70B в данном сравнении.
Узкое место — сам интерфейс. Распределенная конфигурация находится в YAML и CLI, а не в LlamaBoard. Команды, выбравшие LLaMA-Factory за UI без кода, теряют это свойство при масштабировании дальше одного GPU.
Unsloth: открытый разрыв
Документация multi-GPU Unsloth сообщает, что multi-GPU работает через Accelerate и DeepSpeed, предоставляя доступ к FSDP и DDP. Однако там же указано, что процесс сложен и требует ручной настройки, а официальная поддержка все еще анонсируется. Практический путь — accelerate launch train.py или torchrun --nproc_per_node N_GPUS train.py. Для моделей, слишком больших для одного GPU, device_map = "balanced" распределяет модель по устройствам.
Страница PyPI Unsloth помечает multi-GPU как доступный, но с ожидающимися крупными улучшениями. Changelog Studio описывает предварительное автоматическое распределение multi-GPU для inference и training по состоянию на март 2026 года.
В совокупности позиция ясна: Unsloth поддерживает multi-GPU, но пока не предлагает компонуемую матрицу параллелизма, которую документируют Axolotl и TRL.
Ограничения каждого фреймворка
Unsloth ломается там, где tensor, context или expert parallelism нужны как конфигурация первого класса. Он также становится слабее, если модель не входит в список поддерживаемых, поскольку прирост обеспечивают ядра, специфичные для архитектуры.
Axolotl упирается в кривую обучения. Пользователи должны настраивать FSDP2 против DeepSpeed, SP degree и ограничения делимости, охватывающие число GPU, длину последовательности и attention heads.
TRL упирается в настройки по умолчанию. Он дает корректные примитивы, а не готовые оптимальные конфигурации — пользователям нужно самим задавать Accelerate config, оптимизации памяти и план параллелизма.
LLaMA-Factory упирается в границу UI. Его абстракция эффективна до одного узла, но выше становится тонкой.
Практические рекомендации
Для одного потребительского GPU с поддерживаемой архитектурой и LoRA или QLoRA наиболее сильный выбор — Unsloth: одного запаса по длине контекста уже достаточно, чтобы это оправдать.
Для двух-восьми GPU, длинного контекста и полного fine-tuning или RLHF-пайплайнов рекомендуется Axolotl. FSDP2 плюс sequence parallelism — наиболее хорошо задокументированный путь.
Для кастомных training loops, новых post-training алгоритмов или тесной интеграции с Hugging Face базой для разработки является TRL, поскольку это слой, который оборачивают остальные.
Для максимально широкого покрытия моделей, операторов без инженерного опыта и самых быстрых первых запусков оптимален LLaMA-Factory — с переходом на CLI при масштабировании.
Эти варианты не являются взаимоисключающими. LLaMA-Factory может запускать Unsloth как backend. TRL поставляет интеграцию с Unsloth. Axolotl внутренне вызывает тренеры TRL. Фреймворки явно сближаются вокруг сильных сторон друг друга — Unsloth добавляет multi-GPU, LLaMA-Factory добавляет Megatron, Axolotl перенимает оптимизации на уровне ядер, — что указывает на возможный сдвиг дифференциации в следующем цикле от чистой производительности к удобству разработки и широте интеграций.