By Konic Labs, Inc.

Two Stages, Much Smaller MoE: REAP Expert Pruning Followed by AWQ INT4 Quantization

TL;DR

We chain two complementary compression stages on Liquid LFM2.5-8B-A1B — REAP CUDA expert pruning (32→16 experts across 22 MoE layers) then external AWQ INT4 quantization (W4A16_ASYM, group 128). The published packed artifact is 1.15B packed-weight equivalent / 2.79 GB; recorded MATH500 and BFCLv3 results use a separate 9.18 GB AWQ-scaled BF16 derivative for vLLM evaluation, not direct packed-INT4 runtime. These are recorded run summaries, not general benchmarks.

Introduction

Mixture-of-Experts (MoE) models trade dense parameter count for routed capacity, which is powerful but expensive to ship: the full Liquid LFM2.5-8B-A1B checkpoint weighs in at 8.47B parameters and 16.94 GB on disk. Two compression techniques attack that footprint from different directions — expert pruning removes underused routed parameters, and weight quantization shrinks the parameters that remain. They compose: pruning first cuts the expert count, then quantization packs the surviving weights into INT4.

This post records a two-stage pipeline that chains REAP CUDA (Router-weighted Expert Activation Pruning) with AWQ INT4 quantization via the external llm-compressortoolchain. We prune LFM2.5-8B-A1B from 32 to 16 experts across its 22 MoE layers, then quantize the pruned model to W4A16_ASYM (group 128). The packed artifact is 7.4× smaller by packed-weight equivalent and 6.1× smaller on disk. The quality and throughput results below were measured with its 9.18 GB AWQ-scaled BF16 evaluation derivative for vLLM — not by directly running the 2.79 GB packed INT4 artifact.

These are recorded run summaries, not general benchmarks.

The two-stage pipeline

The pipeline is deliberately sequential and inspectable. Stage 1 (REAP) mutates the live MoE model in place, shrinking the expert stack. Stage 2 (AWQ) is an external step run through llm-compressor — it is not a REAP feature, and REAP has no knowledge of quantization. The two stages share only the pruned checkpoint on disk.

LFM2.5-8B-A1B (FP16, 32 experts/layer, 22 MoE layers, 8.47B / 16.94 GB)
        │
        ▼  Stage 1 — REAP CUDA (reap-cuda)
        │   calibrate  →  observe router activations  →  rank experts by saliency
        │   prune 32 → 16 experts per MoE layer  →  save pruned checkpoint
        ▼
REAP-50 pruned model (16 experts/layer, 4.59B / 8.57 GB)
        │
        ▼  Stage 2 — AWQ INT4 (external llm-compressor, NOT a REAP feature)
        │   256 calibration samples  →  W4A16_ASYM, group_size = 128
        │   pack surviving weights into INT4  →  export
        ▼
REAP-50 + AWQ INT4 packed artifact (1.15B packed-weight equivalent / 2.79 GB)
        │
        └── vLLM evaluation only: AWQ-scaled BF16 derivative (9.18 GB)

Pipeline compression

Each stage shrinks a different axis. REAP halves the expert count (and therefore the routed parameter budget); AWQ then packs the surviving FP16 weights into 4-bit groups. The packed-weight equivalent for the final stage is 4.59B pruned weights divided by four: it excludes scale and zero-point metadata, which is instead reflected in the on-disk artifact size.

StageParamsOn-disk sizeExperts / layerWhat changed
Base8.47B16.94 GB32Upstream FP16 checkpoint
REAP-50 (pruned)4.59B8.57 GB1632 → 16 experts pruned
REAP-50 + AWQ INT4 (packed)1.15B packed-weight eq.2.79 GB16W4A16_ASYM, group 128
AWQ-scaled BF16 (evaluated)4.59B BF169.18 GB16Decompressed for vLLM; AWQ scales preserved

Recorded run summary. The packed artifact is the published INT4 export; quality and vLLM rows use the separate AWQ-scaled BF16 evaluation derivative.

Quality — grouped comparison

