作为一名长期在本地设备上跑模型的实践者,我最近成功在M2芯片的MacBook Pro上完成了Phi-3模型的微调。与云端训练相比,本地微调不仅节省成本,还能更好地保护数据隐私。下面分享我的完整操作流程和踩坑经验。
我的设备是2023款MacBook Pro M2 Max(32GB内存),实测发现:
注意:Intel芯片的MacBook可能遇到兼容性问题,建议使用Apple Silicon机型
通过Miniforge3管理Python环境:
bash复制conda create -n phi3 python=3.10
conda activate phi3
pip install torch torchvision torchaudio
pip install transformers accelerate bitsandbytes
特别说明选型理由:
从HuggingFace获取Phi-3基础模型:
python复制from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"microsoft/phi-3-mini-4k-instruct",
torch_dtype="auto",
trust_remote_code=True
)
这是能在MacBook上运行的关键步骤:
python复制from transformers import BitsAndBytesConfig
quant_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_quant_type="nf4"
)
model = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=quant_config
)
量化后模型大小从12GB降至约3.8GB,内存占用降低67%。
我使用Alpaca格式的JSON文件:
json复制[
{
"instruction": "解释量子计算原理",
"input": "",
"output": "量子计算利用量子比特..."
}
]
关键参数设置考量:
python复制training_args = TrainingArguments(
per_device_train_batch_size=2, # 根据内存调整
gradient_accumulation_steps=4,
learning_rate=5e-5,
num_train_epochs=3,
optim="paged_adamw_8bit", # 内存优化版优化器
save_strategy="steps",
logging_steps=10,
fp16=True # 启用混合精度
)
使用QLoRA技术降低显存需求:
python复制from peft import LoraConfig
lora_config = LoraConfig(
r=8,
target_modules=["q_proj","k_proj"],
lora_alpha=16,
lora_dropout=0.05
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset,
peft_config=lora_config
)
trainer.train()
在~/.zshrc中添加:
bash复制export PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.8
训练时另开终端运行:
bash复制vm_stat 1 | grep "Pages active"
CUDA out of memory:减小batch_sizeKilled进程:系统内存不足,尝试gradient_checkpointing加载微调后的模型:
python复制from transformers import pipeline
pipe = pipeline("text-generation", model="path_to_finetuned")
print(pipe("如何用Python实现快速排序?"))
在4k上下文长度下:
经过一周的实际使用,这个配置下模型可以:
最后分享一个实用技巧:定期使用torch.mps.empty_cache()清理缓存可以避免内存泄漏问题。对于需要长期运行的训练任务,建议搭配使用nohup和tee命令保存日志。