← All posts

June 18, 2026

Axolotl vs TRL vs Unsloth: Which Fine-Tuning Framework Should You Use

Three frameworks dominate LLM fine-tuning in 2026. They all support LoRA, QLoRA, DPO, and GRPO. What differs is workflow, speed, flexibility, and who each one is actually built for. Here is how to choose before you spend time learning the wrong one.

TL;DR

Axolotl, TRL, and Unsloth are the three most widely used frameworks for fine-tuning large language models in 2026. By mid-2026, all three support LoRA, QLoRA, full fine-tuning, DPO, and GRPO. The capability gap between them has closed significantly. What has not converged is the workflow, the learning curve, the speed profile, and the types of engineers each one is designed for. This post explains what each framework actually does, where each one wins, and how to choose based on your specific situation rather than GitHub star counts.

Picking a fine-tuning framework is one of those decisions that feels smaller than it is.

You commit to one, learn its config format or API, build your dataset around its expectations, and debug its specific failure modes. Switching frameworks mid-project means rebuilding most of that. So getting the choice right at the start matters.

The good news is the frameworks have converged on capabilities. All three support the methods you are likely to need. The choice comes down to workflow preference and what you are optimizing for. Here is how to think about it.

Axolotl: Config-Driven, Production-Oriented

Axolotl is a YAML config-based framework that wraps Hugging Face Transformers and PEFT. You describe your training job in a config file. Axolotl handles the training loop, data loading, checkpointing, and logging. You do not write Python training code.

This is what makes Axolotl distinctive. The config is the interface. If you can write the YAML, you can run the job. For teams that want reproducible, versionable training configs without building a training script from scratch, this is the most natural workflow.

Axolotl supports a wide range of model families, dataset formats, and training objectives. SFT, DPO, GRPO, reward modeling, multimodal training. It integrates natively with Weights and Biases for experiment tracking. It is the framework Heulistic is built around, because the config-first workflow maps directly to what an iteration-focused fine-tuning platform needs.

Axolotl is the right choice when:

You want a reproducible, config-driven workflow. You are running on multi-GPU setups. You want the full range of training objectives and dataset format support. You are building a repeatable pipeline where the config is a first-class artifact. You are using a managed platform like Heulistic that handles the infrastructure underneath.

Axolotl limitations:

Slightly slower per-step than Unsloth on identical hardware because of its abstraction layers. The YAML config has a learning curve. Debugging failures requires familiarity with both Axolotl and the underlying Hugging Face libraries it wraps.

Unsloth: Speed-First, Single-GPU Optimized

Unsloth is built around one core promise: faster training with less memory. It achieves 2 to 5x faster training and up to 80 percent less VRAM compared to standard Flash Attention 2 baselines through custom Triton kernels that optimize the attention computation without approximation or additional quantization.

The practical result is meaningful. A 7B QLoRA job that takes 90 minutes on an A10G with Axolotl might take 40 to 50 minutes with Unsloth on the same hardware. For engineers running many experiments on a single GPU, that difference compounds significantly across a project.

Unsloth's interface is Python-first. You write a training script using Unsloth's model loading functions and then pass the model to a TRL trainer. It is less abstracted than Axolotl but faster to get running if you are comfortable with Python.

By 2026, Unsloth supports GRPO, DPO, SFT, vision models, and embedding model fine-tuning. It crossed 50,000 GitHub stars in February 2026 and has broad community adoption.

Unsloth is the right choice when:

You are on a single GPU and want maximum training speed. You have a consumer GPU with limited VRAM and need the memory savings. You are comfortable writing Python training scripts. You want the fastest possible iteration loop on a single machine. You are doing early experimentation where iteration speed matters most.

Unsloth limitations:

Multi-GPU support is more limited than Axolotl. The Python-first workflow means less config reproducibility out of the box. The speed gains are hardware-dependent and most significant on NVIDIA consumer GPUs.

TRL: RLHF-First, Hugging Face Ecosystem Native

TRL stands for Transformer Reinforcement Learning. It is the Hugging Face library for training methods beyond supervised fine-tuning. SFT, DPO, GRPO, PPO, reward modeling, online DPO. If you are doing preference optimization or reinforcement learning from human feedback, TRL is the institutional choice.

TRL is code-first. You write Python scripts using TRL's trainer classes. The SFTTrainer, DPOTrainer, GRPOTrainer, and RewardTrainer each handle a specific training objective. There is no config file. Your training script is the config.

This gives you maximum flexibility. You can modify any part of the training loop. You can integrate custom reward functions, custom data collators, and custom evaluation logic without fighting the framework. For research use cases or non-standard training objectives, this flexibility is the whole point.

TRL is deeply integrated with the Hugging Face ecosystem. Models load from the Hub, datasets load from the Hub, and experiment tracking works with Hugging Face's native tooling. If your team is already deep in the Hugging Face ecosystem, TRL is the lowest-friction choice for advanced training objectives.

TRL is the right choice when:

Your training objective is RLHF, DPO, GRPO, or reward modeling. You need custom training loop modifications that config-based frameworks cannot accommodate. You are doing research where flexibility matters more than workflow standardization. You are comfortable writing and debugging Python training scripts. You want the most direct integration with the Hugging Face ecosystem.

TRL limitations:

More verbose than Axolotl or Unsloth for standard SFT jobs. No YAML config means less reproducibility without additional tooling. Slower than Unsloth on single-GPU training speed benchmarks. Higher learning curve for engineers who are not already familiar with Hugging Face's training APIs.

How the Three Relate to Each Other

An important detail: these frameworks are not entirely separate stacks. Unsloth can be used as a backend for TRL. Axolotl wraps Hugging Face libraries that TRL also uses. You can combine them.

A common production pattern is to use Unsloth's model loading for speed, pass the loaded model to a TRL trainer for the training loop, and use Axolotl-style configs for experiment tracking and reproducibility. The boundaries between frameworks are more porous than the comparison framing suggests.

The Decision in Plain Terms

Use Axolotl if: you want a config-driven workflow, you are running multi-GPU or managed infrastructure, you value reproducibility and versionable configs, or you are using Heulistic which is built on Axolotl.

Use Unsloth if: you are on a single GPU and want maximum speed, you are comfortable with Python scripts, you are in early experimentation where iteration speed is the priority, or you have a consumer GPU with limited VRAM.

Use TRL if: your training objective is DPO, GRPO, PPO, or reward modeling and you need fine-grained control over the training loop, you are doing research, or you are already deep in the Hugging Face ecosystem.

And the honest meta-answer: by 2026 the framework matters less than the data. A well-curated dataset trained with any of these three frameworks will outperform a poorly curated dataset trained with the "best" one. Pick the workflow that fits your team and spend the rest of your energy on the data.