CoolFace
Modelpublic

AEON-7/supergemma4-26b-abliterated-multimodal-nvfp4

sourceHugging Facegemmaupdated 2mo agoView on Hugging Face
6likes135downloads
Model Card

SuperGemma4 26B Abliterated Multimodal — NVFP4

NVFP4-quantized version of Jiunsong/supergemma4-26b-abliterated-multimodal — an abliterated (uncensored) Gemma 4 26B Mixture-of-Experts multimodal model with thinking/reasoning capabilities.

Quantized using NVIDIA ModelOpt 0.43 (main) with NVFP4_DEFAULT_CFG on a native Blackwell GPU. Vision encoder preserved in full BF16. Peak aggregate throughput: 1,890 tok/s @ 256 concurrent on DGX Spark (GB10).

Verified end-to-end: calibrated → exported → served on Spark → benchmarked 1-256 concurrency.


⚠️ IMPORTANT REQUIREMENTS — READ THIS FIRST

This model has non-obvious serving requirements because its per-expert-decomposed NVFP4 scale format needs specific plugin handling. Deviating from these will produce garbage output or crashes. Details below — each requirement is backed by hours of debugging.

🔴 MUST-DO requirements

#RequirementWhy
1Use the `-awq` container image: ghcr.io/aeon-7/vllm-spark-gemma4-nvfp4-awq:latestHas baked-in modelopt.py scale handling (PRs #1264, #1265) + patched expert_params_mapping. The non--awq variant (or any stock vLLM) will crash or produce corrupted output.
2Force Marlin MoE: set env VLLM_TEST_FORCE_FP8_MARLIN=1 and VLLM_MARLIN_USE_ATOMIC_ADD=1FlashInfer NVFP4 MoE backends reject the 704-per-expert intermediate dim. Do NOT set `VLLM_NVFP4_GEMM_BACKEND=marlin` — that would also force Marlin on the LINEAR path where native FLASHINFER_CUTLASS is faster. Let linear auto-select; only MoE needs Marlin.
3Mount both patches: gemma4_patched.py and serving_chat_patched.py (2 files, NOT 3)modelopt_patched.py is baked into the image — mounting a stock version on top will corrupt the scale convention. Only mount the two listed here.
4Use `--quantization modelopt` (not compressed-tensors)This checkpoint uses the modelopt NVFP4 format. compressed-tensors looks for different key names and will fail to load.
5Native Blackwell GPU required (SM 10.0+)Ampere / Ada GPUs have no native FP4 compute path. Verified on: GB10 (SM 12.0, DGX Spark), RTX PRO 6000 Blackwell (SM 12.1), should work on B200/GB200 (SM 10.0).
6Use vLLM 0.19.1rc1.dev110 or later with Blackwell-compiled FP4 kernelsStock vLLM wheels don't compile FP4 kernels for SM 10/12. Use the pre-built container, or build from source with TORCH_CUDA_ARCH_LIST="10.0;12.0;12.1" + transformers 5.5+.

✅ Verified-working config (use this verbatim)

yaml
services:
  vllm:
    image: ghcr.io/aeon-7/vllm-spark-gemma4-nvfp4-awq:latest   # NOT the non-awq variant
    environment:
      - VLLM_TEST_FORCE_FP8_MARLIN=1     # required for MoE
      - VLLM_MARLIN_USE_ATOMIC_ADD=1
      - VLLM_ALLOW_LONG_MAX_MODEL_LEN=1
      - TORCH_MATMUL_PRECISION=high
      - PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
      - NVIDIA_FORWARD_COMPAT=1
    volumes:
      # model + 2 patches ONLY — do not mount modelopt_patched.py (it's baked in)
      - ./model:/models/supergemma4
      - ./gemma4_patched.py:/usr/local/lib/python3.12/dist-packages/vllm/model_executor/models/gemma4.py
      - ./serving_chat_patched.py:/usr/local/lib/python3.12/dist-packages/vllm/entrypoints/openai/chat_completion/serving.py
    command: >
      vllm serve /models/supergemma4
      --quantization modelopt
      --kv-cache-dtype fp8_e4m3
      --tensor-parallel-size 1
      --max-model-len 65536
      --max-num-seqs 4
      --gpu-memory-utilization 0.70
      --trust-remote-code
      --host 0.0.0.0 --port 8000
      --enable-chunked-prefill
      --enable-prefix-caching
      --enable-auto-tool-choice
      --tool-call-parser gemma4
      --reasoning-parser gemma4

❌ Known FAILURE modes (things that DON'T work)

What you might tryWhat happensFix
Use vllm-spark-gemma4-nvfp4:latest (non-awq image)Model loads but produces "-Hello-Hello-" or empty contentSwitch to -awq variant
Drop VLLM_TEST_FORCE_FP8_MARLIN=1 — let native FP4 MoE auto-selectKeyError during weight load OR corrupted outputRe-add the env var
Mount your own modelopt_patched.py on topScale values get double-inverted → garbage outputRemove the mount; use image's baked version
Use --quantization compressed-tensorsKeyError: 'weight_packed' during loadUse modelopt
Use --kv-cache-dtype fp8 instead of fp8_e4m3Works, but slight accuracy drift on long contextUse fp8_e4m3 as specified
Mount eagle_patched.py for spec decodeAttributeError: image_token_indexGemma4 EAGLE3 not yet supported upstream; omit spec decode for now

🐛 If you see gibberish output after following all of the above

  1. 1.Verify the image: docker inspect <container> | grep Image should show vllm-spark-gemma4-nvfp4-awq
  2. 2.Verify mounts: docker inspect <container> --format '{{json .Mounts}}' should show exactly 3 mounts (model + 2 patches)
  3. 3.Verify backend selection in logs:
  4. 4.Using NvFp4LinearBackend.FLASHINFER_CUTLASS for NVFP4 GEMM ✅
  5. 5.Using 'MARLIN' NvFp4 MoE backend ✅
  6. 6.Test with raw chat: {"messages": [{"role": "user", "content": "Capital of France? One sentence."}]} — should return "The capital of France is Paris.". If not, check the container logs for crashes or UNEXPECTED tensor warnings at load time.

Performance Benchmarks

NVIDIA DGX Spark (GB10, SM 12.0, 128 GB unified memory) — vLLM 0.19.1rc1.dev110+gb55d830ec, FP8 E4M3 KV cache, native FlashInfer CUTLASS linear + Marlin MoE backend, --gpu-memory-utilization 0.85.

1. Single-Stream Performance (README-spec config)

`--max-num-seqs 4`, `--max-model-len 65536`, `--gpu-memory-utilization 0.85`. Best for interactive chat, agentic UX, single-user serving. All measurements greedy sampling (temp=0) unless noted.

Decode rate (10 trials, 200 tokens output)
Statistictok/s
Median51.1
P9551.5
Min50.9
Max51.5

Extremely stable — ±0.5 tok/s variance across 10 trials.

TTFT by prompt length

Time from request to first token, across 5 trials each:

Prompt classPrompt tokensTTFT medianTTFT p95TTFT minEffective prefill
Tiny1456 ms58 ms55 ms250 tok/s
Short1949 ms61 ms48 ms386 tok/s
Medium4945 ms46 ms44 ms1,093 tok/s
Long46547 ms47 ms45 ms9,996 tok/s

Even 465-token prompts give sub-50ms TTFT — fixed kernel-launch overhead dominates over prefill for anything < ~500 tokens.

Decode rate by output length

Longer outputs are slightly slower due to growing KV cache:

Max tokensActual tokensTTFTDecode rateTotal latency
505049 ms51.9 tok/s1.01 s
20020050 ms50.9 tok/s3.98 s
50050049 ms50.7 tok/s9.90 s
1000558*61 ms50.6 tok/s11.10 s

*Short because model hit EOS naturally before 1000 tokens.

Sampling: Greedy vs Stochastic

Temperature has negligible performance impact:

ModeDecode medianDecode p95TTFT median
Greedy (temp=0)51.9 tok/s52.1 tok/s48 ms
Stochastic (temp=0.7)51.0 tok/s51.2 tok/s51 ms
Long-prompt prefill (RAG / document workloads)

Prefill throughput scales impressively with length — MoE's sparse compute is the perfect shape for prefill:

Target prompt tokensActualTTFT**Prefill rate**Decode rate (after prefill)
1K8090.06 s14,450 tok/s52.1 tok/s
4K3,1720.05 s66,851 tok/s51.9 tok/s
16K12,6250.09 s139,648 tok/s50.6 tok/s
32K25,2280.13 s194,082 tok/s48.3 tok/s

Decode only drops 7% at 32K context — excellent KV-cache bandwidth behavior. Prefill peaks around 194K tok/s at 32K prompt length.

Summary
MetricValue
Single-stream decode (200-tok output)51.1 tok/s median
Short-prompt TTFT44-56 ms
16K-prompt TTFT90 ms
32K-prompt TTFT130 ms
Peak prefill throughput194K tok/s @ 32K prompt
Decode rate with 32K context48.3 tok/s (7% drop vs short context)

This matches and exceeds the original v6 validation (52.6 tok/s / 54 ms TTFT).

2. Concurrent-Session Performance (max-throughput config)

`--max-num-seqs 256`, `--max-model-len 2048`, `--max-num-batched-tokens 16384`, `--gpu-memory-utilization 0.85`. Best for agent fleets, multi-user serving, batch inference. 3 trials per level with median reported. Mixed prompts (code, math, QA, creative), 200 token output, temp=0.7, SSE streaming.

Throughput scaling (N concurrent clients, 200-tok output)
ConcurrentErrAgg tok/s (median of 3)Per-Req decode p50Per-Req decode minTTFT p50TTFT p95TTFT max
1035.950.850.864ms64ms64ms
2051.848.345.959ms59ms59ms
4088.639.036.470ms71ms71ms
80149.131.728.8135ms135ms135ms
160269.624.923.1149ms150ms150ms
320422.320.018.5194ms195ms195ms
640711.516.615.6284ms285ms286ms
12801,154.013.813.2449ms545ms548ms
25601,775.910.76.5851ms863ms864ms

Zero errors across 1,200+ requests in the full test. Aggregate throughput scales nearly linearly up to 128 concurrent, with diminishing returns at 256 as scheduling and KV-cache contention dominate.

Note: single-stream here is 35.9 tok/s (vs 51.1 in README config) because max-num-seqs=256 forces allocation of 50+ CUDA graph sizes and different scheduling heuristics that optimize for batched throughput over single-stream latency. Use README config for chat; use this config for fleets.

TTFT-only scaling (prefill + first token, 1-token output)

Measures how much queue contention affects time-to-first-token — critical for agent UX:

ConcurrentTTFT p50TTFT p95TTFT maxTTFT min
147ms48ms48ms46ms
448ms88ms88ms46ms
16100ms102ms102ms55ms
64171ms174ms175ms91ms
256522ms527ms530ms167ms

TTFT stays sub-200ms up through 64 concurrent — smooth UX for small agent fleets. Above 128 concurrent TTFT doubles per level as requests queue for scheduler capacity.

Concurrent with 1K-token prompts (RAG-style workload)

50-token output with 1,024-token prompts — simulates agents doing document QA or retrieval-augmented responses:

ConcurrentErrAgg tok/sTTFT p50TTFT p95Decode p50
1042.855ms55ms49.3
40109.282ms103ms38.7
160272.2147ms147ms27.0
640711.9261ms293ms16.9

Long-prompt concurrent workloads scale as well as short-prompt ones (prefill is very fast on MoE with 194K tok/s peak throughput).

Summary
MetricValue
Peak aggregate throughput1,776 tok/s @ 256 concurrent (median of 3 trials)
Scaling from 1 → 25649.5× throughput (ideal would be 256×)
Per-request decode @ 25610.7 tok/s median, 6.5 min
Peak server-reported generation2,022 tok/s (vLLM engine stats)
Peak combined (prompt + gen)2,627 tok/s
TTFT @ 64 concurrent284 ms median (usable)
TTFT @ 256 concurrent851 ms median (acceptable for batch)
Error rate across full test0.0% (1,200+ requests)
Best concurrency for chat UX4-8 (per-request 30-40 tok/s, TTFT <150ms)
Best concurrency for throughput128-256 (maxes aggregate, TTFT trade-off)

Key Performance Metrics

MetricValue
Single-stream decode (README config)52.2 tok/s
Short-prompt TTFT (README config)44 ms
Peak aggregate throughput (bench config)1,890 tok/s @ 256 concurrent
Peak server-reported generation2,022 tok/s (vLLM engine stats)
Peak combined (prompt + gen)2,627 tok/s
Model load time~4-5 min (weight load + torch.compile + CUDA graphs + FP4 autotune)
Model memory footprint16.4 GB
KV cache capacity~700K tokens @ fp8_e4m3
GEMM backend (linear)FLASHINFER_CUTLASS (native Blackwell FP4 tensor cores)
MoE backendMARLIN (required — FlashInfer MoE variants reject 704-per-expert intermediate)
Attention backendTRITON_ATTN (heterogeneous head dims require Triton)
Prefix cache hit rate~70-80% (sustained, mixed workload)

Scaling Efficiency

ConcurrencyThroughput Gain vs 1-req
11.0x
42.7x
167.7x
6419.8x
12832.8x
25650.0x

Aggregate throughput scales 50x from 1 to 256 concurrent requests — excellent batching efficiency from the MoE architecture. Per-request throughput degrades gracefully from 37.8 tok/s (1-req) to 9.3 tok/s (256-req), still usable for agent workloads with many short-lived subagents.

Why MoE is Fast on DGX Spark

GB10's 273 GB/s memory bandwidth is the bottleneck for LLM decode. MoE dramatically reduces per-token bandwidth demand:

ModelParams Read/TokenBW Required @ 50 tok/sFits GB10?
Dense 27B (BF16)~54 GB2,700 GB/sNo
Dense 27B (NVFP4)~13.5 GB675 GB/sNo
MoE 26B top-8/128 (NVFP4)~2.8 GB140 GB/sYes (51% BW)

Key Specs

Original (BF16)NVFP4 (this model)
Size on disk~49 GB~16.4 GB
Total parameters25.2B25.2B
Active parameters3.8B / token3.8B / token
ArchitectureMoE: 128 experts, 8 active / tokensame
Context window262K tokens262K tokens
ModalitiesText, Image, VideoText, Image, Video
Quantization—NVFP4 (W4A4, block size 16)
Vision encoderBF16BF16 (preserved, not quantized)

Model Details

PropertyValue
ArchitectureGemma 4 MoE (26B total, 3.8B active / token)
Layers30 (25 sliding-window + 5 full-attention)
Experts128 total, top-8 active per token
Sliding Window1024 tokens
Max Context262,144 tokens
Hidden Size2816
MoE Intermediate704 per expert
Attention Heads16 (8 KV heads), headdim=256, globalhead_dim=512
Vision Encoder27-layer ViT (1152 hidden, 16 heads, patch_size=16)
Vocabulary262,144 tokens
QuantizationNVFP4 (ModelOpt 0.43 main + 2 pending PRs)

Pre-Built Container Image

A pre-built vLLM container compiled for NVIDIA DGX Spark (GB10, SM 12.1) is available with all required patches pre-applied:

bash
docker pull ghcr.io/aeon-7/vllm-spark-gemma4-nvfp4-awq:latest

Image contents:

  • —vLLM 0.19.1rc1 compiled for SM 12.1 (Blackwell GB10)
  • —PyTorch 2.12.0 + CUDA 13.0
  • —transformers 5.5.0 + FlashInfer 0.6.7
  • —Patched gemma4.py — extends expert_params_mapping to the modelopt suffix set (weight, weight_scale, weight_scale_2, input_scale)
  • —Patched serving.py — fixes non-streaming reasoning parser for Gemma 4
  • —Patched modelopt.py — handles the per-expert-decomposed NVFP4 scale format
  • —Built from eugr/spark-vllm-docker with --tf5 flag
Critical: Use the -awq variant of the image. The non--awq image does not include the baked-in modelopt scale-handling patches required for this model's per-expert NVFP4 format.

Container on GHCR


Quick Start

1. Pull the container

bash
docker pull ghcr.io/aeon-7/vllm-spark-gemma4-nvfp4-awq:latest

2. Download the model

bash
pip install -U huggingface-hub hf_transfer

HF_HUB_ENABLE_HF_TRANSFER=1 \
  hf download AEON-7/supergemma4-26b-abliterated-multimodal-nvfp4 \
  --local-dir ~/models/supergemma4-26b

3. Get the patches

Only two patch files need to be mounted — modelopt.py is baked into the -awq image:

bash
for f in gemma4_patched.py serving_chat_patched.py; do
  curl -LO https://raw.githubusercontent.com/AEON-7/supergemma4-26b-abliterated-multimodal-nvfp4/main/$f
done

4. Launch with Docker Compose

Save as docker-compose.yml:

yaml
services:
  vllm:
    image: ghcr.io/aeon-7/vllm-spark-gemma4-nvfp4-awq:latest
    container_name: vllm-supergemma4-26b
    restart: unless-stopped
    network_mode: host
    volumes:
      - ~/models/supergemma4-26b:/models/supergemma4
      - ./gemma4_patched.py:/usr/local/lib/python3.12/dist-packages/vllm/model_executor/models/gemma4.py
      - ./serving_chat_patched.py:/usr/local/lib/python3.12/dist-packages/vllm/entrypoints/openai/chat_completion/serving.py
    environment:
      # Force Marlin MoE path — native FlashInfer MoE variants reject 704-per-expert intermediate
      - VLLM_TEST_FORCE_FP8_MARLIN=1
      - VLLM_MARLIN_USE_ATOMIC_ADD=1
      - VLLM_ALLOW_LONG_MAX_MODEL_LEN=1
      - TORCH_MATMUL_PRECISION=high
      - PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
      - NVIDIA_FORWARD_COMPAT=1
    command:
      - bash
      - -c
      - |
        exec vllm serve /models/supergemma4 \
          --served-model-name supergemma4-26b \
          --quantization modelopt \
          --dtype auto \
          --kv-cache-dtype fp8_e4m3 \
          --tensor-parallel-size 1 \
          --max-model-len 65536 \
          --max-num-seqs 4 \
          --gpu-memory-utilization 0.70 \
          --trust-remote-code \
          --host 0.0.0.0 --port 8000 \
          --enable-chunked-prefill \
          --enable-prefix-caching \
          --enable-auto-tool-choice \
          --tool-call-parser gemma4 \
          --reasoning-parser gemma4
    ipc: host
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

Then:

bash
docker compose up -d

Startup takes ~4-5 minutes (weight load + torch.compile + CUDA graph capture + FP4 GEMM autotuning).

Workload-tuned configs

Workloadmax-model-lenmax-num-seqsBest for
Long-context (RAG, docs)655364Few long conversations
Balanced819232Mixed chat + agents
Max throughput2048256Many short agents (1,890 tok/s)
Max context2621441Single-stream, max window

5. Test

bash
# Text
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "supergemma4-26b",
    "messages": [{"role": "user", "content": "Explain quantum entanglement simply."}],
    "max_tokens": 300
  }'

# Vision
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "supergemma4-26b",
    "messages": [{
      "role": "user",
      "content": [
        {"type": "image_url", "image_url": {"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/PNG_transparency_demonstration_1.png/280px-PNG_transparency_demonstration_1.png"}},
        {"type": "text", "text": "Describe what you see."}
      ]
    }],
    "max_tokens": 300
  }'

