Model reference · open weights
HRM-Text is an open-weight language model from sapientinc. HRM-Text-1B (BF16) weighs 2.4 GB; the smallest configuration that runs it is RTX 3060 12 GB.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the sapientinc/HRM-Text-1B model card, 2026-10-01
What it is
| Released by | sapientinc |
|---|---|
| Released | 2026-05-17 |
| Parameters | 1.2B |
| VRAM | 2.4 GB for the weights |
What it runs on
| Card | Requests at once | Context max | Memory |
|---|---|---|---|
| 4K each | |||
| RTX 3060 12 GB | 21 | all 4K | 11.6 GB |
| RTX 4060 Ti 16 GB | 31 | all 4K | 15.4 GB |
| RTX 3090 24 GB | 50 | all 4K | 23.4 GB |
| RTX 4090 24 GB | 50 | all 4K | 23.4 GB |
| RTX 5090 32 GB | 69 | all 4K | 31.0 GB |
| L40S 48 GB | 101 | all 4K | 44.0 GB |
| A100 80 GB | 186 | all 4K | 78.2 GB |
| H100 80 GB | 179 | all 4K | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | 218 | all 4K | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | 251 | all 4K | 107 GB |
| H200 141 GB | 327 | all 4K | 138 GB |
| B200 180 GB | 422 | all 4K | 176 GB |
| Requests at once | 4K tokens each |
|---|---|
| 1 | 3.3 GB |
| 5 | 4.9 GB |
| 8 | 6.1 GB |
| 16 | 9.4 GB |
| 32 | 15.8 GB |
| 64 | 28.7 GB |
One card, with vLLM's small-card settings.
From the model card
A 1 B-parameter language model checkpoint built on the Hierarchical Reasoning Model (HRM) architecture, trained by Sapient Intelligence from scratch on structured public datasets.
HRM is a dual-timescale recurrent architecture: two Transformer modules (H = high-level / slow, L = low-level / fast) iterate over the same input embeddings for H_cycles × (L_cycles + 1) steps, with additive state injection (z_L + z_H). This gives effectively unbounded compute depth at bounded parameter count.
This is a pre-alignment model checkpoint, not a chat or instruction-following assistant. It is pre-trained on a PrefixLM objective with condition prefix tokens and has not been multi-turn dialogue tuned, long-context adapted, instruction-tuned, RLHF-trained, or otherwise aligned for assistant-style use. If you want to use HRM-Text like a chat model, you would need to perform further alignment, such as SFT and/or RL, on task-specific data. This checkpoint is meant to serve as a starting point, not a finished assistant.
Practical guidance for prompting the raw checkpoint:
direct condition with 2–8 few-shot in-context examples. direct + few-shot is the strongest zero-extra-training setup we have measured; pure zero-shot is noticeably weaker.synth,cot. This is one composite prefix, not two alternatives — at tokenization time the comma-separated tags are mapped to their prefix tokens and concatenated, in order, into a single prefix block. So synth,cot produces the two-token prefix (synth first, then cot), wrapped in the usual … `` envelope. Under this composite the model exhibits some chain-of-thought / instruct-like behavior — enough to answer many zero-shot math and reasoning prompts in a step-by-step style — but quality is uneven and below an instruction-tuned model of comparable size. Treat this "instruct" ability as a side effect of the pre-training mix, not a guaranteed capability.The four single condition tags and their assigned tokenizer special tokens (token names are legacy implementation details; you can compose any subset, comma-separated, in the order you want them emitted):
direct → `` — direct answer, no CoTcot → `` — chain-of-thoughtnoisy → `` — noisy / web-crawl stylesynth → `` — synthetic / curated styleRequires transformers >= 5.9.0, which ships native support for the hrm_text model class:
pip install --upgrade "transformers>=5.9.0"
| Field | Value |
|---|---|
| Parameters | ~1 B |
| Hidden size | 1536 |
| Layers (per H / L stack) | 16 |
| Attention heads | 12 (MHA, head_dim 128) |
| H_cycles × L_cycles | 2 × 3 |
| Max sequence length | 4096 |
| Vocabulary | 65,536 |
| Embedding | Scaled (lecun_normal) |
| Position encoding | RoPE (theta 10000) |
| Activation | SwiGLU |
| Normalization | Parameterless Pre-RMSNorm |
| Attention | Gated (sigmoid output gate) |
| Training unique tokens | 40 B |
| Optimizer | AdamATan2 (beta 0.9 / 0.95, wd 0.1, EMA 0.9999) |
| LR | 2.2e-4 (warmup 2000 steps) |
| Global batch | 196,608 tokens |
| dtype | 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 = ""
prompt = f"{condition}Explain why the sky is blue."
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 was pre-trained with a PrefixLM mask: prompt tokens attend bidirectionally to each other, response tokens attend causally. To match the training-time forward at inference you must tell the model which positions are prefix.
In the current Transformers port the mask is controlled by token_type_ids:
token_type_ids[i] == 1 → position i is part of the prefix block (bidirectional within the block).If you omit token_type_ids, attention falls back to pure causal, which does not match the pre-training distribution and will give noticeably worse logits. The simplest correct call passes token_type_ids = torch.ones_like(input_ids), marking the entire input prompt as one bidirectional prefix block — exactly how training-time prefill ran.
The recurrent core (per forward pass, in inference mode):
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
Both stacks share the same Transformer block design (gated attention, RoPE, SwiGLU, pre-RMSNorm); see Model details above for shapes.
Pre-trained on a sampled mixture of publicly available text corpora. The full dataset composition, sampling weights, and preprocessing pipeline are open-sourced:
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.