We measure two capability axes against the upstream base: MATH500 (competition mathematics) and BFCLv3 single-turn function calling. The AWQ-scaled BF16 evaluation derivative is the headline comparison; the pruned-only (REAP-50) row isolates the effect of applying the AWQ stage on the same pruned backbone.

BenchmarkBaseREAP-50 (pruned)AWQ-scaled BF16 (evaluated)
MATH50088.76%77.0%72.0%
BFCLv3 single-turn64.79%59.07%57.36%

Recorded run summary. Base scores are upstream published; the final column is the 9.18 GB AWQ-scaled BF16 derivative, not the 2.79 GB packed INT4 artifact.

Benchmark comparison

Task-level operational profile

Base (LFM2.5-8B-A1B)AWQ-scaled BF16 (evaluated)

MATH500

19% worse

Base (LFM2.5-8B-A1B)88.76%
AWQ-scaled BF16 (evaluated)72%

BFCLv3 single-turn

11% worse

Base (LFM2.5-8B-A1B)64.79%
AWQ-scaled BF16 (evaluated)57.36%
Task-level operational profile — data table
TaskBase (LFM2.5-8B-A1B)AWQ-scaled BF16 (evaluated)
MATH50088.76%72%
BFCLv3 single-turn64.79%57.36%

Isolating the AWQ stage — controlled comparison

To separate pruning from the AWQ stage, we compare REAP-50 (pruned only) against the AWQ-scaled BF16 evaluation derivative on MATH500 difficulty levels. Both rows share the same pruned backbone (16 experts, identical routing), which isolates the AWQ scaling path on that backbone — not direct packed-INT4 runtime behavior.

The recorded pattern is concentrated at the hard end: L4 takes a roughly 10-point hit, and L5 the largest relative drop. L1–L2 retain the same displayed score; L3 needs the denominator caveat below.

Benchmark comparison

Task-level operational profile

REAP-50 (pruned)AWQ-scaled BF16 (evaluated)

MATH500 L1

baseline matched

REAP-50 (pruned)90.7%
AWQ-scaled BF16 (evaluated)90.7%

MATH500 L2

baseline matched

REAP-50 (pruned)84.4%
AWQ-scaled BF16 (evaluated)84.4%

MATH500 L3

baseline matched

REAP-50 (pruned)81.9%
AWQ-scaled BF16 (evaluated)81.9%

MATH500 L4

12% worse

REAP-50 (pruned)82.8%
AWQ-scaled BF16 (evaluated)72.7%

MATH500 L5

15% worse

REAP-50 (pruned)58.2%
AWQ-scaled BF16 (evaluated)49.3%
Task-level operational profile — data table
TaskREAP-50 (pruned)AWQ-scaled BF16 (evaluated)
MATH500 L190.7%90.7%
MATH500 L284.4%84.4%
MATH500 L381.9%81.9%
MATH500 L482.8%72.7%
MATH500 L558.2%49.3%
MATH500 difficultyREAP-50 (pruned)AWQ-scaled BF16 (evaluated)Delta
L190.7%90.7%0.0 pts
L284.4%84.4%0.0 pts
L381.9%81.9%0.0 pts
L482.8%72.7%−10.1 pts
L558.2%49.3%−8.9 pts

Recorded run summary, controlled for pruning (both rows share the 16-expert backbone). The final column is the AWQ-scaled BF16 evaluation derivative.

BFCLv3 capability breakdown

BFCLv3 splits function-calling behavior into several capability slices. The pruned-only and AWQ-scaled BF16 rows are recorded against the same upstream base. The irrelevance slice is the one case where the AWQ-stage evaluation improves on the pruned-only number — likely noise rather than a real signal, given this is a single recorded run.

BFCL capabilityREAP-50 (pruned)AWQ-scaled BF16 (evaluated)Delta
Simple (Python)78.5%69.3%−9.3 pts
Parallel70.0%69.5%−0.5 pts
Irrelevance80.0%83.8%+3.8 pts
Live simple60.5%51.9%−8.5 pts
Live parallel31.3%12.5%−18.8 pts

Recorded run summary. Deltas are calculated from the report’s unrounded values; the irrelevance improvement is within single-run noise.

Throughput (recorded, not a controlled speedup)

