File size: 5,295 Bytes
084b790 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | ---
license: apache-2.0
language:
- en
library_name: pytorch
pipeline_tag: text-generation
tags:
- mathematics
- recurrent-transformer
- custom-code
- sentencepiece
datasets:
- openai/gsm8k
- AI-MO/NuminaMath-1.5
- EleutherAI/asdiv
---
# NanoMath-R
NanoMath-R is a math model with 103.83 million parameters, written from scratch
in PyTorch. It has 16 stored Transformer decoder blocks and applies the same stack
twice, giving 32 block applications per token without storing a second stack of
weights.
The release is intended for research on small models and direct integer arithmetic. It
is not a general assistant and it is not a dependable solver for word problems,
fractions, algebra, proofs, or calculations where an error could cause harm.
## Model details
| Setting | Value |
|---|---:|
| Stored parameters | 103,834,368 |
| Physical decoder blocks | 16 |
| Recurrent passes | 2 |
| Unrolled depth | 32 |
| Width | 768 |
| Query heads | 12 |
| Key and value heads | 4 |
| Context length | 1,024 tokens |
| Vocabulary | 4,096 SentencePiece tokens |
| Position encoding | RoPE |
| Normalization | RMSNorm |
| MLP | SwiGLU |
The model uses grouped query attention and tied input and output embeddings.
Its projections have no bias, and its residual projections were initialized to
zero at the start of training.
## Files
- `model_weights.pth` contains the weights, model configuration, and training
metadata.
- `token.model` is the matching SentencePiece tokenizer.
- `model_config.json` and `training_summary.json` expose the main checkpoint
metadata without loading PyTorch.
- `benchmark_results.json` records the release checks.
- `checksums.sha256` covers every published model file.
- `LICENSE` contains the Apache License 2.0 terms.
This checkpoint is incompatible with the NanoMath v1.0, v1.1, V2, and V3
tokenizers.
## Run it
The checkpoint uses the custom classes in the
[NanoMath-R source repository](https://github.com/agmada-asa/NanoMath-R). It
does not load through `AutoModelForCausalLM` or the standard Transformers text
generation pipeline.
```bash
git clone https://github.com/agmada-asa/NanoMath-R.git
cd NanoMath-R
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
hf download agmadaasa/NanoMath-R model_weights.pth token.model --local-dir build
python3 scripts/chat.py "What is 84 / 7?"
```
The prompt format is:
```text
<|user|> What is 84 / 7? <|end|>
<|assistant|>
```
Greedy decoding is the default. The model normally emits a reasoning span,
then `<|answer|>`, a numeric answer, and `<|end|>`.
## Evaluation
Fresh release checks used greedy decoding, two recurrent passes, a KV cache,
FP16 on Apple MPS, and at most 384 new tokens.
| Evaluation | Examples | Macro exact match | Micro exact match | Malformed |
|---|---:|---:|---:|---:|
| Synthetic math reserved for evaluation | 50 | 63.27% | 66.00% | 2.00% |
| SVAMP | 40 | 22.50% | 22.50% | 0.00% |
| NanoMath v1.1 continuity prompts | 6 | 50.00% | 50.00% | 0.00% |
The clearest strength is direct integer arithmetic. On the synthetic sample it
scored 8/8 addition, 8/8 subtraction, 7/7 multiplication, and 7/7 exact
division. The same sample scored 2/7 linear equations, 1/7 word problems, and
0/6 fraction questions. These samples are small. They describe observed
behavior, not a guarantee.
## Training
The packed training stream contains 233,896,960 token positions and 1,066,609
accepted documents after length filtering. Its source counts are:
| Source | Documents |
|---|---:|
| Verified structural arithmetic | 750,000 |
| NuminaMath | 190,209 |
| Generated language curriculum | 117,487 |
| GSM8K | 7,404 |
| ASDiv | 1,509 |
The run completed 6,000 optimizer steps and processed 393,216,000 token
positions, about 1.68 passes through the packed corpus. It used two NVIDIA T4
GPUs, FP16, sequences of 1,024 tokens, attention isolated between documents,
loss weights based on message role, and activation checkpointing. Training
took 41,623.7 wall seconds, or 23.12 hours of accelerator use. The checkpoint
records validation loss 0.129966.
Prompt tokens had weight 0, reasoning tokens weight 1, and answer tokens weight
3. Every packed document reset its positions and could not attend to another
document in the same block.
## Limits and intended use
Good uses include studying recurrent depth, reproducing the reported
experiments on small models, and testing direct arithmetic prompts with independent
verification.
NanoMath-R is not reliable for financial, medical, engineering, or other
calculations where an error could cause harm. It can produce fluent reasoning
with the wrong final number. Training primarily used English, the context
window is 1,024 tokens, and the release represents one training seed. The model
has not received a broad safety or bias evaluation. It is also outside its
intended scope for coding, factual retrieval, unrestricted chat,
formal proof, and advanced mathematics.
The source datasets retain their own licenses and terms. Users should review
those terms before redistributing derived artifacts.
## Integrity
Checkpoint SHA-256:
```text
6d251ab0c7595023006f7975b05436676311c18f17c8df608dc44a3e24f937b2
```
Tokenizer SHA-256:
```text
195e6efabd0a9dc238f04c83807d4e2cb79bd0270866773ad0b71a44c3794ba1
```
|