Skip to main content
skill CX Codex

fine-tuning-expert — Claude Code skill: LLM fine-tuning and LoRA

A skill for LLM fine-tuning: prepares datasets, configures LoRA and QLoRA adapters, runs training and evaluates the result.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add Jeffallan/claude-skills --skill fine-tuning-expert -a claude-code
Open on GitHub

What fine-tuning-expert does

The skill walks through five stages: dataset preparation, method selection, training, evaluation, deployment. Each stage has a checkpoint. Validate the JSONL first, then watch the loss curves, then measure perplexity, task metrics and latency on a held-out set. Parameter-efficient methods are recommended for large models; full fine-tuning is reserved for small ones.

Five reference files sit inside: references/lora-peft.md, references/dataset-preparation.md, references/hyperparameter-tuning.md, references/evaluation-metrics.md, references/deployment-optimization.md. The agent loads the one that matches the task. Code samples use Hugging Face PEFT and TRL — LoraConfig, SFTTrainer, BitsAndBytesConfig for 4-bit quantization, and merge_and_unload to fold the adapter back in.

Dataset validation runs as python validate_dataset.py --input data.jsonl, and errors have to be fixed before training starts. Merging adapters with mismatched rank, base model or target modules will break. The skill asks you to document hyperparameters and dataset versions, and to always include a learning rate warmup.

What it helps with

  • validate a JSONL dataset for schema errors and duplicates before training
  • pick between LoRA, QLoRA and full fine-tuning given GPU memory
  • set hyperparameters and a learning rate schedule for a training run
  • benchmark an adapter against the base model on a held-out set
  • merge adapter weights and quantize the model for serving

Example prompts for the agent

  • Prepare train.jsonl for instruction tuning and run the validation script
  • Configure a LoRA adapter for meta-llama/Llama-3-8B on my task
  • Write an evaluation script with perplexity, BLEU and inference latency

How to install fine-tuning-expert

1Skills CLI (Vercel)

npx skills add Jeffallan/claude-skills --skill fine-tuning-expert -a claude-code

2Manually: put the files in place

~/.claude/skills/fine-tuning-expert/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/fine-tuning-expert/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about fine-tuning-expert

How do I install fine-tuning-expert in Claude Code?

Run npx skills add Jeffallan/claude-skills --skill fine-tuning-expert -a claude-code. The skill lands in ~/.claude/skills/fine-tuning-expert/SKILL.md.

What does fine-tuning-expert do?

It guides you through dataset prep, PEFT method selection, training, evaluation and deployment. You get scripts, a training config and the reasoning behind the chosen parameters.

Which fine-tuning methods does it cover?

LoRA and QLoRA through Hugging Face PEFT, plus instruction tuning, RLHF and DPO. For models above 7B it recommends parameter-efficient methods.

Source text

SKILL.md · MIT
---
name: fine-tuning-expert
description: "Use when fine-tuning LLMs, training custom models, or adapting foundation models for specific tasks. Invoke for configuring LoRA/QLoRA adapters, preparing JSONL training datasets, setting hyperparameters for fine-tuning runs, adapter training, transfer learning, finetuning with Hugging Face PEFT, OpenAI fine-tuning, instruction tuning, RLHF, DPO, or quantizing and deploying fine-tuned models. Trigger terms include: LoRA, QLoRA, PEFT, finetuning, fine-tuning, adapter tuning, LLM training, model training, custom model."
license: MIT
metadata:
  author: https://github.com/Jeffallan
  company: https://synergetic.solutions
  version: "1.1.0"
  domain: data-ml
  triggers: fine-tuning, fine tuning, finetuning, LoRA, QLoRA, PEFT, adapter tuning, transfer learning, model training, custom model, LLM training, instruction tuning, RLHF, model optimization, quantization
  role: expert
  scope: implementation
  output-format: code
  related-skills: devops-engineer
---

# Fine-Tuning Expert

Senior ML engineer specializing in LLM fine-tuning, parameter-efficient methods, and production model optimization.

## Core Workflow

1. **Dataset preparation** — Validate and format data; run quality checks before training starts
   - Checkpoint: `python validate_dataset.py --input data.jsonl` — fix all errors before proceeding
2. **Method selection** — Choose PEFT technique based on GPU memory and task requirements
   - Use LoRA for most tasks; QLoRA (4-bit) when GPU memory is constrained; full fine-tune only for small models
3. **Training** — Configure hyperparameters, monitor loss curves, checkpoint regularly
   - Checkpoint: validation loss must decrease; plateau or increase signals overfitting
4. **Evaluation** — Benchmark against the base model; test on held-out set and edge cases
   - Checkpoint: collect perplexity, task-specific metrics (BLEU/ROUGE), and latency numbers
5. **Deployment** — Merge adapter weights, quantize, measure inference throughput before serving

## Reference Guide

Load detailed guidance based on context:

| Topic | Reference | Load When |
|-------|-----------|-----------|
| LoRA/PEFT | `references/lora-peft.md` | Parameter-efficient fine-tuning, adapters |
| Dataset Prep | `references/dataset-preparation.md` | Training data formatting, quality checks |
| Hyperparameters | `references/hyperparameter-tuning.md` | Learning rates, batch sizes, schedulers |
| Evaluation | `references/evaluation-metrics.md` | Benchmarking, metrics, model comparison |
| Deployment | `references/deployment-optimization.md` | Model merging, quantization, serving |

