首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在 Mac 上微调一切大模型

在 Mac 上微调一切大模型

作者头像
Ai学习的老章
发布2026-04-17 16:27:00
发布2026-04-17 16:27:00
2670
举报

聊个让我非常兴奋的项目——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 集群跑

代码语言:javascript
复制
# 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 就能上云训练:

功能有多全?看完吓一跳

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

语言模型训练:

  • 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 到硬件的五层设计:

快速上手

安装很简单,推荐用 uv:

代码语言:javascript
复制
# 标准安装
uv pip install mlx-tune

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

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

代码语言:javascript
复制
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 微调也是同样简洁的体验:

代码语言:javascript
复制
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 模型:

代码语言:javascript
复制
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 的定位非常清晰:本地原型 → 云端量产

代码语言:javascript
复制
本地 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 用户,又对微调大模型感兴趣,强烈建议试试

#mlxtune #微调 #AppleSilicon #MLX #Unsloth #大模型微调

制作不易,如果这篇文章觉得对你有用,可否点个关注。给我个三连击:点赞、转发和在看。若可以再给我加个🌟,谢谢你看我的文章,我们下篇再见!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与统计学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mac 用户的微调困境
  • 功能有多全?看完吓一跳
  • 快速上手
  • 视觉模型微调
  • TTS 微调:在 Mac 上克隆声音
  • 工作流全景
  • 它适合谁?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档