The fastest and most reliable path uses the BF16 base model with the vLLM expert offload fork. The MoE experts live in CPU pinned memory with an LFRU cache on GPU.
Requirements:
GPU: 24+ GB VRAM (RTX 3090/4090 or better)
CPU RAM: 64 GB (expert weights stored in pinned memory)
CUDA: 12.0+
Python: 3.10+
bash
1# The vLLM expert offload PR #37190 is OPEN (not yet merged).2# Install the working fork until it lands in mainline:3pip install git+https://github.com/caiovicentino/vllm-expert-offload.git
python
1from vllm import LLM, SamplingParams
23llm = LLM(4 model='nvidia/Nemotron-Cascade-2-30B-A3B',5 trust_remote_code=True,6 dtype='bfloat16',7 max_model_len=4096,8 enforce_eager=True,9 moe_expert_cache_size=8,# LFRU cache of 8 hot experts per layer10 kernel_config={'moe_backend':'triton'},11 gpu_memory_utilization=0.95,12)1314out = llm.generate(['What is 2+3?'], SamplingParams(max_tokens=200))15print(out[0].outputs[0].text)
Cache size guide
Cache
Model VRAM
Speed
Target GPU
8
~7.6 GB
~16 tok/s
RTX 4090 (24 GB)
16
~11 GB
~20 tok/s
RTX 4090 (24 GB)
32
~19 GB
~25 tok/s
RTX 4090 (24 GB)
64
~34 GB
~35 tok/s
A6000 (48 GB)
📦 What this repo contains
This repo is the HLWQ Q5 quantized version of Nemotron-Cascade-2-30B-A3B:
20.6 GB total (vs ~60 GB BF16 = 2.9× smaller)
polarengine_v5 format (Mamba-aware HLWQ with per-layer codes + Lloyd-Max centroids + block norms)
Mamba SSM params (A_log, D, dt_bias, conv1d): BF16 (critical for recurrent state correctness)
Norms, router gates, embed, lm_head: BF16
Shared experts: HLWQ Q5
Per-weight compression: ~5 bits + per-block fp16 norm = ~5.125 bits/value. Cosine similarity vs BF16: >0.997 on sampled probes.
🏷️ Note on naming
HLWQ replaces the author's earlier "PolarQuant" branding to disambiguate from Han et al. 2025 (arXiv:2502.02617), a distinct KV-cache quantization method published under the same name.
Han et al. 2025: KV cache quantization via random polar rotation
The two techniques address different components (weights vs KV cache) and are unrelated.
Internally, the quant_method field in config.json remains "polarengine" — that is the wire-format string recognized by transformers and vLLM loaders. Brand is HLWQ; wire format is polarengine.
📖 Citation
bibtex
1@misc{vicentino2026hlwq,
2 title = {Hadamard-Lloyd Weight Quantization (HLWQ): Near-Lossless 5-bit PTQ for LLMs via Walsh-Hadamard Rotation and Lloyd-Max Scalar Quantization},
3 author = {Vicentino, Caio},
4 year = {2026},
5 eprint = {2603.29078},
6 archivePrefix = {arXiv},
7 note = {Formerly titled "PolarQuant"; v2 retitle pending to avoid collision with Han et al. 2025.}
8}
Related (distinct method): Han, Kacham, Karbasi, Mirrokni, Zandieh. "PolarQuant: Quantizing KV caches with polar transformation." arXiv:2502.02617, 2025.
🙏 Acknowledgements
Built on NVIDIA's Nemotron-Cascade-2-30B-A3B hybrid Mamba + MoE architecture. Thanks to the vLLM team for the expert offload review (PR #37190 in progress) and to Elnur Abdullaev (e1n00r) for driving the upstream implementation.