先看成果:39M 的「话痨小猫」成本清单:一张游戏本就够第一关:给它读什么书第二关:模型身子骨怎么搭第三关:开炼,外加一次经典翻车写给想动手的你的心法
平时聊 AI,动不动就是几千亿参数的大模型,咱普通人的笔记本连门都摸不着。但有位博主偏不信邪:他花两天时间,在自己那台游戏本上,从零炼出了一个只有3885 万参数的小语言模型,取名 DuoGPT。总开销呢?一张 RTX 4060 笔记本显卡的算力,外加五块钱的大模型 API 材料费。
先别急着说「这么小肯定是个废物」,看看它实际的成绩单:给它一段提示「写一个关于害羞小猫的故事」,它能一口气编出一篇开头、转折、升华俱全的完整小故事;给它一段英文故事让它做摘要,它也能把几百词压缩成一两句中心思想。对 39M 的体格来说,这水平已经相当超模——博主自己都表示,原本预计它顶多颠三倒四拼单词,结果它居然能流畅表达。
它是怎么炼出来的?整个流程就四步:搭架子、选语料、预训练、微调。下面一层层拆给你看。
很多人一听「炼模型」就觉得是机房级氪金项目,其实把目标定小一点,门槛低得惊人。这份账单你可以直接抄:
看到没?五小时出头、一部奶茶钱。炼模型的门槛从来不主要在钱上,而在你知不知道每一步该喂什么、怎么喂。
模型的上限,是数据决定的。这次选的主粮是TinyStories——一个由 GPT-4 生成的儿童故事集,270 多万篇故事,词汇简单、语法干净、逻辑直白,2.23G 大小。为什么要挑儿童故事?因为小模型脑子小,给它读《战争与和平》只会消化不良,读「小猫小兔交朋友」这种级别的语料,才能学到扎实的语言规律。
博主还掺了约 44.8 万篇略复杂一点的儿童故事做配菜,两份语料合计7.45 亿 token。光有「读书」还不够,还要教它「对话」——微调(SFT)阶段的语料里,七成是 TinyStories 自带的「以 XX 为主角写个故事」指令数据,三成是 bAbI:一种「给你一段短文、问你一个问题」的问答小任务。一个教它写作文,一个教它答阅读理解。
架子搭的是标准的 GPT 式 Transformer,但因为参数要精打细算,每一项都值得单独说:
两个细节尤其值得划重点。一是词表是自己训练的,没贪大——词表每大一号,占掉的参数就多一份,还会把词切得太碎,小模型经不起这种浪费。二是他忘了给切词器设特殊 token,结果模型一见到中文输入直接报错,这也算是一次真实的教学事故。整个架构用配置一页就能说清:
预训练环节反而没什么戏剧性:模型太小,怕过拟合,只跑了1 个 epoch,优化器用 AdamW,批大小 256。loss 最终停在 1.602,困惑度(ppl)4.96——对一个小不点来说,这条训练曲线相当优雅。
真正的翻车发生在微调。一开始只喂了 TinyStories 的指令数据,结果模型学成了「故事性话痨」:不管你问什么,它都给你写一段故事。你问它数学,它给你讲小猫;你问它天气,它还是给你讲小猫。解决方案也朴素——把 bAbI 问答数据加进去重新训了一轮,ppl 降到三点多,它才学会「问什么答什么」。
顺带还有个血泪教训:折腾这一轮时没备份 checkpoint,差点整个预训练推倒重来。炼丹第一守则:随时存档,这条不管模型大小都适用。
复盘整个项目,能沉淀下来的经验就三条:
- • 小模型要精打细算:分词器自己训、开小一点,别让词表白吃参数
- • 数据决定上限:语料要贴着自己的目标场景挑,简单干净的儿童故事反而比大而杂的网文好用
- • 每一步都要留 checkpoint:微调翻车是常态,能回滚才敢大胆试
下一步博主还打算给它加 Vikidia 简易百科语料,让这个 39M 的小家伙多攒点知识。你看,炼一个自己的模型,真没想象中那么远——一台普通游戏本就够入场。
如果给你五块钱和两天时间,你想炼一个什么味道的小模型?会写打油诗的、会报菜名的,还是会陪你抬杠的?评论区聊聊~
热门跟贴