
You Trained the Adapter — Now Prove It Worked: A Three-Step Eval for Fine-Tuned LLMs
Chris Harper
3 min read
Aug 27, 2026 · 20:09 UTC
TL;DR: Training loss is not a reliable proxy for whether a fine-tune improved your model. Three checks — held-out perplexity, a standardized benchmark via lighteval, and one task-specific metric — give you numbers worth acting on.
What you'll be able to do after this: run a structured evaluation that catches regressions, confirms real-world improvement, and gives you a defensible number before shipping your LoRA adapter.
Training loss can drop while the model regresses on actual tasks — it measures how well the model predicts the training data, not whether the output is useful. The minimum viable eval stack is three layers:
1. Perplexity on a held-out test set. Measure negative log-likelihood on examples the model never saw during training, then convert to perplexity. Lower than the base model on your domain: the fine-tune learned the distribution. Equal or higher: it didn't.
import torch, math
from transformers import AutoModelForCausalLM, AutoTokenizer
def perplexity(model, tokenizer, texts):
nlls = []
for text in texts:
enc = tokenizer(text, return_tensors="pt")
with torch.no_grad():
out = model(**enc, labels=enc["input_ids"])
nlls.append(out.loss.item())
return math.exp(sum(nlls) / len(nlls))
Run this against both the base model and your fine-tuned model on the same test set.
2. Standardized benchmark via lighteval. Compare fine-tuned vs. base on a benchmark relevant to your domain. For a medical assistant fine-tune:
lighteval accelerate \
"pretrained=your-finetuned-model" \
"mmlu|anatomy|0|0,mmlu|professional_medicine|0|0" \
--max_samples 200 --output_path ./results
Run the same command against the base checkpoint. The delta is your verifiable improvement.
3. A task-specific metric or LLM-as-judge. For classification: F1 or accuracy on a held-out labeled set. For generation: sample 50–100 outputs from both models, route them to a stronger model (e.g., Claude Sonnet 5) with a rubric, and have it score them blind. Human eval if the stakes are high.
Three mistakes to avoid:
- Reporting only training loss, which the model directly optimized and can't fail to lower
- Evaluating only the fine-tuned model — without a base-model baseline you can't claim improvement, only measure absolute performance
- Using examples from the same distribution as training — test on a different source, time window, or rephrasing
Real limits: Benchmark scores don't capture edge-case or deployment behavior. LLM-as-judge carries the judge model's biases toward its own output style. Perplexity measures prediction probability, not whether the output is actually useful — a model can be confident and wrong. These evals are a floor, not a ceiling.
Sources: Evaluation — HuggingFace LLM Course, Chapter 11 · LLM evaluation metrics guide — machinelearningmastery.com · Quantitative evaluation: ROUGE, BLEU, Perplexity — apxml.com