Fine-tuning a 70B model on one card.
QLoRA turns a training job that needs a rack into one that needs a single 48 GB GPU. Here is what fits, what it costs for a month, and where the technique stops working.
The short answer
- QLoRA on 70B
- ~61 GB — fits on one 48 GB card at short sequence lengths, comfortably on an 80 GB one
- Full fine-tuning of 70B
- ~1,232 GB — a multi-node cluster, which we do not rent
- The ratio
- Roughly 20× less memory, for a technique that reaches most of the quality on most tasks
- What it costs here
- From $286/month, with the card yours for the whole month rather than the run
What actually fits
LoRA freezes the model and trains a small pair of low-rank matrices beside each weight matrix. QLoRA goes further and holds the frozen weights in 4-bit. What you must keep in memory changes completely as a result.
Why full fine-tuning does not
Full fine-tuning in BF16 needs about 16 bytes per parameter: 2 for the weight, 2 for its gradient, and 8 for Adam's two moments in FP32, plus the master copy. That is a fixed multiplier, and it is brutal.
| Model | QLoRA | Full fine-tune | Ratio | What that means |
|---|---|---|---|---|
| Llama 3.1 8B | 13 GB | 141 GB | 11× | One 24 GB card |
| Gemma 3 27B | 27 GB | 475 GB | 17× | One 48 GB card |
| Qwen 3 32B | 31 GB | 563 GB | 18× | One 48 GB card |
| Llama 3.3 70B | 61 GB | 1,232 GB | 20× | One 80 GB card |
These are order-of-magnitude figures with a modest allowance for activations — enough to choose a machine, not enough to promise a specific run. Sequence length and batch size move the QLoRA column considerably; the full fine-tuning column barely moves, because it is dominated by the fixed 16 bytes per parameter.
Model by model
The cheapest node in our catalogue that can train each model with QLoRA, alongside the machine you would need to serve the result.
| Model | Training memory | Cheapest node to train on | Cheapest node to serve on |
|---|---|---|---|
| Llama 3.1 8B | 13 GB | NVIDIA L4 | NVIDIA L4 |
| Mistral Small 24B | 25 GB | NVIDIA RTX A6000 | NVIDIA L4 |
| Gemma 3 27B | 27 GB | NVIDIA RTX A6000 | NVIDIA L4 |
| Qwen 3 32B | 31 GB | NVIDIA RTX A6000 | NVIDIA L4 |
| Llama 3.3 70B | 61 GB | NVIDIA A100 PCIe | 2 × NVIDIA L4 |
Training wants memory; serving wants memory and bandwidth. It is common for the right training card to be a cheap large-memory one and the right serving card to be an expensive fast one — and since both are monthly here, running the two on different machines is often cheaper than compromising on one.
Running it
Axolotl is preinstalled as one of the images in the configurator. This is a complete run on a single card, from an empty machine.
$ mkdir -p /scratch/ft && cd /scratch/ft
$ cat > qlora.yml <<'YAML'
base_model: meta-llama/Llama-3.3-70B-Instruct
load_in_4bit: true
adapter: qlora
lora_r: 16
lora_alpha: 32
lora_dropout: 0.05
lora_target_linear: true
sequence_len: 2048
sample_packing: true
gradient_checkpointing: true
micro_batch_size: 1
gradient_accumulation_steps: 16
num_epochs: 2
learning_rate: 0.0001
optimizer: paged_adamw_8bit
bf16: true
datasets:
- path: /scratch/ft/data.jsonl
type: chat_template
output_dir: /scratch/ft/out
YAML
$ docker run --rm --gpus all --ipc=host --shm-size=16g \
-v /scratch/ft:/workspace -v /scratch/models:/root/.cache/huggingface \
-e HF_TOKEN="$HF_TOKEN" \
axolotlai/axolotl:main-latest \
axolotl train /workspace/qlora.yml
$ nvidia-smi dmon -s um
# If memory sits just under the card's total, you are one long batch
# away from an out-of-memory error four hours into the run.
# Lower sequence_len or micro_batch_size now, not then.
The settings that matter
What a month costs
The reason monthly matters more for training than for serving: a fine-tuning project is not one run. It is a first run that fails on a data bug, a second that overfits, a third that works, and then five more with different ranks.
| Machine | Card memory | Per month | Suits |
|---|---|---|---|
| NVIDIA L4 | 24 GB | $125/mo | QLoRA up to 8B |
| NVIDIA RTX 5090 | 32 GB | $335/mo | QLoRA up to 32B |
| NVIDIA A100 PCIe | 40 GB | $392/mo | QLoRA up to 32B |
| NVIDIA RTX A6000 | 48 GB | $286/mo | QLoRA up to 32B |
| NVIDIA A100 PCIe | 80 GB | $1,091/mo | QLoRA up to 70B |
Compare that with per-hour pricing over a project rather than a run: the break-even guide works the arithmetic. A machine that exists for three weeks while you iterate is exactly the case where a meter costs more than a term.
Where LoRA stops working
It is a very good technique with a real boundary, and it is worth knowing which side of it you are on before renting anything.
Teaching a genuinely new domain. LoRA adapts behaviour well and adds knowledge poorly. A model that has never seen your field will not learn it from a low-rank adapter.
Changing the vocabulary or the tokenizer. New tokens need embeddings trained, which is outside what an adapter touches.
Continued pre-training on billions of tokens. That is full fine-tuning, and it needs the machine in the right-hand column of the table above — which is more than one node, and more than we rent.
Squeezing the last two points of a benchmark. Full fine-tuning still wins at the margin. If that margin is what you are being paid for, LoRA is the wrong tool.
For everything else — a tone, a format, a schema, a domain the base model already half knows — QLoRA on a single card reaches most of the quality for a fraction of the machine. That is the trade, and on the models most people actually fine-tune it is a good one.
Pick the card, keep it for the whole project.
Every configuration is monthly, with root access and no meter — which is what iterating on a fine-tune actually needs.
Other guides
- Payment · 8 min
Paying for a server in crypto
What actually happens between clicking pay and getting root, which coin to choose, and the four mistakes that lose money on a first payment.
Read the guide - Sizing · 9 min
How much VRAM a model actually needs
The arithmetic behind “will it fit”: weights, KV cache, and the two places a rule of thumb goes wrong by a factor of three.
Read the guide - Sizing · 7 min
NVLink or PCIe: which one your job needs
When the link between cards decides your throughput, when it changes nothing, and how to tell which case you are in before you pay for the wrong node.
Read the guide