Glyd
v0.32.1Gemma 4 12B and 31B, lossless

Lossless AI compression: 33% less GPU memory, bit for bit.

Glyd stores the weights of open models like Qwen3.5, Gemma 4, Nemotron 3 and GLM-5 in about 11 bits instead of 16 and rebuilds the exact values on the GPU. Every weight comes back exactly, so you run the same model on less hardware.

Glyd stores the weights of open models in about 11 bits instead of 16 and rebuilds the exact values on the GPU. The same model on less hardware.

Qwen3.5-9B in GPU memory17.7 GiBAs the GPU uses them5.0 GiB savedevery bit as it wasbf16: every weight takes 16 bits
Qwen3.5-9B on an RTX 4090 (24 GB)The weights as vLLM 0.30.0 gives them, in GiB; the GPU holds 24.0 GiB. Run of Oct 5, 2026.
bf16
bf16, 17.66 GiB: did not start, out of memory even at a 4,096-token context
17.66 GiBDid not start: out of memory even at a 4,096-token context
Glyd
Glyd, 12.68 GiB: runs, a 189,440-token context
12.68 GiBRuns with a 189,440-token context

The black line is the GPU's 24 GB. vLLM 0.30.0, Oct 5, 2026.

32 to 33%smaller, every matrix of the nineteen models measured, from SmolLM3-3B to Llama-4-Scout-17B-16E-Instruct.smaller on every matrix measured
Bit for bitEvery weight decodes to its exact bf16 value. Perplexity within 0.06% of bf16.every weight decodes to its exact value
1.67×bf16’s KV cache tokens for Qwen3.8-27B on an H100: the memory the weights free holds more requests.bf16’s KV cache tokens log
3.4×the speed of DFloat11 at the same size, one sequence, Qwen3-8B on an RTX 4080 SUPER.DFloat11’s speed at one sequence

Measured on open models from

Will it fit on your GPU?

Pick your GPU's memory. Weights plus an 8K-token KV cache and 1.5 GB for the runtime, bf16 against Glyd.

Weights, an 8K-token KV cache and the runtime, bf16 against Glyd.

Updated Oct 5, 2026
Modelbf16, GBGlyd, GBMemory it needs, against this GPUOn one 24 GB GPU
gemma-4-12B-itest.23.916.1Fits only with Glyd
gemma-3-12b-it24.416.4Fits only with Glyd
phi-429.319.7Fits only with Glyd
DeepSeek-R1-Distill-Qwen-14B29.520.1Fits only with Glyd
Qwen3.5-9B19.313.9Fits either way
MiMo-V2.6-Distill-Qwen-9Best.18.812.7Fits either way
Qwen3-8B16.411.2Fits either way
Mistral-Small-3.2-24B-Instruct-250648.032.2Too big for one
bf16Glydthis GPUWeights measured; est.: worked out from the parameter count.All models

Measured on 2026 models

The weights as vLLM gives them, bf16 and Glyd on the same GPU. On the 24 GB RTX 4090, bf16 did not start with vLLM's default settings; Glyd runs Qwen3.5-9B there with a 189,440-token context.

The memory it frees holds more requests: on two H100s, Qwen2.5-72B has room for about 27 conversations of 4,096 tokens at once with Glyd, and about 2 in bf16 (the report). Parts of the newest models are not compressed yet: 33% on every 2026 bf16 model is the work on the roadmap.

All benchmarks
Weights, GiB
GPUbf16GlydChange, %
RTX 4090Qwen3.5-9B log17.6612.68−28
RTX 5090Qwen3.5-9B log17.6613.89−21
H100 SXMQwen3.8-27B log50.2238.77−23

Lower is smaller. vLLM 0.30.0, Glyd against vLLM's own bf16; Qwen3.8-27B text only. The measurements.

Earlier: tokens a second through generate()

v0.25.1, Sep 30, 2026: Qwen3-8B and Qwen3-32B, Glyd's default against bf16 compiled the same way. Generating a token reads every weight once, so reading a third fewer bytes saves time; at 8 sequences on an A10, and to a prompt's first token, Glyd took longer than bf16 (the known gaps).

How fast it responds
Tokens a second, Glyd against bf16, %
GPU1 sequence832
L4Qwen3-8B+27+27+22
A10Qwen3-8B+31−6+11
A100 SXM4 40 GBQwen3-8B, v0.25.1+23+5+4
A100 SXM4 40 GBQwen3-14B, v0.25.1+27+5+5
GH200Qwen3-8B, v0.25.1+6+21+20
GH200Qwen3-32B, v0.25.1+19+33+30

