SmolLM3: 小型、多语言、长上下文推理器

发布于 2025 年 7 月 8 日
在 GitHub 上更新

随着用户寻求能够高效部署的强大模型,小型语言模型变得越来越重要。社区已经开发出了一系列功能强大、令人着迷的小型模型,每个都在这个规模上突破了可能的界限。通过 SmolLM3,我们很高兴能贡献一个全新的、具有竞争力的完全开放的 3B 模型。

SmolLM3 位于效率的最佳点。我们的 3B 模型性能优于 Llama-3.2-3B 和 Qwen2.5-3B,同时与更大的 4B 替代品(Qwen3 和 Gemma3)保持竞争力。除了性能数据,我们还将分享如何使用公共数据集和训练框架构建它。


模型摘要

  • 3B 模型,在 11T token 上训练,在 3B 规模上达到最新技术水平,并与 4B 模型具有竞争力。
  • 具有双模式推理指令模型,支持 think/no_think 模式。
  • 支持 6 种语言:英语、法语、西班牙语、德语、意大利语和葡萄牙语的多语言支持
  • 使用 NoPE 和 YaRN,长上下文可达 128k。

完整配方:我们正在发布 SmolLM3,并附带我们的工程蓝图。它包括架构细节、精确的数据混合,展示了我们如何通过三阶段预训练方法逐步提升跨领域的性能,以及构建混合推理模型的方法。通常,实现这些结果需要数月的时间进行逆向工程。相反,我们提供了完整的方法。


无论您是构建自己的模型还是想了解在这个规模上是什么驱动性能,这份蓝图都展示了实现具有竞争力 3B 性能背后的工程故事。

让我们来看看预训练阶段。

预训练

SmolLM3 改变了其前身的架构和数据混合。我们先来看看架构和训练配置!

架构和训练细节


SmolLM3 沿用 SmolLM2 类似的Transformer解码器架构,并采用共享嵌入,以 Llama 架构为基础,并进行了一些关键修改,以优化效率和长上下文性能。

分组查询注意力 (GQA): 我们用 4 个组的分组查询注意力取代了多头注意力。我们对在 FineWeb-Edu 的 100B token 上训练的 3B 模型进行消融实验表明,GQA 在显著减少推理过程中 KV 缓存大小的同时,与多头注意力的性能相匹配。

NoPE: 我们实现了“RoPE 到 NoRoPE 再回来:一种新的混合注意力策略”(Yang 等人,2025 年)中的 NoPE,选择性地从每第 4 层移除旋转位置嵌入。这种方法在不影响短上下文能力的情况下提高了长上下文性能,这已通过我们的消融实验证实。

文档内掩码: 在训练过程中,我们使用注意力掩码来确保同一训练序列中不同文档的 token 之间不会相互关注。与 Llama 3 类似,这有助于更快、更稳定的长上下文训练,同时保持短上下文性能。

训练稳定性: 按照 OLMo 2 的做法,我们从嵌入层中移除权重衰减以提高训练稳定性。这项修改有助于更稳定的训练动态,嵌入范数在训练期间自然地稳定在更健康的数值,而不会影响我们消融实验中的整体性能。

所有这些更改都通过使用在 FineWeb-Edu 的 100B token 上训练的相同 3B 架构进行的消融实验进行了验证,确保每次修改都能够提高性能或保持性能,同时提供其他好处。

训练配置:我们使用 2.36M token 的全局批大小,序列长度为 4096,学习率为 2e-4,并使用 AdamW 优化器(beta1:0.9,beta2:0.95),权重衰减为 0.1,梯度裁剪为 1。我们使用 WSD(Warmup-Stable-Decay)调度器,具有 2000 个预热步,并在最后 10% 的训练步中线性衰减到 0。我们使用 nanotron 框架进行训练,datatrove 进行数据处理,lighteval 进行评估。该模型在 384 个 H100 GPU 上训练了 24 天。您可以在下图看到分布式训练设置。


除了架构更改,我们还对训练配方进行了消融和改进。让我们仔细看看。

数据混合和训练阶段

沿袭 SmolLM2 的多阶段方法,我们使用三阶段训练策略在 11.2T token 上训练 SmolLM3,该策略混合了网络、数学和代码数据,并不断调整比例。我们对在 50B 到 100B token 上训练的 3B 模型进行了广泛的消融实验,以确定数据混合和比例。


