在 Mac 上本地训练诗词 AI:一个开源的 MLX 小模型训练包

你是否想过,让 AI 学会写一首合格的五言绝句,并不一定需要昂贵的 GPU 集群?

最近我开源了一个项目 poetry_dataset,它展示了如何仅凭一台 M 系列芯片的 Mac(比如 Mac Air 16GB),就完成一个 1.5B 参数诗词模型的 LoRA 微调。整个过程不需要 NVIDIA 显卡,也不需要租任何云服务器。

这个项目解决了什么问题?

目前大多数大模型训练教程都指向 Linux + NVIDIA GPU 的方案——你需要 A100、H100,或者按小时租用云端 GPU。但对于普通开发者来说,成本门槛太高了。

而苹果自研的 MLX 框架 改变了这一切。MLX 是苹果专门为 Apple Silicon 芯片设计的机器学习框架,它能高效利用统一内存架构,让大模型推理和微调在本地变得可行。

这个项目就是基于 MLX 框架,面向中文诗词场景的一个完整训练包。

数据来源:从 chinese-poetry 到指令微调数据集

诗词数据的采集,源自著名的开源项目 chinese-poetry,它收录了从先秦到清朝的超过 50 万首中文诗歌。

本项目的 build_dataset.py 脚本做了以下事情:

  1. 精选数据源:从 chinese-poetry 中提取《唐诗三百首》和《宋词三百首》作为高质量核心集,再辅以部分扩展数据(前 15 个分片的唐诗 + 前 10 个分片的宋词)
  2. 繁体转简体:使用 OpenCC 将所有文本统一转换为简体中文
  3. 体裁自动分类:根据句数和每句字数,自动识别五言绝句、七言绝句、五言律诗、七言律诗
  4. 构造 Alpaca 格式指令集:将诗歌数据转化为 instruction/input/output 格式的指令微调数据

最终生成的训练数据包含 19,594 条样本(训练集)和 1,032 条样本(验证集),格式为 MLX-LM 所需的聊天对话格式。

核心文件一览

文件作用
build_dataset.py从 chinese-poetry 原始数据构造指令微调数据集
convert_to_mlx.py将 Alpaca 格式数据转为 MLX-LM 聊天格式 JSONL
pingze_check.py简易格律校验工具,检查诗的字數/句数/押韵/平仄
mlx_data/train.jsonl训练集(19,594 条)
mlx_data/valid.jsonl验证集(1,032 条)
cloud_gpu_alternative/云端 GPU 训练备选方案(LLaMA-Factory + LoRA)

训练流程:三步上手

第一步:安装环境

conda create -n poetry python=3.10 -y
conda activate poetry
pip install mlx-lm

mlx-lm 是苹果官方维护的库,专门在 Apple Silicon 上跑大模型处理和微调。

第二步:转换数据

python convert_to_mlx.py

这会把 poetry_train.jsonpoetry_val.json 转换成 MLX-LM 要求的 JSONL 聊天格式,输出到 mlx_data/ 目录下。

第三步:启动 LoRA 微调

mlx_lm.lora \
  --model ./qwen2.5-1.5b-mlx \
  --train \
  --data ./mlx_data \
  --iters 1000 \
  --batch-size 2 \
  --num-layers 8 \
  --learning-rate 2e-4 \
  --adapter-path ./adapters \
  --save-every 200 \
  --steps-per-eval 100

在 16GB Mac Air 上,这个配置大约 20 分钟就能跑完 1000 步训练。

训练完成后:合并权重并推理

# 合并 LoRA 适配器到模型权重
mlx_lm.fuse \
  --model ./qwen2.5-1.5b-mlx \
  --adapter-path ./adapters \
  --save-path ./qwen2.5-1.5b-poetry

# 生成诗词
mlx_lm.generate --model ./qwen2.5-1.5b-poetry --prompt "请写一首七言绝句,主题是春天" --max-tokens 200

格律校验:让 AI 写的诗更"像诗"

光会写还不够,还得写得合乎格律。项目附带了一个 pingze_check.py 格律校验工具:

python pingze_check.py "床前明月光,疑是地上霜。举头望明月,低头思故乡。"

它会检查:

  • ✅ 句数和每句字数是否符合绝句/律诗格式
  • ✅ 偶数句尾字押韵情况(基于现代拼音韵母)
  • ✅ 逐句平仄分析(基于现代普通话声调粗略估算)
注意:平仄判断使用的是现代普通话声调(1、2 声为平,3、4 声为仄),与古代平水韵存在差异(如古入声字在普通话中可能变为平声)。这是一个快速参考工具,如需严格合规校验,建议后续接入完整的平水韵字表。

为什么值得 Star?

  1. 零成本入门:不需要买 GPU,不需要租云,一台 Mac 就能跑
  2. 数据质量高:精选唐诗三百首 + 宋词三百首为核心数据
  3. 代码透明:从数据构造到训练推理,全流程开源
  4. 实用工具:附带格律校验脚本,不只是训练,还关注生成质量
  5. 云端备选方案cloud_gpu_alternative/ 目录提供了 LLaMA-Factory 的云端 GPU 训练配置

延伸:试试 shi-ci.cn

如果你不想自己训练,也可以直接在 shi-ci.cn 体验诗词 AI。这是一个专注于中国古典诗词的在线平台,提供诗词生成、赏析、格律校验等功能。

这个项目背后的训练数据和模型思路,正是来自上面的 poetry_dataset 开源项目。

结语

在消费级硬件上训练专用 AI 模型的时代已经来了。无论是想学习 MLX 框架、LoRA 微调,还是单纯想让 AI 帮你写一首好诗,这个项目都值得你 Star 一下。

👉 项目地址:github.com/daichangya/poetry_dataset

欢迎 Star、Fork、提 Issue,一起让 AI 学会写诗!