AI

在 Mac 上微调一切大模型

转载:在 Mac 上微调一切大模型

前言 🔖


聊个让我非常兴奋的项目——mlx-tune

一句话概括:在你的 Mac 上,用 Unsloth 的 API 微调一切

LLM、视觉模型、TTS、STT、OCR、Embedding,全都能在 Apple Silicon 上本地微调

🔹Mac 用户的微调困境

做大模型微调的同学应该都有过这种体验:想在本地跑个小实验验证下 idea,结果发现 Unsloth 依赖 Triton,而 Triton 不支持 Mac

于是你只剩两条路:

  1. 1. 花钱开云 GPU —— 就跑个 100 条数据的实验,有必要吗?
  2. 2. 用 mlx-lm 原生 API —— 但代码和 unsloth 完全不兼容,到了云上还得重写一遍

mlx-tune(github.com/ARahim3/mlx-tune)的作者也遇到了一模一样的问题

他的解决思路非常简单粗暴:把 MLX 包装成 Unsloth 的 API

你在 Mac 上写的训练脚本,换个 import 就能直接在 CUDA 集群跑

mlx-tune 是一个专为 Apple Silicon 设计的机器学习微调项目。针对 Mac 用户难以使用依赖 Triton 的 Unsloth 库的问题,该项目通过将 MLX 框架封装为 Unsloth 的 API 接口,实现了代码在本地 Mac 与云端 CUDA 集群间的无缝切换。这一设计让开发者能够在本地进行想法验证,并在云端直接运行生产级代码,无需修改核心逻辑。

# Unsloth (CUDA)                        # MLX-Tune (Apple Silicon)
from unsloth import FastLanguageModel   from mlx_tune import FastLanguageModel
from trl import SFTTrainer              from mlx_tune import SFTTrainer

# 后面的代码一模一样!

这才是真正解决问题的设计

下面这张图清楚展示了 mlx-tune 的工作流——本地原型验证,改个 import 就能上云训练:

  

🔹核心机制与优势

mlx-tune 的核心价值在于其 API 兼容性。通过模拟 Unsloth 的接口,用户只需将代码中的导入语句从 from unsloth 修改为 from mlx_tune,即可将训练脚本迁移至 Mac 环境运行。这一机制不仅降低了多平台开发的成本,也填补了 Mac 端缺乏高效微调工具的空白。

特性Unslothmlx-tune
运行环境CUDA (Linux/云端)Apple Silicon (Mac 本地)
依赖库TritonMLX
API 接口原生接口兼容 Unsloth API
硬件成本需购买云 GPU利用现有 Mac 设备
主要用途大规模生产训练快速验证、小数据集实验

  

全模态功能支持🔖


功能有多全?看完吓一跳

它支持的训练方法比很多正经公司的内部工具都全:

语言模型训练:

  • SFT:基础指令微调,这是最常用的
  • DPO / ORPO / KTO / SimPO:各种偏好学习方法全覆盖
  • GRPO:DeepSeek R1 风格的多生成 + 奖励训练
  • CPT:持续预训练,支持解耦学习率

多模态训练:

  • Vision:支持 Gemma 4、Qwen3.5、PaliGemma、LLaVA、Pixtral 等 VLM 微调
  • TTS:Orpheus、OuteTTS、Spark-TTS、Sesame/CSM、Qwen3-TTS 五个 TTS 模型
  • STT:Whisper、Moonshine、Qwen3-ASR、NVIDIA Canary、Voxtral 五个 STT 模型
  • Embedding:BERT、ModernBERT、Qwen3-Embedding、Harrier,支持对比学习
  • OCR:DeepSeek-OCR、GLM-OCR、olmOCR、Qwen-VL,内置 CER/WER 指标

进阶能力:

  • MoE 微调:支持 39+ 种 MoE 架构,包括 Qwen3.5-35B、Mixtral、DeepSeek 系列
  • Gemma 4 Audio:12 层 Conformer 音频塔,原生处理 16kHz 音频
  • LFM2:Liquid AI 的混合卷积+GQA 架构

说真的,一个社区项目做到这个程度,相当离谱

全景架构一览——从 API 到硬件的五层设计:

  

快速上手🔖


🔹基本思路

安装环境
通过 pip install mlx-tune 命令安装项目库。
配置模型
加载模型并配置 LoRA (Low-Rank Adaptation) 参数。
执行训练
运行训练脚本,在本地完成微调过程。
导出部署
将训练完成的模型直接导出为 GGUF 格式,即可导入 Ollama 进行推理应用。

安装很简单,推荐用 uv:

# 标准安装
uv pip install mlx-tune

# 带音频支持
uv pip install 'mlx-tune'
brew install ffmpeg

来个最基础的 SFT 微调示例:

from mlx_tune import FastLanguageModel, SFTTrainer, SFTConfig
from datasets import load_dataset