预训练包括这些阶段,也如上图所示:

  • 第一阶段:稳定阶段(0T → 8T token)这个基础阶段通过我们的核心数据集混合建立了强大的通用能力。
    • 网络:85% (12% 多语言) - FineWeb-Edu, DCLM, FineWeb2 和 FineWeb2-HQ
    • 代码:12% - The Stack v2(16 种编程语言)、StarCoder2 拉取请求、Jupyter 和 Kaggle 笔记本、GitHub 问题以及 StackExchange。
    • 数学:3% - FineMath3+ 和 InfiWebMath3+
  • 第二阶段:稳定阶段(8T → 10T token)我们引入了更高质量的数学和代码数据集,同时保持了良好的网络覆盖率。
    • 网络:75%(12% 多语言)
    • 代码:15% - 增加了 Stack-Edu
    • 数学:10% - 引入了 FineMath4+、InfiWebMath4+ 和 MegaMath(包括 Qwen 问答、Pro 合成重写和文本-代码交错块)
  • 第三阶段:衰减阶段(10T → 11.1T token)最后阶段进一步增加了数学和代码数据采样。
    • 网络:63%(12% 多语言)
    • 代码:24% - 高质量代码数据采样增加
    • 数学:13% - 数学数据采样增加,并引入了指令和推理数据集,例如 OpenMathReasoning

通过这些阶段和混合,我们为基础模型实现了非常有竞争力的性能。更多内容请参见评估部分。带有确切数据权重的 nanotron 训练配置可以在这里找到。我们还将分享我们的训练日志以及中间检查点。

在主要预训练之后,我们在中期训练阶段改进了模型的长上下文和推理能力。

中期训练

我们将长上下文适应和推理适应称为“中期训练”。它们比主要的预训练短得多,但仍然具有一定的通用性,旨在改进模型在这两个领域的能力。我们首先来看看长上下文训练。

长上下文扩展


在主要预训练之后,我们对 SmolLM3 进行了额外的 100B token 训练,以扩展其上下文长度。我们分两个阶段顺序扩展了上下文窗口,每个阶段 50B token:首先从 4k 转换到 32k 上下文,RoPE theta 增加到 1.5M;然后从 32k 转换到 64k 上下文,RoPE theta 增加到 5M。这两个阶段都上采样了数学、代码和推理数据。在消融实验中,我们发现上采样特定的长上下文数据(如代码仓库、书籍和长网页,超出我们混合中自然较长的样本)并未进一步提升 RULER 和 HELMET 基准测试的性能。使用 NoPE 并以更长序列和增加的 RoPE theta 值训练衰减混合就足以达到 64k 的竞争性长上下文性能。

根据 Qwen2.5,我们使用 YARN 超出训练上下文长度进行推断。在推理过程中,模型可以处理多达 128k 的上下文(比 64k 训练长度扩展 2 倍)。

中期训练推理

在扩展模型上下文长度后,我们在中期训练阶段对其进行训练,以整合推理能力。中期训练阶段与预训练和后训练阶段的主要区别在于,我们针对的是一种通用能力,而不是专注于特定领域。在我们的案例中,我们希望训练模型进行推理,而不针对特定领域,例如数学或计算机代码。

我们的中期训练数据集包含来自 Open Thought 的 OpenThoughts3-1.2M 和 NVIDIA 的 Llama-Nemotron-Post-Training-Dataset-v1.1 中带有 R1 推理轨迹的子集,共计 35B token。我们使用了 ChatML 聊天模板和 packed 封装,以避免为模型提供过多结构。我们对模型进行了 4 个周期(约 140B token)的训练,并将检查点用于后续的 SFT 阶段。

后训练

DeepSeek R1Qwen3 等推理模型的发布,证明了当模型能够进行显式推理时所展现的强大能力。然而,社区仍然缺乏完全开放的配方,利用公共数据集来构建同时支持推理和非推理模式的双指令模型。大多数现有方法涉及复杂的强化学习过程和专有数据集,这使得研究人员难以复现和在此基础上进行研究。

在本节中,我们解释了如何应对这些挑战,并分享了构建双指令模型的完整配方。我们详细介绍了如何通过精心设计的训练流程平衡推理和非推理模式之间的性能,该流程包括通用推理能力的中期训练、合成数据生成的监督微调以及使用锚定偏好优化 (APO)(DPO 的最新变体)进行对齐。


构建聊天模板

