SmolLM2:小语言模型的大数据训练之路

🕙发布时间:2025-02-19

近日热文:
1. 全网最全的神经网络数学原理(代码和公式)直观解释
2. 大模型进化史:从Transformer到DeepSeek-R1的AI变革之路
3. 2W8000字深度剖析25种RAG变体:全网最全~没有之一
知乎【柏企
公众号【柏企科技说】【柏企阅文

SmolLM2是一个拥有17亿参数的语言模型,它通过多阶段训练过程,在约11万亿个数据标记上进行了过度训练。训练过程中,它将网络文本与专业的数学、代码以及指令跟随数据相混合。此外,当发现现有数据集存在规模过小或质量欠佳的问题时,新的专业数据集(如Fine - Math、Stack - Edu和SmolTalk)便会在相应阶段被引入。

SmolLM2的结构概述

预训练数据集

为了对比英语网络数据集,并找出最适合训练模型的混合数据,研究人员在每个数据集上以相同条件训练17亿参数的模型,序列长度设为2048。每个数据集消融模型都使用从完整数据集中随机采样的3500亿个标记进行训练。

数学和代码能力通常需要经过大量训练才会显现。因此,在评估数学和代码数据集时,研究人员在SmolLM2训练至3万亿令牌的中期检查点上采用退火方法,该模型此前主要在网络数据上进行训练。

在数学数据集评估中,退火操作在待评估数据集的600亿个标记和检查点前混合数据的400亿个标记的混合数据上进行。对于代码衰减评估,退火则在2000亿个令牌上执行,这些令牌均匀分布在15种最常用的编程语言中(每种语言约140亿个令牌)。

英语Web数据

评估在FineWeb - Edu和DCLM上训练的3500亿令牌模型。

FineWeb - Edu包含1.3万亿个标记,这些标记由基于Llama3–70B - Instruct生成的注释训练的分类器判定为“具有教育意义”。DCLM则包含3.8万亿个令牌,这些令牌是通过在OpenHermes 2.5的指令跟随数据以及r/ExplainLikeImFive(ELI5)子版块的高分帖子上训练的fastText分类器筛选得到的。

FineWeb - Edu在教育基准测试MMLU、ARC和OpenBookQA中得分较高,而DCLM在HellaSwag和Common - senseQA测试中表现更为出色。这些结果与数据集的内容相符:FineWeb - Edu侧重于教育材料,而DCLM则涵盖了更多样化的对话风格。

鉴于FineWeb - Edu和DCLM的优势互补,研究人员尝试了60%的FineWeb - Edu和40%的DCLM的混合数据,发现效果良好。结合这些数据集,最终得到了5.1万亿个(英语)文本标记。

数学数据

OpenWebMath(OWM)由120亿个令牌组成,它是通过从Common Crawl中筛选特定数学内容,并利用专门的文本提取管道来保留数学格式和方程式构建而成。InfiMM - WebMath包含400亿个文本令牌。InfiMM - WebMath在GSM8K测试中达到了14%的峰值准确率,而OWM在该测试中的准确率为10%;不过在MATH测试中,OWM的表现略优于InfiMM - WebMath。进一步分析发现存在两个关键问题:数据集规模不足,以及对逐步数学推理的关注不够,同时专注于高级概念的学术论文占比过高。

因此,研究人员创建了FineMath,这是一个包含多达540亿个数学数据令牌的集合,它通过基于分类器的筛选,专注于数学推导和推理。

文本提取自Common Crawl WARC文件,重点关注FineWeb数据集中的所有58亿个唯一URL。研究人员采用FineWeb - Edu的过滤方法,使用Llama - 3.1–70B - Instruct,并通过提示以3分制对内容进行评分,其中1分表示包含一些数学内容,3分表示有适当水平的分步解题方案。在这些“银色标签”上训练分类器后,研究人员识别出包含至少10个质量得分为2分或更高页面的域。通过纳入至少有10个来自OWM或InfiMM - WebMath的URL的域,进一步扩大了域覆盖范围。从Common Crawl索引中,总共检索到属于该域列表的77亿个URL:分类器识别出57亿个,OWM提供0.6亿个,InfiWebMath提供13亿个。所有识别出的页面都使用OWM管道重新提取,保留LaTeX格式并去除所有样板页面,最终生成包含6.5万亿个令牌的71亿个页面。

