1. MacBook M4 本地部署 LLaMA-Factory 微调指南
最近在 MacBook Pro M4 上折腾 LLaMA-Factory 的本地微调,发现这个工具确实对新手很友好。作为一个刚接触大模型微调的开发者,我记录下整个配置过程和踩过的坑,希望能帮到同样想在苹果芯片上尝试模型微调的朋友。
LLaMA-Factory 最大的优势是提供了 WebUI 界面,不需要写代码就能完成从数据处理到模型训练的完整流程。对于 Mac 用户来说,M4 芯片的神经网络引擎(ANE)在运行轻量级模型时表现不错,实测 7B 参数的模型可以流畅进行 LoRA 微调。
2. 环境准备与安装
2.1 硬件与系统要求
我的测试设备是 2024 款 MacBook Pro M4(16GB 统一内存),系统为 macOS Sonoma 14.5。建议至少满足以下配置:
- Apple Silicon 芯片(M1/M2/M3/M4)
- 16GB 以上内存
- 50GB 可用存储空间
注意:Intel 芯片的 Mac 性能会差很多,不建议尝试超过 3B 参数的模型
2.2 依赖安装
首先通过 Homebrew 安装基础依赖:
brew install cmake git python@3.11创建 Python 虚拟环境(推荐使用 conda):
conda create -n llama_factory python=3.11 -y conda activate llama_factory安装 PyTorch 的 MPS 版本(适配 Apple 芯片):
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu2.3 LLaMA-Factory 安装
克隆仓库并安装依赖:
git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e .安装可视化依赖(可选):
pip install llama-board3. 模型下载与配置
3.1 选择合适的模型
对于 M4 芯片,推荐从以下模型开始尝试:
- TinyLlama-1.1B(入门首选)
- Phi-2(2.7B,性能优秀)
- Mistral-7B(需要量化)
使用 huggingface-cli 下载模型:
huggingface-cli download TinyLlama/TinyLlama-1.1B-Chat-v1.0 --local-dir ./models/TinyLlama-1.1B3.2 量化配置
为了在有限内存中运行更大模型,需要配置量化。修改src/llmtuner/hparams/model_args.py:
quantization_bit = 4 # 4-bit量化 quantization_method = "bnb" # 使用bitsandbytes4. 数据准备
4.1 数据格式要求
LLaMA-Factory 支持三种数据格式:
- Alpaca 格式(指令微调)
- ShareGPT 格式(对话数据)
- 自定义 JSON 格式
示例数据文件data/demo.json:
[ { "instruction": "解释神经网络的工作原理", "input": "", "output": "神经网络是受生物神经元启发..." } ]4.2 数据预处理
运行数据处理脚本:
python src/llmtuner/tools/preprocess.py \ --data_path data/demo.json \ --output_dir data/processed \ --template default5. 训练配置与启动
5.1 WebUI 启动
启动可视化训练界面:
python src/train_web.py访问http://localhost:7860可以看到完整的操作界面。
5.2 关键训练参数
对于 M4 芯片,建议配置:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| batch_size | 2 | 批大小 |
| learning_rate | 2e-5 | 学习率 |
| lora_rank | 8 | LoRA 秩 |
| max_samples | 1000 | 最大样本数 |
| fp16 | True | 半精度训练 |
5.3 开始训练
在 WebUI 中按步骤操作:
- 选择模型路径
- 加载处理好的数据
- 设置训练参数
- 点击"Start Training"
终端会显示类似如下的进度信息:
Epoch: 1/3 | 25% | 128/512 | lr: 2.00e-5 | loss: 1.236. 常见问题与解决方案
6.1 内存不足错误
如果遇到CUDA out of memory:
- 减小
batch_size - 使用更低 bit 的量化(如 3bit)
- 尝试更小的模型
6.2 训练速度慢
可以尝试:
export PYTORCH_ENABLE_MPS_FALLBACK=16.3 模型加载失败
检查:
- 模型路径是否正确
- 是否有
.gitignore文件 - 文件权限设置
7. 模型测试与使用
训练完成后,在output目录会生成适配器权重。测试模型:
from llmtuner import ChatModel model = ChatModel({ "model_name_or_path": "output/final", "template": "default" }) print(model.chat("你好!"))8. 性能优化技巧
- 使用 Metal 加速:
import torch torch.backends.mps.is_available() # 应返回True- 缓存配置:
export HF_HOME=./cache export HF_DATASETS_CACHE="./cache/datasets"- 监控工具: 安装
htop实时监控资源使用:
brew install htop htop9. 进阶配置
9.1 多模态训练
如果要训练 LLaVA 等多模态模型,需要额外安装:
pip install git+https://github.com/haotian-liu/LLaVA.git9.2 分布式训练
虽然 M4 是单芯片,但可以连接多个 Mac 组成集群。需要配置:
distributed_backend = "ray"10. 实际应用建议
经过多次测试,我总结出几个实用建议:
- 首次尝试建议用 TinyLlama,完整训练周期约 2 小时
- 训练时关闭其他应用,特别是 Chrome
- 使用外接散热器可以维持更高性能
- 每 30 分钟手动保存一次检查点
- 夜间训练时记得关闭系统自动更新
这套配置在 M4 上跑 7B 模型的 LoRA 微调,每小时大约能处理 800 条样本,足够个人学习和中小型项目使用。如果想尝试更大模型,可以考虑租赁云服务器或者使用 Mac Studio 等设备。