在深入研究训练方法之前,了解用户如何与我们的双模式模型交互至关重要。聊天模板充当了在推理和非推理模式之间无缝切换的界面,其设计直接影响我们的训练数据格式和模型行为。SmolLM3 的聊天模板允许用户在对话期间控制推理模式。用户可以通过在系统提示中分别包含 /think/no_think 标志来激活推理或非推理模式。在非推理模式下,我们用空的思考块预填充模型的响应,类似于 Qwen3,以确保直接回答而无需明确的推理。

SmolLM3 支持工具调用,其聊天模板包含两个独立的工具描述部分:XML 工具和 Python 工具。这种特定的分类在我们的实验中被证明对模型准确解释每种格式的工具定义有益。

聊天模板为两种推理模式提供默认系统消息,以及一个包含日期、知识截止日期和当前推理模式的元数据部分。用户可以通过提供带有 system 角色的系统消息来替换默认系统消息。元数据部分可以通过在系统提示中使用 /system_override 标志来排除,从而为特定用例提供灵活性。

监督微调

在推理中期训练阶段之后,我们对模型进行了监督微调 (SFT),以在数学、代码、通用推理、指令遵循、多语言和工具调用等推理和非推理模式下集成能力。训练双模式模型需要仔细平衡数据混合,以在所有目标域的两种模式下保持强大的性能。为了评估 SmolLM3 在整个训练过程中的性能,我们跟踪了以下领域:数学、代码、通用推理、指令遵循和多语言。

在构建推理模式数据集时,我们遇到的主要挑战是某些领域缺乏包含推理痕迹的数据集。为了解决这个问题,我们通过使用现有非推理数据集中的提示来提示 Qwen3-32B 在推理模式下生成合成数据。这使我们能够提高模型在推理模式下最初表现不佳的领域(例如多轮对话、多语言和日常对话)的性能。


我们的最终数据混合是经过大量消融实验的结果,这些实验旨在探索推理和非推理 token 的最佳比例以及每种模式中的组成。最终的 SFT 数据集包含 1.8B token:非推理模式下 1B,推理模式下 0.8B,包括 12 个非推理数据集和 10 个包含推理痕迹的数据集。我们使用 BFD(最佳拟合递减)打包训练了 4 个 epoch(约 8B token),其中损失对用户轮次和工具调用结果进行了掩码。

我们将发布此数据混合以及我们的完整训练脚本,以使社区能够复现并在此基础上进行工作。

使用锚定偏好优化 (APO) 进行离策略模型对齐

在 SFT 步骤之后,我们使用 Tulu3 偏好数据集(用于非推理模式)和新的合成偏好对(用于推理模式,我们从 Qwen3-32B 和 Qwen3-0.6B 生成)的组合进行了一轮模型对齐。为了确保非思考数据集覆盖所有领域,我们生成了互补的思考模式偏好对。我们选择了 Qwen3-32B 生成的结果作为“选定”,并将 Qwen3-0.6B 的响应作为“拒绝”,以与锚定偏好优化进行对齐。


锚定偏好优化 (APO)直接偏好优化 (DPO) 的一个变体,它提供了更稳定的优化目标。在 DPO 中,奖励函数 r_θ(x,y) 衡量训练期间序列概率与训练开始时模型(参考模型)概率的对数比


这里的 β 控制着被优化的模型相对于参考模型能够改变的程度。DPO 损失优化了提示 x、选定的 y_w 和拒绝的 y_l 响应的三元组


APO 目标已被证明更加稳定,我们还在内部消融实验中观察到更高的下游性能。


虽然下游评估显示数学、科学、指令遵循、编码、聊天和多语言任务都有所改进,但我们观察到 RULER 等长上下文基准测试的性能下降。我们将这种下降追溯到推理中期训练阶段,该阶段对推理能力的关注影响了长上下文性能。此外,APO 训练数据限制在 24k token,因为我们绝大多数推理数据集的长度都低于此值。

为了缓解这种性能下降,我们探索了模型合并作为一种解决方案。

模型合并

模型合并是一种流行且强大的技术,它允许结合不同模型的优点,而无需集成计算开销或额外的训练。我们使用 MergeKit 库执行模型合并,因为它包含了多种合并方法,包括线性合并和非线性合并。

我们的合并方法包含两个步骤:

  1. 获取每个 APO 检查点并创建模型“汤”。
  2. 将模型汤与具有强大长内容性能的中期训练检查点结合。对 APO 模型汤和中期训练检查点分别采用 0.9 和 0.1 的权重进行线性合并,取得了最佳性能。我们能够恢复基础模型在高达 128k token 上下文的 RULER 分数。

