不到350元训练亿参数模型:SmoLLM从零构建全记录

一场廉价而有趣的LLM实验
近日,一位机器学习工程师在Reddit上分享了他利用业余时间从零构建LLaMA风格小型语言模型的完整经历。这个被命名为SmoLLM的模型仅有1.09亿参数,训练总成本不到人民币350元(约合4000卢比),却展现出令人惊讶的语言理解能力。
在动辄数亿美元训练成本的大模型时代,这个实验提供了一个难得的视角:有限的参数、有限的数据、极低的预算,究竟能训出怎样的语言能力?作者坦言这中间「没有新发现」,纯粹出于兴趣,但结果依然「让他感到惊讶」。
值得一提的是,作者虽然是ML工程师,却从未真正从头构建过一个LLM。整个项目除了捕获困惑度(Perplexity)、统计响应分布等辅助任务外,几乎没有借助AI辅助——这在「AI写AI」盛行的当下,反而显得难能可贵。
**困惑度(Perplexity)**是评估语言模型性能最常用的内在指标,直观含义是「模型在预测下一个token时平均有多'困惑'」。数学上,困惑度是测试集上每个token平均负对数似然的指数,值越低代表模型对语料的预测越准确。例如,困惑度为10意味着模型平均每步从10个等可能的候选token中选择。值得注意的是,困惑度只反映模型对训练分布的拟合程度,并不直接对应人类感知的「回答质量」——一个困惑度低的模型依然可能产生大量幻觉或逻辑错误,这也是现代LLM评估越来越依赖人工评估和基准测试的原因。
技术架构与训练流程
从分词器到基础模型
SmoLLM采用LLaMA风格的架构设计,参数量控制在109M。LLaMA(Large Language Model Meta AI)是Meta于2023年发布的开源大语言模型系列,其架构在学术界和工程实践中迅速成为小型/中型语言模型的事实标准。相比GPT系列,LLaMA采用了若干关键改进:使用RMSNorm替代LayerNorm以提升训练稳定性;采用RoPE(旋转位置编码)使模型对序列长度泛化能力更强;以及使用SwiGLU激活函数在相同参数量下获得更好的表达能力。
要理解这三项改进的价值,首先需要了解Transformer架构的基本构成。Transformer由Google于2017年在论文《Attention Is All You Need》中提出,其核心创新——自注意力机制(Self-Attention)——彻底颠覆了此前以RNN/LSTM为主流的序列建模范式。与RNN逐步处理序列的方式不同,自注意力机制允许序列中任意两个位置直接「交流」,并行计算整个序列的依赖关系,这使得Transformer在长距离依赖捕捉和训练并行化两个维度上同时取得突破。在此基础上,Transformer的每一层由两个核心模块组成:多头自注意力机制(Multi-Head Self-Attention)负责捕捉序列中不同位置之间的依赖关系,前馈网络(Feed-Forward Network,FFN)则负责对每个位置的表示进行非线性变换。层归一化(Layer Normalization)和位置编码则是确保训练稳定性与序列顺序感知的辅助组件。LLaMA的三项改进正是针对这三个辅助环节的精细化优化,而非对核心注意力机制的颠覆性重设计——这也是其工程友好性的根源所在。
这三项改进各有其深厚的工程背景。RMSNorm(Root Mean Square Normalization)相比原始LayerNorm省去了均值中心化步骤,在保持训练稳定性的同时将归一化计算量降低约40%,对推理速度敏感的边缘部署场景尤为重要。具体而言,LayerNorm需要计算均值和方差两个统计量,而RMSNorm仅计算均方根(RMS),在数学上等价于假设均值为零——这一简化在实践中几乎不损失性能,却带来可观的计算收益,尤其在序列长度较长时效果更为明显。RoPE(Rotary Position Embedding)通过将位置信息编码为复数空间中的旋转变换,使得注意力分数天然具备相对位置感知能力,并且在处理超出训练长度的序列时展现出更优雅的外推特性——这也是后来众多「长上下文」模型的技术基础。与绝对位置编码(如原始Transformer的正弦编码)不同,RoPE编码的是两个位置之间的「相对距离」,这与人类语言中词语间距比绝对位置更重要的直觉高度吻合;后续的YaRN、LongRoPE等工作更是在RoPE基础上将上下文窗口从数千token扩展到百万级别。SwiGLU则是将Swish激活函数与门控线性单元(GLU)结合的产物,Google在PaLM模型中首先将其大规模应用,实验表明在相同参数量下,SwiGLU比ReLU、GeLU等激活函数带来约8%的性能提升。GLU的门控机制允许网络动态地选择性「过滤」信息流,而Swish相比ReLU的优势在于其平滑、非单调的特性,梯度在负数区域不会完全归零,有效缓解了「神经元死亡」问题。这些设计的最大优势在于工程友好性——整体架构简洁、可复现性强,使得独立开发者能以极低门槛复现和改造,SmoLLM选择这一风格并非偶然。
词表构建上,作者使用了Hugging Face的BPE训练器生成自定义词汇表。BPE(Byte Pair Encoding,字节对编码)是当前主流LLM普遍采用的分词算法,最初源于数据压缩领域。其核心思想是从字符级别出发,迭代合并语料库中出现频率最高的相邻字符对,直到词表达到预设大小。BPE能自然处理未登录词问题——任何单词都可以被分解为已知的子词单元,GPT系列使用的tiktoken、LLaMA使用的SentencePiece均基于BPE或其变体。词表大小是关键超参数:词表越大,单个token承载的语义越完整,但嵌入层参数量随之增加,对小模型而言需谨慎权衡。以LLaMA 2的32000词表为例,其嵌入层在4096维隐层下需占用约1.3亿参数,几乎与SmoLLM整体参数量相当——这正是小模型设计中「词表-容量」取舍的典型困境。更深层的矛盾在于,BPE词表的合并策略天然倾向于高频英文子词,对中文、阿拉伯文等非拉丁语系语言的表示效率极低,同一语义内容所需token数可能是英文的2-4倍,这进一步压缩了小模型在多语言场景下的有效建模长度。作者半开玩笑地表示,如果Python运行速度足够快,他本想连分词器也亲手实现。
训练分为两个阶段。第一阶段是基础模型训练,使用了来自FineWeb-Edu数据集的约25亿token。FineWeb-Edu是Hugging Face于2024年发布的高质量网页文本数据集,从CommonCrawl(覆盖数十亿网页的公开爬虫数据库)中筛选出教育性较强的内容,通过专门训练的分类器对网页进行教育质量评分,保留高分样本。对于参数量有限的小模型而言,数据质量对最终性能的影响甚至超过数据量本身——用「干净」的教育类文本训练,能让模型在有限容量内学到更稳健的语言模式,而非从噪声数据中拟合无效特征。值得关注的是,FineWeb-Edu的质量过滤器本身是一个在Llama-3上微调的分类器,以教育工作者的评分标准(如知识密度、逻辑连贯性、表述准确性)对原始CommonCrawl网页打分——这种「用模型筛选数据来训练模型」的自举范式(Bootstrap Paradigm)正日益成为高质量数据集构建的主流方法论。
关键踩坑:遗漏的EOS token
项目中最典型的教训,是作者在基础模型训练完成后才发现——训练样本末尾从未添加[EOS](结束符)token,导致模型根本不知道何时停止生成。
EOS token是语言模型词表中的特殊标记,用于显式告知模型「序列在此终止」。在自回归生成范式中,模型每次预测下一个token的概率分布,若训练数据中从未出现EOS标记,模型便无法学习到「何时停止」这一关键行为,推理时会陷入无限续写的状态。这个问题属于数据预处理层面的错误,而非模型架构问题,因此无法通过调整超参数修复,只能重新处理数据并补充训练。类似的特殊token还包括BOS(序列起始)、PAD(填充)等,它们共同构成模型理解序列边界的基础,任何一个处理不当都可能导致模型行为异常。值得一提的是,不同的模型框架对特殊token的处理方式存在微妙差异:有些框架在数据加载时自动插入EOS,有些则依赖开发者在预处理脚本中手动添加——这种「隐式约定」恰恰是工程实践中最容易被忽视、却影响最深远的细节之一。此外,在多文档拼接训练(Packing)场景下,EOS的处理更为复杂:若拼接边界处缺少EOS,模型会将来自不同文档的内容错误地视为连续上下文,导致跨文档的注意力污染——这是工业级数据管道中一个额外的EOS陷阱。
为修复这个问题,作者不得不用同一数据集中约4亿token重新训练了一轮,才让模型能够「勉强合格地」预测EOS。这个细节对任何计划自训模型的开发者都是一记提醒:数据预处理中一个看似微小的疏漏,可能直接导致模型行为失控。
指令微调带来的质变
在基础模型之上,作者使用databricks-dolly-15k数据集进行了指令微调(Instruct Tuning)。指令微调是将预训练基础模型转化为「能对话的助手」的关键步骤,本质上是在基础模型之上进行有监督微调(SFT,Supervised Fine-Tuning)。
理解SFT在整个模型对齐流程中的位置,有助于把握这一步骤的价值与局限。完整的现代对齐流程通常包含三个阶段:首先是SFT(有监督微调),让模型学会指令-回答范式;其次是奖励模型训练,通过人类偏好标注学习「什么是好的回答」;最后是RLHF(基于人类反馈的强化学习)或DPO(直接偏好优化),利用奖励信号进一步优化模型行为。其中,DPO是2023年斯坦福提出的RLHF替代方案,其核心创新在于绕过显式奖励模型的训练,直接利用人类偏好对(chosen/rejected响应对)对语言模型参数进行优化,在数学上等价于隐式地学习了一个最优奖励函数。DPO的提出大幅降低了对齐训练的工程复杂度,使得中小团队无需部署完整的强化学习基础设施即可完成高质量对齐——Mistral、Zephyr等多个开源模型均采用DPO作为对齐方案。在DPO之后,SimPO、ORPO等更新的对齐算法进一步简化了对参考模型(Reference Model)的依赖,将对齐所需的计算资源和工程复杂度再次压缩,预示着「个人级对齐训练」的可行性正在快速提升。SmoLLM仅完成了第一阶段,这也是其输出质量介于「基础续写」和「成熟助手」之间的根本原因——SFT能让模型理解对话格式,但无法像RLHF/DPO那样系统性地过滤有害内容、减少幻觉或提升回答的有用性。即便如此,仅凭SFT就能带来显著的能力跃升,这说明「理解指令格式」本身是一项独立且高价值的能力迁移。
基础模型通过海量文本学习语言的统计规律,但其输出形式是「续写」——给定上文,预测下文,并不理解「提问-回答」这一交互范式。databricks-dolly-15k是Databricks于2023年开源的高质量指令数据集,包含约15000条由员工人工撰写的问答对,涵盖创意写作、信息提取、问答等多种任务类型。相比合成数据,人工撰写的指令数据质量更高,对小模型微调效果尤为显著。作者明确指出,指令微调「帮助巨大」——正是这一步让模型能给出连贯的对话式回答,而不再只是漫无目的地续写文本。
模型实测:语言能力在线,事实幻觉严重
从作者放出的实际对话样例来看,SmoLLM在简单问题上的表现相当不错:
- 问:什么是机器学习? 答:机器学习算法从数据中学习,并基于所收集的信息做出预测。
- 问:说出3种颜色? 答:红、蓝和绿。
- 问:地球上最大的动物是什么? 答:大象。
这些回答虽不完美(最大的动物应是蓝鲸而非大象),但语法通顺、逻辑基本成立,对一个百兆参数的模型而言已属不易。
然而,当问题变得复杂,短板便暴露无遗。被要求「简单介绍一下印度」时,模型输出了严重的幻觉内容:把首都说成孟买(实际是新德里),编造了「2131名居民」「人口密度373人」等自相矛盾的数字,甚至将金奈与泰米尔纳德邦混为一谈。
作者直言不讳:「它产生了大量幻觉,但语言理解能力相当不错。」这句话精准概括了小模型的典型特征——它们学会了如何说话,却没有足够的容量记住足够多的事实。
这背后有深刻的机制原因。语言模型的知识主要存储在Transformer的前馈网络(FFN)层中,研究者将其类比为「键值记忆」——每个神经元对应一个知识条目的检索和存储单元。2021年的研究论文《Transformer Feed-Forward Layers Are Key-Value Memories》系统验证了这一假说:FFN的第一层权重充当「键」,编码触发特定知识的语境模式;第二层权重充当「值」,存储对应的事实内容。这一发现不仅解释了知识存储的机制,也启发了后续的「知识编辑」(Knowledge Editing)研究方向——通过直接修改FFN中对应的权重来更新模型的特定事实记忆,而无需重新训练整个模型,代表性工作包括ROME(Rank-One Model Editing)和MEMIT等。这一发现意味着,模型能「记住」多少世界知识,本质上由FFN的参数量决定。109M参数的模型中,扣除嵌入层和注意力层,实际用于知识存储的FFN参数极为有限。相比之下,GPT-3拥有1750亿参数,约是SmoLLM的1600倍。
Scaling Law(缩放定律)的研究为这一现象提供了理论依据。2020年OpenAI发布的原始缩放定律论文揭示了模型能力随参数量、数据量和计算量的幂律增长关系;2022年DeepMind的Chinchilla论文进一步修正了最优训练配比——对于给定的计算预算,模型参数量与训练token数应大致保持1:20的比例(即1亿参数的模型需要约20亿token达到最优效果)才能充分发挥参数容量。值得关注的是,缩放定律还揭示了一个反直觉现象:随着模型规模扩大,某些能力并非平滑提升,而是在特定参数阈值处「突然涌现」(Emergent Abilities)。2022年Google Brain的研究发现,算术推理、多步推理等能力在约100亿参数以下几乎不存在,而在超过这一阈值后急剧提升——这意味着109M的SmoLLM在某些认知任务上存在难以通过增加训练数据弥补的「能力盲区」,并非训练不充分,而是参数量本身构成了能力涌现的门槛。需要指出的是,涌现能力的存在本身仍有争议:2023年斯坦福的后续研究表明,部分「涌现」现象可能是评估指标选择的产物——若采用更细粒度的连续指标而非离散的通过/失败标准,某些能力实际上是平滑增长的,并不存在真正的阈值跃变。这一争论提醒我们,对小模型能力边界的判断需审慎区分「真实能力瓶颈」与「评估方法局限」。SmoLLM使用25亿token训练109M参数模型,从Chinchilla视角看训练数据量是相对充足的,但109M参数本身决定了知识存储的硬性上限。更根本的是,语言模式的习得(语法、句法、语用规则)所需参数远少于事实性知识的存储(世界知识、具体数字、地理信息),这从根本上解释了小模型「会说话」但「记不住事实」的现象——参数量决定了知识存储的上限,109M显然远不足以承载世界知识。
成本拆解:不到350元的完整训练账单
这个项目最吸引眼球的,是它的极低成本。作者列出了清晰的账单:
- 完整训练成本:约3500卢比(约合人民币290元)
- 因张量计算错误导致的失败训练:额外损失约500卢比
即便算上失败的那次,总花费也不到4000卢比。这意味着任何有一定基础的开发者,用一顿饭的预算就能完整体验「从零训练LLM」的全流程——包括构建词表、训练基础模型、指令微调,以及踩坑与修复。
如此低廉的成本得益于云GPU市场的成熟化。与AWS、GCP等主流云厂商相比,Lambda Labs、Vast.ai、RunPod等面向ML开发者的专用GPU云平台通常提供低至前者1/3至1/5价格的算力租用服务,A100、H100等高端GPU的按小时计费模式使得小规模实验的边际成本大幅降低。这一市场格局的形成,部分原因在于加密货币挖矿退潮后大量GPU算力流入二级市场,以及主权AI战略推动各国数据中心扩张带来的阶段性供给过剩。SmoLLM的25亿token训练预计消耗约数十GPU小时,在这类平台上的成本恰好落在百元人民币量级——这也预示着「个人从零训练LLM」在未来将成为越来越普及的学习路径,而非少数大公司的专属实践。
作者已将模型开源,在Hugging Face上发布了SmoLLM-109M-Instruct和SmoLLM-109M-base两个模型卡。但他特别提醒:由于这不是标准的Hugging Face Transformer AutoModel,用户需通过其GitHub仓库提供的代码才能正常运行。
这个实验告诉我们什么
小模型的能力边界
SmoLLM的实践清晰勾勒出小型语言模型的能力轮廓。它证明了:即使数据量和参数量极为有限,模型依然能习得连贯的语言表达能力。这对研究语言涌现现象、教学演示,以及资源受限场景下的应用探索都有参考价值。
但它同样警示我们:语言流畅性与事实准确性是两个完全不同的维度。小模型可以说得头头是道,却无法保证内容真实——这也是当前所有LLM幻觉问题的一个微缩样本。缓解小模型幻觉的工程路径通常包括:检索增强生成(RAG,Retrieval-Augmented Generation)将实时知识查询与生成解耦,让模型无需「记住」事实而只需「阅读」后作答;以及知识蒸馏(Knowledge Distillation),将大模型的「软标签」概率分布迁移给小模型,使小模型在有限参数下获得超出自身容量的泛化能力。RAG的工作原理是在生成前从外部向量数据库中检索与问题相关的文档片段,将其注入上下文窗口,本质上是将「记忆」从模型权重外包给可更新的知识库;知识蒸馏则通过让学生模型拟合教师模型的输出分布(而非硬标签),将教师模型在训练中习得的「暗知识」(Dark Knowledge)——即对错误类别的软概率分布所隐含的类间相似性信息——以更紧凑的方式传授给小模型,TinyBERT、DistilGPT等均是这一路径的代表性成果。这两条路径共同指向同一个方向:与其强求小模型存储海量事实,不如通过外部机制弥补其知识短板。
动手实践的不可替代性
对于ML学习者,这个项目最大的启示在于「亲手做一遍」的价值。作者作为经验丰富的工程师,依然在EOS token和张量计算上踩了坑。这些问题无法通过阅读论文规避,只能在实践中亲身经历、修复,才能真正建立起对底层机制的直觉。
在大模型API唾手可得的今天,愿意花时间从零构建模型的人越来越少。但恰恰是这类「为了好玩」的实验,往往能让人对Transformer底层机制建立起最扎实的理解。SmoLLM的故事或许不会推动前沿研究,却为每一位好奇「LLM究竟是如何炼成的」的开发者,提供了一张可复现的、低成本的实践地图——这本身,已经足够有价值。
核心要点
- LLaMA架构三大改进(RMSNorm、RoPE、SwiGLU)均针对Transformer辅助组件的精细化优化,工程友好、可复现性强,是小模型开发的理想起点;RoPE的相对位置编码思想更催生了YaRN、LongRoPE等长上下文扩展技术
- BPE分词的词表大小选择对小模型至关重要,嵌入层参数量可能占据模型总容量的相当比例,需在语义完整性与参数效率间权衡;非拉丁语系语言的token效率劣势在小模型多语言场景中尤为突出
- EOS token遗漏是数据预处理中最常见且代价最高的错误之一,无法通过超参数调整修复,只能重新处理数据——多文档拼接训练(Packing)场景下的跨文档EOS污染是另一个同类陷阱,任何自训项目的数据管道都应将特殊token检查列为必选项
- SFT仅是对齐的第一步,完整流程还包括奖励模型训练与RLHF/DPO;DPO及其后继的SimPO、ORPO等算法持续降低对齐工程门槛,但SmoLLM尚未触及这一阶段
- **小模型「会说话但记不住事实」**的根本原因在于FFN参数量限制了知识存储上限,涌现能力的阈值效应进一步制约了某些推理能力的出现(尽管涌现是否真实存在仍有学术争议);RAG和知识蒸馏是工程上弥补这一短板的主要路径
- 极低训练成本(不到350元人民币)表明「个人从零训练LLM」已具备可行性,云GPU专用平台的普及与算力市场的结构性供给变化正在持续压低这一门槛
相关推荐

Suno v6模型发布:AI音乐首次获唱片业授权支持
Suno发布v6音乐生成模型,首次采用唱片公司授权数据训练,标志AI音乐从版权争议走向合规合作。深度解析这一转变对行业、创作者和未来发展的影响。

Gemini 2.0 Flash编程实测:AI开发3D游戏全流程
通过SVG动画、Three.js 3D场景和FPS游戏三个实测案例,深度评测Gemini 2.0 Flash的编程能力。模型在代码生成质量、复杂空间建模和成本控制方面表现出色,配合Antigravity CLI工具可大幅提升开发效率。

理解上下文窗口:AI编程助手表现差的真正原因
深入解析上下文窗口对AI编程Agent的核心影响。了解什么是上下文窗口、为什么窗口越大性能反而下降、如何管理Claude Code上下文,以及MCP服务器和规则文件的优化策略。