Sarvam AI 发布基于 Mistral Small 的印度语言混合推理模型 Sarvam-M
Sarvam-M
Sarvam AI 发布 Sarvam-M,一个基于 24B 的 Mistral Small、Apache 2.0 许可的混合推理模型,专注印度语言,模型已在 Hugging Face 开放下载。
原文完整披露了从 SFT、RLVR 到推理优化的后训练流程与基准对比,可据此判断小参数模型做语言特化的可行路径。
混合印度语言大模型后训练与推理优化的探索
开源研究
2025年5月23日 · 27分钟阅读

从 Hugging Face 下载模型,在我们的
playground 上试用,并使用我们的
API 进行构建。
朝着 在印度构建主权AI生态系统 的目标,我们计划定期发布模型并分享详细的技术发现。这是技术博客系列中的第一篇,我们在此分享关于后训练的发现。我们期待听到反馈和合作建议。
在这篇博客中,我们分享了在开放预训练模型的后训练和推理优化方面的探索,以创建一个专为印度语言定制的尖端混合推理模型。博客涵盖三个主要步骤:(i) 监督微调(SFT),(ii) 带可验证奖励的强化学习(RLVR),以及 (iii) 推理优化。
在SFT方面,我们详细介绍了如何 (a) 通过质量与难度评分、聚类和采样来策划多样化的提示集,(b) 从允许的模型生成提示补全,并通过我们的自定义评分流程进行筛选,(c) 通过去偏处理具有政治倾向的补全并重新偏向文化相关输出进行角色训练,以及 (d) 创建课程以训练具有“非思考”和“思考”模式的混合模型。
在RLVR方面,我们概述了 (a) 在结合指令遵循、数学和编程的一系列数据集上训练的课程,(b) 基于不同难度代理的提示采样策略,(c) 跨不同任务的自定义奖励工程,以及 (d) 我们选择的算法GRPO的超参数设置。我们将SFT和RLVR步骤应用于Mistral Small,这是一个24B Apache 2.0许可的模型。
最终模型,我们称之为Sarvam-M(M代表Mistral),在基础模型上显著改进,相对提升幅度较大:印度语言基准平均提升+20%,数学基准提升+21.6%,编程基准提升+17.6%。在印度语言与数学交叉任务中的增益更高,例如,在罗马化印度语言GSM-8K基准中提升+86%。在大多数基准中,我们先进的Sarvam-M优于Llama-4 Scout,与更大的密集模型如Llama-3.3 70B以及预训练令牌显著更多的Gemma 3 27B等模型相当。我们仍有改进空间的一个领域是英语知识相关基准,如MMLU,其中Sarvam-M比基线模型下降约1个百分点。关键结果如下表所示,我们在结果部分进一步讨论这些数字(注:除非另有说明,Sarvam-M数字为启用思考模式)。
| 基准 | Sarvam-M (24B) | Mistral Small (24B) | Gemma 3 (27B) | Llama 4 Scout (17B/109B) | Llama 3.3 (70B) |
|---|---|---|---|---|---|
| 通用知识 | |||||
| MMLU | 0.87 | 0.88 | 0.9 | 0.9 | 0.92 |
| MMLU-IN | 0.79 | 0.64 | 0.75 | 0.77 | 0.74 |
| MMLU-IN-R | 0.66 | 0.49 | 0.59 | 0.52 | 0.56 |
| ARC-C | 0.95 | 0.93 | 0.93 | 0.92 | 0.93 |
| ARC-C-IN | 0.88 | 0.7 | 0.84 | 0.83 | 0.81 |
| TriviaQA | 0.91 | 0.92 | 0.91 | 0.92 | 0.94 |
| TriviaQA-IN | 0.83 | 0.78 | 0.85 | 0.87 | 0.83 |
| GPQA Diamond | 0.48 | 0.44 | 0.45 | 0.56 | 0.48 |
| 编程 | |||||
| HumanEval | 0.88 | 0.86 | 0.88 | 0.79 | 0.85 |
| MBPP | 0.75 | 0.67 | 0.74 | 0.47 | 0.74 |
| LivecodeBench | 0.44 | 0.23 | 0.3 | 0.39 | 0.39 |
| 数学 | |||||
| GSM-8K | 0.94 | 0.92 | 0.93 | 0.96 | 0.95 |
| GSM-8K-IN | 0.92 | 0.82 | 0.89 | 0.83 | 0.86 |
| GSM-8K-IN-R | 0.82 | 0.44 | 0.63 | 0.5 | 0.51 |
| MATH | 0.81 | 0.69 | 0.85 | 0.78 | 0.7 |
| 任务与对话 | |||||
| IFEval | 0.87 | 0.82 | 0.88 | 0.92 | 0.94 |
| MTBench | 8.14 | 8.06 | 8.16 | 7.76 | 7.67 |
| AlpacaEval | 60.92 | 50.47 | 67.39 | 43.3 | 45.38 |
| WildBench | 7.54 | 7.4 | 7.72 | 7.18 | 7.13 |
| Indic | |||||
| IndicGenBench | 0.49 | 0.43 | 0.48 | 0.47 | 0.47 |
| MILU-EN | 0.83 | 0.78 | 0.77 | 0.77 | 0.75 |
| MILU-IN | 0.75 | 0.59 | 0.65 | 0.67 | 0.6 |
Scroll
Scroll
基准比较结果
接下来我们讨论推理优化。我们通过训练后量化(PTQ)创建了 Sarvam-M 的 FP8 版本,精度损失可忽略不计,这凸显了精心策划校准数据集的必要性。我们实现了前瞻解码并展示了显著的吞吐量提升,但报告了在支持更高并发性方面的挑战。PTQ 和前瞻解码均使用 TensorRT-LLM 编译器实现。我们在 H100 GPU 上对 Sarvam-M 进行了性能分析和部署,并确定了配置的帕累托曲面,从中选择了两种配置——一种用于低成本,另一种用于高每流吞吐量。我们在 NVCF 上支持这两种配置,并展示了响应需求的高性能和高效扩展。
鉴于 MMLU 准确率略有下降,我们还研究了让模型根据查询选择知识库查找的价值。这种增强的知识库设置显示在 SimpleQA 上有重大改进,且延迟开销很小。它显著优于未使用知识库的 OpenAI o3 等更大模型。
总之,我们分享了一种详细的方法论,用于后训练混合 Indic 模型,并实现高效准确的推理。
第 1 节:监督微调
在本节中,我们讨论如何创建监督微调数据集,涵盖我们的关键目标——提升印度语言技能、改进编码和数学能力,并塑造强调印度文化价值观的特性。
Hugging Face 上提供了大量来自不同模型的微调数据集。在我们使用这些数据集进行训练的实验中,我们发现它们质量不一致、彼此重叠严重、包含大量偏向特定国家的内容,并且印度语言的高质量数据非常少。因此,我们创建了一个从头策划微调集的流程。我们在下面概述。
1.1 策划多样化的提示
我们从精心挑选的 Hugging Face 微调数据集列表中收集了超过 1150 万个提示(非补全)。使用最小哈希和模糊算法进行去重后,该集合减少到约 700 万个提示。这些提示涵盖多种语言,我们结合使用更简单的语言检测模型和 Gemma 2 9B 来过滤出约 520 万个英语提示。对于每个提示,我们使用 Llama 3.3 70B 和精心创建的提示来 (a) 分类质量(语法、连贯性等),(b) 分类难度,以及 (c) 归类到 16 个广泛类别。
基于这些提示分类和我们的微调实验,我们认识到需要更仔细的采样策略,以达到数量更少但质量和多样性更高的提示。为此,我们首先使用 gte-Qwen2-7B 模型为每个提示生成嵌入表示,并使用
faiss 将这些嵌入向量聚类为 100,000 个簇。我们将这些簇标记为 16 个类别之一,发现大多数簇仅包含来自单一类别的提示。实际上,每个簇代表这些类别中一个狭窄的技能集。下面展示了一些示例簇。
示例提示簇
使用 Raspberry Pi 开发一个程序,能够实时识别和跟踪一种特定类型的罕见北极光。该程序应能够检测这种极光独特的电磁特征,并根据光的强度和颜色对其进行分类。数据应通过无线方式传输到中央数据库进行分析。该程序还应能够控制相机的方向,以在极光划过天空时进行跟踪,并根据光的强度调整相机的曝光设置。该程序应包含完整的代码实现。
然后,我们在每个聚类内以 0.8 的余弦相似度阈值执行语义去重。在从每个聚类中选择子集时,我们移除了重复项,同时优先选择根据上述分类器判断难度更大和/或质量更高的提示。最终得到的 370 万样本集在特性上有所改进——即拥有更难和更高质量的样本,并且在主题上的分布更好。
类别分布
质量分布:
| 评估 | 百分比 |
|---|---|
| 优秀 | 61.31 |
| 良好 | 32.98 |
| 一般 | 4.44 |
| 差 | 1.27 |
| 很差 | 0.01 |
滚动
滚动
难度分布:
| 难度 | 百分比 |
|---|---|
| 非常难 | 6.11 |
| 难 | 44.45 |
| 中等 | 28.45 |
| 简单 | 20.13 |
| 非常简单 | 0.86 |
滚动
滚动
虽然这些提示是英文的,但我们希望有一个可以翻译成印度语言的子集。我们发现基础 Mistral Small 模型在印度语言方面可以显著改进。例如,对于印地语,该模型缺乏对整数和算术的基本理解。因此,我们决定使用大约三分之一的样本来创建印度语言的补全。具体来说,我们将约 30% 的编码、数学和推理提示,以及 50% 的其他提示转换为印度语言。我们选择让印地语占 28%,其他 9 种语言各占 8%——孟加拉语、古吉拉特语、卡纳达语、马拉雅拉姆语、马拉地语、奥里亚语、旁遮普语、泰米尔语和泰卢固语。这 10 种语言共同代表了超过 70% 印度人口(即约十亿人)的‘母语’或第一语言。
我们还根据日常使用模式选择了支持三种形式的印度语言表示,即正式母语文字、混合使用印度语言和英语的代码混合,以及用罗马字母书写印度语言的音译。每种转换的提示示例如下所示。
印度语言转换
Screen-er tulonay kon widget-er absolute bounds calculate korar jonyo ekta function likhun. Function-ta widget object input hishebe nebe aar (x1, y1, x2, y2) format-e widget-er absolute bounds return korbe, jekhane (x1, y1) holo top-left corner-er coordinates aar (x2, y2) holo widget-er bottom-right corner-er coordinates.
从英文提示到这些语言的翻译由 Llama 3.1 8B 模型完成,这些模型经过针对这些任务的训练,并得到了来自这 10 种语言中每种语言的专家的广泛监督。50% 的翻译使用母语文字,而代码混合和罗马化文字各占 25%。
1.2 提示补全
在创建提示补全之前,我们评估了衡量生成补全质量的不同方法。我们发现现有的质量评分模型并不准确,尤其是对于资源较少的印度语言。我们使用以下方法创建了一个自定义评分模型。首先,我们从提示库中选取了包含 3 万个多样化提示的种子语料库,并使用 4 个模型——Llama 3.3 70B、Qwen 2.5 72B、Gemma 2 27B 和 Gemini 1.5——生成了提示补全。然后,我们使用 Gemini 1.5 Pro 对这 12 万条提示回复的质量进行评判,提供推理过程和 0 到 9 之间的质量分数。我们使用这些数据对 Llama 3.3 70B 进行微调——以同时生成推理过程和分数。我们发现这种“生成式评分器”优于基于分类器的奖励模型,后者通过取对数概率来决定分数。然而,该模型对低分(0-2)和高分(7-9)存在偏差。为了解决这个问题,我们定义了一种混合的“实值评分器”:我们以生成方式使用该模型,要求它在一个标签内生成推理过程和分数。但我们不采用标签内生成的分数,而是使用该分数 token 的对数概率来计算数字 0 到 9 的概率加权分数,即我们将实值分数定义为
其中 p_i 是分数 token 处数字 i 的概率。
为了评估微调和实值评分这两种方案,我们使用了现有的 DPO 数据集:对于给定的提示,如果奖励模型给偏好回复的分数高于被拒绝的回复,则认为该模型是正确的。下面展示了在有/无微调以及有/无实值评分的情况下,各语言的平均准确率。我们看到微调带来的提升有限,但实值评分显示出显著更高的提升。将微调和实值评分叠加使用,在所有 11 种语言上达到了超过 85% 的高准确率。我们相信这是一个重要发现,并且可以进一步改进,为资源较少的语言创建更高的奖励分数。
| 生成式评分 | 实值评分 | |
|---|---|---|
| Llama 3.3 70B | 56.13 | 72.85 |
| 我们的评分器 | 59.92 | 85.53 |
滚动
滚动
我们使用实值评分方法比较了三个模型:Llama 3.3 70B、Deepseek v3 和 Deepseek R1。对于正式印度语言的输出(即非语码混合或罗马化),我们发现 Deepseek R1 使用英语思考 token 和非思考 token 中的印度语言输出,始终生成最高质量的补全,在 10 种印度语言中的每一种上平均得分超过 8(0 到 9 分制)。然而,对于语码混合和罗马化提示,所有模型都没有生成好的结果,因此我们使用内部基于 Llama 3.1 8B 训练的翻译模型,将正式印度语言输出转换为这些修改形式。
为了进一步加强印度语言能力,我们在英语、印度语言原生文字、印度语言罗马化文字以及带有语码混合文字的印度口语之间,添加了文档级和句子级的翻译对。源文本来自维基百科和 BPCC 数据集。我们还生成了跨语言数据集,其中提示明确要求用另一种语言回答。为此,我们提示用英语回答,并用我们的模型进行必要的转换。我们还生成了发音数据,将带有语码混合、规范化、缩写、URL 等的给定输入句子转换为印度语言文字的语音形式。下面展示了这些不同类型的一些示例。
提示:英语问题
回答:语码混合的古吉拉特语回答
1.3 角色训练
模型对齐中一个日益重要的部分是让回复具有一致的角色,将其从基本的词元预测器提升为 AI 助手。
我们角色训练的第一部分涉及处理政治偏见。我们注意到一些生成的回复存在不良偏见。为了识别此类提示-回复对,我们使用 Llama 3.3 70B 和自定义提示来检测对以下类别的偏见:政治实体、意识形态、地理区域、文化群体、民族和种族。约 0.5% 的提示-回复对被标记。对于所有识别出的此类提示,我们通过以下方式重新生成回复——(a) 使用去偏见模型 Perplexity R1 1776 重新生成,以及 (b) 调整提示,以特定的文化语气回答问题。下面展示了这种去偏见的几个示例。
提示
虽然上述方法消除了特定的政治及相关偏见,我们还希望培养模型以与印度语境相关的方式回应的能力。为此,我们使用 Llama 3.3 70B 和自定义提示,识别那些答案需要文化相关性、具有地理显著性、与日常生活和习俗相关,或反映当地教育或职业背景的提示-回复对。约 5% 的提示被识别为需要此类重新生成。我们用诱导所需偏见的自定义提示重新生成了这些输出。下面展示了几个此类示例。
提示
1.4 监督微调
使用上述创建的数据集,我们对 Mistral 3.1 24B 模型进行了微调。作为初步步骤,我们移除了视觉编码器,并仔细验证了这一修改不会影响模型在纯文本模式下的性能。
我们训练了一个同时支持“非思考”和“思考”模式的混合模型。在“思考”模式下,模型在生成目标语言的最终回复之前,会在 <think>...</think> 标签内用英语生成推理词元。通过多次实验,我们确定了训练数据呈现的最佳顺序。
有趣的是,我们发现同时训练思考和非思考模式效果不佳,这与近期文献相矛盾。这表明,为了提升基础模型在印度语言上相对较低的性能,我们需要优先进行非思考模式的训练,因为其中印度语言词元的比例要高得多。
基于这些发现,我们实施了一种两阶段训练方法:在非思考模式下训练 2 个 epoch,随后在思考模式下训练 2 个 epoch。我们还在这些训练阶段之间和之后采用了模型合并技术。
我们的实验包括测试 Dare-
Ties 和
Slerp 算法与各种检查点组合。最有效的方法被证明是在每个训练阶段后使用 Slerp 算法合并第 1 个和第 2 个 epoch 的检查点。合并后的模型在我们评估的几乎所有基准测试中都表现出与组成模型相当或更好的性能。这里展示了几个基准测试的结果。
第 2 节:强化学习
强化学习在提升模型分数方面的价值,尤其是在数学和编程方面,已得到广泛认可。在我们的实验中,我们发现精心设计的带有可验证奖励的强化学习(RLVR)有助于提升大多数基准测试的分数。我们将在下面讨论我们的流程。
2.1 任务课程
在我们最初的实验中,我们将来自多个任务的数据批次合并到一次 RLVR 运行中。然而,联合训练带来了若干挑战:
- 学习不均衡:模型优先处理跨任务中较容易的实例,而更难、更关键的示例则改进有限。例如,当 GSM8K 与函数调用数据集一起训练时,GSM8K 表现出强劲提升,但函数调用仅提升了约 1%。
- 验证效率低下:不同数据集的验证时间差异很大——有些需要显著更多时间,成为流程瓶颈。此外,编码任务受益于批量验证,而在混合来自多个数据集的样本时这并不可行。
- 序列长度不匹配:不同数据集需要不同的最大序列长度。较高的序列长度设置(某些任务所需)对训练效率以及较短输入任务的性能产生了负面影响。
基于多项消融研究,我们确定了一种有效的按任务课程。虽然任务的具体顺序对模型性能影响极小,但我们设计了一个在推理任务和语言任务之间交替的序列,以促进技能的均衡发展:
- 数学技能(
GSM8K 和
MATH):对于 GSM8K,我们在英语提示之外,还加入了使用母语文字和罗马化文字的印度语言提示。这种多语言方法提升了所有语言的分数。我们的最终数据集包含 40% 英语数据、40% 使用母语文字的印度语言数据,以及 20% 使用罗马化文字的印度语言数据。在印度语言内容中,28% 为印地语,其余九种语言各占 8%。我们提示模型以固定格式生成响应以便于提取,这被证明比少样本提示更有效,尤其是对于印度语言提示。
- 高等数学(
Big Math):该数据集包含更具挑战性的数学问题。我们指示模型在 LaTeX box 命令内生成响应,以便直接与标准答案进行验证。
- 指令遵循(扩展 IFEval):我们使用了基础
IFEval 数据集 的扩展版本,其中包含了针对印度语言任务的额外数据集以及
多轮交互。我们从
大型语言模型指令遵循评估 中列出的 25 项约束里选取了一个子集,重点关注那些能提供足够奖励信号以推动模型改进的约束。示例包括“编号项目符号”、“标题”和“最少高亮章节数”。在课程早期安排指令遵循任务被证明是有益的,因为它提高了包括 MMLU Pro 等任务在内的多个基准测试的分数。
- 代码理解:在此任务中,模型预测给定代码片段和输入字符串的输出。验证要求预测输出与真实输出完全匹配。我们使用
Synthetic-1 数据集 的代码理解子集,并将选定的提示翻译成印度语言,以促进多样性和跨语言泛化。
- 代码生成:我们使用
PrimeIntellect 数据集的高质量子集。这需要构建可靠的基础设施用于沙箱化代码执行,该基础设施处理(代码,测试用例)对的队列并汇总结果以计算奖励。我们专注于具有标准输入和输出规范的“stdin-stdout”任务。我们实现了灵活的匹配标准,允许字符串中的空白差异以及数值最多 1e-6 的近似。
- 翻译:最后一项任务专注于改进英语和印度语言之间的双向翻译,如果模型的输出相比之前的基线具有更高的 chrF++ 分数,我们就会奖励模型。
我们注意到,RLVR 任务序列的某些选择对分数没有显著影响。例如,如下所示,改变 GSM8K 和 IFEval 的顺序并未显著影响分数。
| IFEval → GSM8K | GSM8K → IFEval | |
|---|---|---|
| GSM8K | 0.91 | 0.91 |
| GSM8K(印度语言,罗马化文字) | 0.82 | 0.81 |
| IFEval | 0.88 | 0.89 |
Scroll
Scroll
2.2 组相对策略优化
我们采用 组相对策略优化(GRPO),这是 PPO 的一种高效替代方案,无需训练单独的价值函数。GRPO 采用基于组的采样,使用旧策略为每个提示生成多个输出(rollout)。然后使用每组内的相对奖励来计算策略更新的优势,这与奖励模型的比较性质自然契合。
这种方法帮助我们显著减少了内存开销,并被证明比传统 PPO 更具成本效益。通过大量实验,我们进行了学习率扫描,并确定 3e-7 是大多数任务的最佳值。然而,我们观察到,需要更强推理能力的更具挑战性的数据集——例如数学和代码生成——在降低学习率至 2e-7 时表现更好,这凸显了模型对数据集复杂性的敏感性。
为了最大化效率,我们根据数据集特定的最大生成长度动态调整了批量大小。由于不同数据集施加的 token 长度限制各不相同,我们相应地校准了批量大小,以在给定的内存约束下优化 GPU 利用率。
2.3 提示采样策略
对于每个 RLVR 任务,我们实施了一种提示采样方法,目标是在所训练的模型上达到约 20% 的通过率。这意味着我们选择的提示使得模型在 RLVR 运行开始前约有 20% 的时间能生成正确响应。我们的消融研究表明,较高的通过率会对准确率提升产生负面影响,最高可达 6%,而较低的通过率虽然不会损害准确率,但会增加达到同等性能水平所需的训练时间,因为模型需要更广泛地探索解空间以发现最优策略。
我们进一步通过过滤掉所有 pass@8 得分为满分的提示来改进采样——也就是说,如果某个提示上的全部 8 次 rollout 都产生了正确结果,我们就将该提示从训练中排除,因为由此产生的优势为零,因此对策略更新没有贡献。
对于代码生成任务,我们将每个输入限制为大约 15 个测试用例。在此选择过程中,我们根据测试用例的字符串长度作为难度级别的代理来对测试用例进行优先级排序。这种方法有双重目的:它提高了执行效率,并使模型更难通过仅解决较简单的测试用例来利用奖励函数,从而带来更稳健的学习结果。
2.4 奖励工程
对于大多数 RLVR 任务,我们采用了直接的二元奖励系统,将响应分类为正确或不正确。然而,对于代码生成任务,我们实施了一种更细致的部分奖励方案,以应对复杂编码问题中二元奖励固有的稀疏性挑战。
具体而言,我们的代码生成奖励由两个部分组成:(i) 成功通过代码执行的测试用例比例,以及 (ii) 当所有测试用例都通过时施加的额外奖励。这种渐进式奖励结构在提升模型的代码生成能力方面被证明非常有效。
对于翻译任务,我们观察到,基于 chrF++ 等翻译质量指标的固定阈值实施二元奖励是无效的,因为 chrF++ 值在不同句子之间变化很大。为了解决这个问题,我们开发了一种具有以下结构的“相对奖励分数”:(i) 如果 chrF++ 指标超过 RLVR 前基线达到指定的较低阈值,则得分为 0.5;(ii) 如果 chrF++ 指标超过基线达到较高阈值,或超过预定义的全局 chrF++ 阈值,则得分为 1.0。这种方法使翻译准确率得到了显著提升。据我们所知,这些奖励工程技术代表了该领域的新颖贡献,并有效提升了模型性能。
下面,我们展示几个示例,说明模型的性能如何随着我们的 RLVR 课程而提升。
我们的发现强烈表明,部分奖励显著促进了各类任务的学习。将这一方法扩展到数学推理等领域,仍是一个开放且充满前景的探索方向。我们相信,这一方法在提升模型于这些更具挑战性领域中的表现方面具有巨大潜力。
Reasoning
Prompt
Indic
Prompt
第 3 节. Sarvam-M 的结果
我们报告了五个综合基准类别的结果(Sarvam-M 的数据是在启用 think 模式下的结果):
- 通用知识:MMLU、MMLU Pro、ARC-C、TriviaQA、GPQA
- 编程:HumanEval、MBPP、LiveCodeBench
- 数学:GSM8K、MATH
- 任务与对话遵循性:IFEval、MTBench、AlpacaEval、WildBench
- 印度语言表现:MILU、IndicGenBench
对于若干基准,我们使用我们的翻译和音译模型创建了 Indic 变体。这些变体有两种格式:
- 原生文字(以 "-IN" 后缀表示)——例如 MMLU-IN、ARC-C-IN、TriviaQA-IN、GSM8K-IN
- 罗马化文字(以 "-IN-R" 后缀表示)——例如 MMLU-IN-R、GSM8K-IN-R
我们将这些新的基准数据集作为我们在 Hugging Face 上的 indic-evals 集合的一部分发布。
MILU 基准同时包含英语和 Indic 查询,我们将其分为 MILU-EN 和 MILU-IN,以便进行更细粒度的分析。
如引言表格所示,Sarvam-M 在各类基准上始终展现出卓越或极具竞争力的表现,尤其在印度语言任务、编程、数学推理和多语言能力方面表现突出,从而使其成为一个非常强大的模型。
在以 Indic 为重点的基准上,Sarvam-M 全面超越其他模型,尤其是在 IndicGenBench(0.49)、MILU-EN(0.83)上,并在 MILU-IN(0.75)上显著领先。它在通用知识任务上也表现出色,在诸如 MMLU-IN(0.79)和 ARC-C-IN(0.88)等区域适配评估中领先,同时在 ARC-C(0.95)上取得了最高总分。
除印度语言任务外,该模型在推理基准上也表现突出。在编程基准中,Sarvam-M 同样相当强大,在 HumanEval(0.88)、MBPP(0.75)上取得最高分,并在 LivecodeBench(0.44)上以相当大的优势显著超越其他模型。在数学推理任务中,它在 GSM-8K-IN(0.92)、GSM-8K-IN-R(0.82)上取得最高表现,并在 GSM-8K(0.94)和 MATH 基准(0.81)上保持有竞争力的分数。
3.1 Indic Vibe Check 基准
为了更好地评估人们会如何与我们的模型互动,我们开发了 "Indic Vibe Check"。我们发现这一基准有助于理解模型在多样化对话情境中的有效性,确保我们不会过度优化标准基准表现。
借鉴 Anthropic 的 Economic Index,我们将单个条目用作基础任务,并提示 Gemini-1.5-Pro 生成真实用户可能提出的真实聊天查询。我们采用精简的提示工程方法,在全部 11 种语言中创建这些场景,捕捉全球使用模式。经过严格的质量控制——包括过滤掉不合格或错误的提示——我们创建了一个约 3,000 个多样化对话场景的数据集。数据集中的几个示例如下所示。
鉴于电动汽车普及率的预期增长及其对电力需求产生的影响,请为智能电网制定一项优化策略,以高效管理充电负荷。需考虑分时电价、可用可再生能源发电量以及电池储能容量等因素。该解决方案应在满足消费者充电需求的同时,最小化成本并最大化电网稳定性。请详细说明该优化模型及其关键参数。
我们使用奖励评分器对不同代际的模型进行评估,发现 Sarvam-M 在该基准测试上优于其他规模大得多的模型,例如 Llama 4 Scout(见下表)。
| 语言 | Sarvam M (24B) | Mistral 3 Small (24B) | Gemma 3 (27B) | Llama 4 Scout (17B/109B) | Llama 3.3 (70B) |
|---|---|---|---|---|---|
| 孟加拉语 | 8.17 | 7.62 | 7.29 | 7.59 | 7.01 |
| 英语 | 8.35 | 8.32 | 7.85 | 8.17 | 8.20 |
| 古吉拉特语 | 8.21 | 7.53 | 7.52 | 7.67 | 6.74 |
| 印地语 | 8.30 | 8.10 | 7.82 | 7.69 | 7.53 |
| 卡纳达语 | 7.98 | 7.53 | 7.53 | 7.68 | 6.59 |
| 马拉雅拉姆语 | 8.19 | 7.50 | 7.46 | 7.68 | 6.96 |
| 马拉地语 | 8.17 | 7.38 | 7.48 | 7.97 | 7.12 |
| 奥里亚语 | 7.82 | 3.43 | 6.52 | 6.46 | 5.68 |
| 旁遮普语 | 8.15 | 7.49 | 7.48 | 7.63 | 6.96 |
| 泰米尔语 | 7.92 | 7.40 | 7.55 | 7.30 | 6.56 |
| 泰卢固语 | 8.05 | 7.39 | 6.95 | 7.52 | 6.87 |
| 平均值 | 8.12 | 7.24 | 7.40 | 7.58 | 6.93 |
滚动
滚动
第 4 节:推理优化
以经济高效的方式部署 LLM 与高效地训练它们同等重要,甚至更为重要。训练后量化(PTQ)是实现这一目标的一种特别有前景的方法,它使我们能够在不牺牲性能的情况下减小模型规模和计算需求。我们将此方法与使用外部知识库增强 LLM 相结合,通过提供训练数据之外的事实性、最新信息来增强模型能力。
4.1 训练后量化
我们实现了一个标准的 PTQ 流程,将我们的 bfloat16 检查点转换为 fp8 格式,利用 Hopper 系列 GPU 上框架级别的 fp8 支持。虽然 PTQ 过程本身相对简单,但我们的实验表明,校准数据集会显著影响量化结果。在最初的实验中,我们选择了一个仅包含几百个样本的小型校准数据集,从我们的微调数据中均匀采样。然而,得到的量化模型在各项评估指标上表现出出乎意料的糟糕性能。
经过多次消融研究,我们发现成功的 PTQ 需要更大、更精心采样的提示集,且该提示集应紧密匹配模型的预期使用分布。当我们实施这一改进的校准方法后,得到的量化模型在我们的基准测试套件中保持了与原始模型相当的准确率水平。下表展示了在使用最优采样策略时,校准数据集大小与模型性能之间的关系。使用较少样本校准的检查点难以完成并生成完整、合理的词语。
मार्च में कहाँ घूमने जाना चाहिए?
4.2 H100 上的部署配置
为了在 H100 GPU 上优化 Sarvam-M 推理,我们围绕四个关键维度进行了全面的性能分析:(i) 数据类型(BF16、FP8),(ii) 模型并行,(iii) 并发,以及 (iv) 前瞻解码。我们的发现证实,以较低精度数据类型提供服务可提高效率,从 BF16 过渡到 FP8 使 Sarvam-M 的输出 token/秒翻倍。前瞻解码进一步将吞吐量提升最多 2 倍,但存在明显的权衡:
- 批次中的所有请求必须具有相同数量的接受 token
- 在更高并发量下,前瞻解码的开销成为限制因素
对于张量并行,我们的实验表明,对于 20-30B 参数的模型,超过 TP > 2 的配置在每输出 token 成本方面收益递减。更高的张量并行配置需要预留更多 GPU,并引入额外的通信开销,导致输出 token/秒的非线性扩展。在评估这些权衡后,我们确定了经济高效服务的帕累托前沿,如下所示。
基于我们的分析,我们为自身用例实现了两种不同的最优配置:
- 高并发配置:利用 FP8 量化和张量并行,在高并发下实现每用户流约 100 输出 token/秒(p50)
- 低并发配置:实施前瞻解码,在较低并发水平下实现每用户流约 300 输出 token/秒(p50)
这些配置使用我们的内部推理引擎部署,该引擎在所有优化维度上始终优于 vLLM。
4.3 使用 Wikipedia 进行知识接地
鉴于 Sarvam-M 模型规模相对紧凑,我们预计额外的知识接地会提升其性能。为此,我们使用 Wikipedia 开发了一套高效的检索增强生成(RAG)基础设施。我们的方法包含三个关键组件。
4.3.1 分块策略优化
我们评估了四种不同的文本分块策略,用于创建向量数据库:
- 基于 token 计数:将文本线性分块,直至达到指定的 token 数量或段落断点
- 递归:将文档逐步划分为更小的块,直到满足指定的 token 预算
- 语义:根据语义相似度对文档章节进行分组,可能将文档不同部分的相关内容聚合在一起
- 语义双遍合并(SDPM):与语义分块类似,但增加了一个参数来指定合并块之间可以相距多远
为了评估这些策略,我们使用随机选取的 Wikipedia 文章和合成生成的查询创建了一个基准,并评估了 top-k 召回率。我们的发现表明,递归和 SDPM 策略均表现最优,而 SDPM 仅带来边际改进。考虑到 SDPM 在为每个文档章节生成嵌入时的额外计算成本,我们选择递归分块方法,它显著优于朴素的基于 token 计数的方法。一个重要的额外优化是确保 Wikipedia 文章中的表格保持完整,而不是被拆分到多个块中。
4.3.2 嵌入模型选择
我们评估了多个在 MTEB 榜单上领先的模型,并筛选出两个候选模型:
bge-m3 和
bge-multilingual-gemma2。使用包含闲聊、基于关键词和事实性查询的内部基准,我们发现 bge-multilingual-gemma2 在 recall@k 指标上以 35% 的显著优势超越 bge-m3。然而,这种性能提升伴随着权衡:嵌入存储需求增加 3 倍,且查找延迟增加。
为了降低这些成本,我们探索了多种量化方法。二值量化被证明过于激进,导致性能显著下降。
标量 8 位量化成为成本效率与性能之间的最佳平衡。我们利用 Milvus 向量数据库来优化高并发条件下的持续延迟。
4.3.3 基于 Wikipedia Grounding 的性能评估
为了评估模型在 Wikipedia 查找下的性能,我们实现了一个路由系统:收到查询后,模型判断是否需要进行查找,如果需要,则生成具体要使用的查询。该系统可跨语言运行,使模型无论输入语言为何,都能生成英文 Wikipedia 查询。
在准确性测量方面,我们采用 SimpleQA Benchmark,并以 Llama 3.3 70B 作为评判模型。此外,我们使用 Gemini 2.5 Pro 将 SimpleQA 提示翻译成 10 种印度语言,创建了 SimpleQA-IN。对比结果如下所示。
我们看到,在英语和印度语言查询中,事实准确性都有大幅提升。在具备 Wikipedia 查找能力后,Sarvam-M 在 SimpleQA 基准上的表现显著提升,正确回答率从仅 5% 跃升至 72%,超过了 OpenAI 的 o3 模型(49%)。同样,在覆盖 10 种印度语言的 SimpleQA-IN 基准上,基于 KB 的设置达到了 59% 的正确回答率,超过了 o3-mini(11%)和 o3(47%)。
问题
5 失败的实验
5.1 分词器扩展
为了降低印度语言的 fertility 分数并提高推理吞吐量,我们用额外的印度语言 token 扩展了 Mistral Small 的词表。这种方法导致模型的知识库显著下降——即使经过大量 SFT,这种退化仍然存在。这表明需要对这些 token 进行更广泛的预训练。
5.2 分词器移植
我们还探索了从更大模型进行软蒸馏,这要求教师模型和学生模型具有相同的词表。由于学生模型(Mistral Small)和潜在的教师模型(Llama 3.3 70B、Deepseek R1 等)使用不同的词表,我们采用了以下移植方法:
- 对于两个词表中都存在的 token,我们直接复制学生模型中的原始嵌入,以保留精确表示。
- 对于教师模型独有的 token,我们在教师和学生之间的公共 token 中找出 k 近邻,然后使用学生模型中这些邻居的嵌入,通过重心插值来近似新 token 的嵌入。
- 对于字节 token 等特殊情况,我们实现了前缀匹配等回退逻辑,然后再求助于近似方法。
合并后的嵌入保持了学生模型的嵌入维度,同时扩展以容纳教师模型的词表,从而有效地移植了教师模型的分词能力,同时保留了学生模型的语义表示空间。
在对齐词表后,我们使用教师模型 top-20 logits 对学生模型进行微调,使其学习教师模型的 log 概率分布。我们结合了交叉熵损失和 Kullback-Leibler 散度损失进行优化。尽管学生模型很快学会了模仿教师分布,但它需要更长的训练时间和更多的数据才能恢复因词表变化而损失的性能。而且这一过程并未优于简单的 SFT 流程。
以上两点都进一步说明,有必要使用高效的分词器从头预训练模型。
5.3 基于 LLM 奖励的强化学习
我们探索了在编程任务的 RLVR 中使用基于 LLM 的验证作为奖励信号,但这并未带来一致的性能提升。一个关键限制是这些评估的非确定性,这给奖励归因带来了不稳定性。尽管我们尝试通过定义明确的评分标准和部分奖励方案来缓解这一问题,但这些方法在很大程度上被证明无效。然而,考虑到成本因素,这些实验侧重于使用较小模型进行验证,而使用较大模型进行类似实验仍有待完成。
6 结论
在这篇博客中,我们介绍了 Sarvam-M,一个专注于印度语言以及数学和编程等推理任务的大语言模型。该模型构建在 Mistral Small 之上,并通过监督微调(SFT)、带可验证奖励的强化学习(RLVR)和推理优化进行了增强。准确性和效率的提升确立了各种后训练步骤和部署配置的价值。
在后续的发布 / 博客中,我们将探索用知识库和网络搜索为该模型提供依据。我们还将继续在更接近我们部署模型的实际环境的新环境中探索不同的 RLVR 实验。
来源:Sarvam AI · sarvam.ai