Laguna-S-2.1-oQ2e

Calibrated 2-bit MLX quantization of poolside/Laguna-S-2.1 (118B total, 8B activated per token), produced with oMLX oQ at level 2 enhanced — 2.70 bits/weight effective, 36 GB on disk. Data-driven mixed precision: bits are allocated per tensor from an imatrix-calibrated sensitivity map, not a fixed rule. For Apple Silicon.

  • 36 GB on disk, down from 235 GB BF16
  • 48 layers, 47 of them MoE with 256 routed experts + 1 shared, top-10 (L0 is a dense MLP); interleaved attention (12 global with YaRN to 1M context, 36 sliding-window 512)
  • Peak memory in my tests: 34.4 GB at 1k context, 37.5 GB at 64k — fits a 48 GB Mac
  • Converted and tested on a Macbook Pro M5 Max 128GB 40 GPU

Requirements

mlx-lm doesn't support the laguna architecture yet — there's an open PR: mlx-lm#1223. Until it lands, use mlx-vlm (0.6.3+), which implements laguna as a text-only model:

uvx --from mlx-vlm mlx_vlm.generate --model mlx-community/Laguna-S-2.1-oQ2e --prompt "..."

oMLX serves it directly from 0.5.3 on — it vendors that PR and patches it into mlx-lm at import, so no model setting is needed. On earlier builds, discovery decides between the mlx-lm and mlx-vlm loaders by looking for a vision sub-config, and laguna has none — so it lands on mlx-lm and fails with Model type laguna not supported. Set model_type_override: "vlm" in the model's settings, then refresh discovery (omlx restart): the load failure is cached per entry until the next discovery pass, so setting the override alone won't clear it.

Quantization

oQ2e allocates bits per tensor from an importance-matrix calibration pass over calibration data. Here the split came out extreme: every non-expert tensor — attention, embeddings, lm_head, routers, 386 in total — was boosted to 8 bits, leaving the 2-bit base to the experts alone. With only 8B parameters active per token there's little margin in the dense spine, and the calibration spent its entire budget protecting it. Output is standard MLX affine quantization — no custom kernels or runtime required.

The measured sensitivity ranks L46, L24, L20 and L44 highest, and L0 lowest of the 48 by a wide margin (0.0021), which tracks with L0 being the model's only mlp_only layer.

How it was quantized

oQ at level 2 enhanced — imatrix-calibrated, group size 128. I had to patch omlx to route laguna through the mlx-vlm loader. At 235 GB the model doesn't fit in 128 GB of RAM, so calibration ran against a uniform 4-bit proxy on disk rather than the FP weights, which shifts the bit allocation slightly.

Unlike the upstream config, generation_config.json here ships repetition_penalty: 1.05: at this bit-width the model can fall into verbatim repetition loops in long-form generation, and this is the mildest setting that reliably broke them in my tests.

Conversion check

Smoke-tested after conversion with mlx_vlm.generate: coherent — solved 17 * 24 = 408, broke it down by the distributive property and verified the result a second way, no repetition loop.

Performance

Measured with oMLX's benchmark harness on a Macbook Pro M5 Max 128GB 40 GPU, single request, 128 generated tokens:

prompt gen tok/s prefill tok/s TTFT ms peak GB
1k 61.5 1146.0 894 34.42
4k 61.2 1092.7 3750 34.57
8k 59.2 985.5 8314 34.76
16k 55.7 910.7 17992 35.12
32k 50.3 860.5 38080 35.91
64k 38.8 745.8 87879 37.54

Continuous batching at 1k prompt / 128 generated:

batch tg tok/s speedup TTFT ms E2E s
1 61.5 1.00x 894 2.98
2 90.4 1.47x 1874 4.71
4 127.0 2.07x 3332 7.44
8 165.5 2.69x 5328 11.78

Benchmarks & Variants

mmlu_pro, mathqa and winogrande, n=300 seeded samples each, thinking off, identical questions across every variant. The bf16 row is the hosted API, measured the same way. Standard error at this n is around 2.5 points, so oQ4e through oQ6e aren't separated by this run.

Accuracy vs bits per weight, three benchmarks, n=300

Variant Size bpw gen tok/s (1k → 64k) mmlu_pro mathqa winogrande
Laguna-S-2.1-oQ2e-fast 35 GB 2.60 78.8 → 48.6 0.700 0.850 0.713
Laguna-S-2.1-oQ2e (this repo) 36 GB 2.70 61.5 → 38.8 0.703 0.840 0.707
Laguna-S-2.1-oQ3e 49 GB 3.59 67.5 → 40.1 0.750 0.880 0.760
Laguna-S-2.1-oQ4e 64 GB 4.60 55.9 → 39.8 0.757 0.887 0.777
Laguna-S-2.1-oQ5e 78 GB 5.30 57.5 → 38.1 0.773 0.883 0.797
Laguna-S-2.1-oQ6e 92 GB 6.27 53.0 → 32.9 0.763 0.873 0.777
Laguna S 2.1 (API, bf16) 16 0.773 0.880 0.810

Treat this as a rough sighting, not a verdict. Three benchmarks at n=300 cover a narrow slice of what the model does — no long-context work, no agentic loops, no real code — and at this sample size most of the ladder above 3.6 bpw sits inside the error bars. I ran them to size the drop between levels, not to rank the variants against each other. Test the one you're considering on your own workload before trusting any of it.

Usage

# mlx-vlm — plain mlx-lm doesn't support the laguna architecture
uvx --from mlx-vlm mlx_vlm.generate --model mlx-community/Laguna-S-2.1-oQ2e \
  --prompt "Explain Bayes' theorem in two sentences." --max-tokens 300

# oMLX — discovers the model from the HF cache; set model_type_override: "vlm" first
omlx serve

License

OpenMDW-1.1, inherited from the base model. Refer to the original model card for architecture, benchmarks, and intended use.

Downloads last month
-
Safetensors
Model size
10B params
Tensor type
BF16
·
U32
·
MLX
Hardware compatibility
Log In to add your hardware

2-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for mlx-community/Laguna-S-2.1-oQ2e

Quantized
(43)
this model

Collection including mlx-community/Laguna-S-2.1-oQ2e