HuggingFace镜像/HRM-Text-1B
模型介绍文件和版本分析
下载使用量0

HRM-Text banner

Benchmark scatter: FLOPs and tokens vs benchmark average for HRM-Text-1B vs comparable models

arXiv Paper GitHub

HRM-Text-1B

基于层次推理模型(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提示的实用指南:

  • NLP任务(分类、提取、结构化输出、短形式问答):使用direct条件,并提供2-8个少样本上下文示例。direct+少样本是我们测量过的最强零额外训练设置;纯零样本效果明显较弱。
  • 推理/数学/开放式生成:使用复合条件synth,cot。这是一个复合前缀,而非两个选项——在分词时,逗号分隔的标签会映射到它们的前缀令牌,并按顺序连接成一个单一的前缀块。因此,synth,cot会生成双令牌前缀<|quad_end|><|object_ref_end|>(先synth,再cot),包裹在常规的<|im_start|>…<|im_end|>信封中。在这种复合条件下,模型表现出一定的思维链/指令式行为——足以以逐步方式回答许多零样本数学和推理提示——但质量参差不齐,低于同等规模的指令调优模型。请将这种“指令”能力视为预训练数据混合的副作用,而非保证的功能。

四个单一条件标签及其分配的分词器特殊令牌(令牌名称是遗留实现细节;您可以按希望的顺序组合任何子集,用逗号分隔):

  • direct → <|object_ref_start|> — 直接回答,无CoT
  • cot → <|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))

PrefixLM 掩码 — 传入 token_type_ids

HRM-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);有关形状信息,请参见上文的模型详情。

训练数据

在公开可用文本语料库的抽样混合数据上进行预训练。完整的数据集构成、抽样权重和预处理流程已开源:

data_io

局限性

  • 仅支持英语(训练语料库主要为英语)。
  • HRM-Text-1B 未在代码数据集上进行训练,因此其在编码任务上的性能较弱符合预期。早期第三方使用约 1B tokens 代码数据进行的有监督微调实验,将编码基准测试分数从个位数低分值提升至约 40–50,表明其具有良好的适应潜力,但这些结果不属于本 checkpoint。
  • 在不同环境下,输出结果可能会有所不同,并且可能包含不准确、有偏见或不安全的内容。

许可证

Apache License 2.0。

引用

如果您发现本项目或我们的论文对您有所帮助,请考虑引用我们的论文:

@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}, 
}