Skip to main content

Fine-tune, experiment with, and run LLMs locally on your Mac

Project description

MLX Forge

Fine-tune LLMs on your Mac with MLX. No cloud, no CUDA required.

PyPI Python License Tests Docs

MLX Forge is a complete LLM fine-tuning toolkit that runs entirely on your Mac. Pick a model, upload your data, and start training — all from a browser-based UI or CLI. Supports LoRA, DoRA, Full FT, QLoRA, DPO, GRPO, 18+ models, 200k+ HuggingFace datasets, OpenAI-compatible serving, and GGUF export.

pip install mlx-forge
mlx-forge studio

MLX Forge Studio — Experiment Detail

Why MLX Forge?

  • One command to startpip install mlx-forge && mlx-forge studio.
  • Browser-based Studio UI — Guided training wizard, real-time loss charts, model library with memory estimates, interactive playground, one-click HuggingFace upload.
  • OpenAI-compatible APImlx-forge serve starts a server that works with Cursor, Continue.dev, Open WebUI, LangChain, and any OpenAI SDK client.
  • Runs on Apple Silicon — Built on MLX. Your data stays on your machine.
  • Production training features — LoRA, DoRA, Full FT, QLoRA (67% memory reduction), DPO alignment, GRPO reinforcement learning, sequence packing (2-5x speedup), gradient checkpointing.
  • Full ecosystem — HuggingFace datasets (200k+), Hub upload, GGUF export for Ollama/llama.cpp.

Quick Start

Studio UI (recommended)

mlx-forge studio
# Opens at http://127.0.0.1:8741

Pick a recipe, choose a model, upload your data, and start training — all from the browser.

CLI

# Browse and download a dataset
mlx-forge data catalog
mlx-forge data download alpaca-cleaned --max-samples 5000

# Or import from HuggingFace (200k+ datasets)
mlx-forge data hf-import tatsu-lab/alpaca --max-samples 5000

# Train
mlx-forge train --config train.yaml

# Serve with OpenAI-compatible API
mlx-forge serve --model Qwen/Qwen3-0.6B --port 8000

# Export and deploy
mlx-forge export --run-id <id> --format gguf
mlx-forge export --run-id <id> --push-to-hub username/my-model

Models are downloaded from Hugging Face on first run and cached locally. All subsequent runs work offline.

Studio UI

MLX Forge Studio — Model Library

  • New Training — Guided wizard: pick a recipe (chat, instruction, DPO, writing style), choose a model, configure, and launch
  • Model Library — Browse 18+ models with memory estimates for your hardware
  • Experiments — Compare runs, view loss curves in real time, export and push to Hub
  • Datasets — Manage your training data, import from HuggingFace Hub
  • Playground — Chat with your fine-tuned models interactively

Supported Models

18 curated models in the Studio library, all tested on Apple Silicon:

Architecture Models Sizes
Qwen Qwen 2.5, Qwen 3, Qwen 3.5 0.5B - 8B
Gemma Gemma 2, Gemma 3 1B - 9B
Llama Llama 3.1 8B
Phi Phi-3 Mini, Phi-4 Mini 3.8B
DeepSeek DeepSeek-R1-Distill (Qwen-based) 1.5B - 7B
Mistral Mistral (uses Llama architecture) 7B

Any HF model using a supported architecture will work — the table above shows the curated models with pre-computed memory estimates in Studio.

Features

Training Methods

  • LoRA and QLoRA (4-bit) — Low-rank adaptation with 67% memory reduction
  • DoRA — Weight-Decomposed Low-Rank Adaptation for better fine-tuning quality
  • Full Fine-Tuning — All parameters trainable for small models
  • DPO — Direct Preference Optimization for alignment
  • GRPO — Group Relative Policy Optimization (DeepSeek-R1 style RL training)

Training Features

  • Sequence packing for 2-5x speedup on short sequences
  • Gradient checkpointing for 40-60% memory savings
  • Compiled training loop with gradient accumulation
  • Cosine, linear, step, and exponential LR schedules with warmup
  • Resume from any checkpoint

Data

  • 20+ curated datasets across 7 categories (general, code, math, conversation, reasoning, safety, domain)
  • 200k+ HuggingFace datasets via hf_dataset config or mlx-forge data hf-import
  • Auto-detection of 7 formats: chat, completions, text, preference, Alpaca, ShareGPT, Q&A
  • Multi-dataset mixing with weighted sampling
  • Data validation with train/val overlap detection

Serving & Export

  • OpenAI-compatible API server (/v1/chat/completions, /v1/completions, /v1/models)
  • GGUF export for Ollama/llama.cpp deployment
  • One-command HuggingFace Hub upload with auto-generated model cards