The API is fully OpenAI-compatible — use with any OpenAI SDK, LangChain, LiteLLM, Open WebUI at http://<your-ip>:8000/v1.


Key Deployment Flags

FlagPurpose
VLLM_TEST_FORCE_FP8_MARLIN=1Required — forces Marlin MoE path (FlashInfer NVFP4 MoE backends reject 704-intermediate)
--quantization modeloptRequired — tells vLLM to use NVIDIA ModelOpt NVFP4 format
--kv-cache-dtype fp8_e4m3FP8 KV cache — doubles token budget vs BF16
--max-model-len 6553664K context. Model supports 262K; trade for concurrency
--max-num-seqs 4README default. Bump to 256 for max throughput workloads
--gpu-memory-utilization 0.70On the DGX Spark's unified memory keep 0.6-0.7 — above ~0.8 the shared CPU+GPU pool page-thrashes and stalls the box (even 0.85 stalls). Go lower with co-located sidecars, high concurrency, fp16 KV, or DFlash. Discrete-VRAM GPUs can run higher.
--reasoning-parser gemma4Extracts <think> blocks into reasoning_content in API response
--tool-call-parser gemma4Native Gemma 4 function/tool calling
--enable-chunked-prefillProcesses long prompts in chunks
--enable-prefix-cachingCaches common system prompt prefixes

