IBM 发布 Granite 4.1 系列 LLM 并详解训练流程
Granite 4.1 LLMs: How They’re Built
IBM Granite 团队发布 Granite 4.1 系列稠密解码器 LLM,包含 3B、8B、30B 三个规模,基于约 15T token 训练,采用五阶段预训练流程并将上下文窗口扩展至 512K token,全部以 Apache 2.0 许可开源。
原文披露了 Granite 4.1 从预训练到多阶段 RL 的完整训练配方,以及 8B 稠密模型追平上一代 32B-A9B MoE 的对比结果。
深入解析 Granite 4.1 LLM 背后的数据工程、预训练、监督微调与强化学习。
作者:Granite 团队,IBM
TL;DR — Granite 4.1 是一系列稠密、仅解码器 LLM(3B、8B 和 30B),在约 15T token 上使用多阶段预训练流程训练,包括最长 512K token 的长上下文扩展。这些模型进一步通过在约 410 万条高质量精选样本上进行监督微调,并通过带有 DAPO 损失的 on-policy GRPO 进行强化学习(Yu et al., 2025)。值得注意的是,尽管 8B instruct 模型采用了更简单的稠密架构且参数更少,其表现仍匹配或超越了之前的 Granite 4.0-H-Small(32B-A9B MoE)。所有 Granite 4.1 模型均在 Apache 2.0 许可下发布。
链接:
概述
构建高质量的小型语言模型不仅仅是扩大计算规模——它需要在训练全程进行严格的数据整理。对于 Granite 4.1,我们优先考虑数据质量而非数量,在五个预训练阶段中逐步优化数据混合。我们进一步使用 LLM-as-Judge 框架策划监督微调数据,并应用多阶段强化学习流程,系统性地增强数学、编程、指令遵循和通用聊天方面的表现。
模型架构
Granite 4.1 模型采用仅解码器的稠密 Transformer 架构。核心设计选择包括 Grouped Query Attention (GQA)、Rotary Position Embeddings (RoPE)、SwiGLU 激活、RMSNorm 和共享输入/输出嵌入。
| 组件 | 3B Dense | 8B Dense | 30B Dense |
|---|---|---|---|
| 嵌入大小 | 2560 | 4096 | 4096 |
| 层数 | 40 | 40 | 64 |
| 注意力头大小 | 64 | 128 | 128 |
| 注意力头数量 | 40 | 32 | 32 |
| KV 头数量 | 8 | 8 | 8 |
| MLP 隐藏大小 | 8192 | 12800 | 32768 |
| MLP 激活 | SwiGLU | SwiGLU | SwiGLU |
| 位置嵌入 | RoPE | RoPE | RoPE |
三种模型规模共享相同的训练流程和数据策略,仅在架构维度上有所不同。
预训练
Granite 4.1 使用五阶段训练策略,从零开始在约 15 万亿 token 上进行训练。阶段 1–2 侧重基础预训练,阶段 3–4 进行中期训练,并通过逐步更高质量的数据退火完成,阶段 5 引入长上下文训练,将上下文窗口扩展到 512K token。每个阶段采用不同的数据混合和学习率计划,逐渐从广泛的网络规模数据转向更精选、特定领域的内容。
图 2:五阶段预训练流程。阶段 1–2 为预训练,阶段 3–4 为中期训练(高质量数据退火),阶段 5 为长上下文训练(LCE)。
阶段 1:通用预训练(10T token)
第一阶段使用带有幂律学习率计划和 warmup 的通用训练数据混合,建立广泛的语言理解能力。
数据组成:
- CommonCrawl 约 59% — 通用网络数据
- 代码 约 20% — 编程语言和代码仓库
- 数学 约 7% — 数学推理数据
- 技术 约 10.5% — 科学论文、技术文档和手册
- 多语言 约 2% — 非英语语言数据
- 领域特定 ~1.5% — 领域特定内容
阶段 2:数学/代码预训练(2T tokens)
阶段 2 大幅提高了代码和数学数据的占比,转向更强的推理能力,同时仍保持通用语言覆盖。
数据组成:
- 数学 ~35% — 比阶段 1 增加 5 倍
- 代码 ~30% — 增加 1.5 倍
- CommonCrawl-HQ ~12% — 高质量 Common Crawl 子集
- 合成数据 ~9% — 合成的优质数据
- 技术 ~10%
- 多语言 ~3%
- 领域 ~1%
阶段 3:高质量数据退火(2T tokens)
阶段 3 进入中期训练,采用更均衡的高质量混合数据以及指数衰减学习率计划。在这一阶段,我们开始混入思维链和合成指令数据。
数据组成:
- CommonCrawl-HQ ~16.67%
- 数学 ~16.67%
- 代码 ~16.67%
- 合成数据 ~8.5%
- 技术 ~12.5%
- 多语言 ~4.5%
- 长思维链 ~12.5% — 推理轨迹
- 语言指令 ~7.5% — 指令微调数据
- 代码指令 ~4.5% — 指令微调数据
阶段 4:高质量数据退火 — 精炼(0.5T tokens)
第四阶段继续中期训练,采用线性学习率衰减至零,使模型专注于可用的最高质量数据。
数据组成:
- CommonCrawl-HQ ~40%
- 代码 ~20%
- 数学 ~20%
- 长思维链 ~6%
- 代码指令 ~5%
- 语言指令 ~9%
图 3:数据混合在各预训练阶段中如何演变。注意从以网络数据为主(阶段 1)逐步转向以高质量数据、指令和推理数据为主(阶段 3–4)。
阶段 5:长上下文训练(LCE)
第五个也是最后一个阶段,同样属于中期训练的一部分,通过分阶段的长上下文扩展过程将上下文窗口从 4K 扩展到 512K:
- 32K 扩展 — 使用与阶段 4 相同的数据混合
- 128K 扩展 — 使用与阶段 4 相同的数据混合
- 512K 扩展 — 80% 书籍 + 20% 代码仓库数据(仅 8b 和 30b)
LCE 阶段使用从 1e-4 开始并衰减至 0 的指数学习率计划。为确保模型原生处理长序列而不降低短上下文性能,我们在每个 LCE 阶段后进行模型合并。基础模型的 RULER 基准:
| 模型名称 | 32K | 64K | 128K |
|---|---|---|---|
| granite-4.1-3b-base | 75.0 | 66.6 | 58.0 |
| granite-4.1-8b-base | 83.6 | 79.1 | 73.0 |
| granite-4.1-30b-base | 85.2 | 84.6 | 76.7 |
SFT:数据准备与质量控制
监督微调(SFT)是将基础模型转变为可靠的指令跟随助手的关键环节,因此数据质量至关重要——因为即便只有少量错误或幻觉样本,也可能使模型习得不良行为。为解决这一问题,我们采用严格的 LLM-as-Judge 框架,并结合基于规则的过滤来筛选高质量样本。该流水线会自动依据结构性、语义和行为标准评估每个样本,尽可能修复问题,并过滤掉未能达到我们质量标准的样本。
图 4:SFT 数据质量流水线。原始对话数据经过带有多个维度评分标准的 LLM-as-Judge,产生接受/边缘/拒绝的判定结果。硬拒绝缺陷(幻觉、虚假前提、错误计算)无论得分如何都会触发自动拒绝。
我们严格的 LLM-as-Judge 框架仅评估助手回复,将系统提示、用户输入、检索文档和工具输出严格视为上下文信息。这确保了评判者评估的是模型说了什么,而不是它被要求做什么。在 RAG 场景中,未基于检索上下文的回复会被标记为幻觉,而工具使用输出则会根据允许的工具集及其参数模式进行验证。
我们采用针对不同 SFT 数据类型量身定制的专用评判提示,包括多轮对话、RAG 增强回复、工具调用交互和多语言对话。每个回复都会在六个加权维度上进行评分——指令跟随、正确性、完整性、简洁性、自然度和校准(可选批判性思维检查)。样本会根据确定性分数阈值被接受、标记为边缘或拒绝,而硬拒绝规则会针对幻觉、虚假前提或错误计算等严重缺陷覆盖分数。
为补充语义评估,我们采用基于规则的确定性流水线,通过文本规范化、截断与长度过滤、模式验证和泄漏检测来强制保证结构完整性。最后的全局去重步骤确保整个数据集的唯一性。所有过滤和修正操作均可完全审计。
SFT 训练细节
在通过 LLM-as-Judge、基于规则的过滤和全局去重流水线后,我们在约 410 万 条高质量样本上微调基础模型。以下细节适用于所有三个模型变体:
训练配置:
| 参数 | 值 |
|---|---|
| 计算资源 | 16 个节点,每节点 4x GB200 |
| 轮数 | 3 |
| 学习率 | 5e-6(线性预热 3%,在约 25K 步内线性衰减) |
| 序列长度 | 16,384 tokens |
| 总样本数 | 约 410 万 |
| 有效批大小 | 256 样本/迭代(约 420 万 tokens/迭代) |
强化学习:多阶段 RL 流水线
在 SFT 之后,我们应用多阶段强化学习流水线,以进一步提升模型在特定领域的能力。我们并非仅进行一次 RL,而是运行多个有针对性的 RL 阶段,每个阶段针对不同能力进行优化。
训练方法
我们使用 On-policy GRPO(Group Relative Policy Optimization)(Shao et al., 2024)结合 DAPO(Decoupled Clip and Dynamic sAmpling Policy Optimization)损失(Yu et al., 2025),相比标准 GRPO,它能提供更稳定的训练信号。然而,由于动态采样在计算上开销较大,我们在训练过程中将其关闭。
RL 训练配置
| 参数 | 值 |
|---|---|
| 算法 | 采用 DAPO 损失的 On-policy GRPO |
| 训练栈 | SkyRL(NovaSky-AI, 2025) |
| 每个提示的样本数 | 16 |
| 训练批次大小 | 1024 |
| 上下文长度 | 8,192 |
RL 流水线
图 10 展示了我们用于训练 Granite 4.1 模型的强化学习流水线。通过对多种强化学习方案进行大量实验,我们发现这一系列步骤能够在多个领域最大化性能的同时,将灾难性遗忘降至最低。
图 10:Granite 4.1 强化学习流水线由四个连续阶段组成:多领域 RL、RLHF、身份与知识校准 RL,以及数学 RL。
多领域 RL
在此阶段,模型在来自多个领域数据的统一混合集上进行联合训练。因此,每一次梯度更新都反映了任务的完整多样性,这可以防止灾难性遗忘、提升整体基准性能,并最大限度地减少任何单个任务上的性能回退。
此阶段涵盖的不同领域包括:
| 领域 | 描述 |
|---|---|
| 数学 | 数学推理与计算 |
| 科学 | 科学知识与推理 |
| 逻辑推理 | 演绎与归纳逻辑 |
| 指令遵循(IF) | 对复杂指令的遵循 |
| 结构化输出 | 结构化数据输出 |
| Text2SQL | 数据库查询生成 |
| 时间推理 | 基于时间的逻辑与排序 |
| 通用聊天 | 通用对话质量 |
| 上下文学习 | 从上下文示例中学习 |
在此阶段,我们在 45,504 个独特提示(在所有 Granite 4.1 模型上取平均)上训练模型,并发现学习率为 5e‑7、KL 损失系数($\beta$)为 0.05 时,多领域强化学习效果最佳。
RLHF
为了进一步提升模型的有用性和聊天能力,我们使用多语言标量奖励模型在通用聊天提示上训练模型。在此阶段,我们观察到相比 SFT 检查点,Alpaca-Eval 平均提升了 约 18.9 分(在三个 Granite 4.1 模型上取平均)。
为缓解策略偏离其先前学到的知识,我们在此阶段采用保守的学习率 3e-7 和更高的 KL 损失系数 $\beta$ 0.09。在此 RLHF 阶段中,我们平均使用 17,920 个独特提示。
身份与知识校准 RL
在此阶段,我们在身份和知识校准提示上对模型训练若干步(约 40 个训练步)。我们观察到,这一小规模训练阶段显著提升了模型的自我识别能力。
与 RLHF 阶段类似,我们使用学习率 3e-7 和 KL 损失系数 $\beta$ 0.09,并且在此阶段使用 1728 个独特提示。
数学 RL
在 RL 训练过程中,我们发现 RLHF 阶段会导致数学基准测试成绩下降(例如在 GSM8K、DeepMind-Math 中)。Math RL 阶段使模型能够从这一下降中恢复,并在数学基准测试上超越原始 SFT 性能:GSM8K 平均提升 ~3.8 分,DeepMind-Math 平均提升 ~23.48 分。我们在此阶段平均使用 13,504 个唯一提示词,与多领域 RL 阶段类似,我们使用了 5e-7 的学习率和 0.05 的 KL 损失系数 $\beta$。
结果
基础模型基准测试
| 基准测试 | 指标 | 3B | 8B | 30B |
|---|---|---|---|---|
| 通用任务 | ||||
| MMLU | 5-shot | 66.47 | 73.60 | 78.44 |
| MMLU-Pro | 5-shot, CoT | 37.16 | 44.58 | 49.51 |
| BBH | 3-shot, CoT | 63.84 | 73.83 | 80.66 |
| AGI EVAL | 3-shot | 54.32 | 61.68 | 69.20 |
| DROP | 5-shot | 66.04 | 72.36 | 78.57 |
| 数学任务 | ||||
| GSM8K | 8-shot | 72.93 | 73.54 | 83.78 |
| Minerva Math | 4-shot | 38.00 | 43.42 | 45.66 |
| 代码任务 | ||||
| HumanEval | pass@1 (StarCoder) | 76.19 | 79.24 | 81.52 |
| HumanEval | pass@1 | 59.76 | 68.29 | 69.50 |
| HumanEval+ | pass@1 | 54.27 | 62.20 | 61.60 |
| Eval+ Avg | 65.94 | 62.05 | 63.90 | |
| 多语言任务 | ||||
| MMMLU | 5-shot | 56.59 | 64.73 | 73.36 |
| INCLUDE | 5-shot | 51.77 | 57.60 | 67.07 |
| MGSM | 8-shot | 58.48 | 63.68 | 74.40 |
指令模型基准测试
| 基准测试 | 指标 | 3B | 8B | 30B |
|---|---|---|---|---|
| 通用任务 | ||||
| MMLU | 5-shot | 67.02 | 73.84 | 80.16 |
| MMLU-Pro | 5-shot, CoT | 49.83 | 55.99 | 64.09 |
| BBH | 3-shot, CoT | 75.83 | 80.51 | 83.74 |
| AGI EVAL | 0-shot, CoT | 65.16 | 72.43 | 77.80 |
| GPQA | 0-shot, CoT | 31.70 | 41.96 | 45.76 |
| SimpleQA | 3.68 | 4.82 | 6.81 | |
| 对齐任务 | ||||
| AlpacaEval 2.0 | 38.57 | 50.08 | 56.16 | |
| IFEval Avg | 82.30 | 87.06 | 89.65 | |
| ArenaHard | 37.80 | 68.98 | 71.02 | |
| MTBench Avg | 7.53 | 8.50 | 8.53 | |
| 数学任务 | ||||
| GSM8K | 8-shot | 86.88 | 92.49 | 94.16 |
| GSM Symbolic | 8-shot | 81.32 | 83.70 | 75.70 |
| Minerva Math | 0-shot, CoT | 67.94 | 80.10 | 81.32 |
| DeepMind Math | 0-shot, CoT | 64.64 | 80.07 | 81.93 |
| 代码任务 | ||||
| HumanEval | pass@1 | 79.27 | 87.20 | 89.63 |
| HumanEval+ | pass@1 | 74.39 | 80.49 | 85.98 |
| MBPP | pass@1 | 61.64 | 82.54 | 83.33 |
| MBPP+ | pass@1 | 52.91 | 70.64 | 71.69 |
| CRUXEval-O | pass@1 | 40.75 | 47.63 | 55.75 |
| BigCodeBench | pass@1 | 32.19 | 35.00 | 38.77 |
| MULTIPLE | pass@1 | 52.54 | 60.26 | 62.31 |
| Eval+ Avg | pass@1 | 67.05 | 80.21 | 82.66 |
| 工具调用 | ||||
| BFCL v3 | 60.80 | 68.27 | 73.68 | |
| 多语言任务 | ||||
| MMMLU | 5-shot | 57.61 | 64.84 | 73.71 |
| INCLUDE | 5-shot | 52.05 | 58.89 | 67.26 |
| MGSM | 8-shot | 70.00 | 82.32 | 71.12 |
| 安全性 | ||||
| SALAD-Bench | 93.95 | 95.80 | 96.41 | |
| AttaQ | 81.88 | 81.19 | 85.76 | |
| Tulu3 Safety Eval Avg | 66.84 | 75.57 | 78.19 |
支持语言:英语、德语、西班牙语、法语、日语、葡萄牙语、阿拉伯语、捷克语、意大利语、韩语、荷兰语和中文。
Granite 4.1 与领先开源模型的对比
Granite 4.1 在不依赖长思维链的情况下,提供了具有竞争力的指令遵循和工具调用能力。通过避免扩展推理轨迹,它提供了可预测的延迟、稳定的 token 使用量和更低的运营成本。这使得 Granite 4.1 成为生产就绪的开源选择,适用于效率、可靠性和成本控制至关重要的企业工作负载。
Granite 4.1-8B 与 Granite 4.0-H-Small (32B-A9B)
一个引人注目的结果:Granite 4.1-8B 稠密模型持续匹配或超越上一代 Granite 4.0-H-Small,后者是一个 32B 参数的混合专家模型,拥有 9B 活跃参数。
图 13:Granite 4.1-8B(深蓝色)与 Granite 4.0-H-Small 32B-A9B(浅蓝色)在各基准测试中的对比。8B 稠密模型在 IFEval、AlpacaEval、MMLU-Pro、BBH、GSM8K、DeepMind-Math、Evalplus、ArenaHard、BFCL V3 和 MBPP(+) 上匹配或超过了更大的 MoE 模型。
Granite 4.1 模型家族对比
图 14:Granite 4.1 家族——30B、8B 和 3B 模型的对比。分数随模型规模可预测地扩展,30B 模型在所有基准测试中领先。
FP8 量化
我们还发布了 Granite 4.1 模型的 fp8 量化变体,针对使用 vLLM 进行推理进行了优化。精度从 16 位降低到 8 位,使磁盘占用和 GPU 内存使用量均减少约 50%。量化仅使用 LLM Compressor 应用于 transformer 块内线性算子的权重和激活,而所有其他层均保持其原始精度。
基础设施
我们在 CoreWeave 托管的 NVIDIA GB200 NVL72 集群上训练了 Granite 4.1 语言模型:
- 机架内通信:72-GPU NVLink 域
- 机架间通信:非阻塞、全 Fat-Tree NDR 400 Gb/s InfiniBand 网络
- 规模:整个集群中数千个 GPU
该基础设施提供了高效分布式训练所需 token 量(仅预训练就超过 15T token)所需的可扩展、高带宽互连。
快速开始
Granite 4.1 模型在 Apache 2.0 许可证下提供。以下是如何通过工具调用示例开始使用 30B instruct 模型:
pip install torch torchvision torchaudio
pip install accelerate
pip install transformers
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda"
model_path = "ibm-granite/granite-4.1-30b"
tokenizer = AutoTokenizer.from_pretrained(model_path)
# drop device_map if running on CPU
model = AutoModelForCausalLM.from_pretrained(model_path, device_map=device)
model.eval()
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather for a specified city.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Name of the city"
}
},
"required": ["city"]
}
}
}
]
# change input text as desired
chat = [
{ "role": "user", "content": "What's the weather like in London right now?" },
]
chat = tokenizer.apply_chat_template(chat, \
tokenize=False, \
tools=tools, \
add_generation_prompt=True)
# tokenize the text
input_tokens = tokenizer(chat, return_tensors="pt").to(device)
# generate output tokens
output = model.generate(**input_tokens,
max_new_tokens=100)
# decode output tokens into text
output = tokenizer.batch_decode(output)
# print output
print(output[0])
预期输出:
<|start_of_role|>system<|end_of_role|>You are a helpful assistant with access to the following tools. You may call one or more tools to assist with the user query.
You are provided with function signatures within <tools></tools> XML tags:
<tools>
{"type": "function", "function": {"name": "get_current_weather", "description": "Get the current weather for a specified city.", "parameters": {"type": "object", "properties": {"city": {"type": "string", "description": "Name of the city"}}, "required": ["city"]}}}
</tools>
For each tool call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call>. If a tool does not exist in the provided list of tools, notify the user that you do not have the ability to fulfill the request.<|end_of_text|>
<|start_of_role|>user<|end_of_role|>What's the weather like in London right now?<|end_of_text|>
<|start_of_role|>assistant<|end_of_role|><tool_call>
{"name": "get_current_weather", "arguments": {"city": "London"}}
</tool_call><|end_of_text|>
资源:
- Granite 4.1 HF 合集
- PRISM:揭开中期训练中保留与交互的神秘面纱
- GitHub:ibm-granite/granite-4.1-language-models
- Granite 文档
- Granite 社区资源
Granite 4.1 标志着高质量开源语言模型向前迈出的重要一步。通过在每一个阶段——从预训练数据整理到监督微调和多阶段强化学习——优先考虑数据质量和严谨性,我们交付了一个大幅改进的后训练流程。其结果是更强的指令遵循、工具使用和对话性能,表明精心训练的稠密 8B 模型可以与规模大得多的 MoE 架构相媲美。我们很期待看到社区如何采用并基于这些模型进行构建。
来源:Hugging Face Blog · hf-mirror.com







