Run Poolside Laguna S 2.1 (118B MoE) on a single RTX 5090 Poolside's Laguna S 2.1, a 118B MoE coding model, runs on a single RTX 5090 (32 GB) at ~19 tok/s decode and ~60 tok/s prefill using auto-fit layer placement. A developer achieved this by packing full layers into VRAM with the `-ngl auto` and `--fit` flags, avoiding the slower CPU-only expert mode. The setup requires ~30 GB VRAM and 256k context, with a measured 40–45× speedup in prefill and 1.5–2× in decode over the default CPU placement. ~19 tok/s decode · ~60 tok/s prefill · ~30 GB VRAM · 256k context Poolside’s Laguna S 2.1 https://huggingface.co/poolside/Laguna-S-2.1 is a 118B total / ~8B active MoE coding model 256 experts, top-10 + shared, hybrid SWA . Official GGUFs: poolside/Laguna-S-2.1-GGUF https://huggingface.co/poolside/Laguna-S-2.1-GGUF . People have been showing hybrid llama.cpp runs on 24 GB cards. That works — but the default “all experts on CPU” placement leaves a lot on the table. On a 5090 32 GB the win is packing full layers experts included into VRAM with auto-fit, not pure --cpu-moe . This is a measured recipe from one box, not marketing. | GPU | NVIDIA GeForce RTX 5090 32 GB, SM 120 / Blackwell | | RAM | 62 GB system + 128 GB swap | | OS | Ubuntu, CUDA 13.1 | | Model | laguna-s-2.1-Q4 K M.gguf ~75 GB on disk | | Runtime | Poolside llama.cpp branch laguna | You need ~50–64+ GB system RAM more is happier . The GGUF alone is ~75 GB; whatever doesn’t fit in VRAM stays on the host. llama-server -m laguna-s-2.1-Q4 K M.gguf \ -c 262144 -ngl 999 --cpu-moe \ -fa on --no-mmap -t $ nproc -b 4096 -ub 4096 \ -ctk q8 0 -ctv q8 0 Attention/non-expert on GPU, every expert on CPU . Fits easily ~18 GB VRAM but decode/prefill are host-bound. llama-server -m laguna-s-2.1-Q4 K M.gguf \ -c 262144 \ -ngl auto --fit on --fit-target 2048 \ -fa on --jinja --no-mmap \ -t $ nproc -b 4096 -ub 4096 \ -ctk q8 0 -ctv q8 0 \ --temp 0.7 --top-p 0.95 --top-k 20 \ --host 0.0.0.0 --port 8095 Do not set -ngl 999 / all without --cpu-moe . That tries to put the entire 75 GB on the GPU and OOMs . -ngl auto + --fit fills free VRAM with as many full layers including experts as will fit and leaves the rest on host. --fit-target 2048 leaves ~2 GB free display / driver headroom on a desktop . Short coding prompts, thinking off, temp 0.2. | Mode | VRAM | Swap peak class | Prefill cold | Decode cold | Decode warm | |---|---|---|---|---|---| --cpu-moe + -ngl 999 | ~18 GB | ~60 GB | 1.3 t/s | 8.2 t/s | 12.8 t/s | -ngl auto + --fit | ~30 GB | ~22 GB | ~58 t/s | ~19 t/s | ~18 t/s | Rough speedups on this machine: Prefill: ~40–45× Decode: ~1.5–2× → lands in a fully usable interactive range ~18–19 tok/s GPU util during decode went from single-digit % to ~15%+ — still hybrid, but no longer “CPU thrashing while the 5090 naps.” Correctness spot-checks merge sorted lists, longest palindrome, binary-search infinite-loop fix all passed. Official Laguna support is on Poolside’s fork upstream PR: ggml-org/llama.cpp 25165 https://github.com/ggml-org/llama.cpp/pull/25165 . Stock mainline may not load architecture = laguna yet. git clone --branch laguna --single-branch \ https://github.com/poolsideai/llama.cpp.git cd llama.cpp One-liner fix seen on GCC 15: std::isfinite needs