Quantization Details

ParameterValue
ToolNVIDIA ModelOpt 0.43.0rc2.dev (from upstream main)
ConfigNVFP4_DEFAULT_CFG (plain NVFP4, no AWQ)
Weight dtypeNVFP4 (FP4 E2M1, block size 16)
Calibration samples512 (CNN/DailyMail train split)
Calibration seq_len4096 tokens
Batch size3 (VRAM-probed)
Calibration hardwareNVIDIA RTX PRO 6000 Blackwell (97 GB VRAM)
Calibration wall-clock12.75 min (via modelopt-fast-moe adaptive batching)
Excluded from quantizationvision_tower, embed_vision, multi_modal_projector, routers (BF16)
Exported size16.42 GB

Why plain NVFP4 instead of NVFP4_AWQ?

Earlier experiments used NVFP4_AWQ_FULL_CFG (AWQ with exhaustive alpha grid search) but ran into a deployment-stack limitation: vLLM's ModelOptNvFp4FusedMoE does not support per-expert pre_quant_scale. On MoE models, AWQ calibration computes a per-expert scaling factor that can't be consumed by the MoE kernel path — any AWQ work on experts is wasted at serve time.

Switching to plain NVFP4 (algorithm=max):

  • —Cuts calibration time from ~2.5h to ~12 min (no alpha search phase)
  • —Produces a checkpoint vLLM's FusedMoE loads natively without tensor surgery
  • —Quality hit is negligible since the AWQ benefit on MoE experts was already unavailable at inference time

