Instructions to use openhubresearch/ATLAS-OLMo-3-32B-Think-v4 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use openhubresearch/ATLAS-OLMo-3-32B-Think-v4 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="openhubresearch/ATLAS-OLMo-3-32B-Think-v4")# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("openhubresearch/ATLAS-OLMo-3-32B-Think-v4", dtype="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use openhubresearch/ATLAS-OLMo-3-32B-Think-v4 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "openhubresearch/ATLAS-OLMo-3-32B-Think-v4" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "openhubresearch/ATLAS-OLMo-3-32B-Think-v4", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/openhubresearch/ATLAS-OLMo-3-32B-Think-v4
- SGLang
How to use openhubresearch/ATLAS-OLMo-3-32B-Think-v4 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "openhubresearch/ATLAS-OLMo-3-32B-Think-v4" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "openhubresearch/ATLAS-OLMo-3-32B-Think-v4", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "openhubresearch/ATLAS-OLMo-3-32B-Think-v4" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "openhubresearch/ATLAS-OLMo-3-32B-Think-v4", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use openhubresearch/ATLAS-OLMo-3-32B-Think-v4 with Docker Model Runner:
docker model run hf.co/openhubresearch/ATLAS-OLMo-3-32B-Think-v4
ATLAS-OLMo-3-32B-Think-v4
A 32B reasoning model on a single 40 GB GPU. OLMo-3-32B-Think (AI2) served by the ATLAS pure-Rust inference engine with AWQ 4-bit weight-only quantization — 27.2 GB VRAM on one A100-SXM4-40GB, through a zero-external-dependency Rust + custom-CUDA stack.
Status: ✅ Prototype serving verified end-to-end on production hardware (astra-01, A100-40GB). Code on branch feat/w4-32b (commit b4e901b), 631/631 workspace tests green; production cutover of the live endpoint (atlas.thebeastagi.com, currently serving the 7B sibling) is pending merge to main.
TL;DR
| Question | Answer |
|---|---|
| What is this? | The serving configuration + measured results for OLMo-3-32B-Think running through ATLAS's custom W4A32 CUDA path |
| Does 32B fit on a 40 GB A100? | Yes — 27.2 GB total @ 16K context, 13.8 GB headroom (nvidia-smi: 27,170 / 40,960 MiB) |
| Is it smarter than the 7B? | Yes, by a lot — GSM8K 100% vs 88%, MMLU 82% vs 54%, same harness |
| Is it fast? | Decode is usable (~14.6 tok/s); long-prompt TTFT is the honest weak spot (see Limitations) |
| Are the weights here? | No — weights are the unmodified community AWQ quant (cyankiwi/Olmo-3-32B-Think-AWQ-4bit); ATLAS is the engine, not a fine-tune |
Benchmarks (measured on the A100-40GB, ATLAS stack)
Same harness and sampling as the 7B v4.2.0 numbers (temperature 0.6, top-p 0.95, AI2 reference system prompt, <think> primer):
| Benchmark | 32B AWQ-4bit (this config) | 7B BF16 baseline | Notes |
|---|---|---|---|
| GSM8K (25 problems, same rows) | 25/25 = 100% | 88% | 22.2K completion tokens total |
| MMLU (40 questions, 32 subjects) | 33/40 = 82% | 54% (MMLU-100, different sample) | 4 of 7 misses were output-length truncations at the 1,500-token cap — accuracy ≈ 100% where reasoning completed |
| Code (5 tasks, execution-verified) | 5/5 = 100% | HumanEval-15: 73.3% pass@1 | fib, is_prime, reverse_words, two_sum, balanced-brackets — all pass their tests |
⚠️ Sample sizes are honest but small. These were prototype-validation runs. Expanded suites — GSM8K-100, MMLU-200 (33 subjects), HumanEval-50 — are running on the production box right now (2026-07-07) and this card will be updated with the results and per-item JSON.
Performance & footprint (A100-SXM4-40GB)
| Metric | 32B W4 (this config) | 7B BF16 (reference) |
|---|---|---|
| VRAM total @ 16K context | 27.2 / 40 GB | ~16 GB |
| Decode throughput (short ctx) | ~14.6 tok/s | ~50 tok/s |
| Decode @ ~1.2K ctx | 10.4 tok/s | ~45 tok/s |
| TTFT (short prompt) | 3.9 s | ~1.5 s |
| TTFT @ ~1.2K-token prompt | ~100 s ⚠️ (#22) | ~25 s |
| Model load time | ~75 s (19.6 GB checkpoint, incl. GPU upload) | ~200 s |
| Host RSS | ~11 GB (streaming loader) | — |
VRAM breakdown: W4 weights ~17.9 GB + BF16 lm_head ~1.0 GB + f32 KV cache ~8.6 GB (@16K) + scratch. Decode scales as expected for a memory-bandwidth-bound GEMV stack (4.6× params ≈ 3.4× slower than 7B). The theoretical bandwidth ceiling for streaming ~19 GB of weights per token on an A100 is ~75 tok/s — closing the gap is kernel-occupancy work (#23).
Architecture deep-dive
OLMo-3-32B-Think is a dense decoder-only transformer with an unusually serving-friendly attention layout:
| Property | Value |
|---|---|
| Parameters | ~32.2B dense |
| Layers | 64, in a repeating [SWA, SWA, SWA, full] block ×16 → 48 sliding-window + 16 full-attention layers |
| Sliding window | 4,096 tokens (SWA layers) |
| Attention | GQA — 40 query heads / 8 KV heads, head_dim 128 |
| Hidden / FFN | 5,120 / 27,648 (SwiGLU) |
| Norms | Post-norm + QK-norm (full-projection RMSNorm on Q and K) |
| RoPE | θ = 500,000; YaRN ×8 (8,192 native → 65,536 max), attention_factor ≈ 1.208 |
| Vocab | 100,278 (BPE; new-generation [["a","b"], …] merges format) |
Why the 3:1 SWA layout matters for serving
Full f32 KV across all 64 layers costs 512 KiB per token → 8 GB at 16K context. But only the 16 full-attention layers actually need KV for the whole context — the 48 SWA layers never look back more than 4,096 tokens. An SWA-aware KV cache needs only:
16 full × 16,384 tok + 48 SWA × 4,096 tok ≈ 3.75 GB (f32) — vs 8 GB naive
16 full × 65,536 tok + 48 SWA × 4,096 tok ≈ 5.1 GB (BF16) — full 64K context, still fits in 40 GB
That means the full 64K YaRN context is reachable on this same 40 GB card — tracked as #24 together with BF16 KV.
Quantization recipe
Weight-only int4, symmetric (no zero-points), group size 32, MSE observer, AWQ via llm-compressor; lm_head kept BF16. Stored in compressed-tensors "pack-quantized" layout — verified empirically against pack_to_int32 (col j → u32 word j/8, little-endian nibble, stored nibble = q+8). The layout is directly kernel-friendly: ATLAS ingests it with no repacking step, and dequantizes inline in a custom W4A32 GEMV kernel (warp-per-row, per-group BF16 scales hoisted per packed word). Runtime precision is W4 weights × f32 activations.
What ATLAS implements for the W4 path
gemv_w4_kernel/atlas_gemv_w4_f32— W4A32 GEMV CUDA kernel with inline int4 dequant- Direct
compressed-tensorsingestion — no repacking, no conversion step - Streaming W4 shard loader — each Linear uploaded to VRAM as soon as its packed + scale halves are seen; peak host RSS ≈ 11 GB (a naive f32 init would need ~128 GB)
- Tokenizer fix for new-generation checkpoints — BPE merges as
[["a","b"], …]pairs now parse correctly (with regression tests) - Full GPU attention path plus HF-reference-fidelity fixes (YaRN correction range, layer-type RoPE split, full-projection QK-norm) — output is differential-tested against
transformers
How to use
Via the ATLAS API (OpenAI-compatible)
# Build ATLAS (branch feat/w4-32b until merged)
git clone -b feat/w4-32b https://github.com/web3guru888/ATLAS.git
cd ATLAS
cargo build --release -p atlas-cli
# Fetch the AWQ 4-bit checkpoint (~19.6 GB)
hf download cyankiwi/Olmo-3-32B-Think-AWQ-4bit --local-dir /models/olmo3-32b-think-w4
# Serve
./target/release/atlas api serve \
--weights /models/olmo3-32b-think-w4 \
--model olmo3-32b \
--port 8080 \
--max-tokens 3584
# Query (chain-of-thought is returned in message.reasoning)
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "olmo3-32b",
"messages": [{"role": "user", "content": "What is 17 + 25?"}],
"max_tokens": 1500,
"temperature": 0.6,
"top_p": 0.95
}'
Via HuggingFace Transformers (compressed-tensors loader)
# pip install transformers compressed-tensors accelerate
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "cyankiwi/Olmo-3-32B-Think-AWQ-4bit"
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_id)
messages = [{"role": "user", "content": "What is 17 + 25?"}]
inputs = tokenizer.apply_chat_template(
messages, add_generation_prompt=True,
return_tensors="pt", return_dict=True,
).to(model.device)
output = model.generate(**inputs, max_new_tokens=1500, temperature=0.6, top_p=0.95, do_sample=True)
print(tokenizer.decode(output[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
Prompting guide for Think models (hard-won lessons)
- Always give
max_tokens ≥ 1500. The reasoning budget is consumed before the final answer — most apparent "wrong answers" from Think models are actually truncations. - Steer the thinking budget with a think-prefill. On open-ended prompts (especially code), free-form thinking can blow through even a 3,584-token cap. Via
/v1/completionswith a raw prompt, prime the trace: end your prompt with<think>Brief plan: …— the model completes a short plan and answers immediately and correctly. - Leave
repetition_penaltyat 1.0 and use temperature 0.6 / top-p 0.95 (AI2 reference sampling). - Ask for structured finals ("End your reply with: Answer: ") — the visible answer after
</think>stays clean and parseable.
Key differentiator: J-space interpretability
Beyond raw serving, ATLAS exposes a Jacobian lens (J-space) over the model's forward computation — a first-class interpretability surface over the 5,120-dim residual stream for auditing what the model is doing internally during generation. Combined with the StigmergicHook trait (atlas-infer crate), inference hooks can read/write stigmergic memory in real time during token generation. Planned next: J-lens fit + validation on this 32B and a model-audit workflow (eval-awareness, fabrication, hidden-objective screening) that plain serving stacks don't offer.
Limitations & roadmap
We publish our weak spots on purpose. Current honest state:
| Limitation | Detail | Fix | Status |
|---|---|---|---|
| Long-prompt TTFT ~100 s (@1.2K-token prompts) | Prefill currently runs token-by-token through the decode GEMV path (~16 tok/s prefill) | Batched/tiled prefill (GEMV→GEMM) | #22 — in progress, #1 priority; target TTFT < 5 s |
| Decode 14.6 tok/s vs ~75 tok/s bandwidth ceiling | Warp-per-row W4 GEMV at low occupancy | Kernel occupancy tuning (kernel_tuner / openevolve loop) | #23 — target 40+ tok/s |
| Served context 16K (model supports 64K) | f32 KV, not SWA-aware | BF16 + SWA-aware KV cache (see deep-dive) | #24 |
| Batch-1 serving | Single-request GEMV path | Batched decode after #22 lands | planned |
| 4-bit quality loss unmeasured for OLMo-3 | ~1–3% is the 32B-class community pattern, not OLMo-measured; our numbers exceed the 7B BF16 baseline by wide margins | W4-vs-BF16 study on identical benchmark sets (80 GB box) | planned |
| Small benchmark N | 25/40/5-item prototype validation | GSM8K-100 / MMLU-200 / HumanEval-50 | running now — card update follows |
| Thinking-output truncation | max_tokens < ~1500 truncates reasoning before the answer |
Use the prompting guide | documented |
Community
- Found something interesting? Broke it? Open a Discussion — especially interested in: reasoning failures, quantization artifacts vs the BF16 base model, and long-context behavior reports.
- Engine work happens in the open: web3guru888/ATLAS — issues #22/#23/#24 are the current 32B performance campaign.
- Want to reproduce our numbers? The bench harnesses are simple single-file Python scripts against the OpenAI-compatible endpoint — ask in Discussions and we'll share them.
About ATLAS
ATLAS (Active-inference Training with Learned Adaptive Stigmergy) is a next-generation LLM framework built in pure Rust with zero external crate dependencies — the SQLite principle applied to AI infrastructure. It fuses:
- GraphPalace — Stigmergic memory palace with pheromone-guided navigation
- ASTRA — Live discovery engine hitting NASA, WHO, World Bank APIs
- TRM-CausalValidator — 7M-param recursive validator
- Champagnat n-Morphic Framework — biologically-grounded training dynamics
22 crates. 631 tests. One coherent system. Zero external Rust dependencies.
Website: atlasagi.org · 7B sibling: ATLAS-OLMo-3-7B-Think-v4 · Live API: atlas.thebeastagi.com · Organization: OpenHub Research · Author: Robin Dey
Citation
@software{atlas2026,
title = {ATLAS: Active-inference Training with Learned Adaptive Stigmergy},
author = {Robin Dey},
year = {2026},
institution = {OpenHub Research, Thailand},
url = {https://github.com/web3guru888/ATLAS},
note = {Pure Rust LLM framework. 32B chapter: OLMo-3-32B-Think served
via AWQ 4-bit (W4A32 custom CUDA GEMV) in 27.2 GB on a single
A100-40GB. GSM8K 100% (25/25), MMLU 82%, exec-verified code 5/5
through the ATLAS serving stack. Branch feat/w4-32b, 631 tests.}
}
Model tree for openhubresearch/ATLAS-OLMo-3-32B-Think-v4
Base model
allenai/Olmo-3-1125-32B