Snowflake d512 Datakit SFT 262K โ€” 2026.10.22

Research artifact. This model has not been properly tested or evaluated and is not necessarily secure. Use at your own risk in production settings.

Snowflakes are smaller Grug mixture-of-experts models that apply the Snowball 2026.10.05 recipe to smaller Snowball-family checkpoints. This release contains the width-512 model after 64K long-context extension and Datakit midtraining, 262K extension, and 3,207 supervised fine-tuning updates. The release date in the name is October 22, 2026. The configured 262,144-token context has not been validated by long-context generation tests.

Training data

Pretraining scheduled 94,499,766,272 positions. Each posttraining stage preserves the corresponding fraction of Snowball's 8,959,033,344,000-position pretraining budget, rounded to whole updates. Each update schedules 1,048,576 positions. These counts include padding in packed sequences and do not measure distinct text tokens.

Stage Context Packed sequences/update Updates Scheduled positions Peak base LR
lce-64k 65,536 16 10,126 10,617,880,576 0.000789724018
lce-262k 262,144 4 675 707,788,800 0.000253633991
sft 262,144 4 3,207 3,362,783,232 4.80367408e-05

The 64K stage uses Datakit phase-2 data. The 262K stage uses long-context pretraining data that repeats stores of documents longer than 64K eight times for each copy of the shorter-document store within each domain/quality bucket. SFT targets 79.6543% supervised data and 20.3457% pretraining replay: approximately 2,678,600,648 SFT positions and 684,182,584 replay positions out of 3,362,783,232 scheduled positions. Its 216 underlying SFT sources use the full 10.05 source allocation weights. Small sources are pooled before sampling. The smaller run samples a proportional budget; it does not force the full-size model's approximately one-epoch schedule. Integer sampling and pooling affect realized source counts.

Source family Nominal share of complete SFT run
nemotron_sft_v3 64.2349%
open_swe_traces 10.8340%
agenttrove 1.6438%
openthoughts4-code-glm-5.2-n4 1.3809%
penfever-traces 1.3556%
ultrachat-persona-conversations 0.1024%
agenttrove-glm53-compactions 0.0624%
identity-data 0.0249%
science-tool-use-conversations 0.0066%
glm-5.2-kernelgym-rollouts 0.0053%
wildchat-glm53-format-completions 0.0030%
synthetic-misconceptions-conversations 0.0006%
Long-context pretraining replay 20.3457%

training_data_mix.json records the source allocation weights and nominal budgets. pretraining_replay_mix.json records replay weights and stores. training_schedule.json records stage budgets, learning rates, source checkpoints, and source-file hashes.

Model and provenance

Property Value
Architecture GrugMoeForCausalLM (grug_moe)
Total parameters 746,607,104
Experts 256 routed experts, top-4 routing, plus a shared expert
Layers / hidden size 6 / 512
Attention heads / KV heads 4 / 1
Expert / shared expert intermediate size 256 / 512
Vocabulary size 128,256
Configured context length 262,144 tokens
Sliding window 2,048 tokens
QK multiplier 1.75
Final checkpoint step 104,130
SFT updates / starting step 3,207 / 100,923
Export BF16 safetensors
Training hardware TPU v4-32 in us-central2-b

The model uses full causal attention every fourth layer and in the last layer; other layers use the sliding window. Long attention layers omit rotary position embeddings and partial key offsets, matching the source checkpoint family.

The full optimizer state is resumed between stages. SFT begins without a new warmup. The peak SFT base learning rate is 4.80367408e-05, decaying to 10% of peak during the final 10% of updates. Learning rates use the scaled May Recipe rule documented in training_schedule.json; they were not separately tuned for this ladder.

Updates to seven special-token rows in both input embeddings and the LM head are multiplied by โˆš32. Router weights remain trainable; router biases and their deferred load-balancing updates remain frozen during SFT. The pending router-bias update carried from before SFT is applied when exporting the final checkpoint.

Seven LM-head rows are initialized from single-token anchors: 128006 from 3560 ( role), 128007 from 1984 ( message), 128002 from 1781 ( think), 128003 from 4320 ( answer), 128005 from 5507 ( tool), 128011 from 842 ( end), and 128009 from EOS (128001). Only those LM-head optimizer moments are reset. Input embeddings and their optimizer moments are preserved at initialization and remain trainable. BOS and EOS are preserved; no new tokens are added.

Chat and generation settings

The tokenizer and templates are pinned to the full 10.05 release. Omitting enable_thinking defaults to thinking. For a vLLM chat request, select nonthinking mode with:

{"chat_template_kwargs": {"enable_thinking": false}}

For local prompt formatting:

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("open-athena/Snowflake-d512-Datakit-SFT-262K-2026.10.22")
prompt_ids = tokenizer.apply_chat_template(
    [{"role": "user", "content": "What is 17 times 23?"}],
    tokenize=True,
    return_dict=False,
    add_generation_prompt=True,
    enable_thinking=False,
)

Generation stops on both <|end_of_text|> (128001) and <|eot_id|> (128009). The tokenizer's EOS remains 128001. Preserve both stop IDs in other runtimes. Thinking boundaries are <|start_think|> (128002) and <|end_think|> (128003); decode with skip_special_tokens=False to retain them. Tools use JSON inside <tool_call>...</tool_call>; arguments may be objects or JSON strings. Tool-call delimiters remain ordinary text. The inference template adds the thinking default to the training template.

Serving and evaluation

These HF-format weights require a runtime with Grug MoE support. Stock Transformers and stock vLLM do not implement this architecture. The downloadable HF safetensors can be loaded through Levanter's SnowballConfig and SnowballLMHeadModel; the Marin GPU vLLM fork contains a Grug implementation with normalized sigmoid routing. GPU vLLM load and decode passed on one NVIDIA H100 using the pinned Marin fork, BF16 weights, eager execution, a 1,024-token runtime limit, and a 1 GiB KV cache. The next-token probe returned the same token ID as the native reference. Each server was launched with a pinned --revision, a distinct port, and a served-model name containing the width and HF revision. Each response's model field matched that configured name. vllm_validation.json records the pinned HF revision, runtime, probe, and four generated prompt responses. These checks do not validate 262K serving, throughput, or general model quality.

Every exported tensor was reloaded and checked for exact equality against the native checkpoint weights after applying its deferred router-bias update and BF16 conversion. The downloadable weights include that update. A 128-position native/Levanter HF forward probe also passed in FP32 using those same BF16 weights cast to FP32. export_complete.json records numerical results. These checks do not establish generation quality, safety, or performance at the configured context length. No held-out capability or long-context benchmark evaluation has been run for this release. The four inference prompts are qualitative examples, not a capability benchmark.

The tested runtime settings can be reproduced with the Marin GPU fork installed:

vllm serve open-athena/Snowflake-d512-Datakit-SFT-262K-2026.10.22 \
    --runner generate --tensor-parallel-size 1 --dtype bfloat16 \
    --max-model-len 1024 --max-num-batched-tokens 1024 --max-num-seqs 1 \
    --kv-cache-memory-bytes 1073741824 --enforce-eager --port 8512

Choose a distinct port for each concurrent server. For reproducible tests, pin --revision to the HF revision recorded in vllm_validation.json.

License

The model materials are released under the OpenMDW License Agreement, version 1.1.

Downloads last month
77
Safetensors
Model size
0.7B params
Tensor type
BF16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support