Attention and dense shared MLP layers still benefit from NVFP4's per-block scaling. Router weights stay in BF16 (routing quality is critical for MoE accuracy and experts are cheap to leave un-quantized there).

Applied modelopt patches

Two upstream PR fixes applied locally (pending review as of this writing):

  • —PR #1264 — preprocess_linear_fusion non-scalar amax fix
  • —PR #1265 — get_activation_scaling_factor zero-amax handling

Both are blockers for anyone quantizing per-expert-decomposed MoEs in NVFP4 with modelopt 0.42 or 0.43. The -awq container image includes these patches in its baked modelopt.py — do not override with a stock version.

fast-moe adaptive batched calibration

Calibration uses `modelopt-fast-moe` — adaptive VRAM-probed batching that fixes the Python-dispatch bottleneck when quantizing MoE models (the naive for ids in calib_data: model(ids) loop leaves GPUs at 25-30% utilization).

End-to-end calibration wall-clock:

ConfigurationWall-clock
Naive bs=1 loop (modelopt default)~50h projected (killed at 18h)
fast-moe + NVFP4AWQFULL (earlier v3 attempt)2h 24min
fast-moe + NVFP4_DEFAULT (this v6)12 min

NVFP4 Weight Format

Each quantized layer stores:

  • —weight (uint8) — packed FP4 E2M1 pairs (16-element blocks)
  • —weight_scale (float8_e4m3fn) — per-block scale (1 per 16 elements)
  • —weight_scale_2 (float32) — per-tensor global scale (stored as modelopt reciprocal convention)
  • —input_scale (float32) — static activation scale from calibration