## Minimal Working Example — LoRA Fine-Tuning with Hugging Face PEFT

```python
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments
from peft import LoraConfig, get_peft_model, TaskType
from trl import SFTTrainer
import torch

# 1. Load base model and tokenizer
model_id = "meta-llama/Llama-3-8B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
tokenizer.pad_token = tokenizer.eos_token

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)

# 2. Configure LoRA adapter
lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=16,               # rank — increase for more capacity, decrease to save memory
    lora_alpha=32,      # scaling factor; typically 2× rank
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()  # verify: should be ~0.1–1% of total params

# 3. Load and format dataset (Alpaca-style JSONL)
dataset = load_dataset("json", data_files={"train": "train.jsonl", "test": "test.jsonl"})

def format_prompt(example):
    return {"text": f"### Instruction:\n{example['instruction']}\n\n### Response:\n{example['output']}"}

dataset = dataset.map(format_prompt)

# 4. Training arguments
training_args = TrainingArguments(
    output_dir="./checkpoints",
    num_train_epochs=3,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,     # effective batch size = 16
    learning_rate=2e-4,
    lr_scheduler_type="cosine",
    warmup_ratio=0.03,                 # always use warmup
    fp16=False,
    bf16=True,
    logging_steps=10,
    eval_strategy="steps",
    eval_steps=100,
    save_steps=200,
    load_best_model_at_end=True,
)

# 5. Train
trainer = SFTTrainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"],
    eval_dataset=dataset["test"],
    dataset_text_field="text",
    max_seq_length=2048,
)
trainer.train()

# 6. Save adapter weights only
model.save_pretrained("./lora-adapter")
tokenizer.save_pretrained("./lora-adapter")
```

**QLoRA variant** — add these lines before loading the model to enable 4-bit quantization:
```python
from transformers import BitsAndBytesConfig

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
)
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=bnb_config, device_map="auto")
```

**Merge adapter into base model for deployment:**
```python
from peft import PeftModel

base = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16)
merged = PeftModel.from_pretrained(base, "./lora-adapter").merge_and_unload()
merged.save_pretrained("./merged-model")
```

## Constraints

### MUST DO
- Validate dataset quality before training
- Use parameter-efficient methods for large models (>7B)
- Monitor training/validation loss curves
- Document hyperparameters and training config
- Version datasets and model checkpoints
- Always include a learning rate warmup

### MUST NOT DO
- Skip data quality validation
- Overfit on small datasets — use regularisation (dropout, weight decay) and early stopping
- Merge incompatible adapters (mismatched rank, base model, or target modules)
- Deploy without evaluation against a held-out set and latency benchmark

## Output Templates

When implementing fine-tuning, always provide:
1. **Dataset preparation script** with validation logic (schema checks, token-length histogram, deduplication)
2. **Training configuration** (full `TrainingArguments` + `LoraConfig` block, commented)
3. **Evaluation script** reporting perplexity, task-specific metrics, and latency
4. **Brief design rationale** — why this PEFT method, rank, and learning rate were chosen for this task

Maintained by [@jeffallan](https://github.com/jeffallan), Principal Consultant at [Synergetic Solutions](https://synergetic.solutions)

[Documentation](https://jeffallan.github.io/claude-skills/skills/data-ml/fine-tuning-expert/)

© https://github.com/Jeffallan · MIT · Jeffallan/claude-skills

Similar skills

Everything for AI and ML →

From the same set67

The whole set →
spec-miner A skill for reverse-engineering codebases. Extracts specifications from existing code, maps dependencies, and generates documentation for legacy and undocumented systems. CX Codex +1 4,400installs legacy-modernizer Plans incremental legacy-code migration from dependency maps to facades, flags, and rollback steps. Use it when splitting a monolith or upgrading technology without a wholesale replacement. CX Codex +1 4,300installs salesforce-developer Writes Apex classes, builds Lightning Web Components, optimizes SOQL queries, and sets up batch processing on Salesforce. Enforces governor limits and bulkifies code. CX Codex +1 4,300installs mcp-developer A skill for building and debugging MCP servers and clients in TypeScript or Python, with tool schemas, transport setup and protocol checks in the inspector. CX Codex +1 4,200installs django-expert Guides Django 5.0 and DRF development by enforcing indexed models, ORM query optimization with select_related, and JWT authentication. CX Codex +1 4,200installs feature-forge A skill that runs a requirements interview and turns a feature idea into a spec: EARS requirements, acceptance criteria and an implementation checklist. CX Codex +1 4,200installs swift-expert A Swift skill that walks the agent through architecture, SwiftUI state, async/await and actors, with build checks in between. Built for iOS and macOS work. CX Codex +1 4,100installs chaos-engineer Plans chaos experiments, sets up failure injection and runs game day exercises. Useful when you need to see how a distributed system survives a killed pod or a slow network link. CX Codex +1 4,000installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor