Outlier  ›  Learn  ›  Fine-tune AI locally

How to fine-tune an AI model locally on your Mac

Quick answer

Fine-tuning adjusts a model with your own examples so it answers the way you want without being told every time. The catch with cloud fine-tuning is that you hand your training data to someone else's servers to do it. Local fine-tuning trains a small add-on called a LoRA adapter on your Mac from a file of your own examples — the data never leaves the machine. It's built into Outlier Pro: point it at a JSONL file, set a few numbers, run the job, and switch the adapter on.

Most people never need to fine-tune anything — a good prompt gets you most of the way. But there's a real gap between "the model can do this if I explain it every time" and "the model just does this," and fine-tuning is how you close it. What changed recently is that you can now do it without uploading a single row of your data anywhere.

What fine-tuning actually is

A base model is trained on the general internet. Fine-tuning continues that training a little further on examples you supply, nudging the model toward your format, your terminology, your house style. You're not teaching it new facts so much as new habits.

Modern fine-tuning almost never rewrites the whole model — that's expensive and risks breaking what already works. Instead it trains a LoRA adapter: a small set of extra weights that ride on top of the frozen base model. The adapter is a few megabytes, you can keep several around, and you switch them on and off. Turn it off and you're back to the stock model exactly.

Fine-tuning vs just writing a better prompt

Reach for a prompt first. Fine-tuning earns its keep only in specific cases:

Use a prompt whenFine-tune when
You need it once or occasionallyYou do the same task hundreds of times
The instruction fits in a paragraphThe "instruction" is really 50 examples of a style
You want to change behaviour quicklyYou want a fixed format the model won't drift from
Examples change constantlyYou have a stable body of past work to learn from

A useful rule: if you find yourself pasting the same three example outputs into every conversation to get the format right, that's a fine-tune waiting to happen. Bake the examples in once instead of paying for them in every prompt.

Why doing it locally matters

The training data is the whole point of fine-tuning, and it's usually your most sensitive material — past client deliverables, internal documentation, support transcripts, your own writing. Cloud fine-tuning requires you to upload exactly that. For a lot of people and most regulated work, that upload is a non-starter.

Local fine-tuning removes the question. The examples sit in a file on your disk, the training runs on your Mac's own GPU cores, and the resulting adapter is a local file. Nothing is transmitted, so there's no data-processing agreement to sign and no server to trust. If you can't send the data out, this is the only version of fine-tuning available to you.

What your training data looks like

Fine-tuning data is a JSONL file — one example per line, each a prompt paired with the completion you wish the model had produced. You're showing it the target, not describing it:

{"prompt": "Summarize this ticket for the weekly report: ...", "completion": "..."}

The examples are the entire lesson, so quality beats quantity. A few dozen clean, consistent pairs that all demonstrate the same behaviour will teach more than thousands of noisy ones. If your examples disagree with each other about format, the model learns to be inconsistent.

Doing it in Outlier, step by step

  1. Point it at your data. Choose a .jsonl file, or drop one under ~/.outlier/datasets/ and give the path.
  2. Set the knobs. Three matter: rank (how much capacity the adapter gets — 8 is a sensible default), epochs (how many passes over your data — 3 is a fine start), and batch size. The defaults are reasonable; raise epochs if the model isn't picking up the pattern, lower them if it starts parroting your examples too literally.
  3. Run the job. Training happens on-device with a progress bar. Time depends on data size and the tier you're training.
  4. Switch the adapter on. When the job completes it joins your adapter list; click "Use this adapter" and your chats now run with it. Toggle it off any time to return to the stock model.

Honest limits

Fine-tuning is not a memory system — if you need the model to know a specific document, retrieval (feeding it the document at question time) is usually the better tool. It also won't make a small model as smart as a big one; it shapes behaviour, it doesn't raise the ceiling on reasoning. And a badly built dataset produces a confidently wrong model, so the honest failure mode is "garbage in, garbage out, but fluent." Start small, test the adapter against held-back examples, and keep the base model one toggle away.

Fine-tuning is part of Outlier Pro. It's the same on-device principle as the rest of the app: your data is the input, and the input stays on your Mac.

Receipts: the workflow described here is the fine-tune feature in the shipping app — LoRA adapters trained from a JSONL dataset, with rank, epochs and batch-size controls, a completed-adapter list, and an activate/deactivate toggle that overlays the adapter on the local model. It runs on your Mac using Apple's MLX; no training data is uploaded. Training time and quality depend on your dataset and hardware, so treat the defaults as a starting point, not a guarantee.

Try Outlier free

Free Nano + Lite — local, private, no account. Pro $20/mo or $149/yr adds everything, including on-device fine-tuning and all 7 model tiers (incl. Plus 397B). Lifetime Pro from $99 (Founding 200) or $200 (Founders 500). Apple Silicon only.

Download for Mac