I wanted to fine-tune Llama-3-8B on 4,000 of my own support-ticket conversations. Colab quoted me the upgrade screen: the free T4 kept dying with OOM, and Colab Pro is $11.99/month with no guarantee of an A100.
Then I remembered Kaggle gives away 30 GPU-hours per week, free, no credit card. P100 with 16GB VRAM. Here's the exact setup that worked — and the honest numbers.
Free GPU comparison (I tested all four this month)
| Platform | GPU | Free quota | Session limit | OOM'd on 8B QLoRA? |
|---|---|---|---|---|
| Colab Free | T4 (16GB) | ~3h/day, throttled | 12h | Yes, constantly |
| Kaggle | P100 (16GB) | 30h/week | 12h | No |
| Colab Pro | T4/A100 lottery | $11.99/mo | 24h | Depends on lottery |
| Lightning.ai | T4 | 15h/mo credits | — | Yes (16GB, tighter) |
Kaggle wins on one boring detail: the P100's memory bandwidth (732 GB/s vs T4's 320) made each training step ~2.1x faster in my runs.
The actual code (QLoRA with unsloth)
The trick that makes 16GB enough: 4-bit quantization + LoRA adapters. You only train ~0.5% of the weights.
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/llama-3-8b-bnb-4bit",
max_seq_length=2048,
load_in_4bit=True,
)
model = FastLanguageModel.get_peft_model(
model, r=16,
target_modules=["q_proj","k_proj","v_proj","o_proj"],
lora_alpha=16,
)
from trl import SFTTrainer
from transformers import TrainingArguments
trainer = SFTTrainer(
model=model,
train_dataset=my_dataset, # 4,000 support conversations
args=TrainingArguments(
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
max_steps=300,
learning_rate=2e-4,
fp16=True,
output_dir="out",
),
)
trainer.train()
model.save_pretrained("my-support-model")
Real numbers from my run
- 300 steps on 4,000 examples: 2h 14m of GPU time (7.4% of my weekly free quota)
- Peak VRAM: 14.2GB / 16GB — comfortable
- Cost: $0.00. The equivalent A100 rental on Lambda: ~$2.70. Colab Pro to avoid OOM: $11.99.
- Result quality: on 50 held-out tickets, the fine-tuned model's draft responses were rated "usable without edits" by me 34/50 times vs 11/50 for the base model. Not magic — but my support reply time dropped from ~6 min to ~2 min per ticket.
The honest downsides
- Kaggle sessions cap at 12 hours — fine for LoRA on small data, useless for full fine-tunes.
- You must verify a phone number to unlock the GPU quota.
-
Persistence is awkward — download your adapter weights before the session dies. I lost a 90-minute run to this. Save checkpoints to
/kaggle/workingand download early. - If your dataset is confidential, a shared free platform is the wrong place for it. Full stop.
The take
Everyone talks about needing A100s. For learning fine-tuning and shipping a genuinely useful LoRA adapter on a few thousand examples, 30 free hours a week is more GPU than most of us will use. The $50/month I almost spent on Colab Pro would have bought me nothing but impatience relief.
I generated the data-cleaning script (dedup + format into sharegpt style) with MonkeyCode — a free open-source AI coding tool — which saved me maybe an hour of pandas wrestling.
Have you actually fine-tuned anything on free GPUs, or does everyone just keep paying? What did you fine-tune for — and was it worth it?
Top comments (0)