Quality Validation

Greedy-sampled responses (temperature=0.0):

PromptResponse
"What is the capital of France?""The capital of France is Paris."
"What is 17 * 23?""391" ✓
"Write a haiku about the ocean.""Blue waves kiss the shore, / Endless water, salt and spray, / Deep blue mysteries."
"Name three cities in Japan.""1. Tokyo 2. Osaka 3. Kyoto"
"One-line Python prime function"Valid implementation with correct base cases
"Explain photosynthesis in one sentence."Correct, coherent summary

Speculative Decoding (DFlash — Coming Soon)

A DFlash block-diffusion drafter paired with this model is in training. DFlash can provide 2-3× additional throughput over the numbers above by predicting multi-token blocks in a single draft forward pass. Will be published as a separate drafter repo once training completes.


Dense (31B) vs MoE (26B) Comparison

Metric31B DECKARD DenseThis Model (26B MoE)
Active params / token31.3B~3.8B
NVFP4 model size20.5 GB16.4 GB
Single-stream tok/s (Spark)~11-1437.8
Peak aggregate (Spark)—1,890 tok/s @ 256
Context window262K262K
VisionYesYes
Best forQuality-critical tasksSpeed, concurrency, efficiency

Hardware Requirements

TierGPUNotes
TargetNVIDIA DGX Spark (128 GB unified)Full 262K context, up to 6 concurrent seqs
CompatibleRTX 5090 (32 GB)Reduced context, 1-2 seqs
CompatibleB200 / GB200Full context, high concurrency
CompatibleRTX PRO 6000 Blackwell (97 GB)Calibration + serving
MinimumAny Blackwell GPU (SM 10.0+)Required for native FP4