为了仅保留高质量的数学内容,研究人员再次应用基于Llama - 3.1–70B - Instruct注释训练的分类器,该分类器使用5分制提示,专门针对具有推理和初高中水平内容的页面。分类后,使用具有10个哈希的单频段MinHash LSH进行重复数据删除,并应用fastText语言分类,仅保留英语内容。

研究人员开发了多种FineMath变体,包括FineMath4 +(100亿个令牌,670万个文档),它仅保留分数为4 - 5的样本;以及FineMath3 +(340亿个令牌,2140万个文档),它包含分数为3 - 5的样本。同样的分类器也应用于InfiMM - WebMath,创建了Infi - WebMath4 +(85亿个令牌,630万个文档)和Infi - WebMath3 +(205亿个令牌,1390万个文档)。

代码数据

Stack数据集是目前最先进的开放代码数据集。其中包括Stack v1,它包含来自公共GitHub存储库的约3TB源代码;StarCoderData,这是一个跨80种编程语言的250亿个令牌的过滤子集;Stack v2,它的数据来自Software Heritage代码存档,约有32TB;还有StarCoder2Data,它是StarCoder2模型的训练语料库,包含900亿个令牌,涵盖600多种编程语言。

研究人员构建了StarCoder2Data的过滤变体Stack - Edu,它专注于教育性且文档完善的代码,从StarCoder2Data中选取了15种使用最广泛的编程语言。这个子集约有4500亿个令牌。研究人员使用StarEncoder模型,在Llama3–70B - Instruct生成的合成注释上训练了15个特定语言的分类器,以0 - 5的等级对教育质量进行评分。基于定性分析,选择了3作为阈值。最终生成的Stack - Edu数据集在15种语言中包含约125亿个标记。

预训练