CLI Reference

Command Description
mlx-forge studio Launch the Studio UI
mlx-forge train --config FILE Run training (LoRA/DoRA/Full/DPO/GRPO)
mlx-forge generate --model MODEL Generate text or interactive chat
mlx-forge serve --model MODEL Start OpenAI-compatible API server
mlx-forge export --run-id ID Export merged model (safetensors or GGUF)
mlx-forge prepare --data FILE --model MODEL Pre-tokenize a dataset
mlx-forge data catalog Browse 20+ curated datasets
mlx-forge data download DATASET Download a dataset from the catalog
mlx-forge data hf-import DATASET Import from HuggingFace Hub
mlx-forge data import FILE --name NAME Import a local JSONL file
mlx-forge data validate FILE Validate JSONL data
mlx-forge data inspect NAME Preview dataset samples
mlx-forge data stats NAME Show dataset statistics

Configuration

schema_version: 1

model:
  path: "Qwen/Qwen3-0.6B"         # HF model ID or local path
  quantization:                     # Optional: QLoRA (67% memory savings)
    bits: 4
    group_size: 64

adapter:
  method: lora                      # lora | dora | full
  preset: "attention-qv"            # attention-qv | attention-all | mlp | all-linear
  rank: 16
  scale: 32.0

data:
  train: "./train.jsonl"
  valid: "./val.jsonl"
  # OR: hf_dataset: "tatsu-lab/alpaca"  # Load from HuggingFace
  packing: false                    # Sequence packing (2-5x speedup)
  max_seq_length: 2048

training:
  training_type: sft                # sft | dpo | grpo
  optimizer: adamw                  # adam | adamw | sgd | adafactor
  learning_rate: 1.0e-5
  num_iters: 1000
  batch_size: 4
  gradient_checkpointing: false     # 40-60% memory savings

runtime:
  seed: 42

OpenAI-Compatible API

mlx-forge serve --model Qwen/Qwen3-0.6B --port 8000

Works with any OpenAI SDK client:

from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
response = client.chat.completions.create(
    model="Qwen/Qwen3-0.6B",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)

Data Formats

MLX Forge auto-detects JSONL formats:

Chat — Multi-turn conversations (loss on assistant turns only):

{"messages": [{"role": "user", "content": "Hello"}, {"role": "assistant", "content": "Hi!"}]}

Completions — Prompt-completion pairs:

{"prompt": "Translate to French: Hello", "completion": "Bonjour"}

Text — Raw text for continued pretraining:

{"text": "The quick brown fox jumps over the lazy dog."}

Preference — For DPO alignment training:

{"chosen": [{"role": "user", "content": "..."}, {"role": "assistant", "content": "good"}], "rejected": [{"role": "user", "content": "..."}, {"role": "assistant", "content": "bad"}]}

Library API

All CLI commands are backed by Python functions:

from mlx_forge import prepare, train
from mlx_forge.config import TrainingConfig

# Train from a config file
config = TrainingConfig.from_yaml("train.yaml")
result = train(config=config)
print(f"Best val loss: {result.best_val_loss:.4f}")
from mlx_forge import generate

# Generate text with a fine-tuned adapter
generate(
    model="Qwen/Qwen3-0.6B",
    adapter="~/.mlxforge/runs/my-run/checkpoints/best",
    prompt="Explain quantum computing in simple terms.",
)

Contributing

See CONTRIBUTING.md for development setup, coding standards, and how to submit changes.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mlx_forge-0.6.0.tar.gz (496.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mlx_forge-0.6.0-py3-none-any.whl (486.0 kB view details)

Uploaded Python 3

File details

Details for the file mlx_forge-0.6.0.tar.gz.

File metadata

  • Download URL: mlx_forge-0.6.0.tar.gz
  • Upload date:
  • Size: 496.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for mlx_forge-0.6.0.tar.gz
Algorithm Hash digest
SHA256 0e02b17ffdeace19cc244d8acee1665816504b1afd71f0c83395745d080587a9
MD5 1ed079b05a26ac4e82228b26662df1a3
BLAKE2b-256 a6fd0348a801692cd9085024c4fbe9d8c4397124e8f771946534b814fa824fe5

See more details on using hashes here.

File details

Details for the file mlx_forge-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: mlx_forge-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 486.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for mlx_forge-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 57685cf8f55e942e3159be6f031a3d6b557824448caaebdaebe1beff91ebb489
MD5 293d8e920bfaf7c5ab8dfb8b989c5ce3
BLAKE2b-256 8a6939e3ea23c1d0a1f0b9f7d164f1f12ee8f4a13ddcf030ddc5d608f2de4db7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page