The peak throughput figures below were recorded under different batch / concurrency settings and serving paths (offline generation vs. HTTP). The AWQ values use the 9.18 GB AWQ-scaled BF16 evaluation derivative, not the packed INT4 artifact. They are nota controlled A/B comparison or direct packed-INT4 speed measurement.

RunPathSettingThroughput
REAP-50 (pruned)reported-path conflictBS 256 offline† / concurrency 256 HTTP‡2,282 tok/s
AWQ-scaled BF16offline generationBS 1284,271 tok/s
AWQ-scaled BF16HTTP servingconcurrency 2564,809 tok/s
REAP-50 MATH500 evalevaluation815 s total1,280 tok/s
AWQ-scaled BF16 MATH500 evalevaluation858 s total1,281 tok/s

Recorded run summary. †benchmark-results.md calls the 2,282 tok/s run offline BS 256; ‡compression-metrics.md calls it HTTP concurrency 256. Evaluation throughput is separate from peak serving throughput.

Calibration & procedure

Stage 1 (REAP) and Stage 2 (AWQ) use independent calibration passes with different sample counts and token budgets. REAP calibration drives the expert saliency ranking; AWQ calibration drives the per-group scale search. They do not share data.

ParameterREAP (Stage 1)AWQ (Stage 2, external)
ModelLFM2.5-8B-A1BREAP-50 pruned checkpoint
Calibration examples100256
Batches / tokens40 batches / 40,808 tokens
HardwareNVIDIA L4 (23 GiB)NVIDIA L4 (23 GiB)
Expert change32 → 16 across 22 MoE layersnone (16 retained)
RecipeREAP saliency, in-place sliceW4A16_ASYM, group 128
Toolreap-cudallm-compressor (external)

Recorded run summary. AWQ is run through the external llm-compressor package; it is not a REAP feature.

Discussion & limitations

  • Pruning does most of the damage. Going from Base to REAP-50 costs 11.76 points on MATH500 and 5.72 points on BFCLv3; the AWQ-scaled BF16 evaluation derivative loses a further 5.0 and 1.71 points respectively. This recorded AWQ-stage loss is concentrated at the hard end of each benchmark (MATH L4–L5, BFCL live parallel); it is not a direct packed-INT4 runtime result.
  • Hard problems are most fragile. MATH500 L5 falls from 58.2% to 49.3% in the AWQ-stage evaluation, and BFCL live parallel from 31.3% to 12.5%. The largest recorded losses are in high-difficulty / live-serving slices; L1–L2 retain the same displayed score, while L3 needs the denominator caveat above.
  • One run, one seed. Every number is a single recorded run. The variance across calibration seeds is not reported here (raw eval logs were not committed), so the point estimates carry unknown noise. The irrelevance slice improving in the AWQ-stage evaluation is the clearest signal that this is single-run noise rather than a robust effect.
  • Base is upstream, not re-run. The Base row is the model-card / upstream published evaluation, not a controlled re-run in this pipeline. Comparisons against Base inherit whatever harness differences exist between the upstream evaluation and this run.
  • Throughput is configuration-bound. The two AWQ-scaled BF16 peak figures and the pruned peak use different batch sizes and serving paths; they are reported as separate observations, not as a controlled speedup or packed-INT4 runtime claim.

Conclusion

Chaining REAP expert pruning with external AWQ INT4 quantization takes LFM2.5-8B-A1B from 8.47B / 16.94 GB to a 1.15B packed-weight equivalent / 2.79 GB artifact — 7.4× lower by packed-weight equivalent and 6.1× smaller on disk. MATH500 72.0% and BFCLv3 single-turn 57.36% were recorded on a 9.18 GB AWQ-scaled BF16 derivative used for vLLM evaluation, not on the packed INT4 artifact. The loss is staged: pruning accounts for most of the recorded drop, with the AWQ-stage evaluation concentrated at the hardest end.

The takeaway for deployment is that the two techniques compose cleanly because they are independent — REAP shrinks the expert set,llm-compressor shrinks the surviving weights — but the quality cost is not uniform across capability slices. Teams considering this stack should measure on their own distribution, not extrapolate from this single recorded run.

