Opens in a new tab
Explainer

ninfer-ext EXL3: what the smaller file buys when generation slows

In brief

The smaller artifact saves 1.44 GiB but generates more slowly in the project’s measurements. Its value depends on whether that space makes a required request possible.

5 min read

Is this the right starting point?
Before you read
Experience building and operating local CUDA model servers and testing their memory/performance tradeoffs.
What you will take away
Match ninfer artifacts to the supported runtime and compare smaller weight encoding against memory fit and accepted response latency.
Sources
Two black circuit modules with differently notched connectors lie beside an open board socket, screws and a screwdriver.
On this page3 sections

The smaller download saves 1.44 GiB, yet takes longer to produce the answer. That is the tradeoff in ninfer-ext’s published measurements of its Qwen3.8-27B EXL3 artifacts. It can still be a useful exchange if that saved space lets a request fit that otherwise would not run.

Before comparing speeds, check the destination for the file. The linked EXL3 announcement targets ninfer-ext on 64-bit Linux and an RTX 5090. Calling the format EXL3 does not make these artifacts loadable by exllamav3, vLLM or llama.cpp.

There is also a maintenance decision. The maintainer retired ninfer-ext and archived the repository on October 22, 2026, with no further development planned for now. Code, artifacts and documentation remain available. Their measurements can still explain the format tradeoff, but a new service needs a plan for fixes and maintenance.

The client interface cannot load the model for you

Imagine an operator handing the smaller download to an engine that already serves other models. It needs more than a familiar filename. Quantization stores approximations of the model’s learned numerical settings, called weights, using fewer bits, and the engine must know how to decode them. ninfer-ext, a fork of Neroued’s NInfer C++/CUDA engine, pairs its trellis-based EXL3 encoding with GPU decoding kernels. Its quantizer begins with full-precision tensors, not an imported exllamav3 checkpoint.

The model card describes the .ninfer files as specific to that loader. Shared compression terminology does not give two engines file compatibility. The repository’s Apache-2.0 license addresses code use, a separate question.

Once the right server is running, its OpenAI- and Anthropic-compatible request interfaces may save changes to the client. The request can look familiar even while the engine underneath needs these particular files, kernels and GPU. Connecting the client is not the same job as loading the model.

Check what the model needs to run
Match the model file to ninfer-ext and its supported Linux and RTX 5090 setup, account for runtime memory, then compare the same workload.
An illustrative evaluation path, without measured memory or speed results. File size contributes to running memory; the choice also depends on completing the required work.
Read diagram description

Match the .ninfer file to its ninfer-ext loader and stated Linux/RTX 5090 requirements. Include the weights, conversation cache and temporary work buffers in the memory plan. Then compare acceptable quality, required context and concurrency, and latency under the same workload. A smaller file need not finish faster.

What the saved 1.44 GiB makes possible

Consider a hypothetical documentation assistant. Most questions are short; occasionally an engineer sends a large configuration bundle. The useful comparison is whether the saved memory accommodates that bundle without making ordinary lookups unacceptably slow.

The 4.0-bits-per-weight artifact occupies 15.68 GiB; the 3.5-bpw artifact occupies 14.24 GiB. These labels describe the main weight encoding, with some components using other rates. Both include text, vision and multi-token prediction support. Tokens are the pieces of text the model processes and generates. Running memory also needs buffers and a key/value cache, which saves intermediate attention results from earlier tokens for reuse as input and output grow. File size does not include all of that.

According to the project, half-bit rates require a heavier decoding path. In its measurements, the extra decoding work outweighs the reduction in memory traffic:

Published artifactFile sizePlain decodeMTP, three draft tokens
EXL3 4.0 bpw15.68 GiB75 tokens/s137 tokens/s
EXL3 3.5 bpw14.24 GiB64 tokens/s130 tokens/s

Decode means generating the answer token by token after processing the prompt. MTP, or multi-token prediction, supplies draft tokens for speculative decoding in the table’s second speed column. The reported single-request tests use one RTX 5090, CUDA 13.3, greedy generation, 64–256 output tokens and a 1,024-token prefill chunk. Greedy generation chooses the highest-scoring next token; prefill processes the input before answer generation. These are project spot measurements, not the documentation team’s complete wait.

For a short lookup, the larger, faster artifact may fit comfortably. For a long bundle, only the smaller one may fit. The same generation penalty has a different value when the alternative is no answer.

Try the matching engine on the required work

The repository specifies RTX 5090 with sm_120a and a suitable CUDA toolkit, with CUDA 13.3 validated. Community ports or reports from other GPUs do not broaden that stated support. After the Linux build steps and matching artifact download, the documented launch is:

build/apps/ninfer-serve qwen3_8_27b_exl3_4bpw.ninfer \
  --port 8099 --spec mtp --draft-tokens 3 --fixed-draft

This command is documentation, not a test run here. Loading the artifact answers whether this file can run in that setup. The assistant still needs to answer the team’s short lookups and large bundles. Keep the engine revision, artifact and settings with the result so that comparison can be repeated.

Suppose the larger artifact answers a short question promptly but rejects a required bundle at a resource limit, while the smaller one accepts it. The saved space has made previously unavailable work possible. To attribute that difference to the artifact, hold questions, input lengths, output limits and arrival pattern steady, and record cache and speculative-decoding settings. This is an invented comparison, not a measured result. The Linux performance guide treats it as a specific bottleneck hypothesis rather than a contest for the smallest file.

Then read the bundle’s answer against known references. Merely accepting it is not enough. First-token and completed-answer latency describe different waits; accepted responses and resource-limit rejections keep every submitted request in view. Excluding the rejected bundle could make the larger artifact appear fast partly because it did less work. Retain the request population and interval, as the metrics guide explains.

If both configurations already handle every required input, the smaller file may offer little. If it turns a rejected bundle into a good answer, slower generation may be worth it. Keep short and long results separate so a change in the team’s workload can lead to a different choice.

Sources & context

Sources linked in this article. Read alongside the author’s analysis; a citation does not independently verify a publisher’s claims.

Report an error or outdated detail

Keep reading

Where to go next