# 加载模型(4bit 量化,省显存)
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="mlx-community/Llama-3.2-1B-Instruct-4bit",
    max_seq_length=2048,
    load_in_4bit=True,
)

# 加 LoRA
model = FastLanguageModel.get_peft_model(
    model,
    r=16,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
    lora_alpha=16,
)

# 加载数据集
dataset = load_dataset("yahma/alpaca-cleaned", split="train[:100]")

# 训练
trainer = SFTTrainer(
    model=model,
    train_dataset=dataset,
    tokenizer=tokenizer,
    args=SFTConfig(
        output_dir="outputs",
        per_device_train_batch_size=2,
        learning_rate=2e-4,
        max_steps=50,
    ),
)
trainer.train()

# 保存:三种格式随你选
model.save_pretrained("lora_model")           # LoRA 适配器
model.save_pretrained_merged("merged", tokenizer)  # 合并后的完整模型
model.save_pretrained_gguf("model", tokenizer)     # GGUF 格式,直接给 Ollama 用

如果你用过 Unsloth,这代码看着是不是特别眼熟?对,就是同一套 API

  

🔹视觉模型微调

VLM 微调也是同样简洁的体验:

from mlx_tune import FastVisionModel, UnslothVisionDataCollator, VLMSFTTrainer
from mlx_tune.vlm import VLMSFTConfig

model, processor = FastVisionModel.from_pretrained(
"mlx-community/Qwen3.5-0.8B-bf16",
)

model = FastVisionModel.get_peft_model(
    model,
    finetune_vision_layers=True,    # 视觉层也微调
    finetune_language_layers=True,
    r=16, lora_alpha=16,
)

# 训练(数据集格式和 Unsloth 一致)
FastVisionModel.for_training(model)
trainer = VLMSFTTrainer(
    model=model,
    tokenizer=processor,
    data_collator=UnslothVisionDataCollator(model, processor),
    train_dataset=dataset,
    args=VLMSFTConfig(max_steps=30, learning_rate=2e-4),
)
trainer.train()

Gemma 4、Qwen3.5、PaliGemma、LLaVA、Pixtral 都支持

你甚至可以用 Vision GRPO 来训练视觉推理能力

  

🔹TTS 微调:在 Mac 上克隆声音

这个功能我觉得特别有意思——在 Mac 上本地微调 TTS 模型:

from mlx_tune import FastTTSModel, TTSSFTTrainer, TTSSFTConfig, TTSDataCollator
from datasets import load_dataset, Audio

# 自动检测模型类型、编码器和 token 格式
model, tokenizer = FastTTSModel.from_pretrained(
"mlx-community/orpheus-3b-0.1-ft-bf16"
)
model = FastTTSModel.get_peft_model(model, r=16, lora_alpha=16)

dataset = load_dataset("MrDragonFox/Elise", split="train[:100]")
dataset = dataset.cast_column("audio", Audio(sampling_rate=24000))

trainer = TTSSFTTrainer(
    model=model, tokenizer=tokenizer,
    data_collator=TTSDataCollator(model, tokenizer),
    train_dataset=dataset,
    args=TTSSFTConfig(output_dir="./tts_output", max_steps=60),
)
trainer.train()

Orpheus、OuteTTS、Spark-TTS、Sesame/CSM、Qwen3-TTS 都支持

想做声音克隆或者风格化 TTS,再也不用租 GPU 了

  

🔹工作流全景

mlx-tune 的定位非常清晰:本地原型 → 云端量产

本地 Mac (mlx-tune)              云端 GPU (Unsloth)
├── 快速实验                       ├── 大规模训练
├── 小数据集验证                    ├── 完整数据集
├── 秒级迭代                       ├── 生产级优化
└── 同一套代码 ─────────────────── └── 同一套代码

训练完还能直接导出:

  • HuggingFace 格式:标准保存
  • GGUF:直接丢给 Ollama / llama.cpp
  • push_to_hub:一键推到 HuggingFace Hub

它适合谁?

我觉得 mlx-tune 最适合这几类人:

  1. 1. Mac 用户 + 微调需求:你有 M1/M2/M3/M4/M5,想在本地跑微调实验,这是最佳选择
  2. 2. 混合工作流用户:本地调试、云端训练,代码无缝迁移
  3. 3. 多模态探索者:想同时玩 LLM、Vision、TTS、STT、OCR 微调的人
  4. 4. 学习者:想理解微调原理,在本地快速迭代比去 Colab 排队强太多

局限性也得说清楚:

  • • 训练速度肯定比不上 A100 + Unsloth,这是物理定律决定的
  • • GGUF 导出对量化模型有限制,建议用非量化基座模型
  • • 内存受限于 Mac 的统一内存(不过 Mac Studio 最高 512GB,够用了)

如果你是 Mac 用户,又对微调大模型感兴趣,强烈建议试试。