

基于层次推理模型(HRM) 架构构建的10亿参数语言模型 checkpoint,由Sapient Intelligence在结构化公共数据集上从头开始训练。
HRM是一种双时间尺度循环架构:两个Transformer模块(H = 高层/慢速,L = 低层/快速)对相同的输入嵌入迭代H_cycles × (L_cycles + 1)步,并进行加性状态注入(z_L + z_H)。这使得在参数数量有限的情况下,计算深度实际上可以无限扩展。
这是一个预对齐模型 checkpoint,并非聊天或指令跟随助手。它是在PrefixLM目标下使用条件前缀令牌进行预训练的,未经过多轮对话调优、长上下文适配、指令调优、RLHF训练或其他针对助手式使用的对齐处理。如果您希望将HRM-Text用作聊天模型,需要在特定任务数据上进行进一步的对齐,例如SFT和/或RL。此checkpoint旨在作为起点,而非成品助手。
原始checkpoint提示的实用指南:
direct条件,并提供2-8个少样本上下文示例。direct+少样本是我们测量过的最强零额外训练设置;纯零样本效果明显较弱。synth,cot。这是一个复合前缀,而非两个选项——在分词时,逗号分隔的标签会映射到它们的前缀令牌,并按顺序连接成一个单一的前缀块。因此,synth,cot会生成双令牌前缀<|quad_end|><|object_ref_end|>(先synth,再cot),包裹在常规的<|im_start|>…<|im_end|>信封中。在这种复合条件下,模型表现出一定的思维链/指令式行为——足以以逐步方式回答许多零样本数学和推理提示——但质量参差不齐,低于同等规模的指令调优模型。请将这种“指令”能力视为预训练数据混合的副作用,而非保证的功能。四个单一条件标签及其分配的分词器特殊令牌(令牌名称是遗留实现细节;您可以按希望的顺序组合任何子集,用逗号分隔):
direct → <|object_ref_start|> — 直接回答,无CoTcot → <|object_ref_end|> — 思维链noisy → <|quad_start|> — 嘈杂/网络爬取风格synth → <|quad_end|> — 合成/精选风格需要 transformers >= 5.9.0,该版本原生支持 hrm_text 模型类:
pip install --upgrade "transformers>=5.9.0"| 字段 | 值 |
|---|---|
| 参数数量 | ~10亿 |
| 隐藏层大小 | 1536 |
| 层数(每 H/L 堆叠) | 16 |
| 注意力头数 | 12(MHA,头维度 128) |
| H循环数 × L循环数 | 2 × 3 |
| 最大序列长度 | 4096 |
| 词汇表大小 | 65,536 |
| 嵌入方式 | 缩放(lecun_normal) |
| 位置编码 | RoPE(theta 10000) |
| 激活函数 | SwiGLU |
| 归一化 | 无参数预 RMSNorm |
| 注意力机制 | 门控(sigmoid 输出门) |
| 训练唯一标记数 | 400亿 |
| 优化器 | AdamATan2(beta 0.9 / 0.95,权重衰减 0.1,指数移动平均 0.9999) |
| 学习率 | 2.2e-4(预热 2000 步) |
| 全局批次 | 196,608 个标记 |
| 数据类型 | bfloat16 |
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "sapientinc/HRM-Text-1B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
dtype=torch.bfloat16,
).cuda().eval()
# synth,cot composite — reasoning / CoT style (see Disclaimer for other modes)
condition = "<|quad_end|><|object_ref_end|>"
prompt = f"<|im_start|>{condition}Explain why the sky is blue.<|im_end|>"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
# Mark the prompt as a single bidirectional prefix block — see "PrefixLM mask" below.
inputs["token_type_ids"] = torch.ones_like(inputs["input_ids"])
with torch.no_grad():
out = model.generate(**inputs, max_new_tokens=256, do_sample=False)
print(tokenizer.decode(out[0], skip_special_tokens=False))token_type_idsHRM-Text 采用 PrefixLM 掩码进行预训练:提示词 token 之间可进行双向注意力交互,而响应 token 则采用因果注意力机制。为了在推理阶段复现训练时的前向计算过程,必须告知模型哪些位置属于前缀部分。
在当前的 Transformers 移植版本中,掩码由 token_type_ids 控制:
token_type_ids[i] == 1 → 位置 i 属于前缀块(块内采用双向注意力)。如果省略 token_type_ids,注意力机制将退化为纯因果模式,这与预训练分布不匹配,会导致生成的 logits 质量显著下降。最简单的正确调用方式是传入 token_type_ids = torch.ones_like(input_ids),将整个输入提示标记为一个双向前缀块 —— 这与训练时的预填充(prefill)过程完全一致。
循环核心(在推理模式下,每次前向传播):
z_H = embed(input_ids) * embedding_scale
z_L = z_L_init.expand_as(z_H)
for _ in range(H_cycles):
for _ in range(L_cycles):
z_L = L_module(z_L + z_H)
z_H = H_module(z_H + z_L)
return z_H两个模型栈共享相同的 Transformer 块设计(门控注意力机制、RoPE、SwiGLU、pre-RMSNorm);有关形状信息,请参见上文的模型详情。
在公开可用文本语料库的抽样混合数据上进行预训练。完整的数据集构成、抽样权重和预处理流程已开源:
如果您发现本项目或我们的论文对您有所帮助,请考虑引用我们的论文:
@misc{wang2026hrmtextefficientpretrainingscaling,
title={HRM-Text: Efficient Pretraining Beyond Scaling},
author={Guan Wang and Changling Liu and Chenyu Wang and Cai Zhou and Yuhao Sun and Yifei Wu and Shuai Zhen and Luca Scimeca and Yasin Abbasi Yadkori},
year={2026},
eprint={2605.20613},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2605.20613},
}