近年来 AI 是卷得越来越厉害了,作为一个普通开发者经常用 AI 辅助编程,但是没有接触过怎么去创造 AI ,这个五一假期,在家研究了一下大模型是怎么训练的……
折腾下来发现一个挺尴尬的事实:网上教程要么是「调用 OpenAI API 」,要么是「分布式集群跑 Llama-3-70B 」,『在自己机器上从零训练一个能用的小模型』反而很少有人讲透。
干脆自己摸一遍,顺手做成工具 Tiny LLM Studio,目标就一个:在 MacBook 上把一个 0.1B 中文模型从 tokenizer 训到 DPO ,全流程跑通。
技术栈没整花哨的:
- 类 LLaMA 架构,约 96M 参数:RoPE + RMSNorm + SwiGLU + GQA
- 32k byte-level BPE tokenizer
- PyTorch ≥ 2.5 + MPS 后端,bf16 训练
- 数据采集 / 清洗 / MinHash 去重 / 配置管理全做进 FastAPI + React Web UI 里
- 预训练 → SFT → DPO → 流式 chat → 困惑度评估,一站式
实测在 M4 Pro / 48GB 上吞吐 8k–15k tokens/s:0.5B tokens 大约 12 小时验证 loss 收敛。--resume 支持断点续训,吃完饭回来无缝接着练。
自己尝试了一下训练,用 1G 的数据量,训练了 1 晚上,然后尝试用 ollama 直接调用大模型,结果吐一堆乱码
后面继续用这 1G 数据再训练 1 晚上,然后进行 sft 微调训练,效果好一些了,至少吐出来的是大段中文
继续用这 1G 数据再训练了第 3 个晚上,然后 sft 微调,吐文字不再大段乱码,而是小段中文短语
用更大量的数据,训练足够多的时间,模型的响应效果会更好。不过这样在我 Macbook 上会需要更多时间。
写到一半我又加了点工程化的私货:
- 写了一个的手机 app,下楼买咖啡时也能远程看训练曲线、改超参
- 集成了
ngroktunnel ,启动时终端直接吐一个二维码,手机扫一下就连上,在公网也能访问
整套放上 GitHub 了,MIT 协议。如果你也想从「用 AI 」过渡到「亲手了解 AI 是怎么炼出来的」,又不想为了学习先去租一张 8×H100 ,欢迎来一起折腾。
GitHub 地址 https://github.com/duguying/100M。 项目地址 https://tinyllm.duguying.net