Higher is faster. Through generate(), Glyd's default against bf16 compiled the same way: a 128-token prompt, 256 new tokens. How fast it responds.

How it works, in three stepsHow it works

The full explanation
  1. 01

    Fewer bits

    Glyd stores each bf16 weight in about 11 bits instead of 16, so a model’s weights take about a third less GPU memory.About 11 bits a weight instead of 16: a third less GPU memory.

  2. 02

    Every value exact

    Nothing is rounded. Every weight comes back as the same 16 bits, so it is the same model, not an approximation of it.Nothing is rounded: every weight comes back as the same 16 bits.

  3. 03

    The GPU works from the compact form

    The GPU reads the compact weights and rebuilds the exact values as it works, so the model never takes its bf16 size in GPU memory.The GPU reads the compact weights and rebuilds the exact values as it works.

The full explanation

How it compares

Lossless weight compression is an active research area. Here is where Glyd sits, on numbers we measured ourselves where we could.

MethodBits a weightSame model?
Glyd2026. Source available, BUSL-1.1: the license10.9 / 12.0Yes, bit for bit
DFloat11NeurIPS 202510.9Yes, bit for bit
ZipServASPLOS 202611.4Yes, bit for bit
4-bit quantizationGGUF Q4, AWQ, GPTQ4 + scalesNo, rounded: smallest by far, and its answers change

Bits a weight measured on Qwen3-8B: the whole model for Glyd's two layouts and DFloat11, the matrices for ZipServ. On the same RTX 4080 SUPER Glyd made 3.4× DFloat11's tokens a second at one sequence, and in 10 of 16 products its kernels were the fastest of Glyd, ZipServ and cuBLAS (log).

Questions

All questions

Is this quantization?

No. Quantization rounds weights to fewer levels, which changes the model. Glyd stores the same values in fewer bits and gives every one of them back. It is closer to a zip file than to 4-bit.

Does it change the model's answers?

The weights are the model's to the bit. The matrix products round a little differently from bf16's, as any two GPU kernels do, so a close call can go either way: over the models measured, Glyd's MMLU answers are bf16's on 98.0 to 100% of the questions and perplexity stays within 0.06% of bf16's. With glyd.from_pretrained(..., exact=True) the output is bf16's, bit for bit, mixtures of experts included. On Qwen3-4B-Instruct-2507, of 1,000 MMLU answers Glyd's default changed 13, bf16 itself 16 through another attention kernel, and Qwen's FP8 release 46; exact=True none.

Which GPUs?

NVIDIA GPUs from Ampere on, tested on the RTX 4090, RTX 5090, H100 SXM, H100 PCIe, A100, A10, A10G, RTX PRO 6000 and RTX 4080 SUPER. Glyd picks the layout for each GPU. Not measured yet: the B200.

How do I install it?

One command, on Linux with an NVIDIA GPU of the Ampere generation or newer and its driver, 580 or newer: curl -LsSf https://getglyd.com/install.sh | sh, then glyd run Qwen/Qwen3.5-9B downloads the model, packs it as it loads and opens a chat in the terminal and at localhost:8000. On a Mac, or with no NVIDIA GPU, the script installs the compression program and says what glyd run needs. From Python, pip install "glyd[gpu]" (Linux, x86_64 or aarch64; its glyd-gpu wheel carries the GPU kernels, compiled) and glyd.from_pretrained("Qwen/Qwen3.5-9B") load a bf16 model, a mixture of experts too, with its weights packed on the GPU as they arrive. Engines in C, C++ or Rust take the library and its C header from that wheel. The codec alone installs with pip install glyd, Homebrew or cargo. The current release is v0.32.1, of Oct 17, 2026.

Try it on your model

One command installs Glyd with vLLM, and glyd run downloads a model, packs its weights as they load and opens a chat in the terminal and at localhost:8000. It needs Linux, an NVIDIA GPU of the Ampere generation or newer, and its driver, 580 or newer. On a Mac, or with no NVIDIA GPU, the script installs the compression program and says what glyd run needs (getting started).

In Python, pip install "glyd[gpu]" loads any model released in bf16 with its weights packed on the GPU, every one bit for bit. Engines in C, C++ or Rust call the same kernels through the CUDA library.

One command, on Linux with an NVIDIA GPU

curl -LsSf https://getglyd.com/install.sh | sh
glyd run Qwen/Qwen3.5-9B

Or in Python

pip install "glyd[gpu]"

import glyd
model = glyd.from_pretrained("Qwen/Qwen3.5-9B")