为了构建SmolLM2,研究人员使用了11万亿个令牌(在收集的数据集中大约相当于两个epoch)进行训练。在整个预训练过程中,他们采用多阶段训练方法,而非固定的数据集混合方式。这种设计遵循以下四个关键原则:

  • 绩效驱动的干预:监控关键基准的评估指标,并调整数据集组合,以解决特定的能力瓶颈。
  • 退火阶段对高质量数学和代码的上采样:为最后阶段保留FineMath和部分Stack - Edu等数据集,以最大限度地发挥它们的作用。
  • 战略性引入中型数据集:在训练中期引入OWM、InfiMM - WebMath和Stack - Edu等中型数据集,避免在早期被大型数据集稀释影响。
  • 避免过多的数据重复:大多数数据集保持在建议的4 - 5个epoch阈值附近。

    跨训练阶段的数据集混合

  1. 稳定阶段:阶段1(0至6万亿令牌)

    • 数据混合

      • 60% FineWeb - Edu(教育网络数据)
      • 40% DCLM(多样化、真实世界问答风格的网络数据)
      • 10% StarCoder - Data(跨80种编程语言的代码数据,限制为约4个时期)
    • 由于数据集大小限制,此阶段不包含数学数据。知识和推理性能与英语网络消融研究的预期相符,但编码和数学性能较差。
  2. 稳定阶段:阶段2(6万亿至8万亿令牌)

    • 数据混合

      • 75% 的英文Web数据(保持第1阶段FineWeb - Edu与DCLM 60/40的比例)
      • 20% StarCoder - Data(比第1阶段比例增加)
      • 5% OWM(以较低比例引入的数学数据)
    • 大多数语言的代码性能有所提升。OWM的集成对数学性能没有显著影响。在多项选择公式(MCF)的MMLU测试中,准确率高于随机水平(>25%),这表明模型获得了通常与较大模型相关的能力。进一步的消融研究表明,相对于FineWeb - Edu,增加DCLM的比例可略微提升MMLU MCF的成绩。
  3. 稳定阶段:第3阶段(8万亿到10万亿令牌)

    • 数据混合

      • 调整后的FineWeb - Edu与DCLM比例为40/60的英语网络数据。
      • ~10% 数学数据(OWM和InfiMM - WebMath的纯文本英语部分)
      • 代码数据从StarCoderData切换到Stack - Edu。对于Stack - Edu中令牌数小于40亿的语言(TypeScript、Shell、Swift、Go、Rust和Ruby),使用StarCoder2Data子集。
      • 添加来自StarCoder2的Jupyter Notebooks,用于提供上下文代码示例。
    • 多个基准测试均有改进。虽然出现了明显的损失峰值,原因尚不确定,但大多数评估指标随后恢复。
  4. 衰减阶段:第4阶段(10万亿到11万亿令牌)

    • 数据混合

      • 58% 的英文Web数据(保持较高的DCLM与FineWeb - Edu比例)
      • 24% Stack - Edu (扩展为包括更多编程语言)
      • 14% 数学数据(InfiWebMath - 3 +、FineMath 4 +、0.08% OWM和0.02% AugGSM8K)
      • 4% Cosmopedia v2 (高质量合成文本数据)
    • 所有基准测试任务都有所改进,编码和数学性能大幅提升。
  5. 上下文长度扩展(10万亿令牌后,第4阶段的最后750亿令牌之前):从第4阶段(在最后750亿个代币之前)获取中间检查点并继续训练。将上下文长度从2k令牌扩展到8k令牌,使用的RoPE值为130k。

    • 数据混合

      • 40% 来自DCLM(10%)、FineWeb - Edu(10%)和Dolma书籍子集(20%)的长上下文文档(8k令牌或更多)。
      • 60% 保持第4阶段的混合物。
    • 此步骤产生了最终的SmolLM2基本模型。
    培训后

    在训练后的阶段,除了名为SmolTalk的新指令调优数据集外,研究人员还利用了现有数据集。

    SmolTalk

    SmolTalk是一种新的指令跟踪数据集,它精心地将选定的现有数据集与新的合成数据集结合在一起。该数据集包括Magpie - Ultra对话数据集,以及其他处理特定功能(如Smol - Constraint、Smol - Rewrite和Smol - Summarization)的专用数据集。所有数据集均使用Distilabel生成。

    对话数据

    MagPie - Ultra:研究人员使用两步提示方法创建了多轮对话数据集。利用Llama - 3.1–405B - Instruct - FP8和特定的系统提示,生成了100万个三回合对话样本。之后,使用较小的Llama模型(Llama - 3.1–8B - Instruct和Llama - Guard - 3–8B)对数据集进行质量和安全性筛选,使用ArmoRM对对话进行评分以进行基于质量的过滤,使用gte - large - en - v1.5删除语义相似的重复对话。

    任务特定数据
  6. Smol - Constraint:生成了3.6万条带有详细约束的指令。使用Qwen2.5–72B - Instruct和有针对性的系统提示符,生成了55万个指令和响应。过滤掉具有冲突约束或错误响应的生成指令,得到5.63万个指令 - 响应对。这些对经过IFEval去污(10 n - gram重叠),最终产生3.6万个对。
  7. Smol - Summarization和Smol - Rewrite:利用PersonaHub和FinePersonas数据集中的角色合成高质量的源文本(电子邮件、推文、LinkedIn帖子和笔记)。使用Qwen2.5–72B - Instruct,并通过特定的系统提示和角色描述生成多样化的内容。然后提示Qwen2.5–72B - Instruct总结和重写给定的文本,大约生成了100万个摘要和60万个重写的文本。

    数学数据

    公共数学教学数据集通过对含有80%通用指令数据(MagPie Ultra + Smol - Constraint、Smol - Rewrite、Smol - Summarization)和20%数学数据的混合物进行微调来评估。NuminaMath - CoT和Meta - MathQA根据它们在MATH、MT - Bench和GSM8K上的性能被整合到SmolTalk中。

    其他专业数据
  8. 代码生成:使用Self - OSS - Starcoder2 - Instruct(5万个高质量Python指令 - 响应对)。
  9. 系统提示音:包括从SystemChats2.0中随机选择的3万个样本。
  10. 函数调用:新增APIGen - Function - Calling的8万个样本。
  11. 长上下文任务:合并了LongAlign的英文子集(3700个样本,带有8k - 16k标记)。
  12. 知识与日常对话:新增10万个随机抽取的OpenHermes2.5样本。
  13. 重写:使用Explore - Instruct进行重写。

    监督微调(SFT)