由此产生的模型是我们今天发布的检查点。它在各种任务中保持了性能。现在让我们来看看该模型以及基础模型的评估结果。

评估

我们评估了基础模型和指令模型在推理和非推理模式下的性能。我们首先介绍基础模型的性能!

基础模型

下图显示了 SmolLM3 在评估知识、推理、数学和编码能力的 12 个流行基准测试中的胜率。SmolLM3 始终优于其他 3B 模型,并与包括 Qwen3-4B 和 Gemma3-4B 在内的更大 4B 模型达到竞争性能。

胜率评估基准:HellaSwag、ARC、Winogrande、CommonsenseQA、MMLU-CF、MMLU Pro CF、PIQA、OpenBookQA、GSM8K、MATH、HumanEval+、MBPP+


SmolLM3 在知识和推理基准测试(HellaSwag、ARC、BoolQ)中名列第一或第二,展示了在这些核心能力方面的强大性能。数学和编码性能在 3B 级别中具有竞争力。Ruler 64k 上的长上下文性能表明模型可以有效处理扩展序列。


该模型在 Global MMLU、MLMM HellaSwag、Flores-200、Belebele 等多语言基准测试中表现出强大的多语言性能,这些测试评估了知识、常识推理、文本理解和翻译。这表明 SmolLM3 在英语之外的语言中也能保持一致的性能。


总而言之,基础模型在许多领域表现非常出色。让我们看看这如何转化为指令模型的性能。

双指令/推理模型

由于 SmolLM3 具有指令模式和推理模式,因此我们需要在两种模式下评估模型,并与具有相同功能的模型进行比较。

无扩展思考评估

我们评估了 SmolLM3 与其他 3B 非推理模型在多个基准测试中的表现,并将其与 Qwen3 推理模型在无思考模式下的表现进行比较。如图所示,SmolLM3 优于其他 3B 非推理模型,包括 Llama3.2 3B Instruct 和 Qwen2.5 3B Instruct,并在推理模型之间处于效率最佳点,显著优于 Qwen3 1.7B,同时以更低的计算成本接近 4B 模型的性能。


因此,该指令模型正好位于性能和成本的帕累托前沿。让我们看看推理模型的表现如何!

扩展思考评估

在启用扩展思考模式评估 SmolLM3 的推理能力时,模型在大多数基准测试中都比其非推理版本有显著改进。我们观察到在 AIME 2025(36.7% vs 9.3%)、LiveCodeBench 上的竞争性编程(30.0% vs 15.2%)和 GPQA Diamond 上的研究生级推理(41.7% vs 35.7%)等具有挑战性的任务中取得了显著的进步。

虽然 Qwen3 4B 通常在思考和非思考模式下都取得了最高分,但 SmolLM3 在 3B 参数类别中表现出具有竞争力的性能,尤其擅长数学推理和复杂问题解决任务。模型的双模式能力允许用户在无需推理的更快推理或需要扩展思考的更彻底分析之间进行选择。


那么最后一个问题是:你如何使用这个模型?

如何本地运行

SmolLM3 的建模代码在 transformers v4.53.0 中可用,因此请确保升级您的 transformers 版本。您也可以使用最新的 vllm 加载模型,它使用 transformers 作为后端。

pip install -U transformers

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "HuggingFaceTB/SmolLM3-3B"
device = "cuda" # for GPU usage or "cpu" for CPU usage

# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
).to(device)

# prepare the model input
prompt = "Give me a brief explanation of gravity in simple terms."
messages_think = [
    {"role": "user", "content": prompt}
]

text = tokenizer.apply_chat_template(
    messages_think,
    tokenize=False,
    add_generation_prompt=True,
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

# Generate the output
generated_ids = model.generate(**model_inputs, max_new_tokens=32768)

# Get and decode the output
output_ids = generated_ids[0][len(model_inputs.input_ids[0]) :]
print(tokenizer.decode(output_ids, skip_special_tokens=True))

我们建议在采样参数中设置 temperature=0.6top_p=0.95

启用和禁用扩展思考模式

我们默认启用扩展思考功能,因此上述示例将生成带有推理轨迹的输出。为了选择是否启用,您可以通过系统提示提供 /think/no_think 标志,如下面的代码片段所示,以禁用扩展思考。生成带有扩展思考的响应的代码将相同,只是系统提示应包含 /think 而不是 /no_think

prompt = "Give me a brief explanation of gravity in simple terms."
messages = [
    {"role": "system", "content": "/no_think"},
    {"role": "user", "content": prompt}
]

text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
)