Native FP4 hardware (Blackwell architecture) is required — will not run on Ampere or Ada GPUs.


Related Projects

Models

ModelTypeSizeLink
SuperGemma4 26B NVFP4 (this)MoE NVFP416.4 GBGitHub
Gemma-4-26B-A4B-it-Uncensored NVFP4MoE NVFP4 (compressed-tensors)15.3 GBHuggingFace
Gemma 4 31B DECKARDDense NVFP4 AWQ20.5 GBHuggingFace
gemma-4-31B-it-speculator.eagle3 NVFP4EAGLE3 drafter NVFP43.5 GBHuggingFace

Infrastructure

ResourceDescriptionLink
vLLM AWQ ContainerPre-built for DGX Spark (SM 12.1) with all patchesGHCR
Build Systemspark-vllm-dockerGitHub
modelopt-fast-moeAdaptive batched calibrationGitHub
Base ModelSuperGemma4 26B Abliterated Multimodal (BF16)HuggingFace

Disclaimer

THIS IS AN UNCENSORED MODEL. By downloading, accessing, or using this model, you expressly acknowledge that you assume full and sole responsibility for all outputs generated, all actions taken based on outputs, and compliance with applicable laws. The authors are not responsible for any harmful, illegal, or objectionable content produced by the model. These tools serve legitimate purposes including security research, red-teaming, content analysis, and creative work. Implement safeguards appropriate to your use case and jurisdiction.