在SmolTalk上对基础SmolLM2进行2个时期的监督微调,序列长度设为8192。

对准

对于偏好学习,研究人员使用直接偏好优化(DPO)。他们使用各种公共合成反馈数据集(包括UltraFeedback、UltraInteract、Capybara和ORCA)进行实验。结果表明,UltraFeedback在基准测试中最有效,它提升了MT - Bench、MMLU - Pro和MATH的成绩。训练进行了2个时期,在DPO训练的最后阶段之后,得到了instruct SmolLM2模型。

评估

  1. 基本模型评估:对比SmolLM2和其他10 - 20亿参数基础模型在基准测试中的性能。SmolLM2在HellaSwag和ARC测试中优于Qwen2.5基础模型,在GSM8K、MATH和HumanEval测试中优于Llama3.2 - 1B。在MMLU - Pro、TriviaQA和NQ等保留的基准测试中,它也表现出色,在MMLU - Pro上比Qwen2.5 - 1.5B高出近6个百分点。

SmolLM2在数学和编码基准测试中表现出竞争力。虽然在某些方面略逊于Qwen2.5 - 1.5B,但总体表现良好。上下文长度扩展并未显著降低性能,在HELMET和Needle in the Haystack(NIAH)基准测试中表现优异。

  1. Instruct模型评估:对比跨基准测试的10 - 20亿参数指令调整模型。SmolLM2 - Instruct表现出强大的指令跟踪能力,在IFEval测试中明显优于Qwen2.5 - 1.5B - Instruct。该模型在MT - Bench和OpenRewrite - Eval的文本重写任务中具有竞争力,GSM8K和MATH分数证明它具备强大的数学能力。

SmolLM2 135M和360M

除了SmolLM2 - 17亿参数模型外,研究人员还训练了两个较小的模型:SmolLM2 - 360M(3.6亿参数,在4万亿标记上训练)和SmolLM2 - 135M(1.35亿参数,在2万亿标记上训练)。

鉴于它们容量较小且训练成本较低,研究人员在目标训练长度重新进行数据消融,以确定最有效的数据混合方式。使用FineWeb - Edu分类器过滤DCLM,删除分数为0的样本,并对分数为1和2的样本进行下采样,效果最佳。

与采用多阶段训练策略的SmolLM2 - 17亿参数模型不同,这些较小的模型受益于单阶段训练方法,使用始终如一的高质量数据。Stack - Edu从一开始就与InfiMM - WebMath、FineMath和Cosmopedia一起被纳入训练。

这些模型与SmolLM2 - 17亿参数模型具有相同的架构,但使用分组查询注意(GQA)。在训练后阶段,使用SmolTalk3的过滤版本进行SFT,从MagPie - Ultra中删除复杂的指令跟踪任务(如函数调用)和困难示例,以更好地匹配模型的能力。最后,使用UltraFeedback执行DPO训练,优化模型的指令跟随能力,同时保持连贯性和实用性。

论文

SmolLM2: When Smol Goes Big — Data - Centric Training of a Small Language Model 2502.02737

## 推荐阅读
1. DeepSeek-R1的顿悟时刻是如何出现的? 背后的数学原理
2. 微调 DeepSeek LLM:使用监督微调(SFT)与 Hugging Face 数据
3. 使用 DeepSeek-R1 等推理模型将 RAG 转换为 RAT
4. DeepSeek R1:了解GRPO和多阶段训练
5. 深度探索:DeepSeek-R1 如何从零开始训练
6. DeepSeek 发布 Janus Pro 7B 多模态模型,免费又强大!

本文由mdnice多平台发布


柏企科技圈
15 声望5 粉丝