Agentic 用法

SmolLM3 支持工具调用!只需在参数 xml_tools(用于标准工具调用)或 python_tools(用于在 片段中调用 Python 函数等工具)下传递您的工具列表。

from transformers import AutoModelForCausalLM, AutoTokenizer

checkpoint = "HuggingFaceTB/SmolLM3-3B"

tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint)

tools = [
    {
        "name": "get_weather",
        "description": "Get the weather in a city",
        "parameters": {"type": "object", "properties": {"city": {"type": "string", "description": "The city to get the weather for"}}}}
]

messages = [
    {
        "role": "user",
        "content": "Hello! How is the weather today in Copenhagen?"
    }
]

inputs = tokenizer.apply_chat_template(
    messages,
    enable_thinking=False, # True works as well, your choice!
    xml_tools=tools,
    add_generation_prompt=True,
    tokenize=True,
    return_tensors="pt"
)

outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))

结论

我们发布了 SmolLM3,一个小型、长上下文、多语言的推理器,支持高达 128k 的上下文。除了模型检查点,我们还发布了完整的训练配方,包括预训练、中期训练、后训练和合成数据生成以及数据集(即将发布)。我们希望这个模型能对社区有所帮助,并且这个配方能让其他团队在其基础上进行改进。

资源

社区

漂亮!

太棒了,太棒了,太棒了!

难以置信!谢谢。

写得真好。
绝对要添加到周末阅读清单中!

感谢分享。

做得好!我有一个问题/好奇。在训练过程中,将模型拆分到两个 GPU 上有什么好处?(您提到在每个 8-GPU 节点上使用张量并行(TP)为 2,数据并行(DP)为 4)。我猜模型足够小,可以放在单个 GPU 上?我本以为在这种情况下,最有效的实现方式是使用 DP=8?

·
文章作者

模型无法适应每个 GPU 进行训练(不进行零/激活重新计算),并且 TP=2 对吞吐量影响不大,因此我们选择了这个解决方案。
您可以在这里找到更多关于分布式预训练的信息:https://huggingface.co/spaces/nanotron/ultrascale-playbook

太棒了!!!

干得好

哇,太棒了,文章也写得非常精彩!

感谢分享!!!
我可能发现了一个小错误,“为了确保非思考数据集中的所有域都得到充分覆盖”是否应该改为“为了确保思考数据集中的所有域都得到充分覆盖”?

我真的很喜欢阅读如此详细的模型报告,它讨论了架构、数据和精确参数等对机器学习工程师非常有用的技术细节。我甚至比模型(也很好哈哈)更喜欢这份报告。

感谢分享!!

可能无关的问题,图表显示 Qwen3 1.7B 有 2B 参数。这正确吗?

·

模型页面显示了这就是我们犯这个错误的原因
Capture d’écran 2025-07-09 à 22.23.11.png
但这是因为嵌入参数计数两次,谢谢您的注意(模型具有绑定嵌入,如果我没记错的话)

这张图表显示 GQA 拥有比键值头更多的查询头,这与最初的设计相矛盾。这是故意的吗?

·
文章作者

不,我们使用的是经典的 GQA,这是一个笔误,抱歉!

世界需要像你这样的英雄!!

太棒了 🚀

祝贺团队发布 SmolLM3!这是一项非常令人印象深刻的工作,关于 GQA、NoPE 和其他架构调整的详细消融对社区非常有价值。

您对突破长上下文性能界限的关注令人着迷。它让我想起了一篇最近的论文,该论文从完全不同的架构角度解决了同样的挑战。

我刚刚读到谷歌研究的 ATLAS (arXiv:2505.23735),它提出用现代循环“长期记忆模块”取代标准注意力机制。

其核心思想是通过创建一个明确“学习记忆上下文”而不是仅仅记忆单个 token 的记忆来克服 Transformer 和旧 RNN 的局限性。他们引入了一个名为 Omega 规则的概念,该规则根据过去的滑动窗口更新记忆,而不是可能导致“中间丢失”问题等问题的“在线”逐 token 更新。

他们展示的结果令人信服,尤其是在 BABILong 基准上有效扩展到 10M 上下文长度的能力。

看到两种强大且截然不同的扩展上下文长度的方法真是令人兴奋。一种是完善 Transformer 架构(如 SmolLM3),另一种是设计新的以记忆为中心的循环模型(如 ATLAS)。

