gpt-oss-78b β€” Uniform Expert-Pruned Experiment

A structural-pruning experiment on openai/gpt-oss-120b: drop the least-used 1/3 of experts from every MoE layer, uniformly, with no recovery training, and see what it actually costs. Not an APEX/precision-reallocation quant β€” see below for why that approach doesn't apply to this model.

APEX quantizaion takes advantage of the fact that 16bit precision is not actually needed for most tensors in LLM's. Most tensors can function with 8 bits with effectively zero degradation and medium-sized models in the 100-200B parameter range have started distributing 4-bit versions of their models. gpt-oss 120B is one such model where the BF16 was never actually even distributed - even their safetensors models are distruibuted with 4-bit experts. However, Laguna and Nemotron for example offer a 4-bit version directly from the vendor. Apex extends the speed and size advantages of this lower quantization to models for which they are not available. This is not a real option for gpt-oss, where the tensors are already 4-bit.

What this is

gpt-oss-120b is 36 transformer layers Γ— 128 experts/layer (top-4 routing). Since intermediate_size == hidden_size == 2880, essentially the entire model (~115B of 116.8B real params) lives in the expert FFN stacks β€” attention and everything else is a rounding error by comparison. NVIDIA's own gpt-oss-puzzle-88B compresses this same base model via heterogeneous Puzzle NAS: a different expert count, and even a different expert width, chosen per layer, plus knowledge distillation, RL, and window-attention swaps to recover quality afterward. This architecture does succeed in reducing the size, but currently requires a special kernel to run which isn't even available in stock LLM frameworks.

This experiment asks the simpler question: what happens if you skip all of that and just uniformly drop the same fraction of experts from every layer, choosing which specific experts to drop per-layer from real measured usage (not a fixed heuristic), and apply zero recovery training?

Method

  1. Measure real per-expert usage. Hooked each layer's expert-dispatch call during a real forward pass over a diverse calibration set (web prose + permissive code + multilingual text β€” not just English wiki prose, since MoE experts often specialize by domain, and a narrow calibration corpus would bias "usage" against experts a different domain actually needs).
  2. Drop the least-used 43 of 128 experts per layer (uniform count, not uniform which experts β€” each layer's own ranking decides which 85 it keeps), remap the router accordingly.
  3. Pure tensor surgery, no dequantization. The model ships natively in MXFP4 (block-quantized, ~4.25 bits/weight). Every expert-indexed tensor (gate_up_proj/ down_proj blocks, scales, biases, and the router itself) has the expert dimension as its leading axis, so pruning is a plain index_select on packed MXFP4 bytes β€” the quantized values themselves are never touched or decoded.
  4. No recovery training. Verified this isn't skippable for free: the native MXFP4 inference kernels (Triton matmul_ogs) have no registered backward pass at all β€” gradient can't reach any router, let alone the pruned experts, without dequantizing at least part of the model to bf16. Full dequant needs ~156GB just for the pruned model's weights alone, well past what fits on the hardware this was built on. A partial fix (dequantize only a small tail of layers to trainable bf16, keep the rest frozen in fast native format) is architecturally sound but wasn't built out β€” this release is the raw, undistilled structural cut.

Results (real, not simulated)

All numbers below are real llama-perplexity/llama-server runs, validated on two independent llama.cpp implementations (mainline ggml-org/llama.cpp and a Puzzle-support fork) agreeing to within ~1%, same corpus, same settings throughout.

original 120b pruned 78B native 20b (for reference)
total params 116.8B 78.3B 20.9B
layers Γ— experts/layer 36 Γ— 128 36 Γ— 85 24 Γ— 32
PPL, raw wikitext completion (ctx 512) 213.65 273.36 159.93
chained tool-calling gate (3 trials) 3/3 3/3 3/3
hard-tier coding benchmark (5 real tasks, partial credit) not tested 47/59 (79.7%), 4/5 fully solved not tested

Raw completion PPL degrades ~28% relative to the original with no recovery applied β€” a real, non-trivial cost, exactly what you'd expect from skipping the distillation/RL step that NVIDIA's actual Puzzle pipeline uses. But two things are worth noting:

  • Tool-calling and coding are untouched. The core agentic behavior gpt-oss is actually built for β€” chained tool calls with correct argument passing, not falling for a distractor tool, and solving real multi-file coding challenges β€” survives the pruning intact. 4 of 5 hard-tier coding challenges were solved completely, and the fifth got real partial credit, not a collapse.
  • Raw wikitext PPL is a poor proxy for this model family. The native 20b variant scores better on this metric than either 120b configuration, despite being ~4x smaller β€” gpt-oss is heavily RL/chat-tuned, not built for bare next-token completion on generic prose, so this metric mostly measures something other than what these models are actually evaluated on in practice.
  • Honest bottom line: if the goal is "smallest usable gpt-oss for constrained hardware," the native 20b β€” trained at that size, not surgically cut down to it β€” is the better answer on the one hard metric available, and it's still smaller than this pruned 78.3B. This release exists to document that a simple, recovery-free structural cut is mechanically sound and preserves core capability, not to claim it beats a purpose-built smaller model.

Why an APEX quant of gpt-oss-120b doesn't make sense

APEX-style quantization (used elsewhere in this account's releases) works by measuring per-tensor sensitivity and then non-uniformly reallocating precision β€” protecting sensitive tensors, sacrificing bits on insensitive ones β€” to beat a naive uniform quantization at the same total size. That has real headroom to exploit when the starting point is a uniform-precision baseline (e.g. a stock bf16 or Q4_K_M conversion).

gpt-oss-120b doesn't offer that headroom, for two concrete reasons:

  1. It already ships pre-allocated, not uniform. OpenAI's own release explicitly excludes attention, router, embeddings, and lm_head from MXFP4 quantization, keeping them at full bf16 while only the expert FFN weights go to ~4.25-bit MXFP4. That's already a "protect the sensitive stuff, compress the rest" allocation baked into the format β€” there's very little left for a second, independent sensitivity-driven pass to discriminate on top of.
  2. There's no room to go lower, bit-wise. MXFP4 is already near the practical floor for this architecture; you can't meaningfully requantize an already-4-bit format down further and expect a size win the way you can starting from bf16/Q8. The only way to meaningfully shrink gpt-oss-120b further is structural β€” remove whole experts or layers β€” which is precisely what this experiment does instead. APEX and structural pruning are answers to different problems: APEX helps when the bit budget itself is the lever; here, the bit width is already fixed near its floor, and the count of things resident is the only lever left.

There's also a practical blocker: doing our own from-scratch sensitivity-driven requantization would require dequantizing the model to a continuous-precision baseline first, which at 120B scale needs ~240GB just to hold the weights β€” not something this was built to attempt, and even if it were, it would at best reproduce what OpenAI's own MXFP4 calibration already achieved, with no guaranteed improvement.

Files

  • gpt-oss-78B-pruned.gguf β€” the pruned checkpoint, converted via mainline llama.cpp, MXFP4-native experts preserved (not dequantized), bf16 for attention/router/norms β€” same mixed-precision layout as the original release.
  • kept_expert_indices.json β€” the exact per-layer set of retained expert indices (85 of 128, by original index), for reproducibility.

Attribution

Unofficial community experiment; not affiliated with or endorsed by OpenAI or NVIDIA.

Downloads last month
209
GGUF
Model size
78B params
Architecture
gpt-oss
Hardware compatibility
Log In to add your hardware

We're not able to determine the quantization variants.

Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for Myric/gpt-oss-78B-pruned-experiment

Quantized
(122)
this model