License

This model inherits the Gemma license from Google.

Credits

Quantized by AEON-7 on NVIDIA Blackwell hardware. Built and validated with AI-engineering assistance from Anthropic.

Shout-out to eugr/spark-vllm-docker for the DGX Spark-optimized vLLM build, NVIDIA for TensorRT-Model-Optimizer, and the z-lab / ModelOpt teams for DFlash.


☕ Support the work

If this release has been useful, tips are deeply appreciated — they go directly toward more compute, more models, and more open releases.

<table align="left"> <tr><td align="left"> <strong>₿ Bitcoin (BTC)</strong><br/> <img src="https://raw.githubusercontent.com/AEON-7/AEON-7/main/assets/qr/btc.png" alt="QR" width="200"/><br/> <sub><code>bc1q09xmzn00q4z3c5raene0f3pzn9d9pvawfm0py4</code></sub> </td></tr> <tr><td align="left"> <strong>Ξ Ethereum (ETH)</strong><br/> <img src="https://raw.githubusercontent.com/AEON-7/AEON-7/main/assets/qr/eth.png" alt="QR" width="200"/><br/> <sub><code>0x1512667F6D61454ad531d2E45C0a5d1fd82D0500</code></sub> </td></tr> <tr><td align="left"> <strong>◎ Solana (SOL)</strong><br/> <img src="https://raw.githubusercontent.com/AEON-7/AEON-7/main/assets/qr/sol.png" alt="QR" width="200"/><br/> <sub><code>DgQsjHdAnT5PNLQTNpJdpLS3tYGpVcsHQCkpoiAKsw8t</code></sub> </td></tr> <tr><td align="left"> <strong>ⓜ Monero (XMR)</strong><br/> <img src="https://raw.githubusercontent.com/AEON-7/AEON-7/main/assets/qr/xmr.png" alt="QR" width="200"/><br/> <sub><code>836XrSKw4R76vNi3QPJ5Fa9ugcyvE2cWmKSPv3AhpTNNKvqP8v5ba9JRL4Vh7UnFNjDz3E2GXZDVVenu3rkZaNdUFhjAvgd</code></sub> </td></tr> </table>

Ethereum L2s (Base, Arbitrum, Optimism, Polygon, etc.) and EVM-compatible tokens can be sent to the same Ethereum address.