我很想听听您对这些替代架构未来的看法,以及您是否设想未来混合模型可能结合两者的优点!

这里是感兴趣的朋友的论文

·

好想法

Qwen3-32B 创建的合成数据集是否已发布或发布到任何地方?我在集合中看到了其他数据集和一些推理数据集,但没有 Qwen3-32B 创建的任何合成数据集。团队会计划发布它们吗?

·
文章作者

我们已在 SmolTalk2 中发布了我们用于训练的所有数据集。数据集卡详细说明了哪些数据集是使用 Qwen3-32B 生成的。

我一直在研究 SmolLM3 的双模式训练方法,并有一个关于选择锚定偏好优化 (APO) 而非组相对策略优化 (GRPO) 来处理推理能力的技术问题。

根据我对这两种方法的理解

  1. APO(如 DPO)在一般指令遵循方面表现良好,并且在提供适当的偏好数据(您使用 Qwen 模型生成)的情况下可以处理推理任务
  2. GRPO 专门为带过程监督的数学推理而设计,无需值函数模型,可能提供计算效率优势

我推测选择 APO 是因为

  • 它为推理和非推理模式提供了统一的对齐方法
  • 它与您的合成偏好数据生成流程配合良好
  • 您将推理视为指令遵循的一种特殊模式,而不是一个根本不同的任务
  • GRPO 的计算优势可能没有超过您特定训练设置的实现复杂性

您能否澄清一下我的理解是否正确?我特别想知道您是否考虑过 GRPO 进行推理优化,以及最终选择 APO 用于两种模式的因素是什么。

感谢您分享 SmolLM3 训练配方的这些细节——双模式方法和训练流程令人着迷!

·

我对我自己的问题有了更多的思考,我想主要原因是您想训练一个离策略模型,这样您就可以利用更大模型的输出来作为训练数据(蒸馏)。所以这就是为什么 GRPO 这样的在线策略算法不适合这种情况。

在预训练阶段 3(推理数据集)中,输入是什么?是用户提示 + 模型响应拼接在一起作为输入吗?是否添加了聊天模板以与 ChatML 模板对齐?

中期训练和 SFT 也是如此吗?

·
文章作者

对于推理中期训练,我们使用了 ChatML 模板(所以没有系统提示),对于 SFT,我们使用了 SmolLM3 的最终聊天模板。

共享嵌入只是因为 llama 使用它还是经过了消融?

大家好,Hugging Face 团队,这篇 SmolLM3 的帖子让我好奇你们为什么选择 APO 而非 GRPO,所以我深入比较了 SmolLM3、Tulu3 和 DeepSeek-R1 的方法。最终在 🤗 space 上创建了一个可视化指南,帮助大家了解后训练领域的概况。

看到不同团队如何用不同的技术组合解决类似的问题,真是太有趣了!

Hugging Face 团队你好,
再次感谢您分享您的伟大研究成果。

我正在尝试复现 SmolLM3,我想知道——如果在您的共享政策允许范围内,您能否分享训练运行的 wandb 链接?

再次感谢。

·
文章作者

是的,wandb 日志在这里:https://wandb.ai/huggingface/SmolLM3-training-logs。它们与中间检查点一起发布:https://x.com/eliebakouch/status/1947314495103160458

Hugging Face 团队你好!我注意到关于多语言支持的 tokenizer 实现没有任何具体细节。您能分享一些关于处理多种语言的 tokenization 方法的见解吗?我很好奇您是使用了统一的 tokenizer 还是特定语言的 tokenizer,您使用了哪种算法来训练 tokenizer,以及是否涉及任何特殊技术。谢谢!

·
文章作者

我们直接使用了 LLama 3.2 分词器(除了移除了 bos_token),以下是 Meta 如何构建分词器的一些细节(来自 llama3 论文):

我们使用了一个包含 128K token 的词汇表。我们的 token 词汇表结合了来自 tiktoken3 分词器的 100K token 和额外的 28K token,以更好地支持非英语语言。与 Llama
2 分词器相比,我们的新分词器将英语数据样本的压缩率从 3.17 提高到
每 token 3.94 个字符。这使得模型可以在相同的训练计算量下“读取”更多的文本。我们还发现,添加来自选定非英语语言的 28K token 提高了压缩率和下游性能,对英语分词没有影响。
2 tokenizers,我们的新 tokenizer 提高了英语数据样本的压缩率,从 3.17 到
每 token 3.94 个字符。这使得模型能够以相同的训练计算量“阅读”更多文本。

注册登录 发表评论