Granite 4.1模型架构与设计原理深度解析
IBM发布Granite 4.1 LLM系列及其构建方法论。
IBM发布Granite 4.1 LLM系列及其构建方法论。
作者:Granite 团队,IBM
TL;DR — Granite 4.1 是一个稠密、仅解码器语言模型家族(3B、8B 和 30B),采用多阶段预训练流水线训练约 15T 词元,包括长上下文扩展至 512K 词元。这些模型通过在约 410 万个高质量精选样本上进行监督微调,以及采用 DAPO 损失函数(Yu et al., 2025)的在策略 GRPO 强化学习进一步优化。值得注意的是,8B 指令模型在使用更简洁的稠密架构和更少参数的情况下,匹配或超越了之前的 Granite 4.0-H-Small(32B-A9B 混合专家模型)。所有 Granite 4.1 模型均在 Apache 2.0 许可证下发布。
Granite 4.1 HF 集合
构建高质量小型语言模型不仅仅是简单地扩大计算规模,还需要在整个训练过程中进行严格的数据策展。对于 Granite 4.1,我们优先考虑数据质量而非数量,通过五个预训练阶段逐步优化数据混合。我们进一步通过将 LLM 作为判官的框架对监督微调数据进行策展,并应用多阶段强化学习流水线来系统性地增强数学、编码、指令遵循和一般对话等方面的性能。
Granite 4.1 模型采用仅解码器稠密 Transformer 架构。核心设计选择包括分组查询注意力机制(GQA)、旋转位置嵌入(RoPE)、SwiGLU 激活函数、RMSNorm 和共享输入输出嵌入。
所有三个模型大小共享相同的训练流水线和数据策略,仅在架构维度上有所不同。
Granite 4.1 从零开始在约 15 万亿个词元上进行训练,采用五阶段训练策略。第 1-2 阶段专注于基础预训练,第 3-4 阶段进行中期训练,采用逐步提高质量的数据退火,第 5 阶段引入长上下文训练,将上下文窗口扩展至 512K 词元。每个阶段采用不同的数据混合和学习率调度,逐步从大规模网络数据转向更精细化的领域特定内容。
图 2:五阶段预训练流水线。第 1-2 阶段为预训练,第 3-4 阶段为中期训练(高质量数据退火),第 5 阶段为长上下文训练(LCE)。
阶段 1:通用预训练(10T 词元)
第一阶段通过采用幂律学习率调度和预热的通用训练数据混合来建立广泛的语言理解。
CommonCrawl ~59% — 通用网络数据
Code ~20% — 编程语言和代码库
Math ~7% — 数学推理数据
Technical ~10.5% — 科学论文、技术文档和手册
Multilingual ~2% — 非英文语言数据
Domain Specific ~1.5% — 领域特定内容
阶段 2:数学/代码预训练(2T 词元)
第二阶段大幅增加代码和数学数据的比例,同时转向更强的推理能力,但仍保持通用语言覆盖。
Math ~35% — 相比第 1 阶段增加 5 倍
Code ~30% — 相比第 1 阶段增加 1.5 倍
CommonCrawl-HQ ~12% — 高质量 CommonCrawl 子集
Synthetic ~9% — 合成高质量数据
阶段 3:高质量数据退火(2T 词元)
第三阶段转向中期训练,采用更均衡、高质量的混合和指数衰减学习率调度。这是我们开始融合思维链和合成指令数据的阶段。
CommonCrawl-HQ ~16.67%
Long Chain-of-Thought ~12.5% — 推理轨迹
Language Instructions ~7.5% — 指令微调数据
Code Instructions ~4.5% — 指令微调数据
阶段 4:高质量数据退火 — 精化(0.5T 词元)
第四阶段继续中期训练,采用线性学习率衰减至零,让模型专注于可用的最高质量数据。
Long Chain-of-Thought ~6%
Code Instructions ~5%
Language Instructions ~9%
图 3:数据混合在预训练各阶段的演变。注意从网络占主导(第 1 阶段)逐步转向质量占主导,并融合指令和推理数据(第 3-4 阶段)。
阶段 5:长上下文训练(LCE)
第五个也是最后一个阶段,作为中期训练的一部分,通过分阶段长上下文扩展流程将上下文窗口从 4K 扩展至 512K:
32K 扩展 — 使用与第 4 阶段相同的数据混合
128K 扩展 — 使用与第 4 阶段相同的数据混合
512K 扩展 — 80% 书籍 + 20% 代码库数据(仅限 8b 和 30b)
LCE 阶段采用指数学习率调度,从 1e-4 开始衰减至 0。为确保模型能原生处理长序列,同时不降低短上下文性能,我们在每个 LCE 阶段后执行模型合并。基础模型 RULER 基准:
SFT:数据准备与质量控制
监督微调(SFT)是将基础模型转变为可靠的指令遵循助手的关键,数据质量至关重要——因为即使少量错误或幻觉样本也会导致不良行为。为解决这一问题,我们应用严格的将 LLM 作为判官的框架,结合基于规则的过滤来策展高质量样本。该流水线自动根据结构、语义和行为标准评估每个样本,在可能的情况下修复问题,并过滤出未达到质量标准的样本。
图 4:SFT 数据质量流水线。原始对话数据通过采用多维标准的将 LLM 作为判官的系统,产生接受/边界/拒绝的判定。硬拒绝缺陷(幻觉、虚假前提、计算错误)无论评分如何都会触发自动拒绝。
我们严格的将 LLM 作为判官的框架仅评估助手的回应,将系统提示、用户输入、检索文档和工具输出严格视为上下文信息。这确保判官评估的是模型说了什么,而不是模型被要求做什么。在 RAG 设置中,未以检索上下文为依据的回应会被标记为幻觉,而工具使用输出会根据允许的工具集及其参数模式进行验证。
我们采用针对不同 SFT 数据类型的专门判官提示,包括多轮对话、RAG 增强回应、工具调用交互和多语言对话。每个回应在六个加权维度上评分——指令遵循、正确性、完整性、简洁性、自然性和校准(可选的批判性思维检查)。样本根据确定性评分阈值被接受、标记为边界或拒绝,硬拒绝规则会覆盖得分以处理严重缺陷,如幻觉、虚假前提或计算错误。
为补充语义评估,我们应用确定性基于规则的流水线,通过文本规范化、截断和长度过滤、模式验证和泄露检测来强制结构完整性。最后的全局去重步骤确保数据集范围内的唯一性。所有过滤和纠正操作都是完全可审计的。
在通过将 LLM 作为判官、基于规则的过滤和全局去重流水线后,我们在约 410 万个高质量样本上微调基础模型。以下详情适用于所有三个模型变体:
训练配置:
强化学习:多阶段强化学习流水线
SFT 后,我们应用多阶段强化学习流水线进一步改进模型在特定领域的能力。与单次强化学习不同,我们运行多个针对性的强化学习阶段,每个阶段优化不同的能力。
我们使用采用 DAPO(解耦剪裁和动态采样策略优化)损失函数(Yu et al., 2025)的在策略 GRPO(组相对策略优化)(Shao et al., 2024),相比标准 GRPO 提供更稳定的训练信号。但由于动态采样的计算密集性,我们在实际训练中关闭了该功能。
图 10 展示了 Granite 4.1 模型的强化学习流水线。通过广泛尝试各种强化学习方案,我们发现这一阶段序列最大程度上最小化灾难性遗忘,同时最大化多个领域的性能。
图 10:Granite 4.1 强化学习流水线,包括四个顺序阶段:多域强化学习、RLHF、身份和知识校准强化学习,以及数学强化学习。
在这个阶段,模型在从多个领域抽取的统一数据混合上进行联合训练。因此每个梯度更新反映了任务的完整多样性,这防止了灾难性遗忘,提升了整体基准性能,并最小化了单个任务上的回归。
这个阶段涵盖的不同领域包括:
在这个阶段,我们在 45,504 个独特提示(所有 Granite 4.1 模型的平均值)上训练了模型,并发现学习率 5e-7 和 KL 损失系数($\beta$)0.05 对多域强化学习表现最优。
为了进一步提升模型的有用性和对话能力,我们使用多语言标量奖励模型在通用聊天提示上训练模型。在这个阶段,我们观察到 Alpaca-Eval 相比 SFT 检查点平均提升约 18.9 分(三个 Granite 4.1 模型的平均值)。
为了缓解与先前学习知识的策略漂移,我们在这个阶段使用保守的学习率 3e-7 和较高的 KL 损失系数 $\beta$ 0.09。我们在这个 RLHF 阶段使用平均 17,920 个独特的提示。
在这个阶段,我们在身份和知识校准提示上训练模型数个步骤(约 40 个训练步骤)。我们观察到这个小的训练阶段显著改进了模型的自我认知能力。
与 RLHF 阶段类似,我们使用学习率 3e-7 和 KL 损失系数 $\beta$ 0.09,该阶段使用 1728 个独特的提示。
在我们的 RL 训练中,我们发现 RLHF 阶段会导致数学基准测试成绩下降(例如在 GSM8K 和 DeepMind-Math 上)。数学 RL 阶段使模型能够从这种下降中恢复,并超越原始 SFT 在数学基准上的性能:GSM8K 上平均约 3.8 分,DeepMind-Math 上平均约 23.48 分。我们在这个阶段使用平均 13,504 个独特的提示,与多领域 RL 阶段类似,我们使用学习率 5e-7 和 KL 损失系数 $\beta$ 0.05。
支持语言:英文、德文、西班牙文、法文、日文、葡萄牙文、阿拉伯文、捷克文、意大利文、韩文、荷兰文和中文。
Granite 4.1 在无需依赖长思维链的情况下提供了具有竞争力的指令遵循和工具调用能力。通过避免冗长的推理轨迹,它提供了可预测的延迟、稳定的令牌使用和更低的运营成本。这使 Granite 4.1 成为一个生产就绪的开源选择,适用于效率、可靠性和成本控制至关重要的企业工作负载。
一个令人瞩目的结果:Granite 4.1-8B 密集模型在一系列基准测试中与前一代 Granite 4.0-H-Small 一致或超越,而后者是一个拥有 9B 活跃参数的 32B 参数混合专家模型。
图 13:Granite 4.1-8B(深蓝色)vs. Granite 4.0-H-Small 32B-A9B(浅蓝色)在各种基准上的表现。8B 密集模型在 IFEval、AlpacaEval、MMLU-Pro、BBH、GSM8K、DeepMind-Math、Evalplus、ArenaHard、BFCL V3 和 MBPP(+) 上匹配或超越了更大的 MoE 模型。
图 14:Granite 4.1 家族的对比——30B、8B 和 3B 模型。分数随模型大小可预测地扩展,30B 模型在所有基准上领先。
我们还发布了针对 vLLM 推理优化的 fp8 量化版本的 Granite 4.1 模型。精度从 16 位降低到 8 位,导致磁盘占用空间和 GPU 内存使用量约减少 50%。量化仅应用于 Transformer 块内线性算子的权重和激活,使用 LLM Compressor,而所有其他层保持在原始精度。
我们在 CoreWeave 托管的 NVIDIA GB200 NVL72 集群上训练了 Granite 4.1 语言模型:
这个基础设施提供了在预训练所需的令牌量(仅预训练就超过 15T 令牌)下高效分布式训练所需的可扩展、高带宽互连。
Granite 4.1 模型在 Apache 2.0 许可证下可用。以下是如何使用 30B 指令模型和工具调用示例入门的方法:
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_role|>
<|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|>
PRISM:揭示中期训练中的保留和交互
GitHub:ibm-granite/granite-4.1-language-models
Granite 文档
Granite 社区资源
Granite 4.1 标志着高质量、开源语言模型的重大进步。通过在从预训练策划到监督微调和多阶段强化学习的每个阶段优先考虑数据质量和严谨性,我们提供了一个大幅改进的后训练流水线。其结果是更强的指令遵循、工具使用和对话性能,证明了精心训练的密集 8B 模型可以与大得多的 MoE 架构相媲美。我们很期待看到社区如何采用和构建这些模型。