By Konic Labs, Inc.
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.
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 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)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.
| Stage | Params | On-disk size | Experts / layer | What changed |
|---|---|---|---|---|
| Base | 8.47B | 16.94 GB | 32 | Upstream FP16 checkpoint |
| REAP-50 (pruned) | 4.59B | 8.57 GB | 16 | 32 → 16 experts pruned |
| REAP-50 + AWQ INT4 (packed) | 1.15B packed-weight eq. | 2.79 GB | 16 | W4A16_ASYM, group 128 |
| AWQ-scaled BF16 (evaluated) | 4.59B BF16 | 9.18 GB | 16 | Decompressed 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.
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.
| Benchmark | Base | REAP-50 (pruned) | AWQ-scaled BF16 (evaluated) |
|---|---|---|---|
| MATH500 | 88.76% | 77.0% | 72.0% |
| BFCLv3 single-turn | 64.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
MATH500
19% worse
BFCLv3 single-turn
11% worse
| Task | Base (LFM2.5-8B-A1B) | AWQ-scaled BF16 (evaluated) |
|---|---|---|
| MATH500 | 88.76% | 72% |
| BFCLv3 single-turn | 64.79% | 57.36% |
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
MATH500 L1
baseline matched
MATH500 L2
baseline matched
MATH500 L3
baseline matched
MATH500 L4
12% worse
MATH500 L5
15% worse
| Task | REAP-50 (pruned) | AWQ-scaled BF16 (evaluated) |
|---|---|---|
| MATH500 L1 | 90.7% | 90.7% |
| MATH500 L2 | 84.4% | 84.4% |
| MATH500 L3 | 81.9% | 81.9% |
| MATH500 L4 | 82.8% | 72.7% |
| MATH500 L5 | 58.2% | 49.3% |
| MATH500 difficulty | REAP-50 (pruned) | AWQ-scaled BF16 (evaluated) | Delta |
|---|---|---|---|
| L1 | 90.7% | 90.7% | 0.0 pts |
| L2 | 84.4% | 84.4% | 0.0 pts |
| L3 | 81.9% | 81.9% | 0.0 pts |
| L4 | 82.8% | 72.7% | −10.1 pts |
| L5 | 58.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 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 capability | REAP-50 (pruned) | AWQ-scaled BF16 (evaluated) | Delta |
|---|---|---|---|
| Simple (Python) | 78.5% | 69.3% | −9.3 pts |
| Parallel | 70.0% | 69.5% | −0.5 pts |
| Irrelevance | 80.0% | 83.8% | +3.8 pts |
| Live simple | 60.5% | 51.9% | −8.5 pts |
| Live parallel | 31.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.
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.
| Run | Path | Setting | Throughput |
|---|---|---|---|
| REAP-50 (pruned) | reported-path conflict | BS 256 offline† / concurrency 256 HTTP‡ | 2,282 tok/s |
| AWQ-scaled BF16 | offline generation | BS 128 | 4,271 tok/s |
| AWQ-scaled BF16 | HTTP serving | concurrency 256 | 4,809 tok/s |
| REAP-50 MATH500 eval | evaluation | 815 s total | 1,280 tok/s |
| AWQ-scaled BF16 MATH500 eval | evaluation | 858 s total | 1,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.
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.
| Parameter | REAP (Stage 1) | AWQ (Stage 2, external) |
|---|---|---|
| Model | LFM2.5-8B-A1B | REAP-50 pruned checkpoint |
| Calibration examples | 100 | 256 |
| Batches / tokens | 40 batches / 40,808 tokens | — |
| Hardware | NVIDIA L4 (23 GiB) | NVIDIA L4 (23 GiB) |
| Expert change | 32 → 16 across 22 MoE layers | none (16 retained) |
| Recipe | REAP saliency, in-place slice | W4A16_ASYM, group 128 |
| Tool | reap-cuda | llm-compressor (external) |
Recorded run summary. AWQ is run through the external llm-compressor package; it is not a REAP feature.
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.
llm-compressor package instead.llm-compressor, W4A16_ASYM recipe, group_size = 128, 256 calibration samples.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.
Related guides
Data sovereignty is the reason most regulated enterprises cannot use hosted LLM APIs: the moment proprietary data crosses a network boundary, control over it is shared. This guide explains what data sovereignty means for AI, why it is driving on-prem adoption, and how to evaluate a deployment against your sovereignty requirements.
An air-gapped LLM runs on infrastructure with no connection to the public internet — the model, the data, and the serving stack all live inside your boundary. This guide explains what air-gapped deployment actually requires, which industries need it, and the practical constraints of running a model with no external dependencies.
Deploying an LLM on your own infrastructure is a sequence of concrete decisions: pick the model, size the hardware, choose a serving runtime, quantize for your GPU, and wire in monitoring. This guide walks each step with the trade-offs that actually matter for a production on-prem deployment.
More research
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.
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.
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.
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.