REAP CUDA is open-source at github.com/egesabanci/reap-cuda, and the from-scratch AWQ implementation at github.com/egesabanci/awq.

Sources

  • REAP CUDA implementation: github.com/egesabanci/reap-cuda — Stage 1 (expert pruning, saliency calibration).
  • From-scratch AWQ implementation: github.com/egesabanci/awq — companion AWQ work; the Stage 2 run in this article used the external llm-compressor package instead.
  • External AWQ toolchain: llm-compressor, W4A16_ASYM recipe, group_size = 128, 256 calibration samples.
  • Model: Liquid LFM2.5-8B-A1B — 8.47B parameters, 32 experts/layer, 22 MoE layers. Base accuracy figures (MATH500 88.76%, BFCLv3 single-turn 64.79%) are upstream published.
  • Evaluation: MATH500 and BFCLv3 (single-turn) on the 9.18 GB AWQ-scaled BF16 derivative; the 2.79 GB packed INT4 artifact was not directly benchmarked. Raw eval logs were not committed.

Key takeaways

2.79 GB

Final on-disk size (from 16.94 GB)

72.0%

MATH500 retained (Base 88.76%)

−18.8 pts

Largest drops: BFCL live relevance / parallel

3 peak runs

Throughput observations (not a controlled speedup)

Author

Written by Konic Labs, Inc. — founders and research team. Open, reproducible research for on-prem enterprise LLMs.

More research

Optimized LFM2.5-VL-3B: FFN Width Pruned, Distillation Aligned, INT4 Quantized

We surgically compress Liquid AI’s LFM2.5-VL-3B — an architecture-searched hybrid conv+attention vision-language model — by cutting FFN width where the search never optimized it: joint-SwiGLU Wanda pruning (10752→8192 and →7168), distillation-to-baseline LoRA recovery, and hand-rolled W4A16 GPTQ + W8 mixed-precision quantization. All three tiers are near-lossless against the base on our paired eval shards — PPL ratios at or below baseline (0.79–0.85), top-5 token agreement ≥ 0.95, quantization adding only +0.02–0.06 nats — across 5.30 GB (−15%), 4.92 GB (−21%), and 1.93 GB packed / 2.22 GB (Konic Optimized) — native INT4/INT8 compressed-tensors in vLLM (−69%). Live comparison on the smallest tier preserves scenes, facts, and tool calling — 10/10 tool rounds, including correct abstention where the base over-triggered. Recorded runs, not general benchmarks.

Read article

LFM2.5 Encoder 230M + SigLIP2: A Compact Multimodal Encoder

We augment Liquid AI’s LFM2.5 Encoder 230M — a 230M-parameter bidirectional masked-language encoder — with a SigLIP2 vision tower and 32 learned soft tokens to build an encoder-only multimodal model for retrieval and image-text matching. Clean image-only retrieval on 12,500 held-out MONET pairs reaches 0.1194 image→text R@1 with the BF16 reference; the GPTQ INT4 release retains 0.1091 while shrinking the package from 923.65 MB to 370.46 MB (−59.9%). Cyclic-negative matching AUROC is 0.9733; text-nearest hard negatives and image-conditioned masked-token prediction remain at chance, and the model does not generate.

Read article

From-Scratch AWQ INT4 Quantization on Qwen3-8B

We validate a from-scratch, pure-PyTorch AWQ implementation on Qwen3-8B: group-wise INT4 with per-channel AWQ scaling produces a 4.0× smaller model (13.9 GB → 3.5 GB linear weights) at 1.034× FP16 perplexity on WikiText-2 (10.08 vs 9.75), loaded and run in a real INT4 GEMM runtime. The decisive factor is norm-folding the AWQ scale — 20× more accurate per weight than weight-dequantization.

Read article

REAP Expert Pruning for On-Device MoE Models

We present REAP-MLX, an Apple Silicon implementation of Router-weighted Expert Activation Pruning (REAP) for Mixture-of-Experts language models. We evaluate quality retention across compression ratios on the LFM2.5-8B architecture: REAP preserves 96.8% of code generation performance at 25% compression and 91.4% at 50% compression, with less than 0.4 percentage point variance across independent calibration draws.

Read article