Before the papers: a visual primer
The thesis makes one very large model, LTX-2.3, smaller and faster on Intel hardware without breaking its videos. The sixteen papers in this atlas each solve one piece of that. This tab gives the ideas they all take for granted: diffusion, transformers, number formats and quantization, hardware, the OpenVINO stack and quality metrics, then a map of how the papers fit together.
- Model
- LTX-2.3 · text → video + audio
- Transformer (DiT)
- 19B params ≈ 38 GB in BF16
- Text encoder
- Gemma-3 12B ≈ 24 GB in BF16
- Target hardware
- Intel CPU · Intel Arc GPU
- Tools
- Optimum Intel · OpenVINO · NNCF
- Quality check
- WWB similarity · VBench subset
Reading guide
Welcome to the atlas. The thesis asks one practical question: how can LTX-2.3, a model that turns a text prompt into a video with sound, be made smaller and faster on an Intel CPU and an Intel Arc GPU without spoiling its output? The answer will come from sixteen papers, and this first tab gives the vocabulary they all assume. It moves in order from the pipeline, to diffusion, to transformers, to number formats and quantization, to hardware, to the OpenVINO software stack, to quality metrics and other speed-ups, and ends with a map of all sixteen papers and a glossary. Every paper tab after this one follows the same pattern: a header, a short Before reading section, the big picture, the problem, the method, every equation and figure, the results, and a closing box on what it means for the thesis.
§1The thesis in one picture
A prompt goes in; a short video with its soundtrack comes out. One part, the diffusion transformer, is called again and again, so that is where memory and time go.
Guide
The whole thesis fits in this diagram. A prompt goes through the Gemma-3 text encoder once, then the dual-stream diffusion transformer, with a 14 billion parameter video stream and a 5 billion parameter audio stream, refines noise for many steps, sometimes three calls per step. The decoders run once at the end. Read the cost strip at the bottom: the indigo box is both the largest and the most repeated part, so that is what gets compressed first.
Guide
Memory is simply parameters times bytes per parameter. The teal bars are 16-bit weights, the pale rust bars 8-bit, the solid rust bars 4-bit. The transformer drops from 38 gigabytes to about 10, and Gemma from 24 to about 6. Smaller weights also mean fewer bytes to move at every step, which is where the speed comes from on memory-limited hardware. The thesis results table will pair each of these settings with latency and quality.
§2How diffusion makes a video
Diffusion starts from pure noise and removes a little of it at every step. The model never paints the video in one go.
Guide
Diffusion builds a video by removing noise a little at a time. Read left to right: pure noise at timestep one, a clean latent at timestep zero, and every indigo arrow is one full call of the transformer. The gold axis is the timestep, the noise level. Because the same network sees very noisy inputs early and nearly clean ones late, its activations change over time, which is why the diffusion quantization papers keep talking about timesteps.
Guide
The transformer never touches pixels. A variational autoencoder, or VAE, compresses video into a small latent, and diffusion runs only there. In LTX-Video, one latent token of 128 numbers stands for a block of 32 by 32 pixels over 8 frames, about 192 times fewer values. The dashed encoder is only needed for training or image input; for text to video only the decoder runs at the end.
Guide
Classifier-free guidance, or CFG, is why one step can cost several transformer calls. The model runs once with the prompt and once with an empty prompt, and the mix pushes the result away from the prompt-free answer so the video follows the text. LTX-2 adds a third, dashed pass for guidance between audio and video. When measuring time per step, count how many passes the pipeline settings actually run.
Classifier-free guidance: \(v_\theta\) is the transformer's prediction, \(x_t\) the noisy latent, \(c\) the prompt, \(\emptyset\) an empty prompt, \(s\) the guidance scale. Two calls per step (three with LTX-2's extra modality term).
Guide
This is the guidance rule in one line. v hat is the final prediction used for the step. v theta of x t and empty is the model's answer without the prompt, v theta of x t and c is the answer with the prompt c, and s is the guidance scale. The bracket is the difference the prompt makes, stretched by s. Both terms need their own transformer call, which is the cost shown in the figure above.
§3Transformers in 5 minutes
A transformer is mostly two operations repeated many times: linear layers (matrix multiplies) and attention.
Guide
Almost every weight in LTX-2.3 lives in a linear layer, and a linear layer is one matrix multiply, called a GEMM. X holds the activations, one row per token; W holds the weights; Y is the output. The teal W is fixed and stored on disk, while X changes with every prompt and step. Weight-only compression, which NNCF does, shrinks W and leaves X in 16-bit.
Guide
Attention compares every token with every other token. Queries times transposed keys give an N by N score table, which is then turned into weights with a softmax and applied to the values. The side notes make the point: one thousand tokens give one million scores, six thousand give thirty-six million, per head and per layer. Attention has no weights, so weight quantization does not make it cheaper.
Per layer, for \(N\) tokens and width \(d\): attention (\(QK^\top\) plus scores times \(V\)) grows with \(N^2\); a linear layer grows only with \(N\). For long videos attention takes a growing share of each step.
Guide
Two rough cost formulas, per layer. Attention needs about four times N squared times d operations, where N is the number of tokens and d the model width. A linear layer needs about two times N times d in times d out. The key difference is N squared versus N: longer or higher-resolution videos make attention grow much faster than the linear layers, which is where FlashAttention-style kernels matter.
Guide
This is one block of a diffusion transformer, and the model stacks many of them. Tokens pass self-attention, cross-attention to the text, and a feed-forward network, each with a residual shortcut. The gold path shows AdaLN: a small network turns the timestep into scale, shift and gate values that modulate each block. In LTX-2 the dashed input adds cross-attention between the audio and video streams. Nearly every box is made of linear layers.
§4Numbers and quantization from zero
Quantization stores numbers with fewer bits. Fewer bits mean less memory and less data to move, at the cost of rounding error.
Guide
Each row is one number format, drawn to scale, one cell per bit. Floating-point formats split bits into sign, exponent for range, and mantissa for detail; BF16 keeps FP32's range with less detail, FP16 the reverse. INT8 and INT4, in rust, are plain evenly spaced levels, 256 or 16 of them, so they need a separate scale to mean a real value. Bytes per parameter on the right drive the memory table below.
| Precision | Bits | Bytes / param | DiT 19B | Gemma-3 12B | Where it appears |
|---|---|---|---|---|---|
| FP32 | 32 | 4 | 76 GB | 48 GB | training, reference math |
| BF16 / FP16 | 16 | 2 | 38 GB | 24 GB | released model, PyTorch reference |
| INT8 | 8 | 1 | 19 GB | 12 GB | NNCF INT8 weights; W8A8 |
| INT4 (group 128) | 4 | ≈ 0.52 | ≈ 9.8 GB | ≈ 6.2 GB | NNCF INT4 weight compression |
Guide
This table turns bit-widths into gigabytes for the two big components of LTX-2.3. Read across a row: bits, bytes per parameter, then memory for the 19 billion parameter transformer and the 12 billion parameter Gemma encoder. The highlighted INT4 row includes a small overhead for one 16-bit scale per group of 128 weights, giving about 9.8 gigabytes for the transformer. These are weight sizes only; activations and runtime buffers come on top.
The first estimate for every row of the table; scales, activations and runtime buffers come on top.
Guide
The first estimate to always make. Memory is about the number of parameters times the bytes per parameter. For the transformer at 4 bits, 19 billion times half a byte gives about 9.5 gigabytes. Scales, activations and buffers add to this, so use it as a lower bound and compare it with the IR size on disk and the measured peak memory.
Scale \(s\) is the real-valued size of one integer step; zero-point \(z\) is the integer that stands for real 0. For INT4 asymmetric, \(q_{\min}=0\), \(q_{\max}=15\). Symmetric quantization fixes \(z\) at 0.
Guide
How the grid is chosen. The scale s is the real-valued size of one integer step: the range of the data, x max minus x min, divided by the number of steps, q max minus q min. The zero-point z is the integer that stands for real zero. For asymmetric INT4, q runs from 0 to 15. Symmetric schemes fix z at zero, which is simpler but wastes levels when the data is lopsided.
Quantize: divide by the step, round to the nearest level, shift by the zero-point, and clip anything outside the grid.
Guide
Quantizing one number. Divide x by the scale s, round to the nearest integer, add the zero-point z, and clamp the result between q min and q max. Rounding causes the small, everyday error; clamping causes the large error for values outside the chosen range. Every quantization method in the atlas is, in some way, a smarter choice of s, z or the rounding.
Dequantize: the value the model actually computes with. The rounding error is at most half a step; values outside the range get the larger clipping error.
Guide
Dequantizing, which gives the value the model actually computes with. x hat equals s times q minus z. Inside the range, the error between x and x hat is at most half a step. Outside the range, clipping can make it much larger. This trade-off between step size and clipping is exactly what the worked example below shows with real numbers.
Guide
A worked example of equations four to six. The top line is real values, the rust ticks below are the sixteen INT4 levels. With a range from minus 0.6 to 0.9, the step is 0.1 and zero sits at level 6. The value 0.23 lands on level 8 and comes back as 0.2, an error of 0.03. The magenta 1.3 lies outside the range, is clipped to level 15, and returns as 0.9, an error of 0.4.
Guide
Granularity means which numbers share a scale. From left to right: one scale for the whole matrix, one per row or output channel, one per group of inputs such as 128, and for activations one per token computed at run time, in gold. Darker shades stand for different scale values. Finer sharing fits the data better but stores more scales. NNCF typically uses per-channel scales for INT8 and group-wise scales for INT4.
Guide
Two families of quantization. On the left, weight-only W four A sixteen: INT4 weights are expanded to 16-bit inside the kernel and multiplied with untouched 16-bit activations, saving memory and bandwidth. On the right, W8A8: activations are also quantized so the multiply runs in integer arithmetic, which needs matching hardware and makes activation outliers dangerous. The core track of the thesis is the left side, with W8A8 as an optional comparison.
Guide
The chart on the left shows the typical picture in large transformers: most channels have small values, and a few magenta channels are huge. The bars are illustrative. On the right, a single shared scale must stretch to cover the outlier, so ordinary values squeeze into one or two levels and lose almost all detail. The fixes listed at the bottom are the main ideas of SmoothQuant, AWQ, ViDiT-Q and SVDQuant.
Guide
Three terms that appear in every paper. Post-training quantization, or PTQ, needs only the trained model and a small calibration set, which for a diffusion model must cover many timesteps. Quantization-aware training, or QAT, retrains with rounding simulated and costs days of GPU time, like QVGen. The bottom strip shows mixed precision: most layers in INT4, a few sensitive ones in INT8 or 16-bit. The pattern is illustrative.
§5Hardware, and why speed is not just FLOPs
Chips are often waiting for data rather than doing arithmetic. Whether a layer gets faster depends on which of the two limits it.
Guide
Two kinds of chips and the memory ladder behind them. A CPU has a few strong cores with vector units and large caches; a GPU has many small cores with matrix units and its own video memory. The pyramid on the right shows the rule: the closer to the cores, the faster and smaller. LTX-2.3 is far too big for any cache, so every step must stream its weights from main memory.
Guide
The roofline explains when a speed-up is possible. The horizontal axis is how much arithmetic an operation does per byte it loads; the vertical axis is the speed it can reach. On the rising slope an operation is memory-bound, and shrinking its bytes, as INT4 weights do, moves it up. On the flat roof it is compute-bound, and only faster arithmetic helps. Measure where LTX-2.3's layers land on the target Intel hardware.
Guide
A kernel is one compiled routine for one operation. In the top row, three separate kernels each write their result to slow memory and read it back. In the bottom row, one fused kernel does all three steps and keeps the intermediate values on chip. The math is identical but the memory traffic is far lower. OpenVINO performs many of these fusions automatically when it compiles the model.
Guide
Many papers report speed from custom CUDA kernels on NVIDIA GPUs such as the A100, H100 or RTX 4090, using Tensor Cores for their low-bit format. The thesis stack on the right uses only OpenVINO's built-in kernels, CPU vector units and the XMX matrix engines of Arc. The magenta gaps are the reasons a speed-up may not carry over. Quality findings usually transfer, but every speed claim has to be measured again.
§6The software stack
The project code path: a Hugging Face model becomes an OpenVINO model, gets compressed, and is compiled for a device.
Guide
This is the actual code path of the project. The diffusers model in PyTorch is exported by Optimum Intel into OpenVINO IR, an xml graph and a bin weight file per component. NNCF then compresses the weights to INT8 or INT4, with options such as AWQ, scale estimation and GPTQ. The compressed IR is compiled for CPU or GPU and run by the OpenVINO pipeline. The gold harness compares every result with the PyTorch reference.
§7How quality is measured
Papers disagree on metrics because they measure different things. Know which question each metric answers.
Guide
Metrics answer different questions. The teal box holds paired metrics that compare with the full-precision output for the same prompt and seed, including the WWB similarity used in this project. The white box holds unpaired metrics that judge realism, text match or video dimensions, like FID, CLIP score and VBench. The lower boxes cover language models, audio and human judgement. The paper names show who uses what, so numbers can be compared correctly.
§8Speeding up without fewer bits
Quantization makes each step cheaper. The other levers cut the number of steps or the work inside a step, and they stack.
Guide
Each row is a timeline of denoising steps, and shorter means faster. Quantization shortens every step. Step caching reuses results when the gold signal says little has changed, which is what TeaCache does. Distillation cuts the number of steps but needs training, so it is outside the scope of the thesis. The last row shows that quantization and caching combine, with gains multiplying and errors adding up. The bar lengths are illustrative.
§9Map of the 16 papers
Five groups, left to right: what gets compressed, the LLM tools, their diffusion versions, other speed-ups, and how to judge the result.
Guide
This map groups the sixteen papers into five columns. Indigo boxes are the ones the thesis uses directly: LTX-2 as the target, GPTQ and AWQ inside NNCF, ViDiT-Q's sensitivity method, and VBench. Dashed indigo boxes, SmoothQuant and TeaCache, are optional tracks. Arrows show which ideas are reused, for example SmoothQuant scaling in PTQ4DiT, ViDiT-Q and SVDQuant, and SVDQuant plus GPTQ in the Wan 2.2 paper.
Suggested reading order. First pass: LTX-2 → GPTQ → AWQ → ViDiT-Q → VBench → TeaCache. Second pass: LTX-Video → SmoothQuant → Q-Diffusion → PTQ4DiT → SVDQuant-GPTQ for Wan2.2. Background as needed: SVDQuant, DVD-Quant, QVGen, FlashAttention-2, DeepCache.
How to use this atlas
- Start here. Read this tab once, or press Play introduction for the narrated tour.
- Open a paper tab from the sidebar and press Play intro: a two-minute "Before reading" on what that paper assumes.
- Press Play guided tour for the paper's story in about five minutes, with the page scrolling to each key figure.
- Open the Guide under any figure, equation or table for a short spoken-style explanation, or use Open all guides.
- End with the thesis box at the bottom of each tab: what to do with the paper in OpenVINO and NNCF.
Guide
This list is the routine for every paper. Start with this tab, then open a paper and press Play intro for a two-minute primer on what that paper assumes. Next press Play guided tour for the paper's story in about five minutes. Whenever a figure or equation is unclear, open its Guide note. Always finish with the thesis box, because it turns the paper into a concrete step in OpenVINO and NNCF.
§10Glossary
Glossary
- Activation
- The numbers flowing between layers for a given input; they change with every prompt and step.
- AdaLN
- Adaptive layer norm: the timestep sets a scale, shift and gate inside each DiT block.
- Attention
- The operation where every token weighs every other token using queries, keys and values.
- BF16 / FP16
- 16-bit floating-point formats; BF16 keeps FP32's range with less precision.
- Calibration data
- A small set of real inputs used to measure value ranges before quantizing.
- CFG (classifier-free guidance)
- Running the model with and without the prompt and mixing the results to follow the text better.
- Compute-bound
- Limited by how fast the chip can do arithmetic.
- Custom op
- An operation the runtime does not provide, so someone must write its kernel.
- Distillation
- Training a model to reproduce a bigger or slower one, for example with fewer steps.
- DiT
- Diffusion transformer: the denoising network, built from transformer blocks.
- Fused kernel
- One kernel doing several operations so intermediates stay on chip.
- GEMM
- General matrix multiply, the core computation of every linear layer.
- Group size
- How many weights share one scale in group-wise quantization, for example 128.
- INT4 / INT8
- 4-bit and 8-bit integers: 16 or 256 levels, used with a scale.
- IR (OpenVINO)
- Intermediate representation: the .xml graph plus .bin weights that OpenVINO compiles.
- Kernel
- A compiled routine that runs one operation on a CPU or GPU.
- Latent
- The compressed representation produced by a VAE, where diffusion happens.
- Memory-bound
- Limited by how fast data can be moved from memory, not by arithmetic.
- Mixed precision
- Different bit-widths for different layers, keeping sensitive layers higher.
- NNCF
- Neural Network Compression Framework: Intel's library for quantizing and compressing OpenVINO models.
- Optimum Intel
- The Hugging Face library that exports and runs Transformers and diffusers models with OpenVINO.
- Outlier
- A value or channel far larger than the rest, which stretches a shared scale.
- Per-channel / per-group / per-token
- Which numbers share one scale: a row, a block of a row, or one token's activations.
- PTQ
- Post-training quantization: quantize a finished model without retraining.
- QAT
- Quantization-aware training: retrain with simulated rounding so the model adapts.
- Roofline
- A plot showing whether an operation is capped by memory bandwidth or by compute.
- Salient channel
- A channel whose errors hurt the output most, often found from activation size.
- Scale and zero-point
- The step size and integer offset that map integers back to real values.
- Step caching
- Reusing a previous step's result when the model output barely changes.
- Tensor Core
- NVIDIA's matrix-multiply units for low-precision math.
- Timestep
- The noise level of the current denoising step.
- Token
- One unit the transformer processes: a word piece for text, or a patch of latent video.
- VAE
- Variational autoencoder: compresses pixels or sound into latents and decodes them back.
- VBench
- A benchmark that scores generated videos on 16 separate dimensions.
- Vocoder
- The network that turns a decoded spectrogram into an audio waveform.
- W4A16, W8A8…
- Bits of weights (W) and activations (A); W4A16 is 4-bit weights, 16-bit activations.
- Weight-only quantization
- Only the weights are stored in low bits; math still runs in 16-bit.
- WWB
- Who What Benchmark: an OpenVINO GenAI tool that scores how similar optimized outputs are to reference outputs.
- XMX
- Xe Matrix Extensions: the matrix engines in Intel Arc GPUs.
Guide
Keep this glossary open while reading. It lists the terms that appear across many papers, in alphabetical order, each with a one-line definition in plain words. When a paper tab uses an unfamiliar word, such as salient channel, roofline or AdaLN, come back here first. Each paper also has its own short glossary in its Before reading section for terms specific to that paper.
LTX-Video: Realtime Video Latent Diffusion
LTX-Video is the ancestor of LTX-2.3. Its video autoencoder squeezes every 32×32×8 block of pixels into a single 128-channel latent “token” (1:192 compression). That leaves the diffusion transformer (DiT) with very few tokens, so it can run full 3-D attention fast. The VAE decoder also does the final denoising step, so fine detail comes back without a separate upsampler.
- VAE compression
- 1:192
- Pixels per token
- 32×32×8 = 8192
- Latent channels
- 128 (no patchifier)
- DiT
- 1.9B · 28 blocks · d=2048
- Speed (H100)
- 121 fr 768×512 in 2 s
- Human win rate
- 85% T2V · 91% I2V
Reading guide
LTX-Video asks how to make a video diffusion model fast enough to generate faster than real time without losing quality. Its answer is to compress the video so hard in the autoencoder that the transformer only has a few thousand tokens to attend over, and to let the decoder finish the last denoising step. The result is a 1.9 billion parameter model that makes five seconds of video in about two seconds on an H100, and wins most human comparisons. The tab opens with the big picture, then three problems, the method steps, every equation, every figure, the results tables, and finally a thesis box. This is the first of sixteen papers and the first of the two target-model papers, followed by LTX-2. It describes the ancestor architecture of LTX-2.3, so it explains what the thesis will be compressing before the quantization and caching papers explain how.
§0Before reading
This paper builds on three ideas: a video autoencoder (VAE) squeezes pixels into a small grid of “latent” tokens, a diffusion transformer (DiT) removes noise from that grid step by step, and attention cost grows with the square of the number of tokens. LTX-Video is here because it is the direct ancestor of LTX-2.3: the VAE, DiT and denoising decoder that the thesis compresses are all introduced in this paper.
Guide
Before any diffusion happens, the video is compressed. The stacked frames on the left are pixels, the VAE encoder in the middle squeezes them, and the grid on the right is the latent, where each cell is one token. The highlighted block of 32 by 32 pixels over 8 frames becomes a single token of 128 numbers. The transformer only ever works on this small grid, and the decoder turns it back into pixels at the end.
Guide
Fewer tokens pay off twice, because attention compares every token with every other token. Each square's area is the number of token pairs. A typical video model makes about forty seven thousand tokens for a five second clip, LTX-Video about six thousand. That is 7.75 times fewer tokens, and since the cost grows with the square, roughly sixty times less attention work. This is the main source of the paper's speed.
Guide
Diffusion generates by cleaning noise in small steps. Read left to right: pure noise, then ever cleaner latents, each arrow one full pass through the diffusion transformer, while the gold timestep falls from one towards zero. LTX-Video's twist is the indigo box: the decoder takes the almost clean latent at a noise level of 0.05 and finishes the job while turning it into pixels. The repeated transformer passes are where the thesis saves time and where quantization error builds up.
Guide
LTX-Video is the first paper tab of the atlas, right after the Start here tab. It introduces the skeleton that LTX-2.3 still uses: a compressing VAE, a diffusion transformer and a denoising decoder. The next tab, LTX-2, adds sound to that skeleton. After that come the quantization papers, then caching and attention speed-ups, and finally VBench, all about making this kind of model cheaper without spoiling the videos.
Terms used in this paper
- Diffusion model
- A generator that starts from random noise and removes it step by step until a clean image or video remains.
- VAE (video autoencoder)
- A network pair: the encoder compresses pixels into a small latent, the decoder turns a latent back into pixels. LTX-Video compresses by 1:192.
- Latent / token
- The latent is the compressed grid; each cell of that grid is one token, a vector of 128 numbers that the transformer processes.
- Patchify
- Grouping neighbouring cells into one token to reduce the token count. LTX-Video does all of this inside the VAE, so its transformer patch size is 1.
- DiT (diffusion transformer)
- The transformer that does the denoising. In LTX-Video it has 28 blocks and about 1.9 billion parameters, and it is where most compute happens.
- Self- and cross-attention
- Self-attention lets every video token look at every other one; cross-attention lets video tokens look at the text tokens of the prompt.
- Timestep \( t \)
- The current noise level, from 1 (pure noise) to 0 (clean). The network is told \( t \) at every step, and in LTX-Video each token can have its own \( t \).
- Rectified flow / velocity
- A diffusion variant where the noisy latent is a straight-line blend of clean data and noise. The network predicts the velocity, the direction of that line.
- T5-XXL
- A large pretrained language model from Google used only as a text encoder: it turns the prompt into text tokens for cross-attention.
- RoPE
- Rotary positional embedding: tells attention where each token is (position in the frame and in time) by rotating its query and key vectors.
- AdaLN
- Adaptive layer normalisation: the timestep is turned into a scale and shift that modulate each transformer block.
- Nvidia H100
- A data-centre GPU with Tensor Cores and high-bandwidth memory, far more powerful than an Intel laptop CPU or Arc GPU. The paper’s “2 seconds” is measured on it.
- Win rate
- The human-study score: wins divided by wins plus losses in side-by-side comparisons, with ties left out.
Guide
These are the words the paper uses without explaining. The most important are latent and token, the diffusion transformer, the timestep, and rectified flow, because the whole method is built from them. T5, RoPE and AdaLN are parts of the transformer that appear in the architecture figure. The H100 entry is a reminder that the paper's two second speed is measured on a data centre GPU, not on Intel hardware.
§2Big picture
Guide
The whole paper in one picture: the top row is a typical video latent diffusion pipeline, the bottom row is LTX-Video. LTX moves patchifying into the VAE and hands the final denoising step to the decoder. For 121 frames at 768 by 512 that cuts the token count from about 47 thousand to about 6 thousand, 7.75 times fewer, and since attention grows with tokens squared, roughly 60 times less attention work. Every later block explains one piece of this diagram.
Two ideas carry the paper. (1) A deep VAE that compresses hard and dense (32×32×8 pixels → one 128-channel token), so the DiT has few tokens and can attend over all space and time. (2) A decoder that is itself a one-step diffusion model, so it can regenerate the fine detail that such heavy compression throws away.
§3The problem
Guide
Token count sets the cost of attention, and the bars make the gap visible. Each bar is the number of transformer tokens for the same five second clip. A standard 8 by 8 by 4 VAE with a 2 by 2 patchifier gives about 47 thousand tokens, a temporally stronger VAE about 24 thousand, and LTX only about 6 thousand. The counts are the tab's own arithmetic from Table 1. This is the first problem the method solves.
Guide
The second problem: after a finite number of diffusion steps the predicted latent still holds some leftover noise. A normal decoder was trained only on clean latents, so this residual is out of distribution and turns into visible artifacts, worse at LTX's heavy compression. Other systems fix it with large upsamplers, which cost a lot of runtime. LTX's fix is the denoising decoder that appears in the method steps and in equation u5.
Guide
The third problem is about the width of the latent. The left bars show a standard per-channel KL loss, where some of the 128 channels collapse to the prior and carry no information, drawn in grey. The right bars show LTX's fix: one shared log-variance for all channels, which spreads the KL pressure evenly. The bars are illustrative, not measured. Figure 3 later shows that the trained channels really are dense.
- Token count: usual 1:48–1:96 VAEs plus a 2×2 patchifier still leave far too many tokens for full 3-D attention at high resolution.
- Naive patchify does not remove redundancy. It only regroups latent pixels (Fig. 3). The VAE has to learn a decorrelated latent itself.
- Hard compression loses high frequencies: L2 blurs, LPIPS adds texture artifacts, and a Patch-GAN cannot tell depth-of-field blur from a fake.
§4Method
- Patchify at the VAE input, not the DiT input. A causal 3-D conv encoder maps a video of h×w×f to a latent of h/32 × w/32 × (f+7)/8 with 128 channels. The first frame gets its own latent frame. The DiT patch size is 1×1×1.
- Train the VAE with four losses: MSE, 3-D video DWT (L1 over 8 wavelet sub-bands), LPIPS, and Reconstruction-GAN. Plus uniform log-variance and per-channel learned noise injection in the decoder.
- Make the decoder a denoiser. D(zt, t) is conditioned on t through AdaNorm scale/shift and trained on noise levels t ∈ [0, 0.2], so it maps a slightly noisy latent straight to clean pixels.
- DiT = PixArt-α block with RMSNorm, QK-RMSNorm, 3-D RoPE on normalised fractional coordinates (pixels and seconds, relative to a max size, with exponentially spaced frequencies), T5-XXL text via cross-attention, and AdaLN timestep modulation.
- Per-token timestep for image-to-video: conditioning-frame tokens get a small tc, all others t = 1. No extra parameters.
- Rectified-flow training with velocity prediction. A log-normal t-sampler is shifted towards high noise as the token count grows, with the pdf clamped at the 0.5 and 99.9 percentiles. Multi-resolution batches keep a roughly constant token count (0–20% random token dropping), and images are trained jointly as 1-frame clips.
Guide
This is the recipe in order. First the VAE takes over patchifying and compresses each 32 by 32 by 8 pixel block into one 128-channel latent, trained with four reconstruction losses. Then the decoder is made a small denoiser so it can finish the last step. The transformer is a PixArt-style block with normalisation and rotary positions, and image-to-video works by giving conditioning tokens their own small timestep. Training uses rectified flow with a noise schedule shifted for many tokens.
Guide
The VAE training loop at a glance. The encoder maps the input x to a 128-channel latent with one shared log-variance, and the decoder, with noise injected at each layer, produces the reconstruction x hat. Four losses compare the two: pixel MSE, a wavelet L1 over eight sub-bands, LPIPS for perceptual similarity, and the new reconstruction GAN in rust. Together they let the VAE survive 1 to 192 compression, as Figure 16 shows.
Guide
Inference runs N minus 1 steps in latent space, then one step straight to pixels. Each DiT box is one Euler step that moves the latent along the predicted velocity, and the gold bar shows the noise level shrinking from 1 down to 0.05. The last box is the decoder, which removes the final bit of noise while decoding. The paper found t one equal to 0.05 clearly preferred over 0. For the thesis, the DiT boxes are where compute and quantization error accumulate.
The paper has no Algorithm box. The pseudo-code below is reconstructed from §2.1.1, §2.4 and §2.5.
Guide
This pseudo-code is reconstructed by the tab, not copied from the paper. The logic is simple: encode the prompt once with T5, start from pure noise, and if an image is given, place its latent in frame zero with a small timestep. Then loop the transformer, each time subtracting a velocity step from the noisy tokens only. Finally the denoising decoder turns the slightly noisy latent into pixels. The loop body is the part the thesis will quantize and possibly cache.
§5Every equation
The paper has no numbered equations. Below is all of its display and inline math in paper order (u1–u10), plus two lines (u11–u12) that spell out the compression arithmetic behind Table 1.
Rectified-flow forward noising (§2.1.1, §2.5.1): a straight line between the clean latent and Gaussian noise, with t ∈ [0,1].
Guide
This is how noise is added in rectified flow. z sub t i is the noisy latent at noise level t i, z zero is the clean latent, and epsilon is Gaussian noise. The noisy latent is simply a straight-line blend: one minus t times the clean latent plus t times the noise. At t equal to 0 it is clean, at t equal to 1 it is pure noise. Every later equation builds on this line.
The ideal denoiser recovers the clean latent. In practice fθ predicts an intermediate quantity (the velocity) from which z0 follows in closed form (footnote 3).
Guide
The goal of the denoiser in one line. f theta is the neural network with weights theta, and given the noisy latent z sub t i and its noise level t i, it should return the clean latent z zero. In practice the network predicts a velocity, from which the clean latent follows directly, as equation u8 defines. Quantizing theta perturbs exactly this prediction.
Decreasing noise levels used when iteratively refining z0, starting from pure noise.
Guide
The sampling schedule: a decreasing list of noise levels, from t N at pure noise down to t one, the lowest level. Generation refines the latent one level at a time along this list. In LTX the transformer covers t N down to t two, and the last level t one is handled by the decoder, as equation u6 states. Fewer levels means fewer transformer passes, which is the other lever on speed.
Standard latent diffusion: the encoder compresses the sample x0 and the decoder maps the latent back to pixels.
Guide
Standard latent diffusion in two halves. The encoder, script E, compresses a video x zero into a latent z zero, and the decoder, script D, maps a latent back to pixels. Diffusion happens only on the small latent. LTX keeps this structure but changes the decoder, which is what equation u5 introduces next.
Denoising decoder: 𝒟 is trained as a diffusion model that maps noisy latents to clean pixels, with ti ∈ [0, 0.2] during training.
Guide
The key change: the decoder also takes a noise level. It receives a noisy latent, the blend of clean latent and noise from equation u1, together with t i, and must output clean pixels x zero. It is trained on noise levels from 0 to 0.2 only, so it learns to clean up small residual noise while decoding. This is the fix for the leftover-noise problem in Problem B.
Because 𝒟 changes dimensionality it cannot be iterated. It performs only the final step, from the lowest latent noise level t1 to pixels.
Guide
How the denoising decoder is used at inference. Because the decoder changes the size of the data, from latent to pixels, it cannot be applied repeatedly. So it performs exactly one step, taking the latent at the lowest noise level t one and producing the final video x zero. The paper sets t one to 0.05.
Original timestep sampling during training. LTX instead uses a shifted log-normal (SD3), clamped at the 0.5 and 99.9 percentiles (Fig. 10).
Guide
The baseline way to pick training noise levels: t drawn uniformly between 0 and 1. LTX replaces this with a shifted log-normal sampler from Stable Diffusion 3 that favours higher noise when there are more tokens, and clamps the tails at the 0.5 and 99.9 percentiles. Figure 10 draws the resulting distributions.
Velocity target (SD3). This regression task is more evenly difficult across t than noise prediction.
Guide
The training target. v is the velocity, epsilon is the noise, and z zero is the clean latent, so v equals noise minus clean latent: the direction of the straight line in equation u1. The transformer learns to predict v. This target is about equally hard at every noise level, which makes training more even than predicting noise.
Euler sampling step: move from pure noise z1 towards clean z0 along the predicted velocity.
Guide
One sampling step. The next latent, at noise level t minus delta t, equals the current latent z t minus delta t times the predicted velocity v theta. It walks back along the straight line from noise towards the clean latent. Each such step is one full transformer pass, so step count times DiT cost is the inference budget the thesis attacks.
Human-survey metric for Table 2 and Fig. 15. Skipped votes are excluded.
Guide
The human-survey metric. The win rate is the number of wins divided by wins plus losses, with skipped votes left out. So 85 percent means that in comparisons where raters expressed a preference, LTX was preferred 85 times out of 100. Table 2 and Figure 15 report this number.
Total VAE compression = (pixel values per latent cell × 3 RGB) / latent channels (Table 1; arithmetic made explicit).
Guide
Total VAE compression made explicit. Take the pixels covered by one latent cell, times three colour values, and divide by the number of latent channels. For LTX that is 32 times 32 times 8 times 3 over 128, which is 192. Typical VAEs reach 48 or 96. So LTX's latent is two to four times smaller in raw numbers, as Table 1 lists.
Pixels per transformer token: LTX has 4–8× fewer tokens for the same video.
Guide
Pixels per transformer token, which is what really sets the token count. LTX has 32 by 32 by 8, so 8192 pixels per token, because its transformer patch size is one. A typical model has an 8 by 8 by 4 VAE plus a 2 by 2 patch, so 1024 pixels per token. That is why LTX sees four to eight times fewer tokens for the same video.
§6Every figure
Guide
Sample outputs, drawn schematically since the originals are photos. The first row is text-to-video from a long prompt, and the next two rows are image-to-video, where the gold frame on the left is the given image and the teal frames are generated over five seconds. The point is prompt adherence and coherent motion. These are the qualities the compressed model must preserve.
Guide
The holistic denoising idea as a flow. Start with a pure-noise latent of size h over 32, w over 32, and f plus 7 over 8. The transformer denoises it down to noise level t two, then the decoder takes the latent at t one and outputs the clean full-size video. This is the paper's Figure 2 and the visual form of equations u5 and u6.
Guide
Training makes the 128 latent channels independent, and so dense. Panel a plots cumulative explained variance against principal component: early curves in blue rise fast, meaning a few directions hold everything, while the final curve in rust is almost a straight line, meaning all channels matter. Panels b and c show channel correlations fading from strong to near zero. For the thesis, a dense latent means little redundancy to hide quantization error.
Guide
The Video-VAE architecture. Panel a is the causal encoder: patchify, then stacks of residual blocks with three downsampling stages, giving a 128-channel latent at 32 by 32 by 8. Panel b is the denoising decoder, whose conditioned residual blocks inject the timestep by scale and shift and add learned noise. The exact patchify split is the tab's inference. The decoder is conv-heavy, which matters when deciding what to quantize.
Guide
The reconstruction GAN in two panels. In panel a, a normal discriminator sees one image and guesses real or fake. In panel b, it sees the original and its reconstruction side by side, in either order, and must say which is the original. This relative task is easier and more stable, and it also pushes reconstructions closer to the input. It is the rust loss in Method 1.
Guide
One of the 28 transformer blocks. Latent tokens pass through self-attention with rotary positions and QK normalisation, then cross-attention to T5 text tokens, then a feed-forward network, each with a residual. The timestep enters in gold through AdaLN scale and shift, and in LTX it can differ per token. These attention and feed-forward matrix multiplies are the layers NNCF weight compression will target.
Guide
Three ways to give tokens positions for rotary embeddings. Panel a uses integer indices, panel b uses fractions of the current size, and panel c, which works best, uses fractions of a fixed maximum size, measured in pixels and seconds. With c, the same place keeps the same code across resolutions, lengths and frame rates. This is part of the transformer design in the method steps.
Guide
Two heat maps of rotary frequencies, each cell being position times frequency. On the left, LTX's exponential spacing covers a useful range of rotation speeds. On the right, the common inverse-exponential spacing leaves most channels barely rotating. The colours are redrawn, not exact. Figure 17 shows the payoff in training loss.
Guide
How image-to-video works without extra parameters. The input frame is encoded into one latent frame and placed before the noise tokens. Its tokens get a small timestep t c, often zero, meaning clean, while all other tokens get t equal to 1. Each token keeps its 3-D position. This per-token timestep is why activation ranges vary across tokens in the same step.
Guide
Training noise levels shift toward high noise as token count grows. Each panel plots the probability of sampling each t: the left for about 256 tokens, the right for about 4096. The shifted curve peaks at higher t, and the teal stretched version that LTX uses is clamped so very low and very high t are still sampled. The shapes are simulated, not copied from the paper.
Guide
The data pipeline, read left to right and then back. Raw shots are cropped, static clips are removed by a motion check, a CLIP embedding and an aesthetic score are computed, then clips are clustered, de-duplicated, filtered and resized into the final training set. It explains where quality comes from, but it is not relevant to compression.
Guide
Examples of the internal captioner. Each row is a video, here generated by Sora, with the long structured caption it received: subject, action, setting, camera motion and lighting, ending with the style. The whole training set was re-captioned this way. It explains why LTX works best with long, detailed prompts, which is worth copying in the evaluation prompts.
Guide
A word cloud of the training captions, with word size roughly showing frequency. Colours, people, camera and background terms dominate, along with the phrase real-life footage. The sizes are approximate. It shows what kind of prompts the model has seen most, which helps in picking realistic test prompts.
Guide
Two histograms of the training data. Panel a shows words per caption, peaking around 75 to 85 words with a long tail. Panel b shows clip length, mostly under five seconds with a tail to thirty. The bar heights are read off the original plot. Together they say the model is trained on long captions and short clips.
Guide
Pairwise human preference matrices, text-to-video in panel a and image-to-video in panel b. Each cell is how often the row model beat the column model, and darker is higher. The bottom row, LTX, wins between 72 and 96 percent of its matchups. This is the detailed version of Table 2, and the baseline the compressed model's quality should be compared against.
Guide
A hard reconstruction case, drawn schematically: a lighthouse covered in scaffolding, full of thin high-frequency lines. With a standard GAN loss the scaffold smears into artifacts, while with the reconstruction GAN it stays close to the input. This is the evidence for the rust loss in Method 1, and a reminder that fine detail is fragile at 1 to 192 compression.
Guide
Training loss against step for two otherwise identical runs. The rust curve uses inverse-exponential rotary frequencies and stays above the indigo exponential curve for all 140 thousand steps, ending around 0.59 versus 0.58. The gap is small but consistent. It justifies the frequency choice shown in Figure 8.
Guide
More text-to-video samples, drawn as a schematic grid. Each row is one prompt, and the frames are evenly spaced over five seconds. In the paper, the prompt words the video realises are coloured green, and most of each prompt is green. The takeaway is prompt adherence on detailed cinematic prompts.
Guide
More image-to-video samples, drawn schematically. The gold frame on the left of each row is the input, and the teal frames are generated. The model keeps the identity and style of the input while adding motion such as turning, walking or camera drift. Identity drift over time is a good thing to check after quantization.
§7Results
| MovieGen | HunyuanVideo | PyramidFlow | CogVideoX | LTX-Video | |
|---|---|---|---|---|---|
| Base model size | 30B | 13B | 2B | 2B / 5B | 1.9B |
| Transformer hidden dim | 6144 | 3072 | 1536 | 1920 / 3072 | 2048 |
| FFN dim factor | 2/3 × 4 | 4 | 4 | 4 | 4 |
| VAE spatio-temporal compression | 8×8×8 | 8×8×4 | 8×8×8 | 8×8×4 | 32×32×8 |
| VAE output channels | 16 | 16 | 16 | 16 | 128 |
| VAE total compression | 1:96 | 1:48 | 1:96 | 1:48 | 1:192 |
| Transformer input patchifier | 2×2×1 | 2×2×1 | 2×2×1 | 2×2×1 | 1×1×1 |
| Tokens to pixels ratio | 1:2048 | 1:1024 | 1:2048 | 1:1024 | 1:8192 |
| Transformer blocks | 48 | 60 | 24 | 30 / 42 | 28 |
| Attention blocks | Self + Cross | Self-only | Self-only | Self-only | Self + Cross |
| Upsampling model | 7B params | N/A | N/A | N/A | N/A |
Guide
Model specifications side by side, with LTX in the last column. Read down the LTX column: the smallest model at 1.9 billion parameters, but the strongest VAE at 32 by 32 by 8 with 128 channels, a patch size of one, and 8192 pixels per token, four to eight times more than the others. Only MovieGen needs a separate 7 billion parameter upsampler. The table backs the claims in equations u11 and u12.
| Open-Sora Plan | CogVideoX 2B | PyramidFlow | LTX-Video (ours) | |
|---|---|---|---|---|
| Text-to-video | 20% | 38% | 51% | 85% |
| Image-to-video | 20% | 47% | 35% | 91% |
Guide
The headline result: human preference in pairwise tests over 1,000 prompts per task and 20 raters. LTX wins 85 percent for text-to-video and 91 percent for image-to-video, far above Open-Sora Plan, CogVideoX 2B and PyramidFlow. All models ran at the same resolution, length and 40 steps. So speed did not cost quality.
Guide
Table 2 as a bar chart: win rate by model, solid bars for text-to-video and outlined bars for image-to-video. LTX's bars, at 85 and 91 percent, clearly tower over the others. It is also the fastest model in the comparison, at about two seconds for 121 frames and 20 steps on an H100.
Guide
Table 1 as a bar chart of pixels per transformer token, with VAE compression in the labels. HunyuanVideo and CogVideoX sit at 1024, MovieGen and PyramidFlow at 2048, and LTX at 8192. The latent is also two to four times more compressed in raw size, because its 128 channels are dense. This is the root of LTX's speed.
Denoising-decoder study (§4.4, no numbers given): in an internal user study, decoding with t = 0.05 (the decoder denoises) was “strongly preferred” over t = 0.0 (no denoising), especially for high-motion videos. rGAN (§4.3.1) and RoPE spacing (§4.3.2) ablations are Figs. 16–17.
§8Why it matters for this thesis
LTX-Video → LTX-2.3 on OpenVINO / NNCF
- The dense latent leaves no slack for error. Fig. 3 shows all 128 channels carry decorrelated information, and each token stands for 8192 pixels. A small error in the DiT’s velocity output (for example INT4 weight noise) is not averaged away by redundant channels; the decoder spreads it over a whole 32×32×8 block. Expect it to show up as blocky or temporal artifacts, and measure quality per frame and over time (FVD/VBench-type metrics), not just a single-image PSNR.
- Compute sits in the DiT’s linear layers. 28 blocks at d=2048 with self-attn, cross-attn and a 4× FFN: these are the MatMuls that NNCF
compress_weights(INT8/INT4 weight-only, data-free or AWQ/GPTQ-style with calibration) targets. Few tokens (about 6k for a 5-s 768×512 clip) means inference is closer to weight-bandwidth-bound on CPU/Arc, which is where weight-only compression pays off most. - Activation ranges depend on the timestep. AdaLN scale/shift (and in LTX a per-token t) change activation ranges from step to step. Any activation quantization (W8A8) or calibration set must sample latents from all timesteps, not only t≈1. QK-RMSNorm helps by keeping attention logits bounded (fewer outliers).
- Keep the denoising VAE decoder at higher precision to start. It is a conv-heavy 3-D network (Conv3D, PixelNorm, noise injection) whose job is to rebuild high frequencies. Quantization noise here goes straight to pixels. Its last-step denoising (t≈0.05) may partly absorb small DiT errors, which is worth measuring. OpenVINO supports 3-D convolution natively; decoding 121 frames at full resolution is memory-heavy on CPU, so plan for temporal/spatial tiling.
- The text encoder is big too. T5-XXL’s encoder has more parameters than the 1.9B DiT, but it runs only once per prompt, so INT8 weight compression there is a cheap memory win. Check what LTX-2.3 actually uses and what carries over (audio branch, larger DiT): this paper describes the v0.9 design, not 2.3.
Guide
Use this box as the plan of attack. Target the DiT's linear layers with NNCF weight-only INT8 or INT4 compression first, since with only about six thousand tokens the model is close to weight-bandwidth bound on CPU and Arc. Calibrate across all timesteps, keep the denoising decoder at higher precision at first, and compress T5 cheaply. Judge quality with temporal video metrics, and confirm which of these design points still hold in LTX-2.3.
LTX-2: Efficient Joint Audio-Visual Foundation Model
LTX-2 makes a video and its soundtrack together from one text prompt. A big video transformer and a smaller audio transformer run side by side and talk to each other at every layer, so lips, footsteps and music line up in time. This is the model the thesis compresses: almost all of its weight sits in two parts, the 19B dual-stream DiT and the 12B Gemma-3 text encoder.
- Denoiser (DiT)
- 19B = 14B video + 5B audio
- Text encoder
- Gemma-3 12B (frozen)
- Speed (H100, 720p, 121 fr.)
- 1.22 s / step
- vs Wan 2.2-14B
- ≈18× faster per step
- Audio latent
- 128-d token per 1/25 s
- Output
- ≤20 s · 1080p · 24 kHz stereo
Reading guide
LTX-2 asks whether one open model can generate a video and its soundtrack together from a single text prompt, with lips, footsteps and music in sync. Its answer is an asymmetric dual-stream transformer: a 14 billion parameter video stream and a 5 billion parameter audio stream that exchange information at every layer, conditioned on a frozen Gemma-3 12B text encoder. This is the exact model family the thesis compresses, so the tab is written as a map of where the weights and the compute sit. It moves from the big-picture component map, to the problem of joint generation and memory, to the method, every equation, every figure, the results, and a closing thesis box. Among the sixteen papers it is the second target-model paper, after LTX-Video, and everything that follows, from GPTQ to TeaCache to VBench, is a tool applied to it.
§0Before reading
LTX-2 is a latent diffusion transformer: it never touches pixels or sound waves while generating, only compact latent tokens that a denoiser cleans up step by step. It builds on three ideas: latents, self- versus cross-attention, and classifier-free guidance. It is in the atlas because it is the model family of the thesis model, LTX-2.3, so this report shows where the weights and the compute are.
Guide
LTX-2 never generates pixels or sound waves directly. Read the drawing from left to right: noisy video and audio latents enter the dual-stream transformer, which removes a little noise per step while sigma, the noise level, falls from one to zero. Only at the end do the video decoder and the audio decoder with its vocoder turn the clean latents into frames and stereo sound. The transformer is the box that runs many times, so it is the main target.
Guide
Attention comes in two flavours in this paper. On the left, self-attention: tokens of one stream look at each other, with three dimensional positions for video and time only for audio. On the right, cross-attention: queries from the video stream read keys and values from the audio stream, matched only by time. LTX-2 uses cross-attention to read the text and to let the two streams exchange information in every block.
Guide
Guidance is why one denoising step can cost three transformer passes. The model runs once with full conditioning, once with the text dropped and once with the other stream dropped, then combines the three with two weights, s t for text and s m for the other modality. Video uses three and three, audio seven and three. The paper's speed table switches guidance off, so real generation is slower than those numbers suggest.
Guide
LTX-2 sits between LTX-Video and GPTQ. LTX-Video gave the family its compressed video latent and fast transformer. LTX-2 adds an audio stream, a Gemma-3 text pipeline and guidance per modality, and it is the family of LTX-2.3, the thesis model. From GPTQ onward, the remaining fourteen papers are tools for shrinking or speeding up the blocks this report describes.
Terms used in this paper
- DiT (diffusion transformer)
- A transformer used as the denoiser in a diffusion model. It works on a sequence of latent tokens instead of an image grid of pixels.
- VAE latent
- The compact code a variational autoencoder makes from video or audio. The encoder compresses, the decoder turns latents back into frames or sound.
- Denoising step, timestep \(\sigma\)
- One call of the denoiser. \(\sigma\) is the noise level: 1 means pure noise, 0 means a clean sample. Fewer steps means faster generation.
- Rectified flow / flow matching
- A training recipe where the model learns the straight-line direction (a velocity) from noise to data, so good samples need fewer steps.
- Mel spectrogram
- A picture of sound: time on one axis, frequency bands spaced like human hearing on the other, loudness as brightness.
- Vocoder (HiFi-GAN)
- A small network that turns a mel spectrogram back into an audio waveform. LTX-2 uses a HiFi-GAN style vocoder for 24 kHz stereo.
- Cross-attention
- Attention where queries come from one sequence and keys and values from another, for example video tokens reading text or audio tokens.
- RoPE
- Rotary position embedding: rotates queries and keys by an angle that depends on position, so attention knows where tokens are (3D for video, 1D time for audio).
- AdaLN
- Adaptive layer normalisation: small layers compute a scale, a shift and a gate from the timestep and apply them inside each block.
- CFG (classifier-free guidance)
- Running the model with and without a condition and extrapolating away from the unconditioned result. Stronger adherence, but extra forward passes.
- Gemma-3 12B
- An open decoder-only language model from Google. LTX-2 keeps it frozen and uses its hidden states from all layers as the text encoding.
- BF16
- A 16-bit floating-point format (2 bytes per number) with the same range as FP32 but fewer precision bits. The usual full-precision baseline here.
- NVIDIA H100
- A data-centre GPU from NVIDIA's Hopper generation, where the paper measures speed. It has far more memory and bandwidth than an Intel Arc card, so its timings will not transfer directly.
- Wan 2.2
- An open video generation model family from Alibaba. The paper compares its 14B version against LTX-2 for speed per step.
Guide
These fourteen terms cover what the report takes for granted. The most important are the diffusion transformer, the VAE latent, the timestep sigma and classifier-free guidance, because they explain where compute goes. RoPE and AdaLN appear inside every block, and AdaLN layers are small ones likely to stay in high precision. The H100 is the NVIDIA data-centre GPU used for the speed numbers, which will not transfer directly to Intel hardware.
§1Big picture: the full component map
Guide
Almost all of the model's weight sits in three boxes: the video stream at 14 billion parameters, the audio stream at 5 billion, and Gemma-3 at 12 billion, about 31 billion in total. Read the diagram left to right: the prompt goes through Gemma, a feature extractor and two connectors, then both noisy latents are denoised together for N steps, and finally decoders turn latents into sound and frames. For text-to-audio-and-video only the decoders are needed, not the VAE encoders.
The model has three parts: modality-specific causal VAEs, a text pipeline built on Gemma-3, and an asymmetric dual-stream DiT that denoises audio and video latents together. Because the DiT runs at every step, it dominates compute. Gemma-3 runs once per prompt but holds more than a third of the weights.
§2The problem
Guide
A sequential pipeline cannot fix its own first step. On the left, a text-to-video model runs first and a video-to-audio model follows, so the sound can never influence the picture and lip-sync and foley suffer. On the right, LTX-2 runs both streams together and models the joint distribution of video and audio, so information flows both ways. This is the paper's core motivation for the dual-stream design described in the Method section.
Guide
Three components hold about 31 billion parameters, and everything else is small. Each bar is one component, measured in billions of parameters; only the video stream, Gemma-3 and the audio stream have numbers from the paper, and the remaining bars are placeholders. Be careful: the conclusion says 13 billion video plus 3 billion audio, which contradicts the abstract. For the thesis, count the weights in the exported OpenVINO models and report those instead.
Guide
In sixteen bit precision the model does not fit a sixteen gigabyte Arc A770. The bars are the tab author's estimates, parameters times bytes, for BF16, INT8 and INT4, and the dashed line marks sixteen gigabytes. The DiT needs about 38 gigabytes in BF16, 19 in INT8 and 9.5 in INT4, so weight-only INT4 brings both big blocks under the line. Since Gemma runs only at the start, it can also be offloaded after the text embeddings are computed.
Guide
Latency is almost entirely repeated transformer calls. Each box counts how often a component runs per clip: Gemma, the connectors, the VAE decoder and the vocoder run once, while the DiT runs N steps times k passes, where k grows from one with guidance off to three with text and modality guidance. Refinement tiles add even more DiT calls. So speeding up the transformer, by quantization or by caching, gives the largest gain.
- Silent T2V models and sequential T2V→V2A (or A2V) pipelines cannot model the joint distribution. The paper's fix is one model with two streams.
- Symmetric twin backbones (e.g. Ovi: two 5B Wan streams) waste capacity, since audio carries less information than video. The fix is an asymmetric 14B/5B split.
- Decoder-only LLM encoders use causal attention, and their last layer alone is a weak conditioning signal. The fix is to extract features from all layers and refine them bidirectionally.
§3Method
- Encode. Video goes through a spatiotemporal causal VAE (the LTX-Video latent space). Audio is converted to stereo 16 kHz, each channel becomes a mel spectrogram, the two are stacked as 2 channels, and a causal audio VAE turns them into 1D tokens (128-d, one per ≈1/25 s).
- Text. Gemma-3 12B stays frozen. Hidden states from all L layers are mean-centred and scaled per layer, flattened to D·L and projected by W to D. W is trained once, early, with the diffusion MSE loss, then frozen.
- Connectors. Each stream gets its own connector: bidirectional transformer blocks. Learnable "thinking tokens" replace the padding positions. A caption projection then feeds the result to the DiT by cross-attention.
- Dual-stream block (×depth), run per stream: self-attention (3D RoPE for video, 1D for audio) → text cross-attention → AV cross-attention (temporal RoPE only, AdaLN on Q and on K/V, output gate driven by the other modality's timestep) → FFN. RMSNorm sits between the operations.
- Sample with modality-aware CFG (§4.1). Video uses st=3, sm=3; audio uses st=7, sm=3.
- Multi-scale, multi-tile. Generate a base latent at ≈0.5 MP, upscale it in latent space, split it into overlapping spatial and temporal tiles, refine each tile with the same model, blend in latent space, then VAE-decode.
- Decode. The video VAE decoder produces frames. The audio VAE decoder produces a stereo mel, and a HiFi-GAN vocoder (2× channels) turns it into a 24 kHz stereo waveform.
Guide
The pipeline runs in a clear order. First, video and audio are compressed into latents, audio as one 128-dimensional token per twenty-fifth of a second. Next, the frozen Gemma model turns the prompt into features that are merged across all its layers and refined by one connector per stream. Then the dual-stream blocks denoise both latents together, guided by modality-aware guidance, optionally refined tile by tile at high resolution, and finally decoded into frames and 24 kilohertz stereo sound.
Guide
The feature extractor is just one large linear layer. The diagram follows tensor shapes: Gemma's hidden states from all L layers, shaped batch by tokens by width by layers, are normalised per layer, flattened so width times L becomes one axis, and projected by W back to width D. W is trained briefly at the start and then frozen. Because it runs once per prompt, compressing it saves memory, not time.
Guide
Guidance makes every sampling step three times as expensive. For one stream, the model is run with full conditioning, with the text dropped, and with the other modality dropped; the two differences are scaled by s t and s m and combined, as in the equation in section four point one, before a single Euler step lowers the noise level sigma. This is why Table 1's timing, measured with guidance off, is a lower bound on real cost.
Guide
Peak memory depends on the tile size, not on the final 1080p output. The flow goes left to right: the full DiT first generates a base latent of about half a megapixel, a latent upscaler enlarges it, the result is cut into overlapping tiles in space and time, each tile is refined by the same DiT weights, and the tiles are blended before decoding. On a memory-limited Arc GPU this is what makes high resolution feasible.
Inference loop (atlas summary of §3 and §4, not an Algorithm box from the paper)
Guide
The whole inference loop fits in a few lines. The text is encoded once into one embedding per stream. Then, for every noise level, each stream computes three predictions, full, without text and without the other modality, mixes them with the guidance weights and takes an Euler step. After optional upscaling and tile refinement, the latents are decoded. Note that this is the tab author's summary, not an algorithm box from the paper.
Component inventory (exported parts)
| Component | Role | Params | Runs per clip | Compression priority |
|---|---|---|---|---|
| Transformer: video stream | denoise 3D video latents | 14B | N × k (+ tiles) | 1st: INT8 / INT4 weights |
| Transformer: audio stream | denoise 1D audio latents | 5B | N × k | 1st, together with video |
| Text encoder: Gemma-3 | multilingual prompt features | 12B | 1 | 2nd: INT4/INT8 (memory) |
| Feature extractor (W) | D·L → D projection | n/g | 1 | INT8 optional |
| Text connectors ×2 | bidirectional refine + thinking tokens | n/g | 1 | keep FP16 |
| Video VAE (dec.) | latent → frames | n/g | 1 (tiled) | FP16; activation-heavy |
| Audio VAE (dec.) | latent → stereo mel | n/g | 1 | keep FP16 |
| Vocoder (HiFi-GAN, 2× ch) | mel 16 kHz → wave 24 kHz | n/g | 1 | keep FP16 |
| Latent upscaler | base → high-res latent | n/g | 1 | optional |
Guide
This table is a compression plan. Each row is a component with its role, parameter count, how often it runs per clip, and a suggested precision. The two transformer streams run N times k times and hold 19 billion parameters, so they come first for INT8 or INT4 weights. Gemma runs once and is compressed second, mainly to save memory. The small parts, with counts marked not given, stay in sixteen bit because they are cheap but sensitive.
§4Every equation
The paper has no numbered equations and only one display equation, the modality-aware CFG. The other entries below are written out from the paper's prose and are marked as such.
The paper's only display equation. x is this stream's latent, t the text condition, m the other modality's features. st scales text guidance and sm scales cross-modal guidance. With st=sm=0 it reduces to one conditional pass.
Guide
The paper's only displayed equation is its guidance rule. M hat is the guided prediction for one stream, where x is that stream's noisy latent, t is the text condition and m is the other modality's features. It starts from the fully conditioned prediction, then adds s t times its difference from the text-dropped prediction and s m times its difference from the modality-dropped prediction. With both weights zero it reduces to one ordinary pass; otherwise it costs three.
Guidance weights used for all reported results. Larger sm improves sync and semantic coherence.
Guide
These are the guidance weights behind every reported result. Video uses a text weight s t of three and a cross-modal weight s m of three; audio uses a stronger text weight of seven and the same cross-modal weight of three. The paper says a larger s m improves synchronisation and semantic coherence. When benchmarking on CPU or Arc, keep these settings fixed so the quality and speed numbers are comparable to the paper's.
*Written from the three prose steps: mean-centre and scale each layer over (T, D), flatten to [B,T,D·L], project with a learned dense W to D. ‖ is concatenation. The paper does not specify the exact scaling statistic.
Guide
This equation reconstructs the feature extractor from the paper's prose; the paper gives no formula. For each Gemma layer l, the hidden state h l is centred by subtracting its mean mu l and then scaled. All L layers are concatenated side by side and multiplied by the learned matrix W, which maps width times L down to width D, giving the embedding e. The exact scaling statistic is not specified, so treat the details as approximate.
*Standard rectified-flow form. Fig. A1 only says "match their velocity fields using a flow-matching loss", applied to both the audio and video latents. The exact sign and time conventions are not given.
Guide
Training uses the standard rectified-flow objective, written here in its usual form because the paper only names it. The noisy latent z sigma is a straight-line blend of the clean latent z zero and Gaussian noise epsilon, weighted by the noise level sigma. The network v theta, given the condition c, is trained to predict the velocity, epsilon minus z zero, with a squared-error loss, separately for audio and video. Signs and time conventions may differ in the real code.
§5Every figure
In the faithful redraws below, colours follow the paper: video = blue audio = yellow text = pink.
Guide
The architecture is two parallel denoisers joined in the middle. Read it from the outside in: audio as a mel spectrogram and video each pass through their own VAE encoder and receive noise, while text passes through the encoder, feature extractor and one connector per stream. N dual-stream blocks then denoise both latents, exchanging information through audio-visual cross-attention, and each stream has its own prediction and loss. This is the training view of the component map above.
Guide
Each backbone block runs the same four operations in both streams. Top to bottom: self-attention within the stream, text cross-attention, audio-visual cross-attention in the dotted box, where the links cross between streams, and a feed-forward network. Both streams share the text hidden state and have the same depth; only their width differs, with the audio stream narrower. That asymmetry is why the audio stream costs 5 billion parameters instead of 14.
Guide
The cross-modal link aligns sound and picture in time, not in space. Queries, keys and values are projected and modulated by the stream's own timestep, then a temporal-only rotary position encoding is applied to queries and keys. Video queries attend to audio keys and values on the left, audio queries attend to video on the right, and each output is gated by the other modality's timestep. These small modulation and gate layers are precision-sensitive when quantizing.
Guide
Cross-attention maps show that the model finds the source of each sound in the frame. The schematic shows four clips at three frames each, with V2A maps on one side and A2V maps on the other, averaged over heads and layers. Attention follows the passing car, switches from the first speaker to the second to both, and locks onto the lips in the close-up. This is the paper's qualitative evidence that the bidirectional design actually synchronises the two modalities.
Guide
Text conditioning uses every Gemma layer, not just the last one. Gemma-3 12B produces a tokens-by-width activation at each of its L layers, the feature extractor merges them into one embedding, and learned thinking tokens replace the padding positions. A small bidirectional transformer connector then refines the sequence for one stream, and there is one connector per stream. For quantization this means an error in early Gemma layers still reaches the DiT.
Guide
Modality guidance pushes the prediction along two independent directions. Start at the fully conditioned output M of x, t, m; move away from the text-dropped prediction by the weight s t, then away from the modality-dropped prediction by the weight s m. The end point is the guided output M prime. Arrow lengths are illustrative. It is the geometric picture of the guidance equation in section four point one.
Guide
The training pipeline is the only place the VAE encoders are needed. Audio, as a mel spectrogram, and video are encoded into latents and noised, and the denoiser, conditioned on text, learns to match each modality's velocity field with a flow-matching loss, the objective in equation A1. For the thesis this figure mainly shows which parts can be left out of the exported inference graph.
Guide
This is the inference pipeline, the one exported to OpenVINO. Start from noise in both latent spaces, run the denoiser N times with text conditioning, then decode: the audio VAE decoder and an upsampling vocoder produce sound, and the video VAE decoder produces frames. Every box here becomes an exported model, and only the denoiser repeats, which is why it is the main compression target.
Guide
One stream of one block, in full detail; audio and video share this layout. The latent passes through RMS norm, a timestep-driven scale and shift, self-attention with rotary positions, a gate and a residual add, then text cross-attention, then audio-visual cross-attention with the other branch, then a modulated and gated feed-forward network. The timestep AdaLN feeds every scale, shift and gate, and those small layers are the usual candidates to keep in high precision.
§6Results
| Model | Modality | Params | Sec/Step |
|---|---|---|---|
| Wan 2.2-14B | Video only | 14B | 22.30 s |
| LTX-2 | Audio + Video | 19B | 1.22 s |
Guide
LTX-2 is about eighteen times faster per step than Wan 2.2, despite having more parameters. On an H100 at 720p with 121 frames, Wan 2.2 with 14 billion parameters takes 22.3 seconds per step for video only, while LTX-2 with 19 billion takes 1.22 seconds for audio and video. The paper credits its compact latent space. Note that guidance was off, so real runs with modality guidance cost up to three times more.
That is ≈18× faster with more parameters and an extra modality. The speed comes from LTX-Video's highly compressed latent space, which produces far fewer tokens. The paper says the gap grows with resolution and duration, and that LTX-2 is also faster than Ovi (two 5B Wan-2.2 streams), but gives no number for Ovi.
Guide
The eighteen times speed-up is plain when the bars are drawn to scale. The horizontal axis is seconds per diffusion step on an H100, and lower is better: Wan 2.2 reaches 22.3 seconds while LTX-2 barely leaves the axis at 1.22. This is the paper's main efficiency claim, and it gives the baseline setting, 121 frames, 720p, guidance off, to reuse when reporting CPU and Arc timings.
| Model | Type | Max length |
|---|---|---|
| LTX-2 | open, A+V | 20 s |
| Sora 2 | proprietary | 16 s |
| Veo 3 | proprietary | 12 s |
| Ovi | open | 10 s |
| Wan 2.5 | open | 10 s |
Guide
LTX-2 generates the longest continuous clips in its comparison, up to twenty seconds with synchronised stereo audio. The table lists each model, whether it is open or proprietary, and its maximum clip length: Sora 2 reaches sixteen seconds, Veo 3 twelve, and Ovi and Wan 2.5 ten each. Longer clips mean more latent tokens, which matters for memory and attention cost when running on Intel hardware.
Guide
LTX-2 leads on clip length, at twenty seconds against sixteen for Sora 2 and ten for the open alternatives. Each bar is one model's maximum continuous length in seconds. The paper's limitations section adds that beyond about twenty seconds the output drifts in time, loses synchronisation or loses scene variety, so twenty seconds is a practical ceiling, not just a record.
| Stream | st (text) | sm (cross-modal) |
|---|---|---|
| Video | 3 | 3 |
| Audio | 7 | 3 |
Guide
The guidance settings are the same for every result in the paper. Each row is a stream with its text weight and cross-modal weight: video uses three and three, audio uses seven and three. Audio leans more than twice as hard on the text prompt as video does. These values repeat equation 4.1's settings in table form, and they fix the three-pass cost per step that the thesis benchmarks should state.
| Evaluation | Result |
|---|---|
| Human preference vs Ovi (open) | LTX-2 significantly better |
| Human preference vs Veo 3, Sora 2 | comparable |
| Artificial Analysis, Image-to-Video (6 Nov 2025) | 3rd |
| Artificial Analysis, Text-to-Video (6 Nov 2025) | 4th |
| Beats in video-only ranking | Sora 2 Pro, Wan 2.2-14B |
Guide
The quality claims are rankings and preferences, not numbers. In human studies LTX-2 was significantly preferred over the open model Ovi and judged comparable to Veo 3 and Sora 2, and in the Artificial Analysis rankings of November 2025 it placed third for image-to-video and fourth for text-to-video, ahead of Sora 2 Pro and Wan 2.2. Because no numeric scores are given, the thesis needs its own metric, such as VBench, to measure quality loss after compression.
Limitations (§7): quality is uneven across languages; speaker attribution can go wrong with several speakers; drift beyond about 20 s; no explicit reasoning or world model.
§7Why it matters for this thesis
LTX-2(.3) on Intel CPU / Arc with OpenVINO + NNCF
- Compress the transformer first. The 19B dual-stream DiT runs N steps × up to 3 CFG passes, plus tile refinements, so it dominates both latency and memory (≈38 GB BF16). NNCF weight-only INT8, or INT4 (e.g.
nncf.compress_weightswith a group size and mixed INT4/INT8 ratio), runs with standard OpenVINO ops and needs no custom kernels. Data-free methods need no calibration. AWQ, scale estimation or GPTQ need a few denoising-step activations, collected across several σ values. - Compress Gemma-3 12B second. It runs only once per prompt, so compressing it frees memory (24 → ≈6 GB at INT4) more than it saves time. LLM-style INT4 weight compression is mature. Validate on the feature-extractor output, which depends on all layers, not only the last one. Errors in early layers matter here.
- Keep the small parts in FP16/BF16. VAE decoders, vocoder, connectors, the timestep/AdaLN modulation and gate linears, and the patchify and output projections have few weights but are precision-sensitive. Exclude them with an NNCF
ignored_scope, and compare Fig. A2's scale/shift/gate paths before and after. The video VAE decoder is activation-bound at 1080p, so tiling matters more than bit-width for it. - Reduce passes before shrinking bits. Modality-CFG means 3 forward passes per step (§4.1), so caching or skipping guidance passes on some steps is a cheap extra speed-up that stacks with quantization. Table 1's 1.22 s/step used CFG = 1 on an H100. Report CPU and Arc numbers under the same stated settings (frames, resolution, steps, CFG).
- Check the paper against the exports. This report describes LTX-2, not 2.3, and it contradicts itself on parameter counts (14B+5B in the abstract and §3.1, 13B+3B in the conclusion). Sum the weight constants in each exported IR (text_encoder, transformer, connectors, video/audio VAE, vocoder, and the upscaler if multi-scale is used) and publish that as the thesis parameter table.
Guide
Act on this in four steps. First, compress the 19 billion parameter transformer with NNCF weight-only INT8 or INT4, calibrating data-aware methods on activations from several noise levels. Second, compress Gemma for memory and check the feature-extractor output. Third, keep the decoders, vocoder, connectors and the AdaLN modulation layers in sixteen bit with an ignored scope, and reduce guidance passes with caching. Finally, count parameters in the actual exported models, since the paper describes LTX-2, not 2.3.
GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers
GPTQ quantizes a trained model's weights to 3–4 bits, one layer at a time, using a small calibration set. Every time a column of weights is rounded, the rounding error is pushed onto the columns that are still in full precision, weighted by second-order (Hessian) information. Three engineering tricks — one shared column order, lazy block updates and a Cholesky form of the inverse Hessian — make this fast enough for 175B-parameter models.
- Bits (weights only)
- 4 / 3 (2, ternary w/ groups)
- Largest model
- OPT-175B, BLOOM-176B
- Quantization time
- ≈4 GPU-h for 175B
- OPT-175B Wiki2 PPL
- 8.34 → 8.37 (4b)
- Calibration
- 128 × 2048 C4 tokens
- Speed-up (3b kernel)
- 3.24× A100, 4.53× A6000
Reading guide
GPTQ asks whether a huge trained language model can have its weights squeezed to three or four bits in a few GPU hours, without retraining and without losing quality. Its answer is yes: round the weights one column at a time and push each rounding error onto the columns not yet rounded, guided by second-order information from a small calibration set. The tab opens with the big picture, then the problem of plain rounding and slow exact solvers, then the method and its three speed tricks, every equation, the paper's figures, the result tables, and finally a box on what this means for the thesis. Among the sixteen papers, GPTQ is the first of three quantization foundations for large language models, followed by SmoothQuant and AWQ. The diffusion quantization papers later in the atlas, and NNCF's int4 weight compression, build directly on its error compensation idea.
§0Before reading
GPTQ builds on three ideas: what it means to store a weight in 4 or 3 bits, why a layer's inputs decide which rounding errors hurt (the Hessian), and why low-bit weights make text generation faster. GPTQ is in the atlas because its error-compensating weight quantization is the method behind NNCF's data-aware int4 compression, the tool most likely to be used on LTX-2.3.
Guide
Storing a weight in four bits means it may only take one of sixteen evenly spaced values. The green dots are the original full precision weights, and the rust arrows snap each one to its nearest level, which is plain round to nearest. The gap between levels is the scale, delta. With grouping, every block of weights, often one hundred and twenty eight, gets its own scale, which is the group size set in NNCF.
Guide
Not every rounding error hurts the layer equally, and the Hessian shows which ones do. Each grey dot is an allowed pair of quantized values for two weights. Points on the same indigo ellipse change the layer output by the same amount, and the ellipse's shape comes from the calibration inputs. The nearest point, in rust, is worse than a farther point along the long axis. GPTQ uses this by rounding one column and nudging the rest.
Guide
When a language model writes one token at a time, each weight is fetched from memory and used for a single multiply add, so the chip mostly waits for data. The bars show how many bits must be read per weight: sixteen for full precision, four or three after GPTQ. That is where the paper's speed ups come from. A video diffusion transformer reuses each weight across thousands of tokens, so for the thesis expect memory savings first.
Guide
GPTQ is the first quantization paper in the atlas. Before it, the two LTX papers describe the model the thesis compresses. GPTQ shrinks only the weights, to three or four bits, and corrects rounding errors using calibration data, while activations stay in full precision. SmoothQuant, next, tackles eight bit activations. The indigo arrow points to the thesis toolchain: NNCF's int4 weight compression has a GPTQ option, and the idea returns in the Wan two point two paper.
Terms used in this paper
- Post-training quantization (PTQ)
- Converting an already trained model to fewer bits without retraining it. GPTQ only needs a small calibration set and a few GPU hours.
- Weight-only quantization
- Only the stored weights become low-bit; activations stay FP16. The paper's "3-bit" and "4-bit" always mean weights only (W3A16, W4A16).
- Round-to-nearest (RTN)
- The baseline: snap every weight to its closest grid level independently. Simple and data-free, but it breaks down at 3 bits on large models.
- Calibration set
- A few real inputs run through the model to record layer inputs \(\mathbf{X}\). GPTQ uses 128 random text segments of 2048 tokens from C4.
- Hessian
- Here \(\mathbf{H}=2\mathbf{X}\mathbf{X}^\top\): a matrix built from the calibration inputs that says which combinations of weight errors change the layer output most.
- OBS / OBQ
- Optimal Brain Surgeon and Optimal Brain Quantizer: older second-order methods that quantize one weight at a time and correct the others. Accurate, but far too slow for billions of weights; GPTQ is their fast version.
- Cholesky decomposition
- A standard, numerically stable way to factor a symmetric positive matrix into a triangular one. GPTQ uses it to get all needed inverse-Hessian rows at once.
- Group size (g128)
- Instead of one scale per row, every block of 128 consecutive weights gets its own scale and zero point. Costs a fraction of a bit, recovers most 4-bit accuracy.
- Perplexity (PPL)
- How surprised a language model is by real text; lower is better. The paper's main quality metric, measured on WikiText2, PTB and C4.
- WikiText2, PTB, C4
- Standard text corpora: Wikipedia articles, Penn Treebank news text, and a large cleaned web crawl. Used to measure perplexity.
- LAMBADA, ARC, PIQA
- Zero-shot benchmarks: predict a story's last word, answer school science questions, and pick the sensible solution to an everyday physical task.
- OPT, BLOOM
- Two open families of GPT-style language models, up to about 175 billion parameters. GPTQ's test subjects.
- NVIDIA A100, A6000
- A100: a datacenter GPU (80 GB version used here). A6000: a cheaper 48 GB workstation GPU with lower memory bandwidth. Neither is Intel hardware; speed-ups must be measured on the target Intel devices.
Guide
These are the terms the paper uses without explaining. The most important are round to nearest, the simple baseline GPTQ beats; the Hessian, built from calibration inputs, which ranks weight errors; group size, the per block scales that recover most four bit accuracy; and perplexity, the language model quality score where lower is better. The hardware entries are NVIDIA GPUs, not Intel devices, so treat the paper's speed numbers as context, not as predictions.
§1Big picture
Guide
Rounding errors should not be thrown away but paid back. On the left, round to nearest, or RTN, rounds each weight alone, so the errors pile up and 3-bit OPT one hundred seventy-five B reaches a perplexity of about seven thousand. On the right, GPTQ rounds column j and then nudges the full-precision columns to its right, using the inverse Hessian built from calibration inputs. This one picture is the whole paper; everything later makes it accurate and fast.
Only weights are quantized; activations stay FP16. The model is stored as low-bit integers plus a scale (and zero point) per row or group, and dequantized on the fly.
§2The problem
Guide
Plain rounding is acceptable at four bits and catastrophic at three. Bars show WikiText2 perplexity for OPT one hundred seventy-five B, where lower is better. RTN at four bits costs about 2.2 points, and at three bits the model is destroyed, with the bar clipped at a perplexity of about seven thousand three hundred. GPTQ stays within 0.03 at four bits and 0.34 at three bits. This gap is the problem the method section solves.
Guide
The accurate older method, OBQ, is far too slow for billion-parameter layers. The log-scale bars count operations for one square layer twelve thousand two hundred eighty-eight wide, the width of OPT one hundred seventy-five B. OBQ scales with rows times columns cubed; GPTQ needs about twelve thousand times fewer operations. The counts are illustrative, derived from the cost formulas, not measured. This motivates the shared column order introduced a few blocks later.
Guide
Speed is not the only obstacle: the numbers themselves go bad at scale. Starting from a healthy, positive definite inverse Hessian, repeatedly applying the removal update of equation five lets round-off error build up until the matrix becomes indefinite. From then on the compensation pushes weights the wrong way and the layer is ruined. The paper says this almost certainly happens in a few layers of models beyond a few billion parameters, which motivates the Cholesky trick.
- Prior LLM quantizers (ZeroQuant, LLM.int8(), nuQmm) all just round to nearest: fine at 8 bits, not at 3–4.
- Accurate post-training methods (AdaRound, BRECQ, OBQ) take ≈1 h for a 25M-parameter ResNet-50 — hopeless for 175B.
- Activation outliers are not the issue here: GPTQ is weight-only.
§3Method
Background: OBS → OBQ
OBQ (Optimal Brain Quantization) adapts the classic OBS (Optimal Brain Surgeon) pruning rule to quantization: each row is solved separately; quantize one weight at a time (greedy), then update the rest with Eq. (2) and shrink \(\mathbf{H}^{-1}\) with Eq. (3).
Step 1 — arbitrary (shared) order
Guide
The first trick is to quantize columns in the same fixed order for every row. OBQ picks a greedy order per row, so each row keeps its own inverse Hessian to update, once per weight. Because the Hessian depends only on the inputs X, a shared order means all rows share one inverse, updated once per column. The paper finds arbitrary order is about as good as greedy on large layers, and the cost drops to the formula in the equations section.
Guide
Here is the core loop in motion. Each panel is one step t: column t, in indigo, is rounded, its error is scaled and multiplied by row t of the inverse Hessian, and that correction is subtracted from the teal columns to its right, which absorb it. Rust columns are already frozen. After the last column the whole matrix is quantized, giving Q. This is the picture behind Algorithm 1.
Step 2 — lazy batch updates
Guide
The second trick keeps the same arithmetic but reorders it for the GPU. Updating the whole weight matrix after every column is memory-bound, because each update touches everything but does little math. Since rounding column i only needs the updates to column i, GPTQ keeps updates inside a block of one hundred twenty-eight columns, then applies one large matrix multiply to the rest. Same operation count, about ten times faster in practice.
Step 3 — Cholesky reformulation
Guide
The third trick fixes the numerical drift from figure four. Quantizing column q only needs one row of the shrinking inverse Hessian, from the diagonal onward, and those rows are exactly the rows of the upper Cholesky factor, up to a square-root scale. So one stable Cholesky call, plus one percent dampening, gives every row in advance and replaces the error-prone chain of equation five. The error is then divided by the diagonal entry of U.
Whole-model pipeline
Guide
GPTQ never holds the whole model on the GPU. It loads one Transformer block of six linear layers, runs the calibration set through it to build a Hessian per layer, quantizes each layer, then re-runs the inputs through the now quantized block to feed the next one. Using inputs that already carry earlier quantization error gives a noticeable accuracy gain at almost no cost. For a diffusion transformer, the same loop would run over its blocks.
- Run 128 random 2048-token C4 segments to the current block; for each linear layer build \(\mathbf{H}=2\mathbf{X}\mathbf{X}^\top\).
- Damp (\(+\lambda\mathbf{I}\), \(\lambda\) = 1% of mean diagonal), invert, take the upper Cholesky factor.
- Sweep columns in blocks of B = 128: round column j to the per-row asymmetric min-max grid (or per-group grid, with group params fitted on the current updated weights), push the scaled error into the rest of the block.
- After each block, apply one GEMM update to all remaining columns.
- Re-run the block with quantized weights to get inputs for the next block.
Guide
The recipe walks through the network one block at a time. Each linear layer gets its Hessian, which is damped, inverted and turned into a Cholesky factor once. Then the columns are swept in blocks of one hundred twenty-eight: round, push the error inside the block, and after the block update everything else in one go. Grid parameters are fitted on the already updated weights. Finally, the quantized block produces inputs for the next.
Guide
Algorithm 1 is the entire quantizer for one layer, and it combines all three tricks. It takes the damped inverse Hessian, replaces it by its Cholesky factor once, and then loops over blocks of B columns. Inside a block it rounds each column, divides the error by the diagonal entry, and subtracts that error times the matching Cholesky row from the remaining columns of the block. The saved block errors then update all later columns with one matrix multiply.
§4Every equation
Layer-wise reconstruction: find quantized weights \(\widehat{\mathbf{W}}\) (on a fixed grid) whose outputs on calibration inputs \(\mathbf{X}\) (m samples) match the FP layer \(\mathbf{W}\).
Guide
Equation one is the goal for each layer. Find quantized weights W hat, restricted to the grid, that minimise the squared difference between W times X and W hat times X, where W is the full-precision weight matrix and X holds the layer inputs from the calibration samples. It matches layer outputs, not weights, so errors on unimportant directions are cheap. Every later equation is a way to solve this problem approximately and quickly.
Hessian of the per-row quadratic objective restricted to the set \(F\) of still full-precision weights. Depends only on inputs, not on weights.
Guide
H sub F equals two times X sub F times X sub F transposed. This is the Hessian, the curvature, of the layer objective for one row, restricted to F, the set of weights still in full precision. It tells how costly an error in each direction is. The key point is that it depends only on the inputs, not on the weights, which is why all rows can share it once the column order is fixed.
OBQ: greedily pick the weight whose rounding costs least, then shift all remaining weights by \(\boldsymbol{\delta}_F\) to cancel its error. \(\operatorname{quant}\) = round to nearest grid point.
Guide
Equation two is the OBQ rule that GPTQ inherits. The first part picks the weight whose rounding error squared, divided by its diagonal entry of the inverse Hessian, is smallest. The second part, delta F, shifts all remaining weights by minus that scaled error times the matching column of the inverse Hessian, cancelling its effect on the output. Quant means rounding to the nearest grid point. GPTQ keeps the update but drops the greedy choice.
Remove row/column \(q\) directly in the inverse via one Gaussian-elimination step (subscript printed as \(-p\) in the paper; it means \(-q\)).
Guide
Equation three removes a quantized weight from the problem without inverting a new matrix. It subtracts from the inverse Hessian an outer product of its q-th column and q-th row, divided by the q-th diagonal entry, which is one step of Gaussian elimination, and then drops row and column q. The paper prints the subscript as minus p but means minus q. Repeated use of this update is what drifts numerically at scale.
OBQ cost vs. GPTQ cost with a shared column order: a \(\min\{d_{\text{row}},d_{\text{col}}\}\) speed-up.
Guide
This line is the cost argument in one step. OBQ costs on the order of rows times columns cubed per layer. With a shared column order GPTQ costs the larger of rows times columns squared and columns cubed. That is a speed-up by a factor of the smaller dimension, thousands of times for large models, and it is what makes one hundred seventy-five billion parameters feasible in hours.
Multi-weight (block) version of (2): compensation for quantizing a whole index set \(Q\) (e.g. B = 128 columns) at once.
Guide
Equation four is the block version of the update in equation two. Instead of one weight, a whole index set Q, such as one hundred twenty-eight columns, is quantized together. The correction delta F is minus the block error times the inverse of the Q by Q sub-block of the inverse Hessian, times the matching columns. This is the lazy batch update that applies once per block in Algorithm 1.
Multi-row removal from the inverse; repeated use accumulates round-off and motivates the Cholesky reformulation.
Guide
Equation five removes many rows and columns from the inverse Hessian at once, the block version of equation three. It subtracts the Q columns times the inverse of the Q by Q sub-block times the Q rows. Applied over and over through a large layer, it accumulates round-off error and can make the matrix indefinite, as figure four shows. That failure is why GPTQ switches to the Cholesky form.
Dampening: add 1% of the average diagonal to keep \(\mathbf{H}\) well-conditioned.
Guide
Dampening adds lambda times the identity to the Hessian, with lambda equal to one percent of the average diagonal value. This small boost keeps the matrix well-conditioned, so inverting it and taking a Cholesky factor stay stable even when some input directions are almost never used. It is a cheap safety step and a setting worth keeping in mind in NNCF's GPTQ options.
Row \(q\) of the upper Cholesky factor equals the needed row of \(\mathbf{H}^{-1}_{F_q}\) (from the diagonal on), just scaled; so all rows can be precomputed stably.
Guide
This identity is the heart of the Cholesky trick. Row q of the upper Cholesky factor of the inverse Hessian, from the diagonal onward, equals the row GPTQ needs from the shrinking inverse, divided by the square root of its diagonal entry. So instead of updating the inverse column after column, one Cholesky factorisation computed at the start gives every needed row, stably. Algorithm 1 uses exactly these rows.
Input to Algorithm 1: the damped inverse Hessian of the layer, computed once per layer.
Guide
The input to Algorithm 1 is H inverse, the inverse of two X X transposed plus lambda times the identity. X is the layer's calibration inputs and lambda the one percent dampening. It is computed once per layer, then replaced by its Cholesky factor. Its size depends only on the number of input columns, which keeps the cost modest even on a CPU.
Average bits/weight with grouping (FP16 scale + b-bit zero point per group of g): 3-bit g1024 ≈ +0.02, g128 ≈ +0.15; 2-bit g128 ≈ 2.2, g32 ≈ 2.6 (derived from the text).
Guide
Grouping costs a few extra bits. The average bits per weight, b bar, is about b plus sixteen plus b, divided by g, because each group of g weights stores a sixteen-bit scale and a b-bit zero point. Three-bit with groups of one thousand twenty-four adds about 0.02 bits, groups of one hundred twenty-eight add about 0.15, and two-bit ranges from about 2.2 to 2.6 bits. These figures are derived from the text.
Perplexity as used in all language-generation tables: non-overlapping 2048-token segments, exponentiated mean next-token negative log-likelihood (described in words in the paper).
Guide
Perplexity is the language quality score in all the tables, and lower is better. It is the exponential of minus the average log probability the model gives each true next token, over N tokens, using non-overlapping segments of two thousand forty-eight tokens. A perplexity of eight means the model is roughly as unsure as choosing among eight words. The paper describes it in words; the formula is the standard one.
§5Every figure
Guide
GPTQ tracks full precision across model sizes, while plain rounding falls apart. Each panel plots WikiText2 perplexity against parameter count on a log scale: OPT at four bits on the left and BLOOM at three bits on the right. The RTN curve spikes, to one hundred ten for OPT sixty-six B and five hundred seventy-one for BLOOM one hundred seventy-six B, while GPTQ hugs the FP16 line. It summarises tables three and four.
Guide
The paper's own sketch of the procedure matches Algorithm 1. On the right is the inverse Hessian in Cholesky form, computed once. On the left, a bold block of consecutive columns is quantized one column at a time, with the white column being the current one. The blue weights to the right are updated only once the block is finished. Compare it with the lazy-batch and Cholesky figures above.
Guide
Zero-shot task accuracy tells the same story as perplexity. The plots show LAMBADA accuracy against model size for OPT and BLOOM, where higher is better. At four bits even RTN mostly holds, except OPT sixty-six B. At three bits RTN drops to about zero, while GPTQ keeps most of the accuracy, and bigger models lose less. The data come from tables thirteen and fourteen.
Guide
Grouping closes most of the remaining four-bit gap. Curves show WikiText2 perplexity for OPT models from 1.3 to 30 billion parameters: plain row-wise four-bit GPTQ, groups of one thousand twenty-four, groups of one hundred twenty-eight, and FP16. The g128 curve sits closest to FP16. The grouped curves are redrawn from the plot, so read their shape, not exact values. This is the basis for int4 with group size one hundred twenty-eight in NNCF.
§6Results
Guide
On the largest models bits can be traded for quality smoothly. The horizontal axis is average bits per weight including group overhead, the vertical axis WikiText2 perplexity, with FP16 dashed. Two-bit with groups of thirty-two gets within about 0.6 points, and three-bit with groups of one hundred twenty-eight comes within 0.1 to 0.15. The data come from tables five and seven, with bit counts computed from the grouping formula.
Guide
Low-bit weights make token generation faster because decoding at batch one is memory-bound. For OPT one hundred seventy-five B, latency drops from 589 to 130 milliseconds per token on A6000 cards, 4.53 times faster, and from 230 to 71 milliseconds on A100s, 3.24 times faster, while needing far fewer GPUs. The gain comes from moving fewer bytes, which matters for the thesis because video diffusion is mostly compute-bound.
Main tables
| Method | RN18 4bit | RN18 3bit | RN50 4bit | RN50 3bit |
|---|---|---|---|---|
| AdaRound | 69.34 | 68.37 | 75.84 | 75.14 |
| AdaQuant | 68.12 | 59.21 | 74.68 | 64.98 |
| BRECQ | 69.37 | 68.47 | 75.88 | 75.32 |
| OBQ | 69.56 | 68.69 | 75.72 | 75.24 |
| GPTQ | 69.37 | 67.88 | 75.71 | 74.87 |
Guide
GPTQ is a fast approximation, not the most accurate solver on small models. On ResNet eighteen and fifty for ImageNet, it performs on par with AdaRound, BRECQ and OBQ at four bits, and slightly worse at three bits, for example 74.87 versus 75.32 for BRECQ on ResNet fifty. The table exists to show that the speed tricks cost little accuracy before the paper scales up to language models.
| OPT | 13B | 30B | 66B | 175B |
|---|---|---|---|---|
| Runtime | 20.9m | 44.9m | 1.6h | 4.2h |
| BLOOM | 1.7B | 3B | 7.1B | 176B |
| Runtime | 2.9m | 5.2m | 10.0m | 3.8h |
Guide
Quantization time stays practical even at the largest scale. On one A100 GPU, full GPTQ takes about twenty-one minutes for OPT thirteen B, 1.6 hours for sixty-six B and 4.2 hours for one hundred seventy-five B, and 3.8 hours for BLOOM one hundred seventy-six B. Earlier accurate methods would need weeks, which is the gap the shared order and lazy batching close.
| OPT | Bits | 125M | 350M | 1.3B | 2.7B | 6.7B | 13B | 30B | 66B | 175B |
|---|---|---|---|---|---|---|---|---|---|---|
| full | 16 | 27.65 | 22.00 | 14.63 | 12.47 | 10.86 | 10.13 | 9.56 | 9.34 | 8.34 |
| RTN | 4 | 37.28 | 25.94 | 48.17 | 16.92 | 12.10 | 11.32 | 10.98 | 110 | 10.54 |
| GPTQ | 4 | 31.12 | 24.24 | 15.47 | 12.87 | 11.39 | 10.31 | 9.63 | 9.55 | 8.37 |
| RTN | 3 | 1.3e3 | 64.57 | 1.3e4 | 1.6e4 | 5.8e3 | 3.4e3 | 1.6e3 | 6.1e3 | 7.3e3 |
| GPTQ | 3 | 53.85 | 33.79 | 20.97 | 16.88 | 14.86 | 11.61 | 10.27 | 14.16 | 8.68 |
Guide
This is the paper's main table. Rows are full precision, RTN and GPTQ at four and three bits; columns are OPT sizes from one hundred twenty-five million to one hundred seventy-five billion; cells are WikiText2 perplexity, lower being better. GPTQ wins almost everywhere, and at three bits RTN explodes into the thousands while GPTQ stays near FP16 for large models, for example 8.68 versus 8.34 at one hundred seventy-five B.
| BLOOM | Bits | 560M | 1.1B | 1.7B | 3B | 7.1B | 176B |
|---|---|---|---|---|---|---|---|
| full | 16 | 22.42 | 17.69 | 15.39 | 13.48 | 11.37 | 8.11 |
| RTN | 4 | 25.90 | 22.00 | 16.97 | 14.76 | 12.10 | 8.37 |
| GPTQ | 4 | 24.03 | 19.05 | 16.48 | 14.20 | 11.73 | 8.21 |
| RTN | 3 | 57.08 | 50.19 | 63.59 | 39.36 | 17.38 | 571 |
| GPTQ | 3 | 32.31 | 25.08 | 21.11 | 17.40 | 13.47 | 8.64 |
Guide
The BLOOM family confirms the OPT result on a different architecture. Cells are WikiText2 perplexity, lower being better. At four bits GPTQ improves on RTN at every size, and at three bits RTN reaches five hundred seventy-one for the one hundred seventy-six B model while GPTQ gets 8.64, against 8.11 for FP16. As with OPT, larger models tolerate quantization better.
| Method | Bits | OPT Wiki2 | PTB | C4 | LAMB.↑ | BLOOM Wiki2 | PTB | C4 | LAMB.↑ |
|---|---|---|---|---|---|---|---|---|---|
| Baseline | 16 | 8.34 | 12.01 | 10.13 | 75.59 | 8.11 | 14.59 | 11.71 | 67.40 |
| RTN | 4 | 10.54 | 14.22 | 11.61 | 71.34 | 8.37 | 15.00 | 12.04 | 66.70 |
| GPTQ | 4 | 8.37 | 12.26 | 10.28 | 76.80 | 8.21 | 14.75 | 11.81 | 67.71 |
| RTN | 3 | 7.3e3 | 8.0e3 | 4.6e3 | 0 | 571. | 107. | 598. | 0.17 |
| GPTQ | 3 | 8.68 | 12.68 | 10.67 | 76.19 | 8.64 | 15.57 | 12.27 | 65.10 |
| GPTQ | 3/g1024 | 8.45 | 12.48 | 10.47 | 77.39 | 8.35 | 15.01 | 11.98 | 67.47 |
| GPTQ | 3/g128 | 8.45 | 12.37 | 10.36 | 76.42 | 8.26 | 14.89 | 11.85 | 67.86 |
Guide
This summary covers only the two giant models, across three perplexity datasets and LAMBADA accuracy. Four-bit GPTQ is nearly lossless, three-bit GPTQ loses a little, and three-bit RTN is broken. The last two rows add grouping: three-bit with groups of one thousand twenty-four or one hundred twenty-eight reaches 8.45 perplexity on OPT, close to the four-bit result. Grouping is the cheap lever the thesis box recommends.
| GPU | FP16 | 3bit | Speedup | GPU reduction |
|---|---|---|---|---|
| A6000 – 48GB | 589ms | 130ms | 4.53× | 8→2 |
| A100 – 80GB | 230ms | 71ms | 3.24× | 5→1 |
Guide
Latency is measured per generated token for OPT one hundred seventy-five B at batch size one. Three-bit GPTQ with a custom kernel runs 4.53 times faster on A6000 cards, dropping from eight GPUs to two, and 3.24 times faster on A100s, dropping from five to one. The speed-up relies on memory-bound matrix-vector products, so it will not transfer directly to a compute-bound video transformer.
| Model | FP16 | g128 | g64 | g32 | 3-bit |
|---|---|---|---|---|---|
| OPT-175B | 8.34 | 9.58 | 9.18 | 8.94 | 8.68 |
| BLOOM | 8.11 | 9.55 | 9.17 | 8.83 | 8.64 |
Guide
Two-bit quantization becomes usable with small groups. Cells are WikiText2 perplexity for the two giant models. Smaller groups help steadily: OPT goes from 9.58 with groups of one hundred twenty-eight to 8.94 with groups of thirty-two, just above the 8.68 of plain three-bit and against 8.34 for FP16. This extreme regime shows how far error compensation plus grouping can go.
| Method | BERT 4bit | BERT 3bit | OPT-125M 4bit | OPT-125M 3bit |
|---|---|---|---|---|
| OBQ | 88.23 | 85.29 | 32.52 | 69.32 |
| GPTQ | 88.18 | 86.02 | 31.12 | 53.85 |
Guide
Dropping OBQ's greedy order costs almost nothing. GPTQ is compared with full OBQ on BERT base, scored by SQuAD F1 where higher is better, and on OPT one hundred twenty-five M, scored by perplexity. The two are close, and at three bits GPTQ is even better, with a perplexity of 53.85 against 69.32. This backs the claim in the shared-order figure that arbitrary order is about as good.
Appendix tables (PTB / C4 perplexity, zero-shot accuracy)
| OPT | Bits | 125M | 350M | 1.3B | 2.7B | 6.7B | 13B | 30B | 66B | 175B |
|---|---|---|---|---|---|---|---|---|---|---|
| full | 16 | 38.99 | 31.08 | 20.29 | 17.97 | 15.77 | 14.52 | 14.04 | 13.36 | 12.01 |
| RTN | 4 | 53.89 | 36.79 | 57.30 | 31.05 | 18.84 | 16.51 | 15.40 | 225.66 | 14.22 |
| GPTQ | 4 | 45.17 | 34.52 | 21.85 | 19.14 | 16.56 | 14.94 | 14.26 | 13.81 | 12.26 |
| RTN | 3 | 1.4e3 | 88.04 | 1.3e4 | 1.4e4 | 5.7e3 | 2.8e3 | 1.2e3 | 5.0e3 | 8.0e3 |
| GPTQ | 3 | 73.19 | 47.08 | 32.10 | 24.81 | 21.88 | 16.68 | 15.36 | 28.12 | 12.86 |
Guide
On PTB perplexity for OPT, the pattern repeats. GPTQ at four bits stays close to FP16, RTN has an outlier at sixty-six B with 225.66, and at three bits RTN is in the thousands while GPTQ stays usable, reaching 12.86 against 12.01 at one hundred seventy-five B. This appendix table shows the main result does not depend on the WikiText2 dataset.
| BLOOM | Bits | 560M | 1.1B | 1.7B | 3B | 7.1B | 176B |
|---|---|---|---|---|---|---|---|
| full | 16 | 43.69 | 57.96 | 30.00 | 25.34 | 20.83 | 14.59 |
| RTN | 4 | 51.10 | 66.85 | 33.58 | 27.68 | 22.42 | 15.00 |
| GPTQ | 4 | 46.97 | 62.47 | 31.84 | 26.49 | 21.67 | 14.75 |
| RTN | 3 | 126. | 185. | 106. | 66.78 | 35.04 | 107. |
| GPTQ | 3 | 70.35 | 87.04 | 46.11 | 34.02 | 26.14 | 15.57 |
Guide
BLOOM on PTB perplexity gives the same ranking. GPTQ beats RTN at every size and bit width, and the margin is largest at three bits, where the one hundred seventy-six B model scores 15.57 with GPTQ against 107 with RTN and 14.59 in FP16. Like the other appendix tables, it confirms robustness across datasets.
| OPT | Bits | 125M | 350M | 1.3B | 2.7B | 6.7B | 13B | 30B | 66B | 175B |
|---|---|---|---|---|---|---|---|---|---|---|
| full | 16 | 26.56 | 22.59 | 16.07 | 14.34 | 12.71 | 12.06 | 11.44 | 10.99 | 10.13 |
| RTN | 4 | 33.91 | 26.21 | 24.51 | 18.43 | 14.36 | 13.36 | 13.46 | 309. | 11.61 |
| GPTQ | 4 | 29.22 | 24.63 | 16.97 | 15.00 | 13.18 | 12.26 | 11.57 | 11.23 | 10.28 |
| RTN | 3 | 834 | 55.49 | 5.2e3 | 1.1e4 | 5.3e3 | 3.1e3 | 1.4e3 | 3.5e3 | 4.6e3 |
| GPTQ | 3 | 42.41 | 31.33 | 21.63 | 18.17 | 17.14 | 13.34 | 12.23 | 14.59 | 10.67 |
Guide
OPT on C4 perplexity shows the same pattern, with one caveat. The calibration samples come from C4's training split, so this test is not fully zero-shot. GPTQ still wins clearly: at three bits the one hundred seventy-five B model scores 10.67, against 10.13 for FP16 and about four thousand six hundred for RTN.
| BLOOM | Bits | 560M | 1.1B | 1.7B | 3B | 7.1B | 176B |
|---|---|---|---|---|---|---|---|
| full | 16 | 26.60 | 22.05 | 19.49 | 17.49 | 15.20 | 11.71 |
| RTN | 4 | 29.89 | 24.44 | 21.26 | 18.76 | 16.06 | 12.04 |
| GPTQ | 4 | 28.00 | 23.25 | 20.55 | 18.10 | 15.60 | 11.81 |
| RTN | 3 | 67.49 | 60.71 | 113. | 80.49 | 22.59 | 598. |
| GPTQ | 3 | 35.78 | 28.83 | 25.34 | 21.25 | 17.67 | 12.27 |
Guide
BLOOM on C4 perplexity, again not fully zero-shot because calibration used C4 training text. GPTQ tracks FP16 closely at four bits and stays reasonable at three bits, with 12.27 against 11.71 for the largest model, while RTN at three bits jumps to five hundred ninety-eight. It rounds out the appendix evidence.
| OPT | Bits | 125M | 350M | 1.3B | 2.7B | 6.7B | 13B | 30B | 66B | 175B |
|---|---|---|---|---|---|---|---|---|---|---|
| full | 16 | 39.16 | 46.67 | 58.80 | 64.82 | 68.72 | 70.23 | 72.39 | 74.93 | 75.59 |
| RTN | 4 | 18.34 | 40.62 | 36.31 | 59.27 | 64.66 | 67.38 | 70.48 | 13.08 | 71.34 |
| GPTQ | 4 | 34.74 | 48.38 | 56.45 | 62.97 | 66.37 | 69.12 | 72.40 | 74.50 | 76.80 |
| RTN | 3 | 0.10 | 27.36 | 0.00 | 0.00 | 0.00 | 0.06 | 1.46 | 2.00 | 0.00 |
| GPTQ | 3 | 13.93 | 32.31 | 37.26 | 52.26 | 54.98 | 64.18 | 69.69 | 57.02 | 76.19 |
Guide
LAMBADA accuracy for OPT, where higher is better, is the data behind figure three. Three-bit RTN falls to about zero for most sizes, while three-bit GPTQ keeps 76.19 percent on the one hundred seventy-five B model, slightly above FP16's 75.59. OPT sixty-six B is a weak spot for both methods, echoing its outlier in the perplexity tables.
| BLOOM | Bits | 560M | 1.1B | 1.7B | 3B | 7.1B | 176B |
|---|---|---|---|---|---|---|---|
| full | 16 | 34.06 | 42.85 | 46.71 | 52.12 | 57.79 | 67.40 |
| RTN | 4 | 26.00 | 39.06 | 41.92 | 45.84 | 50.48 | 66.70 |
| GPTQ | 4 | 31.75 | 39.80 | 46.28 | 51.41 | 54.65 | 67.71 |
| RTN | 3 | 9.10 | 15.95 | 15.02 | 24.55 | 29.90 | 0.17 |
| GPTQ | 3 | 21.31 | 28.70 | 33.65 | 43.12 | 47.41 | 65.10 |
Guide
LAMBADA accuracy for BLOOM, higher being better, is the second half of figure three. Four-bit GPTQ is close to FP16 throughout, and at three bits the one hundred seventy-six B model keeps 65.10 percent with GPTQ against 0.17 with RTN. Smaller models lose more, again showing that scale makes quantization easier.
| OPT | Bits | 125M | 350M | 1.3B | 2.7B | 6.7B | 13B | 30B | 66B | 175B |
|---|---|---|---|---|---|---|---|---|---|---|
| full | 16 | 62.02 | 64.74 | 72.36 | 74.81 | 76.39 | 76.88 | 78.18 | 79.76 | 81.07 |
| RTN | 4 | 61.43 | 63.44 | 67.63 | 73.72 | 76.44 | 76.01 | 77.26 | 60.07 | 78.23 |
| GPTQ | 4 | 61.26 | 63.71 | 70.73 | 73.99 | 76.28 | 76.61 | 79.00 | 79.33 | 81.00 |
| RTN | 3 | 56.09 | 60.61 | 52.77 | 51.90 | 50.49 | 52.99 | 56.37 | 50.87 | 51.25 |
| GPTQ | 3 | 59.25 | 61.32 | 68.34 | 71.38 | 73.29 | 75.24 | 77.58 | 71.27 | 80.03 |
Guide
PIQA accuracy for OPT, a physical common-sense task where higher is better. Four-bit GPTQ matches FP16 almost exactly, for example 81.00 against 81.07 at one hundred seventy-five B. Three-bit RTN sits near fifty percent, which is chance for this two-choice task, while three-bit GPTQ reaches 80.03 on the largest model.
| BLOOM | Bits | 560M | 1.1B | 1.7B | 3B | 7.1B | 176B |
|---|---|---|---|---|---|---|---|
| full | 16 | 65.07 | 67.14 | 69.97 | 70.51 | 73.72 | 79.16 |
| RTN | 4 | 63.11 | 65.29 | 67.74 | 69.86 | 72.69 | 79.00 |
| GPTQ | 4 | 64.31 | 66.05 | 68.77 | 69.42 | 72.96 | 79.00 |
| RTN | 3 | 58.60 | 60.80 | 60.88 | 66.28 | 69.70 | 53.32 |
| GPTQ | 3 | 61.62 | 62.62 | 65.18 | 68.34 | 70.95 | 77.70 |
Guide
PIQA accuracy for BLOOM, higher being better. At four bits RTN and GPTQ are both close to FP16, so easy tasks hide differences. At three bits the gap opens on the largest model: 77.70 with GPTQ against 53.32 with RTN and 79.16 in FP16.
| OPT | Bits | 125M | 350M | 1.3B | 2.7B | 6.7B | 13B | 30B | 66B | 175B |
|---|---|---|---|---|---|---|---|---|---|---|
| full | 16 | 39.69 | 40.36 | 50.93 | 54.34 | 60.14 | 61.83 | 65.40 | 67.26 | 71.04 |
| RTN | 4 | 36.32 | 38.55 | 49.20 | 52.90 | 57.68 | 61.31 | 61.11 | 40.66 | 63.93 |
| GPTQ | 4 | 39.02 | 37.92 | 59.97 | 53.11 | 59.72 | 61.32 | 65.11 | 65.35 | 68.69 |
| RTN | 3 | 30.43 | 36.07 | 27.97 | 26.05 | 25.04 | 30.60 | 34.22 | 25.84 | 26.77 |
| GPTQ | 3 | 36.15 | 36.91 | 46.17 | 48.19 | 53.41 | 56.82 | 59.72 | 52.44 | 65.36 |
Guide
ARC-easy accuracy for OPT, grade-school science questions where higher is better. Four-bit GPTQ is close to FP16, and at three bits it keeps 65.36 on the one hundred seventy-five B model while RTN drops to about the level of random guessing. Small models are noisier, including one GPTQ entry above FP16 at 1.3 B, so read trends rather than single cells.
| BLOOM | Bits | 560M | 1.1B | 1.7B | 3B | 7.1B | 176B |
|---|---|---|---|---|---|---|---|
| full | 16 | 41.71 | 45.41 | 48.11 | 53.24 | 57.37 | 67.47 |
| RTN | 4 | 39.40 | 42.51 | 44.70 | 51.35 | 56.14 | 66.33 |
| GPTQ | 4 | 40.24 | 44.49 | 44.49 | 52.82 | 56.14 | 67.42 |
| RTN | 3 | 45.44 | 46.87 | 37.58 | 45.08 | 48.61 | 28.87 |
| GPTQ | 3 | 39.14 | 41.79 | 42.85 | 46.63 | 51.56 | 62.84 |
Guide
ARC-easy accuracy for BLOOM, higher being better. For small BLOOM models RTN at three bits sometimes scores higher than GPTQ, a reminder that zero-shot accuracy on small models is noisy. On the one hundred seventy-six B model the usual order returns: 62.84 for GPTQ against 28.87 for RTN.
| OPT | Bits | 125M | 350M | 1.3B | 2.7B | 6.7B | 13B | 30B | 66B | 175B |
|---|---|---|---|---|---|---|---|---|---|---|
| full | 16 | 22.87 | 24.06 | 29.44 | 31.31 | 34.56 | 35.75 | 38.14 | 40.02 | 43.94 |
| RTN | 4 | 22.44 | 23.81 | 24.91 | 29.18 | 32.59 | 35.24 | 35.41 | 22.87 | 37.71 |
| GPTQ | 4 | 22.95 | 24.83 | 28.24 | 30.12 | 33.70 | 34.90 | 37.80 | 39.16 | 42.75 |
| RTN | 3 | 21.76 | 22.18 | 23.55 | 25.43 | 25.85 | 23.81 | 19.97 | 25.77 | 23.81 |
| GPTQ | 3 | 22.53 | 25.09 | 27.65 | 27.82 | 31.91 | 33.02 | 35.84 | 31.66 | 41.04 |
Guide
ARC-challenge accuracy for OPT, the harder science set where higher is better. Scores for small models are near chance for every method. For large models GPTQ holds up, with 41.04 at three bits on one hundred seventy-five B against 43.94 in FP16, while RTN falls to about 24.
| BLOOM | Bits | 560M | 1.1B | 1.7B | 3B | 7.1B | 176B |
|---|---|---|---|---|---|---|---|
| full | 16 | 24.15 | 25.68 | 26.79 | 30.55 | 33.45 | 44.97 |
| RTN | 4 | 23.89 | 23.34 | 26.45 | 29.52 | 32.17 | 43.17 |
| GPTQ | 4 | 23.46 | 25.51 | 25.94 | 28.92 | 32.25 | 44.20 |
| RTN | 3 | 21.67 | 22.86 | 23.29 | 27.13 | 31.31 | 24.74 |
| GPTQ | 3 | 23.21 | 24.06 | 24.91 | 28.58 | 30.97 | 40.70 |
Guide
ARC-challenge accuracy for BLOOM, higher being better. Differences among small models are within noise. On the largest model, three-bit GPTQ reaches 40.70 against 24.74 for RTN and 44.97 in FP16, the same large-model pattern seen in every other table.
| OPT | Bits | 125M | 350M | 1.3B | 2.7B | 6.7B | 13B | 30B | 66B | 175B |
|---|---|---|---|---|---|---|---|---|---|---|
| full | 16 | 59.96 | 63.21 | 70.78 | 71.74 | 74.60 | 76.64 | 77.28 | 77.34 | 79.82 |
| RTN | 4 | 60.02 | 63.08 | 59.13 | 70.78 | 73.65 | 74.47 | 75.37 | 51.24 | 78.04 |
| GPTQ | 4 | 59.58 | 63.46 | 69.64 | 70.46 | 73.90 | 76.19 | 77.08 | 77.15 | 80.08 |
| RTN | 3 | 49.65 | 56.78 | 47.61 | 46.98 | 48.12 | 49.20 | 49.84 | 48.19 | 46.47 |
| GPTQ | 3 | 57.03 | 60.15 | 65.25 | 68.43 | 70.97 | 73.07 | 75.68 | 71.23 | 78.04 |
Guide
StoryCloze accuracy for OPT, choosing the right ending to a short story, where higher is better. Four-bit GPTQ matches or slightly beats FP16 on the largest model, and three-bit GPTQ reaches 78.04 against about 46 for RTN, which is below chance on this two-choice task.
| BLOOM | Bits | 560M | 1.1B | 1.7B | 3B | 7.1B | 176B |
|---|---|---|---|---|---|---|---|
| full | 16 | 61.94 | 63.27 | 65.44 | 67.79 | 71.99 | 76.89 |
| RTN | 4 | 60.15 | 60.66 | 62.95 | 67.09 | 70.72 | 76.00 |
| GPTQ | 4 | 61.17 | 62.32 | 64.48 | 67.22 | 71.36 | 76.32 |
| RTN | 3 | 54.87 | 56.08 | 55.79 | 59.83 | 66.20 | 48.50 |
| GPTQ | 3 | 57.80 | 59.77 | 61.81 | 63.97 | 69.26 | 75.37 |
Guide
StoryCloze accuracy for BLOOM, higher being better, closes the appendix. Four-bit GPTQ stays within about half a point of FP16 on the largest model, and three-bit GPTQ gets 75.37 against 48.50 for RTN. Across all these tasks the conclusion is the same: GPTQ keeps large models usable at three bits.
§7Why it matters for this thesis
GPTQ → LTX-2.3 on OpenVINO / NNCF
- It is already in the toolchain. NNCF's data-aware int4 weight compression (
nncf.compress_weights(..., mode=INT4_SYM/INT4_ASYM, group_size=128, dataset=..., gptq=True), optionally withscale_estimation=True) applies GPTQ-style error compensation. The output is ordinary compressed weights (int4 + scale/zero point) in OpenVINO IR, which run on OpenVINO's standard weight-compressed MatMul kernels on CPU and Arc GPU. No custom kernels are needed. - It needs calibration data, and for a diffusion model that data must cover the timesteps. \(\mathbf{H}=2\mathbf{X}\mathbf{X}^\top\) comes from real layer inputs. For LTX-2.3, collect DiT inputs across prompts and across denoising steps (early, noisy steps and late steps differ), for both the video and the audio streams. Otherwise the error compensation is fitted to the wrong input statistics.
- Grouping is the lever the paper recommends. Fig. 4 and Table 5 show that g128 recovers most of the 4-bit loss. This matches NNCF's int4
group_size. Keep sensitive layers (embeddings, final projection, possibly adaLN/timestep MLPs) in int8 or FP16 using NNCF'sratioor ignored scopes, as GPTQ keeps embeddings and the output layer in FP16. - Expect memory savings more than latency gains for video. GPTQ's speed-ups come from memory-bound matrix-vector products at batch 1 (Table 6). A video DiT processes thousands of tokens per step, so it is mostly compute-bound. int4 weights will mainly cut RAM/VRAM and load time, and speed-ups on Intel hardware must be measured, not assumed. Pair it with caching or activation int8 for compute savings.
- The compute cost is modest. GPTQ needs one \(d_{\text{col}}\times d_{\text{col}}\) Hessian per linear layer plus a Cholesky factorization, so it is feasible on a workstation CPU. Budget the extra compression time and report RTN (NNCF data-free) vs GPTQ vs AWQ/scale-estimation as an ablation.
Guide
Treat GPTQ as a ready-made option in NNCF rather than something to implement. Turn on the GPTQ flag in int4 weight compression with group size one hundred twenty-eight, and feed it calibration inputs gathered across prompts, denoising timesteps, and both the video and audio streams of LTX-2.3. Keep sensitive layers in int8 or FP16. Expect memory savings more than speed, measure latency on the Intel hardware, and report RTN, GPTQ and AWQ side by side as an ablation.
SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models
Weights of big transformers are easy to quantize, but their activations have a few huge “outlier” channels that ruin INT8. SmoothQuant divides each activation channel by a factor \(s_j\) and multiplies the matching weight row by the same \(s_j\) — the product is unchanged, but now both operands are smooth enough for plain INT8 × INT8 matrix multiplication (W8A8). It is training-free, done offline from a small calibration set.
- Format
- W8A8 (INT8 GEMM + BMM)
- Key knob
- α = 0.5 (OPT/BLOOM), 0.75 (GLM)
- OPT-175B avg acc.
- 66.8% vs 66.9% FP16
- Speed-up
- up to 1.56× (FasterTransformer)
- Memory
- ≈ 2× less (1.96×)
- Calibration
- 512 Pile sentences, once
Reading guide
SmoothQuant asks why large transformers break when both weights and activations are cast to eight-bit integers, and how to fix that without retraining. Its answer is to divide each troublesome activation channel by a scale and multiply the matching weight row by the same scale, so the product stays identical but both sides become easy to quantize. That gives W eight A eight, meaning eight-bit weights and eight-bit activations, running on ordinary integer matrix kernels. The tab moves from the big picture, to the outlier problem, to the smoothing method and its equations, then every figure from the paper, the results tables, and a closing box on what this means for LTX-2.3 with NNCF. Among the sixteen papers it is the second of three language-model quantization foundations, after GPTQ and before AWQ. GPTQ and AWQ compress weights only, while SmoothQuant is the one that makes activations quantizable too.
§0Before reading
SmoothQuant builds on three ideas: how rounding to 8-bit integers works (one step size for many numbers), the difference between quantizing only the weights and quantizing the activations too, and which numbers share a step size. The paper is in the atlas because it is the classic fix for activation outliers, and its “smoothing” trick reappears in NNCF and in almost every diffusion quantizer that follows.
Guide
Rounding to eight-bit integers gives a ruler with two hundred fifty six ticks, and one step size is set by the largest value. Without an outlier the ticks are fine and every dot keeps its detail. Add one value at sixty and the step stretches so far that all the ordinary values near zero share just a few ticks. That lost detail is exactly the error SmoothQuant sets out to remove.
compress_weights store weights in few bits but turn them back into FP16 before multiplying. W8A8 also rounds the activations \(\mathbf{X}\) to INT8, so the multiply runs on integer hardware. Activations are only known at run time, and that is where the outliers live.Guide
There are two ways to quantize a linear layer. Weight-only methods like GPTQ, AWQ and NNCF's compress weights store the weights in few bits but turn them back into sixteen-bit floats before multiplying, so they mainly save memory. W eight A eight also rounds the activations to eight bits, so the multiply itself runs on fast integer units. Activations are only known at run time, and that is where the outliers appear.
Guide
Activations form a matrix with one row per token and one column per channel, and granularity says which numbers share a step size. One scale for everything lets the outlier column ruin all values. One scale per token row still mixes the outlier into every row. One scale per channel column would fix it, but it cannot be pulled out of a fast integer matrix multiply. SmoothQuant moves that per-channel factor into the weights instead.
Guide
SmoothQuant is the fourth paper in the atlas. GPTQ, just before it, compresses weights only. SmoothQuant adds the activation side by shifting outlier scale from the activations into the weights, which gives W eight A eight. AWQ, next, comes from the same lab and reuses per-channel scaling for four-bit weight-only models. Later diffusion papers like PTQ4DiT, ViDiT-Q and SVDQuant build on this smoothing, and NNCF uses it in its full integer path.
Terms used in this paper
- Activation
- The numbers flowing between layers for one input, the \(\mathbf{X}\) in \(\mathbf{Y}=\mathbf{XW}\). Unlike weights they change with every input, so they are only known at run time.
- Outlier channel
- A feature dimension of \(\mathbf{X}\) whose values are far larger (up to about 100 times) than the rest. In LLMs above about 6.7B parameters these channels stay the same across tokens.
- W8A8
- Weights stored in 8-bit integers and activations cast to 8-bit integers, so the matrix multiply itself runs in INT8. Compare W4A16: 4-bit weights, activations left in FP16.
- Step size (scale)
- The gap \(\Delta\) between neighbouring integer levels, usually \(\max|x|/127\) for INT8. Every value is divided by it and rounded.
- Per-tensor / per-token / per-channel
- How many values share one step size: the whole matrix, each token row, or each channel column.
- Static vs dynamic
- Static: activation scales fixed once from calibration data (cheapest). Dynamic: scales computed on the fly from each input. SmoothQuant-O3 is static per-tensor; O1 is dynamic per-token.
- Calibration set
- A small batch of real inputs run once through the model to record activation ranges. Here: 512 random sentences from the Pile text corpus.
- GEMM / BMM
- General matrix multiply (a linear layer) and batched matrix multiply (the two matmuls inside attention). They dominate compute, so they are what should go to INT8.
- A100
- NVIDIA's Ampere-generation data-centre GPU, used here in its 80 GB version. Its Tensor Cores run INT8 matrix multiplies faster than FP16 ones.
- Tensor Core
- NVIDIA's dedicated matrix-multiply units. Intel's rough counterparts are XMX engines on Arc GPUs and VNNI/AMX instructions on recent Xeon CPUs.
- FasterTransformer
- NVIDIA's optimised C++/CUDA inference library for transformers. The paper's biggest speed-ups (up to 1.56 times) are measured inside it.
- LLM.int8()
- The main competitor: it keeps outlier channels in FP16 and the rest in INT8. Accurate, but the mixed-precision split makes it slower than plain FP16 in most of the paper's tests.
- OPT, BLOOM, GLM-130B
- Open large language models used as test subjects, up to 175 billion (OPT) and 176 billion (BLOOM) parameters.
- LAMBADA, WikiText
- Language benchmarks. LAMBADA: accuracy at predicting the last word of a passage (higher is better). WikiText-2: perplexity, how surprised the model is by real text (lower is better).
Guide
These are the words the paper uses without explaining. The most important are outlier channel, W eight A eight, the difference between static and dynamic scales, and per-tensor versus per-token versus per-channel granularity. The hardware and benchmark names matter too: the results come from NVIDIA A100 GPUs and the FasterTransformer library, and accuracy is measured on language tasks such as LAMBADA and WikiText, not on images or video.
§2Big picture
Guide
The whole paper in one picture: move the difficulty, do not change the math. On the left, a few activation channels, drawn in magenta, are about a hundred times larger than the rest, so a single eight-bit scale wastes almost every level. On the right, each activation channel is divided by s and the matching weight row multiplied by s, done offline. The activations flatten, the weights get slightly bumpier but stay easy, and the output is unchanged.
SmoothQuant is a per-input-channel rescaling \(\mathbf{Y}=(\mathbf{X}\,\mathrm{diag}(\mathbf{s})^{-1})(\mathrm{diag}(\mathbf{s})\mathbf{W})\). The scale is folded into the previous op offline, so at runtime only plain INT8 GEMMs run. One knob, \(\alpha\), sets how much difficulty moves to the weights.
§3The problem
Guide
Outliers steal the grid. With one step size set by the largest value in the whole activation matrix, a normal channel whose maximum is only one percent of that value lands on just two or three of the two hundred fifty six integer levels. The drawing shows eight levels for clarity. This is the core problem the paper states in Section 3, and the effective-levels equation further down puts a number on it.
Guide
Accuracy against OPT model size for different ways of scaling the activations, taken from Table 1. Per-tensor and per-token eight-bit activations collapse to about thirty three percent, close to random guessing, once models reach six point seven billion parameters. Only per-channel scaling, marked with a star because it is simulated, stays on the FP16 line. That tells us the outliers live in fixed channels, which is the observation the whole method builds on.
Guide
Why per-channel activation scaling cannot simply be used. In an integer matrix multiply, the sum runs over the input-channel dimension, C i, inside the kernel, so only scales along the token rows and the output columns can be pulled out afterwards, as in equation 2. A per-input-channel scale would have to be applied inside the sum. SmoothQuant's escape is to push that scale into the weights offline, the one place where it costs nothing.
- Activations >> weights in difficulty. Weights are flat (INT8 or even INT4 weight-only is fine); activation outliers are ~100× larger than typical values.
- Outliers persist in fixed channels across all tokens; variation within a channel is small (Fig. 4).
- Existing W8A8 baselines (naive, ZeroQuant, Outlier Suppression) give near-random OPT-175B; LLM.int8() keeps accuracy by running outliers in FP16 but is slower than FP16.
§4Method
Guide
The migration strength alpha decides how much of the outlier burden slides from activations to weights, shown on the paper's toy example with X channel maxima of 2, 16, 2 and 9. At alpha zero the activations keep their spike of 16; at alpha one the weights inherit it. At alpha one half both sides end up with maxima of 2, 4, 2 and 3, so the worst ratio drops from eight times to two times, as the derived equation predicts.
Guide
Where the scale actually lives. The division by s is folded into whatever produced X, such as the LayerNorm gamma and beta or a previous linear layer, and the multiplication by s goes into the weight rows before quantization, so nothing extra runs at inference. The gold box, the tab's own annotation, shows NNCF inserting an explicit Multiply node when nothing can be folded, which is the case for LTX-2.3's adaptive LayerNorm.
- Calibrate. Run 512 random Pile sentences; record per-input-channel \(\max|\mathbf{X}_j|\) for each smoothed linear (and static step sizes \(\Delta\) for O3).
- Pick α. Quick grid search on a Pile validation subset: 0.5 for OPT/BLOOM, 0.75 for GLM-130B, 0.8–0.9 for Llama/Mistral (Tables 6–7).
- Compute s per channel with Eq. (4).
- Fold. Divide the producer (LayerNorm \(\gamma,\beta\) or previous linear) by \(\mathbf{s}\); multiply the weight rows by \(\mathbf{s}\) (Eq. 3). No runtime op added.
- Quantize all linear weights and BMM inputs to INT8 (Fig. 6), choose O1/O2/O3 granularity (Table 2).
- Run with off-the-shelf INT8 GEMM kernels (CUTLASS); dequantize with Eq. (2).
Guide
The recipe runs in five stages, all offline except the last. First, measure the largest absolute value of every input channel on 512 calibration sentences. Then pick alpha by a quick search, which gives about one half for OPT and BLOOM and higher values for Llama-style models. From alpha, compute the scales, fold them into the previous operation and the weights, quantize every linear layer and attention product to eight bits, and finally run on standard integer kernels.
Guide
The procedure as pseudocode written by the tab, since the paper has no algorithm box. For each smoothed linear layer, the attention QKV input and the first feed-forward input, it collects activation channel maxima and weight row maxima, turns them into a scale with equation 4, and folds that scale in with equation 3. Then every matrix multiply is quantized to eight bits, while LayerNorm, Softmax, activation functions and residual adds stay in FP16.
§5Every equation
Symmetric uniform quantizer: step \(\Delta\) from the absolute max, \(\lceil\cdot\rfloor\) = round, \(N=8\). \(\Delta\) from calibration = static; from runtime stats = dynamic. Asymmetric case adds a zero-point.
Guide
The basic symmetric quantizer used throughout the paper. X bar, the integer version of the floating-point activation X, is X divided by the step size delta and rounded. Delta is the largest absolute value in X divided by two to the power N minus one, minus one, which is 127 for eight bits. Delta from calibration is called static, delta measured at run time is dynamic. Because the largest value sets delta, outliers hurt everything else.
Linear layer: \(T\) tokens, \(C_i\) input channels (the summed, inner dim), \(C_o\) output channels (batch omitted).
Guide
The shape bookkeeping for a linear layer. Y equals X times W, where X has T rows, one per token, and C i columns, the input channels. W has C i rows and C o columns, the output channels. The important detail is that C i is the inner dimension that gets summed over, so later arguments about which scales can leave the kernel all refer back to these three names.
\(m_i\) = max of channel \(i\), \(m\) = max of the whole matrix. With outliers ~100×, non-outlier channels get only 2–3 levels (Sec. 3).
Guide
A back-of-the-envelope count of how many integer levels a channel really uses. It is two to the eighth, or 256, times m i over m, where m i is that channel's maximum and m is the maximum of the whole matrix. When outliers are about a hundred times larger, ordinary channels get only two or three levels. This is the numeric form of the grid picture in P1 and the reason naive W8A8 collapses.
Vector-wise INT8 GEMM: per-token scales (length \(T\)) and per-output-channel scales (length \(C_o\)) are applied after the integer matmul. Scales along \(C_i\) cannot be.
Guide
How an eight-bit matrix multiply is dequantized. The integer product of X bar and W bar is computed first, then multiplied on the left by a diagonal matrix of per-token step sizes, delta X, and on the right by a diagonal matrix of per-output-channel step sizes, delta W. Both scales sit on the outer dimensions, so they can be applied after the integer kernel. A scale along the inner input-channel dimension cannot, which is the constraint SmoothQuant is designed around.
Smoothing: \(\mathbf{s}\in\mathbb{R}^{C_i}\) divides activation channels and multiplies the matching weight rows; exact equivalence. \(\operatorname{diag}(\mathbf{s})^{-1}\) is fused into the previous op offline.
Guide
The smoothing identity, the heart of the method. X is multiplied by the inverse of diag of s, which divides each activation channel j by s j, and W is multiplied by diag of s, which multiplies weight row j by the same s j. The two cancel, so Y equals X hat times W hat exactly. Because the division can be folded into the previous operation offline, the model gains easier activations at no runtime cost.
The two extremes: left pushes all difficulty into the weights (every \(\hat{\mathbf{X}}\) channel has max 1); right pushes it all into the activations. Both hurt accuracy (Fig. 10).
Guide
The two extreme choices of scale, shown side by side. Setting s j to the maximum of activation channel j makes every smoothed activation channel peak at one and dumps all the difficulty into the weights. Setting s j to one over the maximum of weight row j does the opposite and leaves everything in the activations. Figure 10 shows that both extremes lose accuracy, which motivates the balanced formula in equation 4.
Migration strength \(\alpha\in[0,1]\): \(j\) = input channel, \(\mathbf{X}_j\) = activation column \(j\) (over calibration tokens), \(\mathbf{W}_j\) = weight row \(j\). \(\alpha=0.5\) balances; larger \(\alpha\) moves more to weights.
Guide
The paper's scale formula. For each input channel j, s j equals the maximum absolute activation in that channel raised to the power alpha, divided by the maximum absolute weight in row j raised to the power one minus alpha. Alpha, the migration strength, runs from zero to one: one half splits the difficulty evenly, and larger values push more of it into the weights. This single knob is what the steps block tunes and what Figure 10 sweeps.
Eq. (4) at \(\alpha=0.5\), as annotated in Fig. 5 (channel-wise max over tokens for \(\mathbf{X}\), over output channels for \(\mathbf{W}\)).
Guide
Equation 4 at alpha equal to one half, written the way Figure 5 annotates it. The scale is the square root of the activation channel maximum divided by the weight row maximum. X hat is X with each channel divided by its scale, and W hat is W with each row multiplied by it. Applied to the toy example this gives scales of 1, 4, 1 and 3.
Not printed in the paper; follows from (3)–(4). At \(\alpha=0.5\) both equal \(\sqrt{\max|\mathbf{X}_j|\max|\mathbf{W}_j|}\) — “same quantization difficulty”.
Guide
A derived line the tab adds, not printed in the paper. After smoothing, the maximum of activation channel j becomes the old activation maximum to the power one minus alpha times the old weight maximum to the power alpha, and the weight maximum is the mirror image. At alpha one half both equal the square root of the product, which is what the paper means by giving weights and activations the same quantization difficulty.
§6Every figure
Guide
Model size and accelerator memory over time, on a log scale from 2017 to 2022. Language models grew about ten thousand times, from 0.05 billion parameters to 530 billion, while GPU and TPU memory grew only from 16 to 80 gigabytes. The widening gap is the motivation for the paper. The point positions are approximate, since the plot is redrawn.
Guide
The intuition in two panels, where horizontal lines are quantization levels. In the original panel, one activation outlier stretches the range to 10, so normal values crowd into the bottom level or two, while weights with a range of 0.1 fill their grid. After smoothing, both X hat and W hat span their grids well. This is the qualitative version of the effective-levels argument, and the shapes are redrawn.
Guide
The two scale layouts an eight-bit matrix multiply supports. Per-tensor uses one step size for all of X and one for all of W, which is cheapest. Vector-wise uses one step per token row of X and one per output channel of W. Neither allows scales along the inner input-channel dimension. These are the granularities that the O1, O2 and O3 settings in Table 2 choose between.
Guide
A real OPT-13B layer, redrawn as heatmaps where darkness shows magnitude relative to each panel's maximum. The original activations have a few channels above 70, visible as magenta columns that stay large across all tokens, while the original weights are flat. After smoothing, the activation panel peaks near 10 with faint stripes, and the weights gain thin ridges in the same channels but remain easy. The cell values are synthetic; the pattern follows the paper.
Guide
The paper's worked example at alpha one half. Activation channel maxima are 2, 16, 2 and 9, weight row maxima are 2, 1, 2 and 1, so the scales come out as 1, 4, 1 and 3. The activation range shrinks from 16 to 4 while the weight range grows from 2 to 4, and the two are now equally easy. The product is unchanged, and all of this happens offline.
Guide
A precision map of one transformer block. Every compute-heavy operation, meaning the query, key and value projections, both attention matrix products, the output projection and the two feed-forward layers, takes eight-bit inputs, drawn in rust. Light element-wise operations such as LayerNorm, Softmax, ReLU and residual adds stay in FP16, drawn in teal. Quantizing the attention products too is what separates SmoothQuant from weight-only methods, and it maps directly onto a DiT block.
Guide
Average accuracy against OPT model size. Naive W8A8 and ZeroQuant are fine up to 2.7 billion parameters, then crash to about thirty three percent from 6.7 billion on, exactly where outliers emerge. SmoothQuant O3 stays on the FP16 line at every size. LLM.int8 also matches FP16, but only by keeping outlier channels in floating point, which makes it slow. The points for the two smallest models are read from the plot.
Guide
Latency and memory for OPT-13B in PyTorch on one A100, with sequence length on the x axis and a batch of four. SmoothQuant is fastest at every length, for example 223 milliseconds against 296 for FP16 at length 512, and it roughly halves memory. LLM.int8 is slower than FP16, the cost of its mixed-precision path. This is the first speed evidence for the efficiency half of the paper's claim.
Guide
The same PyTorch comparison for OPT-30B. At sequence length 256, SmoothQuant takes 228 milliseconds against 343 for FP16, or 1.51 times faster, and at length 128 memory drops from 56.6 to 28.9 gigabytes, 1.96 times less. The gains grow with model size, since bigger layers are more dominated by matrix multiplies. Values are read from the paper's bar labels.
Guide
OPT-13B running in FasterTransformer, a highly optimised inference engine, on one A100. SmoothQuant O3 is up to 1.45 times faster, going from 181 to 125 milliseconds at sequence length 1024, and memory falls from 30 to 19 gigabytes. The point is that the speed-up survives even against a strong FP16 baseline, not only against plain PyTorch.
Guide
OPT-30B in FasterTransformer on one A100. SmoothQuant O3 reaches the paper's headline speed-up of 1.56 times, 186 against 119 milliseconds at sequence length 512, and memory is roughly halved, from 64 to 37 gigabytes. Together with Figure 9a it shows the gain holds across lengths from 128 to 1024 tokens.
Guide
OPT-66B in FasterTransformer, where the comparison changes: FP16 needs two GPUs while SmoothQuant fits on one. Latency is essentially equal, 490 against 489 milliseconds at length 1024, and memory drops from 139 to 74 gigabytes. Halving the hardware at the same speed is a different kind of win from raw speed-up.
Guide
OPT-175B in FasterTransformer. SmoothQuant on four GPUs beats FP16 on eight, 720 against 848 milliseconds at length 1024, while memory falls from 389 to 200 gigabytes. Half the GPUs and still faster is the strongest serving result in the figure set, and it anticipates the 530 billion parameter result in Table 10.
Guide
LAMBADA accuracy of OPT-175B as the migration strength alpha sweeps from 0.1 to 0.9, with separate lines for weight-only, activation-only and full eight-bit quantization. When alpha is small, outliers stay in the activations and anything with eight-bit activations collapses to zero. When alpha is large, the weights become too hard and anything with eight-bit weights collapses. Only 0.4 to 0.6 keeps W8A8 near the FP16 level of 74.7 percent. The shape is redrawn from the plot.
§7Results
Guide
Average accuracy over seven zero-shot tasks for OPT-175B, from Table 3. Naive W8A8, ZeroQuant and Outlier Suppression all fall to about thirty six percent, essentially random. LLM.int8 and all three SmoothQuant settings stay within half a point of FP16's 66.9 percent. The difference is that SmoothQuant gets there with pure eight-bit kernels, which is the accuracy half of the paper's claim.
Guide
Latency for OPT-13B and OPT-30B at two sequence lengths, from Table 11. Coarser activation scaling is faster: per-token dynamic, O1, is slowest of the three, per-tensor dynamic, O2, is quicker, and per-tensor static, O3, is quickest. All three beat FP16, while LLM.int8 is slower than FP16 in three of the four cases. Since accuracy barely differs between O1 and O3, the static setting is the natural default.
Table 1 — activation granularity (OPT, avg of WinoGrande, HellaSwag, PIQA, LAMBADA)
| Model size (OPT-) | 6.7B | 13B | 30B | 66B | 175B |
|---|---|---|---|---|---|
| FP16 | 64.9% | 65.6% | 67.9% | 69.5% | 71.6% |
| INT8 per-tensor | 39.9% | 33.0% | 32.8% | 33.1% | 32.3% |
| INT8 per-token | 42.5% | 33.0% | 33.1% | 32.9% | 31.7% |
| INT8 per-channel (not GEMM-compatible) | 64.8% | 65.6% | 68.0% | 69.4% | 71.4% |
Guide
Table 1 tests which activation granularity keeps OPT accurate. From 13 billion parameters up, per-tensor and per-token eight-bit activations fall to about thirty three percent, while per-channel scaling matches FP16 within about two tenths of a point at every size. The catch, marked in the caption, is that per-channel activation scales do not fit an integer matrix multiply. This table is the evidence behind P2 and the motivation for smoothing.
Table 2 — quantization settings
| Method | Weight | Activation |
|---|---|---|
| W8A8 | per-tensor | per-tensor dynamic |
| ZeroQuant | group-wise | per-token dynamic |
| LLM.int8() | per-channel | per-token dynamic + FP16 |
| Outlier Suppression | per-tensor | per-tensor static |
| SmoothQuant-O1 | per-tensor | per-token dynamic |
| SmoothQuant-O2 | per-tensor | per-tensor dynamic |
| SmoothQuant-O3 | per-tensor | per-tensor static |
Guide
Table 2 defines the baselines and the three SmoothQuant settings compared in every result. All SmoothQuant variants use per-tensor weights; they differ only in the activations, going from per-token dynamic in O1, to per-tensor dynamic in O2, to per-tensor static in O3. Moving from O1 to O3 is cheaper at run time. Note that LLM.int8 keeps some activations in FP16, which is why it is accurate but slow.
Table 3 — OPT-175B, 7 zero-shot tasks + WikiText
| OPT-175B | LAMBADA | HellaSwag | PIQA | WinoGrande | OpenBookQA | RTE | COPA | Average ↑ | WikiText ↓ |
|---|---|---|---|---|---|---|---|---|---|
| FP16 | 74.7% | 59.3% | 79.7% | 72.6% | 34.0% | 59.9% | 88.0% | 66.9% | 10.99 |
| W8A8 | 0.0% | 25.6% | 53.4% | 50.3% | 14.0% | 49.5% | 56.0% | 35.5% | 93080 |
| ZeroQuant | 0.0%* | 26.0% | 51.7% | 49.3% | 17.8% | 50.9% | 55.0% | 35.8% | 84648 |
| LLM.int8() | 74.7% | 59.2% | 79.7% | 72.1% | 34.2% | 60.3% | 87.0% | 66.7% | 11.10 |
| Outlier Suppression | 0.00% | 25.8% | 52.5% | 48.6% | 16.6% | 53.4% | 55.0% | 36.0% | 96151 |
| SmoothQuant-O1 | 74.7% | 59.2% | 79.7% | 71.2% | 33.4% | 58.1% | 89.0% | 66.5% | 11.11 |
| SmoothQuant-O2 | 75.0% | 59.0% | 79.2% | 71.2% | 33.0% | 59.6% | 88.0% | 66.4% | 11.14 |
| SmoothQuant-O3 | 74.6% | 58.9% | 79.7% | 71.2% | 33.4% | 59.9% | 90.0% | 66.8% | 11.17 |
Guide
Table 3 is the main accuracy result on OPT-175B across seven zero-shot tasks plus WikiText perplexity, where lower is better. Naive W8A8, ZeroQuant and Outlier Suppression collapse, with LAMBADA at zero and perplexity in the tens of thousands. SmoothQuant O3 averages 66.8 percent against 66.9 for FP16, with a perplexity of 11.17 against 10.99. The chart R1 above plots its average column.
Table 4 — three largest open LLMs
| Method | OPT-175B | BLOOM-176B | GLM-130B* |
|---|---|---|---|
| FP16 | 71.6% | 68.2% | 73.8% |
| W8A8 | 32.3% | 64.2% | 26.9% |
| ZeroQuant | 31.7% | 67.4% | 26.7% |
| LLM.int8() | 71.4% | 68.0% | 73.8% |
| Outlier Suppression | 31.7% | 54.1% | 63.5% |
| SmoothQuant-O1 | 71.2% | 68.3% | 73.7% |
| SmoothQuant-O2 | 71.1% | 68.4% | 72.5% |
| SmoothQuant-O3 | 71.1% | 67.4% | 72.8% |
Guide
Table 4 extends the test to the three largest open models of the time, OPT-175B, BLOOM-176B and GLM-130B. SmoothQuant stays within about one point of FP16 on all three, while baselines fail on OPT and GLM. BLOOM is milder, since even naive W8A8 keeps 64.2 percent. GLM uses a different task average, so its column should not be compared with the other two.
Table 5 — instruction-tuned OPT-IML-30B
| OPT-IML-30B | LAMBADA ↑ | WikiText ↓ |
|---|---|---|
| FP16 | 69.12% | 14.26 |
| W8A8 | 4.21% | 576.53 |
| ZeroQuant | 5.12% | 455.12 |
| LLM.int8() | 69.14% | 14.27 |
| Outlier Suppression | 0.00% | 9485.62 |
| SmoothQuant-O3 | 69.77% | 14.37 |
Guide
Table 5 checks an instruction-tuned model, OPT-IML-30B. The baselines fail again, with LAMBADA near zero and perplexities in the hundreds or thousands. SmoothQuant O3 reaches 69.77 percent LAMBADA, slightly above FP16, with perplexity 14.37 against 14.26. So the fix is not specific to base pretrained models.
Table 6 — LLaMA (WikiText-2 PPL, seq 512, per-token act., α=0.8)
| Wiki PPL ↓ | 7B | 13B | 30B | 65B |
|---|---|---|---|---|
| FP16 | 11.51 | 10.05 | 7.53 | 6.17 |
| W8A8 SmoothQuant | 11.56 | 10.08 | 7.56 | 6.20 |
Guide
Table 6 applies SmoothQuant to the original LLaMA family, with per-token activations and alpha set to 0.8. WikiText perplexity rises by only about 0.03 to 0.05 at every size, for example 11.56 against 11.51 for the 7 billion model. LLaMA outliers are less severe than OPT's, but the result shows the method carries over to a different architecture.
Table 7 — Llama-2, Falcon, Mistral, Mixtral
| Model | FP16 PPL | W8A8 SQ PPL | α |
|---|---|---|---|
| Llama-2-7B | 5.474 | 5.515 | 0.85 |
| Llama-2-13B | 4.950 | 4.929 | 0.85 |
| Llama-2-70B | 3.320 | 3.359 | 0.9 |
| Falcon-7B | 6.590 | 6.629 | 0.6 |
| Falcon-40B | 5.228 | 5.255 | 0.7 |
| Mistral-7B | 5.253 | 5.277 | 0.8 |
| Mixtral-8x7B | 3.842 | 3.893 | 0.8 |
Guide
Table 7 covers newer models: Llama-2, Falcon, Mistral and the mixture-of-experts Mixtral. W8A8 perplexity stays within about 0.05 of FP16 across the board. The alpha column matters most here: these models need 0.6 to 0.9, higher than OPT's one half, so alpha has to be tuned per model family rather than copied.
Table 8 — decoding stage (FasterTransformer)
| BS / SeqLen | FP16 ms | Ours ms | Speedup | FP16 GB | Ours GB | Saving |
|---|---|---|---|---|---|---|
| OPT-30B (1 GPU) | ||||||
| 1 / 512 | 422 | 314 | 1.35× | 57 | 30 | 1.91× |
| 1 / 1024 | 559 | 440 | 1.27× | 58 | 31 | 1.87× |
| 16 / 512 | 2488 | 1753 | 1.42× | 69 | 44 | 1.59× |
| 16 / 1024 | OOM | 3947 | – | OOM | 61 | – |
| OPT-175B (8 GPUs) | ||||||
| 1 / 512 | 426 | 359 | 1.19× | 44 | 23 | 1.87× |
| 1 / 1024 | 571 | 475 | 1.20× | 44 | 24 | 1.85× |
| 16 / 512 | 2212 | 1628 | 1.36× | 50 | 30 | 1.67× |
| 16 / 1024 | 4133 | 3231 | 1.28× | 56 | 37 | 1.52× |
Guide
Table 8 measures the decoding stage, where tokens are generated one at a time, in FasterTransformer. SmoothQuant is 1.19 to 1.42 times faster than FP16 and saves 1.5 to 1.9 times the memory, and at batch 16 with length 1024 it runs where FP16 is out of memory. Speed-ups are smaller than in the prompt stage because decoding is limited more by memory traffic than by arithmetic.
Table 9 — MT-NLG 530B accuracy
| LAMBADA | HellaSwag | PIQA | WinoGr. | Avg | |
|---|---|---|---|---|---|
| FP16 | 76.6% | 62.1% | 81.0% | 72.9% | 73.1% |
| INT8 | 77.2% | 60.4% | 80.7% | 74.1% | 73.1% |
Guide
Table 9 shows that SmoothQuant scales to MT-NLG, a 530 billion parameter model. The eight-bit model averages 73.1 percent across four tasks, identical to FP16, with small wins and losses on individual tasks. This is the largest model in the paper and the accuracy side of the serving result in Table 10.
Table 10 — serving MT-NLG 530B
| SeqLen | Prec. | #GPUs | Latency | Memory |
|---|---|---|---|---|
| 128 | FP16 | 16 | 232ms | 1040GB |
| INT8 | 8 | 253ms | 527GB | |
| 256 | FP16 | 16 | 451ms | 1054GB |
| INT8 | 8 | 434ms | 533GB | |
| 512 | FP16 | 16 | 838ms | 1068GB |
| INT8 | 8 | 839ms | 545GB | |
| 1024 | FP16 | 16 | 1707ms | 1095GB |
| INT8 | 8 | 1689ms | 570GB |
Guide
Table 10 is the serving result for MT-NLG 530B. Eight-bit weights and activations on eight GPUs, a single node, give about the same latency as FP16 on sixteen, for example 839 against 838 milliseconds at length 512, while memory roughly halves. Fitting the model in one node instead of two is the practical payoff.
Table 11 — latency per scheme (ms, batch 4)
| Model / SeqLen | 13B/256 | 13B/512 | 30B/256 | 30B/512 |
|---|---|---|---|---|
| FP16 | 152.6 | 296.3 | 343.0 | 659.9 |
| LLM.int8() | 237.1 | 371.5 | 387.9 | 654.9 |
| SmoothQuant-O1 | 124.5 | 243.3 | 246.7 | 490.7 |
| SmoothQuant-O2 | 120.5 | 235.1 | 240.2 | 478.3 |
| SmoothQuant-O3 | 112.1 | 223.1 | 227.6 | 458.4 |
Guide
Table 11 gives the exact PyTorch latencies behind chart R2, in milliseconds at batch four. Each step from O1 to O3 shaves a few percent, and O3 is fastest everywhere, for example 223.1 against 296.3 milliseconds for FP16 on OPT-13B at length 512. LLM.int8 is slower than FP16 except for a tie on OPT-30B at length 512.
Appendix A (text only): weight-only methods such as GPTQ dequantize to FP16 on the fly and shine at batch-1 generation (memory-bound); W8A8 wins in the context stage and with batching (compute-bound), and also shrinks the KV cache. The authors see the two as orthogonal (GPTQ-style weights + SmoothQuant activations → possibly W4A4).
§8Why it matters for this thesis
SmoothQuant → LTX-2.3 on OpenVINO / NNCF
- It is only needed for the INT8-activation path. Weight-only INT8/INT4 (
nncf.compress_weights) never quantizes activations, so outliers there are harmless and SmoothQuant does not apply. It matters when trying full W8A8 withnncf.quantize(..., model_type=nncf.ModelType.TRANSFORMER), where NNCF runs its SmoothQuant step before inserting FakeQuantize nodes (per-MatMul α viaAdvancedSmoothQuantParameters; default for MatMul is high, ~0.95 in recent releases — check the installed version and sweep it as in Fig. 10). - No custom kernels. Everything is plain ops: a per-channel Multiply (or a folded LayerNorm/linear) plus a rescaled weight constant, then OpenVINO's standard INT8 MatMul (VNNI/AMX on Xeon, XMX/DP4A on Arc). This is exactly the “off-the-shelf INT8 GEMM” argument of Eq. (2).
- Calibration must cover the diffusion timesteps. Static per-tensor activation scales (O3-style, what OpenVINO FakeQuantize uses) are tuned to calibration statistics; in a DiT the activation ranges drift with timestep and adaLN modulation, so the calibration set should sample prompts × several denoising steps, not just one step.
- Fold targets differ in a DiT. LTX-style blocks use adaLN (
LN(x)·(1+scale(t))+shift(t)), so \(1/\mathbf{s}\) cannot simply be folded into a static LayerNorm γ; NNCF's explicit Multiply node sidesteps this at a small element-wise cost. Attention BMMs and FFN inputs are the natural candidates (Fig. 6). - Why W8A8 can pay off for video. A video DiT processes thousands of latent tokens per step — the compute-bound “context stage” regime where the paper's speed-ups appear (Appendix A), whereas weight-only compression mainly saves bandwidth/memory. Compare both on Arc/CPU before choosing.
Guide
Use SmoothQuant only when trying full eight-bit activations for LTX-2.3; weight-only compression with nncf compress weights does not need it. With nncf quantize and the transformer model type, NNCF already applies smoothing, so sweep its alpha as in Figure 10 rather than trusting the default. Calibrate on several prompts times several denoising steps, expect explicit Multiply nodes around adaptive LayerNorm, and benchmark W8A8 against weight-only on Arc and CPU before choosing.
AWQ: Activation-aware Weight Quantization for On-Device LLM Compression and Acceleration
Only about 1% of weight channels really matter, and they are found by looking at the activations, not at the weights. AWQ protects them by multiplying those channels by a scale before 4-bit rounding (and dividing the activations by the same scale), so every weight stays in one simple INT4 format. The companion runtime TinyChat turns the 4× smaller weights into about 3× faster token generation on edge GPUs and CPUs.
- Format
- W4A16 / W3A16, g128
- Salient channels
- ~0.1–1%, by |activation|
- Search
- 1 scalar α, grid of 20
- Calibration
- 16 seqs ≈ enough (10× < GPTQ)
- Speed-up (TinyChat)
- 3.2–3.3× avg, up to 3.9×
- Llama-2-7B INT4 PPL
- 5.60 (FP16 5.47)
Reading guide
AWQ asks how to squeeze a large language model's weights down to four or three bits without retraining and without losing accuracy. Its answer: only about one percent of weight channels really matter, they are found by looking at activation sizes, and they are protected by scaling them up before rounding, so every weight stays in one simple INT4 format. The tab moves from a big picture diagram to the problem, the method and its kernels, every equation and figure, the result tables, and a thesis box. This is the fifth of sixteen papers and the last of the three language model foundations, after GPTQ and SmoothQuant. It is the most directly usable for the LTX-2.3 study, because NNCF offers AWQ as an option in INT4 weight compression. The diffusion papers that follow adapt these ideas to image and video transformers.
§0Before reading
To follow AWQ, three ideas are needed: what weight-only 4-bit storage with one scale per group of 128 weights looks like, what an "input channel" of a linear layer is and why a large activation there magnifies that weight's rounding error, and why generating text one token at a time is limited by memory traffic rather than arithmetic. AWQ is in the atlas because it is the method NNCF offers as its awq option for INT4 weight compression, the exact tool used on LTX-2.3 in this project.
Guide
Everything in AWQ is stored in one simple format, W four A sixteen with group size one twenty eight. Each run of one hundred twenty eight weights shares a single step size, and every weight becomes one of sixteen whole number levels. At run time those codes are multiplied back by the step size and the math happens in FP16, so the activations are never touched. Plain round to nearest is this recipe with no tricks, the baseline AWQ beats.
Guide
Each position of the input vector is a channel, and it multiplies one row of weights. Rounding gives every weight a similar small error, but in the output that error is multiplied by the input it meets. A few channels, shown in magenta, carry large inputs on almost every token, so errors on their weights do the most damage. AWQ calls these salient channels and finds them from average activation size, which is the whole idea behind the paper's name.
Guide
Speed-ups in this paper come from memory traffic, not arithmetic. When a chatbot generates text, each new token must read every weight once and does only about one multiply-add per weight, so the processor mostly waits for memory. Four times smaller weights mean roughly four times less waiting. A diffusion transformer step like LTX-2.3's handles thousands of tokens at once, closer to the context stage, so there INT4 weights mainly save memory.
Guide
AWQ is the fifth paper in the atlas and the last language model foundation. GPTQ showed four bit weights can work by correcting errors, and SmoothQuant showed outliers can be moved with a per-channel scale. AWQ uses that scaling for weight-only four bit, chooses it from activation statistics, and needs no backpropagation. Q-Diffusion comes next and brings timesteps into the picture. For this project, AWQ is the awq option in NNCF weight compression.
Terms used in this paper
- Weight-only quantization (W4A16, W3A16)
- Only the weights are stored in low precision (4 or 3 bits); activations stay FP16. Saves memory and bandwidth without needing integer activation kernels.
- Group size (g128)
- How many consecutive weights share one scale. Smaller groups follow the data more closely but store more scales; 128 is the common default and the one AWQ uses.
- RTN (round-to-nearest)
- The plain baseline: compute each group's scale from its largest value and round every weight to the nearest level. No calibration data.
- Salient channel
- An input channel whose activations are consistently large, so errors on its weights matter most. AWQ finds about 0.1 to 1 percent of them from activation averages.
- Calibration set
- A small batch of ordinary inputs run through the model only to measure statistics. AWQ uses a few samples from the Pile, a large public text dataset, and needs no labels or gradients.
- Perplexity (PPL), WikiText-2
- Perplexity measures how surprised a language model is by real text; lower is better. WikiText-2 is a standard set of Wikipedia articles used to compute it.
- Instruction-tuned and multimodal models
- Vicuna is a chat-tuned Llama; OpenFlamingo, VILA and LLaVA take images plus text. AWQ shows it works on them because it does not overfit the calibration data.
- Context vs. generation stage
- Context (prefill) reads the whole prompt in one pass; generation (decode) then produces one token per step, which is the slow, memory-bound part.
- Arithmetic intensity, roofline
- Arithmetic intensity is computation per byte moved from memory. A roofline plot shows whether a workload is limited by memory speed (low intensity) or by compute (high intensity).
- Kernel, kernel fusion
- A kernel is one compiled routine that runs on the GPU or CPU, such as a matrix multiply. Fusion merges several small ones so data stays on chip instead of going back to memory.
- TinyChat
- The authors' own inference engine for AWQ models, with kernels that unpack INT4 weights inside the matrix multiply. It is the source of the reported speed-ups.
- RTX 4090, RTX 4070 laptop
- NVIDIA consumer GPUs: a desktop card and a laptop chip (the paper's has 8 GB of memory). Used to show speed on ordinary PCs.
- Jetson Orin
- NVIDIA's embedded computer for robots and edge devices, with CPU and GPU sharing one memory. The paper's main "on-device" GPU.
- Raspberry Pi 4B
- A small, cheap single-board computer with an ARM CPU. The paper runs a 7B model on its CPU to show deployment on very weak hardware.
Guide
These are the terms the paper uses without explaining. The most important are weight-only quantization with group size one twenty eight, salient channels, and the calibration set, a few text samples used only to measure activation sizes. Perplexity on WikiText-2 is the main accuracy score, where lower is better. The hardware names, RTX 4090, Jetson Orin and Raspberry Pi, mark the range of devices from desktop GPU down to a tiny ARM computer.
§2Big picture
Guide
The whole paper fits in these two panels. On the left, plain round to nearest gives every weight the same rounding error, but that error is multiplied by the input, so channels with large activations hurt the most. Keeping them in FP16 fixes accuracy but mixes formats, which is slow. On the right, AWQ multiplies those weights by a scale s and divides the input by s, so the product is unchanged while the salient error shrinks by about one over s, and all weights stay INT4.
Error from rounding a weight is multiplied by its input activation, so channels with big activations dominate the error. AWQ scales those weight channels up (smaller relative rounding error) and the activations down by the same factor, which is folded into the previous op. No retraining, no mixed precision, no custom data format.
§3The problem
Guide
A handful of input channels dominate the error. The left chart is illustrative: each channel's error is roughly activation size times step size times rounding error, and about one percent stand out. The right bars are real, from Table 1, for OPT six point seven B at three bits. Keeping one percent in FP16 chosen by activation brings perplexity from 23.54 to 11.39, near FP16's 10.86; choosing by weight size or at random barely helps. The method is built on this observation.
Guide
Here are the three existing options AWQ wants to beat, each with its weakness. Plain round to nearest at three or four bits wrecks small models, for example OPT one point three B goes from a perplexity of 14.62 to 119. Keeping one percent in FP16 is accurate but gives an irregular layout with no fast kernel. GPTQ's second order reconstruction can overfit its calibration data, costing 2.3 to 4.9 perplexity when tested on a different domain. AWQ aims for accuracy, one uniform format, and robustness at once.
- Plain RTN collapses at 3 bits (OPT-1.3B: PPL 14.62 → 119).
- Keeping the 1% of channels with large activations in FP16 recovers most of it; picking by weight norm is no better than random (Table 1).
- But mixed FP16/INT storage needs irregular kernels; GPTQ-style reconstruction can overfit the calibration domain.
- On-device decoding (batch 1) is memory-bound: weight bytes, not FLOPs, set the speed (Fig. 3).
§4Method
A. Activation-aware scaling search
Guide
The method has two halves. Offline, a small slice of the Pile runs through the model, the average activation size per input channel is measured, and a grid search over alpha picks the scale with the lowest layer output error; clipping is then tuned. At inference, the inverse scale is folded into the previous operation, such as a LayerNorm, so the stored INT4 weights feed an ordinary uniform matrix multiply. Equations four and five are the loss and search shown here.
- Run a small generic calibration set (Pile) through the model; cache each linear layer's input X.
- Per input channel, compute the average activation magnitude sX.
- For α on a 20-point grid in [0,1], set s = sXα, quantize W·diag(s) (INT4/INT3, g128) and measure the output error ‖Q(W·diag(s))(X/s) − WX‖; keep the best α.
- Apply weight clipping chosen to minimise quantization MSE.
- Fold diag(s)−1 into the preceding operator; store uniform low-bit weights + FP16 group scales. No backprop, no weight reconstruction.
Guide
The procedure is deliberately cheap. It only needs forward passes on a small generic calibration set, to cache each layer's inputs and measure how large each channel's activations are. From that it tries twenty strengths of scaling, quantizes, and keeps whichever gives the smallest output error. Clipping is then set, the inverse scale disappears into the previous operator, and plain low bit weights are stored with FP16 group scales. There is no backpropagation and no weight reconstruction, which is why AWQ generalizes well across domains.
Guide
Scaling up the salient channels is not free, which is why AWQ searches rather than fixing s. In the left chart the indigo curve, the salient error factor, keeps falling as s grows, while the rust curve, the share of groups whose maximum and so step size changes, keeps rising and hurts the other weights. The right chart shows perplexity for OPT six point seven B is best at s equals two, 11.92, and worse again at four. Equation five's alpha search finds this balance automatically per layer.
Guide
The tab reconstructs this box from sections 3.2 and 5.1, since the paper has none. For each linear layer it measures the mean activation size per input channel, then tries twenty values of alpha from zero to one, using the statistic raised to alpha as the scale, quantizing the scaled weights and measuring output error against full precision. The best scale wins, clipping is applied, the inverse scale is folded into the preceding operator, and weights are stored at four or three bits in groups of 128.
B. TinyChat runtime
Guide
Fewer bytes only become speed if the kernel is built for it. There is no hardware instruction that multiplies INT4 by FP16, so TinyChat unpacks and dequantizes the weights inside the matrix multiply kernel, in registers, and never writes full precision weights back to memory. It also fuses small operations like LayerNorm and attention pieces into single kernels, because on an RTX 4090 each tiny FP16 kernel takes about as long as its launch overhead. In this project, the OpenVINO CPU and GPU plugins play this role.
§5Every equation
A group/block of weights \(\mathbf{w}\) applied to input \(\mathbf{x}\), and its weight-quantized counterpart (activations stay FP16).
Guide
This sets up the notation. y equals w times x is a normal linear operation, where w is a group of weights and x is the input. The second form, y equals Q of w times x, is the same operation with only the weights quantized, Q being the quantizer, while the activations x stay in FP16. This is weight only quantization, the W4A16 setting that the rest of the paper and NNCF's INT4 compression use.
Symmetric absmax round-to-nearest with \(N\) bits; \(\Delta\) is the step size of the group (g128 in the paper).
Guide
Equation one is the basic quantizer. Q of w equals delta times the rounded value of w divided by delta, so weights are snapped to a grid of evenly spaced levels. Delta, the step size, is the largest absolute weight in the group divided by two to the power N minus one, where N is the number of bits. Because delta depends on the group maximum, a group of 128 weights shares one step size, which is the detail equation two exploits.
Scale one weight \(w\) up by \(s\gt 1\) and its input \(x\) down by \(s\): mathematically the same product; \(\Delta'\) is the new group step size.
Guide
Equation two is the key trick. Multiply one weight w by a scale s greater than one, and divide its input x by the same s. Mathematically the product is unchanged, but now the weight is rounded at a larger size, so after dividing by s its rounding error is relatively smaller. Delta prime is the group's new step size, which may differ slightly from delta if the scaled weight becomes the group maximum.
Empirical facts: rounding error is ~uniform on [0, 0.5] (mean 0.25); scaling one element rarely changes the group max; \(\Delta\), \(x\) are FP16 (no error).
Guide
These are two empirical facts that make the argument work. First, the rounding error of a single weight is spread roughly evenly between zero and one half, so its average is about 0.25 and does not depend on scaling. Second, scaling one weight rarely changes the group maximum, so delta prime is about equal to delta. The step size and the input are FP16 and add no error. Equation three and the ratio that follows rely on both facts.
Output error before and after scaling; the error is proportional to \(|x|\), which is why large-activation channels are salient.
Guide
Equation three writes out the output error before and after scaling. Before, it is delta times the rounding error of w over delta, times x. After, it is delta prime times the rounding error of the scaled weight, times x, times one over s. The first line shows why saliency comes from activations: the error grows with the size of x, so channels with large inputs contribute most. The second line shows the extra factor one over s that scaling adds.
With \(\Delta'\approx\Delta\) and \(s\gt 1\), the salient weight's relative error shrinks by ~\(1/s\); non-salient channels in the group are amplified by \(\Delta'/\Delta\) (Table 2).
Guide
Dividing the two errors gives the ratio: new error over original error equals delta prime over delta, times one over s. With delta prime about equal to delta and s greater than one, the salient weight's error shrinks by roughly one over s. The catch is the other weights in the group, which see their step size grow by delta prime over delta. Table 2 measures exactly this trade off.
Per-input-channel scale that minimizes a layer's output error after quantization; \(\mathbf{X}\) = cached calibration inputs; \(\operatorname{diag}(\mathbf{s})^{-1}\) is fused into the previous operator.
Guide
Equation four turns the idea into an optimization. The best scale vector s star is the one that minimizes L of s, the size of the difference between the quantized layer output and the full precision output W times X. Here W is the weight matrix, X is the cached calibration input, and diag of s is a diagonal matrix of per input channel scales whose inverse is folded into the previous operator. Because Q is not differentiable, the paper solves it by the simple search in equation five.
Search space: \(\mathbf{s_X}\) = per-channel average activation magnitude; one scalar \(\alpha\in[0,1]\) (grid of 20) trades salient vs non-salient protection (0 = no scaling).
Guide
Equation five shrinks the search to one number. The scale is s X raised to the power alpha, where s X is the average activation size per input channel. Alpha between zero and one sets how strongly salient channels are protected: zero means no scaling, one means scaling fully by activation size. The best alpha is found by trying twenty grid points and keeping the one with the lowest loss from equation four.
Roofline numbers (§4.1, RTX 4090): below 165 FLOP/Byte a workload is memory-bound, so cutting weight bytes 4× raises attainable throughput ~4×.
Guide
These roofline numbers explain the speed up. Arithmetic intensity is operations done per byte loaded. On an RTX 4090, with 165 TFLOPS and one terabyte per second, anything below 165 operations per byte is memory bound. FP16 token generation sits near one, reaching about one TFLOPS; four bit weights raise it to about four, so throughput rises about four times. A video diffusion transformer processes many tokens at once and sits much higher, so expect a smaller latency gain.
Packing rule (§4.2): a 128-bit NEON register holds 16 bytes, so pairs are (wi, wi+16); on GPUs 8 weights are packed as w{0,2,4,6,1,3,5,7}.
Guide
This is the packing rule from section 4.2. For a SIMD register of two to the n bits, weights that share a byte should be one eighth of two to the n positions apart. For a 128 bit ARM NEON register this means pairing weight i with weight i plus 16, and on GPUs eight weights are stored in the interleaved order zero, two, four, six, one, three, five, seven. It is an engineering detail that makes unpacking cheap; Figure 4 illustrates it.
§6Every figure
Guide
Figure one presents the paper as two parts working together. AWQ, the algorithm, compresses an FP16 language model to four bit weights, and TinyChat, the inference system, runs it on edge devices such as a Jetson Orin Nano, a Raspberry Pi, an Apple M1 MacBook, and an AI PC. The claimed payoff is three to four times faster than FP16. This is a schematic redraw, so read it as an overview, not a result.
Guide
Figure two walks through the three options on a small weight matrix, OPT six point seven B at three bits with group size 128. Panel a is plain rounding, with a perplexity of 43.2 in this figure. Panel b keeps the row whose activation column is large in FP16, bringing perplexity to 13.0 but mixing formats. Panel c instead scales that row before quantizing, darker meaning a larger scale, and also reaches 13.0 while keeping one uniform INT3 format. That match is the paper's central claim.
Guide
Figure three argues that weight only four bit quantization pays off because generation is memory bound. Panel a shows generating 20 tokens takes 310 milliseconds against 10 for a 200 token prompt on Llama two seven B. Panel b places generation far left on the roofline, at an arithmetic intensity near one, and four bit weights move it to about four. Panel c shows weights outweigh activations by 79 times in attention and 1700 times in the feed forward layers. Equation nine gives the same numbers.
Guide
Figure four shows how TinyChat unpacks four bit weights quickly on an ARM CPU. Offline, 32 weights are reordered so each byte holds weight i in the low half and weight i plus 16 in the high half. At runtime one AND with a mask gives the first sixteen, and one shift plus AND gives the other sixteen, so three SIMD instructions unpack 32 weights. The latency chart on the right drops, for example, from 248 to 215 microseconds. It is the concrete case of equation ten.
Guide
Figure five tests instruction tuned chat models, where perplexity says little. Three bit Vicuna answers are compared with their FP16 originals on 80 questions, judged by GPT-4. The bars count how often the quantized model wins, ties, or loses. AWQ loses least: for Vicuna seven B it has 23 wins and 52 losses, against 71 losses for plain rounding and 75 for GPTQ. This supports the claim that AWQ keeps behaviour, not just perplexity.
Guide
Figure six is a qualitative example on LLaVA thirteen B, a vision language model, at four bits with group size 128. Asked to explain a meme of chicken nuggets arranged like a world map, the plain rounding model hallucinates tiny pictures of Earth on the food, while the AWQ model gets the joke that the nuggets look like Earth from space. The photo is replaced by a description here. It shows AWQ carries over to multimodal models without special tuning.
Guide
Figure seven repeats the multimodal story with image captioning on OpenFlamingo nine B, four shot, at four bits. The photos are described in words. Plain rounding produces wrong content, like a toy airplane said to be flying or a man holding a baby elephant, while AWQ's captions match the images. Table 6 gives the matching numbers, with AWQ losing only about one CIDEr point at 32 shots.
Guide
Figure eight shows AWQ needs little calibration data and does not overfit it. Panel a plots perplexity against the number of calibration sequences for OPT six point seven B at three bits: AWQ with 16 sequences already beats GPTQ with 192, about ten times less data; the curve shape is redrawn. Panel b calibrates on one Pile subset and tests on another: AWQ loses only 0.5 to 0.6 perplexity off domain, GPTQ loses 2.3 to 4.9. This backs the robustness claim from the problem section.
Guide
Figure nine is the system result, in tokens per second at batch one with 200 generated tokens. On an RTX 4090, kernel fusion alone takes Llama two seven B from 52 to 62 tokens per second, and AWQ four bit kernels add another 3.1 times, to 194. Speed ups reach 3.9 times on the 4090 and 3.5 times on Jetson Orin. On an eight gigabyte laptop GPU, FP16 does not even fit a seven B model, while AWQ runs Llama two thirteen B at 33 tokens per second.
Guide
Figure ten compares TinyChat with other four bit edge runtimes. Panel a, on Jetson Orin, shows 1.2 to 3.0 times speed ups on Llama models, for example 39.1 against 22.5 tokens per second for llama.cpp on Llama two seven B, and at least 2.6 times over AutoGPTQ on models that other runtimes do not support. Panel b shows that even a Raspberry Pi 4 runs seven B models at 0.7 tokens per second. The point is that the system side matters as much as the algorithm.
§7Results
| PPL ↓ | FP16 | RTN w3-g128 | act 0.1% | act 1% | act 3% | W 0.1% | W 1% | W 3% | rand 0.1% | rand 1% | rand 3% |
|---|---|---|---|---|---|---|---|---|---|---|---|
| OPT-1.3B | 14.62 | 119.00 | 25.03 | 16.91 | 16.68 | 108.71 | 98.55 | 98.08 | 119.76 | 109.38 | 61.49 |
| OPT-6.7B | 10.86 | 23.54 | 11.58 | 11.39 | 11.36 | 23.41 | 22.37 | 22.45 | 23.54 | 24.23 | 24.22 |
| OPT-13B | 10.13 | 46.04 | 10.51 | 10.43 | 10.42 | 46.07 | 48.96 | 54.49 | 44.87 | 42.00 | 39.71 |
Guide
Table one is the evidence for activation aware saliency. At three bits, keeping 0.1, 1, or 3 percent of channels in FP16 helps only when channels are chosen by activation size. For OPT six point seven B, one percent by activation gives 11.39 against 23.54 for plain rounding, while one percent by weight size gives 22.37 and random gives 24.23. OPT one point three B shows the same pattern more dramatically. Figure two's bars are drawn from this table.
| OPT-6.7B | s=1 | s=1.25 | s=1.5 | s=2 | s=4 |
|---|---|---|---|---|---|
| proportion of Δ′≠Δ | 0% | 2.8% | 4.4% | 8.2% | 21.2% |
| average Δ′/Δ | 1 | 1.005 | 1.013 | 1.038 | 1.213 |
| average (Δ′/Δ)·(1/s) | 1 | 0.804 | 0.676 | 0.519 | 0.303 |
| Wiki-2 PPL | 23.54 | 12.87 | 12.48 | 11.92 | 12.36 |
Guide
Table two measures the cost of scaling from equation six. As s grows from one to four, the share of groups whose step size changes rises from zero to 21.2 percent, and the average step size ratio grows to 1.213. The combined error factor for salient weights still falls, to 0.303, but perplexity is best at s equals two, 11.92, and gets worse at four, 12.36. Too much scaling hurts the other weights, which motivates the alpha search.
| OPT (PPL ↓) | 1.3B | 2.7B | 6.7B | 13B | 30B |
|---|---|---|---|---|---|
| FP16 | 14.62 | 12.47 | 10.86 | 10.13 | 9.56 |
| RTN | 119.47 | 298.00 | 23.54 | 46.04 | 18.80 |
| 1% FP16 | 16.91 | 13.69 | 11.39 | 10.43 | 9.85 |
| s=2 | 18.63 | 14.94 | 11.92 | 10.80 | 10.32 |
| AWQ | 16.32 | 13.58 | 11.39 | 10.56 | 9.77 |
Guide
Table three compares four strategies on OPT models at three bits. Plain rounding collapses, for example 298 perplexity on two point seven B. Keeping one percent in FP16 and full AWQ are close, AWQ even better on the smallest three models and slightly behind on thirteen B, but AWQ does it with a uniform format. A fixed scale of two is clearly worse than AWQ everywhere, so the searched per layer scale earns its place.
| Bits | Method | L2-7B | L2-13B | L2-70B | L-7B | L-13B | L-30B | L-65B |
|---|---|---|---|---|---|---|---|---|
| FP16 | – | 5.47 | 4.88 | 3.32 | 5.68 | 5.09 | 4.10 | 3.53 |
| INT3 | RTN | 6.66 | 5.52 | 3.98 | 7.01 | 5.88 | 4.88 | 4.24 |
| INT3 | GPTQ | 6.43 | 5.48 | 3.88 | 8.81 | 5.66 | 4.88 | 4.17 |
| INT3 | GPTQ-R | 6.42 | 5.41 | 3.86 | 6.53 | 5.64 | 4.74 | 4.21 |
| INT3 | AWQ | 6.24 | 5.32 | 3.74 | 6.35 | 5.52 | 4.61 | 3.95 |
| INT4 | RTN | 5.73 | 4.98 | 3.46 | 5.96 | 5.25 | 4.23 | 3.67 |
| INT4 | GPTQ | 5.69 | 4.98 | 3.42 | 6.22 | 5.23 | 4.24 | 3.66 |
| INT4 | GPTQ-R | 5.63 | 4.99 | 3.43 | 5.83 | 5.20 | 4.22 | 3.66 |
| INT4 | AWQ | 5.60 | 4.97 | 3.41 | 5.78 | 5.19 | 4.21 | 3.62 |
Guide
Table four is the main accuracy result on LLaMA and Llama two, from seven to seventy billion parameters, reported as WikiText two perplexity where lower is better. AWQ has the lowest perplexity in every column at both four and three bits, beating plain rounding, GPTQ, and GPTQ with reordering. The gaps are largest at three bits; at four bits all methods are close to FP16. Chart A plots the three bit gaps.
| Wikitext2 PPL ↓ | Mixtral-8x7B | Mistral-7B |
|---|---|---|
| FP16 | 5.94 | 4.14 |
| INT4-g128 | 6.05 | 4.30 |
| INT3-g128 | 6.52 | 4.83 |
Guide
Table five checks newer architectures: Mistral seven B, which uses grouped query attention, and Mixtral eight by seven B, a mixture of experts model. At four bits, perplexity rises only by about 0.1 to 0.16 over FP16, and at three bits by roughly 0.6 to 0.7. The takeaway is that AWQ does not depend on a particular transformer layout, which is encouraging for other architectures such as a diffusion transformer.
| Method | MBPP p@1 | MBPP p@10 | GSM8K 7B | 13B | 70B |
|---|---|---|---|---|---|
| FP16 | 38.53 | 49.77 | 13.87 | 26.16 | 56.41 |
| RTN | 37.51 | 48.49 | 11.07 | 21.23 | 53.98 |
| GPTQ | 31.97 | 44.75 | 12.13 | 24.26 | 56.03 |
| AWQ | 40.64 | 49.25 | 13.57 | 25.25 | 56.40 |
Guide
Table eight, labelled so in the paper, tests harder tasks: code generation on MBPP with CodeLlama seven B, and math word problems on GSM8K with Llama two, both at four bits, where higher is better. AWQ stays close to FP16 and generally ahead of plain rounding and GPTQ; on MBPP pass at one it even slightly exceeds FP16, 40.64 against 38.53. GPTQ drops noticeably on code. This shows the method preserves reasoning ability, not only perplexity.
| Bits | Method | 0-shot | 4-shot | 8-shot | 16-shot | 32-shot | Δ(32-shot) |
|---|---|---|---|---|---|---|---|
| FP16 | – | 63.73 | 72.18 | 76.95 | 79.74 | 81.70 | – |
| INT4 | RTN | 60.24 | 68.07 | 72.46 | 74.09 | 77.13 | −4.57 |
| INT4 | GPTQ | 59.72 | 67.68 | 72.53 | 74.98 | 74.98 | −6.72 |
| INT4 | AWQ | 62.57 | 71.02 | 74.75 | 78.23 | 80.53 | −1.17 |
| INT3 | RTN | 46.07 | 55.13 | 60.46 | 63.21 | 64.79 | −16.91 |
| INT3 | GPTQ | 29.84 | 50.77 | 56.55 | 60.54 | 64.77 | −16.93 |
| INT3 | AWQ | 56.33 | 64.73 | 68.79 | 72.86 | 74.47 | −7.23 |
Guide
Table six gives the numbers behind the captioning figure, COCO CIDEr scores for OpenFlamingo nine B with only the language part quantized, higher being better. At four bits AWQ loses 1.17 points at 32 shots, against 4.57 for plain rounding and 6.72 for GPTQ. At three bits the gap widens for everyone, but AWQ loses 7.23 versus about 17 for the others. Chart B plots the four bit rows.
| Model | VQAv2 | GQA | VizWiz | SQA-I | VQA-T | POPE | MME | MMB | SEED | llava-bench | MM-Vet |
|---|---|---|---|---|---|---|---|---|---|---|---|
| VILA-7B | 80.3 | 63.1 | 59.6 | 68.0 | 62.6 | 86.3 | 1489.4 | 69.8 | 61.7 | 75.2 | 35.1 |
| VILA-7B-AWQ | 80.1 | 63.0 | 57.8 | 68.0 | 61.9 | 85.3 | 1486.3 | 68.8 | 61.3 | 75.8 | 35.9 |
| VILA-13B | 80.5 | 63.6 | 63.1 | 70.5 | 64.0 | 86.3 | 1553.6 | 73.8 | 62.8 | 78.3 | 42.6 |
| VILA-13B-AWQ | 80.4 | 63.6 | 63.0 | 71.2 | 63.5 | 87.0 | 1552.9 | 73.6 | 62.2 | 77.6 | 42.0 |
Guide
Table seven checks the VILA vision language models on eleven benchmarks at four bits. Each AWQ row sits within about a point of its FP16 row, sometimes above it, for example 87.0 against 86.3 on POPE for VILA thirteen B. The authors call this essentially lossless. For the thesis it is the closest evidence in this paper that four bit weights can keep multimodal quality.
| OPT | 1.3B | 2.7B | 6.7B | 13B | 30B |
|---|---|---|---|---|---|
| FP16 | 14.62 | 12.47 | 10.86 | 10.13 | 9.56 |
| RTN | 10476 | 193210 | 7622 | 17564 | 8170 |
| GPTQ | 46.67 | 28.15 | 16.65 | 16.74 | 11.75 |
| AWQ + GPTQ | 35.71 | 25.70 | 15.71 | 13.25 | 11.38 |
Guide
Table nine pushes to two bits with group size 64 on OPT, where plain rounding produces perplexities in the thousands or more. GPTQ recovers usable models, and combining AWQ scaling with GPTQ is better still, for example 13.25 against 16.74 on thirteen B. The point is that AWQ is orthogonal to GPTQ, so the two can be stacked, just as NNCF allows AWQ to be enabled together with its GPTQ or scale estimation options.
| Model | Precision | A100 | 4090 | Orin |
|---|---|---|---|---|
| VILA-7B | FP16 | 81.6 | 58.5 | 11.5 |
| VILA-7B-AWQ | W4A16 | 155.3 | 168.1 | 35.6 |
| VILA-13B | FP16 | 48.5 | OOM | 6.1 |
| VILA-13B-AWQ | W4A16 | 102.1 | 99.0 | 17.5 |
Guide
Table ten reports TinyChat throughput for VILA in tokens per second. Four bit AWQ roughly doubles or triples speed: VILA seven B goes from 58.5 to 168.1 on the RTX 4090 and from 11.5 to 35.6 on Jetson Orin. VILA thirteen B does not fit the 4090 in FP16 but runs at 99 tokens per second with AWQ. Memory savings can decide whether a model runs at all, which matters for Arc GPUs and laptops.
Guide
Chart A plots Table four's three bit rows as degradation, each bar being quantized perplexity minus FP16 perplexity, so shorter is better. Within each model the four bars are plain rounding, GPTQ, GPTQ with reordering, and AWQ, and AWQ is lowest in every group. The standout is GPTQ without reordering on LLaMA seven B, which loses 3.13 points, showing how fragile reconstruction can be.
Guide
Chart B puts speed and quality side by side for multimodal models. The left bars, from Table ten, show TinyChat with AWQ lifting VILA seven B up to 3.1 times on Jetson Orin and letting VILA thirteen B fit on a 24 gigabyte 4090. The right lines, from Table six, show AWQ's captioning score tracking FP16 across all shot counts, 1.17 CIDEr behind at 32 shots versus 4.57 for plain rounding. Together they summarize the paper's promise: about three times faster, nearly no quality loss.
§8Why it matters for this thesis
AWQ → LTX-2.3 on OpenVINO / NNCF
- Directly available:
nncf.compress_weights(model, mode=INT4_SYM|INT4_ASYM, group_size=128, ratio=…, dataset=calib, awq=True)runs this algorithm on an OpenVINO IR. It needs a calibration dataset (activation statistics), but no training and no custom kernels: the OpenVINO CPU/GPU plugins dequantize INT4 weights inside their own matmul kernels, i.e. they play TinyChat's role. - Folding constraint: the inverse scale diag(s)−1 must be absorbed by a preceding op. NNCF only applies AWQ where it finds such a pattern (e.g. a MatMul/Multiply feeding the next MatMul, as in gated MLPs); other layers get plain data-aware INT4. Check which DiT linears (attention out-projection, FFN down-projection, adaLN) are actually matched.
- Calibration for a diffusion transformer: activation magnitudes in a DiT change with the denoising timestep and with prompt/audio-video modality. Build the NNCF calibration set from latents sampled across many timesteps and prompts, otherwise sX reflects only one noise level. AWQ's low data need (Fig. 8) keeps this cheap.
- Speed expectation differs from LLMs: AWQ's 3× speed-up relies on batch-1 decoding being memory-bound (arithmetic intensity ≈1, Fig. 3). A video DiT processes thousands of latent tokens per step, so it is mostly compute-bound: INT4 weight-only will mainly cut memory and model size (fits Arc / laptop RAM), with smaller latency gains. Measure it, and compare against INT8 weight+activation (W8A8) for compute-bound layers.
- Mixed precision in practice: use AWQ INT4 for the bulk of linears and keep sensitive layers (first/last projections, timestep/text embedding, adaLN modulation) in INT8 or FP16 via NNCF's
ratio/ ignored scope. AWQ can be combined with NNCF's scale estimation or GPTQ options, just as the paper combines AWQ with GPTQ (Table 9).
Guide
Use AWQ through NNCF by calling compress weights with an INT4 mode, group size 128, a calibration dataset, and awq set to true, then check which transformer linears it actually matched, since AWQ needs a preceding operation to absorb the inverse scale. Calibrate on many denoising timesteps and prompts, because activation sizes change with noise level. Expect mainly memory savings, since a video diffusion transformer is largely compute bound; compare against W8A8 and keep sensitive layers in INT8 or FP16.
Q-Diffusion: Quantizing Diffusion Models
Standard post-training quantization (PTQ) breaks on diffusion models for two reasons: the same U-Net sees very different activations at different denoising steps, and U-Net skip concatenations glue together channels with wildly different ranges. Q-Diffusion fixes the first with time-step-aware calibration (sample calibration inputs uniformly across all steps, then BRECQ/AdaRound block reconstruction) and the second with shortcut-splitting quantization (separate quantizers for the two concatenated halves). Result: 4-bit weights, 8-bit activations with near-FP quality, no training.
- Precision
- W4A8 (also W8A8, W4A32)
- CIFAR-10 W4A8 FID
- 4.93 vs 188.11 linear
- Max FID increase (W4A8)
- ≤ 2.34 over FP
- Calibration set
- 5 120 samples, every 20th step
- Models
- DDIM, LDM-4/8, Stable Diffusion v1.4
- Training needed
- None (data-free PTQ)
Reading guide
Q-Diffusion asks why ordinary post-training quantization, which works well on classifiers, falls apart on diffusion models, and how to fix it without any retraining. Its answer: calibrate on inputs sampled evenly across every denoising step, and give the two halves of each U-Net skip concatenation their own quantizers. With these two changes, four-bit weights and eight-bit activations, called W four A eight, stay within about 2.3 FID points of full precision, while naive quantization collapses. The tab starts with a big-picture drawing, then the two problems, the method with its algorithms, every equation and figure, the result tables, and a box on what this means for the thesis. Among the sixteen papers, this is the first of the diffusion-specific quantization group, after the general LLM methods GPTQ, SmoothQuant and AWQ, and it is the ancestor that PTQ4DiT, ViDiT-Q, SVDQuant and the later video methods build on.
§0Before reading
To follow this paper, three ideas are needed: a diffusion model makes an image by running the same network over many denoising steps, quantization uses a small calibration set to choose its scales, and a U-Net copies features through skip connections. Q-Diffusion is in the atlas because it was the first to make post-training quantization work on diffusion models, and its step-aware calibration recipe is what the thesis reuses when building the NNCF calibration set for LTX-2.3.
Guide
A diffusion model does not produce an image in one pass. It starts from pure noise and runs the same U-Net again and again, each time on its own previous output. The gold bars show the input range shrinking from about plus or minus 4.5 to plus or minus 1.8 as the picture appears. So a quantizer tuned at one step fits the other steps badly, which is the first problem Q-Diffusion solves.
Guide
Quantization needs a scale, and calibration is how it gets one. A few example inputs pass through the model, record the range of each tensor, and turn that range into a step size. W four A eight means four bit weights with sixteen levels and eight bit activations with two hundred and fifty six. If the calibration inputs give a range that is too wide, small values all round to zero.
Guide
A U-Net shrinks the image in an encoder, grows it back in a decoder, and copies encoder features across through skip connections. Inside a decoder block those copied features are concatenated with the deep features from below. In the paper the deep half reaches about plus or minus forty while the copied half stays near one, so one shared four bit scale wipes out the small half. That is the second problem the paper fixes.
Guide
GPTQ, SmoothQuant and AWQ quantize language models, which have no denoising steps. Q-Diffusion is the first paper in the atlas about diffusion models. It adds two things: calibration data drawn from every part of the denoising trajectory, and separate quantizers for the two halves of a skip concatenation. PTQ4DiT comes next and moves these ideas to diffusion transformers, the family LTX-2.3 belongs to. Its calibration recipe feeds directly into the NNCF setup.
Terms used in this paper
- Denoising step (timestep)
- One pass of the network in the sampling loop. Generation starts from pure noise at the highest step \(t=T\) and removes a little noise per step until \(t=0\) gives the image.
- DDPM and DDIM
- DDPM is the classic diffusion model and training recipe. DDIM is a faster sampler for the same trained network that needs far fewer steps; the paper samples its CIFAR-10 model with 100 DDIM steps.
- U-Net
- The convolutional network that predicts the noise in these models. An encoder shrinks the image, a decoder grows it back, and skip connections copy encoder features across to the decoder.
- Latent diffusion model (LDM)
- A diffusion model that works in the small latent space of an autoencoder instead of on pixels; a decoder turns the final latent into an image. LTX-2.3 is also a latent model.
- Stable Diffusion
- A widely used text-to-image latent diffusion model. The paper quantizes version 1.4 and generates 512 by 512 images from text prompts.
- Classifier-free guidance
- At each step the model runs twice, with and without the prompt, and the two noise predictions are mixed. This is why calibration stores both branches.
- Post-training quantization (PTQ)
- Converting a trained model to low-bit numbers without retraining it, using only a small set of example inputs. NNCF works this way.
- Calibration set
- The example inputs fed through the model during PTQ so the quantizer can measure value ranges and set its scales. Q-Diffusion builds it from the model's own intermediate steps, so no training data is needed.
- W4A8
- Weights stored with 4 bits (16 levels) and activations with 8 bits (256 levels). W4A32 means only the weights are quantized.
- BRECQ, AdaRound, LSQ
- The PTQ recipe the paper builds on. BRECQ tunes the quantized model one block at a time to match the full-precision block output; AdaRound learns whether each weight rounds up or down; LSQ learns the activation step sizes.
- FID
- Fréchet Inception Distance: compares feature statistics of generated and real images using an Inception network. Lower is better; it is the paper's main quality metric.
- Inception Score and CLIP score
- Inception Score rewards images that are clearly recognisable and varied (higher is better). CLIP score measures how well an image matches its text prompt (higher is better).
- CIFAR-10, LSUN, MS-COCO
- Benchmark datasets: CIFAR-10 has tiny 32 by 32 images in ten classes, LSUN Bedroom and Church are scene photos at 256 by 256, and MS-COCO captions provide the text prompts for Stable Diffusion.
- Bit operations (Bops)
- A hardware-free estimate of compute: the number of multiply-adds weighted by the bit widths used. The paper reports Bops and model size, not measured speed on any device.
Guide
These are the words the paper uses without explaining. The most important are post-training quantization, which compresses a trained model without retraining, the calibration set that sets the scales, and W4A8. For results, remember that FID compares generated and real images and lower is better, while CLIP score measures how well an image matches its prompt. Note that the paper reports model size and bit operations, not measured speed on hardware.
§2Big picture
Guide
Both of the paper's fixes fit in one picture. On top, the gold bars show how wide the U-Net's input range is at each denoising step: wide while the image is still noise, narrow near the end. Naive quantization calibrates on one step; Q-Diffusion samples every c-th step. At the bottom, a skip concatenation joins a large-range deep tensor with a small-range shallow one, so Q-Diffusion gives each half its own scale. Keep these two ideas in mind; everything below expands them.
Same weights, one quantized U-Net, reused at every step. Calibrate it on inputs from all steps, and never share one quantizer across a skip concatenation.
§3The problem
Guide
A small error at each step becomes a large error at the end. The same quantized U-Net, theta q, is applied T times, and each step takes the previous step's slightly wrong output as its input, so the magenta error band grows along the chain. In effect, a sampler with T steps acts like a network T times deeper. This is the first reason diffusion is harder to quantize than a classifier, and Figure 3 later measures the growth directly.
Guide
One scale cannot serve two very different populations. The input channels of a shortcut convolution come in two groups: deep features with a range of about 40 and shallow features with a range of about 1. A four-bit quantizer has only sixteen levels, so a scale sized for the deep half puts nearly all shallow values into bin zero, and their information is lost. This is the second problem, the one shortcut splitting in Equations 6 to 8 solves.
- Error accumulation: INT4 linear quantization gives MSE that climbs to ~100 by the last steps (Fig. 3).
- Timestep-varying activations: ranges shrink from about ±5 at t=100 to ±2 at t=1 (Fig. 5). Calibrating on only part of the trajectory raises W4 FID to 6–99 (Fig. 4).
- Shortcut outliers: input activations of DDIM shortcut convs are up to 200× larger than neighbouring layers (Fig. 6), because deep and shallow features are concatenated.
- Traditional calibration data (training images, random noise, ZeroQ-style synthesis) does not match the noisy intermediate xt the network really sees (Fig. 1a).
§4Method
Guide
Here is fix number one as a pipeline. First, run the full-precision model from random noise and keep samples from every c-th step, building a calibration set of 5,120 inputs. Second, apply the standard BRECQ recipe: reconstruct each block in turn so its quantized output matches the full-precision output, with AdaRound learning how to round each weight. Third, learn activation step sizes with LSQ. The novelty is the calibration data, not the optimiser, which is reused from earlier work.
Guide
Fix number two costs nothing at inference time. Concatenating along input channels means the convolution is really two partial matrix products added together: X1 times W1 plus X2 times W2. So each half can have its own activation scale and its own weight scale, s1 sized for X1 and s2 sized for X2, and the output is the same sum, with no extra operations. The drawing is the visual form of Equation 8.
- Pick sampler (DDIM 100 steps, LDM 200/500, PNDM 50 for SD) and calibration interval c, per-step count n (Table 4).
- Run the FP model from random noise; at every step with t mod c = 0 store n intermediate inputs xt (plus time embedding, and for SD both conditional and unconditional text features).
- Split every skip-concatenation conv into two quantizer pairs (Eqs. 6–8).
- Block-wise reconstruction (BRECQ): for each residual / transformer block, learn AdaRound rounding and weight clipping to minimise output MSE vs FP; other layers per-layer.
- If activations are quantized: calibrate activation step sizes block by block with LSQ.
- Keep SoftMax, SiLU, GroupNorm in FP; for SD W8A8/W4A8, attention scores in INT16 (q, k, v still 8-bit).
Guide
The recipe runs in a fixed order. First choose the sampler and the calibration interval, then run the full-precision model and collect inputs at the chosen steps, including time embeddings and, for Stable Diffusion, both conditional and unconditional text features. Next, split the shortcut layers, then reconstruct weights block by block with AdaRound, and only afterwards calibrate activation step sizes. Fragile operations like SoftMax, SiLU and GroupNorm stay in full precision, and Stable Diffusion attention scores use sixteen-bit integers.
Algorithm 1 — Q-Diffusion Calibration
Guide
Algorithm 1 is the unconditional version of time-step-aware calibration. The first loop walks through the denoising steps and, whenever the step number is a multiple of c, stores n intermediate inputs from the full-precision model. The second loop visits the blocks one by one and fits the weight quantizers against the full-precision outputs. An optional third loop then fits activation step sizes. The key design choice is that calibration data comes from the model's own trajectory, so no training images are needed.
Algorithm 2 — Q-Diffusion Calibration for Text-guided Image Generation (App. A.2)
Guide
Algorithm 2 is the same procedure for text-to-image models like Stable Diffusion. The only change is in the sampling loop: each stored sample is a triple of latent, text feature and time step, and it is stored twice, once with the prompt's conditional features and once with the unconditional ones, because classifier-free guidance runs both branches at inference. That is why Table 4 lists twice as many Stable Diffusion samples as prompts. This is the version that maps onto LTX-2.3, which also uses guidance.
ct = conditional text feature, uct = unconditional (empty-prompt) feature, tt = time embedding: classifier-free guidance runs the U-Net on both, so both go into calibration.
§5Every equation
Forward diffusion: add Gaussian noise with variance schedule \(\beta_t \in (0,1)\); as \(T\to\infty\), \(\mathbf{x}_T\) becomes isotropic Gaussian.
Guide
Equation 1 is the forward diffusion step, which adds noise. It says x t, the image at step t, is drawn from a Gaussian centred at the square root of one minus beta t times the previous image x t minus one, with variance beta t times the identity. Beta t is the noise schedule, a small number between zero and one. After enough steps, x T is pure Gaussian noise. This is background; it is not quantized, but it defines what the U-Net sees.
Learned reverse step, starting from \(\mathbf{x}_T \sim \mathcal{N}(\mathbf{0},\mathbf{I})\). Its output is the next step's input, which is why quantization errors accumulate.
Guide
Equation 2 is the learned reverse step, the part the network performs. P theta of x t minus one given x t is a Gaussian with mean mu tilde, computed by the network, and variance beta tilde times the identity. Sampling starts from pure noise x T and applies this step repeatedly. The important point for quantization is that each output becomes the next input, which is exactly why errors accumulate, as Figure 2 and Figure 3 show.
Mean from the predicted noise \(\boldsymbol{\epsilon}_{\theta,t}\) (the U-Net output that gets quantized).
Guide
Equation 3 shows where the network enters the reverse step. The mean mu tilde equals one over the square root of alpha t, times the current image x t minus a scaled copy of epsilon theta, the noise predicted by the U-Net. The scaling factor is one minus alpha t over the square root of one minus alpha bar t. Epsilon theta is the quantized part, so any quantization error in the predicted noise flows straight into the next image.
Reverse-step variance; the definitions of \(\alpha_t, \bar{\alpha}_t\) follow the equation in the paper.
Guide
Equation 4 gives the variance of the reverse step and defines the helper symbols. Beta tilde t equals one minus alpha bar at t minus one, divided by one minus alpha bar at t, times beta t. Alpha t is one minus beta t, and alpha bar t is the product of all alphas up to step t. These are fixed schedule constants, not learned and not quantized; they complete the diffusion background before the paper turns to quantization.
Uniform quantize/de-quantize: scale \(s\), clipping bounds \(c_{\min}, c_{\max}\); round is nearest (linear-quant baseline) or adaptive (AdaRound/BRECQ in Q-Diffusion).
Guide
Equation 5 is the basic uniform quantizer used for both weights and activations. Divide w by the step size s, round to an integer, clip between c min and c max, then multiply by s again to get w hat, the de-quantized value. With four bits there are only sixteen integers available. Plain linear quantization uses round-to-nearest; Q-Diffusion keeps the same form but lets AdaRound learn whether each weight rounds up or down, and learns the clipping range too.
Split activation quantizer: quantize deep part \(X_1\in\mathbb{R}^{w\times h\times c_1}\) and shallow part \(X_2\in\mathbb{R}^{w\times h\times c_2}\) separately, then concatenate (\(\oplus\)).
Guide
Equation 6 splits the activation quantizer of a shortcut layer. Q X of X, the quantized input, is formed by quantizing X1, the deep part with c1 channels, with its own quantizer, quantizing X2, the shallow part with c2 channels, with another, and then concatenating the two. This directly answers the range clash in Figure 3: the small shallow values now get a scale that fits them instead of being rounded to zero.
Split weight quantizer on the matching input-channel rows \(W_1\in\mathbb{R}^{c_1\times c_{out}}\), \(W_2\in\mathbb{R}^{c_2\times c_{out}}\).
Guide
Equation 7 applies the same split to the weights. The weight matrix W has one row per input channel, so it divides into W1, the c1 rows that multiply the deep features, and W2, the c2 rows that multiply the shallow features. Each part gets its own weight quantizer. This matters because Figure 7 shows the weights are bimodal too, with W1 small and W2 much larger, so one shared weight scale would waste precision.
The layer output is the sum of two independently quantized partial products, so splitting costs no extra compute; \(X\in\mathbb{R}^{w\times h\times c_{in}}\), \(W\in\mathbb{R}^{c_{in}\times c_{out}}\), \(c_{in}=c_1+c_2\).
Guide
Equation 8 explains why splitting is free. The quantized input times the quantized weights equals the quantized X1 times the quantized W1, plus the quantized X2 times the quantized W2. The input has c in channels, equal to c1 plus c2. Because a matrix product over concatenated channels is just the sum of two smaller products, the layer computes the same amount of work with two scales instead of one, which is why the paper reports negligible overhead.
"Std" non-uniform sampling (did not beat uniform): draw calibration samples from step \(t\) in proportion to the pixel-wise std \(s_t\) of \(\mathbf{x}_t\) (estimated from 256 samples); \(N=5120\). "Norm Std" uses the std of \(\lVert \mathbf{x}_t\rVert_2\) instead.
Guide
This appendix equation defines a non-uniform alternative the authors tried and rejected. N t, the number of calibration samples taken from step t, is set to s t divided by the sum of s t over all steps, times the total N of 5,120. Here s t is the pixel-wise standard deviation of x t, so noisier steps get more samples. Table 7 shows it did slightly worse than plain uniform sampling, which supports the paper's simple choice.
§6Every figure
Guide
Q-Diffusion changes two things compared with ordinary quantization. Panel a is about calibration data: traditional methods use training images, synthetic images or random noise, none of which look like the real inputs at intermediate steps, while Q-Diffusion samples the model's own x t evenly across steps, with no data needed. Panel b is about inference: a classifier runs the quantized network once, but a diffusion model runs it T times, so naive quantization ends with a noisy final image.
Guide
The forward process adds noise and the reverse process removes it, and that is the root of the problem. The gold overlay shows the noise level. Panel a goes from a clean image to noise; panel b runs the trained network backwards. Because the same noise-estimation network is used at every reverse step, its inputs range from pure noise to nearly clean images, so its activation statistics change with the step. Figures 5 and 14 quantify this drift.
Guide
Four-bit weights with naive rounding make errors explode, while Q-Diffusion's four-bit model behaves like an eight-bit one. The vertical axis is the mean squared error between full-precision and weight-quantized x t, on a log scale; the horizontal axis runs over 100 DDIM steps. Linear INT4 climbs toward an error of about one, INT5 is in between, and Q-Diffusion INT4 stays close to INT8. The curve shape is redrawn, but it gives the evidence for the accumulation argument in Figure 2.
Guide
Calibrating on only part of the trajectory hurts four-bit weights badly. Each bar is the FID, on a log scale, when all 5,120 calibration samples come from one slice of the steps. The last 25 steps are worst at about 98.6, the first 25 give about 45, and the middle 50 do best among the slices at about 6.1. Covering all steps, the dashed line, gives 5.09. This motivates uniform sampling across the whole process.
Guide
The U-Net's input range shrinks steadily as denoising proceeds. Each box and whisker shows the spread of x t over 1,000 samples at one of 100 DDIM steps, with denoising running left to right. Early values span about plus or minus 4.5, late ones about plus or minus 1.8. Neighbouring steps look alike but distant steps differ, so a calibration set needs to cover the whole range, and sampling every c-th step is enough. The shape is redrawn from the paper.
Guide
A few shortcut layers have abnormally large input ranges. The horizontal axis is layer number and the vertical axis is the activation range averaged over all steps, with the axis broken as in the paper. Three shortcut convolutions, in magenta around layers 53, 57 and 61, reach roughly 300 to 1,250, far above their neighbours. The inset explains why: their input is a concatenation of a large deep tensor X1 and a small shallow tensor X2. Values are approximate.
Guide
The deep and shallow halves differ in both activations and weights. On the left, the U-Net decoder concatenates deep features X1 with shallow encoder features X2 through skip connections. On the right, heat maps of one shortcut convolution, where darker means larger: X1 reaches about plus or minus 40 while X2 stays near zero, and the weights are bimodal the other way, W1 small and W2 up to about plus or minus one. The dashed cut is where Equations 6 and 7 split the quantizers.
Guide
At W4A8, Q-Diffusion keeps the look of real bedrooms and churches while linear quantization does not. This is a schematic of the paper's three by three sample grids at 256 by 256 pixels. Linear quantization gives faded, blurry bedrooms and colour-shifted, over-contrasted churches; Q-Diffusion samples resemble full-precision output. It is the visual companion to Tables 2 and 3, where the FID gap tells the same story in numbers.
Guide
On Stable Diffusion at W4A8, only Q-Diffusion produces usable images. The prompt is a puppy wearing a hat, at 512 by 512 pixels, with eight samples for each method. Q-Diffusion's images resemble the full-precision ones, differing only in small details such as the hat's shape, while linear quantization produces noisy, broken pictures. This shows the method scales from small unconditional models to a large text-conditioned model, the setting closest to the thesis.
Guide
Any uniform sampling that covers the whole trajectory works about equally well; partial coverage does not. The horizontal axis is the number of calibration samples and the vertical axis is FID for four-bit weights on CIFAR-10. Using only the first 50 steps gives 31.98 and only the last 50 gives 14.29. Uniform settings with different intervals and from 2,560 to 20,480 samples all land near five, and the chosen default gives 5.09. More data does not help much.
Guide
This ablation separates the two fixes. Bars show FID on a log scale for DDIM on CIFAR-10, with the dashed line at full precision, 4.22. For four-bit weights only, calibration alone takes FID from 141.47 to 6.58, and splitting brings it to 5.09. With eight-bit activations added, calibration alone reaches only 54.22, and splitting is what brings it down to 4.93. So splitting becomes essential once activations are quantized.
Guide
Splitting fixes local detail and calibration fixes overall semantics. In these Stable Diffusion portraits, six-bit linear weight quantization distorts the teeth, and adding shortcut splitting repairs them. Full Q-Diffusion at four-bit weights, with both calibration and splitting, also makes the eyes consistent and matches the full-precision reference. It is the qualitative version of the ablation in Figure 11: the two fixes address different kinds of damage.
Guide
Across most models, the widest activation ranges sit in residual and shortcut layers. Each panel plots per-layer activation range, averaged over steps, with outlier layers in magenta. DDIM has shortcut layers near 1,200 while most layers stay below 50; Stable Diffusion has two layers near 300; LDM-Bedroom peaks around 90; and LDM-Church is fairly uniform, below about 20. Values are approximate. This shows the outlier problem depends on the model, so each network needs its own check.
Guide
Each layer's activation range changes with the time step, and each layer changes differently. Four DDIM layers are shown over 100 steps. One widens toward the end, one upsampling layer shrinks from about plus or minus 130 to about 60, another peaks around step 85, and the shortcut convolution goes from about plus or minus 800 early to 300 late. A single static scale calibrated at one step cannot fit all of them, which is the case for multi-step calibration.
Guide
On Stable Diffusion with 10,000 COCO prompts, Q-Diffusion keeps both image quality and text alignment at full-precision level. Panel a shows FID, lower is better: linear quantization rises to 57.90 at W4A8 while Q-Diffusion stays between about 18.5 and 20.2, against 20.00 for full precision. Panel b shows CLIP score, higher is better, with the axis starting at 0.24: linear falls to 0.2589, while Q-Diffusion stays near 0.2865, the full-precision value.
Guide
A model quantized with Q-Diffusion also works with a faster sampler. The top row uses the default 50-step PNDM sampler, and the bottom row applies the 20-step DPM-Solver plus plus directly to the same four-bit-weight Stable Diffusion model, with no re-calibration. Both rows look good, though details differ because the solver follows a different path. This is qualitative; Table 6 shows the numbers, where the quality drop is larger once activations are also quantized.
Guide
With a fixed seed on LSUN-Bedroom at four-bit weights, Q-Diffusion's output barely changes when activations drop from 32 to eight bits: the two grids are almost identical image for image. Linear quantization, by contrast, gives a dark yellow cast at W4A32 and pale, washed-out scenes at W4A8. This appendix figure supports the claim that the method is stable across activation precisions.
Guide
The LSUN-Church results tell the same story with a fixed seed. Q-Diffusion keeps the content and colours of each church from W4A32 to W4A8. Linear quantization shifts colours toward purple and white at W4A32, and at W4A8 it even produces different content than the seed should give, meaning the trajectory has drifted. It is further visual evidence alongside Table 3.
Guide
Fixed-seed Stable Diffusion samples for two prompts, a puppy wearing a hat and an astronaut riding a horse, at 512 by 512 pixels. Q-Diffusion at W4A32 and at W4A8 reproduces the full-precision compositions, with only small changes such as hat colours. Linear quantization at W4A32 is grainy and colour-shifted. Because the seed is fixed, each image can be compared directly with its full-precision counterpart, which makes this a fair side-by-side test.
§7Results
Guide
The headline result: at W4A8, Q-Diffusion stays close to full precision on all three unconditional benchmarks, while the baselines fall apart. Bars show FID on a log scale; lower is better. On CIFAR-10, full precision is 4.22 and Q-Diffusion 4.93, against 188 for linear quantization and 456 for SQuant. The bedroom and church datasets show the same pattern, with Q-Diffusion within about 0.06 to 2.34 FID of full precision. The numbers come from Tables 1 to 3.
| Method | Bits (W/A) | Size (Mb) | GBops | FID↓ | IS↑ |
|---|---|---|---|---|---|
| Full Precision | 32/32 | 143.2 | 6597 | 4.22 | 9.12 |
| Linear Quant | 8/32 | 35.8 | 2294 | 4.71 | 8.93 |
| SQuant | 8/32 | 35.8 | 2294 | 4.61 | 8.99 |
| Q-Diffusion | 8/32 | 35.8 | 2294 | 4.27 | 9.15 |
| Linear Quant | 4/32 | 17.9 | 1147 | 141.47 | 4.20 |
| SQuant | 4/32 | 17.9 | 1147 | 160.40 | 2.91 |
| Q-Diffusion | 4/32 | 17.9 | 1147 | 5.09 | 8.78 |
| Linear Quant | 8/8 | 35.8 | 798 | 118.26 | 5.23 |
| SQuant | 8/8 | 35.8 | 798 | 464.69 | 1.17 |
| Q-Diffusion | 8/8 | 35.8 | 798 | 3.75 | 9.48 |
| Linear Quant | 4/8 | 17.9 | 399 | 188.11 | 2.45 |
| SQuant | 4/8 | 17.9 | 399 | 456.21 | 1.16 |
| Q-Diffusion | 4/8 | 17.9 | 399 | 4.93 | 9.12 |
Guide
Table 1 is DDIM on CIFAR-10. Each row gives the method, weight and activation bits, model size, compute in giga bit-operations, FID where lower is better, and Inception Score where higher is better. At eight-bit weights all methods are fine. At four-bit weights linear quantization jumps to an FID of 141, but Q-Diffusion stays at 5.09. At W4A8 Q-Diffusion reaches 4.93 against 188 for linear and 456 for SQuant, with model size cut from 143 to 18 megabits.
| Method | Bits (W/A) | Size (Mb) | TBops | FID↓ |
|---|---|---|---|---|
| Full Precision | 32/32 | 1096.2 | 107.17 | 2.98 |
| Linear Quant | 8/32 | 274.1 | 37.28 | 3.02 |
| SQuant | 8/32 | 274.1 | 37.28 | 2.94 |
| Q-Diffusion | 8/32 | 274.1 | 37.28 | 2.97 |
| Linear Quant | 4/32 | 137.0 | 18.64 | 82.69 |
| SQuant | 4/32 | 137.0 | 18.64 | 149.97 |
| Q-Diffusion | 4/32 | 137.0 | 18.64 | 4.86 |
| Linear Quant | 8/8 | 274.1 | 12.97 | 6.69 |
| SQuant | 8/8 | 274.1 | 12.97 | 4.92 |
| Q-Diffusion | 8/8 | 274.1 | 12.97 | 4.40 |
| Linear Quant | 4/8 | 137.0 | 6.48 | 24.86 |
| SQuant | 4/8 | 137.0 | 6.48 | 95.92 |
| Q-Diffusion | 4/8 | 137.0 | 6.48 | 5.32 |
Guide
Table 2 repeats the test on a latent diffusion model for LSUN bedrooms, at 256 by 256 pixels. Full precision has an FID of 2.98. With eight-bit weights every method is near that value. At four-bit weights, linear quantization gives 82.69 and SQuant about 150, while Q-Diffusion gives 4.86. At W4A8, Q-Diffusion reaches 5.32 against 24.86 and 95.92. The pattern from CIFAR-10 carries over to a larger, latent model.
| Method | Bits (W/A) | Size (Mb) | TBops | FID↓ |
|---|---|---|---|---|
| Full Precision | 32/32 | 1179.9 | 22.17 | 4.06 |
| Linear Quant | 8/32 | 295.0 | 10.73 | 3.84 |
| SQuant | 8/32 | 295.0 | 10.73 | 4.01 |
| Q-Diffusion | 8/32 | 295.0 | 10.73 | 4.03 |
| Linear Quant | 4/32 | 147.5 | 5.36 | 32.54 |
| SQuant | 4/32 | 147.5 | 5.36 | 33.77 |
| Q-Diffusion | 4/32 | 147.5 | 5.36 | 4.45 |
| Linear Quant | 8/8 | 295.0 | 2.68 | 14.62 |
| SQuant | 8/8 | 295.0 | 2.68 | 54.15 |
| Q-Diffusion | 8/8 | 295.0 | 2.68 | 3.65 |
| Linear Quant | 4/8 | 147.5 | 1.34 | 14.92 |
| SQuant | 4/8 | 147.5 | 1.34 | 24.50 |
| Q-Diffusion | 4/8 | 147.5 | 1.34 | 4.12 |
Guide
Table 3 covers a latent diffusion model on LSUN churches, with full precision at an FID of 4.06. Q-Diffusion matches or even slightly beats full precision at W8A8 with 3.65 and stays at 4.12 at W4A8, while linear quantization and SQuant land between about 15 and 54 once activations are quantized. Recall from Figure 13 that this model has fairly uniform activation ranges, which may explain why linear quantization degrades less here than on CIFAR-10.
| Experiment | T | c | n | N |
|---|---|---|---|---|
| DDIM CIFAR-10 | 100 | 5 | 256 | 5120 |
| LDM-4 LSUN-Bedroom | 200 | 10 | 256 | 5120 |
| LDM-8 LSUN-Church | 500 | 25 | 256 | 5120 |
| Stable Diffusion (weights only) | 50 | 2 | 256 (128) | 6400 |
| Stable Diffusion (weights & activations) | 50 | 1 | 256 (128) | 12800 |
Guide
Table 4 lists the calibration settings for each experiment: T, the number of sampling steps; c, the interval between sampled steps; n, samples per step; and N, the total. The unconditional models all use 5,120 samples, with the interval chosen so about 20 steps are covered. Stable Diffusion uses a denser interval and counts each prompt twice, for the conditional and unconditional branch, giving 6,400 samples for weights only and 12,800 when activations are quantized too.
| Task | Method | IS↑ | FID↓ | sFID↓ |
|---|---|---|---|---|
| CIFAR-10 DDIM 100 steps | FP | 9.18 | 10.05 | 19.71 |
| PTQ4DM (W8A8) | 9.31 (9.02) | 14.18 (19.59) | 22.59 (20.89) | |
| Q-Diffusion (W8A8) | 9.47 | 7.82 | 17.96 | |
| Q-Diffusion (W4A8) | 9.19 | 8.85 | 19.64 | |
| CIFAR-10 DDIM 250 steps | FP | 9.19 | 8.83 | 18.31 |
| PTQ4DM (W8A8) | 9.70 (9.30) | 11.66 (16.54) | 19.71 (20.08) | |
| Q-Diffusion (W8A8) | 9.60 | 8.00 | 18.13 | |
| Q-Diffusion (W4A8) | 9.18 | 8.54 | 18.58 |
Guide
Table 5 compares Q-Diffusion with PTQ4DM, the only earlier diffusion quantization method, on CIFAR-10 at 100 and 250 DDIM steps, using Inception Score, FID and sFID. PTQ4DM's numbers in parentheses are for the fair comparison where attention matrix products are also eight-bit, as they always are in Q-Diffusion. Q-Diffusion at W8A8 beats PTQ4DM in FID, for example 7.82 against 19.59 at 100 steps, and even Q-Diffusion at W4A8 is better than PTQ4DM at W8A8.
| Task | Bits (W/A) | FID↓ |
|---|---|---|
| DDIM CIFAR-10 | 32/32 | 3.57 |
| DDIM CIFAR-10 | 4/32 | 5.38 |
| DDIM CIFAR-10 | 4/8 | 10.27 |
| LDM-4 LSUN-Bedrooms | 32/32 | 4.27 |
| LDM-4 LSUN-Bedrooms | 4/32 | 4.88 |
| LDM-4 LSUN-Bedrooms | 4/8 | 10.77 |
| LDM-8 LSUN-Churches | 32/32 | 5.40 |
| LDM-8 LSUN-Churches | 4/32 | 5.74 |
| LDM-8 LSUN-Churches | 4/8 | 8.19 |
Guide
Table 6 tests whether the quantized model survives a sampler change, here a third-order DPM-Solver plus plus with 50 steps, applied without re-calibration. With four-bit weights only, FID stays near full precision, for example 5.38 against 3.57 on CIFAR-10. Adding eight-bit activations roughly doubles or triples FID, to 10.27 on CIFAR-10 and 10.77 on bedrooms. So activation scales are tied to the trajectory used for calibration, and changing the sampler calls for fresh calibration data.
| Method | Std | Norm Std | USL | Uniform (ours) |
|---|---|---|---|---|
| FID↓ | 5.66 | 5.58 | 5.54 | 5.09 |
Guide
Table 7 checks whether smarter, non-uniform sampling of calibration steps helps. Std draws more samples from steps with higher pixel standard deviation, as in the appendix equation; Norm Std uses the spread of the image norm; USL is another published strategy. All three give FIDs between 5.54 and 5.66 for four-bit weights on CIFAR-10, while plain uniform sampling gives 5.09. Simple uniform coverage wins, so there is no need for elaborate schemes.
- 8-bit weights are almost free for everyone; the gap opens at 4-bit weights and when activations are also quantized.
- Size column: 4-bit weights shrink DDIM from 143.2 Mb to 17.9 Mb (8×); Bops drop from 6597 G to 399 G per step at W4A8 (theoretical).
- Stable Diffusion W4A8 is run with INT16 attention scores (App. A.1); Q-Diffusion quantizes q·k and attn·v matmuls to INT8 elsewhere, unlike PTQ4DM's FP16/32.
- Changing the sampler after calibration (DPM-Solver++, Table 6) keeps W4A32 good but roughly doubles W4A8 FID: activation calibration is trajectory-specific.
§8Why it matters for this thesis
- Calibration data recipe transfers directly. For LTX-2.3 in NNCF, build the
nncf.Datasetby hooking the transformer's inputs (latent tokens, timestep/sigma embedding, text and audio conditioning, both cond and uncond branches if CFG is used) during full FP pipeline runs, keeping samples from every c-th step, not from a single step or random tensors. This is exactly Algorithm 2, and it is what Optimum-Intel's diffusion hybrid quantization does. - Weight-only int8/int4 is the easy half. Weight-only compression (
nncf.compress_weights, INT4 group-wise or INT8) does not depend on activation ranges, so the timestep drift mainly bites when moving to W8A8 (nncf.quantize) on CPU/Arc. For A8, static per-tensor activation scales must cover all timesteps. Consider keeping sensitive layers (e.g. timestep/AdaLN modulation, final projection) in FP16 via theignored_scope. - Shortcut splitting is U-Net specific. LTX-2.3 is a DiT with residual adds, not channel concatenation, so Eq. 6–8 rarely applies directly. The underlying lesson still applies: find tensors that mix sub-populations with different ranges (e.g. concatenated text/video/audio tokens in joint attention, AdaLN-modulated activations) and give them separate quantizers or leave them in higher precision.
- No custom kernels needed. Split quantization is just two FakeQuantize nodes before a Concat, and BRECQ/AdaRound change only the stored integer weights, so the result runs on stock OpenVINO INT8 ops. NNCF has no AdaRound/BRECQ; its closest tools are SmoothQuant, bias correction, and for weights AWQ / scale estimation / GPTQ, all of which reuse the same multi-timestep calibration set.
- Re-calibrate if the sampler or step count changes (Table 6): if the thesis also cuts steps or uses caching, generate calibration data with the final sampler schedule.
Guide
Act on this box when building the NNCF calibration set: hook the LTX-2.3 transformer's inputs during full pipeline runs and keep samples from many steps across the trajectory, including both guidance branches, exactly as in Algorithm 2. Weight-only int8 or int4 hardly depends on this, but W8A8 does. Shortcut splitting does not apply directly to a DiT, yet the lesson does: give mixed-range tensors separate quantizers or higher precision. And regenerate calibration data if the sampler or step count changes.
PTQ4DiT: Post-training Quantization for Diffusion Transformers
Inside a Diffusion Transformer, a few input channels of each linear layer carry huge values (“salient channels”), and the activation ones grow and shift as denoising proceeds. PTQ4DiT notices that activation and weight outliers almost never sit in the same channel, so it rescales each channel to meet in the middle (geometric mean), picks the activation statistics by weighting timesteps with a Spearman-correlation score, and folds all scales into existing layers offline so inference costs nothing extra.
- Model
- DiT-XL/2, ImageNet 256 & 512
- Bits
- W8A8 and W4A8
- W8A8, 256, 250 steps
- FID 4.63 (FP 4.53)
- W4A8, 256, 250 steps
- FID 7.09 vs 15.31 (Q-Diffusion)
- Size
- 2575 → 646 / 324 MB
- Inference overhead
- 0 (scales folded offline)
Reading guide
PTQ4DiT asks why standard post-training quantization breaks on Diffusion Transformers and how to fix it without retraining. Its answer: a few input channels carry huge values, activation outliers and weight outliers rarely share a channel, so each channel is rescaled to meet in the middle and choose the calibration timesteps carefully. On DiT-XL/2 for ImageNet, W eight A eight nearly matches full precision, and W four A eight reaches an FID of 7.09 where Q-Diffusion gets 15.31. The tab runs from the big picture and the problem, through the method, every equation and every figure, to the result tables and a thesis box on LTX-2.3 with NNCF. Among the sixteen papers it is the second diffusion-specific quantization paper, after Q-Diffusion and before ViDiT-Q. It borrows the SmoothQuant idea from the language-model group and adapts it to transformers with timesteps.
§0Before reading
To follow PTQ4DiT, three ideas are needed: what sits inside a Diffusion Transformer block (adaLN and its linear layers), why one very large channel ruins a low-bit quantization grid, and what a rank correlation measures. The paper is in the atlas because it is the first quantization method written for diffusion transformers, the family LTX-2.3 belongs to, and its balancing trick is the SmoothQuant idea that can be switched on in NNCF.
Guide
Inside a Diffusion Transformer block, the timestep and the class go through a small network that outputs a scale and a shift for every channel. Adaptive layer norm applies them to the normalised tokens, and the result, called X, is exactly what the quantized linear layer receives. Remember this path: PTQ4DiT later hides its own activation scaling inside that small network, which is why its method adds no cost at inference.
Guide
A four bit quantizer has only sixteen evenly spaced levels, and they must stretch to cover the largest value. With values near plus or minus one, many levels are used. Add a single value of twelve and the step grows twelve times, so the ordinary values fall on about two levels. W four A eight means four bit weights and eight bit activations, and this loud channel problem is what the whole paper attacks.
Guide
Spearman's rho compares two lists by their rankings, not their raw values. On the left, the loudest activation channel is also the loudest weight channel, so rho is high and balancing cannot help. On the right, the outliers sit in different channels, so rho is low and one tensor can absorb the other's extreme. PTQ4DiT turns minus rho into a softmax weight for each timestep when it averages activation statistics.
Guide
PTQ4DiT sits between Q-Diffusion and ViDiT-Q. Q-Diffusion taught us to calibrate diffusion models across many timesteps, but on U-Nets. PTQ4DiT brings quantization to Diffusion Transformers, borrowing SmoothQuant's per-channel scaling with alpha of one half and adding timestep weighting. ViDiT-Q then moves to video transformers, where it replaces static scales with per-token dynamic ones and mixed precision.
Terms used in this paper
- Diffusion Transformer (DiT)
- A diffusion model whose denoising network is a transformer working on patches of the latent image, instead of a convolutional U-Net. LTX-2.3 is a (video and audio) DiT.
- DiT-XL/2
- The largest model of the original DiT paper (Peebles and Xie), using 2×2 latent patches. It is the only model quantized in PTQ4DiT.
- adaLN
- Adaptive LayerNorm: LayerNorm followed by a per-channel scale \(\gamma\) and shift \(\beta\) computed from the timestep and class. It is how a DiT is told which step and which class it is on.
- Timestep / sampling steps
- Generation removes noise over many steps (250, 100 or 50 here). Activations change from step to step, so statistics from one step may not fit the others.
- Post-training quantization (PTQ)
- Converting a trained model to low-bit numbers without retraining, using only a small calibration set to choose ranges and scales.
- Calibration set
- A few inputs run through the full-precision model to record value ranges. Here: 32 generated samples at each of 25 (256 px) or 10 (512 px) timesteps.
- W8A8 / W4A8
- Weights at 8 or 4 bits, activations at 8 bits. Integer activations need a scale chosen in advance, which is why activation outliers matter so much.
- Salient channel / salience
- An input channel whose maximum absolute value is far above the rest. The paper calls that maximum the channel’s salience.
- Geometric mean
- \(\sqrt{a\cdot b}\). Balancing moves an activation channel with maximum 12 and its weight row with maximum 1 both to about 3.5; the product is unchanged.
- Spearman’s ρ
- A correlation computed on ranks rather than raw values; +1 means two lists are ordered the same, −1 means reversed.
- ImageNet 256 / 512
- Class-conditional generation: the model draws one of 1000 ImageNet classes (eagle, balloon…) at 256×256 or 512×512 pixels.
- FID, sFID, IS, Precision
- Image-quality scores from an Inception network. FID and sFID compare generated and real image statistics (lower is better); Inception Score and Precision reward sharp, recognisable, realistic images (higher is better).
- PTQ4DM, Q-Diffusion, PTQD, RepQ*
- The baselines: three PTQ methods for diffusion U-Nets and a ViT quantizer (RepQ-ViT) that the authors re-implemented for DiTs.
- NVIDIA RTX A6000
- The workstation GPU used for all experiments. The paper reports quality and model size, not measured speed-ups on it.
Guide
These are the words the paper uses without explaining. The most important are adaptive layer norm, the timestep-driven scale and shift; salience, the largest value in a channel; W four A eight, the bit setting; and Spearman's rho, a correlation on ranks. For results, FID and sFID are lower is better, while Inception Score and Precision are higher is better. All experiments use DiT-XL/2 on ImageNet with an NVIDIA RTX A6000 GPU.
§2Big picture
Guide
The core trick is to move each extreme to where the other tensor is calm. Magenta marks activation outliers, and weight outliers sit in different channels. A per-channel scale shrinks the loud activation channel and grows the matching weight row, so both end at the geometric mean of their two ranges, here dropping the maxima from about 6 to 2.4 and 5.5 to 2.3. The product stays identical, and the scales are folded into existing layers before quantization. The numbers are a toy example.
Two DiT-specific problems: extreme salient channels, and activation salience that drifts over the ~250 denoising steps. CSB fixes the first by channel-wise balancing (SmoothQuant-style, fixed exponent ½); SSC fixes the second by choosing which timesteps to trust when estimating activation salience. Re-parameterization makes both free at inference.
§3The problem
Guide
Two things break plain quantization on DiTs. In panel a, a uniform grid must stretch to cover one salient channel, so at four bits only about two levels are left for the bulk of the values, unless the outlier is clipped. In panel b, the salient activation magnitude climbs toward the end of sampling, so a range calibrated at one timestep clips late steps and wastes resolution early. These are exactly the two problems that channel balancing and timestep-aware calibration address.
- Challenge 1 – salient channels. In both X and W of the attention/FFN linear layers, a handful of channels have max |value| an order of magnitude above the rest, and these channels carry most of the quantization MSE (Fig. 3).
- Challenge 2 – temporal variation. s(X(t)) changes across the denoising trajectory (Fig. 4); W is fixed. Balancing scales tuned for one timestep are biased for others.
- Lucky observation – complementarity. Extreme activation channels and extreme weight channels do not coincide, so they can trade magnitude without creating a new outlier.
- Setup constraint: per-channel weight quantizers but per-tensor activation quantizers, so activation outliers hurt the whole tensor.
§4Method
Guide
Here the two method steps are worked with toy numbers. On the left, channel-wise salience balancing takes each channel's activation and weight maxima, for example 12 and 1, and moves both to their geometric mean of about 3.5, so the worst channel falls from 12 to 3.5. On the right, the calibration step weights each timestep by the exponential of minus rho, the rank correlation between activation and weight salience. Because rho lies between minus one and one, weights differ by at most about 7.4 times.
Guide
The balancing costs nothing at inference because both scales are folded in offline. The weight scale is multiplied into the linear layer's weight once and stored. The activation scale is pushed into the small MLP that produces the adaLN scale and shift, for the QKV projection and the first feedforward layer, or into the preceding attention matmul for the output projection. The second feedforward layer, after GELU, is left unbalanced. After this step, ordinary integer matmuls run with no new operations.
- Build a calibration set: uniformly pick 25 timesteps (256×256) or 10 (512×512), 32 samples each, from the FP model’s own sampling trajectories.
- For every linear layer in MHSA/PF: per input channel j, record activation salience s(Xj(t)) = max|Xj(t)| at each timestep, and weight salience s(Wj) = max|Wj| (row j of W).
- Spearman’s ρ between the vectors s(X(t)) and s(W) for each t; ηt = softmax(−ρ) over t (Eq. 11).
- Temporal salience sρ = Σt ηt s(X(t)) (Eq. 10).
- Balanced salience s̃ρ,j = √(sρ,j·s(Wj)) (Eq. 14); BXρ = diag(s̃/sρ), BWρ = diag(s̃/s(W)) — exact inverses (Eq. 15).
- Fold BWρ into W, BXρ into adaLN MLP (Eqs. 13, 20–21) or the preceding matmul.
- Run standard PTQ (Q-Diffusion-style quantizer-parameter optimization): channel-wise uniform weights, tensor-wise uniform activations.
Guide
The recipe has three phases. First, collect statistics: sample 25 or 10 timesteps from the full-precision model's own trajectories, 32 samples each, and record per-channel maxima of activations at every timestep and of weights once. Second, compute the scales: rank-correlate the two, turn the negative correlations into softmax weights over timesteps, average the activation maxima with those weights, then take the geometric mean with the weight maxima. Third, fold the scales in and run a standard Q-Diffusion-style quantizer calibration.
Guide
The algorithm is the same pipeline written as five stages. Preparation measures salience per channel, per timestep for activations and once for weights. The Spearman calibration stage decides how much each timestep counts and produces one blended activation salience per channel. Balancing turns that into the two diagonal matrices. Re-parameterization folds them into the weights and the adaLN MLP offline. Quantization then runs on the already balanced tensors, so the deployed model has the same structure and cost as a plain quantized DiT.
§5Every equation
DiT conditioning: an MLP maps condition \(\mathbf c\) (timestep + class) to per-channel scale \(\boldsymbol\gamma\) and shift \(\boldsymbol\beta\) applied after LayerNorm.
Guide
This is how a DiT injects the timestep and class. An MLP maps the condition c to two vectors, gamma, a per-channel scale, and beta, a per-channel shift. The adaptive layer norm then normalizes the tokens Z, multiplies each channel by one plus gamma, and adds beta. This matters later because the output of adaLN is the input X to the QKV and feedforward layers, which gives the method a free place to hide its activation scale.
Uniform asymmetric \(b\)-bit quantizer: step \(\boldsymbol\delta\), zero-point \(\boldsymbol\lambda\), round-to-nearest, clamp.
Guide
This is the standard uniform b-bit quantizer. Divide x by the step size delta, round to the nearest integer, add the zero point lambda, and clamp the result between zero and two to the power b minus one. The step size is set by the range being covered, so one huge value makes delta coarse for every other value. That is the failure shown in the problem figure, and every later equation is about shrinking the range before this quantizer is applied.
CSB: diagonal balancing matrices rescale activation columns and weight rows (input channels).
Guide
Channel-wise salience balancing in one line. X tilde is the activation matrix multiplied on the right by a diagonal matrix B X, which rescales each input channel column. W tilde is the weight multiplied on the left by a diagonal matrix B W, which rescales the matching weight row. Choosing the two so they cancel keeps the layer output unchanged, as equation twelve shows, while reshaping what the quantizer sees.
Salience of channel \(j\) = its maximum absolute value (range drives quantization error).
Guide
Salience is simply the largest absolute value in a channel. For activation channel j, s of X j is the max of the absolute values in that column; for weights, s of W j is the max over row j. The index j runs over the d in input channels. The paper uses the maximum because the range is what sets the quantization step, and the problem figures show the channels with the biggest maxima also carry the biggest error.
Balanced salience = geometric mean of activation and weight salience (SmoothQuant with \(\alpha=0.5\)).
Guide
The balanced salience of channel j is the geometric mean of its activation salience and its weight salience, the square root of their product. If activations peak at 12 and weights at 1 in that channel, both end up at about 3.5. This is exactly SmoothQuant with alpha equal to one half. It is the target value that the balancing matrices in equations six and seven are built to reach.
Activation balancing matrix: shrinks channels whose activation salience exceeds the balanced value.
Guide
The activation balancing matrix is diagonal, with entry j equal to the balanced salience divided by the activation salience of that channel. Where activations are loud, the ratio is below one and the channel is shrunk; where they are quiet, it is above one and the channel is enlarged. After multiplying, every activation channel has maximum equal to its balanced salience from equation five.
Weight balancing matrix; after (3), \(s(\widetilde{\mathbf X}_j)=s(\widetilde{\mathbf W}_j)=\widetilde s(\mathbf X_j,\mathbf W_j)\).
Guide
The weight balancing matrix mirrors equation six: entry j is the balanced salience divided by the weight salience of channel j. Multiplying the two entries gives s of X j times s of W j over the product of the same, which is exactly one, so the two matrices are inverses. After balancing, activation and weight channel j share the same maximum, the geometric mean. The exact inverse property is proven in equations fifteen and sixteen.
Overall salience (the larger of the two tensor ranges) never grows; it shrinks when outliers are complementary.
Guide
This inequality is the payoff of balancing. The overall salience of a tensor, s sub o, is its largest channel maximum. The larger of the two overall saliences after balancing is never bigger than before. When activation and weight outliers sit in different channels, it is much smaller, because each outlier is paired with a small partner. Since the quantization step follows the overall range, this means finer steps for both tensors at the same bit width.
Unnumbered: overall salience of a tensor = max channel salience = range quantized together at the given granularity.
Guide
An unnumbered helper definition. The overall salience of a tensor is the maximum of all its channel saliences, so for X it is the largest value among s of X one up to s of X d in. With per-tensor activation quantization, this single number sets the step size for the whole tensor, which is why one loud channel hurts everyone. Equation eight is stated in terms of it.
Salience vectors per timestep \(t\) of the activation sequence \(\mathbf X^{(1:T)}\); \(\mathbf s(\mathbf W)\) is timestep-independent.
Guide
Now time enters. For each timestep t, the activation salience vector collects the per-channel maxima s of X j at that step, one entry per input channel. The weight salience vector s of W does the same for weights and does not depend on t, since weights are fixed. These two vectors, compared step by step, are the inputs to the Spearman calibration in equations ten and eleven.
Spearman’s \(\rho\)-calibrated temporal salience: weighted sum of per-timestep activation salience vectors.
Guide
The temporal salience s rho is a weighted average of the per-timestep activation salience vectors. Each timestep t contributes its vector times a weight eta t, and the result is one salience value per input channel. It replaces the single-timestep activation salience in the balancing formula, so the scales work across the whole denoising process rather than being tuned to one step. The weights come from equation eleven.
Softmax of negative Spearman rank correlation: timesteps where activation and weight outliers are least aligned (most complementary) get more weight.
Guide
The timestep weights are a softmax of minus rho. Rho is Spearman's rank correlation between the activation salience vector at step t and the weight salience vector. Low or negative correlation means outliers sit in different channels, so balancing works well, and that timestep gets a larger weight. High correlation means outliers coincide and cannot be cancelled, so that step gets less say. The sum in the denominator just makes the weights add to one.
Balancing is exact: the layer output is unchanged in full precision.
Guide
Balancing is exact in full precision. X tilde times W tilde equals X times B X rho times B W rho times W, and since the two diagonal matrices multiply to the identity, this is just X times W. So the model is mathematically unchanged; only the ranges that the quantizers see are different. Equations fifteen and sixteen spell out the proof.
Post-adaLN folding: \(\mathbf B^{\mathbf X}_\rho\) is absorbed into the scale/shift of adaLN (i.e. into the MLP that produces them).
Guide
This shows where the activation scale hides. Instead of an extra multiply, the adaLN output is rewritten: layer norm of Z times B X rho plus gamma tilde, plus beta tilde, where gamma tilde and beta tilde are gamma and beta already multiplied by B X rho. The constant one from equation one simply becomes B X rho. Because gamma and beta come from an MLP, the scaling can be baked into that MLP, as equations eighteen to twenty-one show.
Appendix B: refined balanced salience using the SSC temporal salience \(s_\rho\) instead of a single-timestep \(s(\mathbf X_j)\).
Guide
From the appendix, this is the refined balanced salience actually used. It is the same geometric mean as equation five, but the activation salience is now the Spearman-weighted temporal salience s rho from equation ten rather than a value from one timestep. The square root of s rho of channel j times s of W j gives the target range for that channel across all denoising steps.
Appendix C proof: the two balancing matrices are exact inverses (product = identity).
Guide
This is the proof that the refined balancing matrices are exact inverses. Multiplying B X rho and B W rho entry by entry gives, for each channel, the balanced salience squared divided by s rho times s of W. Since the balanced salience is the square root of that same product, each entry equals one and the product is the identity matrix. This makes the equivalence in equation sixteen hold.
Hence mathematical equivalence of the balanced layer (Appendix C).
Guide
The equivalence stated fully. X tilde times W tilde is regrouped as X times the product of the two balancing matrices times W. Equation fifteen showed that product is the identity, so the result is X times W. In words, balancing changes nothing in full precision, and any quality change after quantization comes only from how well the new ranges quantize.
Appendix D: adaLN on latent \(\mathbf Z\in\mathbb R^{n\times d_{in}}\) produces the linear layer’s input.
Guide
The appendix restates adaLN. The linear layer's input X is the layer norm of the latent tokens Z, multiplied channel-wise by one plus gamma and shifted by beta. Z has n tokens and d in channels. This is the starting point for showing that an activation-side scale can be absorbed upstream instead of being applied as an extra operation.
The scale/shift regressor is affine in \(\mathbf c\) (last layer), so right-multiplying by a diagonal matrix can be folded into it.
Guide
The scale and shift come from the last layer of the conditioning MLP, which is affine: c times weight matrices W gamma and W beta, plus biases b gamma and b beta. Because it is a linear map plus bias, multiplying its output by a diagonal matrix is the same as multiplying its weights and biases. That is what makes the offline fold in equations twenty and twenty-one possible.
Applying \(\mathbf B^{\mathbf X}_\rho\) to adaLN output distributes over the scale, the constant 1 and the shift (echoes Eq. 13).
Guide
Applying the activation scale to adaLN's output distributes over its three parts. X tilde, which is X times B X rho, equals layer norm of Z times the sum of B X rho and gamma times B X rho, plus beta times B X rho. The constant one becomes B X rho, and gamma and beta are each rescaled. This matches equation thirteen and sets up the weight edit that follows.
Offline: scale the MLP weight columns and biases by \(\mathbf B^{\mathbf X}_\rho\).
Guide
The offline edit itself. Multiply the columns of the MLP weights W gamma and W beta, and the biases b gamma and b beta, by the diagonal activation scale B X rho. This is done once before deployment. The next equation checks that the edited MLP now outputs the already scaled gamma and beta.
The re-parameterized MLP directly outputs \(\widetilde{\boldsymbol\gamma},\widetilde{\boldsymbol\beta}\): no extra runtime multiply.
Guide
This verifies the fold. Running the condition c through the edited MLP gives c times the scaled weights plus the scaled biases, which factors into the original MLP output times B X rho, which is gamma and beta each times B X rho. So the modified adaLN produces the balanced activation directly, with no extra multiply at inference. This closes the argument that the method has zero runtime overhead.
§6Every figure
Guide
The key observation of the paper is that activation and weight outliers are complementary. The top rows plot activation magnitude per channel at three timesteps; the magenta peaks change height over time. The bottom row plots weight magnitude, whose indigo peaks sit in other channels. Because the loud channels rarely coincide, magnitude can be traded between the two tensors, and the changing activation peaks are why the method also has to handle time.
Guide
At W eight A eight, PTQ4DiT lands next to full precision. The horizontal axis is Inception Score, higher is better, and the vertical axis is FID, lower is better, for ImageNet 256 at 50 steps. Circle area is model size, 2575 megabytes for full precision and 646 for eight-bit weights. PTQ4DiT has an FID of 5.45 against 6.02 for full precision, while Q-Diffusion and PTQD sit near 15.
Guide
At W four A eight the baselines fall apart and PTQ4DiT stays close to full precision. Same axes as before, Inception Score across and FID up, with four-bit models of 324 megabytes. PTQ4DiT reaches an FID of 9.17, while every baseline is at 22.9 or worse. This is the headline result: the gain grows as the bit width shrinks.
Guide
This places the method in the DiT block. On the left, each block applies adaLN with scale and shift from the conditioning MLP, then attention, a gate alpha and a residual, then the same for the feedforward part. In the middle, each linear layer gets balancing and calibration on X and W before the two quantizers and the integer matmul. On the right, a timestep whose activation salience correlates with weight salience balances poorly, so it gets less weight.
Guide
Big activation channels produce big quantization error. The horizontal axis is the input channel index of one DiT linear layer; teal is each channel's maximum absolute value, rust is its quantization mean squared error. A few salient channels, near 620 and 985, reach about 14 to 15 where a typical channel is about 1, and the error spikes at the same places. The curve shapes are redrawn, and only the peak positions come from the paper.
Guide
Weights show the same pattern, but in different channels. Salient weight channels sit near 25, 55, 190, 290, 900 and 1080, and again the error follows the magnitude. None of these line up with the activation peaks in the previous figure. That mismatch is the complementarity that channel balancing exploits. The shape is redrawn from the paper.
Guide
Activation salience grows as sampling proceeds. Each box summarizes per-channel maxima of activations in one DiT layer at a timestep, from 250 on the left down to 10; the box is the middle half of channels and dots are outlier channels. Early on all channels stay under about 5; by the last steps the median is about 6 and outliers reach about 42. No single calibration timestep fits all of this, which motivates the Spearman-weighted calibration.
Guide
At W four A eight, only PTQ4DiT keeps images intact. The grid shows six classes, a large eagle at 512 and the rest at 256, generated by RepQ-star, Q-Diffusion and PTQ4DiT. The baselines give dark or flat colours, blur, and broken objects; the hot-air balloon turns into red blobs or noise. PTQ4DiT keeps sharp feathers, fur and architecture. The tab draws a schematic of the photo grid, not the photos.
Guide
PTQ4DiT tracks full precision at every step count on ImageNet 256 at W eight A eight. The axes are sFID across and FID up, both lower is better, and markers show 250, 100 and 50 steps. PTQ4DiT stays close to full precision throughout, while Q-Diffusion degrades sharply at 50 steps to an FID of 14.61. Robustness to fewer steps matters because fast samplers use few steps.
Guide
At 512 resolution the gap is large. Same axes, sFID across and FID up, at W eight A eight. The full-precision points come from Table 2, but the PTQ4DiT and Q-Diffusion points are read off the paper's plot, since there is no table: PTQ4DiT at an FID of roughly 11 to 14, Q-Diffusion at roughly 38 to 40. Treat these as approximate. Higher resolution means more tokens and harder activations.
Guide
This shows exactly which layers are balanced and where each matrix goes. Dots mark the three balanced layers: the QKV projection, the attention output projection, and the first feedforward layer. Each weight scale goes into that layer's weight. The activation scale goes into the adaLN MLP for QKV and the first feedforward layer, and into the preceding softmax times V matmul for the output projection. The second feedforward layer, after GELU, has no clean place to fold a scale, so it is skipped.
Guide
At W eight A eight on ImageNet 512, PTQ4DiT reproduces the full-precision image. Each column uses the same random seed, so a faithful quantizer should give the same picture. Baselines change pose, colours and background, and Q-Diffusion and PTQD distort the airship and blur the car mirror. PTQ4DiT is visually almost identical to full precision. The tab shows a schematic of the photo grid.
Guide
Across sixteen classes at W eight A eight on ImageNet 256, PTQ4DiT matches full precision every time. A tick means close to full precision, a tilde means the same class but altered, a cross means different content. PTQD often changes the meaning, turning bottles into shelves or a violin into people, while RepQ-star and Q-Diffusion alter details. The verdicts are the tab author's reading of the photo grid, not the paper's labels.
§7Results
Guide
At W four A eight on ImageNet 256, PTQ4DiT is the only method near full precision, shown dashed. The horizontal axis is sampling steps and the vertical axis is FID, lower is better. PTQ4DiT scores 7.09, 7.75 and 9.17 at 250, 100 and 50 steps, while baselines range from about 15 up to over 100. The values come from Table 1.
Guide
At W four A eight on ImageNet 512, PTQ4DiT has about three times lower FID than any baseline. Its FID is 17.55, 19 and 19.71 at 250, 100 and 50 steps, against 8 to 11 for full precision and more than 53 for every baseline. There is still a clear gap to full precision, so four-bit weights at high resolution remain hard. Values are from Table 2.
Guide
The ablation shows that channel balancing does most of the work. At W four A eight, 256 resolution and 250 steps, the plain baseline has an FID of 22.54. Adding balancing, with statistics from only the middle timestep, drops it to 8.17. Adding the Spearman timestep calibration brings it to 7.09, against 4.53 for full precision. For the thesis, this suggests smoothing matters most and calibration-set design adds a smaller gain.
| Steps | W/A | Method | Size (MB) | FID ↓ | sFID ↓ | IS ↑ | Precision ↑ |
|---|---|---|---|---|---|---|---|
| 250 | 32/32 | FP | 2575.42 | 4.53 | 17.93 | 278.50 | 0.8231 |
| 250 | 8/8 | PTQ4DM | 645.72 | 21.65 | 100.14 | 134.22 | 0.6342 |
| 250 | 8/8 | Q-Diffusion | 645.72 | 5.57 | 18.22 | 227.50 | 0.7612 |
| 250 | 8/8 | PTQD | 645.72 | 5.69 | 18.42 | 224.26 | 0.7594 |
| 250 | 8/8 | RepQ* | 645.72 | 4.51 | 18.01 | 264.68 | 0.8076 |
| 250 | 8/8 | Ours | 645.72 | 4.63 | 17.72 | 274.86 | 0.8299 |
| 250 | 4/8 | PTQ4DM | 323.79 | 72.58 | 52.39 | 35.79 | 0.2642 |
| 250 | 4/8 | Q-Diffusion | 323.79 | 15.31 | 26.04 | 134.71 | 0.6194 |
| 250 | 4/8 | PTQD | 323.79 | 16.45 | 22.29 | 130.45 | 0.6111 |
| 250 | 4/8 | RepQ* | 323.79 | 23.21 | 28.58 | 104.28 | 0.4640 |
| 250 | 4/8 | Ours | 323.79 | 7.09 | 23.23 | 201.91 | 0.7217 |
| 100 | 32/32 | FP | 2575.42 | 5.00 | 19.02 | 274.78 | 0.8149 |
| 100 | 8/8 | PTQ4DM | 645.72 | 15.36 | 79.31 | 172.37 | 0.6926 |
| 100 | 8/8 | Q-Diffusion | 645.72 | 7.93 | 19.46 | 202.84 | 0.7299 |
| 100 | 8/8 | PTQD | 645.72 | 8.12 | 19.64 | 199.00 | 0.7295 |
| 100 | 8/8 | RepQ* | 645.72 | 5.20 | 19.87 | 254.70 | 0.7929 |
| 100 | 8/8 | Ours | 645.72 | 4.73 | 17.83 | 277.27 | 0.8270 |
| 100 | 4/8 | PTQ4DM | 323.79 | 89.78 | 57.20 | 26.02 | 0.2146 |
| 100 | 4/8 | Q-Diffusion | 323.79 | 54.95 | 36.13 | 42.80 | 0.3846 |
| 100 | 4/8 | PTQD | 323.79 | 55.96 | 37.24 | 42.87 | 0.3948 |
| 100 | 4/8 | RepQ* | 323.79 | 26.64 | 29.42 | 91.39 | 0.4347 |
| 100 | 4/8 | Ours | 323.79 | 7.75 | 22.01 | 190.38 | 0.7292 |
| 50 | 32/32 | FP | 2575.42 | 6.02 | 21.77 | 246.24 | 0.7812 |
| 50 | 8/8 | PTQ4DM | 645.72 | 17.52 | 84.28 | 154.08 | 0.6574 |
| 50 | 8/8 | Q-Diffusion | 645.72 | 14.61 | 27.57 | 153.01 | 0.6601 |
| 50 | 8/8 | PTQD | 645.72 | 15.21 | 27.52 | 151.60 | 0.6578 |
| 50 | 8/8 | RepQ* | 645.72 | 7.17 | 23.67 | 224.83 | 0.7496 |
| 50 | 8/8 | Ours | 645.72 | 5.45 | 19.50 | 250.68 | 0.7882 |
| 50 | 4/8 | PTQ4DM | 323.79 | 102.52 | 58.66 | 19.29 | 0.1710 |
| 50 | 4/8 | Q-Diffusion | 323.79 | 22.89 | 29.49 | 109.22 | 0.5752 |
| 50 | 4/8 | PTQD | 323.79 | 25.62 | 29.77 | 104.28 | 0.5667 |
| 50 | 4/8 | RepQ* | 323.79 | 31.39 | 30.77 | 80.64 | 0.4091 |
| 50 | 4/8 | Ours | 323.79 | 9.17 | 24.29 | 179.95 | 0.7052 |
Guide
The main results on ImageNet 256 with DiT-XL/2. Each block of rows is one step count, 250, 100 or 50, with full precision, then eight-bit weights, then four-bit weights, both with eight-bit activations. At W8A8, PTQ4DiT matches full precision, even scoring a slightly lower FID at 100 and 50 steps, and only RepQ-star edges it out, at 250 steps. At W4A8, PTQ4DiT wins every setting, for example 7.09 against Q-Diffusion's 15.31 at 250 steps, while models shrink from 2575 to 324 megabytes.
| Steps | Method | FID ↓ | sFID ↓ | IS ↑ | Precision ↑ |
|---|---|---|---|---|---|
| 250 | FP | 8.39 | 36.25 | 257.06 | 0.8426 |
| 250 | PTQ4DM | 68.43 | 57.76 | 35.16 | 0.4712 |
| 250 | Q-Diffusion | 58.81 | 56.75 | 31.29 | 0.4878 |
| 250 | PTQD | 87.53 | 74.55 | 34.40 | 0.5144 |
| 250 | RepQ* | 59.65 | 73.71 | 33.19 | 0.3676 |
| 250 | Ours | 17.55 | 46.92 | 123.49 | 0.7592 |
| 100 | FP | 9.06 | 37.58 | 239.03 | 0.8300 |
| 100 | PTQ4DM | 70.63 | 57.73 | 33.82 | 0.4574 |
| 100 | Q-Diffusion | 62.05 | 57.02 | 29.52 | 0.4786 |
| 100 | PTQD | 81.17 | 66.58 | 35.67 | 0.5166 |
| 100 | RepQ* | 62.70 | 73.29 | 31.44 | 0.3606 |
| 100 | Ours | 19.00 | 50.71 | 121.35 | 0.7514 |
| 50 | FP | 11.28 | 41.70 | 213.86 | 0.8100 |
| 50 | PTQ4DM | 71.69 | 59.10 | 33.77 | 0.4604 |
| 50 | Q-Diffusion | 53.49 | 50.27 | 38.99 | 0.5430 |
| 50 | PTQD | 73.45 | 59.14 | 39.63 | 0.5508 |
| 50 | RepQ* | 65.92 | 74.19 | 30.92 | 0.3542 |
| 50 | Ours | 19.71 | 52.27 | 118.32 | 0.7336 |
Guide
Results at 512 resolution with W four A eight. PTQ4DiT reaches FIDs of 17.55, 19.00 and 19.71 at 250, 100 and 50 steps, while every baseline stays between about 53 and 88. Precision tells the same story, about 0.75 against about 0.5 or lower. The gap to full precision, which scores 8.39 at 250 steps, is still large, so this is the setting where the method is most helpful and also most incomplete.
| Method | Size (MB) | FID ↓ | sFID ↓ | IS ↑ | Precision ↑ |
|---|---|---|---|---|---|
| FP | 2575.42 | 4.53 | 17.93 | 278.50 | 0.8231 |
| Q-Diffusion | 323.79 | 15.31 | 26.04 | 134.71 | 0.6194 |
| Baseline | 323.79 | 22.54 | 27.31 | 105.55 | 0.4791 |
| + CSB | 323.79 | 8.17 | 24.96 | 187.94 | 0.7183 |
| + CSB + SSC (Ours) | 323.79 | 7.09 | 23.23 | 201.91 | 0.7217 |
Guide
The ablation table separates the two ideas at W4A8, 256 resolution, 250 steps. The baseline quantizer scores an FID of 22.54, worse than Q-Diffusion's 15.31. Channel balancing alone, calibrated at the midpoint timestep, cuts it to 8.17 and raises Inception Score from about 106 to 188. The full method with Spearman calibration reaches 7.09. So most of the gain is balancing, and timestep weighting adds a consistent final improvement.
Setup: DiT-XL/2 class-conditional, DDPM sampler 250/100/50 steps; 10k samples (256) / 5k (512); FID, sFID, IS, Precision via ADM toolkit; quantizer optimization follows Q-Diffusion; RepQ* = RepQ-ViT extended with temporal calibration. Sizes are model storage; no wall-clock latency is reported (all experiments are simulated/fake quantization on RTX A6000).
§8Why it matters for this thesis
PTQ4DiT → LTX-2.3 on OpenVINO / NNCF
- CSB is SmoothQuant with α=0.5 and max-abs statistics, and NNCF already implements SmoothQuant for OpenVINO models (
nncf.quantizewithModelType.TRANSFORMER;AdvancedQuantizationParameters(smooth_quant_alphas=...)). For a W8A8 track on LTX-2.3, the CSB half of this paper comes almost free: set α≈0.5 for MatMul layers and check which layers NNCF actually smooths. - SSC is only about the calibration set. Its idea is to pick which timesteps’ activation statistics to trust. In NNCF this is controlled through the calibration dataset: dump inputs to the LTX transformer from several denoising steps (the paper uses 10–25 timesteps × 32 samples), and optionally over-sample the steps where activation/weight salience is poorly correlated. Computing Spearman ρ per layer needs a short PyTorch hook script. No custom kernels are required.
- Re-parameterization matches LTX’s DiT design. LTX-Video/LTX-2 blocks use adaLN-style scale/shift modulation (timestep-conditioned, AdaLN-single). Folding BX into that modulation (Eqs. 13, 19–21, with the constant “1” becoming BX) and BW into the Linear weights can be done in PyTorch before OpenVINO conversion, so the exported IR has no extra ops. It must be done carefully where modulation parameters are shared across blocks.
- For the weight-only int8/int4 track (
nncf.compress_weights), activations stay FP16, so CSB’s benefit for activations does not apply. But the weight-side insight still matters. Moving salience between X and W before compression is what NNCF’s data-aware AWQ and scale estimation options do, and they also need multi-timestep calibration data. PTQ4DiT’s W4A8 result (FID 7.09 vs 4.53 FP) shows how hard it is to get 4-bit DiT weights right. - Caveats: the paper covers image generation with DiT-XL/2 (~675M params), not text-to-video+audio at LTX scale. It reports no real latency, and it uses per-tensor activation and per-channel weight quantization. Present it as the “DiT-specific outlier + timestep” baseline motivating the calibration and smoothing choices, and compare with ViDiT-Q / Q-DiT for video DiTs.
Guide
The practical reading for the thesis: the balancing half of PTQ4DiT is SmoothQuant with alpha one half, which NNCF already offers, so a W8A8 run on LTX-2.3 can use it by setting the smooth quant alpha to about 0.5 and checking which MatMuls are smoothed. The timestep half becomes a calibration-set decision: collect transformer inputs from 10 to 25 denoising steps. For weight-only int4, look at NNCF's AWQ and scale estimation instead, and remember the paper covers images, not video with audio.
ViDiT-Q: Efficient and Accurate Quantization of Diffusion Transformers for Image and Video Generation
Earlier quantizers break on text-to-video DiTs because the data inside one quantization group varies along tokens, CFG halves, timesteps and channels. ViDiT-Q fixes this in three steps: dynamic per-token activation scales, channel balancing that scales first and then rotates, and a mixed-precision search that measures each layer group with the metric it actually affects. The result is W8A8 and W4A8 video/image generation at about FP16 quality, with real CUDA-kernel gains.
- Bit-widths
- W8A8 · W6A6 · W4A8 (MP)
- Models
- OpenSORA, Latte, PixArt-α/Σ, Inf-DiT
- Memory (A100)
- 1.99× W8A8 · 2.42× W4A8
- Latency (A100)
- 1.71× W8A8 · 1.38× W4A8
- VBench overall, W4A8
- 25.94 vs FP16 26.21
- Weight incoherence
- 40.75 → 5.02
Reading guide
ViDiT-Q asks why quantizers that work for language models and image U-Nets fall apart on text-to-video diffusion transformers, and how to fix that. Its answer is that the numbers sharing one scale vary along tokens, the two classifier-free guidance halves, timesteps and channels, so it adds per-token dynamic activation scales, a two-stage channel balancing, and a mixed-precision search judged by the right quality metric per layer group. That gets W eight A eight and W four A eight video and image generation close to FP16 quality, with measured GPU speed-ups. The tab runs from the big picture and the problem, through the method, every equation and every figure, to the result tables and a thesis box. Among the sixteen papers it is the third diffusion quantization paper, after Q-Diffusion and PTQ4DiT and before SVDQuant, and the first built for video transformers like LTX.
§0Before reading
To follow ViDiT-Q, three ideas are needed: what it means to quantize a number to 8 or 4 bits with a scale, what happens inside one denoising step of a video diffusion transformer, and which group of numbers shares one scale. The paper is in the atlas because it is the first quantization method built for text-to-video transformers like LTX, and its layer-sensitivity search is the part most directly reusable with NNCF.
Guide
Quantizing means rounding every number to one of a few levels, and the range decides how fine those levels are. The scale is set from the smallest and largest value in a group, so one magenta outlier stretches the range and the ordinary teal values share only about four levels. Eight bits give two hundred fifty six levels, four bits only sixteen. W four A eight means four bit weights and eight bit activations.
Guide
Which numbers share one scale matters as much as the number of bits. On the left, a single static scale covers the whole activation matrix and is fixed in advance from calibration data. On the right, ViDiT-Q gives every token its own scale, measured live at each step, so it adapts to timesteps and guidance passes. Notice the magenta column: per token scales cannot fix an outlier channel, which is why the paper adds channel balancing.
Guide
A video diffusion transformer runs the same blocks about twenty times, once per denoising step, shown in gold. Frames are cut into patches, and every patch is a token. Each block has spatial attention, temporal attention, cross attention to the text, and a feed forward network. The timestep enters through adaptive layer norm, and classifier free guidance runs every step twice. These are the four sources of variation that ViDiT-Q is designed around.
Guide
ViDiT-Q follows Q-Diffusion, which handled timesteps in U-Net models, and PTQ4DiT, which moved to image transformers. It is the first method built for text to video transformers. It borrows SmoothQuant style scaling and Hadamard rotation, and adds three pieces in indigo. The metric decoupled mixed precision search is the part to reuse for LTX-2.3 with NNCF. SVDQuant and DVD-Quant come next.
Terms used in this paper
- Diffusion transformer (DiT)
- A diffusion model whose denoiser is a transformer working on patch tokens instead of a convolutional U-Net. LTX-2.3 is one.
- Timestep
- One step of the denoising loop. The paper uses 20 steps, and activation statistics change from step to step.
- Classifier-free guidance (CFG)
- Each step runs the model with and without the text prompt and pushes the result towards the prompted one. The two halves have different activation ranges.
- W8A8, W4A8, W4A8-MP
- Weight bits and activation bits. MP means mixed precision: some layers use more bits than the headline number.
- Scale and zero point
- The step size \(s\) and offset \(z\) that map real numbers to integers. Everything in one group shares them.
- Static vs dynamic quantization
- Static fixes activation scales in advance from calibration data. Dynamic computes them at run time from the actual values, at a small cost.
- Per-token, per-channel
- Grouping choices: one scale per row of the activation (token) or per output channel of the weight. Both run along the matrix multiply's summation axis, so integer kernels can use them.
- Outlier channel, incoherence
- A channel with much larger values than the rest. The paper measures this as incoherence, roughly the largest value divided by the average.
- Channel balancing
- Moving outliers so all channels have similar ranges: SmoothQuant-style scaling (shift range from activations to weights) and Hadamard rotation (mix channels to spread outliers out).
- adaLN
- Adaptive layer norm. The timestep produces a scale and shift for each channel; in these models a learned constant table is added to it, which splits outliers into a static and a time-varying part.
- OpenSORA, Latte, PixArt
- Open models the paper tests. OpenSORA (STDiT blocks) and Latte generate video; PixArt-α and PixArt-Σ generate images.
- CLIPSIM, VQA, FlowScore
- Video metrics: CLIPSIM checks text match, DOVER VQA scores aesthetic and technical quality, and FlowScore uses optical flow to judge motion consistency.
- FID, VBench
- FID compares generated and real image statistics (lower is better). VBench scores videos on many separate dimensions such as consistency and motion.
- A100 and INT8 GEMM kernels
- The A100 is an NVIDIA data-centre GPU whose Tensor Cores run integer matrix multiplies fast. The paper's speed-ups come from custom CUDA kernels on it, which OpenVINO cannot use.
Guide
These are the terms the paper uses without explaining. The most important are static versus dynamic quantization, per token and per channel grouping, and channel balancing, because the whole method is built from them. The metric names matter too: CLIPSIM for text match, VQA for visual quality, and FlowScore for motion. Keep in mind that the speed-ups come from custom GPU kernels on an A100, which OpenVINO cannot use.
§2Big picture
Guide
A single static scale is why naive W4A8 turns video into noise, and ViDiT-Q replaces it with three targeted fixes. Follow the lower path left to right: each token gets its own scale computed on the fly, channels are balanced by a fixed scaling and then a Hadamard rotation, and a metric-aware search puts the most sensitive layers at eight bits. The rest of the tab unpacks each numbered fix in turn.
Only linear layers are quantized. Attention matmuls, norms, t/y embedding and the final layer stay FP16 (App. A.1). No retraining is needed. Calibration is needed only for the SmoothQuant scaling α and for the mixed-precision sensitivity runs.
§3The problem
Guide
Quantization error here is mostly rounding error, and one outlier makes it large. The top bar shows min-max scaling: the sixteen four-bit levels must stretch to reach the outlier, so the step s is big and most ordinary values share about three levels. The lower bar shows a smaller, balanced group where the same sixteen levels sit close together. Every fix in the paper is a way to shrink the spread inside a group.
Guide
A static tensor-wise scale is really one enormous group, because DiT activations vary along four axes at once. The cube shows tokens and channels, with timesteps stacked behind and the conditional and unconditional guidance halves side by side. The four labels name the variations: between tokens, between guidance halves, across timesteps, and outlier channels whose strength changes with time. Each axis later gets its own remedy in the method section.
- Token-wise: visual tokens differ in both space and time (video).
- Condition-wise: the conditional and unconditional CFG passes (batch of 2) have different ranges.
- Timestep-wise: the same layer's activations shift across denoising steps.
- Channel-wise, time-varying: outlier channels exist, and how strong they are changes with t.
- Metric problem: a layer with low MSE can still ruin alignment or temporal consistency, so MSE alone is not a good enough objective for generation.
§4Method
4.1 Fine-grained grouping + dynamic quantization
Guide
Groups must lie along the summation axis of the matrix multiply, otherwise the integer kernel cannot use them. Weights get one scale per output row and activations one scale per token, both spanning C in. Q-DiT's per-input-channel groups are accurate but force floating-point casts inside the sum, so they are slow. Because token scales come from each token's live min and max, they automatically track every timestep and guidance half.
4.2 Static-dynamic channel balancing
Guide
Channel imbalance has a fixed part and a part that changes with the timestep, so ViDiT-Q uses two tools. The adaLN scale-shift table is constant, which a SmoothQuant scale with one alpha, fused into the previous operation, can handle. The timestep embedding adds a moving part, which an online Hadamard rotation spreads evenly. This is the design behind fix number two; the next block shows why both halves are needed.
Guide
Scaling and rotation together beat either one alone. The bars show incoherence, roughly the largest weight divided by the average, for one MLP layer: 40.75 originally, 17.77 with static scaling, 12.83 with QuaRot rotation, and 5.02 with ViDiT-Q's static-dynamic combination. With only sixteen levels at four bits, a ratio near thirteen still wastes most levels, so only the combined method is small enough.
4.3 Metric-decoupled mixed precision: the sensitivity analysis to replicate
Guide
This is the part of ViDiT-Q most worth replicating: each layer is judged by the metric it actually damages. Cross-attention is scored by CLIPSIM for text alignment, spatial self-attention and feed-forward by DOVER VQA for visual quality, and temporal attention by FlowScore for motion. Layers compete only within their group, and the whole analysis repeats for four timestep ranges, with group budgets of 5.54, 4.05 and 4.34 bits averaging five bits.
- Pick the aspects and one metric each: video → VQA (quality), CLIPSIM (text alignment), FlowScore (temporal); image → FID and CLIPScore (App. E.3.2 step 1).
- Group layers by operator type and draw the layer-type × metric heatmap (Fig. 20): relative metric drop (FP−Q)/FP, then z-score, then softmax over metrics. Each group should have one clearly dominant metric.
- Split the denoising trajectory into 4 equal time ranges (steps 0–5, 6–10, 11–15, 16–20) and run steps 4–6 separately for each range.
- Budget per group: quantize each whole group, measure the MSE of the output against the FP16 generation, and split the overall bit budget between groups (example: 5.54 / 4.05 / 4.34, average 5.00).
- Sensitivity per layer: inside a group, quantize one layer or block at a time and record that group's metric error against the FP16 video. This is done at two levels: between blocks, then between layers inside a block.
- Greedy allocation: start every layer at 4 bit and move the most sensitive to 8 bit until the group budget is used up.
Guide
The procedure moves from coarse to fine. First, the method picks one metric per quality aspect and confirms with a heatmap that each layer type mainly hurts one of them. Then, for each timestep range, it splits the total bit budget between groups using a cheap MSE test, ranks layers inside each group with their own metric, and greedily promotes the most sensitive layers from four to eight bits until the group budget is spent.
Guide
Two pieces of pseudocode, both reconstructed by the tab because the paper has no algorithm box. Algorithm A is the offline search: reference videos, per-group budgets from MSE, per-layer sensitivity from the group metric, then greedy promotion to eight bits, repeated per time range. Algorithm B is what one quantized linear layer does at run time: fixed scaling, Hadamard rotation, per-token quantization, an integer matrix multiply, and one rescale back to floating point.
§5Every equation
The task loss between the FP and quantized network is replaced by a sum of layer-wise weight and activation quantization errors over L layers.
Guide
The usual quantization objective replaces the real task loss with a simpler proxy. On the left is the task loss between the full-precision network f FP and the quantized network f q. On the right is the sum over all L layers of the squared weight error, W minus Q of W, plus the squared activation error, X minus Q of X. The paper argues this layer-wise proxy is not enough for visual generation, which motivates its metric-decoupled search.
Dequantization: scale s and zero point z are shared by every element in a group \(\mathbf{x}\in\mathbb{R}^g\).
Guide
Dequantization maps an integer back to a real value. x hat, the approximation of x, equals the scale s times the integer x int minus the zero point z. The key point is that s and z are shared by every element in the group, so the whole design question is which elements should share them.
b-bit uniform quantizer: round to nearest, then clamp to [0, 2b−1]. The error has two parts, clamping and rounding.
Guide
Equation two is the b-bit uniform quantizer. Divide x by the step s, round to the nearest integer, add the zero point z, then clamp to the range zero to two to the b minus one. Error comes from two places: clamping values that fall outside the range, and rounding the ones inside. The next equation shows that with min-max ranges only rounding is left.
Min-max scaling: nothing is clipped, so the error is set by s, which grows with the spread inside the group.
Guide
With min-max scaling the step s is the group's maximum minus its minimum, divided by two to the b minus one, so nothing is ever clipped. The rounding error then lies between minus half a step and plus half a step. The takeaway is that error grows directly with the spread inside a group, which is the central claim of the error analysis.
μ-coherence (from QuIP): a group is harder to quantize when its largest element is far above the average magnitude. The paper writes ‖W‖F for the group's norm.
Guide
Mu-coherence, borrowed from QuIP, measures how spiky a group is. It says the largest element is at most mu times the group's Frobenius norm divided by the square root of the group size g, which is roughly mu times the average magnitude. A large mu means one value towers over the rest, making the group hard to quantize. The incoherence numbers in figures 3 and 8 are this idea in practice.
SmoothQuant channel scaling: the per-input-channel mask s moves difficulty between activation and weight, and α sets how much moves.
Guide
Equation three is SmoothQuant channel scaling. The output Y stays the same when the activations X are divided channel by channel by s and the weights W are multiplied by s. Each s i is the activation channel maximum to the power alpha, divided by the weight channel maximum to the power one minus alpha. Alpha decides how much difficulty moves from activations to weights. ViDiT-Q uses this as the static half of its balancing.
Rotation (QuaRot/SpinQuant): an orthogonal Q leaves the output unchanged and spreads channel outliers. ViDiT-Q uses a Hadamard Q.
Guide
Rotation is the other balancing tool, used by QuaRot and SpinQuant. Q is an orthogonal matrix, so Q times Q transpose is the identity, and multiplying X by Q and the weights by Q transpose leaves the output unchanged. The rotation mixes channels, spreading an outlier's energy across many of them. ViDiT-Q uses a Hadamard matrix as Q, applied online as the dynamic half of its balancing.
App. C.1: VBench dynamic degree measured relative to FP16. Jitter raises the raw value, so the radar chart uses 1 − the relative change.
Guide
A small fix to how VBench's dynamic degree is read. The first term is the relative change of the quantized score f Q against the FP16 score f FP. Quantization jitter makes videos look more dynamic, so a higher raw value is not better. The radar chart in figure 10 therefore plots one minus this relative change, so that matching FP16 scores highest.
App. E.2 / Fig. 19: every output element sums over Cin, so the elements in that sum must share quantization parameters.
Guide
Each output element y is the sum, over the C in input channels, of weight w i times input x i. Because the integer kernel adds these products directly, all elements in the sum should share quantization parameters. This single line is the reason for the per-output-channel weight and per-token activation grouping in figure 19.
Quantized GEMM expansion: an integer GEMM Wintxint followed by one FP rescale swsx, plus zero-point correction terms.
Guide
Expanding the quantized product shows why the grouping is hardware friendly. Substitute the dequantized weight and activation, and the main term becomes s w times s x times an integer matrix multiply of W int and x int, followed by one floating-point rescale. The remaining three terms are zero-point corrections that can be precomputed or cheaply added. The integer multiply is where the speed-up comes from.
App. E.3.1 (stated in words in the paper): relative metric drop for layer type ℓ and metric m, standardized, then normalized so each layer type's column sums to 1 (Fig. 20).
Guide
This turns sensitivity runs into the heatmap of figure 20. For layer type l and metric m, delta is the relative drop, full-precision metric minus quantized metric, divided by the full-precision value. The drops are standardized with a z-score, then a softmax over metrics makes each layer type's column sum to one. The paper describes this in words, so the formula is the tab's reconstruction.
§6Every figure
Guide
Figure 1 is the paper's headline: existing quantizers break at W8A8 and W4A8, and ViDiT-Q does not. On the left, OpenSORA video frames shift colour and blur at W8A8 and become saturated noise at W4A8 under the baseline, while ViDiT-Q matches FP16. The middle repeats this for a PixArt-alpha image. The right bars claim two to two and a half times less memory and 1.4 to 1.7 times lower latency.
Guide
Figure 2 is the paper's roadmap, read left to right. The error analysis says rounding error comes from variation inside a group. The challenges column lists four kinds of variation, token, guidance, timestep and time-varying channel, plus the fact that quantization hurts several quality aspects differently. Each challenge points to one technique in section four, which is how the method blocks above are organised.
Guide
Figure 3 explains why ViDiT-Q needs both scaling and rotation. Top left, fc1 activations are far more imbalanced at t equals 999 than at t equals 0, so one SmoothQuant alpha cannot fit every step. Bottom left, rotation cuts weight max over mean from 40.75 to 12.83, still too spiky for four bits. On the right, the constant scale-shift table and the timestep block split the imbalance into static and dynamic parts. Channel plots are redrawn in shape only.
Guide
Figure 4 motivates metric-decoupled mixed precision. On the left, quantizing Block 10's MLP changes nothing while Block 26's MLP visibly degrades the video, and cross-attention changes content while MLPs lower quality. So sensitivity depends on layer type. The right half is the three-step recipe per time range: group budgets from MSE, then block and layer sensitivity by metric, then greedy four-to-eight-bit promotion to a five-bit average.
Guide
Figure 5: on the OpenSORA prompt set, only ViDiT-Q keeps quality at W4A8. The chart plots VQA aesthetic score for each method at W8A8, W6A6 and W4A8, against an FP16 line at 63.4. Q-DiT and PTQ4DiT fall to nearly zero at W4A8, while ViDiT-Q holds 60.6. The frames on the right show what those numbers look like: a blob, a noisy texture, and a near-FP16 forest.
Guide
Figure 6 shows the same story for images with PixArt-alpha on COCO. Lower FID is better. ViDiT-Q reaches an FID of 74.33 at W4A8 against 73.34 for FP16, while Q-DiT explodes to 475.8 and PTQ4DiT is already poor at W8A8 with 127.9. The W4A8 samples confirm it: pure noise, a blurred silhouette, and a clean match to FP16.
Guide
Figure 7 shows the speed-ups are real, measured with CUDA kernels on an A100. W8A8 cuts memory 1.99 times and latency 1.71 times, and the extra cost of dynamic quantization and channel balancing is small, since naive W8A8 gets 1.74 times. W4A8 saves more memory, 2.42 times, but is slower than W8A8 at 1.38 times, because weights are upcast to eight bits in a compute-bound workload. Bars are rebuilt from the paper's table.
Guide
Figure 8 is the evidence for static-dynamic balancing. Each panel plots the weights of one MLP layer across about 4600 input channels, with incoherence in the title. The original has spikes and scores 40.75, static scaling gives 17.77, QuaRot 12.83, and ViDiT-Q's combination 5.02, leaving an even band with no isolated spikes. Shapes are redrawn, but axis ranges and numbers follow the paper.
Guide
Figure 9 justifies quantizing only linear layers. The Nsight trace breaks one OpenSORA transformer block on an A100 into spatial, temporal and cross-attention plus the MLP. The FlashAttention kernels take only 14.3 percent of kernel time, while elementwise work and floating-point matrix multiplies take most of the rest. So quantizing the attention matmuls would buy little. Kernel positions are approximate.
Guide
Figure 10 is a VBench radar chart over eight quality dimensions, each normalised by its maximum, so a larger shape is better. All ViDiT-Q settings, W8A8, W6A6 and W4A8, overlap the FP16 outline. Naive W8A8 caves in on scene consistency and on one minus the dynamic-degree change, the jitter measure from the earlier equation. The shape is redrawn and values are approximate.
Guide
Figure 11 shows what a jitter score looks like. Four frames of a city skyline: FP16 and ViDiT-Q W8A8 keep the same buildings, while naive W8A8 turns blue and the towers change from frame to frame. That flicker inflates VBench's dynamic degree and lowers scene consistency, which is why the paper measures dynamic degree relative to FP16.
Guide
Figure 12 is a subject-consistency failure. In naive W8A8 the bear's ear, boxed in red, is missing in early frames and then pops in, with a colour shift too. ViDiT-Q keeps the ear in every frame like FP16. It shows that quantization can break temporal coherence even when single frames look fine, so video needs temporal metrics.
Guide
Figure 13 covers single-frame image quality. In a snowy mountain valley, naive W8A8 adds a blue tint and blurs the left mountain, while ViDiT-Q W8A8 looks like FP16. Colour shift and blur are the typical signs of badly scaled activations, and they match the drop in imaging and aesthetic scores in Table 1.
Guide
Figure 14 gives text-to-image examples at W4A8 on three COCO prompts with PixArt-alpha. ViDiT-Q matches FP16 in both content and detail, Q-DiT gives pure noise, and PTQ4DiT gives blurry blobs. The takeaway is that both visual quality and text alignment survive four-bit weights with ViDiT-Q, matching the FID and CLIP numbers of figure 6.
Guide
Figure 15 is the ablation shown as pictures, one technique added per column on a sea turtle prompt at W4A8. The baseline is blank, dynamic quantization brings back the ocean, scaling-based balancing reduces colour errors, static-dynamic balancing makes the turtle appear, and mixed precision finally matches FP16. Every one of the three fixes contributes something visible. Table 2 gives the numbers.
Guide
Figure 16 extends the method to Inf-DiT super-resolution, upscaling a DIV2K penguin crop four times. FP16, W8A8 and W4A8 look the same, with PSNR of 25.80, 25.86 and 26.01. The tiny rise at W4A8 is noise, not a real gain. The point is that ViDiT-Q generalises beyond text-to-video to another DiT task.
Guide
Figure 17 shows the INT8 speed-up carries over to other NVIDIA GPUs. Latency normalised to FP16 falls by 1.82 times on a Jetson Orin Nano, 1.60 times on an RTX 3090 and 1.71 times on an A100, with memory about halved everywhere. The lesson for other hardware is that gains need native eight-bit compute kernels, which is why Intel CPU and Arc results must be measured separately.
Guide
Figure 18 pushes PixArt-sigma to very low bits with mixed precision. W4A4-MP keeps two thirds of layers at W4A4, about a five-bit average, and W2A8-MP keeps about half at two-bit weights. Both images still look like FP16, with slight detail loss such as fewer stars. This shows the headroom that mixed precision creates, with the numbers in Table 5.
Guide
Figure 19 derives the hardware-friendly grouping from the matrix multiply. The weight matrix is C out by C in and the activations are tokens by C in; the yellow bars mark which elements share a scale and zero point. Since each output sums along C in, weights get per-row parameters and activations per-token ones. Then s w times s x factors out, leaving a pure integer multiply followed by one rescale.
Guide
Figure 20 is the evidence that each layer type mainly hurts one metric. Rows are metrics, columns are layer types, and each column sums to one. Cross-attention loads on CLIP at 0.82, feed-forward on VQA at 0.84, temporal attention on FlowScore at 0.88, and spatial attention is the most mixed but still mostly VQA at 0.62. This justifies scoring each group with a single metric.
§7Results
| Method | W/A | Imaging Q. | Aesthetic Q. | Motion Sm. | Dynamic Deg. | BG Cons. | Subject Cons. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|---|---|---|---|
| FP16 | 16/16 | 63.68 | 57.12 | 96.28 | 56.94 | 96.13 | 90.28 | 39.61 | 26.21 |
| Q-Diffusion | 8/8 | 60.38 | 55.15 | 94.44 | 68.05 | 94.17 | 87.74 | 36.62 | 25.66 |
| Q-DiT | 8/8 | 60.35 | 55.80 | 93.64 | 68.05 | 94.70 | 86.94 | 32.34 | 26.09 |
| PTQ4DiT | 8/8 | 56.88 | 55.53 | 95.89 | 63.88 | 96.02 | 91.26 | 34.52 | 25.32 |
| SmoothQuant | 8/8 | 62.22 | 55.90 | 95.96 | 68.05 | 94.17 | 87.71 | 36.66 | 25.66 |
| Quarot | 8/8 | 60.14 | 53.21 | 94.98 | 66.21 | 95.03 | 85.35 | 35.65 | 25.43 |
| ViDiT-Q | 8/8 | 63.48 | 56.95 | 96.14 | 61.11 | 95.84 | 90.24 | 38.22 | 26.06 |
| Q-DiT | 4/8 | 23.30 | 29.61 | 97.89 | 4.166 | 97.02 | 91.51 | 0.00 | 4.985 |
| PTQ4DiT | 4/8 | 37.97 | 31.15 | 92.56 | 9.722 | 98.18 | 93.59 | 3.561 | 11.46 |
| SmoothQuant | 4/8 | 46.98 | 44.38 | 94.59 | 21.67 | 94.36 | 82.79 | 26.41 | 18.25 |
| Quarot | 4/8 | 44.25 | 43.78 | 92.57 | 66.21 | 94.25 | 84.55 | 28.43 | 18.43 |
| ViDiT-Q | 4/8 | 61.07 | 55.37 | 95.69 | 58.33 | 95.23 | 88.72 | 36.19 | 25.94 |
Guide
Table 1 scores OpenSORA text-to-video on eight VBench dimensions. At W8A8 most methods are near FP16, and ViDiT-Q is closest on imaging quality at 63.48 against 63.68. At W4A8 the baselines collapse, Q-DiT for example drops to zero scene consistency, while ViDiT-Q with mixed precision keeps an overall consistency of 25.94 against 26.21 for FP16. Note that higher dynamic degree is not better here, because jitter inflates it.
Guide
Chart T1 pulls imaging quality out of Table 1, with W8A8 and W4A8 bars for each method and FP16 at 63.68 as the line. Every baseline loses a lot at W4A8, falling to between 23 and 47, while ViDiT-Q drops only from 63.5 to 61.1. It is the quickest single view of the paper's main result.
| Method | W/A | CLIPSIM | CLIP-Temp | VQA-Aesthetic | VQA-Technical | Δ FlowScore ↓ |
|---|---|---|---|---|---|---|
| FP16 | 16/16 | 0.1797 | 0.9988 | 63.40 | 50.46 | – |
| Q-Diffusion | 8/8 | 0.1781 | 0.9987 | 51.68 | 38.27 | 0.328 |
| Q-DiT | 8/8 | 0.1788 | 0.9977 | 61.03 | 34.97 | 0.473 |
| PTQ4DiT | 8/8 | 0.1836 | 0.9991 | 54.56 | 53.33 | 0.440 |
| SmoothQuant | 8/8 | 0.1951 | 0.9986 | 59.78 | 51.53 | 0.331 |
| Quarot | 8/8 | 0.1949 | 0.9976 | 58.73 | 52.28 | 0.215 |
| ViDiT-Q | 8/8 | 0.1950 | 0.9991 | 60.70 | 54.64 | 0.089 |
| Q-DiT | 6/6 | 0.1710 | 0.9943 | 11.04 | 1.869 | 41.10 |
| PTQ4DiT | 6/6 | 0.1799 | 0.9976 | 59.97 | 43.89 | 0.997 |
| SmoothQuant | 6/6 | 0.1807 | 0.9985 | 56.45 | 48.21 | 29.26 |
| Quarot | 6/6 | 0.1820 | 0.9975 | 61.47 | 53.06 | 0.146 |
| ViDiT-Q | 6/6 | 0.1791 | 0.9984 | 64.45 | 51.58 | 0.625 |
| Q-DiT | 4/8 | 0.1687 | 0.9833 | 0.007 | 0.018 | 3.013 |
| PTQ4DiT | 4/8 | 0.1735 | 0.9973 | 2.210 | 0.318 | 0.108 |
| SmoothQuant | 4/8 | 0.1832 | 0.9983 | 31.96 | 22.85 | 0.415 |
| Quarot | 4/8 | 0.1817 | 0.9965 | 47.36 | 33.13 | 0.326 |
| ViDiT-Q | 4/8 | 0.1809 | 0.9989 | 60.62 | 49.38 | 0.153 |
Guide
This table backs figure 5 with five metrics on the OpenSORA prompt set: CLIPSIM and CLIP-Temp for text and temporal alignment, VQA aesthetic and technical for visual quality, and delta FlowScore, where lower is better. At W8A8 ViDiT-Q has the lowest FlowScore change, 0.089. At W4A8 its VQA scores of 60.62 and 49.38 are far above every baseline, near FP16's 63.40 and 50.46.
| Method | W/A | FID ↓ | CLIP ↑ | ImageReward ↑ |
|---|---|---|---|---|
| FP16 | 16/16 | 73.34 | 0.258 | 0.901 |
| Q-Diffusion | 8/8 | 96.54 | 0.239 | 0.186 |
| Q-Diffusion | 4/8 | 91.95 | 0.228 | -0.224 |
| Q-DiT | 8/8 | 73.60 | 0.256 | 0.854 |
| Q-DiT | 4/8 | 475.8 | 0.127 | -2.277 |
| PTQ4DiT | 8/8 | 127.9 | 0.217 | -1.216 |
| PTQ4DiT | 4/8 | 171.9 | 0.177 | -2.064 |
| ViDiT-Q | 8/8 | 75.61 | 0.259 | 0.917 |
| ViDiT-Q | 4/8 | 74.33 | 0.257 | 0.887 |
Guide
PixArt-alpha text-to-image on the first 1024 COCO prompts, with FID lower is better and CLIP and ImageReward higher is better. ViDiT-Q at W4A8, without mixed precision, gets FID 74.33, CLIP 0.257 and ImageReward 0.887, almost identical to FP16. Q-DiT at W4A8 and PTQ4DiT at both bit-widths break down badly, so ViDiT-Q's advantage holds for images too.
| Bit-width (W/A) | Memory opt. | Latency opt. |
|---|---|---|
| 16/16 | 1.00× | 1.00× |
| 8/8 (naive) | 1.99× | 1.74× |
| 8/8 (ours) | 1.99× | 1.71× |
| 4/8 (ours) | 2.42× | 1.38× |
Guide
The table behind figure 7, measured on an A100 with batch one and twenty steps. ViDiT-Q W8A8 saves memory 1.99 times and latency 1.71 times, almost as fast as naive W8A8 at 1.74, so the accuracy fixes cost little speed. W4A8 saves 2.42 times memory but only 1.38 times latency. The lesson is to report memory and latency separately.
| Quant params | Channel balance | Mixed precision | W/A | CLIPSIM | CLIP-Temp | VQA-A | VQA-T | Δ Flow |
|---|---|---|---|---|---|---|---|---|
| – | – | – | 16/16 | 0.180 | 0.998 | 64.198 | 51.904 | – |
| Static & Tensor-wise | – | – | 4/8 | 0.201 | 0.997 | 0.178 | 0.086 | 0.603 |
| Dynamic & Token-wise | – | – | 4/8 | 0.196 | 0.998 | 32.217 | 10.994 | 0.109 |
| Dynamic & Token-wise | Scaling-based | – | 4/8 | 0.191 | 0.999 | 31.963 | 22.847 | 0.415 |
| Dynamic & Token-wise | Rotation-based | – | 4/8 | 0.181 | 0.999 | 47.356 | 33.128 | 0.326 |
| Dynamic & Token-wise | Static-Dynamic | – | 4/8 | 0.181 | 0.999 | 60.216 | 42.257 | 0.151 |
| Dynamic & Token-wise | Static-Dynamic | MSE-based | 4/8 | 0.179 | 0.999 | 53.335 | 38.729 | 0.258 |
| Dynamic & Token-wise | Static-Dynamic | Metric Decoupled | 4/8 | 0.199 | 0.999 | 60.616 | 49.383 | 0.334 |
Guide
Table 2 is the ablation on OpenSORA at W4A8, adding one technique per row. Static tensor-wise quantization collapses to a VQA aesthetic score near zero. Dynamic per-token scales lift it to 32, rotation to 47, and static-dynamic balancing to 60. MSE-based mixed precision then makes things worse, 53, while metric-decoupled mixed precision gives the best visual quality, 60.6 aesthetic and 49.4 technical. Each claimed fix is tested here.
Guide
Chart T2 turns the ablation into a ladder of VQA bars, aesthetic and technical, against FP16's 64.2. The big steps are the move to dynamic per-token quantization, which rescues the model from collapse, and static-dynamic balancing, the largest single gain. The dip at MSE-based mixed precision is the key lesson: choosing bits by MSE hurts, while choosing them by the right metric helps.
| Model | Method | W/A | FVD ↓ | FVD-FP16 ↓ | CLIPSIM | CLIP-T | VQA-A | VQA-T | Δ Flow ↓ | Temp. Flick. |
|---|---|---|---|---|---|---|---|---|---|---|
| STDiT | – | 16/16 | 136.87 | 0.00 | 0.1996 | 0.9978 | 41.63 | 56.64 | 2.24 | 97.53 |
| STDiT | Naive PTQ | 8/8 | 154.92 | 50.72 | 0.1993 | 0.9968 | 27.52 | 35.50 | 2.61 | 97.02 |
| STDiT | Q-Diffusion | 8/8 | 144.77 | 74.97 | 0.1979 | 0.9964 | 32.88 | 44.42 | 2.50 | 96.71 |
| STDiT | SmoothQuant | 8/8 | 109.24 | 48.78 | 0.1993 | 0.9971 | 39.19 | 52.64 | 2.53 | 97.21 |
| STDiT | ViDiT-Q | 8/8 | 141.13 | 15.52 | 0.1995 | 0.9978 | 43.59 | 55.36 | 2.32 | 97.45 |
| STDiT | Naive PTQ | 4/8 | 544.34 | 637.02 | 0.1868 | 0.9982 | 0.16 | 0.13 | 1.61 | 99.90 |
| STDiT | SmoothQuant | 4/8 | 122.51 | 96.25 | 0.1960 | 0.9973 | 17.39 | 24.22 | 1.99 | 96.23 |
| STDiT | ViDiT-Q | 4/8 | 136.54 | 77.43 | 0.1978 | 0.9976 | 20.76 | 25.65 | 1.94 | 96.51 |
| STDiT | ViDiT-Q-MP | 4/8 | 129.10 | 60.13 | 0.1995 | 0.9977 | 33.98 | 47.65 | 1.89 | 97.57 |
| Latte | – | 16/16 | 99.90 | 0.00 | 0.1970 | 0.9963 | 36.33 | 91.23 | 3.37 | 96.22 |
| Latte | Naive PTQ | 8/8 | 98.75 | 73.82 | 0.1981 | 0.9950 | 27.62 | 50.52 | 3.53 | 95.35 |
| Latte | ViDiT-Q | 8/8 | 110.96 | 20.83 | 0.1959 | 0.9962 | 30.26 | 80.32 | 3.14 | 95.95 |
| Latte | Naive PTQ | 4/8 | 183.52 | 239.08 | 0.1719 | 0.9929 | 5.62 | 0.41 | 66.06 | 65.14 |
| Latte | ViDiT-Q | 4/8 | 95.04 | 79.11 | 0.1943 | 0.9971 | 21.76 | 32.17 | 2.84 | 95.57 |
Guide
Table 3 tests UCF-101 with OpenSORA's STDiT and the class-conditional Latte model. FVD-FP16 compares against FP16 videos, so lower means closer to the original. For STDiT, naive W4A8 explodes to an FVD-FP16 of 637, while ViDiT-Q with mixed precision reaches 60.13 and recovers VQA scores. Latte shows the same pattern, so the method is not tied to one model.
| Method | PSNR | SSIM |
|---|---|---|
| InfDiT FP16 | 25.8015 | 0.7307 |
| InfDiT (ViDiT-Q W8A8) | 25.8628 | 0.7318 |
| InfDiT (ViDiT-Q W4A8) | 26.0139 | 0.7249 |
Guide
Table 4 gives Inf-DiT four-times super-resolution on DIV2K validation images. PSNR goes from 25.80 at FP16 to 25.86 at W8A8 and 26.01 at W4A8, and SSIM stays around 0.73. These differences are too small to matter, which is the point: quantization leaves super-resolution quality intact.
| Method | FID ↓ | CLIP ↑ | ImageReward ↑ |
|---|---|---|---|
| FP16 | 73.34 | 0.258 | 0.901 |
| Q-DiT W8A8 | 73.60 | 0.256 | 0.854 |
| ViDiT-Q W8A8 | 75.61 | 0.259 | 0.917 |
| ViDiT-Q W4A8 | 74.33 | 0.257 | 0.887 |
| ViDiT-Q W4A4-MP | 74.56 | 0.257 | 0.861 |
| ViDiT-Q W2A8-MP | 75.32 | 0.256 | 0.843 |
Guide
Table 5 pushes PixArt-sigma below W4A8 with mixed precision. Even W4A4-MP and W2A8-MP keep FID at 74.56 and 75.32, next to FP16's 73.34, with only small drops in ImageReward. It shows that once sensitive layers stay at higher precision, most of the network tolerates very low bit-widths.
| Method | W/A | CLIPSIM | CLIP-Temp | VQA-A | VQA-T | Δ Flow |
|---|---|---|---|---|---|---|
| FP16 | – | 0.1797 | 0.9988 | 63.40 | 50.46 | 0 |
| Adaround | 8/8 | 0.1796 | 0.9983 | 52.90 | 29.84 | 0.2934 |
| Brecq | 8/8 | 0.1791 | 0.9983 | 48.27 | 31.98 | 0.3978 |
| ViDiT-Q | 8/8 | 0.1950 | 0.9991 | 60.70 | 54.64 | 0.0890 |
| Adaround | 4/8 | 0.9971 | 0.1648 | 0.272 | 0.151 | 0.4210 |
| Brecq | 4/8 | 0.1669 | 0.9963 | 0.085 | 0.077 | 0.4303 |
| ViDiT-Q | 4/8 | 0.1809 | 0.9989 | 60.62 | 49.38 | 0.1530 |
Guide
Table 6 compares ViDiT-Q with general post-training methods, AdaRound and BRECQ, that learn rounding by reconstruction. At W8A8 they lose visual quality, and at W4A8 they collapse to VQA scores near zero while ViDiT-Q keeps 60.62 and 49.38. The tab notes that AdaRound's W4A8 CLIP values appear swapped in the paper and are copied as printed. So costly layer reconstruction does not fix the variation problem.
| Method | W/A | Memory opt. | Latency opt. |
|---|---|---|---|
| – | 16/16 | – | – |
| ViDiT-Q | 8/8 | 1.99x | 1.71x |
| ViDiT-Q + SageAttn | 8/8 | 1.99x | 1.72x |
Guide
Table 7 adds SageAttention, which quantizes the attention query and key products to eight bits, on top of ViDiT-Q W8A8. Latency improves only from 1.71 to 1.72 times, with memory unchanged. That matches figure 9: attention is a small share of runtime, so the real gains come from the linear layers.
| Method | CLIPSIM | CLIP-Temp | VQA-A | VQA-T | Δ Flow |
|---|---|---|---|---|---|
| Without MP | 0.181 | 0.999 | 60.216 | 42.257 | 0.151 |
| MSE-based search | 0.179 | 0.999 | 53.335 | 38.729 | 0.258 |
| Multiple-metrics joint search | 0.179 | 0.999 | 51.256 | 35.412 | 0.279 |
| Metric-decoupled search | 0.199 | 0.999 | 60.616 | 49.383 | 0.334 |
Guide
Table 8 compares ways to choose bit-widths at W4A8. MSE-based search and a joint multi-metric search both score worse than using no mixed precision at all. Only the metric-decoupled search improves visual quality, to 60.6 and 49.4, and text alignment. For the thesis, NNCF's built-in sensitivity metrics are MSE-like proxies, so this result is a reason to test a metric-based ranking against them.
Guide
Chart T8 plots the VQA scores from Table 8 for the four search schemes. Only the metric-decoupled bars rise above the no-mixed-precision baseline; the MSE and joint searches fall below it. The chart also flags that delta FlowScore gets worse, from 0.151 to 0.334, a motion trade-off the paper does not discuss, so decoupling is not a free win.
§8Why it matters for this thesis
ViDiT-Q → LTX-2.3 on OpenVINO / NNCF
- Copy the sensitivity method, not the kernels. For LTX-2.3, group the linear layers by role: video self-attn, text cross-attn, the audio branch, audio↔video cross-attn, and FFN. Give each group one metric (e.g. DOVER VQA, CLIPSIM, FlowScore/flicker, plus an audio metric), then quantize one layer at a time to int4 and rank the layers inside each group. This fits NNCF well: put the selected sensitive layers at int8 or in
ignored_scope, and compress the rest withnncf.compress_weights(INT4 withratio/group_size). NNCF's built-insensitivity_metricoptions (weight error, Hessian/activation variance) are proxies for the MSE-style ranking that this paper shows hurts (Table 8), so it is worth comparing the two. - Cost of the analysis. It needs one generation per layer per timestep range, i.e. hundreds of runs. Use short, low-resolution clips and a small prompt set. LTX-2.3 runs few denoising steps, so the "4 time ranges" become coarse bins over those steps.
- Weight-only vs W8A8. The thesis mainly targets weight-only int8/int4. The per-output-channel (or group-wise) weight scales and the mixed-precision finding carry over directly. The activation-side ideas (dynamic per-token quantization) matter only if A8 is also tried. NNCF's default
nncf.quantizeuses static per-tensor activation scales, which corresponds to Table 2's "Static & Tensor-wise" row, the one that collapsed at W4A8. The OpenVINO CPU/GPU plugins do have dynamic activation quantization for weight-compressed MatMuls (theDYNAMIC_QUANTIZATION_GROUP_SIZEhint); check support for the OpenVINO version in use. - Channel balancing on OpenVINO. The static scaling step is SmoothQuant, which NNCF offers (and AWQ/scale estimation for weight compression). The Hadamard rotation has no native NNCF pass. Using it would mean folding Hᵀ into the weights offline and inserting an explicit rotation MatMul on the activation, which costs latency, because LTX's adaLN modulation sits between the norm and the linear layer and the rotation cannot simply be absorbed there.
- What speed to expect. ViDiT-Q's 1.71× comes from custom INT8 GEMM CUDA kernels. W4A8 saved memory but gave less speed-up (1.38×) because DiT inference is compute-bound. On Intel CPU/Arc, weight-only int4/int8 mostly reduces memory and bandwidth. Real compute speed-ups need int8 activations that run on AMX/VNNI or XMX. Report memory and latency separately, the way Fig. 7 does.
Guide
Copy ViDiT-Q's sensitivity method, not its CUDA kernels. Group LTX-2.3's linear layers by role, including the audio branch and audio-video cross-attention, give each group one metric, rank layers by quantizing them to int4 one at a time, then keep the sensitive ones at int8 or in NNCF's ignored scope while compressing the rest with compress weights. Keep the runs cheap with short low-resolution clips, and report memory and latency separately, since weight-only compression on Intel hardware mainly saves memory.
SVDQuant: Absorbing Outliers by Low-Rank Components for 4-Bit Diffusion Models
To make big diffusion transformers like 12B FLUX.1 actually faster, both weights and activations must go to 4 bits (W4A4). SVDQuant first pushes activation outliers into the weights (smoothing), then lets a small 16-bit low-rank branch (from an SVD) soak up the weight outliers, so only a flat, easy residual is quantized. A co-designed engine, Nunchaku, fuses that extra branch into the 4-bit kernels so it costs almost nothing.
- Precision
- W4A4 · INT4 / NVFP4
- Low-rank branch
- 16-bit, rank 32
- FLUX.1 size
- 22.2 → 6.1 GiB (3.6×)
- Speed vs NF4 W4A16
- 3.0× (4090), 3.1× (5090)
- Laptop 4090 vs BF16
- 10.1× (no offload)
- FLUX.1-dev LPIPS
- 0.223 vs 0.272 (NF4)
Reading guide
SVDQuant asks how to make a twelve billion parameter diffusion transformer like FLUX.1 genuinely faster, not just smaller. Its answer is W four A four, four-bit weights and activations, made possible by smoothing activation outliers into the weights and then letting a small sixteen-bit low-rank branch from an SVD absorb the weight outliers, so only a flat residual is quantized. A companion engine, Nunchaku, fuses that branch into the four-bit kernels. The model ends up 3.6 times smaller and about three times faster than weight-only NF4, with better images. The tab runs from big picture and problem through the method, every equation and proof, every figure and the results tables, to a thesis box on OpenVINO. Among the sixteen papers it follows Q-Diffusion, PTQ4DiT and ViDiT-Q, builds on SmoothQuant and GPTQ, and is extended to video by the SVDQuant-GPTQ note on Wan 2.2.
§0Before reading
SVDQuant rests on one piece of linear algebra: any weight matrix can be split into a few big "directions" plus a small leftover, and the singular value decomposition (SVD) finds the best such split. It also assumes knowing why four-bit weights and four-bit activations (W4A4) are needed for real speed, and why an extra side branch costs memory traffic rather than arithmetic. It is in the atlas because it gives outliers their own small high-precision path instead of rounding them, an idea that can be tried with NNCF on LTX-2.3.
Guide
Any matrix can be split into a few big directions plus a small leftover, and the singular value decomposition finds the best split. On the left, W equals two thin sixteen bit matrices, L one and L two, plus a residual R. On the right, the singular values are sorted by size: keep the tall ones, and the flat tail becomes R. SVDQuant quantizes only R to four bits, so a spiky spectrum is exactly what it needs.
Guide
W four A four means four bit weights and four bit activations, and only that combination speeds up the arithmetic. In the top row, weight-only quantization such as NF4 unpacks the weights to sixteen bits before multiplying, so the file shrinks but the math does not. In the bottom row, both inputs are four bit and the multiply runs on four bit hardware. Diffusion models are compute-bound, which is why the paper insists on quantizing activations too.
Guide
An extra branch that is tiny in arithmetic can still cost time, because every separate GPU program reads its inputs from memory and writes its outputs back. The top row shows three kernels, each making its own trips to memory; in the paper that costs about eighteen percent per step. The bottom row fuses everything into one pass, which is what the Nunchaku engine does. On OpenVINO, check whether this pattern gets fused rather than assuming it.
Guide
SVDQuant is paper nine in the atlas. It follows ViDiT-Q, which reached eight bit activations on diffusion transformers but broke at four. It borrows smoothing from SmoothQuant and uses GPTQ on the leftover weights, then adds its own idea: a sixteen bit low-rank branch that holds the outliers so they are never rounded. DVD-Quant comes next, and paper twelve later reuses SVDQuant with GPTQ on the Wan two point two video model.
Terms used in this paper
- SVD (singular value decomposition)
- Writes any matrix as a sum of rank-one pieces, each scaled by a singular value, sorted from largest to smallest. Truncating it after \(r\) pieces gives the best rank-\(r\) approximation.
- Rank, low-rank
- The rank is how many independent directions a matrix really uses. A low-rank matrix can be stored as the product of two thin matrices, which is cheap.
- Smoothing
- SmoothQuant's trick: divide each activation channel by a factor and multiply the matching weight row by it. The output is unchanged, but activation outliers move into the weights.
- W4A4, W4A16, W8A8
- Bits for weights (W) and activations (A). W4A16 is weight-only 4-bit; W4A4 quantizes both, which is what allows 4-bit arithmetic.
- NF4
- "NormalFloat 4", a 4-bit weight format from QLoRA whose 16 levels follow a bell curve. The paper's weight-only baseline; it saves memory but not compute.
- NVFP4
- NVIDIA's 4-bit floating-point format, where each small group of values shares a scale. Supported natively by Blackwell-generation GPUs such as the RTX 5090.
- Compute-bound vs memory-bound
- A task is compute-bound if the arithmetic is the bottleneck, and memory-bound if moving data is. Diffusion steps are mostly compute-bound, so weight-only quantization helps little.
- Tensor Core
- Specialised matrix-multiply units in NVIDIA GPUs. Lower-precision inputs run faster on them, but only for formats the hardware supports.
- RTX 4090, RTX 5090
- Consumer NVIDIA GPUs used for the speed tests; the laptop 4090 has 16 GB of memory, too little for the 16-bit FLUX.1 without offloading to the CPU.
- Nunchaku
- The authors' inference engine, which fuses the low-rank branch into the 4-bit kernels so it adds little time. It is CUDA-only.
- LoRA
- Low-Rank Adaptation: fine-tuning a model by adding a small low-rank update to its weights. Because SVDQuant already has a 16-bit low-rank branch, LoRAs can be attached directly.
- FLUX.1, PixArt-Σ, SDXL
- The text-to-image models tested: FLUX.1 is a 12-billion-parameter diffusion transformer, PixArt-Σ a smaller one, and SDXL a UNet-based model.
- LPIPS, PSNR
- How close a quantized image is to the 16-bit model's image. LPIPS is a learned perceptual distance (lower is better); PSNR is a pixel-level score (higher is better).
- FID, ImageReward, MJHQ
- FID compares the statistics of many generated images with a reference set (lower is better); ImageReward is a learned human-preference score (higher is better). MJHQ-30K is the Midjourney prompt set used for testing.
Guide
These are the terms the paper uses without explaining. The most important are the singular value decomposition, rank, and smoothing, because together they are the method. W four A four versus weight-only, and compute-bound versus memory-bound, explain why the authors want four bit activations. NF4 and NVFP4 are the four bit formats compared, Nunchaku is their fused engine, and LPIPS, ImageReward and FID are the quality scores in the results.
§2Big picture
Guide
The whole method fits in one picture. Smoothing first divides the activations by a per-channel factor lambda, which pushes their outliers into the weights. A small sixteen bit low-rank branch, L one times L two, then takes over those weight outliers. What is left, the residual R, is flat enough to quantize to four bits, and a four bit GEMM multiplies it with the four bit activations. Every later section explains one part of this diagram.
Every linear layer becomes two parallel paths on the same smoothed input X̂: a tiny 16-bit low-rank path (L₁ then L₂) that carries the weight outliers, and a 4-bit GEMM on the residual R. Their outputs are added. Everything is post-training; no fine-tuning.
§3The problem
Guide
Two problems motivate the paper. On the left, a single outlier sets the quantization range, so most values fall into only one or two of the sixteen four bit levels. On the right, weight-only four bit saves memory but still runs a sixteen bit multiply, so it gives no speed-up. Real speed needs both weights and activations in four bits, which is why outliers must be handled first.
Guide
Proposition 4.1 splits the W4A4 error into four factors: the size of the input, the size of the weight, and the quantization error of each. SVDQuant attacks them in pairs. Smoothing shrinks the input and its quantization error, and replacing W by the small residual R shrinks the weight term. Read this diagram as the reason for each of the method's steps.
- Diffusion is compute-bound even at batch 1 (Fig. 2), so W4A16 only saves memory: NF4 FLUX runs 660 ms/step vs 657 ms BF16 (Fig. 8c). Real speed needs W4A4 on 4-bit tensor cores.
- At 4 bits both sides break: X and W both have outlier channels. Smoothing only moves outliers from X to W (Fig. 3b, Fig. 4d).
- Rotation (QuaRot-style) is ruled out: adaptive LayerNorm (adaLN) scales are computed at runtime from the timestep/text, so rotations cannot be folded into the weights offline, and online rotation is too slow. QAT is too expensive at 12B.
- A separate low-rank branch is slow if run naïvely: it re-reads and re-writes full 16-bit activations, adding ~57% latency to the 4-bit path (Fig. 6a).
§4Method
- Smooth (SmoothQuant): X̂ = X·diag(λ)⁻¹, Ŵ = W·diag(λ), with λᵢ = max|X:,ᵢ|^α / max|Wᵢ,:|^(1−α); α searched per layer on calibration prompts. Activations become easy; weights get worse.
- Decompose: truncated SVD of Ŵ gives L₁ = UΣ:,:r and L₂ = V:r,: (optimal rank-r fit, Eckart–Young). Because smoothing makes Ŵ's spectrum spiky (Fig. 5), r = 16–32 removes most of its energy.
- Quantize only the residual R = Ŵ − L₁L₂ to 4 bits (per-group symmetric; INT4 group 64 with 16-bit scales, or NVFP4 group 16 with FP8 scales), using GPTQ; activations X̂ are quantized per group on the fly.
- Refine: re-decompose Ŵ − Q(R) a few times, keep the split with smallest error.
- Run with Nunchaku: kernel 1 = Quantize(X̂) + down-projection X̂L₁ (shared input); kernel 2 = 4-bit GEMM + up-projection (shared output). Overhead drops to 5–10%.
- Keep sensitive bits in 16-bit: for FLUX the adaLN linear inputs stay W4A16; for other models cross-attention K/V projections stay 16-bit (<5% of runtime). W8A8 variant: per-token dynamic A, per-channel W, rank 16.
Guide
Smoothing makes activations easy by pushing their outliers into the weights, and the SVD then pulls the few dominant directions of that harder weight into a small sixteen-bit branch; since smoothing made the spectrum spiky, rank sixteen to thirty-two suffices. Only the flat residual goes to four bits with GPTQ, after a short refinement loop re-balances the split. Nunchaku fuses the branch into the kernels, and a few sensitive layers stay in sixteen bits.
Guide
The offline recipe runs once per layer. A small set of COCO prompts serves as calibration data. The method searches the smoothing strength alpha by output error, smooths the weight, takes the top r singular vectors as the sixteen bit branch, and quantizes the residual with GPTQ. It can then repeat the decomposition on what quantization left behind and keep the best result.
Why it works (Sec. 4.1–4.2 in one line each)
- Eq. (6): the layer's error is exactly the 4-bit error of X̂R, so only R and X̂ matter.
- Eq. (8): the 4-bit error of R is bounded by ‖R‖F, and SVD is the optimal way to minimize ‖R‖F for a given r.
- Contrast with LoRC / QLoRA-style methods: they quantize W first and fit a low-rank branch to the error, whose spectrum is flat, so low rank cannot fix it (Fig. 10: LoRC IR −0.965).
Guide
This pseudocode is reconstructed from Section 4.2 and Appendix D, since the paper prints no algorithm box. For each candidate migration strength alpha, it smooths the layer, takes a rank r SVD of the smoothed weight, and quantizes the residual. The inner loop re-fits the low-rank part to whatever the quantized residual missed, and the version with the smallest output error on calibration prompts wins. At runtime the layer is just a sixteen-bit path plus a four-bit path, added together.
§5Every equation
All 14 numbered equations (Eqs. 9–11 restate 4, 7, 8 in the appendix) plus the key unnumbered display math, in paper order.
Symmetric max-scaled quantization: integer tensor \(\mathbf{Q}_\mathbf{X}\), scale \(s_\mathbf{X}\).
Guide
This is the basic quantizer used throughout the paper. Take a tensor X, divide it by a scale s X, and round to the nearest integer to get the integer tensor Q X. The scale is the largest absolute value in X divided by q max, the largest integer the format allows. One big outlier therefore stretches the scale and wastes levels for every other value, which is the whole problem SVDQuant attacks.
Range per data type (INT4 → 7) and the dequantized tensor.
Guide
q max is the largest representable magnitude: two to the power k minus one, minus one, for a signed k-bit integer, so seven for INT4, and six for the FP4 format E2M1 used by NVFP4. Multiplying the integers back by the scale gives Q of X, the dequantized tensor. With only seven positive levels at four bits, how the scale is set decides almost everything.
A linear layer in low precision: integer GEMM, then one rescale. Needs both operands at the same bit-width for a speed-up.
Guide
A linear layer multiplies activations X by weights W. In low precision, both are quantized, the integer matrices are multiplied on fast integer hardware, and one final rescale by s X times s W restores the magnitude. The key point is that both operands must be at the same low bit-width to get the speed-up, which is why the paper insists on W4A4 rather than four-bit weights only.
Quantization error of a linear layer, \(\mathbf{X}\in\mathbb{R}^{b\times m}\), \(\mathbf{W}\in\mathbb{R}^{m\times n}\), Frobenius norm.
Guide
This defines the error the paper tries to shrink: the Frobenius norm, meaning the square root of the sum of squared entries, of the gap between the true output X times W and the quantized output. X has b rows of tokens and m input channels, W maps m inputs to n outputs. Every later equation is a way to bound or reduce this number.
Prop. 4.1 (error decomposition): error bounded by magnitudes of X, W and their own quantization errors.
Guide
Proposition 4.1 splits the layer error into pieces. The first term is the size of X times the weight quantization error; the second is the activation quantization error times the size of W plus its own error. So the output error stays small only if both X and W are small in magnitude and both quantize well. That is why outliers on either side hurt, and it motivates attacking both.
Smoothing (SmoothQuant): per-input-channel factor; \(\hat{\mathbf{X}}\hat{\mathbf{W}}=\mathbf{X}\mathbf{W}\) exactly (λ scales the m input rows of W, i.e. diag(λ)W in strict matrix order).
Guide
Smoothing, borrowed from SmoothQuant, divides each input channel of X by a factor lambda i and multiplies the matching row of W by the same factor. X hat times W hat equals X times W exactly, so nothing changes mathematically. What changes is where the outliers live: X hat becomes flat and easy to quantize, while W hat inherits the spikes, the problem seen in Figure 3b.
Split the smoothed weight into a rank-r part and a residual.
Guide
Here the smoothed weight W hat is split into two parts: L one times L two, a rank r product where L one is m by r and L two is r by n, plus a residual R. With r much smaller than m or n, the low-rank part is cheap to store and run in sixteen bits. The next equation shows why only R then needs quantizing.
The SVDQuant layer: only the residual branch is quantized.
Guide
Equation five is the SVDQuant layer itself. The output X times W equals X hat times the low-rank part plus X hat times the residual. The first term runs in sixteen bits and carries the outliers; only the second term is quantized, as four-bit X hat times four-bit R. This is the two-path picture from the big-picture diagram.
Extra parameters/compute of the low-rank branch (e.g. m = n = 3072, r = 32 → 2.1%).
Guide
The cost of the extra branch is m times r plus n times r values, divided by the m times n values of the full weight. For a 3072 by 3072 layer with rank thirty-two that is about 2.1 percent more parameters and compute. The branch is cheap in arithmetic; Figure 6 shows the real cost is memory traffic, which Nunchaku fixes.
The error of the whole layer equals the plain quantization error of the residual GEMM.
Guide
Equation six says the error of the whole SVDQuant layer is exactly the plain quantization error of the residual product, X hat times R. The sixteen-bit branch adds no error at all. So the question reduces to making X hat and R easy to quantize, and equation eight then says how to do that for R.
Regularity condition of Prop. 4.2 (no extreme outliers relative to overall energy).
Guide
This is a mild regularity assumption for Proposition 4.2: the expected largest entry of R is at most a constant c times the expected Frobenius norm of R. In words, R has no extreme outliers compared with its total energy. The paper checks it for Gaussian entries two blocks down.
Prop. 4.2: residual quantization error is bounded by the residual's magnitude, so minimize ‖R‖F.
Guide
Proposition 4.2: under that assumption, the expected quantization error of R is at most c times the square root of the number of entries, divided by q max, times the expected size of R. The practical message is simple: a smaller residual means a smaller four-bit error. Minimising the norm of R is therefore the goal, and the SVD is the optimal tool for it.
Constant for which Eq. (7) holds when R is normally distributed.
Guide
For a residual with normally distributed entries, the constant c in equation seven is the square root of log of the number of entries times pi, divided by the number of entries. It shrinks as the matrix grows, so the regularity condition is easy to satisfy for large layers. The proof in Appendix A.2, equations twelve to fourteen, derives this value.
Eckart–Young–Mirsky: truncated SVD is the optimal rank-r minimizer of ‖Ŵ − L₁L₂‖F.
Guide
The SVD writes W hat as U times Sigma times V. Keeping the first r columns of U times Sigma gives L one, and the first r rows of V give L two. The Eckart, Young, Mirsky theorem guarantees this truncated SVD is the best possible rank r approximation, so it leaves the smallest residual R, exactly what equation eight asks for.
Removing the top-r singular values \(\sigma_i\) of Ŵ removes most of its energy (Fig. 5).
Guide
The size of the residual equals the square root of the sum of the squared singular values from index r plus one onward, while the full weight includes all of them. If the first few singular values sigma i are huge, removing them removes most of the energy. Figure 5 shows smoothing makes W hat exactly like that, which is why rank thirty-two is enough.
App. D: smoothing factor per input channel; migration strength α searched per layer to minimize output MSE after SVD on calibration data.
Guide
This is the smoothing factor for input channel i: the largest activation magnitude in that channel raised to alpha, divided by the largest weight magnitude in that row raised to one minus alpha. Alpha, the migration strength, decides how much difficulty moves from activations to weights. Unlike SmoothQuant, SVDQuant searches alpha per layer to minimise output error measured after the SVD step, using calibration prompts.
App. A.1 restatement of Prop. 4.1 (= Eq. 4).
Guide
This is the appendix restatement of Proposition 4.1, identical to equation four: the layer error is bounded by the size of X times the weight error, plus the activation error times the size of W plus its error. It is repeated here only to set up the proof that follows.
Add-and-subtract X·Q(W), triangle inequality, sub-multiplicativity, then triangle inequality on Q(W) = W − (W − Q(W)).
Guide
The proof of Proposition 4.1 uses one trick and two standard inequalities. Add and subtract X times Q of W, split the norm with the triangle inequality, then use the fact that the norm of a product is at most the product of norms. Finally, Q of W is written as W minus its error, and the triangle inequality is applied once more. Nothing here is specific to diffusion models.
App. A.2 restatement of Eq. (7).
Guide
This restates equation seven in Appendix A.2: the expected maximum entry of the residual R is at most a constant c times its expected Frobenius norm. It is the no-extreme-outliers assumption on which the residual error bound of Proposition 4.2 rests.
App. A.2 restatement of Eq. (8).
Guide
This restates equation eight in Appendix A.2: the expected quantization error of R is bounded by c times the square root of its size, over q max, times its expected norm. The proof block that follows derives it.
Each element's rounding error is ≤ 1 step (the paper bounds it by 1 per element), so the error ≤ |s_R|·√size(R); then s_R = max|R|/q_max and Eq. (10).
Guide
The proof of Proposition 4.2 factors the scale out of the error and bounds each element's rounding error by one step, giving the scale times the square root of the number of entries. The scale is the maximum of R over q max, and the regularity assumption turns that maximum into the norm of R. One step is a loose bound, since rounding error is at most half a step, but the conclusion holds.
Gaussian maximal inequality (Massart 2007, Lemma 2.3), σ = std of the entries.
Guide
For Gaussian entries with standard deviation sigma, the expected largest absolute entry grows only like sigma times the square root of two times log of the number of entries. This is a standard maximal inequality from Massart, and it is the first ingredient for computing the constant c.
Cauchy–Schwarz lower bound on the Frobenius norm.
Guide
The Cauchy, Schwarz inequality gives a lower bound on the Frobenius norm of R: it is at least the sum of absolute entries divided by the square root of the number of entries. This is the second ingredient for the Gaussian constant c.
Mean of the half-normal distribution, \(\mathbb{E}|x|=\sigma\sqrt{2/\pi}\).
Guide
For a normal entry, the expected absolute value is sigma times the square root of two over pi, the mean of a half-normal distribution. Summing over all entries turns the lower bound from equation thirteen into sigma times the square root of two times the size over pi.
Combining (12)–(14): Eq. (10) holds with the Gaussian c given above.
Guide
Chaining equations twelve to fourteen shows that the expected maximum of R is at most the Gaussian constant c times the expected norm of R. So the regularity condition of Proposition 4.2 holds for Gaussian residuals, closing the proof that a smaller residual gives a smaller four-bit error.
§6Every figure
Guide
Four-bit weights and activations can look like the sixteen-bit model. Each column is one precision on FLUX.1-dev, labelled with LPIPS, a perceptual distance to the BF16 image where lower is better, plus memory and latency. SVDQuant INT4 reaches 0.223 against NF4's 0.272 and runs 8.7 times faster than BF16 on a sixteen gigabyte laptop GPU. Naive W4A4 is equally fast but garbles the sign and turns the PixArt image to noise.
Guide
Diffusion models need far more compute per parameter than language models. The horizontal axis is size in billions of parameters, the vertical axis compute in tera multiply-accumulates, one denoising step for diffusion; FLUX.1 needs about thirty-eight per step, a thirteen billion parameter LLM about ten per request. So diffusion is compute-bound, and weight-only quantization saves memory but not time. Point positions are read off the plot, and LTX video with long token sequences is even more compute-bound.
Guide
Smoothing moves the problem; the low-rank branch removes it. Grey lines mark the four-bit levels and magenta the outlier channels; in panel a both X and W have outliers, so most values use one or two levels. In panel b smoothing makes X hat easy, but W hat's maximum grows to about 4.5. Panel c moves the dominant part into a sixteen-bit rank thirty-two branch, leaving a residual with a maximum near 0.05, the intuition behind equations five to eight.
Guide
The same story on a real PixArt Sigma layer, plotting per-group magnitude as the max, ninety-ninth and fiftieth percentile. Watch the vertical scales: activations drop from up to ten to up to one after smoothing, while weights jump from up to two to up to twenty with more spikes. After subtracting the low-rank part, the residual R is back under two with no spikes. Shapes are redrawn; axis ranges come from the paper.
Guide
Smoothing makes the weight even more low-rank. The plot shows the first sixty-four singular values on a log scale for the original weight, the smoothed weight and the residual; the smoothed weight starts at several hundred and falls steeply over the first thirty-two, then flattens. A rank thirty-two branch therefore captures most of its energy, leaving a small, flat residual spectrum. This supports equation fifteen and the choice of rank thirty-two; the shape is redrawn.
Guide
The low-rank branch is cheap in arithmetic but costly in memory traffic unless fused. Panel a breaks down one QKV projection: run naively, the two projections add about fifty-seven percent, four hundred sixty-one versus three hundred twenty-two microseconds, by re-reading the sixteen-bit input and writing a large output. Panel b shows Nunchaku fusing the down projection with quantization and the up projection with the four-bit GEMM. OpenVINO cannot fuse these, so the naive bar is realistic there.
Guide
Across four models, four-bit SVDQuant stays closer to the sixteen-bit images than the baselines. Each row is a model and each column a method, labelled with ImageReward, a learned human-preference score where higher is better. On FLUX.1, NF4 weight-only drifts, for example dropping the swing chair, while on PixArt Sigma and SDXL-Turbo even the W4A8 baselines ViDiT-Q and MixDQ change the scene. SVDQuant W4A4 keeps the content, illustrating Table 1.
Guide
The efficiency payoff on FLUX.1: model size falls from 22.2 to 6.1 gibibytes, including 0.3 for the low-rank branches. On a desktop 4090, NF4 weight-only is no faster than BF16, 660 versus 657 milliseconds per step, while W4A4 INT4 takes 218. On a sixteen gigabyte laptop BF16 must offload, so INT4 is 10.1 times faster, and NVFP4 on an RTX 5090 is 3.1 times faster than NF4. The thesis box explains why this speed-up does not transfer to OpenVINO.
Guide
Community LoRAs work on the four-bit model without re-quantizing. The top row is FLUX.1-dev BF16 with five style LoRAs, the bottom row SVDQuant INT4 with the same LoRAs, and the images match in style and content. Because SVDQuant already runs a sixteen-bit low-rank branch, a LoRA can simply be concatenated into it by increasing the rank slightly. That keeps runtime LoRA adapters usable after quantization.
Guide
Every ingredient is needed. Each column is one variant on PixArt Sigma at W4A4, rank sixty-four, scored by ImageReward: SVD alone gives black images, while naive quantization and LoRC, which fits a low-rank fix to the quantization error, give noise because that error has a flat spectrum. Smoothing alone reaches 0.508, SVD without smoothing 0.690, and the full method 0.878 against 0.931 for FP16. So decompose first and quantize the residual, not the other way round.
Guide
This appendix gallery for FLUX.1-dev backs up Table 1 with four more prompts. Columns are BF16, SVDQuant INT W8A8, NF4 W4A16, and SVDQuant INT and NVFP W4A4, each with its ImageReward. Eight-bit SVDQuant is indistinguishable from BF16. NF4 shifts layouts, for example the neon building and the lab screens, while both four-bit SVDQuant variants keep the composition with only small detail drift.
Guide
The same comparison for FLUX.1-schnell, the four-step distilled model, with the same pattern as the dev model. W8A8 matches BF16. NF4 reframes the hammock cat and alters the FLORIDA letters, while SVDQuant four-bit keeps the content; the NVFP4 image only adds a roof edge above the cat. So few-step models do not break the method.
Guide
On PixArt Sigma, the prior diffusion quantizer ViDiT-Q breaks at W4A8, while SVDQuant holds at W4A4. Even ViDiT-Q's eight-bit results restyle the scenes, while SVDQuant W8A8 matches FP16. At four-bit weights, ViDiT-Q gives broken layouts and collapsed textures with an ImageReward of 0.573, while SVDQuant INT4 scores 0.878 and NVFP4 0.940. SVDQuant quantizes activations harder yet ends up better.
Guide
SDXL is a UNet, not a transformer, so this checks that the method works beyond DiTs. NVIDIA's TensorRT W8A8 changes the pancake layout and blurs the rainy scene, with an ImageReward of 0.591, while SVDQuant W8A8 reaches 0.718 against 0.729 for FP16. The four-bit versions keep the subjects with small changes. Four-bit is visibly harder on this model than on FLUX.
Guide
On SDXL-Turbo, a four-step model, MixDQ W4A8 alters content: the miner's face, text artifacts in the Barcelona scene, the cat. SVDQuant W4A4 stays close, with an ImageReward of 0.816 for INT4 and 0.832 for NVFP4 against 0.845 for FP16. Both methods are fine at eight bits; the gap opens at four.
Guide
This extends Figure 9 to thirty samples: six prompts for each of five LoRAs, with BF16 on the top row of each pair and SVDQuant INT4 below. No visible difference appears in style or content. The point is robustness: LoRA compatibility is not a lucky pick of prompts.
Guide
The low-rank branch helps both four-bit formats. Columns compare plain INT4, INT4 with SVDQuant, plain NVFP4 and NVFP4 with SVDQuant, each with LPIPS against the sixteen-bit image. Plain INT4 can swap the subject on FLUX or collapse PixArt into noise, and NVFP4's smaller groups help but still drift. Adding SVDQuant fixes both, and NVFP4 plus SVDQuant has the lowest LPIPS on every model, for example 0.208 on FLUX.1-dev.
Guide
Rank trades quality for overhead. On PixArt Sigma, ImageReward rises from 0.787 to 0.829 to 0.859 as the rank goes from sixteen to thirty-two to sixty-four, while the branch adds 2.8, 5.6 and 11.3 percent to model size and 3.3, 5.2 and 8.8 percent to latency. Rank thirty-two is the paper's compromise. On OpenVINO without fusion, latency overhead will likely be higher, so the rank is worth sweeping.
Guide
SVDQuant at four bits matches naive quantization at seven bits on PixArt Sigma and six bits on FLUX.1-schnell. The horizontal axis is the shared weight and activation bit-width, the vertical axis LPIPS, lower is better, for naive, SmoothQuant and SVDQuant. SVDQuant is lowest everywhere and still makes images at three bits, though nothing works at two bits without training. Values are read from the plot; the baselines' bump at five bits comes from switching to per-channel scales.
§7Results
Guide
Lower LPIPS means closer to the full-precision image. On FLUX dev, both four bit SVDQuant variants beat NF4 weight-only quantization, which is not faster anyway. On PixArt Sigma the contrast is sharper: ViDiT-Q at W4A4 collapses to an LPIPS of 0.854, while SVDQuant at W4A4 reaches 0.323, better even than ViDiT-Q at W4A8.
Guide
The left chart is the ablation from Table 3: the low-rank branch gives the biggest gain in PSNR, and GPTQ adds a little more on top. The right chart is the cost from Table 4. Run naively, the extra branch adds about eighteen percent to step time, 250 against 212 milliseconds. The fused Nunchaku kernels cut that to 218. For the thesis, expect the unfused cost, since OpenVINO has no such fused kernel.
| MJHQ | sDCI | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Model (steps) | Precision | Method | FID ↓ | IR ↑ | LPIPS ↓ | PSNR ↑ | FID ↓ | IR ↑ | LPIPS ↓ | PSNR ↑ |
| FLUX.1-dev (50) | BF16 | – | 20.3 | 0.953 | – | – | 24.8 | 1.02 | – | – |
| FLUX.1-dev (50) | INT W8A8 | Ours | 20.4 | 0.948 | 0.089 | 27.0 | 24.7 | 1.02 | 0.106 | 24.9 |
| FLUX.1-dev (50) | W4A16 | NF4 | 20.6 | 0.910 | 0.272 | 19.5 | 24.9 | 0.986 | 0.292 | 18.2 |
| FLUX.1-dev (50) | INT W4A4 | Ours | 19.9 | 0.935 | 0.223 | 21.0 | 24.2 | 1.01 | 0.240 | 19.7 |
| FLUX.1-dev (50) | NVFP W4A4 | Ours | 20.4 | 0.937 | 0.208 | 21.4 | 24.7 | 1.01 | 0.218 | 20.2 |
| FLUX.1-schnell (4) | BF16 | – | 19.2 | 0.938 | – | – | 20.8 | 0.932 | – | – |
| FLUX.1-schnell (4) | INT W8A8 | Ours | 19.2 | 0.966 | 0.120 | 22.9 | 20.7 | 0.975 | 0.133 | 21.3 |
| FLUX.1-schnell (4) | W4A16 | NF4 | 18.9 | 0.943 | 0.257 | 18.2 | 20.7 | 0.953 | 0.263 | 17.1 |
| FLUX.1-schnell (4) | INT W4A4 | Ours | 18.3 | 0.951 | 0.258 | 18.3 | 20.1 | 0.979 | 0.260 | 17.2 |
| FLUX.1-schnell (4) | NVFP W4A4 | Ours | 19.0 | 0.968 | 0.227 | 19.0 | 20.5 | 0.979 | 0.226 | 18.1 |
| PixArt-Σ (20) | FP16 | – | 16.6 | 0.944 | – | – | 24.8 | 0.966 | – | – |
| PixArt-Σ (20) | INT W8A8 | ViDiT-Q | 15.7 | 0.944 | 0.137 | 22.5 | 23.5 | 0.974 | 0.163 | 20.4 |
| PixArt-Σ (20) | INT W8A8 | Ours | 16.3 | 0.955 | 0.109 | 23.7 | 24.2 | 0.969 | 0.129 | 21.8 |
| PixArt-Σ (20) | INT W4A8 | ViDiT-Q | 37.3 | 0.573 | 0.611 | 12.0 | 40.6 | 0.600 | 0.629 | 11.2 |
| PixArt-Σ (20) | INT W4A4 | ViDiT-Q | 412 | −2.27 | 0.854 | 6.44 | 425 | −2.28 | 0.838 | 6.70 |
| PixArt-Σ (20) | INT W4A4 | Ours | 19.2 | 0.878 | 0.323 | 17.6 | 25.9 | 0.918 | 0.352 | 16.5 |
| PixArt-Σ (20) | NVFP W4A4 | Ours | 16.6 | 0.940 | 0.271 | 18.5 | 22.9 | 0.971 | 0.298 | 17.2 |
| SANA-1.6B (20) | BF16 | – | 20.6 | 0.952 | – | – | 29.9 | 0.847 | – | – |
| SANA-1.6B (20) | INT W4A4 | RTN | 20.5 | 0.894 | 0.339 | 15.3 | 28.6 | 0.807 | 0.371 | 13.8 |
| SANA-1.6B (20) | INT W4A4 | Ours | 19.3 | 0.935 | 0.220 | 17.8 | 28.1 | 0.846 | 0.242 | 16.2 |
| SANA-1.6B (20) | NVFP W4A4 | RTN | 19.7 | 0.932 | 0.237 | 17.3 | 29.0 | 0.829 | 0.265 | 15.6 |
| SANA-1.6B (20) | NVFP W4A4 | Ours | 20.0 | 0.955 | 0.177 | 19.0 | 29.3 | 0.846 | 0.196 | 17.3 |
| SDXL-Turbo (4) | FP16 | – | 24.3 | 0.845 | – | – | 24.7 | 0.705 | – | – |
| SDXL-Turbo (4) | INT W8A8 | MixDQ | 24.1 | 0.834 | 0.147 | 21.7 | 25.0 | 0.690 | 0.157 | 21.6 |
| SDXL-Turbo (4) | INT W8A8 | Ours | 24.3 | 0.845 | 0.100 | 24.0 | 24.8 | 0.701 | 0.110 | 23.7 |
| SDXL-Turbo (4) | INT W4A8 | MixDQ | 27.7 | 0.708 | 0.402 | 15.7 | 25.9 | 0.610 | 0.415 | 15.7 |
| SDXL-Turbo (4) | INT W4A4 | MixDQ | 353 | −2.26 | 0.685 | 11.0 | 373 | −2.28 | 0.686 | 11.3 |
| SDXL-Turbo (4) | INT W4A4 | Ours | 24.6 | 0.816 | 0.262 | 18.1 | 26.0 | 0.671 | 0.272 | 18.0 |
| SDXL-Turbo (4) | NVFP W4A4 | Ours | 24.4 | 0.832 | 0.231 | 18.9 | 25.2 | 0.688 | 0.238 | 18.9 |
| SDXL (30) | FP16 | – | 16.6 | 0.729 | – | – | 22.5 | 0.573 | – | – |
| SDXL (30) | INT W8A8 | TensorRT | 20.2 | 0.591 | 0.247 | 22.0 | 25.4 | 0.453 | 0.265 | 21.7 |
| SDXL (30) | INT W8A8 | Ours | 16.6 | 0.718 | 0.119 | 26.4 | 22.4 | 0.574 | 0.129 | 25.9 |
| SDXL (30) | INT W4A4 | Ours | 20.6 | 0.601 | 0.288 | 21.0 | 26.2 | 0.477 | 0.307 | 20.7 |
| SDXL (30) | NVFP W4A4 | Ours | 18.3 | 0.640 | 0.250 | 21.8 | 23.9 | 0.502 | 0.261 | 21.7 |
Guide
The main quality table: rows are models and precisions, columns are FID and ImageReward for image quality and LPIPS and PSNR for closeness to the sixteen-bit output, on the MJHQ and sDCI prompt sets. Eight-bit SVDQuant is essentially lossless, with a PSNR of 27.0 on FLUX.1-dev. At four bits it beats NF4 on FLUX, an LPIPS of 0.223 versus 0.272, while the W4A4 baselines ViDiT-Q and MixDQ collapse to FIDs above 350. NVFP4 is consistently a little better than INT4.
| MJHQ | sDCI | |||||||
|---|---|---|---|---|---|---|---|---|
| Model | Precision | Method | C.IQA ↑ | C.SCR ↑ | SSIM ↑ | C.IQA ↑ | C.SCR ↑ | SSIM ↑ |
| FLUX.1-dev | BF16 | – | 0.952 | 26.0 | – | 0.955 | 25.4 | – |
| FLUX.1-dev | INT W8A8 | Ours | 0.953 | 26.0 | 0.748 | 0.955 | 25.4 | 0.697 |
| FLUX.1-dev | W4A16 | NF4 | 0.947 | 25.8 | 0.748 | 0.951 | 25.4 | 0.697 |
| FLUX.1-dev | INT W4A4 | Ours | 0.950 | 25.8 | 0.797 | 0.951 | 25.3 | 0.751 |
| FLUX.1-dev | NVFP W4A4 | Ours | 0.952 | 25.8 | 0.808 | 0.955 | 25.4 | 0.768 |
| FLUX.1-schnell | BF16 | – | 0.938 | 26.6 | – | 0.932 | 26.2 | – |
| FLUX.1-schnell | INT W8A8 | Ours | 0.938 | 26.6 | 0.844 | 0.932 | 26.2 | 0.811 |
| FLUX.1-schnell | W4A16 | NF4 | 0.941 | 26.6 | 0.713 | 0.933 | 26.2 | 0.674 |
| FLUX.1-schnell | INT W4A4 | Ours | 0.937 | 26.5 | 0.720 | 0.932 | 26.2 | 0.681 |
| FLUX.1-schnell | NVFP W4A4 | Ours | 0.939 | 26.6 | 0.745 | 0.932 | 26.1 | 0.712 |
| PixArt-Σ | FP16 | – | 0.944 | 26.8 | – | 0.966 | 26.1 | – |
| PixArt-Σ | INT W8A8 | ViDiT-Q | 0.948 | 26.7 | 0.815 | 0.966 | 26.1 | 0.756 |
| PixArt-Σ | INT W8A8 | Ours | 0.947 | 26.8 | 0.849 | 0.967 | 26.0 | 0.800 |
| PixArt-Σ | INT W4A8 | ViDiT-Q | 0.912 | 25.7 | 0.356 | 0.917 | 25.4 | 0.295 |
| PixArt-Σ | INT W4A4 | ViDiT-Q | 0.185 | 13.3 | 0.077 | 0.176 | 13.3 | 0.080 |
| PixArt-Σ | INT W4A4 | Ours | 0.926 | 26.6 | 0.655 | 0.948 | 26.1 | 0.577 |
| PixArt-Σ | NVFP W4A4 | Ours | 0.938 | 26.7 | 0.692 | 0.956 | 26.1 | 0.618 |
| SANA-1.6B | BF16 | – | 0.934 | 26.8 | – | 0.958 | 26.4 | – |
| SANA-1.6B | INT W4A4 | RTN | 0.915 | 26.9 | 0.604 | 0.943 | 26.4 | 0.538 |
| SANA-1.6B | INT W4A4 | Ours | 0.926 | 26.9 | 0.710 | 0.951 | 26.4 | 0.649 |
| SANA-1.6B | NVFP W4A4 | RTN | 0.929 | 26.8 | 0.694 | 0.953 | 26.4 | 0.626 |
| SANA-1.6B | NVFP W4A4 | Ours | 0.932 | 26.9 | 0.755 | 0.955 | 26.4 | 0.701 |
| SDXL-Turbo | FP16 | – | 0.926 | 26.5 | – | 0.913 | 26.5 | – |
| SDXL-Turbo | INT W8A8 | MixDQ | 0.922 | 26.5 | 0.763 | 0.907 | 26.5 | 0.750 |
| SDXL-Turbo | INT W8A8 | Ours | 0.925 | 26.5 | 0.821 | 0.912 | 26.5 | 0.808 |
| SDXL-Turbo | INT W4A8 | MixDQ | 0.893 | 25.9 | 0.512 | 0.895 | 26.1 | 0.493 |
| SDXL-Turbo | INT W4A4 | MixDQ | 0.556 | 13.1 | 0.289 | 0.548 | 11.9 | 0.296 |
| SDXL-Turbo | INT W4A4 | Ours | 0.915 | 26.5 | 0.631 | 0.894 | 26.8 | 0.614 |
| SDXL-Turbo | FP W4A4 | Ours | 0.919 | 26.5 | 0.663 | 0.902 | 26.6 | 0.649 |
| SDXL | FP16 | – | 0.907 | 27.2 | – | 0.911 | 26.5 | – |
| SDXL | INT W8A8 | TensorRT | 0.905 | 26.7 | 0.733 | 0.901 | 26.1 | 0.697 |
| SDXL | INT W8A8 | Ours | 0.912 | 27.0 | 0.843 | 0.910 | 26.3 | 0.814 |
| SDXL | INT W4A4 | Ours | 0.878 | 26.7 | 0.717 | 0.862 | 26.2 | 0.672 |
| SDXL | NVFP W4A4 | Ours | 0.892 | 26.8 | 0.739 | 0.877 | 26.4 | 0.701 |
Guide
This appendix table adds three more metrics: CLIP-IQA for image quality, CLIP Score for text alignment, and SSIM for structural similarity to the sixteen-bit image. The quality and alignment scores barely move for SVDQuant, even at four bits, while the W4A4 baselines crash, for example CLIP Score falling to about thirteen. SSIM shows the same ranking as LPIPS, so the conclusions of Table 1 do not depend on the metric.
| Model | Precision | Low-rank branch | GPTQ | IR ↑ | LPIPS ↓ | PSNR ↑ |
|---|---|---|---|---|---|---|
| FLUX.1-dev | BF16 | – | – | 0.953 | – | – |
| FLUX.1-dev | INT4 | ✗ | ✗ | 0.908 | 0.322 | 18.5 |
| FLUX.1-dev | INT4 | ✗ | ✓ | 0.933 | 0.297 | 19.1 |
| FLUX.1-dev | INT4 | ✓ | ✗ | 0.926 | 0.256 | 20.1 |
| FLUX.1-dev | INT4 | ✓ | ✓ | 0.935 | 0.223 | 21.0 |
| FLUX.1-dev | NVFP4 | ✗ | ✗ | 0.928 | 0.244 | 20.3 |
| FLUX.1-dev | NVFP4 | ✗ | ✓ | 0.936 | 0.204 | 21.5 |
| FLUX.1-dev | NVFP4 | ✓ | ✗ | 0.935 | 0.223 | 20.9 |
| FLUX.1-dev | NVFP4 | ✓ | ✓ | 0.937 | 0.208 | 21.4 |
| FLUX.1-schnell | BF16 | – | – | 0.968 | – | – |
| FLUX.1-schnell | INT4 | ✗ | ✗ | 0.962 | 0.345 | 16.3 |
| FLUX.1-schnell | INT4 | ✗ | ✓ | 0.962 | 0.317 | 16.8 |
| FLUX.1-schnell | INT4 | ✓ | ✗ | 0.957 | 0.289 | 17.6 |
| FLUX.1-schnell | INT4 | ✓ | ✓ | 0.951 | 0.258 | 18.3 |
| FLUX.1-schnell | NVFP4 | ✗ | ✗ | 0.957 | 0.280 | 17.5 |
| FLUX.1-schnell | NVFP4 | ✗ | ✓ | 0.956 | 0.247 | 18.5 |
| FLUX.1-schnell | NVFP4 | ✓ | ✗ | 0.968 | 0.247 | 18.4 |
| FLUX.1-schnell | NVFP4 | ✓ | ✓ | 0.968 | 0.227 | 19.0 |
| PixArt-Σ | BF16 | – | – | 0.944 | – | – |
| PixArt-Σ | INT4 | ✗ | ✗ | −1.226 | 0.762 | 9.1 |
| PixArt-Σ | INT4 | ✗ | ✓ | −0.902 | 0.763 | 9.9 |
| PixArt-Σ | INT4 | ✓ | ✗ | 0.858 | 0.356 | 17.0 |
| PixArt-Σ | INT4 | ✓ | ✓ | 0.878 | 0.323 | 17.6 |
| PixArt-Σ | NVFP4 | ✗ | ✗ | 0.660 | 0.517 | 14.8 |
| PixArt-Σ | NVFP4 | ✗ | ✓ | 0.696 | 0.480 | 15.6 |
| PixArt-Σ | NVFP4 | ✓ | ✗ | 0.945 | 0.290 | 18.0 |
| PixArt-Σ | NVFP4 | ✓ | ✓ | 0.940 | 0.271 | 18.5 |
| SANA-1.6B | BF16 | – | – | 0.952 | – | – |
| SANA-1.6B | INT4 | ✗ | ✗ | 0.894 | 0.339 | 15.3 |
| SANA-1.6B | INT4 | ✗ | ✓ | 0.881 | 0.288 | 16.4 |
| SANA-1.6B | INT4 | ✓ | ✗ | 0.922 | 0.234 | 17.4 |
| SANA-1.6B | INT4 | ✓ | ✓ | 0.935 | 0.220 | 17.8 |
| SANA-1.6B | NVFP4 | ✗ | ✗ | 0.932 | 0.237 | 17.3 |
| SANA-1.6B | NVFP4 | ✗ | ✓ | 0.927 | 0.202 | 18.3 |
| SANA-1.6B | NVFP4 | ✓ | ✗ | 0.957 | 0.188 | 18.7 |
| SANA-1.6B | NVFP4 | ✓ | ✓ | 0.955 | 0.177 | 19.0 |
Guide
The ablation isolates the two tools applied to the residual, the low-rank branch and GPTQ, with four on-off rows per model and format. The low-rank branch is the bigger win, especially on PixArt Sigma INT4, where ImageReward jumps from about minus 1.2 to 0.858. GPTQ adds a smaller gain, and the combination gives the best LPIPS in most groups, though NVFP4 with GPTQ alone edges it on FLUX.1-dev. NNCF offers GPTQ, while the low-rank split would be done by hand.
| Method | BF16 | INT8 | Naïve INT4 | SVDQuant | SVDQuant + Nunchaku |
|---|---|---|---|---|---|
| Latency (ms) | 657 | 282 | 212 | 250 | 218 |
Guide
Per-step FLUX latency on a desktop RTX 4090 shows what fusion buys: BF16 takes 657 milliseconds, INT8 282 and naive INT4 212. Adding the low-rank branch unfused raises it to 250, about eighteen percent more, and Nunchaku brings it back to 218. The text body says laptop while the caption says desktop. For the thesis, the unfused figure is the relevant warning, since OpenVINO runs the branch as separate MatMuls.
- 8-bit SVDQuant is essentially lossless everywhere (PSNR > 21; 27.0 on FLUX.1-dev MJHQ) and beats ViDiT-Q, MixDQ and TensorRT W8A8.
- NVFP4 beats INT4 thanks to smaller groups (16 vs 64); the gap is largest on the small PixArt-Σ (600M).
- Memory: 12B FLUX.1 22.2 → 6.1 GiB incl. 0.3 GiB for the low-rank branches.
§8Why it matters for this thesis
Guide
This is how one SVDQuant layer would look inside an OpenVINO model. Every piece is a standard operation: a Multiply by one over lambda, two small MatMuls for the low-rank branch, a compressed four bit MatMul for the residual, and an Add. So the layer can be exported without custom ops. What is missing is a W4A4 matrix multiply and a fused kernel, so on Intel hardware the gain would be quality at four bit weights, not speed.
Takeaways for LTX-2.3 on OpenVINO / NNCF
- Expressible, but unfused. The low-rank branch is just
MatMul(X̂, L₁) → MatMul(·, L₂)in f16 plus anAdd, next to an int4 weight-compressed MatMul on R. No custom op is needed, but each layer pays for an extra read of X̂ and write of Y. That is exactly the overhead the paper measured before fusion (+57% on one QKV layer, +18% end-to-end, Fig. 6a / Table 4). LTX video latents mean long token sequences, so benchmark this overhead on Arc/CPU instead of assuming 5–10%. - The W4A4 speed-up does not carry over. OpenVINO has no 4-bit activation GEMM. Int4 weights are weight-only (decompressed, or run with dynamic int8 activation quantization on CPU/GPU), and Arc XMX units accelerate int8, not int4. The realistic use of SVDQuant here is better quality for int4 weight-only or W8A8. The rank-32 branch soaks up weight outliers that plain int4 group-wise compression struggles with.
- Close NNCF equivalents.
nncf.compress_weights(..., lora_correction=True)adds a low-rank adapter that corrects the int4 error (LoRC-style: quantize first, then fix the error). The paper shows decomposing first works better (Fig. 10). NNCF's SmoothQuant (innncf.quantize), AWQ, scale estimation and GPTQ cover the other ingredients. A clean thesis experiment: do the SVD split in PyTorch (smooth → SVD → keep L₁, L₂ in f16), compress only R with NNCF, export, and compare against NNCF int4 with and without lora_correction. - Calibration and adaLN. SVD itself needs no data, but the per-layer α search (and GPTQ) needs calibration prompts, i.e. a few LTX denoising trajectories. LTX-2.3 is a DiT with timestep-dependent adaLN, so the paper's argument against rotation applies directly. Also, 1/λ can only be folded offline when the producer op is a static Linear; after adaLN modulation it stays an explicit Multiply.
- Overhead is small and LoRA-friendly. Rank 32 adds (m+n)·r f16 values per layer: for a 4096×4096 layer that is 1.6% of the parameters, or about 6% of its int4 bytes. Keeping the branch separate lets style/control LoRAs be concatenated into it without re-quantization (Fig. 9), which fits OpenVINO GenAI's runtime LoRA adapters.
Guide
Treat SVDQuant as a quality tool for int4 weight-only or W8A8 on OpenVINO, not a speed-up. The clean experiment is to smooth and split each layer in PyTorch, keep L one and L two in f16, compress only the residual with NNCF, and compare against NNCF int4 with and without lora correction. Calibrate on a few LTX denoising trajectories, and measure the unfused branch overhead on Arc and CPU instead of assuming five to ten percent.
DVD-Quant: Data-free Video Diffusion Transformers Quantization
Post-training quantization of a video DiT with no calibration data at all. Weights get better INT4 grids from a closed-form search (BGR). Activations are rotated with a Hadamard matrix and scaled online at every step (ARQ). A cheap per-step signal then picks 4-bit or 8-bit activations for each denoising step (δ-GBS).
- Calibration data
- None
- Bit-widths
- W4A8 · W4A6 · W4A4
- Model
- HunyuanVideo, 50 steps
- Speed-up (RTX 4090)
- 1.75× / 1.93× / 2.12×
- Memory
- 3.68× smaller
- W4A4 Imaging Q.
- 61.82 (BF16 64.78)
Reading guide
The question behind DVD-Quant is whether a video diffusion transformer can be quantized to four-bit weights and low-bit activations without any calibration data at all. The answer is yes, on HunyuanVideo with 50 steps: at W four A four, meaning four-bit weights and four-bit activations, it reaches an Imaging Quality of 61.82 against 64.78 for the full-precision model, runs 2.12 times faster on an RTX 4090, and uses 3.68 times less memory. It has three parts: a closed-form weight grid search called BGR, a rotation plus live scaling for activations called ARQ, and a per-step switch between four-bit and eight-bit activations called delta-GBS. The tab moves from the big picture to the two problems, then the method, every equation, every figure, the results tables, and a thesis box. It is the tenth of the sixteen papers, in the diffusion quantization group after SVDQuant and before QVGen.
§0Before reading
Following this paper takes three ideas: why most quantizers need calibration data, what a four-bit grid with a step size and zero-point is, and how a rotation can tame outliers. DVD-Quant is in the atlas because it quantizes a video diffusion transformer with no calibration data at all, and its weight method produces an ordinary INT4 grid that OpenVINO can already run.
Guide
Every quantizer needs a scale for each tensor, and the two kinds of tensor behave very differently. Weights never change, so their grid can be computed once, offline, from the weights alone. On the right, the bars are activation ranges across the denoising steps. A single calibrated scale, the dashed line, clips the tall steps and wastes levels on the short ones. DVD-Quant measures a fresh scale at every step, which is why it needs no calibration data.
Guide
A four bit grid is just sixteen evenly spaced levels, stored as the integers zero to fifteen. The step size is the gap between levels and the zero-point says which level means zero. Weights are bell shaped, so the MinMax grid on top wastes levels on a few rare extremes. Clipping the tails, bottom row, packs the same sixteen levels where the weights really are. BGR, the paper's weight method, searches for the best clip and then refines the grid.
Guide
One huge activation forces a wide range, and then every small value is rounded coarsely. Multiplying the activations by a Hadamard matrix, a grid of plus ones and minus ones, and the weights by its transpose, leaves the layer output exactly the same. But the spike is now shared across all eight channels, so a narrow range is enough. ARQ, the activation method, starts with this rotation and then adds a live scale per channel. The numbers here are illustrative.
Guide
This map places DVD-Quant in the atlas. ViDiT-Q already used live per-token scales for video but still chose bit-widths with calibration, and SVDQuant reached four bit weights and activations on images with a sixteen bit side branch. DVD-Quant removes calibration completely and reaches W four A four on video with plain low-bit kernels. SmoothQuant is one of its baselines, its bit switching uses the same kind of step-change signal as TeaCache, and QVGen, next, adds training.
Terms used in this paper
- Post-training quantization (PTQ)
- Shrinking a model that is already trained, by storing its numbers with fewer bits, without retraining it. DVD-Quant is a PTQ method.
- Calibration data
- A small set of example inputs run through the full-precision model to measure typical activation ranges. DVD-Quant uses none: it works from the weights and from the live activations only.
- W4A4, W4A8, W4A6
- W is the bit-width of the weights, A of the activations. W4A6 in this paper is not a fixed format: each step uses A4 or A8, averaging about six bits.
- BF16
- A 16-bit floating-point format used for the full-precision reference model. It is the quality every quantized result is compared against.
- Step size and zero-point
- The two numbers that define a grid: the step size \(\Delta\) is the gap between levels, and the integer zero-point \(z\) says which level stands for zero.
- MinMax
- The simplest way to set a grid: stretch it from the smallest to the largest value. It is the starting point that BGR improves.
- Frobenius norm
- The square root of the sum of all squared entries of a matrix. Here it measures the total gap between the original and the quantized weights.
- Hadamard matrix
- A square matrix of +1 and −1 entries (scaled) whose rows are all perpendicular. Multiplying by it is a rotation, and a fast transform makes it cheap to apply.
- Online (dynamic) scaling
- Measuring the scale from the tensor that is actually being quantized, at run time, instead of reading a number fixed in advance.
- Massive vs channel-wise outliers
- Massive outliers are a few single values far larger than all others. Channel-wise outliers are whole channels that run larger than the rest. ARQ rotates away the first and rescales the second.
- HunyuanVideo
- A large open text-to-video diffusion transformer from Tencent, and the main model tested here. The paper also reports Wan2.1 in its supplement.
- RTX 4090
- An NVIDIA consumer (gaming) GPU. All speed and memory numbers in the paper are measured on one of them, with custom low-bit kernels.
- Tensor Core
- The matrix-multiply units inside NVIDIA GPUs that give the speed-up for low-bit integer math. Intel Arc GPUs have a counterpart called XMX, but the paper's kernels do not run there.
- VBench
- A benchmark suite that scores generated videos on many dimensions. This paper reports eight, such as Imaging Quality, Aesthetic Quality and Motion Smoothness.
Guide
These are the terms the paper uses without explaining. The most important are calibration data, which DVD-Quant avoids, and the step size and zero-point, which define every grid it builds. Hadamard matrix and online scaling are the two halves of ARQ. The hardware and benchmark entries matter for reading the results: all speed numbers come from an NVIDIA RTX 4090 with custom Tensor Core kernels, and quality is measured with VBench.
§2Big picture
Guide
The key move is to throw away the calibration pass. In the top row, usual video post-training quantization runs the model on calibration prompts over all 50 timesteps and freezes one set of scales, which breaks at W4A4 because activation ranges shift from step to step. In the bottom row, DVD-Quant derives weight grids offline from the weights alone and activation scales online from each step's live tensor, with delta-GBS choosing four or eight bits per step. The rest of the tab unpacks these three boxes.
Three parts: BGR for weights, ARQ for activations, δ-GBS for choosing activation bits per timestep. None needs a single calibration prompt.
§3The problem
Guide
The first problem is on the weight side. Weights follow a bell-shaped distribution, but MinMax spreads its sixteen four-bit levels evenly from the smallest to the largest value. A tiny fraction of extreme weights, about 0.3 percent, pulls the range wide, so outer levels sit nearly empty while the dense centre gets too few levels. BGR, the first part of the method, fixes exactly this by clipping the tails and refining the grid.
Guide
The second problem is on the activation side. The curve is the largest activation magnitude across the 50 denoising steps, and the flat line is a single scale fixed from calibration. Wherever the curve rises above the line, values are clipped; wherever it falls below, quantization levels go unused. The shape is illustrative, but the point motivates ARQ, which recomputes scales at every step instead of trusting one static number.
- Calibration for video DiTs is slow (50 steps × long token sequences) and still misses part of the range.
- With 4-bit activations, existing PTQ collapses: VBench metrics fall 27.5%–61.3% (Tab. 1, Fig. 1).
- Rotation alone (QuaRot-style) removes big spikes but can push many other values up (Fig. 4).
- Denoising steps are not equally important, so one fixed bit-width for all steps wastes bits.
§4Method
A. Bounded-init Grid Refinement (weights, offline)
Guide
BGR is two nested loops. The outer loop tries progressively tighter clipping bounds on the weights, starting each try from a MinMax grid of the clipped values. The inner loop alternates three closed-form updates: the step size by least squares from equation 4, the zero-point from equation 5, and re-rounding the weights from equation 6, until the error stops improving. The grid with the lowest reconstruction error wins. It needs no gradients and no data, and the output is an ordinary INT4 grid with one scale and zero-point per output row.
Guide
Algorithm 1 is BGR written out. It first sets a shrink step equal to the weight range divided by n, then for each i from one to n clips i shrink steps off both tails and builds a MinMax grid on the clipped weights as a starting point. From there it repeats the least-squares step size, the zero-point update and re-rounding, measuring the Frobenius reconstruction error each time, and stops when the improvement falls below epsilon. Across all clipping levels it keeps the step size and zero-point with the smallest error. Everything runs offline on the weights only.
Note: the paper reuses n both as row count of W and as the number of bound-search steps; b is the weight bit-width (4).
B. Auto-scaling Rotated Quantization (activations, online)
Guide
ARQ handles activations in two moves. First, the activation X and the weight W are both multiplied by a Hadamard matrix H, which leaves the layer output unchanged but spreads a few massive outliers across all channels. Second, per-channel scales s j are taken from the current step's rotated activation, so channels that rotation made larger are evened out. The rotated weights are quantized offline with BGR. The paper's real kernels use block-wise scales that match Tensor Core tiles, and all reported results use that variant.
C. δ-Guided Bit Switching (per timestep)
Guide
Delta-GBS spends eight bits only when the output is changing fast. The bars track the accumulated relative L1 change of the model output since the last reset. When it crosses the threshold delta, that step runs with eight-bit activations and the counter resets; otherwise it runs at four bits. Early steps change quickly and get mostly A8, later steps drift slowly and get mostly A4, averaging about six bits. The picture is a schematic replay of equation 11 with delta at 0.1.
- Offline: rotate each linear weight by H and quantize to INT4 with BGR (Alg. 1). Weights stay INT4 for every step.
- At each step t: rotate activations with a fast Hadamard transform and compute block-wise max scales from the live tensor.
- Check δ-GBS: if the accumulated relative output change Σ L1 since the last reset is below δ, quantize activations to 4 bits; otherwise to 8 bits and reset the counter.
- Run the W4A4 or W4A8 GEMM kernel (both are standard kernels; no mixed-precision kernel), rescale by Λ.
Guide
The pipeline splits into one offline stage and one per-step loop. Offline, every linear weight is rotated by the Hadamard matrix and quantized to INT4 with BGR, and these weights never change again. At each denoising step, the activations are rotated, their block-wise scales are read from the live tensor, and delta-GBS decides whether this step uses four or eight bits. The chosen standard W4A4 or W4A8 kernel then runs and the result is rescaled. No mixed-precision kernel is needed, only a switch between two existing ones.
§5Every equation
MinMax per-channel asymmetric quantization; ⊘ element-wise divide, ⌊·⌉ round, b bits.
Guide
Equation 1 is ordinary asymmetric quantization, the baseline everything else builds on. Each weight in W is divided element-wise by the step size delta, rounded to the nearest integer, shifted by the zero-point z, and clamped into the range from zero to two to the b minus one, where b is the bit-width. For four bits that range is zero to fifteen. W q is the resulting integer matrix.
Reconstruct weights from integers, step size Δ and zero-point z (⊙ element-wise product).
Guide
Equation 2 goes back from integers to real numbers. The dequantized weight, W hat, is the step size delta times the integer weights W q minus the zero-point z, element by element. The gap between W and W hat is the quantization error that BGR later tries to minimise in equation 3. This is also the form OpenVINO uses when it decompresses INT4 weights at run time.
MinMax step size and zero-point, one per output channel (row) of W ∈ ℝn×m.
Guide
This is the MinMax recipe for the grid, computed separately for each output row of W. The step size delta is the row's range, max minus min, divided by two to the b minus one, so the levels span exactly the extreme values. The zero-point z is minus the rounded ratio of the minimum to delta, so the smallest weight maps to integer zero. Figure 2 shows why this is wasteful for bell-shaped weights, and BGR uses it only as a starting point.
The real objective: choose the grid that minimises weight reconstruction error; MinMax is only an initial guess.
Guide
Equation 3 states what BGR really optimises. Among all choices of step size delta and zero-point z, pick the pair that makes the Frobenius norm of W minus its dequantized version as small as possible, the Frobenius norm being the square root of the sum of squared errors. MinMax does not solve this; it is just a first guess. Equations 4 to 6 give the alternating closed-form updates that approximately solve it.
Closed-form least-squares step size with z and Wq fixed; ⟨·,·⟩row is the row-wise inner product.
Guide
Equation 4 updates the step size when the integers and zero-point are held fixed. For each row it divides the inner product of W q minus z with the real weights W by the inner product of W q minus z with itself. That is the textbook least-squares fit of a single scale factor, so it has an exact answer with no iteration or gradients. It is the first update in the inner loop of BGR.
Zero-point update with Δ′ fixed: relax z to real values, solve, clamp (then round). The overlines are printed in the paper but not defined there.
Guide
Equation 5 updates the zero-point with the new step size delta prime held fixed. The zero-point is temporarily treated as a real number, solved as the average integer value minus the average weight divided by delta prime, then clamped into the valid integer range and rounded. The overlines are printed in the paper without a definition; reading them as row averages is the natural interpretation, not a stated fact. This is the second update in BGR's inner loop.
Re-round the weights on the new grid (same form as Eq. 1).
Guide
Equation 6 re-rounds the weights on the updated grid. It is the same formula as equation 1, only with the new step size delta prime and zero-point z prime: divide, round, add the zero-point, clamp to the four-bit range. With new integers in hand, BGR goes back to equation 4 and repeats until the reconstruction error stops falling.
Search-bound initialisation: clip the tails by shrink steps δl, δu.
Guide
Equation 7 is the clipping step of BGR's outer loop. W c is W with every value below the minimum plus delta l raised to that bound, and every value above the maximum minus delta u lowered to that bound. Delta l and delta u are the lower and upper shrink amounts. Cutting off the rare extreme weights lets the sixteen levels concentrate on the dense centre shown in figure 2.
Grid of the clipped weights; this is the start point BGR refines (Alg. 1).
Guide
Equation 8 is simply MinMax applied to the clipped weights W c. Delta c is the clipped range divided by two to the b minus one, and z c is the matching zero-point. This grid is the starting point that the inner loop of Algorithm 1 refines with equations 4 to 6, one start per clipping level.
SmoothQuant-style pre-scaling (what prior video PTQ does): s ∈ ℝC from a calibration set, α migration strength.
Guide
Equation 9 shows what earlier video quantization methods do, borrowed from SmoothQuant. Each input channel of X is divided by a scale s i and the matching weight row is multiplied by it, so the product is unchanged but activation outliers move into the weights. The scale mixes the largest activation and the largest weight with a migration strength alpha. The catch is that the activation maximum comes from a calibration set and stays fixed, which is exactly what figure 3 shows failing across timesteps.
Orthogonal rotation (as printed) and Hadamard computational invariance used by ARQ.
Guide
This block states the rotation trick ARQ relies on. An orthogonal matrix Q times its transpose gives the identity, so inserting a Hadamard matrix H and its transpose between the activation X and the weights leaves the output Y unchanged: X times W transpose equals X H times H transpose W. The paper also prints a determinant-style condition that looks garbled, so treat that part loosely. The useful fact is that rotation is free in exact arithmetic and spreads outliers before quantization.
ARQ: rotate, scale each channel by its live max (no calibration), quantize; weights are rotated then BGR-quantized.
Guide
Equation 10 is ARQ in full. The activation is rotated, X tilde equals X H, and each channel's scale s j is its largest absolute value in the current tensor; lambda is the diagonal matrix of those scales. The quantized activation X hat is the rotated activation divided by lambda and then quantized, while the weights are rotated and quantized with BGR. The output multiplies X hat, lambda and W hat transpose. Because the scales come from the live tensor, no calibration set is needed.
From Fig. 2: the channel scales are time-dependent, recomputed at every step.
Guide
This line comes from the middle panel of figure 2 and makes one point: the scale matrix lambda depends on the timestep. The output at the first step uses lambda at t zero, the output at the last step uses lambda at t forty-nine, and each lambda t is a diagonal of per-channel scales computed at that step. It is the equation form of the drifting curve in figure 3, and the reason ARQ recomputes scales online.
δ-GBS: activation bits for step ti; tp = last reset, 𝓕t = model output at step t; blow = 4, bhigh = 8.
Guide
Equation 11 is the delta-GBS rule. For each step t i, add up the relative L1 change of the model output, the size of the output difference between consecutive steps divided by the size of the previous output, over all steps since the last reset t p. If that sum is below the threshold delta, use b low, four bits; if it reaches delta, use b high, eight bits, and reset. F t is the model output at step t. Figure 6 and figure 2 show it in action.
§6Every figure
Guide
Only DVD-Quant survives four-bit activations. Each cell is a frame from HunyuanVideo with its VBench Imaging Quality. At W4A4, MinMax collapses into colour noise with a score of 24.78 and ViDiT-Q distorts heavily at 40.10, while DVD-Quant stays close to the reference at 61.82. In the top row the baselines use eight-bit activations but DVD-Quant uses its six-bit mixed setting, so that row is not a like-for-like bit budget.
Guide
The overview puts the three components side by side. On the left, BGR clips the Gaussian-like weights and refines the grid, so error falls below both MinMax and the plain clipped start until it hits the refinement threshold. In the middle, activation outliers move between channels from step zero to step forty-nine, so the scales lambda t are recomputed each step. On the right, the accumulated change epsilon decides high or low bits per step; the bit strip is schematic.
Guide
BGR cuts weight quantization error by about 86 to 92 percent in every layer family tested. Each panel is one family of HunyuanVideo layers, with layer index along the bottom and INT4 weight error up the side; teal is MinMax, indigo is BGR. In single_blocks linear2, for example, the average error drops from about 19 millionths to 1.6 millionths. The averages and reductions are the paper's, but the line shapes are redrawn approximately. This is the evidence for the first component.
Guide
Rotation alone is not enough. Each panel shows activation size across channels before and after the Hadamard rotation. On the left, a single outlier of about ten is flattened to a peak of about three, but a whole band of channels is raised. On the right, rotation creates new large values that were not there before. That second case is why ARQ adds live per-channel scaling after the rotation instead of relying on rotation the way Quarot does.
Guide
At W4A4 every baseline fails visibly and DVD-Quant stays coherent. Rows are methods, and columns show the rocket-launch prompt at the higher bit setting and at W4A4. MinMax turns to purple noise, SmoothQuant gets green blotches, Quarot over-saturates, and ViDiT-Q loses the scene, while DVD-Quant keeps the shuttle and tower with marginal loss. As in figure 1, the higher-bit column compares baselines at A8 with DVD-Quant at A6.
Guide
The threshold delta trades quality for bits smoothly. The horizontal axis is delta from 0.06 to 0.18, the vertical axis is average Imaging Quality. A larger delta means fewer eight-bit steps, and quality slides gently from 62.11 to 61.00, with no cliff; frames of the coastal scene stay visually close throughout. At the extremes, delta near zero means every step is W4A8 and a very large delta means every step is W4A4. The default is 0.09.
§7Results
| Method | W/A | Aesthetic | Imaging | Overall C. | Scene C. | BG C. | Subject C. | Dynamic | Motion S. |
|---|---|---|---|---|---|---|---|---|---|
| HunyuanVideo (BF16) | 16/16 | 62.53 | 64.78 | 25.86 | 42.81 | 97.01 | 96.05 | 51.39 | 99.30 |
| MinMax | 4/8 | 59.44 | 60.62 | 25.78 | 36.41 | 97.61 | 95.83 | 52.78 | 98.89 |
| SmoothQuant | 4/8 | 60.50 | 64.47 | 25.56 | 28.85 | 97.72 | 96.29 | 51.39 | 99.05 |
| Quarot | 4/8 | 58.80 | 56.86 | 25.33 | 34.30 | 98.10 | 95.72 | 55.56 | 99.03 |
| ViDiT-Q | 4/8 | 57.01 | 59.74 | 24.77 | 27.11 | 97.37 | 95.16 | 48.61 | 99.06 |
| DVD-Quant | 4/6 | 62.27 | 64.22 | 25.83 | 33.07 | 97.89 | 96.57 | 58.33 | 99.05 |
| MinMax | 4/4 | 24.20 | 24.78 | 4.27 | 0.00 | 98.05 | 96.27 | 0.00 | 99.03 |
| SmoothQuant | 4/4 | 48.41 | 59.46 | 21.09 | 7.84 | 96.72 | 94.97 | 1.39 | 98.79 |
| Quarot | 4/4 | 44.85 | 54.30 | 17.33 | 0.94 | 97.69 | 92.64 | 87.5 | 92.22 |
| ViDiT-Q | 4/4 | 45.36 | 40.10 | 19.66 | 7.85 | 97.19 | 97.29 | 0.00 | 99.43 |
| DVD-Quant | 4/4 | 61.96 | 61.82 | 25.68 | 29.94 | 97.82 | 96.61 | 56.94 | 99.15 |
Guide
Table 1 is the main result, VBench scores on HunyuanVideo with higher better. Read it in two blocks. At four-bit weights and higher-bit activations, DVD-Quant at W4A6 nearly matches the full-precision model on Aesthetic and Imaging Quality despite using fewer bits than the W4A8 baselines. At W4A4, the baselines break, MinMax scoring zero on Scene and Dynamic, while DVD-Quant keeps Imaging Quality at 61.82 and Aesthetic at 61.96. Consistency and smoothness columns barely separate methods, since static or noisy videos can still score high there.
Consistency/smoothness metrics saturate even for broken videos (a static noise video is "smooth"); Aesthetic and Imaging Quality are the informative columns. Quarot's 87.5 Dynamic Degree at W4A4 reflects flicker, not quality.
Guide
At W4A4, DVD-Quant loses about three Imaging Quality points against full precision, while the best baseline, SmoothQuant, loses about five and MinMax collapses to 24.78. The bars are taken straight from Table 1, with DVD-Quant's six-bit mixed setting added at 64.22, almost on top of the full-precision 64.78. The chart turns the table's W4A4 block into a single visible gap.
Guide
On Aesthetic Quality at W4A4 the gap is even wider: DVD-Quant scores 61.96 against 48.41 for SmoothQuant, the best baseline, a lead of about 13.5 points according to Table 1. The paper's text quotes different numbers and a gain of about 10.5, which do not match its own table, so trust the table values when citing. Full precision sits at 62.53, so DVD-Quant is within about half a point.
| Method | Imaging Quality |
|---|---|
| δ-GBS (ours) | 61.93 |
| STP: 4-bit first 25, 8-bit last 25 | 61.33 |
| ITP: 8-bit first, 4-bit later | 61.40 |
| ABS: alternate every step | 61.03 |
| SBA: random, avg 6 bits | 61.26 |
Guide
Table 2 tests whether the per-step switch actually matters, with every strategy averaging six bits over 50 steps. Delta-GBS scores 61.93. The fixed schedules score lower: four bits first then eight bits, 61.33; eight bits first then four bits, 61.40; alternating every step, 61.03; and random allocation, 61.26. Content-adaptive switching wins, which supports the idea behind equation 11.
Guide
Content-adaptive switching beats fixed schedules, but only by half a point to about 0.9 of a point in Imaging Quality. The axis starts at 60.8, which makes the bars look far apart. The honest reading is that delta-GBS helps a little over simple schedules; most of DVD-Quant's gain comes from BGR and ARQ, not from the bit schedule.
| BGR | ARQ | W/A | Aesthetic | Imaging | Subject C. | Motion S. | BG C. |
|---|---|---|---|---|---|---|---|
| ✓ | W4A6 | 58.15 | 58.68 | 98.04 | 98.49 | 98.21 | |
| ✓ | W4A6 | 57.85 | 57.72 | 98.23 | 97.86 | 98.10 | |
| ✓ | ✓ | W4A6 | 60.46 | 61.93 | 98.91 | 98.95 | 98.40 |
| ✓ | W4A4 | 53.95 | 52.67 | 97.92 | 98.71 | 97.89 | |
| ✓ | W4A4 | 43.26 | 58.31 | 95.36 | 96.08 | 97.35 | |
| ✓ | ✓ | W4A4 | 59.57 | 58.93 | 98.67 | 99.00 | 98.47 |
Guide
Table 3 removes one component at a time to show both are needed. Each row ticks whether BGR, ARQ, or both are used, at W4A6 and at W4A4. With both, Imaging Quality is 61.93 at W4A6 and 58.93 at W4A4, the best in every column. Dropping ARQ hurts most at W4A4, where Aesthetic Quality falls to 43.26. Note that the W4A4 full-method score here is lower than the 61.82 in Table 1, so the ablation setup seems to differ slightly.
| W/A | Aesth. | Imaging | BG C. | Subj. C. | Motion S. | Speed-up |
|---|---|---|---|---|---|---|
| W4A8 | 61.39 | 62.96 | 98.24 | 98.73 | 98.75 | 4.01× |
| W4A4 | 58.78 | 58.20 | 98.43 | 98.68 | 98.92 | 4.85× |
Guide
Quantization and caching stack. Here DVD-Quant is combined with TeaCache, which skips denoising steps whose output barely changes. The total speed-up reaches 4.01 times at W4A8 and 4.85 times at W4A4, with Imaging Quality of 62.96 and 58.20. For the thesis this is a useful precedent: weight compression and step caching are complementary on a video transformer.
| W/A | Memory opt. | Latency opt. |
|---|---|---|
| 16/16 | 1.00× | 1.00× |
| 4/8 (ours) | 3.68× | 1.75× |
| 4/6 (ours) | 3.68× | 1.93× |
| 4/4 (ours) | 3.68× | 2.12× |
Guide
Table 5 gives the hardware payoff on a single RTX 4090. Memory drops 3.68 times at every setting, because weights are four-bit in all three. Latency improves by 1.75 times at W4A8, 1.93 times at W4A6 and 2.12 times at W4A4, since lower-bit activations let faster integer matrix kernels run. These speed-ups depend on the authors' custom GPU kernels.
Guide
Speed comes from low-bit matrix kernels, and caching multiplies it. The bars show latency speed-up against full precision. W4A6 lands between W4A8 and W4A4 because roughly half the steps use each kernel, and adding TeaCache pushes the total to 4.01 and 4.85 times. The chart combines Tables 4 and 5 into one view of where the time savings come from.
The paper also reports Wan2.1 results and block-wise ARQ kernel details in a supplementary file that is not part of this PDF.
§8Why it matters for this thesis
DVD-Quant vs LTX-2.3 on OpenVINO / NNCF
- What is data-free here: all three parts. BGR uses only W. ARQ scales come from the live activation. δ-GBS uses a statistic of the model's own output. So no calibration set is needed, which avoids the thesis cost of hours of CPU time per calibration sample.
- BGR: directly usable, no custom kernel. The result is a standard asymmetric INT4 grid (u4 values + zero-point + scale per output row), the same format OpenVINO decompresses natively for weight-only INT4. It is a data-free replacement for NNCF's data-aware refinements (scale estimation, AWQ, GPTQ): compute Δ*, z* in PyTorch with Alg. 1 (easy to extend from per-row to NNCF-style group size 64/128) and write them into the compressed constants with a small custom script. Cost: offline CPU time only.
- ARQ needs custom kernels as published. Reported speed-ups use the authors' block-wise W4A4/W4A8 Tensor Core GEMM kernels plus a fast Hadamard transform on an RTX 4090. OpenVINO has no INT4×INT4 GEMM path on Intel CPU or Arc and no fast Walsh-Hadamard op (a dense MatMul by H costs O(d²) per token). The closest built-in feature is OpenVINO's dynamic INT8 activation quantization for compressed-weight MatMuls: online, group-wise scales, i.e. the A8 half of ARQ without the rotation.
- δ-GBS is cheap but needs two execution variants. It only swaps between two existing kernels (no mixed-precision kernel). In OpenVINO this means two compiled variants of the transformer chosen per step, with extra weight memory unless weights are shared. Its signal (relative L1 change of outputs) is the same kind used by TeaCache-style caching, so one signal could drive both bit switching and step skipping.
- Scope caveat: tested on HunyuanVideo (plus Wan2.1 in the supplement) at W4A4–W4A8 on an NVIDIA GPU; no audio, no weight-only W4A16 result, no CPU numbers. For the thesis, BGR is the transferable piece; ARQ and δ-GBS are ideas to check against what OpenVINO can run.
Guide
Take BGR into the thesis and treat the rest as ideas to test. BGR produces an ordinary INT4 grid, one scale and zero-point per row, which OpenVINO already decompresses, so it can be computed in PyTorch with Algorithm 1, extend it to NNCF-style groups of 64 or 128, write it into the compressed weights, and compare it with NNCF's data-aware options without spending CPU hours on calibration. ARQ needs INT4 activation kernels and a fast Hadamard op that OpenVINO lacks; its closest built-in match is dynamic INT8 activation quantization. Delta-GBS would need two compiled model variants, but its signal could also drive TeaCache-style step skipping.
QVGen: Pushing the Limit of Quantized Video Generative Models
Quantization-aware training (QAT) for video diffusion transformers at 4 and 3 bits for both weights and activations. A theory result says QAT converges better when the gradient norm is small, so each quantized layer gets a temporary low-rank helper Φ that absorbs quantization error; a rank-decay schedule (SVD + fading the smallest components) then shrinks Φ to nothing, leaving a plain W4A4 model.
- Precision
- W4A4 · W3A3
- Models
- CogVideoX 2B/5B, Wan 1.3B/14B
- W4A4 quality
- ≈ BF16 (VBench)
- Size / speed
- ~4× smaller · 1.21–1.44×
- Training cost
- 9–11 (small) to ~182 (14B) H100 GPU-days
- Inference overhead
- none (Φ removed)
Reading guide
QVGen asks whether a video diffusion transformer can be squeezed to four bits, or even three, for both weights and activations without the videos falling apart. Its answer is yes at four bits, through quantization-aware training plus a temporary low-rank helper that absorbs quantization error during training and is then faded out completely, so the shipped model is a plain W four A four network that scores close to BF16 on VBench. The tab moves from a big-picture diagram to the problem, the method and algorithm, every equation including the proofs, every figure, the results tables, and a thesis box. Among the sixteen papers it is the training-based member of the diffusion quantization group, after Q-Diffusion, PTQ4DiT, ViDiT-Q, SVDQuant and DVD-Quant, and just before the SVDQuant with GPTQ study on Wan 2.2. For the thesis it marks the floor: even with expensive training, four bits is the limit.
§0Before reading
Every quantization paper so far in the atlas was post-training quantization: take a finished model and round it, without changing its weights. QVGen instead retrains the quantized model, so three ideas come first: how training differs from post-training quantization, how backpropagation can pass through rounding at all, and what a low-rank matrix is. It is in the atlas as the upper limit: with a lot of GPU training, how low can a video diffusion transformer go?
Guide
Two ways to get a low-bit model. The top row is post-training quantization: the weights stay frozen and only the scales are chosen from a few samples, which takes hours. The bottom row is quantization-aware training: the rounding is simulated in every forward pass and the weights are updated to cope with it, which takes GPU-days. Every earlier quantization paper in the atlas used the top row. QVGen uses the bottom one.
Guide
Rounding has no useful slope, so how can training pass through it? The left plot is the forward pass: a staircase, flat almost everywhere, next to the dashed ideal line. The right plot is what the straight-through estimator uses in the backward pass instead: a slope of one inside the clipping range and zero outside. This is equation five of the paper, and its noise helps explain the spiky gradients QVGen sets out to calm.
Guide
A big matrix can often be rebuilt from two thin ones. On the left, W is approximated by a tall matrix L times a short matrix R, with a small inner size called the rank. On the right, singular value decomposition sorts the pieces by importance: keep the tall bars, drop the tiny ones. QVGen's helper starts as the rounding error at rank thirty-two and is shrunk by halving the rank until nothing is left.
Guide
The map shows QVGen's neighbours in the atlas. SVDQuant kept a low-rank high-precision branch at inference, and DVD-Quant pushed post-training quantization on video. QVGen is the first training-based method here: it retrains the weights at four and three bits and uses a helper branch only during training, so the final model is plain W four A four. Next, the SVDQuant with GPTQ study returns to post-training quantization on Wan 2.2.
Terms used in this paper
- QAT vs PTQ
- Quantization-aware training retrains the weights while rounding is simulated. Post-training quantization only picks scales for a finished model, with a small calibration set.
- W4A4, W3A3
- Weights and activations both in 4 bits (or 3). QVGen uses per-channel scales for weights and per-token scales for activations, computed on the fly.
- Fake quantization
- Round a value to the low-bit grid and immediately convert it back to a float. Training sees the rounding error without needing integer kernels.
- Straight-through estimator (STE)
- A trick for backpropagating through rounding: treat it as the identity inside the clipping range, and give zero gradient to clipped values.
- Knowledge distillation
- The quantized "student" is trained to copy the full-precision "teacher" model's noise predictions, instead of learning from the raw training target.
- Gradient norm
- The overall size of the gradient vector at a training step, \(\lVert g_t\rVert\). QVGen argues that keeping it small makes low-bit training converge better.
- Regret
- A measure from optimisation theory: the total extra loss accumulated during training compared with the best fixed parameters. Lower average regret means closer to the optimum.
- SVD, rank
- Singular value decomposition splits a matrix into pieces sorted by importance (singular values). The rank is how many pieces are kept.
- LoRA
- Low-rank adaptation: training only a small low-rank add-on next to frozen weights. EfficientDM, a baseline here, uses it for quantized diffusion models.
- LSQ, Q-DM, EfficientDM
- Earlier QAT methods (the first for CNNs, the others for image diffusion models) that the paper adapts to video as baselines.
- CogVideoX, Wan
- Open-source text-to-video diffusion transformers. The paper tests CogVideoX 2B and 1.5-5B, and Wan 1.3B and 14B.
- VBench
- A video-generation benchmark that scores separate dimensions such as aesthetic quality, motion smoothness, dynamic degree and scene consistency. It has its own tab at the end of the atlas.
- H100, A800
- NVIDIA data-centre GPUs. Training ran on H100s; speed was measured on an A800, a variant of the A100 made for the Chinese market with reduced interconnect bandwidth.
Guide
These are the words the paper takes for granted. The most important are quantization-aware training versus post-training quantization, the straight-through estimator, knowledge distillation from a full-precision teacher, and the gradient norm, which the paper's theory links to convergence. SVD and rank describe the helper branch. The rest names the baselines, the CogVideoX and Wan models, the VBench benchmark, and the H100 and A800 GPUs used for training and timing.
§2Big picture
Guide
Read left to right as three stages. On the left, naive four-bit training suffers large quantization error and spiky gradient norms, and the video breaks. In the middle, QVGen adds a low-rank helper called phi next to each layer, which calms the gradients, while its rank is halved from 32 down to nothing. On the right, the deployed model is ordinary W four A four with zero overhead, about four times smaller and 1.21 to 1.44 times faster.
Train the low-bit model with a helper branch that keeps gradients calm, then gradually remove the helper so the shipped model is standard uniform W4A4. The helper is low-rank and disappears one half of its rank at a time.
§3The problem
Guide
Video is harder to train in low bits than images. The left bars compare the average gradient norm during four-bit Q-DM training on two models of the same two-billion size: about 0.33 for the CogVideoX video model against about 0.20 for the SD3 image model. The right bars show high-motion training clips give the largest norm. Because the theory later says large gradient norms slow convergence, this is the problem QVGen sets out to fix.
Guide
The helper phi cannot stay in the final model. At inference it would need a second matrix multiply in FP16 beside the fast INT4 one, and its full-rank FP16 weight would take far more memory than the four-bit weight itself. That would defeat the point of quantizing. This is why the method needs the rank-decay schedule: phi must help during training and then disappear before deployment.
- PTQ (ViDiT-Q, SVDQuant) produces no usable video at per-channel W4A4; even at W4A6 it lags far behind.
- Image-DM QAT methods (LSQ, Q-DM, EfficientDM) degrade at W4A4 and break at W3A3 (Dynamic Degree 0.56 for LSQ on CogX-2B).
- Activations are the bottleneck: W4A16 is fine, W16A4 is pure noise (Fig. B).
- Just clipping gradients helps only a little (0.5) and hurts when aggressive (0.1), as Tab. E shows. A more principled fix is needed.
§4Method
- Quantize: per-channel asymmetric weights and per-token dynamic activations, Eq. (4); STE for gradients, Eq. (5); LSQ-learned weight scales.
- Add Φ to every linear layer: Ŷ = Q(W)Q(X) + WΦQ(X), with WΦ = W − Q(W) at start (Eq. 9).
- Factorise: SVD of WΦ truncated to rank r=32 → L (n×r), R (r×m) (Eqs. 10–11).
- Train with KD against the BF16 teacher (Eq. 6), updating W, s, z, L, R, while γ fades the lowest λr = r/2 components with a cosine u: 1→0 (Eqs. 12–13).
- Truncate to rank (1−λ)r, re-SVD, repeat: 32→16→8→4→2 (Eq. 14).
- Final phase: once r ≤ 1/λ, fade everything left (γ=[u]); drop Φ. Ship a plain W4A4/W3A3 model.
Guide
The recipe has two halves. First, set up four-bit fake quantization and attach a helper to every linear layer that starts out equal to the weight's rounding error, compressed by SVD into two thin rank-32 matrices. Second, train by distillation from the BF16 teacher while repeatedly fading the weakest half of the helper's components, cutting them off, and re-factorising: rank 32, 16, 8, 4, 2, then zero. What remains is a plain low-bit model.
Guide
The algorithm is one outer loop wrapped around ordinary training. First, the model is quantized and each helper starts as the quantization error. Each pass of the outer loop factorises the helpers at the current rank, builds the mask gamma, runs a fixed number of distillation steps while the weakest half fades out, then truncates and halves the rank. When the rank is tiny, a last phase fades everything, so the returned model has no helper left.
Setup: 16K captioned OpenVidHQ clips, AdamW (wd 1e-4), cosine LR (3e-5 for ≤2B), 8 epochs on 8×H100 (16 epochs on 16–32×H100 for 5B/14B), equal iterations per decay phase. Attention stays in full-precision flash-attention; only linear layers are quantized.
§5Every equation
Forward diffusion: clean latent video \(\mathbf{x}_0\in\mathbb{R}^{f\times h\times w\times c}\) mixed with Gaussian noise; \(\alpha_\tau,\sigma_\tau\) set the SNR at timestep \(\tau\in[1,\dots,N]\).
Guide
This is the forward noising step of diffusion. x tau, the noisy latent video at timestep tau, equals alpha tau times the clean latent x zero plus sigma tau times Gaussian noise epsilon. Alpha and sigma set how much signal versus noise remains at that step. QVGen uses it in the training loop to create noisy inputs that both the teacher and the quantized student must denoise.
Standard noise-prediction training loss; \(\mathcal{C}\) = text/image condition. (v-prediction is the common alternative.)
Guide
This is the standard training loss for a diffusion model. The network epsilon theta sees the noisy video, the text condition C and the timestep tau, and tries to predict the noise that was added; the loss is the expected squared difference. QVGen does not train with this directly. It replaces the true noise with the teacher's prediction in equation 6, a distillation version of the same idea.
Full-precision vs. quantized linear layer; \(\mathbf{W}\in\mathbb{R}^{n\times m}\), \(\mathbf{X}\in\mathbb{R}^{m\times k}\) (n out-channels, m token dim, k tokens).
Guide
Here is the basic object being compressed: one linear layer. In full precision the output Y is the weight matrix W times the input X. In the quantized version, Y hat is the quantized weight times the quantized input, both at b bits. The gap between Y and Y hat is the quantization error, and every later equation is about keeping that gap from spoiling training and the final video.
Asymmetric uniform (min–max) fake-quantizer with scale \(s\) and zero-point \(z\) — exactly the INT-asym format OpenVINO/NNCF use.
Guide
This is the quantizer itself: asymmetric uniform min-max quantization. The step size s is the value range divided by two to the b minus one levels, and the zero-point z shifts the grid so the minimum maps to zero. Each value is divided by s, rounded, shifted by z, clipped to the allowed integer range, then mapped back. It is exactly the INT asymmetric format OpenVINO and NNCF use, so nothing exotic is needed on the thesis side.
Straight-through estimator: gradient passes through rounding as 1 inside the clipping range, 0 outside.
Guide
Rounding has zero gradient almost everywhere, so training through it needs a trick: the straight-through estimator. The derivative of the quantizer is simply taken as one when the scaled value falls inside the clipping range and zero when it is clipped. This lets gradients reach the weights and the learned scales during quantization-aware training, and the gradient norms the paper worries about are measured through this path.
Knowledge-distillation QAT loss: quantized student \(\hat{\boldsymbol{\epsilon}}_\theta\) matches the BF16 teacher's output.
Guide
This is the loss QVGen actually trains with, a knowledge distillation loss. The quantized student, epsilon hat, and the full-precision teacher, epsilon theta, see the same noisy video, condition and timestep, and the loss is the squared difference of their outputs. The student therefore learns to copy the BF16 model rather than fit raw data, which is the usual choice in diffusion quantization-aware training such as Q-DM and EfficientDM.
Regret over \(T\) iterations; \(\theta^*=\arg\min_{\theta\in\mathbb{S}^d}\sum_t f_t(\theta)\) in a convex compact set.
Guide
Regret is the yardstick for the convergence theory. R of T sums, over T training iterations, how much worse the loss at the current parameters theta t is than the loss at the best fixed parameters theta star. If average regret, R of T divided by T, goes to zero, training is converging. Theorem 3.1 bounds exactly this quantity.
Gradient-descent update with learning rate \(\eta_t\) and gradient \(\mathbf{g}_t\).
Guide
This is plain gradient descent. The next parameters theta t plus one equal the current parameters minus the learning rate eta t times the gradient g t. It is the update rule assumed in the convergence analysis, and it is why the size of g t appears in the bound that follows.
If \(f_t\) convex and \(\lVert\theta_i-\theta_j\rVert_\infty\le D_\infty\): for large \(T\) the first term vanishes, so the average squared gradient norm controls convergence → reduce \(\lVert\mathbf{g}_t\rVert_2\). (\(\eta^M_t,\eta^m_t\) = max/min learning rates.)
Guide
Theorem 3.1 is the paper's key theoretical motivation. Average regret is at most two terms: the first shrinks as training length T grows, and the second is the average over iterations of the learning rate times the squared gradient norm. So after long training, convergence is governed by how large the gradients are. The takeaway is simple: shrink the gradient norm and quantization-aware training converges better, which the helper phi is designed to do.
Auxiliary module: an extra FP branch; \(\mathbf{W}_\Phi\) initialised to the weight quantization error \(\mathbf{W}-\mathcal{Q}_b(\mathbf{W})\).
Guide
This introduces the helper. The quantized layer's output becomes the usual quantized weight times quantized input, plus phi applied to the quantized input, where phi is just an extra full-precision weight W phi times that input. W phi starts as the weight's rounding error, W minus its quantized version, so at the start the layer behaves almost like full precision. That softer start is what lowers the gradient norm.
SVD of the helper weight; \(d=\min\{n,m\}\), \(\sigma_1\ge\dots\ge\sigma_d\). Most \(\sigma_s\) are tiny and get tinier during QAT (Fig. 4).
Guide
This is the singular value decomposition of the helper weight. W phi is written as a sum of d rank-one pieces, each a singular value sigma s times an outer product of vectors u s and v s, sorted from largest to smallest sigma. Figure 4 shows most sigmas are tiny and get tinier during training. That observation is what makes it safe to keep only the top few and later discard them.
Rank-\(r\) factorisation (\(r\ll d\), \(r=32\) used); column/row \(s\) carries the \(s\)-th largest contribution.
Guide
The helper is stored in factorised form: phi equals L times R times the quantized input. L collects the top r left singular vectors and R the top r right ones, each scaled by the square root of its singular value. With r equal to 32, far below the full dimension, the helper is cheap. Column s of L carries the s-th strongest direction, which lets the next equations fade the weakest columns first.
Training-time forward with the rank-based regularizer \(\boldsymbol{\gamma}\) masking columns of \(\mathbf{L}\).
Guide
This is the training-time forward pass with the rank regularizer. It is the same layer as before, except L is multiplied element by element by the mask gamma before being combined with R. Gamma lets training gradually switch off selected columns of L, so the helper's contribution shrinks smoothly instead of vanishing abruptly. Equation 13 defines what gamma looks like.
Keep the top \((1-\lambda)r\) components; the lowest \(\lambda r\) are multiplied by \(u\), cosine-annealed 1 → 0. \(\lambda=\tfrac12\).
Guide
Gamma is built from two blocks. The first one minus lambda times r columns are all ones, keeping the strongest components untouched. The last lambda times r columns are set to u, a number annealed from one to zero with a cosine schedule. With lambda equal to one half, the weakest half of the helper fades out during each phase while the model learns to compensate.
When \(u\) hits 0, truncate: rank drops \(r\to(1-\lambda)r\). Repeat (re-SVD, decay, truncate) until \(r=0\), i.e. \(\Phi=\varnothing\).
Guide
Once u reaches zero, the faded columns are removed for real. L prime keeps only the first one minus lambda times r columns of L, and R prime the matching rows of R, and their product becomes the new, smaller helper weight. The rank halves, from 32 to 16 and so on. The loop then re-factorises and repeats until the rank is zero and phi no longer exists.
Proof of Thm 3.1 — per-entry update of parameter \(p\).
Guide
The appendix proof of Theorem 3.1 starts here. This is gradient descent written for one single entry p of the parameter vector, with its own learning rate eta t p and gradient g t p. Working entry by entry lets the proof handle adaptive, per-parameter learning rates like those in AdamW.
Expand the squared distance to the optimum.
Guide
The proof now measures how far one parameter entry is from its optimum. Squaring the distance after one update and expanding gives three parts: the old squared distance, minus a cross term of two times distance times learning rate times gradient, plus the learning rate squared times the gradient squared. That last term is where the gradient norm enters the bound.
Rearranged and divided by \(2\eta_{t,p}\).
Guide
Rearranging the previous expansion isolates the gradient times the distance to the optimum. It equals the drop in squared distance over one step, divided by two times the learning rate, plus half the learning rate times the gradient squared. The first part will telescope across iterations; the second is the gradient-norm penalty that survives into Theorem 3.1.
Convexity (Assumption B.1).
Guide
This is where convexity is used. For a convex loss, the gap between the current loss and the optimal loss is at most the gradient dotted with the distance to the optimum. It links regret to the expression rearranged in the previous step. It is an idealising assumption: real diffusion training is not convex, which is why Appendix C repeats the argument without it.
Sum over dimensions and iterations; telescope.
Guide
Summing over all parameter entries and all iterations bounds the total regret. The distance terms telescope, meaning consecutive terms cancel, leaving the starting distance, a correction for changing learning rates, and the accumulated sum of learning rate times gradient squared. The gradient sum is untouched by the telescoping, which is why it ends up dominating.
Bounded domain (Assumption B.2).
Guide
Assuming parameters stay in a bounded region, every distance to the optimum is replaced by the largest possible distance, D infinity. Now the first two terms depend only on the learning rates and the problem size, while the last term is still the sum of learning rate times squared gradient. That split is exactly the shape of Theorem 3.1.
Replace per-entry rates by their min/max.
Guide
To tidy up, every per-entry learning rate is replaced by the smallest rate at the end, eta T m, in the first term, and by the largest rate at each step, eta t M, in the gradient term. The result is a compact bound: a constant depending on dimension d and distance D, plus the sum of the maximum learning rate times the squared gradient norm.
Average regret = Theorem 3.1 / B.3.
Guide
Dividing by T gives average regret and completes the proof; this line is Theorem 3.1 itself. The first term fades like one over T, so for long training the average squared gradient norm is what limits convergence. This is the formal reason QVGen adds the helper phi: it lowers the gradient norm, as Figure 3 then confirms empirically.
Non-convex analysis (App. C): fixed objective \(F\).
Guide
Appendix C redoes the analysis without assuming convexity. Here the objective is a single fixed function F, and the update is ordinary gradient descent, with g t defined as the gradient of F at the current parameters. This setting is closer to real deep-network training and checks that the gradient-norm argument does not depend on the convexity idealisation.
Assumption C.1: \(L\)-smoothness (here \(L\) is a constant, not the low-rank matrix).
Guide
This is the L-smoothness assumption. The gradient cannot change faster than a constant L times the distance between two parameter points. Careful with the letter: this L is a smoothness constant, not the low-rank matrix L from the method. Smoothness is the standard condition that makes a small gradient step reliably reduce the loss.
Equivalent descent inequality.
Guide
This descent inequality is an equivalent form of smoothness. The loss at a new point is at most the loss at the old point, plus the gradient dotted with the step, plus L over two times the squared step length. It upper-bounds the loss with a simple bowl-shaped curve, which the proof uses to show every gradient step makes progress.
Assumption C.2: bounded learning rates.
Guide
This assumption keeps learning rates in a safe range. Every learning rate eta t lies between a positive minimum eta m and a maximum eta M, and the maximum is at most one over the smoothness constant L. Rates that are too large could overshoot, so this cap guarantees each gradient step actually lowers the loss.
Theorem C.4 (with \(F\ge F^\star\), Assumption C.3): average squared gradient norm is \(O(1/T)\).
Guide
Theorem C.4 is the non-convex counterpart of Theorem 3.1. The average squared gradient norm over T steps is at most two times the gap between the starting loss and the best possible loss, divided by T times the minimum learning rate. So it falls like one over T. The paper reads it the same way: smaller gradient norms mean a tighter bound after a finite number of steps.
Convergence to a first-order stationary point.
Guide
The smallest squared gradient norm seen during training is no larger than the average, and the average goes to zero as training gets longer. So training reaches a first-order stationary point, a place where the gradient vanishes. This is the standard convergence guarantee for non-convex optimisation, restated here to support the paper's gradient-norm focus.
Plug the update into the descent inequality.
Guide
The proof of Theorem C.4 begins by plugging the gradient descent step into the descent inequality. After simplifying, the new loss is at most the old loss minus eta t times one minus L eta t over two, times the squared gradient norm. In words, each step lowers the loss by an amount proportional to the squared gradient, as long as the learning rate is not too large.
Since \(\eta_t\le 1/L\Rightarrow 1-L\eta_t/2\ge 1/2\).
Guide
Because the learning rate is capped at one over L, the factor one minus L eta over two is at least one half. So each step lowers the loss by at least half the learning rate times the squared gradient norm. It is a clean per-step guarantee of progress that the next line adds up over all of training.
Telescoping sum with \(F(\theta_{T+1})\ge F^\star\).
Guide
Summing the per-step decrease over all T steps makes the intermediate losses cancel, a telescoping sum. The total of half the learning rate times squared gradient norm is at most the starting loss minus the lowest achievable loss, F star. The loss cannot drop forever, so the gradients cannot stay large forever.
Using \(\eta_t\ge\eta^m\) — proves (M).
Guide
Replacing each learning rate by its minimum and dividing by T turns the previous sum into an average. The average squared gradient norm is at most two times the loss gap divided by T times the minimum learning rate. This line proves Theorem C.4, the statement shown earlier as equation M.
Proves (N). Remark C.5: lowering \(\lVert\mathbf{g}_t\rVert\) tightens the finite-\(T\) bound in both settings.
Guide
This closes the non-convex proof. The minimum squared gradient norm is bounded by the average, which is bounded by a quantity that shrinks like one over T, so it tends to zero. Remark C.5 draws the practical link: in both the convex and non-convex settings, lowering the gradient norm tightens the finite-time bound, which justifies the helper phi.
“Res. Q.” baseline decay (App. F): \(\mathbf{E}_1=\mathbf{W}_\Phi-\mathcal{Q}_4(\mathbf{W}_\Phi)\), \(\mathbf{E}_{i+1}=\mathbf{E}_i-\mathcal{Q}_4(\mathbf{E}_i)\); terms removed one per phase.
Guide
This is one of the alternative ways to remove the helper that the paper compares against, called residual quantization. W phi is written as a four-bit copy of itself plus four-bit copies of successive leftover errors E one, E two and E three, and one term is dropped per phase. Table N shows it scores below rank decay and costs about 2.6 times the GPU time.
Effective INT4 GEMM throughput for an \([M,K]\times[K,N]\) product (App. N).
Guide
This defines the throughput figure in Table R. For a matrix product of sizes M by K and K by N, the number of operations is two times M times N times K; dividing by the measured INT4 GEMM time and by ten to the twelfth gives tera-operations per second. It shows how close the kernel gets to hardware peak, separate from quantize and dequantize overhead.
Amdahl-style projected speed-up if fusion removes a fraction \(r\) of non-GEMM (quant/dequant) time; \(G\) = GEMM time fraction. \(r=0.6\Rightarrow 1.18\text{–}1.38\times\); \(r\approx0.8\Rightarrow 1.25\text{–}1.57\times\).
Guide
This Amdahl-style formula projects speed-up if the quantize and dequantize steps were fused into the matrix multiply. G is the fraction of time spent in the GEMM, and r is the fraction of the remaining non-GEMM time that fusion removes. With r at 0.6 the paper projects about 1.18 to 1.38 times, and with r near 0.8 about 1.25 to 1.57 times. Kernel engineering, not only bit width, sets the real speed-up.
§6Every figure
Guide
Each row is three frames of one prompt and seed on CogVideoX two B, a girl in a war-torn city. The top row is BF16 and the second is QVGen at four-bit weights and activations, which keeps the same girl, ruins and detail. The four rows below are earlier methods, including SVDQuant even with six-bit activations, and they wash out colour, change the girl or turn murky. It is the paper's opening claim in one picture, drawn here as a schematic.
Guide
Panel a is training: the BF16 teacher and the quantized student denoise the same video, and a distillation loss compares them. Inside every student layer, the helper phi, started at W minus its quantized version, is added to the quantized path, giving a smoother loss landscape and smaller gradients. Panel b is removal: the helper is factorised by SVD, the weakest half of its columns fades out, is cut, and the cycle repeats from rank 32 down to nothing.
Guide
This is the empirical check of the theory. Upper plots show the gradient norm, lower plots the distillation loss, over two thousand training steps for plain four-bit Q-DM training versus the same training with the helper phi. On both CogVideoX two B and Wan 1.3B, phi keeps both curves lower; at the tail the CogVideoX loss is roughly 0.008 versus 0.018. The curves are redrawn and the tail values approximate, but the gap is the evidence Theorem 3.1 predicts.
Guide
Each panel plots the average singular values of the helper weight, largest on the left and smallest on the right on a log scale, for attention and feed-forward layers of two models, at zero, one thousand and two thousand steps. Most values sit far below the top one, and the share keeps growing: in CogVideoX attention it rises from 73 percent at the start to 99 percent after two thousand steps. This justifies keeping rank 32 and then removing it.
Guide
These radar charts score the large models, CogVideoX 1.5 five B and Wan fourteen B, on eighteen VBench-2.0 dimensions; grey numbers mark each axis's maximum. The four-bit QVGen polygon nearly overlaps BF16, with about a one percent drop in total score. The three-bit polygon keeps human anatomy and clothing but shrinks on landscape, interaction, motion order and multi-view consistency. The shapes are redrawn, so read the pattern rather than exact values. Three bits is too far at this scale.
Guide
For Wan 1.3B and fourteen B, panel a shows four-bit weights make the models about four times smaller, 26.6 down to 6.7 gigabytes for fourteen B. Panel b: per-step latency on an A800 improves only 1.21 and 1.44 times with a real W four A four kernel. Panel c: stacking sparse attention on top gives larger gains, printed as 1.70 and 2.63 times. Memory savings are dramatic; speed gains are modest without attention tricks.
Guide
This plots training loss over two thousand steps for five four-bit training methods on CogVideoX two B and Wan 1.3B. QVGen and the helper-only variant drop fastest and settle lowest, while LSQ, Q-DM and EfficientDM stay higher. LSQ trains on the raw noise-prediction loss, so its curve is not strictly comparable. The plot is a schematic redraw, and it supports the same convergence story as Figure 3 with more baselines.
Guide
Activations, not weights, are the hard part. Each column is one model and each row one setting: BF16, four-bit weights with sixteen-bit activations, and sixteen-bit weights with four-bit activations. W four A sixteen stays close to the original with slight blur, while W sixteen A four turns both videos into noise. For the thesis this is the strongest single argument in the paper for weight-only INT4 or INT8 compression in NNCF, keeping activations in higher precision.
Guide
Three frames of a wooden toy ship on a blue carpet, generated by CogVideoX two B at three-bit weights and activations. BF16 is on top, QVGen second, then EfficientDM, Q-DM and LSQ. Only QVGen keeps a recognisable ship; the others warp, melt or blur it into a grey blob. It shows the method's advantage grows at more aggressive bit widths on small models, matching the three-bit rows of Table 1.
Guide
Same layout on Wan 1.3B at three bits, with a white SUV driving along a dirt road. QVGen keeps both the car and the scene. EfficientDM gets hazy and washed out, Q-DM loses the car into fog, and LSQ drifts to a wrong view of the sky. Together with the ship example, it shows QVGen is the only method still usable at W three A three on the one-to-two-billion models.
Guide
A growing sandcastle from CogVideoX 1.5 five B, shown early, middle and late, with BF16 above and three-bit QVGen below. The castle's shape survives, but colours break into neon cyan and red noise. This is the failure behind the collapsed three-bit polygon in Figure 5 and the weak W3A3 rows in Table 2: at three bits, even trained quantization breaks on large models.
Guide
A golden retriever running to an apple, from Wan fourteen B, BF16 above and three-bit QVGen below. The dog remains, but the background flattens to green and the apple disappears. Like the sandcastle, this shows three bits is past the limit for large models even with full training, which is why the thesis box treats four-bit weights as the floor.
Guide
Two prompts on CogVideoX two B at four bits: a husky on snow and a candle-lit medieval hall. Columns go BF16, QVGen, EfficientDM, Q-DM and LSQ. QVGen tracks BF16 closely. The older training methods change tone, pose or layout: darker images, extra candles, a different dog pose, a blue tint. These supplement Figure 1 with more examples of the same four-bit claim.
Guide
Same layout on Wan 1.3B at four bits, with an angry man in the mountains and an old painter by the sea. QVGen stays faithful to both, painter and canvas included. EfficientDM shifts to blue night tones, Q-DM changes the face or layout, and LSQ zooms into close-ups that lose the sea. The pattern repeats across models, so the four-bit result is not a single lucky prompt.
Guide
Four-bit QVGen on the larger CogVideoX 1.5 five B, with motion-heavy prompts: a squirrel darting from behind a rock and a tabby cat running through a meadow. The quantized frames match BF16 in both subject and motion. Since video quantization struggles most with motion, as Table D hints, this is the visual counterpart of the near-BF16 four-bit scores in Table 2.
Guide
Four-bit QVGen on Wan fourteen B for two prompts: a person eating ice cream and a camera orbiting a garden. Both look close to BF16, keeping the smile and the orbit. It confirms that W four A four holds on the largest model tested, in contrast to the three-bit failures in Figures E and F.
§7Results
| Method | W/A | Imaging Q. | Aesthetic Q. | Motion Smooth. | Dynamic Deg. | Backgr. Cons. | Subject Cons. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|---|---|---|---|
| CogVideoX-2B (CFG 6.0, 480p, 8 fps) | |||||||||
| Full Prec. | 16/16 | 59.15 | 54.49 | 97.43 | 67.78 | 94.79 | 92.82 | 36.24 | 25.06 |
| Full Fine-tuning | 16/16 | 61.34 | 56.53 | 98.59 | 65.39 | 93.84 | 93.43 | 34.99 | 25.50 |
| ViDiT-Q † | 4/6 | 54.72 | 43.01 | 92.18 | 43.22 | 90.76 | 81.02 | 26.25 | 20.41 |
| SVDQuant † | 4/6 | 58.27 | 47.06 | 95.28 | 40.83 | 92.41 | 87.45 | 27.69 | 21.34 |
| SVDQuant †♣ | 4/4 | 51.60 | 49.40 | 97.69 | 42.22 | 94.03 | 91.78 | 25.67 | 22.89 |
| LSQ * | 4/4 | 58.73 | 54.20 | 97.57 | 45.00 | 92.97 | 92.41 | 24.06 | 23.17 |
| Q-DM * | 4/4 | 54.96 | 52.71 | 98.00 | 48.61 | 93.82 | 91.86 | 28.02 | 23.87 |
| EfficientDM * | 4/4 | 55.96 | 51.97 | 98.03 | 46.67 | 94.10 | 91.70 | 27.76 | 24.28 |
| QVGen (Ours) * | 4/4 | 60.16 | 54.61 | 98.06 | 67.22 | 94.38 | 93.01 | 31.42 | 24.61 |
| LSQ * | 3/3 | 56.46 | 40.35 | 97.98 | 0.56 | 94.08 | 89.18 | 4.80 | 13.80 |
| Q-DM * | 3/3 | 50.88 | 40.41 | 98.03 | 5.56 | 93.93 | 87.75 | 7.33 | 15.98 |
| EfficientDM * | 3/3 | 52.86 | 44.58 | 97.13 | 28.61 | 93.15 | 88.26 | 15.42 | 20.42 |
| QVGen (Ours) * | 3/3 | 58.36 | 50.54 | 98.37 | 53.89 | 94.55 | 90.50 | 23.85 | 22.92 |
| Wan 1.3B (CFG 5.0, 480p, 16 fps) | |||||||||
| Full Prec. | 16/16 | 64.30 | 58.21 | 97.37 | 70.28 | 95.94 | 93.84 | 28.05 | 24.67 |
| Full Fine-tuning | 16/16 | 64.59 | 58.85 | 97.46 | 83.61 | 94.30 | 93.68 | 27.55 | 24.86 |
| ViDiT-Q † | 4/6 | 56.24 | 50.18 | 94.81 | 52.43 | 89.67 | 82.53 | 13.45 | 19.58 |
| SVDQuant † | 4/6 | 58.16 | 51.27 | 97.05 | 49.44 | 93.74 | 91.71 | 14.18 | 23.26 |
| SVDQuant †♣ | 4/4 | 57.57 | 46.30 | 94.21 | 72.22 | 93.16 | 77.96 | 12.73 | 21.91 |
| LSQ * | 4/4 | 59.11 | 49.09 | 98.35 | 71.11 | 92.66 | 91.67 | 10.38 | 18.83 |
| Q-DM * | 4/4 | 60.40 | 52.50 | 97.22 | 76.67 | 93.37 | 89.26 | 13.28 | 21.63 |
| EfficientDM * | 4/4 | 60.70 | 53.57 | 96.18 | 56.39 | 93.74 | 91.70 | 11.77 | 21.19 |
| QVGen (Ours) * | 4/4 | 63.08 | 54.67 | 98.25 | 77.78 | 94.08 | 92.57 | 15.32 | 23.01 |
| LSQ * | 3/3 | 58.80 | 46.86 | 98.22 | 23.61 | 91.86 | 89.42 | 0.89 | 15.51 |
| Q-DM * | 3/3 | 56.19 | 44.95 | 95.13 | 76.94 | 92.09 | 83.82 | 1.79 | 16.89 |
| EfficientDM * | 3/3 | 42.32 | 33.52 | 96.50 | 70.28 | 92.10 | 74.79 | 0.04 | 11.38 |
| QVGen (Ours) * | 3/3 | 67.35 | 49.71 | 98.93 | 84.14 | 93.62 | 92.25 | 5.71 | 20.11 |
Guide
This is the main results table for the one-to-two-billion models, with eight VBench scores per method; higher is better. Daggers mark post-training methods and asterisks training-based ones. At W four A four, QVGen is the best quantized method on most columns and, on Wan 1.3B, even beats BF16 on dynamic degree. At W three A three the baselines collapse, for example LSQ reaching a dynamic degree of 0.56 on CogVideoX, while QVGen stays usable. This is the paper's central evidence.
Guide
Bars show the overall consistency score from Table 1 for LSQ, Q-DM, EfficientDM and QVGen, at four bits and three bits, on CogVideoX two B and Wan 1.3B; the dashed line is BF16. QVGen is the tallest bar in every group, close to the line at four bits, and the gap to the baselines widens at three bits.
| Method | W/A | Imaging Q. | Aesthetic Q. | Motion Smooth. | Dynamic Deg. | Backgr. Cons. | Subject Cons. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|---|---|---|---|
| CogVideoX1.5-5B (CFG 6.0, 720p, 16 fps) | |||||||||
| Full Prec. | 16/16 | 66.25 | 59.49 | 98.42 | 59.72 | 96.57 | 95.28 | 39.14 | 26.18 |
| QVGen (Ours) | 4/4 | 66.76 | 59.52 | 98.38 | 64.44 | 95.83 | 94.88 | 28.47 | 24.45 |
| QVGen (Ours) | 3/3 | 54.44 | 35.85 | 97.23 | 58.89 | 96.48 | 90.17 | 13.27 | 17.15 |
| Wan 14B (CFG 5.0, 720p, 16 fps) | |||||||||
| Full Prec. | 16/16 | 67.89 | 61.54 | 97.32 | 70.56 | 96.31 | 94.08 | 33.91 | 26.17 |
| QVGen (Ours) | 4/4 | 66.87 | 59.41 | 97.71 | 76.11 | 96.50 | 94.45 | 19.84 | 25.70 |
| QVGen (Ours) | 3/3 | 48.70 | 29.73 | 99.05 | 93.33 | 97.34 | 94.71 | 2.81 | 13.97 |
Guide
This table covers the large models, CogVideoX 1.5 five B and Wan fourteen B, and only QVGen is run. At four bits most scores sit near BF16, for example an overall consistency of 25.70 against 26.17 on Wan fourteen B, although scene consistency drops noticeably. At three bits aesthetic quality and scene consistency collapse, down to 2.81 for scene consistency on Wan fourteen B. Four bits is the practical limit at scale.
| Method | Imaging Q. | Aesthetic Q. | Dynamic Deg. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|
| Naive | 60.40 | 52.50 | 76.67 | 13.28 | 21.63 |
| +Φ | 63.41 | 54.75 | 77.89 | 15.51 | 22.98 |
| +Rank | 63.08 | 54.67 | 77.78 | 15.32 | 23.01 |
Guide
The component ablation on Wan 1.3B at four bits. Naive is plain distillation training; plus phi adds the helper and keeps it; plus rank adds the rank-decay that removes it. Adding phi lifts every score, with overall consistency going from 21.63 to 22.98. Removing phi through rank decay costs almost nothing, 23.01 overall. So the benefit survives even after the helper is gone, which is the whole point of the design.
| λ | Imaging Q. | Aesthetic Q. | Dynamic Deg. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|
| 1/4 | 63.02 | 54.23 | 76.84 | 15.18 | 22.85 |
| 1/2 | 63.08 | 54.67 | 77.78 | 15.32 | 23.01 |
| 3/4 | 62.89 | 54.62 | 77.91 | 15.04 | 22.89 |
| 1 | 61.05 | 52.48 | 76.48 | 13.82 | 21.81 |
Guide
This ablation varies the shrinking ratio lambda, the fraction of the helper's rank removed in each phase. One quarter, one half and three quarters all perform similarly, with one half slightly best at 23.01 overall consistency. Lambda equal to one, removing everything in a single phase, drops to 21.81, almost back to the naive baseline. Gradual removal matters.
| r | Imaging Q. | Aesthetic Q. | Dynamic Deg. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|
| 0 | 60.40 | 52.50 | 76.67 | 13.28 | 21.63 |
| 8 | 62.71 | 54.47 | 74.62 | 14.42 | 22.81 |
| 16 | 62.99 | 54.62 | 76.58 | 14.84 | 23.00 |
| 32 | 63.08 | 54.67 | 77.78 | 15.32 | 23.01 |
| 64 | 63.06 | 54.30 | 76.74 | 15.40 | 22.92 |
Guide
This ablation varies the helper's starting rank r, where zero means no helper. Any helper helps: rank 8 already lifts overall consistency from 21.63 to 22.81. Gains flatten around rank 16 to 32, and rank 64 brings nothing more. Rank 32 is chosen, consistent with Figure 4's finding that only a few singular directions matter.
| Decay | Imaging Q. | Aesthetic Q. | Dynamic Deg. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|
| Linear | 60.82 | 52.81 | 73.19 | 13.34 | 21.87 |
| Sparse | 61.15 | 54.06 | 74.24 | 13.86 | 22.52 |
| Sparse w/ Wanda | 61.43 | 54.08 | 74.36 | 13.94 | 22.48 |
| Sparse w/ MaskLLM | 61.36 | 54.12 | 74.82 | 14.15 | 22.57 |
| Res. Q. | 61.72 | 54.01 | 72.41 | 14.17 | 22.31 |
| Rank | 63.08 | 54.67 | 77.78 | 15.32 | 23.01 |
Guide
This table compares ways of removing the helper. Linear simply scales all of it down, sparse variants prune entries, with Wanda and MaskLLM as smarter pruning criteria, and residual quantization peels off quantized layers of it. Rank decay wins on every column, 23.01 overall versus at most 22.57 for the others, while the pruning methods also need 1.8 to 2.1 times the training time. Removing whole weak singular directions is both better and cheaper.
Guide
Two line charts summarise Tables 4 and 5. On the left, overall consistency against the shrinking ratio lambda peaks at one half and falls sharply at one, where the helper is removed in one shot. On the right, against starting rank, the score climbs from 21.63 with no helper and plateaus from rank 16 to 32. Both defaults sit at the sweet spot.
| Model | LSQ days | Q-DM days | EffDM days | QVGen days | LSQ GB/GPU | Q-DM GB/GPU | EffDM GB/GPU | QVGen GB/GPU |
|---|---|---|---|---|---|---|---|---|
| CogVideoX-2B | 8.64 | 9.30 | 8.97 | 9.44 | 62.78 | 67.26 | 44.27 | 67.93 |
| Wan 1.3B | 9.92 | 10.92 | 10.68 | 11.11 | 63.04 | 66.15 | 42.74 | 66.67 |
Guide
Training cost on H100 GPUs for the four training methods on the two small models: GPU-days and memory per GPU. QVGen costs about 9.4 and 11.1 GPU-days, only about two percent more time and one percent more memory than Q-DM. The helper is cheap to train with. Still, around ten GPU-days per small model is far beyond a bachelor thesis project, which the thesis box stresses.
Appendix tables
| Model | GPU-days |
|---|---|
| CogVideoX-2B | 9.44 (+0.14) |
| Wan 1.3B | 11.11 (+0.18) |
| CogVideoX1.5-5B | ~51 |
| Wan 14B | ~182 |
Guide
Total GPU-days of QVGen per model, with the extra cost over plain distillation training in brackets. The small models need about 9 to 11 GPU-days, only 0.14 to 0.18 more than naive training. The large models need about 51 days for CogVideoX five B and about 182 for Wan fourteen B. For a model the size of LTX-2.3, full quantization-aware training is out of reach, which is why the thesis leans on post-training quantization.
| Method | Imaging Q. | Aesthetic Q. | Dynamic Deg. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|
| Full Prec. | 64.30 | 58.21 | 70.28 | 28.05 | 24.67 |
| SVDQuant | 62.05 | 54.37 | 71.08 | 23.25 | 24.56 |
| LSQ | 63.20 | 57.83 | 76.33 | 24.86 | 24.07 |
| Q-DM | 62.89 | 56.24 | 74.64 | 25.38 | 25.12 |
| EfficientDM | 63.38 | 56.42 | 68.68 | 21.47 | 23.57 |
| QVGen | 64.27 | 57.69 | 78.02 | 26.84 | 25.53 |
Guide
A milder setting: six-bit weights and activations on Wan 1.3B. Here every method is close to BF16, and QVGen scores highest on most columns, even slightly above full precision on overall consistency, 25.53 versus 24.67. The point is that QVGen does not only rescue extreme bit widths; it also holds up where the others already work. At six bits the choice of method matters much less.
| Model | Avg ‖g_t‖₂ | #Params (B) |
|---|---|---|
| SD3-medium (image) | 0.2047 | 2.0 |
| CogVideoX-2B (video) | 0.3283 | 2.0 |
Guide
This is the numeric source of the left bars in the problem figure. Both models have two billion parameters and use the same four-bit Q-DM training recipe for two thousand steps. The video model's average gradient norm, 0.3283, is about 1.6 times the image model's 0.2047. That is the paper's evidence that video quantization-aware training is intrinsically harder to converge.
| Training videos | Avg ‖g_t‖₂ | Imaging Q. | Dynamic Deg. |
|---|---|---|---|
| high-motion | 0.1972 | 57.47 | 68.21 |
| low-motion | 0.1768 | 60.63 | 62.54 |
| half + half | 0.1821 | 60.12 | 67.08 |
Guide
This table trains four-bit QVGen on CogVideoX two B with eight thousand clips of high motion, low motion, or half of each. High-motion data gives the largest gradient norm, 0.1972, and the lowest imaging quality, but the highest dynamic degree. The mixed set balances both. Motion makes training harder, which is why the paper uses mixed data.
| Clip | Imaging Q. | Aesthetic Q. | Dynamic Deg. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|
| 1.0 | 60.40 | 52.50 | 76.67 | 13.28 | 21.63 |
| 0.5 | 60.58 | 52.95 | 76.50 | 13.28 | 21.71 |
| 0.1 | 56.68 | 51.06 | 71.00 | 12.78 | 21.42 |
Guide
An obvious alternative to the helper is simply clipping gradients to keep them small. This table tests it on Wan 1.3B at four bits, where a threshold of 1.0 is the Q-DM baseline. Clipping at 0.5 changes almost nothing, and 0.1 makes things worse. So artificially capping gradients is no substitute; the gradient norm has to come down because the model is easier to fit, which is what phi achieves.
| Method | Imaging Q. | Aesthetic Q. | Dynamic Deg. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|
| Full Prec. | 64.30 | 58.21 | 70.28 | 28.05 | 24.67 |
| SVDQuant♣ | 57.57 | 46.30 | 72.22 | 12.73 | 21.91 |
| QVGen | 63.08 | 54.67 | 77.78 | 15.32 | 23.01 |
| QVGen w/ SVDQuant | 63.64 | 56.23 | 77.42 | 17.65 | 23.89 |
| QVGen♡ w/ SVDQuant | 61.38 | 52.76 | 75.85 | 14.12 | 22.47 |
Guide
This table combines QVGen with SVDQuant, the post-training method that keeps a permanent low-rank branch in high precision. SVDQuant alone at four bits reaches 21.91 overall consistency, QVGen alone 23.01, and the two together 23.89, the best. Freezing the diffusion weights and training only the other parts, marked by a heart, loses most of that gain. The two ideas are complementary, though keeping a branch means some inference overhead.
| Method | PSNR↑ | SSIM↑ | LPIPS↓ | PSNR↑ | SSIM↑ | LPIPS↓ |
|---|---|---|---|---|---|---|
| SVDQuant | 11.06 | 0.3829 | 0.6305 | 10.14 | 0.3595 | 0.6907 |
| LSQ | 11.75 | 0.4158 | 0.6187 | 11.65 | 0.4743 | 0.6235 |
| Q-DM | 12.07 | 0.4270 | 0.6240 | 11.22 | 0.4657 | 0.5942 |
| EfficientDM | 11.91 | 0.4387 | 0.6220 | 11.29 | 0.3926 | 0.6232 |
| QVGen | 16.74 | 0.6085 | 0.4127 | 15.94 | 0.5782 | 0.4887 |
Guide
Instead of VBench quality, this table measures how closely the four-bit videos match the BF16 videos from the same seed, using PSNR and SSIM, where higher is better, and LPIPS, where lower is better. QVGen is far ahead on both models, for example a PSNR of 16.74 against about 12 for the baselines on CogVideoX. This fidelity check is cheap and easy to reuse when comparing int8, int4 and mixed-precision LTX variants.
| Method | Imaging Q. | Aesthetic Q. | Dynamic Deg. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|
| Full Prec. | 61.15 | 54.06 | 74.24 | 13.86 | 22.52 |
| Q-DM | 61.72 | 54.01 | 72.41 | 14.17 | 22.31 |
| EfficientDM | 61.72 | 54.01 | 72.41 | 14.17 | 22.31 |
| QVGen | 63.08 | 54.67 | 77.78 | 15.32 | 23.01 |
Guide
Handle this table with caution. It is meant to compare methods at four bits on CogVideoX 1.5 five B, but its rows repeat numbers from the decay-strategy ablation, and two baselines are identical. The tab transcribes it as printed and flags it as a likely typesetting error in the paper, so do not draw conclusions from it.
| u | Imaging Q. | Aesthetic Q. | Motion Smooth. | Dynamic Deg. | Backgr. Cons. | Subject Cons. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|---|---|---|
| Cosine | 63.08 | 54.67 | 98.25 | 77.78 | 94.08 | 92.57 | 15.32 | 23.01 |
| Logarithmic | 63.15 | 54.46 | 98.02 | 77.52 | 93.98 | 92.59 | 14.99 | 22.87 |
| Exponential | 63.04 | 54.48 | 97.88 | 77.81 | 93.96 | 92.56 | 15.32 | 22.66 |
| Square | 63.02 | 54.59 | 98.41 | 77.24 | 94.12 | 92.57 | 15.18 | 22.94 |
| Linear | 63.10 | 54.63 | 98.31 | 77.44 | 94.06 | 92.58 | 15.24 | 22.91 |
Guide
This ablation swaps the curve that fades u from one to zero: cosine, logarithmic, exponential, square or linear. All five land within a fraction of a point of each other, with cosine slightly best on overall consistency at 23.01. The method is robust to this detail; what matters is that the fade is gradual, not its exact shape.
| Init | Imaging Q. | Aesthetic Q. | Dynamic Deg. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|
| CogVideoX-2B | |||||
| W − Q_b(W) | 60.16 | 54.61 | 67.22 | 31.42 | 24.61 |
| Layer-wise train | 59.97 | 54.84 | 66.71 | 31.14 | 25.02 |
| 0 | 59.86 | 54.47 | 65.59 | 31.32 | 24.59 |
| Random | 49.42 | 37.68 | 26.57 | 6.24 | 11.68 |
| Wan 1.3B | |||||
| W − Q_b(W) | 63.08 | 54.67 | 77.78 | 15.32 | 23.01 |
| Layer-wise train | 63.23 | 54.67 | 77.56 | 15.38 | 23.00 |
| 0 | 62.80 | 54.59 | 77.69 | 15.28 | 22.98 |
| Random | 54.41 | 44.14 | 34.44 | 3.13 | 10.17 |
Guide
This table tests how the helper weight is initialised on both small models. Starting from the rounding error W minus its quantized version, or from a layer-wise pre-trained helper, gives the same results. Zero initialisation is only slightly worse. Random initialisation is disastrous, with overall consistency falling to about 11 or 10. A sensible starting point is essential, and the error-based one is free.
| Method | Imaging Q. | Aesthetic Q. | Motion Smooth. | Dynamic Deg. | Backgr. Cons. | Subject Cons. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|---|---|---|
| Naive | 60.40 | 52.50 | 97.22 | 76.67 | 93.37 | 89.26 | 13.28 | 21.63 |
| +Φ | 63.41 | 54.75 | 98.40 | 77.89 | 94.36 | 93.29 | 15.51 | 22.98 |
| +Rank | 63.08 | 54.67 | 98.25 | 77.78 | 94.08 | 92.57 | 15.32 | 23.01 |
| −Decay (r=32, never removed) | 63.32 | 54.64 | 98.34 | 77.79 | 94.15 | 92.61 | 15.40 | 23.03 |
Guide
This is the full eight-column version of the component ablation, with one extra row: minus decay, where the rank-32 helper is kept and never removed. Minus decay scores almost the same as plus phi, so rank 32 captures what a full helper does. Plus rank, which removes it, matches minus decay, 23.01 versus 23.03. Removing the helper is essentially free, so the deployed model loses nothing by shipping without it.
| λ | Imaging Q. | Aesthetic Q. | Motion Smooth. | Dynamic Deg. | Backgr. Cons. | Subject Cons. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|---|---|---|
| 1/4 | 63.02 | 54.23 | 97.89 | 76.84 | 94.02 | 92.13 | 15.18 | 22.85 |
| 1/2 | 63.08 | 54.67 | 98.25 | 77.78 | 94.08 | 92.57 | 15.32 | 23.01 |
| 3/4 | 62.89 | 54.62 | 98.15 | 77.91 | 93.89 | 91.63 | 15.04 | 22.89 |
| 1 | 61.05 | 52.48 | 97.31 | 76.48 | 93.42 | 90.04 | 13.82 | 21.81 |
Guide
The complete shrinking-ratio results across all eight VBench columns. They confirm the short Table 4: lambda of one half is best or tied on most columns, and lambda of one, removing the helper at once, is worst almost everywhere, with subject consistency dropping to 90.04. Gradual halving is the safe choice.
| r | Imaging Q. | Aesthetic Q. | Motion Smooth. | Dynamic Deg. | Backgr. Cons. | Subject Cons. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|---|---|---|
| 0 | 60.40 | 52.50 | 97.22 | 76.67 | 93.37 | 89.26 | 13.28 | 21.63 |
| 8 | 62.71 | 54.47 | 97.95 | 74.62 | 93.76 | 91.05 | 14.42 | 22.81 |
| 16 | 62.99 | 54.62 | 98.31 | 76.58 | 93.92 | 91.82 | 14.84 | 23.00 |
| 32 | 63.08 | 54.67 | 98.25 | 77.78 | 94.08 | 92.57 | 15.32 | 23.01 |
| 64 | 63.06 | 54.30 | 98.18 | 76.74 | 94.01 | 91.49 | 15.40 | 22.92 |
Guide
The complete initial-rank results across all eight columns. Rank 32 is best or near best everywhere; rank 64 matches on scene consistency but slips elsewhere, and the no-helper row, rank zero, is clearly worst. It backs the short Table 5: a modest rank is enough because the helper's useful information is concentrated in a few directions.
| Decay | Imaging Q. | Aesthetic Q. | Motion Smooth. | Dynamic Deg. | Backgr. Cons. | Subject Cons. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|---|---|---|
| Sparse | 61.15 | 54.06 | 97.45 | 74.24 | 93.32 | 90.63 | 13.86 | 22.52 |
| Res. Q. | 61.72 | 54.01 | 97.62 | 72.41 | 93.46 | 91.24 | 14.17 | 22.31 |
| Rank | 63.08 | 54.67 | 98.25 | 77.78 | 94.08 | 92.57 | 15.32 | 23.01 |
Guide
The complete decay-strategy comparison across all eight columns, for sparse pruning, residual quantization and rank decay. Rank decay leads on every column. The caption adds the cost side: sparse needs 1.81 times and residual quantization 2.60 times the GPU-days of rank decay. It is both better and cheaper.
| γ | Imaging Q. | Aesthetic Q. | Motion Smooth. | Dynamic Deg. | Backgr. Cons. | Subject Cons. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|---|---|---|
| concat([1], [u]) — fade smallest σ (ours) | 63.08 | 54.67 | 98.25 | 77.78 | 94.08 | 92.57 | 15.32 | 23.01 |
| Random ×3 | 60.96±0.41 | 53.13±0.67 | 97.40±0.24 | 76.45±0.08 | 93.40±0.03 | 90.76±0.30 | 13.77±0.22 | 21.92±0.51 |
| concat([u], [1]) — fade largest σ | 60.56 | 52.61 | 97.28 | 75.36 | 93.35 | 89.47 | 13.46 | 22.24 |
Guide
This ablation asks which helper components should be faded. Fading the smallest singular directions, the paper's choice, gives 23.01 overall consistency. Fading random directions, averaged over three runs, gives about 21.9, and fading the largest directions gives 22.24. The ordering from the SVD matters: dropping the weakest directions first lets the model absorb their loss gently.
| Epochs | Imaging Q. | Aesthetic Q. | Dynamic Deg. | Scene Cons. | Overall Cons. |
|---|---|---|---|---|---|
| 3/4 | 63.08 | 54.67 | 77.78 | 15.32 | 23.01 |
| 1 | 63.07 | 55.09 | 77.54 | 15.29 | 23.03 |
| 3/2 | 63.11 | 54.58 | 78.15 | 15.36 | 23.01 |
Guide
This table varies how long each decay phase lasts, from three quarters of an epoch to one and a half epochs, on Wan 1.3B at four bits. All three settings score within a few hundredths of each other. The schedule is not sensitive to phase length, so the shortest option, three quarters of an epoch, is kept as the cheapest.
| Method | FID↓ | CLIP↑ | GenEval↑ |
|---|---|---|---|
| Full Prec. | 11.92 | 27.83 | 0.62 |
| LSQ | 14.87 | 27.72 | 0.56 |
| EfficientDM | 15.23 | 27.11 | 0.61 |
| Q-DM | 13.82 | 27.68 | 0.59 |
| QVGen | 12.24 | 27.85 | 0.61 |
Guide
QVGen applied to an image model, SD3-medium, at four bits, scored with FID, where lower is better, CLIP score and GenEval. QVGen reaches an FID of 12.24 against 11.92 for full precision, clearly better than the baselines at 13.8 to 15.2, while matching on CLIP and GenEval. The method is not video-specific; it generalises to image diffusion transformers.
| Op | (M, N, K) | Quant | INT4GEMM | DeQuant | Total | Quant % | GEMM % | DeQ % | TOPS |
|---|---|---|---|---|---|---|---|---|---|
| q1/k1/v1/o1/q2/o2 | (32760, 1536, 1536) | 0.041 | 0.186 | 0.114 | 0.341 | 12.0 | 54.5 | 33.5 | 831.08 |
| k2/v2 | (512, 1536, 1536) | 0.001 | 0.007 | 0.002 | 0.010 | 11.2 | 72.3 | 16.5 | 345.13 |
| up proj | (32760, 8960, 1536) | 0.041 | 1.246 | 0.661 | 1.948 | 2.10 | 64.0 | 33.9 | 721.76 |
| down proj | (32760, 1536, 8960) | 0.232 | 1.031 | 0.117 | 1.380 | 16.8 | 74.7 | 8.48 | 872.27 |
Guide
This profiles each quantized linear layer shape of Wan 1.3B on an A800: time for quantizing activations, the INT4 matrix multiply, and dequantizing, plus the achieved throughput. Quantize and dequantize together take roughly a quarter to nearly half of each operation's time because they are not fused into the multiply. This overhead explains why the end-to-end speed-up in Figure 6 is modest, and equation V projects what fusion could gain.
| Component | ms | % |
|---|---|---|
| Attention | 32.08 | 51.8 |
| Linear projections | 15.14 | 24.5 |
| Other | 14.64 | 23.7 |
Guide
The time breakdown of one Wan 1.3B transformer block in PyTorch on an A800. Attention takes 51.8 percent, linear projections 24.5 percent, and everything else 23.7 percent. Since QVGen only quantizes the linear layers, at most about a quarter of the block's time can speed up. For LTX-2.3 on Intel hardware, it is a reminder that attention, not the linears, often dominates, so caching or sparse attention may matter more.
| Linear | ms |
|---|---|
| q1/k1/v1/o1/q2/o2 | 0.977 |
| k2/v2 | 0.038 |
| up proj | 5.283 |
| down proj | 3.913 |
Guide
The linear-projection share from Table S, split by layer type in milliseconds. The feed-forward up and down projections dominate, at about 5.3 and 3.9 milliseconds, while the attention projections are under one millisecond and the cross-attention key and value projections almost free. If only some layers get the most aggressive compression, the feed-forward layers are where it pays off.
| Attention | ms |
|---|---|
| Self-Attention | 31.48 |
| Cross-Attention | 0.597 |
Guide
The attention share from Table S, split in milliseconds. Self-attention over the long video token sequence takes about 31.5 milliseconds, while cross-attention to the text is about 0.6. Self-attention is the single biggest cost in the block, and quantizing linear layers does nothing for it. That is why the paper pairs quantization with sparse attention.
App. O: with SVG sparse attention (self-attn 31.48 → 18.23 ms, 1.73×) and fused “other” ops (14.64 → 2.62 ms, 5.59×), linear layers become 41.38% of block time; W4A4 speeds them up 2.52× (15.14 → 5.991 ms).
§8Why it matters for this thesis
LTX-2.3 on OpenVINO / NNCF
- Out of scope, but a lower bound. QVGen is full QAT (≈11 H100 GPU-days for 1.3B, ~182 for Wan 14B, with 16K training videos). A bachelor thesis cannot do this for LTX-2.3. What it does give is a reference point: even with training, W4A4 is the limit, and W3A3 fails on large models (Tab. 2, Figs. E–F). PTQ on CPU/Arc should not aim below 4-bit weights.
- Weight-only is the safe route. Fig. B shows W4A16 stays close to BF16 while W16A4 destroys the video. This supports NNCF
compress_weights(INT8 / INT4_ASYM, group-wise) with activations kept in FP16/BF16, or at most INT8. - Same number format as OpenVINO. Eq. (4) is plain asymmetric uniform min-max quantization with scale and zero-point, so no custom ops are needed. The low-rank error-compensation idea (WΦ = W − Q(W), rank 32) is close to NNCF’s data-aware INT4 options (e.g.
lora_correction, AWQ/scale estimation). These need a small calibration set of LTX prompts or latents. - Keep speed-up expectations realistic. Linear layers are only 24.5% of Wan-block time and attention is 51.8% (Tab. S). Even a real W4A4 kernel gives only 1.21–1.44× end-to-end. On Intel, weight-only INT4 mainly cuts memory and bandwidth. Wall-clock gains will need caching or sparse attention as well (Fig. 6c).
- Reusable evaluation protocol. The paper uses 8 VBench dimensions plus PSNR/SSIM/LPIPS against BF16 outputs from the same seed (Tab. G). This is cheap to replicate on a small prompt set to compare int8, int4 and mixed-precision LTX variants.
Guide
Treat QVGen as a boundary, not a recipe. Full training costs 11 to 182 GPU-days, so for LTX-2.3 use post-training compression and do not aim below four-bit weights. Use NNCF weight-only compression, INT8 or group-wise INT4 asymmetric, with activations in FP16 or at most INT8, since Figure B shows four-bit activations destroy video. Try data-aware options like LoRA correction or AWQ with a small calibration set, expect memory savings more than speed, and reuse its VBench plus PSNR, SSIM and LPIPS protocol.
Timestep-Aware SVDQuant-GPTQ for W4A4 Quantization of Wan2.2-I2V
This paper quantizes a 14B-per-expert video diffusion transformer (Wan2.2 image-to-video) to 4-bit weights and 4-bit activations. It combines three known tools: an SVDQuant low-rank branch that soaks up outliers, GPTQ rounding for the 4-bit residual weights, and a per-layer activation clipping ratio that is looked up by timestep bin, searched separately for each of the two MoE experts. The result is 59% less memory for a 0.9% drop in VBench score, but no speed-up, because the H100 had no native FP4 kernel for it.
- Model
- Wan2.2-I2V-A14B
- Precision
- W4A4 (MXFP4)
- Peak memory
- 64.4 → 26.2 GB
- VBench avg.
- 0.806 → 0.799
- Latency (H100)
- 520.7 → 955.1 s
- Benchmark
- OpenS2V-Eval, 180 clips
Reading guide
Can a fourteen billion parameter per expert video diffusion transformer, Wan 2.2 image to video, run with four bit weights and four bit activations, called W four A four, without retraining? The answer is yes for quality and memory: combining an SVDQuant low-rank branch, GPTQ rounding and a clip ratio looked up per timestep bin cuts peak memory by 59 percent for a VBench drop of under one percent, but it runs 1.8 times slower because the H100 had no fused FP4 kernel. The tab moves from the big picture, to the three problems of outliers, timestep drift and two experts, then the method, every equation, every figure, the results tables and a thesis box. Among the sixteen papers it is the last of the diffusion quantization group, after QVGen, stitching GPTQ, SVDQuant and timestep-aware calibration together on a large video model, which makes it the closest analogue to the LTX-2.3 project.
§0Before reading
This paper takes a very large image-to-video model whose denoiser is split into two experts, and squeezes both weights and activations to four bits in the MXFP4 format. Following it takes three ideas: how the two experts share the denoising steps, what a four-bit block format looks like, and why saving memory does not automatically save time. It is in the atlas because it is the closest published analogue to the LTX-2.3 project: a big video transformer, compressed after training, with timestep-aware calibration.
Guide
Wan two point two does not use one denoiser but two. The high-noise expert runs the early, very noisy steps, where layout and motion are decided, and then hands over to the low-noise expert, which refines texture and detail. The gold line is the denoising timeline, and the dashed line marks the switch. Only one expert of about fourteen billion parameters runs at a time, but the two behave differently, so the paper calibrates each expert on its own.
Guide
W four A four means both weights and activations are stored in four bits. In the MXFP4 format, every block of thirty two numbers shares one power of two scale, and each number has only sixteen possible codes, dense near zero and sparse far out. The magenta outlier forces a large shared scale, so its neighbours collapse onto a few small codes. The paper's outlier branch and clipping exist to limit exactly this damage.
Guide
Saving memory is not the same as saving time. A kernel is the routine that performs one operation, such as a matrix multiply. The top row is this paper on the H100, which has no native four bit math: it stores four bit numbers, converts them back to BF16, then multiplies, so each step gets slower. The bottom row is a fused kernel working on low bit data directly, as OpenVINO offers for INT4 and INT8 weights.
Guide
This paper closes the diffusion quantization group of the atlas. QVGen, just before it, reached four bit video models by retraining. This paper gets to four bits with no training at all, by stacking GPTQ for careful rounding and SVDQuant for outliers, and it adds clipping ratios chosen per timestep bin and per expert. Its missing speed-up is exactly why the next group, starting with FlashAttention-2, is about fast kernels.
Terms used in this paper
- Image-to-video (I2V)
- Generating a video that starts from a given image, usually together with a text prompt, instead of from text alone.
- Wan2.2-I2V-A14B
- An open-source image-to-video model from Alibaba. "A14B" means about 14 billion parameters are active at each step.
- Mixture-of-Experts (MoE)
- A model with several sub-networks ("experts") where only one or a few run for a given input. In Wan2.2 the expert is chosen by the denoising step.
- High-noise / low-noise expert
- Wan2.2's two denoisers: the first handles the early, very noisy steps, the second the late steps. The paper finds the low-noise expert more fragile under quantization.
- Timestep bin
- A small group of consecutive denoising steps treated alike. The paper stores one activation scale per layer and bin, instead of one for all 40 steps.
- W4A4
- Weights and activations both in 4 bits. Much harder than weight-only W4A16, because activations change with every input and step.
- MXFP4
- A "microscaling" 4-bit floating-point format: blocks of 32 values share one power-of-two scale, and each value has only 16 possible codes.
- BF16
- 16-bit "brain float", the usual full-precision format for large models and the reference every quantized result is compared against.
- Clipping ratio \(\rho\)
- A factor below 1 that shrinks the activation range before quantizing. Rare large values get cut off, and the common values get finer steps.
- Low-rank branch (SVDQuant)
- A thin 16-bit matrix pair, found with the SVD, that keeps the hardest part of each weight in high precision while the rest goes to 4 bits.
- GPTQ
- A weight-rounding method that uses a little calibration data to round weights so the layer's output error stays small, instead of simple round-to-nearest (RTN).
- Pseudo-quantization
- Storing low-bit numbers but converting them back to 16-bit before the math. It saves memory and shows the quality effect, but gives no speed-up.
- NVIDIA H100
- A data-centre GPU (Hopper generation) whose Tensor Cores support FP16, BF16, FP8 and INT8 but not FP4, so the paper could not run 4-bit math natively.
- OpenS2V-Eval and VBench
- OpenS2V-Eval is the test set here: 180 image-to-video cases. VBench is the scoring protocol, with scores such as Imaging Quality, Subject Consistency and Motion Smoothness.
Guide
These fourteen terms are the vocabulary the paper takes for granted. The most important are the mixture of experts, meaning Wan two point two's two denoisers; the timestep bin, a group of steps that shares one activation scale; MXFP4, the four bit block format; and pseudo-quantization, which saves memory but not time. Keep this list open while reading the method and results sections of the tab.
§1Big picture
Guide
Three known tools are stacked on every linear layer, and only one of them touches inference. Read the top lane as offline work done once: smooth the weight, split it into a sixteen bit low-rank part and a four bit GPTQ residual, then search a clip ratio rho for every expert, layer and timestep bin. The bottom lane is each denoising step, where the step number picks a bin and a lookup table supplies the activation scale. Everything later in the tab zooms into one of these boxes.
SVDQuant deals with outliers, GPTQ deals with the rounding of the residual weights, and the timestep lookup table deals with activation ranges that drift over time. Because Wan2.2 swaps from a high-noise expert to a low-noise expert partway through sampling, the search runs once per expert.
§2The problem
Guide
Four bits give only sixteen levels, so one extreme channel decides the step size for everyone. The grid spans plus or minus alpha to cover the outlier, and the bulk of normal values ends up sharing just two or three codes. This is the first problem the paper names, and it is the reason for the smoothing and low-rank branch in equations five and six.
Guide
The activation range shrinks as denoising proceeds, so no single clipping threshold fits every step. The flat line is one global alpha: it over-clips the wide early steps and wastes levels on the narrow late ones. The indigo staircase is a separate alpha per timestep bin, which tracks the drift. This is the second problem, and it motivates the per-bin clip search in equations eight to ten.
Guide
Wan 2.2 has two experts, and the low-noise one that paints texture is more fragile than the high-noise one that sets layout. The bars compare peak cosine error in the attention output projection, roughly 0.0065 against 0.011, read approximately from Figure 4. The third problem follows: one calibration policy for both experts ignores this gap, so the paper searches clip ratios separately per expert.
- At 4-bit, activations are the weak link. They depend on the input, so their outliers cannot be fixed offline the way weight outliers can.
- Wan2.2 activations are non-stationary across the 40 steps (Fig. 1), so a single scale either over-clips early steps or blurs late ones.
- The MoE split of Wan2.2 (a high-noise expert, then a low-noise expert) makes the two experts' statistics differ.
- Plain RTN W4A4 drops Imaging Quality from 0.705 to 0.389 (Table I).
§3Method
- Smooth each linear layer: divide activation channels by \(D_l\) and multiply the weight by it (Eq. 5). This moves outlier magnitude onto the static weight.
- SVD split the smoothed weight into a low-rank part \(L_1^lL_2^l\), kept in high precision, plus a residual \(R_l\) (Eq. 6).
- GPTQ the residual to 4-bit, using second-order (Hessian) information and calibration activations instead of round-to-nearest. This gives \(\hat R_l^{\text{GPTQ}}\) (Eq. 7).
- Bin the trajectory: split the denoising steps into a few timestep bins \(B_k\), separately for each expert (e.g. high_early, high_mid, boundary_pre / low_mid, low_late, boundary_post in Fig. 3).
- Search ρ for every (layer, bin): threshold \(\alpha=\rho\,m_{l,k}\) (Eq. 8), scale \(s=\alpha/q_{\max}\) (Eq. 9). Keep the ρ with the smallest output MSE against BF16 on calibration samples (Eq. 10).
- Infer: map the current \(t\) to its bin, fetch \(s^A_{l,k}\) and run Eq. 11. No online search is needed.
Guide
The method runs in two phases. Offline, each layer is first smoothed so activation outliers move into the weight, then the weight is split into a high precision low-rank part and a residual, and that residual is rounded to four bits with GPTQ instead of plain rounding. Next the denoising trajectory is cut into a few bins per expert, and for every layer and bin a clip ratio is chosen by comparing outputs against BF16. At inference the current step simply picks its bin and fetches the stored scale.
Guide
The clip ratio is found by brute-force grid search, not by training. For one layer and one bin, calibration samples go through the BF16 layer as a reference, then through the fully quantized layer once per candidate rho, and the rho with the smallest squared output error is written to the table. In the reported model almost every choice lands on 0.8 or 0.9. The paper has no algorithm box, so this loop is drawn from its section three C.
Guide
The procedure is a loop over the two experts, then over their layers. For each layer the weight work happens once: smooth, split by SVD, and round the residual with GPTQ. Only then does the inner loop over timestep bins run, measuring a reference activation magnitude and picking the best clip ratio, which becomes a stored scale. The final line is inference, where the bin lookup and equation eleven are all that remain. This listing is transcribed from the text, since the paper gives no algorithm box.
§4Every equation
Full-precision linear layer: \(N\) tokens, \(C_{\text{in}}\)/\(C_{\text{out}}\) channels (q, k, v, o, gate, FFN …).
Guide
The starting point is an ordinary linear layer. Y equals X times W, where X holds N tokens with C in input channels, and W maps those to C out output channels. Every projection in the transformer, the query, key, value and output projections and the feed-forward layers, has this form, so it is the object all later equations quantize.
W4A4: both activation quantizer \(Q_A\) and weight quantizer \(Q_W\) are 4-bit; PTQ must keep \(\hat Y\approx Y\) on calibration data without retraining.
Guide
Quantized inference replaces both factors with four bit versions. Y hat is Q A of X times Q W of W, where Q A is the activation quantizer and Q W the weight quantizer. The goal of post-training quantization is to keep Y hat close to Y on calibration data without any retraining. The rest of the method is about making these two quantizers lose as little as possible.
Uniform quantize-dequantize: scale \(s\), zero-point \(z_0\), integer range \([q_{\min},q_{\max}]\), \(\lfloor\cdot\rceil\) = round to nearest. (Experiments actually use MXFP4, a block-scaled FP4 format.)
Guide
This is the basic quantize then dequantize step. Divide the value z by the scale s, round to the nearest integer, add the zero point z zero, clip to the integer range from q min to q max, then subtract the zero point and multiply back by s. Rounding and clipping are the two sources of error. The experiments actually use MXFP4, a block-scaled four bit float format, but the idea is the same.
Symmetric case (\(z_0=0\)): the clipping threshold \(\alpha\) fixes the step size. Too small over-clips, too large wastes resolution.
Guide
With a symmetric grid and zero point zero, the step size is set by one number. The scale s equals the clipping threshold alpha divided by q max. Choosing alpha is the whole trade-off: too small and large values get clipped, too large and the sixteen levels are spread thin. Equations eight and nine turn this choice into something searched per layer and per timestep bin.
Channel-wise smoothing with diagonal \(D_l\): shrinks activation outlier channels and moves their magnitude into the weight. The output is mathematically unchanged.
Guide
Smoothing is a free rearrangement. X l times W l equals X l times D l inverse, times D l times W l, where D l is a diagonal matrix of per-channel factors. Dividing the activations by D l shrinks outlier channels, and multiplying the weight by it moves that magnitude into the static weight. The output is mathematically unchanged; only where the difficulty lives has moved, and that fix is the SmoothQuant idea.
SVDQuant split: low-rank branch \(L_1^lL_2^l\) (high precision, holds outlier directions) + residual \(R_l\) (to be 4-bit).
Guide
The smoothed weight is then split in two. W hat l equals L one times L two, a low-rank product, plus a residual R l. The low-rank branch is kept in sixteen bits and captures the dominant outlier directions, so the residual that must go to four bits is much tamer. This is the SVDQuant decomposition, and it answers the outlier problem shown in the first problem figure.
Final layer: the 16-bit low-rank path sees unquantized \(\hat X_l\); the residual path uses a 4-bit activation and GPTQ-rounded 4-bit weights.
Guide
This is the finished quantized layer. Y hat l is X hat l times the low-rank branch, plus the four bit quantized X hat l times R hat l GPTQ. The low-rank path sees unquantized activations and sixteen bit weights, while the residual path runs on four bit activations and four bit weights rounded with GPTQ, which uses second order information to compensate rounding error. The timestep-aware part will only change the activation quantizer in the second term.
Clip threshold for layer \(l\), timestep bin \(k\): candidate ratio \(\rho\) times the reference activation magnitude \(m_{l,k}\) from calibration.
Guide
The clip threshold is expressed as a fraction of a measured size. Alpha for layer l and bin k equals rho times m l k, where m l k is a reference activation magnitude recorded on calibration data in that bin, and rho is a candidate ratio such as 0.8 or 0.9. Searching over rho rather than alpha makes one small candidate set work for every layer.
The corresponding activation scale (Eq. 4 applied per layer and bin).
Guide
Each candidate threshold becomes an activation scale. The scale s A for layer l and bin k is alpha divided by q max, which is just equation four applied separately to every layer and timestep bin. These are the numbers that end up in the lookup table used at inference.
Search objective: over candidate set \(\mathcal R\), minimise the expected output MSE of the SVDQuant-GPTQ layer vs. BF16 across steps in bin \(B_k\).
Guide
The search objective picks the best ratio. Rho star for layer l and bin k is the rho from the candidate set that minimises the expected squared difference between the BF16 output Y l of t and the quantized output Y hat l of t, averaged over the steps t in bin B k. Because the full SVDQuant-GPTQ layer is inside the loss, the chosen clip accounts for the weight error too.
Inference: the current step selects bin \(k\), and its precomputed scale is fetched from a lookup table, so runtime overhead is negligible.
Guide
At inference the layer is equation seven with one change. The activation quantizer now uses the stored scale s A for the bin k that contains the current step t. Finding k and fetching the scale is a table lookup, so the timestep awareness adds almost no runtime cost. This is the bottom lane of the big picture diagram.
Unnumbered: the generation setting used for all methods (height × width × frames).
Guide
All methods generate videos of the same size: 720 by 1280 pixels and 61 frames. This fixes the workload behind every quality and efficiency number in the results tables, so memory and latency comparisons are like for like.
Headline savings, computed from Table II.
Guide
The headline savings come straight from Table II. Peak memory drops from 64.4 to 26.2 gigabytes, a 59.3 percent cut, and model size from 64.0 to 25.9 gigabytes, a 59.5 percent cut. Notice this is well short of the four times one might expect from sixteen to four bits. The paper does not break this down, but the likely reasons are the sixteen bit low-rank branches, the block scales and any layers left unquantized.
§5Every figure
Guide
Activation ranges drift across denoising, which is the evidence for the timestep problem. The heatmap shows the log two absolute maximum of each of about 5120 channels in one feed-forward layer, across 40 steps. Early steps are brighter and wider; later steps are smaller, with a few sparse channels still spiking to about four. The shape is redrawn from the paper's 3D surface and the cell values are illustrative.
Guide
The paper's overview has two halves. In calibration, each sensitive layer's weight is split into a four bit main part and a sixteen bit low-rank part, and the trajectory is cut into early, middle and late bins with a clip ratio searched for every layer and bin. In inference, the latent and timestep pass through blocks zero to thirty nine using that precomputed table. The ratios in the table are illustrative, not measured.
Guide
The chosen clip ratios barely vary, which tempers the timestep story. Each bar is one timestep bin, split by the share of modules choosing rho of 0.8 or 0.9. Around 88 to 94 percent pick 0.8 everywhere; the high-noise expert shifts slightly toward 0.9 near the expert boundary. So the per-bin search makes small adjustments, consistent with its modest gain in Table I. Percentages are read from bars and are approximate.
Guide
Quantization error depends on the module type, not on which block it sits in. Rows are the ten linear module types, columns are groups of five blocks, and darker means higher cosine error. The attention output projection and the feed-forward down projection, outlined, are worst in both experts, while query, key and cross-attention output are robust. This sensitivity map is what motivates the Ours dagger run and the thesis box's mixed-precision advice.
Guide
Four bit weights and activations keep the video recognisable. Five frames from one sample show a man with a bouquet as the camera pulls back to a stage. W4A16 looks like BF16, while W four A four smooths texture slightly on the face and flower edges but keeps identity, pose and layout with no collapse. Imaging quality reads 0.769, 0.767 and 0.759, matching the small losses in Table I.
§6Results
| Method | W | A | TS-Clip | VBench Avg. | Imaging Q. | Subject Cons. | Motion Smooth. |
|---|---|---|---|---|---|---|---|
| BF16 baseline | BF16 | BF16 | – | 0.806 | 0.705 | 0.739 | 0.975 |
| RTN | 4-bit | 4-bit | ✗ | 0.733 | 0.389 | 0.861* | 0.949 |
| SVDQuant + RTN | 4-bit | 4-bit | ✗ | 0.783 | 0.671 | 0.705 | 0.974 |
| SVDQuant + GPTQ | 4-bit | 4-bit | ✗ | 0.793 | 0.684 | 0.722 | 0.974 |
| Ours | 4-bit | 4-bit | ✓ | 0.799 | 0.689 | 0.733 | 0.975 |
| Ours† | 4-bit | 4-bit | – | 0.803 | 0.696 | 0.738 | 0.975 |
Guide
The main quality table climbs row by row toward BF16. Plain round-to-nearest W4A4 falls to a VBench average of 0.733 and an imaging quality of 0.389. Adding SVDQuant, then GPTQ, then timestep clipping raises the average to 0.783, 0.793 and 0.799, against 0.806 for BF16. The last row keeps two sensitive module types in higher precision and reaches 0.803. The starred subject consistency for RTN beats BF16, probably because near-static or blurred output looks consistent, not a real gain.
*The paper bolds "Ours" as best. RTN's 0.861 Subject Consistency is above BF16, which is probably an artifact of near-static or blurred output that looks "consistent", not a real gain.
| Method | Model size (GB) | Peak memory (GB) | Latency (s) | Throughput (FPS) |
|---|---|---|---|---|
| BF16 | 64.0 | 64.4 | 520.7 | 0.117 |
| W4A16 | 26.4 | 26.8 | 534.5 | 0.114 |
| Ours (W4A4) | 25.9 | 26.2 | 955.1 | 0.064 |
Guide
Efficiency tells a split story. Model size and peak memory drop from about 64 gigabytes to about 26 for both W4A16 and the full W4A4 method. Latency, however, rises from 520.7 seconds to 955.1 per video for W4A4, because the four bit values are dequantized in Python before a BF16 matrix multiply with no fused kernel. W4A16 gets nearly all the memory gain at almost BF16 speed.
Guide
Each ingredient adds a visible step in VBench average: round-to-nearest 0.733, plus SVDQuant 0.783, plus GPTQ 0.793, plus timestep clipping 0.799, with BF16 at 0.806. The axis starts at 0.70, so the bars exaggerate the differences; the whole gap from worst to BF16 is only 0.073. SVDQuant contributes the largest jump, and timestep clipping the smallest.
Guide
SVDQuant does most of the rescue on imaging quality. Plain round-to-nearest W4A4 nearly halves it, from 0.705 to 0.389. The low-rank outlier branch brings it back to 0.671, while GPTQ adds 0.013 and timestep clipping another 0.005. Here the axis starts at zero, so the RTN collapse is shown at true scale.
Guide
Memory and speed move in opposite directions. The left panel shows model size and peak memory falling by about 59 percent for both four bit variants; the right panel shows latency per video rising from about 521 to 955 seconds for W4A4, roughly 1.8 times slower. The cause is simulated quantization without a fused FP4 kernel. The lesson is that fewer bits do not mean faster inference unless the hardware kernels exist.
| Aspect | Wan2.2-I2V-A14B | LTX-2.3 |
|---|---|---|
| Architecture | DiT, 2-expert MoE (high/low noise), 40 blocks | single DiT, video + audio streams |
| Transformer params | 2 × ~14B (only one active per step) | ~14B video + ~5B audio (~19B, all active) |
| Task | image → video, 720×1280×61 | text/image → video + audio |
| BF16 footprint | 64.0 GB model, 64.4 GB peak (as reported) | ~38 GB for the transformer weights alone at BF16 |
| Quantization here | W4A4 MXFP4, H100 pseudo-quant | thesis: INT8/INT4 weight-only via NNCF on CPU / Arc |
| Reported quality loss | VBench avg −0.9%, Imaging Q. −2.3% | to be measured (e.g. VBench subset, CLIP / FVD, audio metrics) |
Guide
Wan 2.2 and LTX-2.3 are similar in scale but differ in how much runs at once. Wan has two experts of about fourteen billion parameters with only one active per step, while LTX-2.3 runs roughly fourteen billion video and five billion audio parameters together. The paper does W4A4 on an H100; the thesis targets INT8 and INT4 weight-only compression through NNCF on CPU and Arc. The LTX figures come from the thesis brief, and its quality loss is still to be measured.
§7Why it matters for this thesis
Closest analogue to the LTX-2.3 project: a large video DiT, PTQ only, with timestep-aware calibration
- Take the sensitivity map, not the W4A4 recipe. Here self_attn.o (attention output projection) and ffn.2 (FFN down projection) carry most of the 4-bit error, and keeping only those in higher precision (Ours†) recovers almost all quality (0.803 vs 0.806). For LTX-2.3 in NNCF, a natural first experiment is INT4 weights everywhere except the
attn.to_out/ FFN down-projection layers, which stay at INT8. Useignored_scopeor a mixed-precisionratio/ sensitivity metric innncf.compress_weights, then check whether LTX shows the same pattern. - GPTQ and low-rank correction exist in NNCF, but only for weights.
nncf.compress_weights(..., dataset=..., gptq=True)and the data-aware options (AWQ, scale estimation,lora_correction) are the OpenVINO counterparts of "GPTQ residual + low-rank branch". They need calibration data, which means capturing transformer inputs from real LTX sampling runs across all timesteps. No custom kernels are needed. - Timestep bins only matter if activations are quantized. In the thesis's weight-only INT8/INT4 setting, activations stay FP16/FP32 (or use OpenVINO's CPU dynamic per-token quantization), so the clip-ratio lookup table is not needed. It becomes relevant only for a static W8A8 attempt. There the lesson is to calibrate with samples drawn from every step (LTX distilled uses few steps, so few bins), because one static scale per layer in an OpenVINO IR cannot switch with
tunless the graph is split. - Memory ≠ speed. This paper saves 59% memory but runs 1.8× slower because it has no fused low-bit kernel. OpenVINO already ships fused INT4/INT8 weight-decompression matmuls for CPU and Arc GPU, so the thesis should report memory and wall-clock time per step on real hardware, and not claim speed-ups from model size alone.
- Scale sanity check. Wan2.2 activates one ~14B expert per step. LTX-2.3 runs its ~14B video and ~5B audio streams together, so about 19B parameters are live. The W4A16 row (64 → 26.4 GB) shows that 4-bit weight-only compression alone gives roughly a 2.4× footprint cut for a whole pipeline. That is a realistic target for INT4 LTX-2.3, which should end up around 10–12 GB of transformer weights with some INT8 layers.
Guide
Borrow the sensitivity map, not the W4A4 recipe. A first NNCF experiment is INT4 weights everywhere except the attention output and feed-forward down projections, kept at INT8 through an ignored scope or a mixed-precision setting in compress weights, then check whether LTX shows the same pattern. GPTQ, AWQ and LoRA correction in NNCF are the weight-only counterparts and need calibration inputs captured from every timestep. Skip the clip lookup table unless static W8A8 is tried, and report real memory and time per step, since memory savings are not speed.
FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning
Attention is slow mostly because of memory traffic, not arithmetic: the N×N score matrix is written to and read back from slow GPU memory. FlashAttention computes the exact same result tile by tile in fast on-chip memory using an “online softmax”; FlashAttention-2 reorganises the loops and the GPU work split so that the chip spends most of its time in fast matrix multiplies, doubling speed again.
- Output
- Exact (no approx.)
- Extra memory
- O(N) instead of O(N²)
- vs FlashAttention
- ≈2× (1.7–3.0×)
- Forward, A100
- up to 230 TFLOPs/s (73%)
- Backward, A100
- up to 63% of peak
- GPT training
- 225 TFLOPs/s/GPU (72% MFU)
Reading guide
Why is attention so slow on a GPU, and how close can it get to the speed of a plain matrix multiply? Tri Dao's answer is that attention is limited by memory traffic and by poor work splitting, not by arithmetic, and that reorganising the loops of FlashAttention roughly doubles its speed again while giving exactly the same output. The tab opens with the big picture of data movement, then the hardware problem, then the method: the swapped loops, the online softmax, and the new split of work across thread blocks and warps. After that come every equation, every figure from the paper, the benchmark results, and a thesis box. Among the sixteen papers, this one sits in the acceleration group with DeepCache and TeaCache. It speeds up attention without touching any weights, so it complements the quantization papers from GPTQ to SVDQuant rather than competing with them.
§0Before reading
This paper is not about compression at all: it makes attention faster by changing how data moves inside a GPU, while the result stays exactly the same. Following it takes three things: what attention and softmax compute, why the N×N score matrix is the expensive part, and a rough picture of a GPU (threads, warps, thread blocks, SMs, fast SRAM versus slow HBM). It is in the atlas because in a video transformer like LTX-2.3 attention over thousands of tokens can dominate each step, and weight quantization cannot speed it up.
Guide
Attention is two matrix multiplies with a softmax in between. Queries times keys gives a score matrix S with one number for every pair of tokens, softmax turns it into weights P, and P times V gives the output. The teal matrices grow with the number of tokens, but S and P grow with its square. For a video with thousands of tokens, storing S and P is the real cost that FlashAttention removes.
Guide
Softmax turns a row of scores into weights that add up to one. The largest score is subtracted, the exponential taken, and the result divided by the sum, as the top row works through for three numbers. The bottom row shows the online version: process one block, keep a running maximum and sum, and shrink the old sum when a bigger maximum arrives. The result is exactly the same, so the full row never has to sit in memory.
Guide
A GPU is organised in layers. Thirty two threads form a warp that runs the same instruction together, a few warps form a thread block, and each thread block runs on one streaming multiprocessor, or SM, with its own small, fast SRAM. All SMs share the big, slow HBM. FlashAttention keeps work in SRAM, and FlashAttention-2 splits the work across blocks and warps so every SM stays busy. On Intel Arc, Xe-cores play the SM role.
Guide
FlashAttention-2 is the first acceleration paper, right after ten quantization papers that ended with SVDQuant-GPTQ for Wan2.2. Quantization makes numbers smaller; this paper instead reduces how much data moves through memory during attention, and changes no output value at all. Attention has no weights, so NNCF weight compression cannot speed it up, which is exactly the gap this fills. Next come DeepCache and TeaCache, which skip work that repeats across denoising steps.
Terms used in this paper
- Attention (Q, K, V)
- Each token makes a query, a key and a value. Queries are compared with all keys, and the resulting weights average the values into the output O.
- Sequence length N, head dimension d
- N is the number of tokens attending to each other; d is the length of each query or key vector in one head (64 or 128 in this paper's benchmarks).
- Softmax
- Turns a row of scores into positive weights that sum to one: exponentiate each score and divide by the total. Subtracting the row maximum first keeps the numbers safe.
- Online softmax
- Computing softmax block by block with a running maximum and running sum, rescaling the old sum when a larger maximum appears. Gives exactly the same result.
- Kernel
- One program launched on the GPU, such as a matrix multiply. Standard attention uses several kernels; FlashAttention fuses everything into one.
- HBM
- High Bandwidth Memory: the GPU's large main memory (tens of gigabytes) that sits off the compute chip. Big, but slow compared with on-chip memory.
- SRAM (shared memory)
- Small, very fast memory inside each SM. FlashAttention loads tiles of Q, K and V here so the N×N scores never go to HBM.
- Streaming multiprocessor (SM)
- One of the many processor cores of an NVIDIA GPU; each runs thread blocks and has its own SRAM. The A100 has 108. Intel Arc's closest equivalent is the Xe-core.
- Thread block and warp
- A thread block is a group of threads placed on one SM; it is split into warps of 32 threads that execute the same instruction together. FlashAttention-2 re-plans the work at both levels.
- Tensor Core
- Special NVIDIA hardware units for fast matrix multiplies in low precision such as FP16/BF16. Other operations (exp, max, division) run much slower, so the paper minimises them.
- FLOPs and TFLOPs/s
- FLOPs count floating-point operations; TFLOPs/s is trillions per second, the speed measure in every chart. "Percent of peak" compares it with the hardware maximum.
- A100 and H100
- NVIDIA data-centre GPUs (A100 is the older generation, H100 the newer). The paper's main benchmarks are on an A100 80GB; a few are on an H100.
- Forward and backward pass
- Forward computes the output; backward computes gradients for training. Inference, as in this thesis, uses only the forward pass.
- Causal mask
- In text language models a token may only look at earlier tokens, so half the score matrix is skipped. Video DiTs like LTX-2.3 attend in all directions, without this mask.
Guide
These are the words the paper uses without explaining. The most important pairs are HBM and SRAM, the slow big memory and the fast small one, and thread block and warp, the two levels at which the paper splits work. Tensor Cores make matrix multiplies fast, so every exponential or division counts. Remember too that the thesis needs only the forward pass, and that video transformers use no causal mask.
§1Big picture
Guide
Both panels compute the same attention, but they move data very differently. On the left, standard attention runs three separate kernels, and each N by N matrix, first the scores S and then the probabilities P, is written to slow HBM memory and read back. On the right, one fused kernel streams small tiles of Q, K and V into fast on-chip SRAM, keeps a running state per row, and writes only the final output O plus one log-sum-exp number per row. That is why extra memory drops from N squared to N.
FlashAttention (v1) already did the right-hand picture. FlashAttention-2 keeps the idea and fixes how the GPU is used: (1) fewer non-matmul FLOPs, (2) parallelism over the sequence length, (3) no shared-memory reduction between warps.
§2The problem
Guide
Two speed gaps on the A100 explain the whole design. The left panel shows the memory hierarchy: 108 streaming multiprocessors, each with 192 kilobytes of fast SRAM at about 19 terabytes per second, against HBM at only about 2. The right panel compares arithmetic: Tensor Core matrix multiplies run at 312 teraflops, while other operations like exp and max run at 19.5, so one non-matmul flop costs about sixteen matmul flops. FlashAttention attacked the first gap; FlashAttention-2 attacks the second.
Guide
Each bar is the fraction of the A100's peak throughput that a kernel actually reaches. An optimised matrix multiply reaches 80 to 90 percent, but the original FlashAttention reached only 30 to 50 percent forward and 25 to 35 percent backward. FlashAttention-2 lifts this to 50 to 73 percent forward and up to 63 percent backward. The paper blames v1's gap on how work was divided among thread blocks and warps, which is exactly what the method section fixes.
- Standard attention materialises S and P (N×N) in HBM: O(N²) memory and O(N²) slow memory traffic; for N ≫ d (N ≈ 1k–8k, d ≈ 64–128) this dominates run time. P must also be saved for backward.
- FlashAttention v1 fixed memory, but (i) rescales the output by diag(ℓ)⁻¹ at every inner step (extra non-matmul FLOPs), (ii) only parallelises over batch × heads, so long sequences with small batch leave SMs idle, (iii) splits K, V across warps (“split-K”), forcing a shared-memory reduction.
§3Method
3.1 Tiling loop (Algorithm 1)
Guide
Here is the forward algorithm as a picture. The outer loop runs over blocks of query rows, and those blocks run in parallel; the inner loop walks through key and value blocks one after another. One thread block loads its query block Q i once, streams every K j and V j through SRAM, and updates three running quantities: the row maximum m, the row sum l, and an un-normalised output O tilde. Only after the last key block does it divide by l and write O i and the log-sum-exp L i to HBM, exactly once.
3.2 Online softmax as a running state
Guide
The online softmax is the trick that makes tiling possible. Reading left to right, the state starts at m equal to minus infinity, l equal to zero and O tilde equal to zero, and each new block of scores updates it. Whenever a larger maximum appears, the old contributions are shrunk by e to the power of old max minus new max, a number at most one. After the last block the state equals the exact softmax-weighted sum. FlashAttention-2's change is to postpone the division by l to the very end.
3.3 What FlashAttention-2 changes
Guide
Version one and version two side by side, with identical output. In v1 the outer loop is over key and value blocks, so the output, l and m for every query block must be read from and written back to HBM at each step, and parallelism covers only batch times heads. In FlashAttention-2 the outer loop is over query blocks, the running state stays in registers, rescaling uses only the cheap exponential factor, and the grid also spans the row blocks. This loop swap is the heart of the paper.
- Fewer non-matmul FLOPs. Keep an un-scaled Õ and divide by ℓ once at the end; store only the log-sum-exp L (not m and ℓ separately) for the backward pass.
- Parallelise over sequence length. Forward: one thread block per (batch, head, row block i). Backward: one thread block per column block j; the only shared quantity, dQ, is updated with atomic adds.
- Better warp partitioning. Inside a thread block (4 or 8 warps), split Q across warps instead of K/V (Fig. 3), so no warp needs another warp’s partial sums.
- Causal masking by blocks. Skip blocks entirely above the diagonal; apply the mask only on the diagonal block of each row.
- Block sizes {64, 128} × {64, 128}, hand-tuned per head dimension d and shared-memory size (larger = fewer SRAM loads but more registers; too large = register spilling or launch failure).
Guide
These are the paper's four practical changes plus the tuning knob that ties them together. The first two cut expensive non-matmul work: divide by l once at the end, and store only the log-sum-exp. The next two fill the GPU better: give each row block its own thread block, and split queries rather than keys across warps so no warp waits for another's partial sums. With a causal mask, blocks above the diagonal are simply skipped. Block sizes of 64 or 128 are hand-tuned per head dimension, trading fewer memory loads against register pressure.
3.4 Parallelism, causal skipping, backward dataflow
Guide
Long sequences usually mean a small batch, and that starves the GPU. In this illustrative example, whose numbers are the tab's own, batch one with sixteen heads gives v1 only sixteen thread blocks, so only sixteen of the A100's 108 multiprocessors are busy. FlashAttention-2 also splits each 8k-token sequence into 64 row blocks, giving 1024 thread blocks and a fully occupied chip. Batch-one video generation, as in the thesis, is exactly this situation.
Guide
In the grid, rows are query blocks and columns are key blocks. With a causal mask, every block entirely above the diagonal is skipped, which is roughly half of them, and only the single diagonal block in each row needs the element-by-element mask. That gives about 1.7 to 1.8 times speed-up over unmasked attention. It matters for language-model training, but a video diffusion transformer like LTX-2.3 uses bidirectional attention, so this optimisation does not apply there.
Guide
The backward pass flips the ownership. Each thread block now owns one column block, meaning one K j and V j, and loops over all query blocks. The gradients for K and V accumulate on chip and are written once, but the query gradient dQ is shared by every column block, so it is updated in HBM with atomic adds. Instead of storing S and P, the kernel recomputes them from Q, K and the saved log-sum-exp L. Inference never runs this part.
3.5 Algorithms (transcribed)
Guide
Algorithm 1 is the whole forward pass in one place. It cuts Q into row blocks and K and V into column blocks. Then, for each query block, and these can run in parallel, it initialises the running maximum, sum and output, and walks through all key blocks. Each step computes a score tile, updates the maximum, exponentiates, rescales the old sum and output, and adds the new contribution. At the end it normalises the output once and writes the log-sum-exp. This is the only algorithm that matters for inference.
Guide
Algorithm 2 computes the gradients for training. It first computes D, the row-wise sum of the output gradient times the output, which makes the softmax derivative cheap. Then, for each key and value block, it loops over query blocks, recomputes the scores and probabilities from the stored log-sum-exp, accumulates the gradients for V and K on chip, and adds its share of the query gradient into HBM with atomic adds. Recomputation trades extra arithmetic for never storing an N by N matrix.
MQA / GQA are supported by index manipulation (no duplication of K/V heads); in backward, dK and dV are summed over the implicitly duplicated heads.
§4Every equation
The paper has no numbered equations; all display math is listed below in paper order, tagged by section. Following the paper, the 1/√d scaling of QKᵀ, masking and dropout are omitted for clarity.
Standard attention; Q, K, V ∈ ℝ^(N×d), N = sequence length, d = head dimension, softmax row-wise.
Guide
Standard attention takes three steps. S equals Q times K transposed, where Q, K and V are N by d matrices, N is the sequence length and d the head dimension, so S is N by N. P is the row-wise softmax of S, and the output O is P times V. The problem the paper attacks is that S and P are N by N, so for long sequences they are huge and end up in slow memory.
Backward pass by the chain rule; dO is the loss gradient w.r.t. O. Five matmuls (vs. two in forward).
Guide
These five lines are the backward pass by the chain rule, where dO is the gradient of the loss with respect to the output. The gradient for V is P transposed times dO; dP is dO times V transposed; dS applies the softmax derivative to dP; and the gradients for Q and K are dS times K and Q times dS transposed. That is five matrix multiplies against two in the forward pass, which is why backward is harder to make fast.
Row-wise softmax Jacobian (“dsoftmax”). Row by row this equals p ∘ (dp − pᵀdp), which is where D in Alg. 2 comes from.
Guide
Here is the derivative of softmax for one row. If p is the softmax of the scores s, then a small change dp in the probabilities maps back to ds equal to the diagonal matrix of p minus p times p transposed, all times dp. Row by row this simplifies to p times the quantity dp minus one number per row, the dot product of p and dp. That number is exactly the D vector that Algorithm 2 precomputes.
One row block of S split into two column blocks; V split accordingly. B_r, B_c = row / column block sizes.
Guide
This sets up the toy example for the online softmax. One row block of scores S is split into two column blocks, S one and S two, each B r rows by B c columns, and V is split to match into V one and V two. B r and B c are the row and column block sizes. The next two equations compute the same output, first the standard way, then block by block.
Standard (safe) softmax needs the max m and sum ℓ over the whole row before normalising. (As printed, diag(ℓ)⁻¹ is meant to apply to both terms of O.)
Guide
Here is the standard, numerically safe softmax on the two blocks. It first needs m, the maximum over the whole row, and l, the sum of exponentials of the scores minus m across both blocks. Only then can the division give P and multiply by V to get O. The catch is that m and l depend on the whole row, so every block must be seen before normalising. The next equation removes that requirement. As the tab notes, the division by l is meant to apply to both terms.
Online softmax as used in FlashAttention v1: local softmax per block, then rescale. The rescale factor for O⁽¹⁾ must be diag(ℓ⁽²⁾)⁻¹ diag(e^(m⁽¹⁾−m⁽²⁾) ℓ⁽¹⁾); the paper’s shorthand omits the exponential and writes the ratio inverted.
Guide
The original FlashAttention's online softmax processes block one alone, getting its own max m one, sum l one, and a correctly normalised partial output O one. When block two arrives, the new max m two and the rescaled sum l two turn out to equal the full-row m and l. The partial output is then corrected by the ratio of old to new sums, so after the last block the result is exact, without ever holding the whole row.
A100: each non-matmul FLOP costs ~16× a matmul FLOP, motivating tweak 1 and 2 below.
Guide
This ratio motivates the paper's first two tweaks. On the A100, half-precision matrix multiplies run at 312 teraflops per second, but single-precision operations that are not matrix multiplies, like exp, max and division, run at only 19.5. Divided, that is about sixteen, so each non-matmul flop costs as much as sixteen matmul flops. Even a small amount of softmax bookkeeping can therefore eat a large share of the runtime.
Tweak 1, before: v1 rescales both terms by diag(ℓ⁽²⁾)⁻¹ at every step.
Guide
Here is the version one update that FlashAttention-2 improves. To merge block two, v1 rescales the old output O one by the ratio of old to new sums, and also divides the new term by l two. Both terms are divided by the current sum at every block, so this expensive rescaling is repeated T c times per row. The next equation shows how to postpone it.
Tweak 1, after: keep an “un-scaled” Õ plus the statistic ℓ⁽²⁾; only at the end scale Õ^(last) by diag(ℓ^(last))⁻¹. (As printed; in the un-scaled form the first term is e^(m⁽¹⁾−m⁽²⁾)Õ⁽¹⁾, see §3.1.1d.)
Guide
Tweak one: keep an un-scaled output, O tilde, carry the sum l alongside it, and divide only once after the last block. The equation is reproduced as printed in the paper; in the fully un-scaled form the first term should be e to the power of m one minus m two, times O tilde one, as the tab's equation 3.1.1d shows. The idea is the same either way: fewer non-matmul operations inside the inner loop.
Tweak 2: store only the row-wise log-sum-exp for backward (one vector instead of m and ℓ); then P = exp(S − L).
Guide
Tweak two. The backward pass needs each row's softmax statistics, and instead of storing both the maximum m and the sum l, FlashAttention-2 stores just L equals m plus the log of l, called the log-sum-exp. Backward can then rebuild the probabilities directly as exp of S minus L. That is one vector per row instead of two, and a simpler recomputation.
FlashAttention-2 online softmax (2-block case). The right-hand equality of Õ⁽²⁾ holds with factor diag(e^(m⁽¹⁾−m⁽²⁾)) — the printed “⁻¹” is a typo (same in Alg. 1 line 10).
Guide
Here is the full two-block example redone with FlashAttention-2's un-scaled output. Block one gives m one, l one and O tilde one without any division. Block two updates the max and sum, and O tilde two is the old O tilde shrunk by e to the power of m one minus m two, plus the new block's contribution. Only at the very end is O tilde divided by l to give the exact output. Compare with equations 3.1.1a and b to see the division leave the loop.
General forward recurrences (lines 1, 8–13), initialised with O = 0, ℓ = 0, m = −∞.
Guide
These are the general forward recurrences of Algorithm 1, for any number of blocks. T r and T c count the row and column blocks: N over B r and N over B c, rounded up. For query block i and key block j, the score tile S equals Q i times K j transposed, the max m and sum l are updated as in the two-block case, and the un-scaled output is rescaled and extended. At the end, O i is divided by l once and L i is stored.
Correctness and cost of Algorithm 1: exact output; the only extra storage is L.
Guide
Algorithm 1 guarantees an exact result: the output equals softmax of Q times K transposed, times V, with no approximation. The work is still proportional to N squared times d, the same as standard attention, but extra memory beyond inputs and output is only proportional to N, since the only stored statistic is L. The speed comes from fewer memory trips and better scheduling, not from skipping computation.
Backward recurrences (lines 4, 10–16). D = rowsum(dO∘O) = rowsum(P∘dP) makes dsoftmax cheap; ∘ is element-wise product.
Guide
These are the backward recurrences of Algorithm 2. D is the row sum of dO times O, element by element. For each tile, the probabilities are recomputed as exp of S minus L, the V gradient gains P transposed times dO, dP equals dO times V transposed, and dS equals P times the quantity dP minus D, element by element. Then dS updates the gradients for Q and K. Precomputing D turns the softmax derivative into a cheap element-wise step.
Benchmark accounting (per sequence); halved with a causal mask; ×2.5 for backward (5 vs 2 matmuls).
Guide
Benchmarks count work this way. Forward flops equal four times sequence length squared, times head dimension, times number of heads. With a causal mask the count is halved, and backward is counted as 2.5 times forward, matching five matrix multiplies against two. Figures 4 to 7 divide these flop counts by measured time to get teraflops per second, so a taller bar means a faster kernel on the same work.
Megatron-LM training-FLOPs formula used for Table 1 (weights term + attention term; attention not halved for causal, for consistency).
Guide
The Megatron-LM formula for total training flops is used to report Table 1. The first term, six times sequence length times number of parameters, covers the weight matrix multiplies; the second, twelve times layers times hidden size times sequence length squared, covers attention. The attention term is not halved for causal masking, to stay consistent with earlier work. Dividing by time per GPU gives the utilisation figures in the table.
§5Every figure
Guide
The paper's Figure 1 shows the original FlashAttention forward pass with K and V split into two blocks. The first key block gives scores, exponentials and a partial output normalised by l one. The second block gives new scores, the sum grows to l two, and the old output is rescaled by l one over l two before the new part is added. The scores and probabilities are computed in SRAM and never stored in HBM. As in the paper, the row-max subtraction is left out of the drawing.
Guide
Figure 2 shows which worker, meaning which thread block, computes which part of a causal attention matrix. In the forward pass each worker owns a horizontal strip of query rows, so workers never need to talk to each other. In the backward pass each worker owns a vertical strip of key columns and accumulates its K and V gradients locally, while the shared query gradients are combined with atomic adds. This row split is the sequence-length parallelism from the method section.
Guide
Figure 3 shows how the four warps inside one thread block share the forward work. In panel a, version one splits K and V across warps, the so-called split-K scheme, so each warp holds only a partial result that must be written to shared memory, synchronised and summed. In panel b, FlashAttention-2 splits Q across warps and lets all of them read the same K and V, so each warp writes its own slice of the output directly, with no inter-warp traffic.
Guide
Figure 4 measures forward plus backward speed on an A100. Each panel is one setting, with or without a causal mask and head dimension 64 or 128; the x axis is sequence length, and bar height is teraflops per second. FlashAttention-2 is the tallest bar everywhere, reaching 176 teraflops at head dimension 64 and 203 at 128, about 1.45 to 2.46 times the original FlashAttention. Standard PyTorch runs out of memory at 16k tokens because it stores the full N by N matrices.
Guide
Figure 5 isolates the forward pass, which is the part that matters for inference. FlashAttention-2 reaches up to 227 teraflops per second, about 73 percent of the A100's peak. The Triton version of FlashAttention, which already used the swapped loop order, comes second; the remaining gap comes from fewer non-matmul flops and better warp partitioning. Across all settings FlashAttention-2's forward pass is about 1.85 to 3.4 times faster than the original FlashAttention's.
Guide
Figure 6 isolates the backward pass. FlashAttention-2 reaches up to 196 teraflops per second, about 63 percent of peak and roughly twice the other methods, even though backward has 2.5 times the flops of forward because S and P are recomputed. This result matters for training long-context models; for the thesis, which only runs inference, it is background rather than something to reproduce.
Guide
Figure 7 runs the same code on an H100, without using that chip's newest features such as TMA and fourth-generation Tensor Core instructions. FlashAttention-2 reaches about 338 teraflops per second at head dimension 128 and 16k tokens, which the paper's text rounds to about 335. Only PyTorch, FlashAttention and FlashAttention-2 were compared. The algorithm transfers to new hardware, but hardware-specific tuning still leaves speed on the table, which later work, FlashAttention-3, picks up.
§6Results
| Model | Without FlashAttention | FlashAttention | FlashAttention-2 |
|---|---|---|---|
| GPT3-1.3B 2k context | 142 TFLOPs/s | 189 TFLOPs/s | 196 TFLOPs/s |
| GPT3-1.3B 8k context | 72 TFLOPs/s | 170 TFLOPs/s | 220 TFLOPs/s |
| GPT3-2.7B 2k context | 149 TFLOPs/s | 189 TFLOPs/s | 205 TFLOPs/s |
| GPT3-2.7B 8k context | 80 TFLOPs/s | 175 TFLOPs/s | 225 TFLOPs/s |
Guide
Table 1 moves from kernel benchmarks to end-to-end training of GPT-style models on eight A100 GPUs, in teraflops per second per GPU. FlashAttention-2 wins every row, peaking at 225 for the 2.7 billion parameter model at 8k context, which is 72 percent model flops utilisation. The gain grows with context length: at 2k tokens the three columns are close, while at 8k the baseline without FlashAttention falls to 72 or 80, because attention now dominates the work.
Guide
Table 1 is redrawn as grouped bars, one group per model and context length, with bars for no FlashAttention, FlashAttention and FlashAttention-2. At 2k context the three bars are close, but at 8k the baseline collapses to 72 or 80 teraflops while FlashAttention-2 stays above 220. That is about 2.8 times the baseline and 1.3 times FlashAttention. Longer sequences make attention efficiency matter more, the same scaling that applies to long, high-resolution video clips.
Guide
Each line is the speed-up of FlashAttention-2 over the original FlashAttention, forward plus backward, across sequence lengths, computed by the tab from Figure 4's bar labels. The two head-dimension-128 lines sit highest, reaching about 2.3 to 2.5 times, while head dimension 64 reaches about 1.6 to 1.8 times. The gain is largest exactly where version one was weakest, which supports the paper's claim that v1 lost speed to poor work partitioning rather than to the algorithm.
| Figure | GPU | Pass | Peak FA2 TFLOPs/s | FA2 ÷ FlashAttention |
|---|---|---|---|---|
| Fig. 4 | A100 | fwd + bwd | 203 | 1.45× – 2.46× |
| Fig. 5 | A100 | forward | 227 | 1.85× – 3.39× |
| Fig. 6 | A100 | backward | 196 | 1.32× – 2.24× |
| Fig. 7 | H100 | fwd + bwd | 338 | 1.36× – 2.50× |
Guide
This summary is derived by the tab from the bar labels of Figures 4 to 7. For each figure it gives the best FlashAttention-2 throughput and the range of speed-ups over the original FlashAttention across all 24 settings. The A100 forward pass shows the widest gain, up to about 3.4 times, at 227 teraflops. That forward row is the one relevant to diffusion inference, where the backward pass never runs.
- Paper’s headline: FA2 is 1.7–3.0× faster than FlashAttention, 1.3–2.5× faster than FlashAttention in Triton, 3–10× faster than standard PyTorch attention; ≈2× vs FlashAttention/xformers overall.
- End-to-end GPT training: up to 1.3× vs FlashAttention and 2.8× vs no FlashAttention; H100 without Hopper-specific instructions still reaches ≈335 TFLOPs/s, with a further 1.5–2× expected from TMA / 4th-gen Tensor Cores (future work, later FlashAttention-3).
§7Why it matters for this thesis
LTX-2.3 on Intel Arc / CPU with OpenVINO
- Long sequences make attention the bottleneck. A video DiT attends over all spatio-temporal latent tokens at once (bidirectional, no causal mask). Attention FLOPs grow as 4·N²·d·heads (§4.1) while linear layers grow as N, so for longer or higher-resolution clips attention can dominate the step time — and weight-only int8/int4 (NNCF) does not speed it up, because attention has no weights.
- Use the fused op, don’t write a kernel. OpenVINO has a
ScaledDotProductAttentionoperation, and recent GPU/CPU plugins execute it with tiled, online-softmax (FlashAttention-style) kernels. What matters for the thesis is that the converted LTX-2.3 IR actually contains SDPA nodes (PyTorchF.scaled_dot_product_attentionconverts to it; hand-written MatMul→Softmax→MatMul patterns need to be fused by OpenVINO transformations). Check the runtime/execution graph and compare latency with the fused op on vs. off. - Only Algorithm 1 matters. Inference needs just the forward pass (O and optionally L); the backward pass, atomic dQ updates and causal-block skipping are irrelevant for DiT denoising. Sequence-length parallelism (Fig. 2) is exactly what helps batch-1 generation fill all Xe-cores.
- Exact, so no calibration and no quality risk. Unlike quantization, FlashAttention changes only data movement; it combines freely with NNCF weight compression and with caching methods. It needs no calibration data — but block sizes are tuned for the hardware’s on-chip memory, which differs between A100 and Arc, so treat A100 speed-ups as qualitative.
- Precision interplay. The exp/rowmax/rescale path is the “non-matmul” part the paper minimises; on Arc, keeping SDPA in FP16 (XMX matmul) with FP32 statistics is the natural setting. Quantizing attention activations (Q, K, V, P to int8) is a separate, riskier experiment that the fused kernel may or may not support.
Guide
For the thesis, the job is to verify, not to implement. Export LTX-2.3 so that its attention becomes OpenVINO's ScaledDotProductAttention operation, check in the execution graph that these fused nodes really appear, and measure latency with the fused op on and off. NNCF's weight-only int8 or int4 compression does nothing for attention, which has no weights, so this is a separate, exact speed-up that stacks with quantization and caching. Treat A100 numbers as qualitative, and keep attention in FP16 with FP32 statistics on Arc.
DeepCache: Accelerating Diffusion Models for Free
From one denoising step to the next, the deep, high-level features of a diffusion U-Net barely change. DeepCache runs the full U-Net once, caches the deep feature that enters a shallow up-block, and for the next N−1 steps recomputes only the cheap shallow skip path. No training, no calibration data, just a change to the sampling loop.
- Training / data
- none (training-free)
- SD v1.5 (PLMS-50)
- 2.3× faster, CLIP −0.05
- LDM-4-G ImageNet
- 4.1×, FID 3.39→3.59
- Max tested speed-up
- 10.5× (N=20)
- Knob
- cache interval N, branch m
- Architecture
- U-Net skip branches
Reading guide
DeepCache asks a simple question: if a diffusion model's deep features barely change from one denoising step to the next, why recompute them every time? It answers: run the full U-Net once, cache the deep feature, and for the next few steps run only the cheap shallow path that plugs into that cache. It needs no training and no data, and reaches 2.3 times faster Stable Diffusion with almost the same CLIP score, and over four times faster ImageNet generation with FID moving only from 3.39 to 3.59. The tab goes from the big picture and the problem, to the method, every equation, every figure, the result tables with three charts, and finally a thesis box. Among the sixteen papers it belongs to the acceleration group with FlashAttention-2 and TeaCache: it saves steps' worth of compute rather than bits, so it can stack on top of the quantization papers.
§0Before reading
DeepCache is built on two ideas worth knowing first: the U-Net, an image network whose shallow and deep layers are joined by skip connections, and the sampling loop, which calls that same network at every denoising step. It is in the atlas because it saves time without touching bits: it reuses work across steps, so it can stack on top of int8/int4 compression, and it is the direct ancestor of TeaCache, which brings the same idea to transformers like LTX-2.3.
Guide
A U-Net is shaped like the letter U. The down blocks on the left shrink the image into abstract features, the middle block is the deepest point, and the up blocks on the right grow it back. The teal dashed skips carry fresh detail straight across. The indigo dot marks where DeepCache stores the deep feature, so on cheap steps only D one and U one need to run.
Guide
The top row is ordinary sampling: the timestep counts down in gold, and every step is one full call of the same U-Net. Below each call sits its deep feature, and neighbouring ones are nearly identical. The bottom row is DeepCache with an interval of three: one full step stores the deep feature, then two shallow steps reuse it, and the pattern repeats.
Guide
The paper judges quality with two scores. On the left, FID compares the features of real and generated images as two clouds, and a smaller distance between them is better. On the right, CLIP score encodes the prompt and the image and measures how well they agree, and a higher score is better. Speed is reported separately, as arithmetic work and as images per second.
Guide
Read the column from top to bottom in atlas order. The quantization papers and FlashAttention-2 make a single network call cheaper. DeepCache, in indigo, is the first to save work across calls, by reusing deep features from an earlier step. TeaCache comes next and carries that reuse idea over to diffusion transformers like LTX-2.3, and VBench closes the atlas by scoring video quality.
Terms used in this paper
- U-Net
- An image network with a down path that shrinks the image into abstract features, a middle block, and an up path that grows it back. Stable Diffusion and the other models in this paper use one to predict noise.
- Skip connection (skip branch)
- A shortcut that sends the output of down block Di directly to up block Ui. The paper numbers the branches from 1 (shallowest) upward.
- Feature map
- The intermediate output of a block: a stack of small images, one per channel. "High-level" features from deep blocks describe layout and objects, not pixels.
- Timestep \(t\)
- The position in the denoising process, counting down from pure noise to the clean image. Each timestep costs one call of the network.
- Sampler: DDPM, DDIM, PLMS
- The rule that turns the network's noise prediction into the next, less noisy image. DDPM is the original slow sampler; DDIM and PLMS reach good images in fewer steps (here 50 to 250).
- Feature similarity
- A score of how alike two feature maps are, where values near 1 mean almost identical. The paper finds many step pairs above 0.95.
- Cache interval \(N\)
- How often the full network runs: one full step, then \(N-1\) cheap steps reusing the cache. Larger \(N\) means faster sampling and more drift from the original image.
- Branch \(m\)
- Which skip branch the cheap steps keep. Only blocks D1..Dm and Um..U1 run; a smaller \(m\) is faster but less accurate.
- MACs
- Multiply-accumulate operations: a hardware-independent count of the arithmetic a model does. The paper reports the average per step.
- Throughput and speed-up
- Throughput is images generated per second on real hardware; speed-up is that throughput divided by the original model's. Measured speed-up is usually smaller than the drop in MACs.
- RTX 2080
- An NVIDIA consumer graphics card from 2018, the single GPU used for all throughput numbers. An Intel CPU or Arc GPU will give different absolute times, so re-measure.
- FID (and sFID, IS)
- Fréchet Inception Distance compares features of real and generated images; lower is better. sFID is a variant sensitive to spatial layout, and Inception Score (IS) is higher-is-better. Used for ImageNet, CIFAR-10 and LSUN results.
- CLIP score
- How well an image matches its text prompt, measured with a CLIP model (here ViT-g/14); higher is better. Used for Stable Diffusion on PartiPrompts and MS-COCO 2017 prompts.
- Stable Diffusion v1.5 and LDM-4-G
- Two latent diffusion models: Stable Diffusion makes images from text, LDM-4-G makes ImageNet images from a class label. Both run their U-Net on a compressed latent, not on pixels.
Guide
These are the words the paper uses without explaining. The two knobs to remember are the cache interval N, how often the full network runs, and the branch m, how deep the cheap path goes. FID and CLIP score measure quality, MACs and throughput measure cost, and all timings come from a single RTX 2080 graphics card, so Intel numbers will differ.
§1Big picture
Guide
Compute the deep part once and reuse it for the next steps. The left column is the normal sampler, running the full U-Net at every step. The right column is DeepCache with an interval N of three: one full step that stores its deep feature, shown in indigo, then two steps where only the shallow blocks run in teal and the deep blocks are skipped in grey. The rest of the tab explains where the cache sits and how often to refresh it.
Diffusion sampling calls the same network 25–250 times. DeepCache removes most of the work inside the retrieve steps rather than removing steps.
§2The problem
Guide
Diffusion sampling is a long chain of calls to the same expensive network, and each call costs about the same. Samplers like DDIM cut the number of calls, and pruning or distillation make each call cheaper but need retraining. The key observation drawn here is that adjacent steps have deep features with cosine similarity often above 0.95, so most of the deep compute is repeated work. That redundancy is the gap DeepCache exploits without any retraining.
- Retraining-based compression (Diff-Pruning, BK-SDM, Spectral DPM) is costly for large models like Stable Diffusion.
- Adjacent-step deep features are highly similar; for every timestep, ≥10% of other steps have similarity > 0.95 (up to 80% for DDPM LSUN-Churches).
- Similarity is not constant: for LDM it drops by ~40% of the progress (Fig. 2c), so a fixed long cache interval hurts.
§3Method
Guide
The cache lives at the junction of a skip branch. A U-Net pairs each down block D with an up block U through a skip connection; the grey main branch is deep and expensive, the teal path cheap. DeepCache stores the output of U two, the deep feature entering U one, and on retrieve steps runs only D one and U one. For Stable Diffusion branch one is about six percent of the compute, though the paper actually uses branch two, about eleven percent.
Guide
Two ways to spend the same budget of ten full steps out of fifty. The top row, uniform, refreshes the cache every fifth step. The bottom row, non-uniform, uses equation 7 with centre fifteen and power 1.4, and packs full steps near step fifteen, where features change fastest, spreading them out further away. The point is that the refresh schedule is a free design choice, and placing refreshes where similarity dips gives better quality at large intervals.
- Cache step (step t): run the whole U-Net, store F_cache = Um+1(·) (Eq. 4), and update x.
- Retrieve steps (next N−1 steps): run only D1…Dm on the new x, feed Concat(Dm, F_cache) into Um (Eq. 5), run Um…U1.
- Repeat every N steps (uniform, Eq. 6) or at the steps in I from the non-uniform rule (Eq. 7).
- Pick m (depth of the kept shallow path) and N (interval): larger N or smaller m gives more speed and lower quality. Paper uses branch 3 / 1 / 2 for DDPM / LDM-4-G / SD.
Guide
The procedure alternates two kinds of step. A cache step runs the whole network and saves the deep feature. The following N minus one retrieve steps run only the first m down blocks on the new input, join them with the saved feature, and finish with the first m up blocks. A larger interval N or a shallower branch m means more speed and less quality. The paper uses branch three for DDPM, one for LDM, and two for Stable Diffusion.
Algorithm 1: DeepCache (Appendix A, DDPM sampler shown)
Guide
The first part of Algorithm 1 is an ordinary U-Net pass: go down through all blocks, through the middle block, then back up, and on the way up save the feature arriving at branch m. The second part loops over the next N minus one steps, runs only the shallow down blocks, pulls the saved feature from the cache, and runs the shallow up blocks. Each pass ends with the usual sampler update, so only the network evaluation changes, not the sampler.
Note: the retrieve-step update in Algorithm 1 is transcribed as printed (it reuses xt, αt); in practice the sampler uses the current step’s x and schedule.
Guide
A DiT like LTX-2 has no U-Net long skips, so DeepCache's recipe cannot be copied directly. The left side is the U-Net case, where fresh shallow detail travels around the cached deep part through the skip. The right side shows the DiT alternative: cache the change, delta, that a span of middle blocks adds to the hidden state, or cache the whole model's output as TeaCache does. This drawing is the tab's own illustration, and the saving scales with the fraction of blocks skipped.
§4Every equation
Forward diffusion: each step shrinks the previous sample and adds Gaussian noise with variance βt.
Guide
The forward diffusion step. q of x t given x t minus one is a Gaussian: the previous sample x t minus one is scaled by the square root of one minus beta t, and noise with variance beta t is added, where beta t is the noise schedule and I is the identity matrix. Repeating this turns an image into pure noise. It is background only; DeepCache does not change the diffusion process itself.
Reverse step: the network εθ predicts noise and the sampler removes it. Here \(\alpha_t=1-\beta_t\), \(\bar\alpha_t=\prod_{i=1}^{T}\alpha_i\) (as printed).
Guide
The reverse, denoising step that sampling repeats many times. The network epsilon theta looks at the noisy sample x t and the timestep t and predicts the noise; the sampler subtracts a scaled version of it, divides by the square root of alpha t, and adds fresh noise with variance beta t. Alpha t is one minus beta t, and alpha bar t is the running product of the alphas. Every one of these network calls is what DeepCache makes cheaper.
Input to up-block Ui: low-level skip feature from Di concatenated with the high-level main-branch feature from Ui+1.
Guide
The input to up block U i is the concatenation of two features: the low-level feature from down block D i arriving over the skip branch, and the high-level feature from the deeper up block U i plus one on the main branch. This structural fact is what makes DeepCache possible: the deep half can be replaced by a stored copy while the skip still delivers fresh shallow detail.
Cache step at time t: store the main-branch feature entering Um.
Guide
The cache step. At time t, F cache is set to the output of up block U m plus one, that is, the deep main-branch feature that is about to enter up block U m. Here m is the chosen skip branch. This stored tensor is the only thing carried between steps, and equation 5 is where it gets reused.
Retrieve step t−1: fresh shallow feature Dm plus the stale cached deep feature; blocks below m are not executed.
Guide
The retrieve step at time t minus one. Up block U m receives the fresh shallow feature from D m, computed on the new input, concatenated with the stale F cache saved at time t. Nothing deeper than branch m runs. This is equation 3 with the expensive main-branch input swapped for the cached one, and Table 5 shows the cache matters: replacing it with zeros destroys the images.
Uniform 1:N: full inference at every N-th step; k is the number of cache updates.
Guide
The uniform refresh schedule. The set I holds the steps where the full network runs: every multiple of N, i times N, for i from zero up to k minus one, where k is T divided by N rounded up and T is the total number of steps. With fifty steps and N equal to five, that means ten full steps. It is the simple baseline that equation 7 improves on.
Non-uniform 1:N: evenly space k points in a p-th-root space centred on step c (end exclusive), map back with power p, round and deduplicate. Full steps are densest near c. Defaults found: c≈15 (SD, 50 steps) or 120 (LDM, 250 steps), p≈1.2–1.5.
Guide
The non-uniform refresh schedule. Take k evenly spaced points between minus c and T minus c, but in a p-th-root space; raise them back to the power p, shift by the centre c, round to integers and remove duplicates. Here c is the step where features change fastest and p controls how strongly refreshes cluster around it. The result is dense full steps near c and sparse ones far away. Tables 7 to 10 tune c and p.
Unnumbered sampler update inside Algorithm 1: u1 (final up-block output) plays the role of εθ.
Guide
The sampler update used inside Algorithm 1. It is the same as equation 2, except that u one, the output of the first up block, stands in for the predicted noise epsilon theta; sigma t times z adds fresh Gaussian noise. It makes explicit that on a retrieve step the shallow path's output is treated exactly like a full network prediction.
Ablation framing (in text): DeepCache = K DDIM steps plus (N−1)×K shallow-network steps.
Guide
A way to count the work in the ablation of section 4.5. DeepCache equals K full network passes, the same as K DDIM steps, plus N minus one times K extra shallow passes. Framed like this, the question becomes whether those cheap shallow passes add quality on top of plain DDIM with K steps, which Table 6 answers with a clear yes.
§5Every figure
Guide
The teaser makes the claim visually: same pictures, much faster. The top block is Stable Diffusion 1.5 on six prompts, original versus DeepCache at 2.3 times faster; the bottom is class-conditional ImageNet with LDM at 7 times faster, using N of twenty over 250 DDIM steps. Layout, colours and objects are preserved with only small details changing. This panel is a schematic of the paper's image gallery, not the actual images.
Guide
Deep features change slowly, and this is the evidence. Panel a shows feature maps of up block U two in Stable Diffusion, where step twenty looks like step nineteen and step one like step zero. Panel b is a similarity heat map across steps, darker meaning more similar. Panel c gives, for each step, the share of other steps with similarity above 0.95: at least ten percent, up to eighty. The dip in LDM motivates the non-uniform schedule. Panels b and c are redrawn shapes.
Guide
The method figure, redrawn. The upper pass, step t plus one to t, runs the full U-Net with three down blocks, the middle block and three up blocks, and caches the feature leaving U two. The lower pass, step t to t minus one, runs only D one and U one, while everything deeper is greyed out and skipped. It is the concrete case of equations 4 and 5 with m equal to one.
Guide
How much compute each skip branch holds gives the cost of a retrieve step. Bars show each branch's share of multiply-accumulate operations, split into down and up block, read from the plot. In the CIFAR-10 DDPM, compute is concentrated in the first six branches; in Stable Diffusion it is spread more evenly. Keeping branch m costs roughly the sum of branches one to m, which is why a shallow m gives big speed-ups.
Guide
DeepCache stays closer to the original than a retrained smaller model. The grid compares nine prompts across the original Stable Diffusion at about 4.3 seconds, the distilled BK-SDM-Tiny at about 2.55 seconds, and DeepCache at about 1.9 seconds. BK-SDM often changes composition and prompt alignment, while DeepCache keeps the original layout. The point: a training-free method can be both faster and more faithful than retraining. The panel is a schematic.
Guide
At equal speed-up, caching beats simply taking fewer steps. Each panel plots CLIP score, higher is better, against speed-up for Stable Diffusion on PartiPrompts and on COCO. The PLMS line cuts steps from fifty to fifteen and falls steadily; the DeepCache lines keep fifty steps and raise N from two to eight. The non-uniform version stays almost flat up to about 2.3 times. This is the key baseline comparison to copy in a thesis sweep.
Guide
Raising the cache interval trades time for slowly drifting details. Two prompts are shown with N from two to eight: time per image falls from about 5.4 seconds to 1.8 seconds, global content stays put, and only small details like clothing colour or the cat's shape change once N reaches about five. It is the visual version of the N sweeps in Tables 13 and 14. The panel is a schematic of the paper's images.
Guide
Small 32 by 32 samples, original row above DeepCache row, using DDIM with 100 steps and N of five for 1.85 times faster. Every pair looks the same. The paper's caption says LSUN-Churches, but the image size and the 1.85 speed-up match CIFAR-10 in Table 2, so the tab treats it as a likely caption error rather than a new result.
Guide
Stable Diffusion 1.5 on twenty-eight COCO prompts, PLMS with fifty steps above, DeepCache with N of five below, at 2.15 times faster. Pairs match in layout, colour and object count, with differences only in fine texture. It is the qualitative side of Table 3, showing the small CLIP drop from 29.51 to 29.46 really is invisible in most images.
Guide
Class-conditional ImageNet with LDM, DDIM at 250 steps versus DeepCache with N of ten, which is 6.96 times faster. Across twenty-eight classes the composition is identical in every pair. Together with Table 1, where FID rises only from 3.37 to 4.41 at this setting, it shows how redundant long samplers are.
Guide
Unconditional LSUN-Bedroom samples, DDIM with 100 steps versus DeepCache with N of five at 1.48 times faster. The pairs are near-identical. Note the speed-up is smaller than on ImageNet: at 100 steps and with the branch the paper uses, each retrieve step still costs a large share of the network, as Table 2b shows.
Guide
Unconditional LSUN-Churches samples, DDIM with 100 steps versus DeepCache with N of five at 1.48 times faster. The pairs are near-identical, down to the watermark artefacts the model learned from its training data. Faithful reproduction of such quirks shows DeepCache approximates the original model's output rather than inventing new content.
§6Results
| Method | MACs↓ | Throughput↑ | Speed↑ | Retrain | FID↓ | sFID↓ | IS↑ | Prec.↑ | Recall↑ |
|---|---|---|---|---|---|---|---|---|---|
| IDDPM | 1416.3G | - | - | ✗ | 12.26 | 5.42 | - | 70.0 | 62.0 |
| ADM-G | 1186.4G | - | - | ✗ | 4.59 | 5.25 | 186.70 | 82.0 | 52.0 |
| LDM-4 | 99.82G | 0.178 | 1× | ✗ | 3.60 | - | 247.67 | 87.0 | 48.0 |
| LDM-4* | 99.82G | 0.178 | 1× | ✗ | 3.37 | 5.14 | 204.56 | 82.71 | 53.86 |
| Spectral DPM | 9.9G | - | - | ✓ | 10.60 | - | - | - | - |
| Diff-Pruning* | 52.71G | 0.269 | 1.51× | ✓ | 9.27 | 10.59 | 214.42 | 87.87 | 30.87 |
| Uniform N=2 | 52.12G | 0.334 | 1.88× | ✗ | 3.39 | 5.11 | 204.09 | 82.75 | 54.07 |
| Uniform N=3 | 36.48G | 0.471 | 2.65× | ✗ | 3.44 | 5.11 | 202.79 | 82.65 | 53.81 |
| Uniform N=5 | 23.50G | 0.733 | 4.12× | ✗ | 3.59 | 5.16 | 200.45 | 82.36 | 53.31 |
| Uniform N=10 | 13.97G | 1.239 | 6.96× | ✗ | 4.41 | 5.57 | 191.11 | 81.26 | 51.53 |
| Uniform N=20 | 9.39G | 1.876 | 10.54× | ✗ | 8.23 | 8.08 | 161.83 | 75.31 | 50.57 |
| NonUniform N=10 | 13.97G | 1.239 | 6.96× | ✗ | 4.27 | 5.42 | 193.11 | 81.75 | 51.84 |
| NonUniform N=20 | 9.39G | 1.876 | 10.54× | ✗ | 7.11 | 7.34 | 167.85 | 77.44 | 50.08 |
Guide
The main ImageNet result, class-conditional LDM with 250 DDIM steps. Read the speed column against FID, lower is better. Uniform N of two to five gives 1.88 to 4.12 times speed-up while FID only moves from 3.37 to 3.59, with no retraining. The retrained Diff-Pruning reaches just 1.51 times at FID 9.27. At N of twenty, 10.5 times faster, quality drops, and the non-uniform schedule recovers part of it, 7.11 instead of 8.23.
Guide
Chart A plots Table 1: FID, lower is better, against speed-up. The uniform and non-uniform lines stay near 3.4 to 3.6 up to about four times, then bend up past N of ten; non-uniform stays lower at the largest intervals. The single Diff-Pruning point, retrained, sits far above at only 1.51 times. The takeaway is a long flat region of nearly free speed.
| Method | MACs | Thru. | Speed | Steps | FID |
|---|---|---|---|---|---|
| DDPM | 6.1G | 9.79 | 1× | - | 4.19 |
| DDPM* | 6.1G | 9.79 | 1× | - | 4.16 |
| Diff-Pruning | 3.4G | 13.45 | 1.37× | 100k | 5.29 |
| Ours N=2 | 4.15G | 13.73 | 1.40× | 0 | 4.35 |
| Ours N=3 | 3.54G | 15.74 | 1.61× | 0 | 4.70 |
| Ours N=5 | 3.01G | 18.11 | 1.85× | 0 | 5.73 |
| Ours N=10 | 2.63G | 20.26 | 2.07× | 0 | 9.74 |
Guide
CIFAR-10 with a small DDPM and 100 DDIM steps. The Steps column counts retraining steps: Diff-Pruning needs 100 thousand, DeepCache zero. N of two gives 1.4 times faster at FID 4.35 versus 4.16 for the reproduced baseline, beating Diff-Pruning's 5.29 at similar speed. At N of ten, FID climbs to 9.74, so tiny models tolerate caching less.
| Method | MACs | Thru. | Speed | Steps | FID |
|---|---|---|---|---|---|
| DDPM | 248.7G | 0.21 | 1× | - | 6.62 |
| DDPM* | 248.7G | 0.21 | 1× | - | 6.70 |
| Diff-Pruning | 138.8G | 0.31 | 1.48× | 200k | 18.60 |
| Ours N=2 | 190.8G | 0.27 | 1.29× | 0 | 6.69 |
| Ours N=3 | 172.3G | 0.30 | 1.43× | 0 | 7.20 |
| Ours N=5 | 156.0G | 0.31 | 1.48× | 0 | 9.49 |
Guide
LSUN-Bedroom at 256 pixels. DeepCache reaches 1.29 to 1.48 times speed-up with FID from 6.69 to 9.49, against 6.70 for the reproduced baseline. At the same 1.48 times, retrained Diff-Pruning scores 18.60, twice as bad. Speed-ups here are modest because the retrieve path still carries much of this network's compute.
| Method | MACs | Thru. | Speed | Steps | FID |
|---|---|---|---|---|---|
| DDPM | 248.7G | 0.21 | 1× | - | 10.58 |
| DDPM* | 248.7G | 0.21 | 1× | - | 10.87 |
| Diff-Pruning | 138.8G | 0.31 | 1.48× | 500k | 13.90 |
| Ours N=2 | 190.8G | 0.27 | 1.29× | 0 | 11.31 |
| Ours N=3 | 172.3G | 0.30 | 1.43× | 0 | 11.75 |
| Ours N=5 | 156.0G | 0.31 | 1.48× | 0 | 13.68 |
Guide
LSUN-Churches at 256 pixels, same setting as Bedroom. DeepCache gives FID 11.31 at 1.29 times and 13.68 at 1.48 times, versus 10.87 for the baseline. Diff-Pruning at 1.48 times scores 13.90 after 500 thousand training steps, so DeepCache matches it for free. The gain over pruning is smaller here than on Bedroom.
| Method | Parti MACs | Thru. | Speed | CLIP | COCO MACs | Thru. | Speed | CLIP |
|---|---|---|---|---|---|---|---|---|
| PLMS 50 steps | 338.83G | 0.230 | 1.00× | 29.51 | 338.83G | 0.237 | 1.00× | 30.30 |
| PLMS 25 steps | 169.42G | 0.470 | 2.04× | 29.33 | 169.42G | 0.453 | 1.91× | 29.99 |
| BK-SDM-Base | 223.81G | 0.343 | 1.49× | 28.88 | 223.81G | 0.344 | 1.45× | 29.47 |
| BK-SDM-Small | 217.78G | 0.402 | 1.75× | 27.94 | 217.78G | 0.397 | 1.68× | 27.96 |
| BK-SDM-Tiny | 205.09G | 0.416 | 1.81× | 27.36 | 205.09G | 0.415 | 1.76× | 27.41 |
| Ours | 130.45G | 0.494 | 2.15× | 29.46 | 130.45G | 0.500 | 2.11× | 30.23 |
Guide
Stable Diffusion 1.5 at 512 pixels, scored by CLIP score, higher is better, on PartiPrompts and COCO. DeepCache with N of five is the fastest row, about 2.1 times, and keeps CLIP at 29.46 and 30.23 versus 29.51 and 30.30 for the full fifty-step PLMS. Simply halving steps is slower and scores lower, and the retrained BK-SDM models lose much more. This is the table most relevant to large text-conditioned models.
Guide
Chart B plots Table 3 for PartiPrompts. Each bar is a roughly two-times-faster option; the dashed line is the full fifty-step reference at 29.51. DeepCache at N of five is both the fastest, 2.15 times, and the highest, 29.46, while the retrained BK-SDM variants lose between 0.6 and 2.2 CLIP points. Note the axis starts at 27, which exaggerates the gaps visually.
| Method | Throughput↑ | FID↓ | sFID↓ |
|---|---|---|---|
| DDIM 59 steps | 0.727 | 3.59 | 5.14 |
| Ours | 0.733 | 3.59 | 5.16 |
| DDIM 91 steps | 0.436 | 3.46 | 50.6 (as printed) |
| Ours | 0.471 | 3.44 | 5.11 |
Guide
At equal throughput on ImageNet, DeepCache and plain DDIM with fewer steps are tied. DeepCache at 0.733 images per second matches DDIM with 59 steps at FID 3.59, and at 0.471 slightly beats DDIM with 91 steps. So on this long-schedule model, part of DeepCache's benefit is what a shorter schedule would also give; Stable Diffusion in Figure 6 shows a clearer win. The sFID of 50.6 is printed as is, likely a typo for 5.06.
| Model | Dataset | DeepCache | w/o cached features |
|---|---|---|---|
| DDPM | CIFAR-10 | 9.74 | 192.98 |
| LDM-4-G | ImageNet | 7.36 | 312.12 |
Guide
The cached feature is essential. Replacing it with zeros, so only the shallow path contributes, sends FID from 9.74 to about 193 on CIFAR-10 and from 7.36 to about 312 on ImageNet, meaning the images collapse. This ablation proves the shallow path alone knows nothing useful; the stale deep feature carries the content, supporting the claim behind equation 5.
| Steps | DDIM FID↓ | DeepCache FID↓ | Δ |
|---|---|---|---|
| 50 | 4.67 | 4.35 | -0.32 |
| 20 | 6.84 | 5.73 | -1.11 |
| 10 | 13.36 | 10.38 | -2.98 |
Guide
The shallow passes add real quality on top of DDIM. With the same number of full passes, 50, 20 or 10, DeepCache inserts cheap shallow steps in between and lowers FID by 0.32, 1.11 and 2.98 on CIFAR-10. The fewer full steps, the bigger the help. This is the work count of the section 4.5 equation put into numbers.
| Center | FID↓ | sFID↓ | IS↑ | Prec.↑ | Recall↑ |
|---|---|---|---|---|---|
| c=10 | 8.26 | 8.47 | 160.3 | 75.69 | 48.93 |
| c=20 | 8.17 | 8.46 | 161.18 | 75.77 | 48.95 |
| c=50 | 7.77 | 8.16 | 163.74 | 76.23 | 49.18 |
| c=80 | 7.36 | 7.76 | 166.21 | 76.93 | 49.75 |
| c=100 | 7.16 | 7.51 | 167.52 | 77.30 | 49.64 |
| c=120 | 7.11 | 7.34 | 167.85 | 77.44 | 50.08 |
| c=150 | 7.33 | 7.36 | 166.04 | 77.09 | 49.98 |
| c=200 | 8.09 | 7.79 | 160.50 | 75.85 | 49.69 |
Guide
Tuning the centre c of the non-uniform schedule on ImageNet, with p fixed at 1.2 and N at twenty. FID, lower is better, improves from 8.26 at c of ten to a best of 7.11 at c of 120, then worsens again at 200. So refreshes should cluster around the middle of the 250-step trajectory for this model, consistent with the similarity dip in Figure 2c.
| Power | FID↓ | sFID↓ | IS↑ | Prec.↑ | Recall↑ |
|---|---|---|---|---|---|
| p=1.05 | 7.36 | 7.52 | 166.12 | 77.06 | 50.38 |
| p=1.1 | 7.25 | 7.44 | 166.82 | 77.17 | 50.13 |
| p=1.2 | 7.11 | 7.34 | 167.85 | 77.44 | 50.08 |
| p=1.3 | 7.09 | 7.35 | 167.97 | 77.56 | 50.34 |
| p=1.4 | 7.13 | 7.39 | 167.68 | 77.42 | 50.26 |
| p=1.5 | 7.25 | 7.44 | 166.82 | 77.17 | 50.13 |
Guide
Tuning the power p with c fixed at 120 and N at twenty on ImageNet. FID stays between about 7.1 and 7.4 across all values, with the best near p of 1.2 to 1.3. The takeaway is that p is a gentle knob and the choice of centre c in Table 7 matters more.
| N=2 | N=3 | N=5 | N=10 | N=20 | |
|---|---|---|---|---|---|
| Center c | 120 | 120 | 110 | 110 | 120 |
| Power p | 1.2 | 1.2 | 1.4 | 1.2 | 1.4 |
Guide
The centre and power actually used for the non-uniform results on LDM ImageNet at each interval N. The centre stays at 110 to 120 of 250 steps and the power at 1.2 or 1.4. It is a reference table for reproducing Table 11 rather than a result in itself.
| N=2 | N=3 | N=4 | N=5 | N=6 | N=7 | N=8 | |
|---|---|---|---|---|---|---|---|
| Center c | 15 | 15 | 15 | 10 | 15 | 15 | 10 |
| Power p | 1.5 | 1.3 | 1.4 | 1.5 | 1.3 | 1.4 | 1.4 |
| Center c | 20 | 20 | 20 | 15 | 15 | 15 | 20 |
| Power p | 1.3 | 1.4 | 1.4 | 1.3 | 1.5 | 1.5 | 1.3 |
Guide
The centre and power used for Stable Diffusion, upper rows for PartiPrompts, lower rows for COCO, picked by a small grid search. With fifty PLMS steps the centre falls at ten to twenty and the power at 1.3 to 1.5. The lesson for a new model is that these values must be re-tuned per model and step count, since they differ from the ImageNet ones.
| N | Uni FID | sFID | IS | Prec. | Recall | Non-uni FID | sFID | IS | Prec. | Recall |
|---|---|---|---|---|---|---|---|---|---|---|
| baseline | 3.37* | 5.14 | 204.56 | 82.71 | 53.86 | 3.60 | - | 247.67 | 87.0 | 48.0 |
| 2 | 3.39 | 5.11 | 204.09 | 82.75 | 54.07 | 3.46 | 5.14 | 204.12 | 83.21 | 53.53 |
| 3 | 3.44 | 5.11 | 202.79 | 82.65 | 53.81 | 3.49 | 5.13 | 203.22 | 83.18 | 53.44 |
| 5 | 3.59 | 5.16 | 200.45 | 82.36 | 53.31 | 3.63 | 5.12 | 200.04 | 83.07 | 53.25 |
| 10 | 4.41 | 5.57 | 191.11 | 81.26 | 51.53 | 4.27 | 5.42 | 193.11 | 81.75 | 51.84 |
| 20 | 8.23 | 8.08 | 161.83 | 75.31 | 50.57 | 7.36 | 7.76 | 166.21 | 76.93 | 49.75 |
Guide
Uniform versus non-uniform schedules on ImageNet, side by side at each N. At small intervals the two are nearly equal, with uniform even slightly better in FID. The gap opens at large intervals: at N of twenty, non-uniform brings FID from 8.23 down to 7.36. So the non-uniform schedule matters mainly when caching aggressively. Note the non-uniform baseline row lists the paper's published LDM numbers.
Note: Table 11 lists non-uniform N=20 FID 7.36, while Table 1 lists 7.11 (the best Table 7/8 setting); both are as printed.
| Skip branch | MACs↓ | Throughput↑ | Speed↑ | FID↓ |
|---|---|---|---|---|
| 1 | 1.60G | 29.60 | 3.023× | 7.14 |
| 2 | 2.24G | 22.24 | 2.272× | 5.94 |
| 3 | 3.01G | 18.11 | 1.850× | 5.73 |
| 4 | 3.89G | 15.44 | 1.577× | 5.69 |
| 5 | 4.58G | 13.15 | 1.343× | 5.51 |
| 6 | 5.31G | 11.46 | 1.171× | 4.93 |
| 7 | 5.45G | 11.27 | 1.151× | 4.92 |
| 8 | 5.60G | 11.07 | 1.131× | 4.76 |
| 9 | 5.88G | 10.82 | 1.105× | 4.54 |
| 10 | 5.95G | 10.73 | 1.096× | 4.57 |
| 11 | 5.99G | 10.67 | 1.089× | 4.52 |
| 12 | 6.03G | 10.59 | 1.082× | 4.48 |
Guide
Choosing the skip branch m on CIFAR-10 with N of five. Keeping only branch one gives 3.02 times speed-up but FID 7.14; going deeper improves FID towards the baseline of 4.19 while the speed-up shrinks to about 1.1 times. So m is a second dial next to N, and Chart C shows its shape.
Guide
Chart C plots Table 12 with two lines: speed-up on the left scale and FID on the right, against the skip branch m. Speed falls quickly as m grows while FID improves, with a clear knee around branch six, where FID drops from 5.51 to 4.93. Past that knee extra depth buys little quality and costs speed.
| PLMS steps | Thru. | Speed | CLIP | DC N | Thru. | Speed | Uniform | Non-uniform |
|---|---|---|---|---|---|---|---|---|
| 50 | 0.230 | 1.00 | 29.51 | 1 | - | - | - | - |
| 45 | 0.251 | 1.09 | 29.40 | 2 | 0.333 | 1.45 | 29.54 | 29.51 |
| 40 | 0.307 | 1.34 | 29.35 | 3 | 0.396 | 1.72 | 29.50 | 29.59 |
| 35 | 0.333 | 1.45 | 29.24 | 4 | 0.462 | 2.01 | 29.53 | 29.57 |
| 30 | 0.384 | 1.67 | 29.24 | 5 | 0.494 | 2.15 | 29.41 | 29.50 |
| 25 | 0.470 | 2.04 | 29.32 | 6 | 0.529 | 2.30 | 29.30 | 29.46 |
| 20 | 0.538 | 2.34 | 29.15 | 7 | 0.555 | 2.41 | 29.11 | 29.42 |
| 15 | 0.664 | 2.89 | 28.58 | 8 | 0.582 | 2.53 | 28.97 | 29.26 |
Guide
The exact numbers behind Figure 6 for PartiPrompts. Left, PLMS with fewer steps: at 2.04 times, 25 steps, CLIP drops to 29.32. Right, DeepCache with interval N: at 2.15 times, N of five, CLIP stays at 29.41 uniform and 29.50 non-uniform, against 29.51 for the full model. At every comparable speed, the non-uniform DeepCache column is highest.
| PLMS steps | Thru. | Speed | CLIP | DC N | Thru. | Speed | Uniform | Non-uniform |
|---|---|---|---|---|---|---|---|---|
| 50 | 0.237 | 1.00 | 30.24 | 1 | - | - | - | - |
| 45 | 0.252 | 1.06 | 30.14 | 2 | 0.356 | 1.50 | 30.31 | 30.37 |
| 40 | 0.306 | 1.29 | 30.19 | 3 | 0.397 | 1.68 | 30.33 | 30.34 |
| 35 | 0.352 | 1.49 | 30.09 | 4 | 0.448 | 1.89 | 30.28 | 30.31 |
| 30 | 0.384 | 1.62 | 30.04 | 5 | 0.500 | 2.11 | 30.19 | 30.23 |
| 25 | 0.453 | 1.91 | 29.99 | 6 | 0.524 | 2.21 | 30.04 | 30.18 |
| 20 | 0.526 | 2.22 | 29.82 | 7 | 0.555 | 2.34 | 29.90 | 30.10 |
| 15 | 0.614 | 2.59 | 29.39 | 8 | 0.583 | 2.46 | 29.76 | 30.02 |
Guide
The COCO counterpart of Table 13. Reducing PLMS steps to 25 gives 1.91 times at CLIP 29.99, while DeepCache at N of five gives 2.11 times at 30.19 uniform and 30.23 non-uniform, against 30.24 for the full model. At small N, DeepCache even scores marginally above the baseline. The same conclusion holds on a second prompt set.
§7Why it matters for this thesis
DeepCache → LTX-2.3 on OpenVINO / NNCF
- Orthogonal to quantization and needs no calibration. Caching changes the sampling loop, not the weights, so it stacks on top of NNCF int8/int4 weight compression. But errors compound (quantization noise plus stale features): measure the combination, not each part alone.
- Recipe does not transfer literally. LTX-2 is a DiT, a flat stack of transformer blocks with residual adds and no U-Net long skips, so there is no ‘cheap shallow branch’. The DiT counterpart is caching the residual of a block span (FORA / Δ-DiT style) or of the whole model with an adaptive trigger (TeaCache-style). Speed-up ≈ share of blocks skipped × share of steps that are retrieve steps.
- OpenVINO feasibility: pure pipeline work, no custom kernels. Export the transformer as two or three IR sub-models (first blocks, middle span, last blocks), or one model that also outputs the residual. The Python loop then decides per step whether to run the middle span or add the cached residual. Keeping the cache tensor on the device (Arc GPU remote tensors) avoids host copies. A video latent has many tokens, so the cache can take hundreds of MB, which matters on CPU/iGPU memory.
- Few-step regimes cut the gain. DeepCache shines at 50–250 steps. The distilled LTX variants use only a handful of steps, and adjacent-step similarity drops as steps get farther apart. Expect caching to help mainly the full (non-distilled) multi-step model, and use a non-uniform schedule (Eq. 7 idea: refresh more often where features change fastest).
- Evaluation to copy. Run speed-vs-quality sweeps over N (Tables 13–14) against the ‘just use fewer steps’ baseline (Fig. 6). For video, add temporal-consistency metrics (e.g. FVD, CLIP score per frame) and an audio check, since stale features may show up as flicker.
Guide
Treat caching as a separate layer on top of NNCF weight compression, and measure the two together, since quantization noise and stale features add up. For LTX-2.3, cache the residual of a middle span of transformer blocks, or the whole model output TeaCache-style, by exporting the model as two or three OpenVINO sub-models and letting the Python loop decide per step. Watch cache memory on CPU and Arc, expect little gain on the few-step distilled model, and compare against simply using fewer steps.
Timestep Embedding Tells: It’s Time to Cache for Video Diffusion Model
Consecutive denoising steps of a video DiT often produce almost the same output, so some steps can simply reuse the previous result. TeaCache decides which steps to skip by watching a cheap signal, how much the timestep-modulated input changed, rescales it with a small polynomial, and skips until the accumulated change crosses a threshold. No training; it works alongside quantization.
- Type
- Training-free step caching
- Best speed-up
- 4.41× (−0.07 VBench)
- Max speed-up
- 6.83× OpenSora-Plan
- Latte / Open-Sora
- 1.86× / 1.55× lossless
- Knobs
- δ = 0.1 / 0.2 · poly order
- Overhead
- 1 modulation + 1 L1 norm / step
Reading guide
TeaCache asks a simple question: if consecutive denoising steps of a video diffusion transformer give almost the same output, can we skip some of them without training anything? The answer is yes, as long as the steps to skip are chosen from a cheap signal, the change in the timestep-modulated input, rescaled by a small polynomial and summed until it crosses a threshold. The tab starts with the big picture and the problem of fixed skipping, then walks through the method, every equation, every figure, the results tables, and a thesis box on LTX-2.3. Headline numbers are 1.86 times faster on Latte and 1.55 times on Open-Sora with no VBench loss, and up to 4.41 times on OpenSora-Plan for a loss of 0.07 points. Among the sixteen papers it is the last of the acceleration group, after FlashAttention-2 and DeepCache, and just before VBench. It cuts how often the model runs, so it stacks with int8 or int4 weights.
§0Before reading
Following TeaCache takes three ideas: a diffusion model makes a video by running the whole transformer once per denoising step, the timestep reaches every block through a small scale-and-shift, and "how much a tensor changed" can be measured with one ratio. The paper is in the atlas because it does not make each step cheaper. It skips whole steps, and that stacks with the int8/int4 weights from the quantization papers.
Guide
A diffusion model does not make a video in one go. It starts from pure noise and cleans it a little at a time, and every one of those steps runs the whole diffusion transformer once. Read the picture left to right: noise at the top left, a clean video on the right, one DiT pass under each arrow. The frames in the middle barely differ from their neighbours, and that redundancy is exactly what TeaCache turns into skipped passes.
Guide
The timestep number reaches the transformer in a specific way. It becomes a vector through sinusoidal features and a small MLP, and that vector sets a scale called gamma and a shift called beta. These are applied to the normalised video tokens before attention, which is called adaptive LayerNorm modulation. The result of the first modulation, F sub t, is cheap and reflects both content and noise level, so TeaCache watches it instead of the expensive output.
Guide
To decide whether a step is worth computing, TeaCache needs one number for how much things changed. The relative L1 distance adds up the absolute differences element by element and divides by the total size of the previous tensor. In the toy example the differences sum to 0.6 and the previous values to 6, so the change is ten percent. Small values mean reuse the cache, large values mean run the model again.
Guide
Every paper before this one either made each transformer pass cheaper, like the quantization methods, or sped up one part of it, like FlashAttention-2, or reused features inside a U-Net, like DeepCache. TeaCache skips entire transformer passes and decides when from the input side. VBench, next in the atlas, explains the quality score it reports. For the thesis the key point is that quantization and caching are independent, so their savings multiply on LTX-2.3.
Terms used in this paper
- Denoising (sampling) step
- One iteration of the sampler that removes a bit of noise from the latent video. Each step calls the full model once; Latte uses 50, Open-Sora 30 and OpenSora-Plan 150 in this paper.
- DiT (diffusion transformer)
- The denoising network built from transformer blocks (attention plus feed-forward) instead of a U-Net. LTX-2.3 is one.
- Timestep embedding
- The vector made from the step number \(t\) (sinusoidal features, then an MLP). It tells every block how noisy the input is.
- adaLN modulation
- Adaptive LayerNorm: normalise the tokens, then scale and shift them with values computed from the timestep embedding. TeaCache's indicator is the output of the first one.
- Relative L1 distance
- Sum of absolute differences between two tensors divided by the sum of absolute values of the reference one. A unit-free "percentage change".
- Residual caching
- Storing "output minus input" of the whole transformer stack at a computed step, and adding it to the fresh input on skipped steps.
- Threshold \(\delta\)
- How much accumulated change is tolerated before recomputing. The paper's "slow" setting uses 0.1 (higher quality), "fast" uses 0.2 (more skipping).
- PAB, Δ-DiT, T-GATE
- Earlier training-free caching methods, the baselines here. They reuse attention outputs or block features on a fixed schedule rather than deciding per step.
- Open-Sora 1.2, OpenSora-Plan, Latte
- Open-source text-to-video diffusion transformers used as test models. None of them is LTX; the method must be re-fitted per model.
- NVIDIA A800
- A data-centre GPU of the Ampere generation, essentially an A100 with reduced GPU-to-GPU link bandwidth; the 80 GB version is used here. It is far faster than an Intel CPU, so compare speed-up ratios, not seconds.
- VBench
- A benchmark that scores generated videos on many quality and consistency dimensions without needing a reference video. Higher is better; paper 16 of the atlas.
- LPIPS, PSNR, SSIM
- Reference-based metrics: they compare the cached video with the uncached one. Lower LPIPS, higher PSNR and SSIM mean closer to the original.
- Dynamic Sequence Parallelism
- A way to split one video's tokens across several GPUs, switching the split between spatial and temporal layers. Used in Table 4 to show caching stacks with multi-GPU runs.
Guide
These are the terms the paper assumes. The most important ones are the denoising step, the timestep embedding and its adaptive LayerNorm modulation, the relative L1 distance and the threshold delta that controls how much is skipped. Also note the two kinds of quality metric: VBench judges a video on its own, while LPIPS, PSNR and SSIM measure how close the cached video stays to the uncached one. All timings are on an NVIDIA A800, a data-centre GPU.
§1Big picture
Guide
Every sampler step is kept, but the expensive transformer only runs when the input has drifted enough. On the left, the baseline runs six full passes for six steps, while TeaCache runs three and patches the other three by adding a cached residual. On the right, one step zoomed in: a cheap indicator from the first block's modulation feeds a running sum, and if the sum is below the threshold the step costs almost nothing. The rest of the tab explains each box.
Quantization makes each DiT pass cheaper; TeaCache runs fewer passes. The decision comes from the input side, so it costs almost nothing.
§2The problem
Guide
A fixed reuse pattern fails in both directions. The curve is the output change between consecutive steps, a schematic U shape like Open-Sora's. Uniform every-other-step caching reuses stale outputs at the start and end, the magenta points where the output moves fast, yet still recomputes in the flat middle where three or four skips in a row would be safe. The note at the bottom adds the second problem: the true output change is only known after running the model, so a cheaper proxy is needed.
- Sampling is sequential: 30–150 full DiT passes per video.
- Earlier caches (PAB, Δ-DiT, T-GATE) reuse on a fixed schedule, but how much the output changes varies a lot from step to step (Fig. 3).
- The ideal criterion (output change, Eq. 4) needs the output, which is the expensive part. What is needed is a predictor that is available before running the model.
- Just using fewer sampler steps is worse: it coarsens αt (Fig. 6).
§3Method
- Pick the indicator. Text embedding is constant; the raw noisy input barely changes; the timestep embedding ignores content. Use the timestep-embedding-modulated noisy input Ft at the first block (Fig. 4, Table 2).
- Measure change. Compute L1rel(F, t) against the previous step (Eq. 4).
- Rescale. Map it to an estimated output change with a polynomial f fitted offline (Eq. 6, Fig. 5, Table 3).
- Accumulate and compare. Add f(·) to a running sum; while sum ≤ δ reuse, otherwise compute and reset (Eq. 7).
- Reuse the residual. Cache output − input of the DiT stack; on a skipped step add it to the fresh input (§3.4).
Guide
The method is a chain of five decisions. First choose an indicator that is cheap yet tracks the output: the timestep-modulated noisy input at the first block wins over the text embedding, the raw input, and the timestep embedding alone. Then measure its relative change from the previous step, correct that number with an offline-fitted polynomial, and add it to a running sum. When the sum crosses the threshold delta, run the full model and reset; otherwise reuse the cached residual, output minus input.
Guide
Skipping is decided by a sawtooth. Gold bars are the rescaled input change at each step, and the indigo line is the running sum since the last computed step, with a threshold delta of 0.1. While the sum stays below the line the step reuses the cache; when it reaches 0.1 the model runs and the sum drops to zero. The toy numbers show the key behaviour: small changes in the middle give long reuse streaks, while large changes near the end force a compute at every step. This is equation 7 in action.
Guide
TeaCache stores a residual, not a finished output. After a computed step it keeps one tensor, the transformer stack's output minus its input. On a skipped step the sampler has already updated the input, so adding the old residual to this fresh input gives a new output that still moves along the trajectory. That is why skipping with TeaCache differs from simply dropping a step, which figure 6 shows costs much more quality. The second implementation equation writes this as a formula.
poly1d). δ is then tuned on top: 0.1 “slow”, 0.2 “fast”.Guide
The polynomial that rescales the indicator is fitted once per model, offline. The model runs without caching on seventy prompts from T2V-CompBench, record pairs of input change and output change for every consecutive step, and fit a low-order polynomial with numpy. The coefficients are then hard-coded, and at inference the only extra work is evaluating that polynomial on one number per step. The threshold delta is chosen afterwards, 0.1 for the slow setting and 0.2 for the fast one.
Guide
The whole method fits in a normal sampling loop; the paper has no algorithm box, so this is reconstructed from its sections three point three and three point four. Each step computes the cheap timestep embedding and the first block's modulated input, then updates the accumulated rescaled change. The first step is always computed. If the sum has reached delta, all transformer blocks run, the residual is cached and the sum resets; otherwise the cached residual is added to the input. Either way the sampler takes its normal step, so the schedule is untouched.
§4Every equation
Forward diffusion: each step shrinks the signal by \(\sqrt{\alpha_t}\) and adds Gaussian noise \(\mathbf{z}_t\sim\mathcal{N}(\mathbf{0},\mathbf{I})\); \(\alpha_t\in[0,1]\).
Guide
Equation 1 is the forward diffusion process that adds noise. x t, the sample at step t, equals the square root of alpha t times the previous sample x t minus one, plus the square root of one minus alpha t times fresh Gaussian noise z t. Alpha t is between zero and one and sets how much signal survives each step. TeaCache does not change this; it is background for the reverse loop in equation 2.
Reverse (denoising) step: the network predicts mean \(\mu_\theta\) and covariance \(\Sigma_\theta\). This is the sequential loop TeaCache shortens.
Guide
Equation 2 is the reverse, denoising step. p theta of x t minus one given x t is a Gaussian whose mean mu theta and covariance sigma theta are predicted by the network from the current sample x t and the step t. Generation repeats this step many times in sequence, and each repetition is one full transformer pass. That sequential loop is exactly the cost TeaCache shortens by reusing work between neighbouring steps.
Timestep embedding: scalar \(t\) → sinusoidal features → MLP. It produces the shift/scale that modulates every block (Fig. 4).
Guide
Equation 3 builds the timestep embedding. The scalar step t is turned into sinusoidal features, then passed through a small MLP to give the vector T t. This vector produces the scale and shift that modulate every transformer block, as figure 4 shows. It is cheap to compute, which is why TeaCache can afford to look at it, and at the input it modulates, at every step.
Relative L1 change of a tensor between consecutive steps (\(t+1\) is the previous, noisier step). Large → new information, must compute; small → reuse. Applied to outputs \(\mathbf{O}\) (ideal, unavailable) or to inputs \(\mathbf{F}\) (cheap).
Guide
Equation 4 measures how much a tensor changed between steps. The relative L1 distance of O at step t is the L1 norm of O t minus O t plus one, divided by the L1 norm of O t plus one, where t plus one is the previous, noisier step. A large value means new information, so the model should run; a small value means the output could be reused. Applied to outputs it is the ideal but unavailable criterion; TeaCache applies it to the cheap input F instead.
Naive rule: after computing at \(t_a\), keep reusing while the accumulated input change stays \(\le\delta\); the first step \(t_b\) where it exceeds \(\delta\) is recomputed and the sum reset. \(\mathbf{F}\) = timestep embedding or modulated noisy input.
Guide
Equation 5 is the naive skipping rule. After computing at step t a, keep summing the relative input change from equation 4; while the sum up to the step before t b stays at or below delta, reuse. The first step t b where the sum exceeds delta is recomputed, and the sum restarts. F here is the timestep embedding or the modulated noisy input. The flaw is that input change and output change are on different scales, which equation 6 fixes.
Rescaling polynomial: \(x\) = input difference (modulated noisy input), \(y\) = estimated output difference. Fitted offline with numpy; removes the scaling bias of Fig. 5.
Guide
Equation 6 is the rescaling polynomial. y equals f of x, which is a zero plus a one times x plus a two times x squared, and so on up to a n times x to the n. Here x is the measured change in the modulated input and y is the estimated change in the output. The coefficients a zero to a n are fitted offline, as in the fitting diagram, and they remove the scaling bias visible in figure 5. Table 3 shows first order already captures most of the gain.
Final TeaCache indicator = Eq. 5 with each term rescaled by \(f\). \(\delta=0.1\) (slow), 0.2 (fast); Fig. 1 also uses 0.15, 0.25.
Guide
Equation 7 is the final TeaCache rule: equation 5 with every term passed through the polynomial f first. So the running sum is of estimated output changes, not raw input changes, and a step is recomputed the moment that sum exceeds delta. Delta is the only knob users turn: 0.1 is the slow, near-lossless setting and 0.2 the fast one, with 0.15 and 0.25 also shown in figure 1.
Not displayed in the paper — Fig. 4 in formula form: the noisy-input tokens after the first block’s adaLN scale \(\gamma\) and shift \(\beta\). This is the tensor \(\mathbf{F}\) fed to Eq. 4.
Guide
This formula is not printed in the paper; it writes figure 4 as an equation. F t, the indicator, equals one plus gamma of T t, multiplied element by element with the layer-normalised input tokens h in, plus beta of T t. Gamma and beta are the first block's adaptive layer norm scale and shift, both computed from the timestep embedding. This F t is the tensor whose relative change goes into equation 4, and it costs only one modulation layer to get.
Not displayed in the paper — §3.4 in formula form: on a skipped step the cached residual (output minus input) of the last computed step is added to the current input.
Guide
This formula is also not printed in the paper; it restates section three point four. On a skipped step t between t a and t b, the output h out at t is approximated by the current input h in at t plus the residual saved at the last computed step, h out at t a minus h in at t a. Because the fresh input enters the sum, the output keeps moving with the sampler, which is why caching loses less than dropping steps.
§5Every figure
Guide
TeaCache beats the earlier cache method PAB at every latency, on every quality measure. Each panel plots latency in seconds against quality, VBench on the left and one minus LPIPS on the right, for Latte on one A800 GPU. TeaCache points are thresholds 0.25 down to 0.1 from left to right; the grey square is the full model at 26.9 seconds. Even the fastest TeaCache point, 8.2 seconds, sits near or above PAB's slower settings. The middle points were read off the plot and are approximate.
Guide
Uniform caching alternates computed and reused steps no matter what the model is doing, while TeaCache adapts. Solid boxes are steps where the model runs and the cache is refreshed; dashed teal boxes reuse it. Between t a and t b TeaCache reuses four steps in a row, because the rescaled input changes add up to less than delta, then recomputes at t b when the sum crosses it. This is the paper's opening picture of the idea formalised in equation 7.
Guide
The modulated input follows the output's rhythm; the raw noisy input does not. Each panel plots the relative L1 change between consecutive steps against progress through sampling, for Open-Sora, Latte and OpenSora-Plan. The output change is U-shaped in Open-Sora and a flipped L in the other two, with zig-zags in OpenSora-Plan because its scheduler repeats some timesteps. The timestep embedding and modulated input track that shape while the raw input stays near zero. This justifies the indicator choice, confirmed in table 2.
Guide
The timestep embedding scales and shifts the input of every sub-layer, which is why the modulated input is a good cheap proxy for the output. The diagram is a generic video transformer block: T t produces shift, scale and gates for self-attention, cross-attention with text, and the feed-forward layer. TeaCache taps the first modulation, before any attention runs, as its indicator F t. The model output then updates x t through equation 2. For LTX-2.3, this tap point must be exposed in the exported graph.
Guide
Polynomial rescaling pulls the input estimate onto the true output change. Each dot is one pair of consecutive steps, input change on the x axis and output change on the y axis, both on log scales, for three models. Raw input differences sit off the diagonal, a systematic scaling bias. After fitting the polynomial from equation 6 the dots hug the line y equals x, with second and fourth order only slightly tighter than first. The points are schematic; the axes follow the paper.
Guide
With the same compute budget, caching beats cutting steps. Halving Open-Sora's thirty steps to fifteen coarsens the noise schedule and drops VBench from 79.22 to 77.34, and the frames look washed out and blurred. TeaCache keeps all thirty scheduler steps but skips half the transformer passes, scoring 78.88 with detail kept. The frames are described schematically. The lesson for a CPU pipeline: skip model passes, not sampler steps.
Guide
TeaCache is both faster than PAB and visually closer to the original video. Each row is one model, each column one method, and every cell gives the measured latency on one A800 and what the frames look like. On Latte, PAB takes about 20 seconds and smears the stars, while TeaCache takes 14.46 seconds and looks like the original. On OpenSora-Plan TeaCache is 4.41 times faster and still close. The frames are schematic descriptions of the paper's samples.
Guide
The speed-up holds for longer, higher-resolution videos and stacks with multi-GPU parallelism. The teal bar is the original model on one GPU; indigo bars are TeaCache on one, two, four and eight A800s with dynamic sequence parallelism, with the speed-up under each bar. On one GPU TeaCache gives about 1.5 to 1.66 times at every size, and with eight GPUs the 192-frame video goes from 188.87 seconds to 14.41, about 13 times faster. Multi-GPU matters less for a single Intel machine.
§6Results
| Method | FLOPs (P) ↓ | Speed-up ↑ | Latency (s) ↓ | VBench ↑ | LPIPS ↓ | SSIM ↑ | PSNR ↑ |
|---|---|---|---|---|---|---|---|
| Latte (16 frames, 512×512) | |||||||
| Latte (T = 50) | 3.36 | 1× | 26.90 | 77.40% | – | – | – |
| Δ-DiT | 3.36 | 1.02× | – | 52.00% | 0.8513 | 0.1078 | 8.65 |
| T-GATE | 2.99 | 1.13× | – | 75.42% | 0.2612 | 0.6927 | 19.55 |
| PAB-slow | 2.70 | 1.21× | 22.16 | 76.32% | 0.2669 | 0.7014 | 19.71 |
| PAB-fast | 2.52 | 1.34× | 19.98 | 73.13% | 0.3903 | 0.6421 | 17.16 |
| TeaCache-slow | 1.86 | 1.86× | 14.46 | 77.40% | 0.1901 | 0.7786 | 22.09 |
| TeaCache-fast | 1.12 | 3.28× | 8.20 | 76.69% | 0.3133 | 0.6678 | 18.62 |
| Open-Sora 1.2 (51 frames, 480P) | |||||||
| Open-Sora 1.2 (T = 30) | 3.15 | 1× | 44.56 | 79.22% | – | – | – |
| Δ-DiT | 3.09 | 1.03× | – | 78.21% | 0.5692 | 0.4811 | 11.91 |
| T-GATE | 2.75 | 1.19× | – | 77.61% | 0.3495 | 0.6760 | 15.50 |
| PAB-slow | 2.55 | 1.33× | 33.40 | 77.64% | 0.1471 | 0.8405 | 24.50 |
| PAB-fast | 2.50 | 1.40× | 31.85 | 76.95% | 0.1743 | 0.8220 | 23.58 |
| TeaCache-slow | 2.40 | 1.55× | 28.78 | 79.28% | 0.1316 | 0.8415 | 23.62 |
| TeaCache-fast | 1.64 | 2.25× | 19.84 | 78.48% | 0.2511 | 0.7477 | 19.10 |
| OpenSora-Plan (65 frames, 512×512) | |||||||
| OpenSora-Plan (T = 150) | 11.75 | 1× | 99.65 | 80.39% | – | – | – |
| Δ-DiT | 11.74 | 1.01× | – | 77.55% | 0.5388 | 0.3736 | 13.85 |
| T-GATE | 2.75 | 1.18× | – | 80.15% | 0.3066 | 0.6219 | 18.32 |
| PAB-slow | 8.69 | 1.36× | 73.41 | 80.30% | 0.3059 | 0.6550 | 18.80 |
| PAB-fast | 8.35 | 1.56× | 65.38 | 71.81% | 0.5499 | 0.4717 | 15.47 |
| TeaCache-slow | 3.13 | 4.41× | 22.62 | 80.32% | 0.2145 | 0.7414 | 21.02 |
| TeaCache-fast | 2.06 | 6.83× | 14.60 | 79.72% | 0.3155 | 0.6589 | 18.95 |
Guide
Table 1 is the main result, comparing TeaCache with three training-free accelerators, Delta-DiT, T-GATE and PAB, on three video models. Read FLOPs, speed-up and latency for cost, then VBench for quality and LPIPS, SSIM and PSNR for closeness to the uncached video. The winning rows are TeaCache-slow: 1.86 times faster on Latte with identical VBench, 1.55 times on Open-Sora, and 4.41 times on OpenSora-Plan. TeaCache-fast trades some fidelity for 2.25 to 6.83 times speed-up.
Guide
Table 1 in one picture: TeaCache-slow is faster than PAB-fast and loses no VBench. Bars are speed-ups over the full model, grouped by video model, and the small numbers underneath are VBench changes in points. PAB-fast loses up to 8.58 points on OpenSora-Plan, while TeaCache-slow changes by less than a tenth of a point everywhere. The big OpenSora-Plan jump comes from its 150-step schedule, which has many near-duplicate steps, so fewer-step models like LTX will see smaller gains.
Guide
Caching multiplies with sequence parallelism. Each panel plots speed-up over the one-GPU baseline against the number of A800 GPUs, for the baseline, PAB and TeaCache. TeaCache stays on top at every GPU count, reaching 13.1 times on Open-Sora and 32 times on OpenSora-Plan with eight GPUs. The point is that caching and parallelism attack different costs, much as caching and quantization do in the thesis.
| Indicator | VBench ↑ | LPIPS ↓ | SSIM ↑ | PSNR ↑ |
|---|---|---|---|---|
| OpenSora (full) | 79.22% | – | – | – |
| Timestep | 77.01% | 0.3425 | 0.6934 | 15.86 |
| Input | 78.21% | 0.2549 | 0.7457 | 19.05 |
| Latte (full) | 77.40% | – | – | – |
| Timestep | 77.05% | 0.2653 | 0.7073 | 19.76 |
| Input | 77.17% | 0.2558 | 0.7164 | 20.00 |
Guide
Table 2 is the ablation that picks the indicator. It compares the timestep embedding alone with the timestep-modulated noisy input, labelled Input, measured against the full model. The modulated input wins on every metric for both models, most clearly on Open-Sora: VBench 78.21 against 77.01 and PSNR 19.05 against 15.86. This backs the choice made in figure 8 and the method steps.
| Order | VBench ↑ | LPIPS ↓ | SSIM ↑ | PSNR ↑ |
|---|---|---|---|---|
| OpenSora (full) | 79.22% | – | – | – |
| Original (no rescale) | 78.21% | 0.2549 | 0.7457 | 19.05 |
| 1-order | 78.45% | 0.2517 | 0.7478 | 19.10 |
| 2-order | 78.48% | 0.2513 | 0.7477 | 19.09 |
| 4-order | 78.48% | 0.2511 | 0.7477 | 19.10 |
Guide
Table 3 tests how complex the rescaling polynomial must be, on Open-Sora. Without rescaling VBench is 78.21; a first-order fit raises it to 78.45, and second or fourth order reach 78.48, with LPIPS, SSIM and PSNR barely moving. So rescaling helps, and a low-order polynomial is enough. For LTX-2.3 a first or second order refit is a sensible default.
| Method | 1 × A800 | 2 × A800 | 4 × A800 | 8 × A800 |
|---|---|---|---|---|
| Open-Sora (192 frames, 480P) | ||||
| Baseline | 188.87 (1×) | 72.86 (2.59×) | 39.26 (4.81×) | 22.18 (8.52×) |
| PAB | 142.23 (1.33×) | 53.74 (3.51×) | 29.19 (6.47×) | 16.88 (11.19×) |
| TeaCache | 114.01 (1.66×) | 47.03 (4.02×) | 24.64 (7.67×) | 14.41 (13.10×) |
| Open-Sora-Plan (221 frames, 512×512) | ||||
| Baseline | 324.41 (1×) | 166.94 (1.94×) | 88.18 (3.68×) | 47.79 (6.79×) |
| PAB | 207.70 (1.56×) | 110.06 (2.95×) | 58.07 (5.59×) | 31.92 (10.16×) |
| TeaCache | 48.22 (6.73×) | 26.99 (12.02×) | 15.91 (20.39×) | 10.13 (32.02×) |
Guide
Table 4 gives the raw latencies behind chart B, in seconds with speed-up over the one-GPU baseline in brackets. TeaCache is fastest at every GPU count on both models. On OpenSora-Plan with 221 frames it cuts one-GPU latency from 324.41 seconds to 48.22, already 6.73 times faster before any parallelism, and reaches 32.02 times with eight GPUs. The single-GPU column is the one relevant to a one-machine Intel setup.
- At δ = 0.1 (slow), VBench equals or beats the full model on Latte and Open-Sora and is within 0.07 points on OpenSora-Plan.
- The modulated input beats the timestep embedding as an indicator (Table 2); it also adapts per prompt, whereas the timestep embedding picks the same steps for every prompt.
- Rescaling adds +0.24 VBench (1st order); higher orders help very little (Table 3).
- PSNR/SSIM drop at δ = 0.2: the video stays plausible but drifts from the uncached reference.
§7Why it matters for this thesis
TeaCache on LTX-2.3 with OpenVINO / NNCF
- The biggest latency win on CPU, and it stacks. One LTX DiT step on an Intel CPU can take minutes, so skipping 40–50 % of steps saves more wall-clock time than int8 vs. int4 kernels do. It works independently of weight-only int8/int4 (NNCF), so the thesis can report quantization, caching, and both combined as separate ablations.
- No custom kernels, just control flow. Everything happens in the Python denoising loop (e.g. an optimum-intel / OpenVINO GenAI-style pipeline). Two things are needed in the exported graph: (a) the first block’s modulated input Ft as an extra output, or a tiny separate IR that computes it; (b) access to the pre-block hidden state and the post-block hidden state so the residual can be cached and added. In practice this means splitting the IR into
embed+mod|blocks|head. Only standard ops are involved (Abs, ReduceMean, Sub, Add). - Recalibrate the polynomial. The coefficients are model-specific. Published TeaCache ports exist for LTX-Video (the TeaCache repo ships an LTX-Video variant), but LTX-2.3 has a different architecture and schedule, and after int4 quantization the input/output change curves can shift. Refit f on the quantized model: run about 20–70 prompts without caching, log (L1rel(F), L1rel(O)) per step, then
np.polyfit. This is cheap compared with NNCF calibration. - LTX-2 specifics to handle. Classifier-free guidance doubles the passes, so decide once per step for both branches. The audio-video joint model has two token streams, so measure F on the video stream (or both) and cache both residuals. With a few-step distilled checkpoint (about 8 steps) there is little redundancy left, so expect small gains and use a conservative δ.
- Evaluation. Report speed-up vs. δ together with VBench-style / CLIP scores and PSNR/SSIM against the uncached output (the paper shows these diverge at δ = 0.2). Memory cost is one hidden-state tensor per stream, which is negligible next to the weights.
Guide
Treat caching as a separate ablation next to NNCF quantization: report quantization alone, caching alone, and both together, since skipping transformer passes likely saves more CPU time than int8 versus int4 kernels. To implement it, split the OpenVINO model into embedding plus modulation, the block stack, and the head, so the loop in Python can read F t and cache the residual. Refit the polynomial on the quantized LTX-2.3 with a few dozen uncached prompts, decide once per step for both guidance branches and both audio and video streams, and use a conservative delta on a distilled few-step checkpoint.
VBench: Comprehensive Benchmark Suite for Video Generative Models
Instead of one number like FVD, VBench splits “is this generated video good?” into 16 separate scores. Each score has its own prompt set (~100 prompts) and its own off-the-shelf judge model (DINO, CLIP, RAFT, AMT, MUSIQ, LAION aesthetic, GRiT, UMT, Tag2Text, ViCLIP). Human pairwise preferences confirm that every score ranks models the way people do.
- Dimensions
- 16 (7 quality + 9 condition)
- Prompts
- ~100 per dim + 8×100 per category
- Human pairs
- N × 5 × 6 per dimension
- Human alignment
- Spearman ρ 0.61–0.998
- Models tested
- LaVie, ModelScope, VideoCrafter, CogVideo
- Output
- scores in [0,1] (shown as %)
Reading guide
VBench asks a simple question: how can one tell whether a generated video is good, and in what way? Its answer is to replace one opaque number like FVD with sixteen separate scores, each with its own small prompt set and its own off-the-shelf judge network, and to check every score against human votes. The tab starts with the big picture and the problem, then walks through the method one dimension at a time, lists every equation, redraws every figure, and ends with the results tables and a box on how to use VBench in the thesis. VBench is the sixteenth and last paper in the atlas and the only one about evaluation. The other fifteen describe the model and how to make it cheaper; VBench is the ruler that shows the cheaper model still makes good video.
§0Before reading
VBench does not generate or compress anything: it measures generated video. Following it takes three ideas: a pretrained network can turn a frame into a feature vector compared by angle, optical flow measures how much things move between frames, and a rank correlation shows whether a metric orders models the way people do. It is in the atlas because the thesis must prove that the compressed LTX-2.3 still makes good video, and VBench is the ruler for that.
Guide
A pretrained network like DINO or CLIP turns each video frame into a long list of numbers, a vector. Frames that show the same thing give vectors pointing in almost the same direction, so their cosine similarity is close to one. VBench's subject and background consistency scores are simply averages of these cosines across the frames, and CLIP can also compare a frame with a sentence.
Guide
Optical flow is a field of arrows saying how far each pixel moved between two frames, and VBench estimates it with a network called RAFT. If the largest arrows are big, the clip is moving; if they are near zero, it is frozen. Dynamic degree is the share of clips that move, and it matters because a frozen video would look perfectly consistent on the other scores.
Guide
People judge two videos side by side on one dimension, and each model's win ratio is the share of comparisons it won, with a tie counting as half. Spearman's rank correlation then asks whether VBench orders the models the same way humans do. One means the same order, zero means no relation. In the toy example a single swap gives zero point eight.
Guide
The first fifteen papers in the atlas cover the model, how to quantize it and how to speed it up, ending with TeaCache. VBench is the last paper and the only one about evaluation. It gives the scorecard to compare full precision LTX-2.3 with its int8 or int4 version, dimension by dimension, on the same prompts and seeds.
Terms used in this paper
- Text-to-video (T2V) model
- A generator that turns a text prompt into a short clip. VBench tests LaVie, ModelScope, VideoCrafter and CogVideo; LTX-2.3 is one too.
- FVD, FID, IS
- Older one-number metrics that compare feature statistics of generated and real media. They give no diagnosis of what went wrong, which is VBench's motivation.
- Dimension
- One narrowly defined quality, like Temporal Flickering or Object Class. VBench has 16, split into Video Quality and Video-Condition Consistency.
- Prompt suite
- The small, purpose-built set of prompts (about 100) used to test one dimension, plus a set sorted into eight content categories.
- CLIP
- A model that embeds images and text in one shared space, so a frame and a sentence can be compared by cosine similarity.
- DINO
- A self-supervised image model whose features are sensitive to object identity; VBench uses it to check the subject stays the same.
- ViCLIP, UMT
- Video models that look at many frames together. ViCLIP scores camera-motion style and overall prompt match; UMT recognises human actions.
- Optical flow (RAFT)
- A per-pixel motion field between two frames. RAFT is the estimator VBench uses for Dynamic Degree.
- Frame interpolation (AMT)
- A model that predicts an in-between frame. VBench uses its prediction error to score Motion Smoothness.
- MUSIQ, LAION aesthetic
- Per-frame image scorers: MUSIQ rates low-level quality (noise, blur, exposure), the LAION predictor rates beauty on a 0 to 10 scale.
- GRiT, Tag2Text
- GRiT detects and describes objects (used for objects, colour, spatial relations); Tag2Text captions frames to check the scene.
- Win ratio
- The share of human pairwise comparisons a model wins, counting a tie as half a win.
- Spearman's ρ
- A correlation computed on ranks, not values: 1 means two lists order things identically, 0 means no relation.
- A100
- An NVIDIA data-centre GPU. The paper mentions it only for fine-tuning its video language model; the VBench scorers themselves can run on any machine with PyTorch.
Guide
These are the terms the paper uses without explaining. Most are names of the judge networks: CLIP and DINO for frame features, ViCLIP and UMT for whole-clip understanding, RAFT for motion, AMT for frame interpolation, MUSIQ and the LAION predictor for image quality and beauty, GRiT and Tag2Text for objects and scenes. Win ratio and Spearman's rho are how the paper checks it agrees with people.
§2Big picture
Guide
One opaque score becomes sixteen explainable ones. On the left, metrics like FVD, IS or CLIPSIM give a single number that says nothing about why a model is good or bad, and it often disagrees with people. On the right, VBench runs a dedicated prompt suite through the text-to-video model, scores the samples with one judge model per dimension, and checks each dimension against human pairwise preferences. That last check is what lets the scores stand in for human judgement.
Each dimension answers one yes/no-style question (“is the subject the same cat throughout?”, “is the style Van Gogh?”). The two top-level questions: Video Quality — does it look good regardless of the prompt? — and Video-Condition Consistency — is it what the user asked for?
§3The problem
Guide
Consistency and motion pull in opposite directions. The bars compare LaVie and VideoCrafter from Table 1: LaVie wins background consistency and flicker, but its Dynamic Degree is about 50 percent against almost 90 for VideoCrafter. The sketch on the right shows the trap: a frozen clip scores near perfect on consistency and flicker. This is why VBench adds Dynamic Degree as a counterweight and never reports one averaged number.
- IS, FID, FVD, CLIPSIM disagree with human judgement and give no diagnosis.
- Video-quality-assessment models (VQA) were built for real camera footage, not generative artifacts.
- “Quality” means different things to different users (flicker vs. prompt fidelity) — needs disentangling.
- T2V sampling is slow (LaVie ~90 s, CogVideo >2 min per video) → test set must be compact (~100 prompts / dim).
§4Method
Guide
Here is the whole dimension tree, with the judge behind each leaf. Teal branches are Video Quality, seven dimensions that ignore the prompt and ask whether the video looks good. Gold branches are Video-Condition Consistency, nine dimensions that ask whether the video matches what was requested. The small mono labels name the evaluation model for each leaf, such as DINO for subject consistency, RAFT for dynamic degree and GRiT for object detection. The method section below explains each leaf in turn.
- Prompt Suite per Dimension: ~100 prompts designed to probe exactly one ability (e.g. movable subjects for Subject Consistency; Kinetics-400 actions for Human Action; COCO classes for Object Class). Semantics prompts carry labels (class, colour, relation, style) for automatic checking.
- Prompt Suite per Category: human-curated prompts classified by an LLM [130] into 8 YouTube-like categories (Animal, Architecture, Food, Human, Lifestyle, Plant, Scenery, Vehicles); 800 prompts cleaned → 100 per category.
- Sample videos from each T2V model with every prompt (seed fixed at 2).
- Score each video with the dimension’s judge model (mini-diagrams below); average over videos → model score.
- Anchor with reference baselines: Empirical Min, Empirical Max, WebVid-Avg.
- Validate each dimension with human pairwise preference win ratios and Spearman ρ.
Guide
The pipeline has four stages. First, build small prompt suites, about a hundred prompts per dimension that each probe one ability, plus eight content categories of a hundred prompts each sorted by a language model. Second, sample one video per prompt from every model with a fixed seed. Third, score each video with that dimension's judge and average into a model score, reading it against reference baselines. Finally, confirm the dimension ranks models the way humans do.
How each dimension is computed
Guide
Subject Consistency asks whether the main subject keeps its identity across the clip. Every frame goes through DINO, which is good at telling individuals of the same class apart, and each feature is compared by cosine similarity with the first frame and with the previous frame. Averaging those two similarities over time gives equation one. A cow that slowly changes its markings drops the score, as figure A8 shows.
Guide
Background Consistency is the same recipe as Subject Consistency, but uses CLIP image features instead of DINO, because CLIP captures the overall scene rather than one object's identity. Each frame is compared with the first and the previous frame, giving equation two. The prompts come from Places365 scene names, so there is always a background worth tracking.
Guide
Temporal Flickering measures high-frequency jitter between frames. VBench first keeps only videos that RAFT says are static, so real motion is not mistaken for flicker. It then averages the mean absolute pixel difference between consecutive frames, equation three, and flips it into a zero to one score where higher means less flicker, equation four. Quantization noise that changes from frame to frame would show up here.
Guide
Motion Smoothness uses the idea that smooth motion is predictable. VBench drops every odd frame, asks the AMT frame interpolator to rebuild them from their neighbours, and measures the pixel error against the real frames. Small error means the motion follows a smooth path and the score is high. The error is normalised the same way as flicker in equation four. Step-caching methods that skip computation could hurt this score.
Guide
Dynamic Degree is simply the fraction of a model's videos that actually move. RAFT computes optical flow between consecutive frames, VBench takes the mean of the largest five percent of flow magnitudes, and a video counts as dynamic if that value passes a threshold. It exists to balance the consistency dimensions, which a frozen clip would otherwise win.
Guide
Aesthetic Quality asks whether frames look artistically pleasing: layout, colour harmony, realism. The LAION aesthetic predictor rates each frame from zero to ten, VBench divides by ten and averages over frames. It is a per-frame judgement, so it says nothing about motion.
Guide
Imaging Quality looks at low-level distortions such as noise, blur and over-exposure. The MUSIQ quality model, trained on the SPAQ dataset, gives each frame a score from zero to a hundred, which is divided by a hundred and averaged over frames. For the thesis this is the most direct check that four-bit weights have not added visible noise or blur.
Guide
Object Class checks that the requested object actually appears. For prompts built from 79 COCO classes, the GRiT detector runs on every frame, and the score is the fraction of frames in which the named class is detected. It is the simplest semantic test of whether the text conditioning still works.
Guide
Multiple Objects tests composition: when the prompt asks for two things, both must be detected by GRiT in the same frame. The score is the fraction of frames where every requested object is present. It is much harder than Object Class, and the results section shows it is where video models lag image models most.
Guide
Human Action uses a hundred Kinetics-400 actions phrased as a person doing something. VBench samples sixteen frames, runs the UMT video classifier, and counts a hit if the prompted action is among the top five classes with a logit above 0.85. Because it needs a video classifier, it judges the clip as a whole rather than frame by frame.
Guide
Color checks that the object has the requested colour. GRiT's dense captioner describes each frame, and only frames where the object is detected are counted, which keeps this score separate from Object Class. The score is the fraction of those frames whose caption contains the right colour word. The results show it is the least human-aligned dimension.
Guide
Spatial Relationship checks prompts like a clock to the left of a vase. From GRiT's boxes, the relation counts as correct if the distance along the named axis is larger than along the other axis. Heavily overlapping boxes are down-weighted, following the rule from T2I-CompBench. The results show image models are far better at this than video models.
Guide
Scene checks that the video shows the requested place. The Tag2Text captioner describes each frame, and a frame counts only if every word of the scene name appears in the caption, in any order. So a caption saying river does not satisfy a prompt asking for ocean.
Guide
Appearance Style asks whether frames look like the requested style, such as Van Gogh or oil painting. Each frame's CLIP image feature is compared by cosine similarity with the CLIP text feature of the style phrase, then averaged. The raw values are small, around twenty to thirty percent, so only differences between models are meaningful.
Guide
Temporal Style covers camera effects like zoom, pan or slow motion, which cannot be seen in a single frame. So instead of per-frame CLIP, VBench uses ViCLIP, which encodes the whole video, and compares it with the text of the camera instruction. This is one of the few dimensions that truly needs a video-level judge.
Guide
Overall Consistency is a catch-all that compares the whole video with the whole prompt using ViCLIP's video and text encoders. The paper calls it an aiding metric: it covers semantics and style together on general prompts, rather than isolating one ability like the other dimensions do.
Guide
Human annotation is how VBench earns trust. For each prompt, the four models each produce videos, arranged into five groups, and within each group all six model pairs are compared. The annotator picks A better, B better, or same, judging only the dimension being tested. Wins count one and ties half, giving a human win ratio per model, which is correlated with the VBench win ratio. The quality checks with re-labelling keep the votes reliable.
Guide
As a side contribution, the human votes and VBench scores are turned into about thirty thousand instruction pairs to fine-tune a video language model. The tuned model first picks which dimensions matter for a prompt, then describes the video and gives a score from zero to ten per dimension. Training took about an hour on eight A100 GPUs. It is an extension, not part of the core benchmark.
Guide
This is the exact prompt used to sort the category prompts. A language model is asked to act as a language expert and tag each text with one or more of eight categories, such as Food or Vehicles, with no explanation. The logic is cheap automatic labelling followed by a human check: the tagging was about 95 percent accurate, then corrected by hand to give a hundred clean prompts per category.
Guide
This chain-of-thought template is how the tuned video language model starts an evaluation. Given a prompt, it first selects which of the sixteen dimensions apply, and only then scores the video on them. In the phone booth example, the model leaves out object and colour checks and keeps the quality, scene, style and overall ones. Choosing dimensions first mirrors how VBench itself matches prompt suites to dimensions.
Guide
Raw percentages mean little without anchors, so VBench gives three per dimension. Empirical Min comes from noise clips or frames spliced from different videos. WebVid-Avg is the average score of real WebVid clips retrieved for each prompt. Empirical Max is the best real clip where a hundred percent is unreachable. For example, Appearance Style tops out at about 28.6 percent even for real videos, so LaVie's 23.6 is not bad.
§5Every equation
Subject Consistency. \(d_i\): DINO feature of frame \(i\), unit-normalised; \(\langle\cdot\rangle\) = dot product = cosine similarity. Averaged over all videos of a model.
Guide
Equation one is Subject Consistency. S subject is one over T minus one times the sum from frame two to frame T of one half times the dot product of d one and d t, plus the dot product of d t minus one and d t. Here d t is the unit-length DINO feature of frame t, so each dot product is a cosine similarity. It rewards frames that match both the first frame and their neighbour, and is averaged over all of a model's videos.
Background Consistency; \(c_i\): CLIP image feature of frame \(i\), unit-normalised.
Guide
Equation two is Background Consistency, identical in form to equation one. The only change is that c t, the unit-length CLIP image feature of frame t, replaces the DINO feature. Each frame is compared with the first frame and the previous one, the two cosine similarities are averaged, and the result is averaged over the T minus one frame transitions.
Temporal Flickering: mean absolute pixel difference between consecutive frames, \(N\) videos, \(T\) frames, \(f_i^t\) = frame \(t\) of video \(i\).
Guide
Equation three computes raw flicker. For each of N videos, it takes the mean absolute error between frame t and frame t plus one, averages over the T minus one pairs, and then averages over all videos. Because it is only applied to static scenes, any pixel change is treated as flicker. A larger value means worse flicker, which equation four then flips.
Maps to [0,1] (8-bit pixels); higher = less flicker. Motion Smoothness uses the same normalisation on its interpolation MAE.
Guide
Equation four normalises flicker: 255 minus S flicker, all divided by 255. Since eight-bit pixels range from zero to 255, this maps the error into zero to one, with higher meaning less flicker. Motion Smoothness reuses exactly this normalisation. One consequence is that scores cluster near the top, around 96 to 99 percent, so small differences matter.
Motion Smoothness (text, normalised “in the same way as Eq. 4”): drop odd frames of \([f_0,\dots,f_{2n}]\), interpolate them back, compare.
Guide
This is Motion Smoothness written out from the paper's text. Every odd frame is removed, and AMT reconstructs frame f two k minus one from the frames on either side, giving f hat. The mean absolute error between f hat and the real frame, averaged over the n dropped frames, is subtracted from 255 and divided by 255, as in equation four. Low reconstruction error means predictable, smooth motion.
Dynamic Degree: proportion of non-static videos (threshold \(\tau\) not given in the paper).
Guide
This is Dynamic Degree. For each video, take the RAFT optical flow magnitudes, average the largest five percent, and check whether that exceeds a threshold tau. The indicator is one for moving videos and zero otherwise, and S dynamic is the average over N videos, so it is the share of non-static clips. The paper does not give the threshold value.
Frame-wise quality: linear normalisation of a 0–10 rating and a 0–100 rating, averaged over frames.
Guide
These two formulas give the frame-wise quality scores. S aesthetic averages the LAION aesthetic rating of each frame divided by ten, and S imaging averages the MUSIQ rating divided by a hundred, both over T frames. They are simple linear rescalings to zero to one, so they inherit whatever the judge models consider good.
Object Class / Multiple Objects: fraction of frames where the requested object(s) are detected.
Guide
These are the object scores. S obj is the fraction of the T frames in which GRiT detects the requested object o. S multi is the fraction of frames in which both requested objects, o one and o two, are detected together. The indicator makes each frame count as one or zero.
Human Action on 16 uniformly sampled frames.
Guide
Human Action is scored per video. For each of N videos, the indicator is one if the prompted action a i is among UMT's top five classes with a logit above 0.85, and the score is the average of these hits. UMT sees sixteen uniformly sampled frames, so it judges the motion, not a single still.
Color: only frames containing the object count.
Guide
Color is a ratio of frame counts. The numerator counts frames where the object is detected and its caption contains the requested colour c; the denominator counts all frames where the object is detected. Dividing by detected frames only means a missing object does not lower the colour score, keeping the two dimensions separate.
Spatial Relationship: correct if distance along the named axis exceeds that along the other axis; \(\kappa\) = IoU-based coefficient (exact form not given).
Guide
Spatial Relationship is scored per frame in three cases. If the relation is correct and the boxes overlap little, meaning IoU below tau, the frame scores one. If it is correct but the boxes overlap heavily, it gets a reduced score kappa of IoU. Otherwise it scores zero. The exact form of kappa is not given in the paper, so treat this as a sketch of the rule.
Scene: every scene word must appear in the caption, order free.
Guide
Scene is the fraction of the T frames where every word of the scene name appears in Tag2Text's caption. The indicator is strict about vocabulary but ignores word order, so partial matches do not count.
Style and overall: cosine similarity between visual and text features (\(s\) = style phrase, \(p\) = prompt).
Guide
These are the style and overall scores, all cosine similarities between a visual and a text embedding. S app averages, over frames, the similarity between the CLIP image feature of frame t and the CLIP text feature of the style phrase s. Temporal Style and Overall Consistency instead compare one ViCLIP embedding of the whole video v with the ViCLIP text embedding of the prompt p.
Human annotation: 5 groups of 4 model videos per prompt, all 6 pairs compared.
Guide
This counts human comparisons. For each of N prompts there are five groups of four model videos, and four models give four choose two, which is six pairs. So each dimension collects N times five times six pairwise votes. This is the data behind the win ratios in equation fifteen.
Computed from both human labels and VBench scores; Spearman ρ between the two per dimension (Fig. 5).
Guide
The win ratio of model m is the sum over all pairs involving m of one for a win plus one half for a tie, divided by the number of pairs involving m. It is computed twice, once from human labels and once from VBench scores, and the Spearman rank correlation between the two is the human-alignment number reported for each dimension in figure five.
Radar normalisation: \((a,b)=(0.3,0.8)\) for Figs. 2, 6, A26; \((0,1)\) over all 32 model×category values for Fig. 7.
Guide
This is only for drawing radar charts. The score s of model m on dimension d is min-max normalised across models, then stretched into the range a to b. Figures two, six and A26 use a of 0.3 and b of 0.8, so the best model sits at 0.8 and the worst at 0.3. Figure seven uses zero to one over all 32 model and category values. It changes the picture, not the underlying scores.
§6Every figure
Guide
Figure one is the paper's overview and reads left to right. The dimension suite splits video quality into temporal and frame-wise parts, and video-condition consistency into semantics, style and overall. Each dimension gets a prompt suite, the models generate videos, and a designated evaluation method scores them. Human preference annotation sits alongside and verifies every dimension. The rest of the paper fills in each box.
Guide
Figure two is the headline result as a radar chart, redrawn from Table 1 with the best model per dimension at 0.8 and the worst at 0.3. No model wins everywhere. LaVie, in gold, is broad and strong on most axes. VideoCrafter, in indigo, spikes on Dynamic Degree and Spatial Relationship. CogVideo, in magenta, wins Subject Consistency and Motion Smoothness but is weak on semantics. This is exactly the per-dimension diagnosis a single score cannot give.
Guide
Figure three describes the prompts. The word cloud on the left shows common words like person, view, style and tranquil. The bars on the right show prompts per dimension, in gold, between about 72 and a hundred, and a hundred per content category, in teal. Some suites are shared, for example Motion Smoothness and Dynamic Degree reuse Subject Consistency's prompts. The small size is deliberate, since sampling video is slow.
Guide
Figure four is the annotation screen. At the top are the prompt and a question about one dimension only, here whether the style is Van Gogh. In the middle are two videos, on the right three choices, and at the bottom playback controls. In this example the annotator should pick A, the swirly painted skyline, even if it flickers more, because only style is being judged.
Guide
Figure five is the main validation. Each small plot is one dimension, each dot is one model, with the human win ratio on the horizontal axis and the VBench win ratio on the vertical. Dots near the fitted line mean VBench ranks models as people do, and rho is the Spearman correlation. Agreement is high everywhere, from 0.61 for Color to 0.998 for Motion Smoothness, which justifies trusting the scores in the results tables.
Guide
Figure six a compares video models with image models on the frame-level dimensions, redrawn from Table A8. The image models, especially SDXL, reach far out on Multiple Objects and Spatial Relationship while the four video models stay near the centre. The paper's conclusion is that video models lag in compositionality, perhaps because modelling time costs frame-level semantics. The bar chart in the results section shows the gap directly.
Guide
Figure six b places the video models next to real data, redrawn from Table A6. Real WebVid clips beat every model on subject consistency, motion smoothness and overall consistency. But LaVie beats the WebVid average on aesthetic and imaging quality, because WebVid footage is often low quality with watermarks. Real video is a reference point, not an upper bound on every axis.
Guide
Figure seven shows one radar per model, with one coloured line per content category, redrawn from Table A7 and normalised to zero to one over all 32 values. Look for lines that stick out. CogVideo's Food line is high on aesthetics. Human and Vehicles are the most dynamic but lower elsewhere, and Architecture and Scenery are the most static. Performance depends on what is being filmed, so a test set should cover several categories.
Guide
Figure A8 illustrates Subject Consistency. In the top row the cow keeps one appearance and scores about 96.8 percent. In the bottom row its look drifts from frame to frame, marked by the magenta boxes, and the score drops to about 83.3 percent. It shows what the DINO similarity in equation one is actually picking up.
Guide
Figure A9 illustrates Background Consistency. In the top row the street stays the same as the camera moves, scoring about 93.4 percent. In the bottom row the church warps and the scene changes within a few frames, scoring about 88.1 percent. A five-point drop here already signals a visible problem.
Guide
Figure A10 illustrates flicker. The lower strip in each example stacks the same small patch of pixels from every frame, so smooth columns mean stable pixels. The top example has mild flicker and scores about 99.7 percent, the bottom has severe flicker and scores about 96.0. The range is very compressed, so a drop of one or two points is meaningful.
Guide
Figure A11 checks whether measuring flicker only on static scenes is fair. Human win ratios for flicker on static, dynamic and semi-dynamic video sets correlate with each other at about 0.99 in every pairing, so models rank the same way whatever the motion. That justifies the static-only filter in figure A10's metric. The dot positions here are approximate.
Guide
Figure A12 illustrates Motion Smoothness. The top bear walks smoothly and plausibly, scoring about 96.0 percent. The bottom bear jumps erratically between frames, marked by the boxes, and scores about 88.5. Jerky motion is hard for the frame interpolator to predict, so its reconstruction error rises.
Guide
Figure A13 illustrates Dynamic Degree for the prompt of a motorcycle turning a corner. In the top row both the bike and the camera move, so the video counts as dynamic and scores one. In the bottom row the bike barely changes from start to end, so it counts as still and scores zero. The model's Dynamic Degree is the share of its videos that look like the top row.
Guide
Figure A14 illustrates Aesthetic Quality with one beach prompt and three videos of increasing score: about 46, then 70, then 82 percent. The dark silhouette looks flat, while the balanced, well-lit beach scores highest. For comparison, SDXL images in row d reach 80 to 87 percent, showing that image models still lead on per-frame beauty.
Guide
Figure A15 illustrates Imaging Quality. The sharp, well-exposed bee scores about 70.6 percent on MUSIQ, while the blurry, over-exposed one scores about 31.3. This is the kind of degradation to watch for when weights are pushed to low bit widths.
Guide
Figure A16 illustrates Object Class for the prompt a person. In the top row GRiT detects a walking person, scoring one. In the bottom row the model produces a pattern of letter A badges, reading the article as a letter, and no person is found, scoring zero.
Guide
Figure A17 illustrates Multiple Objects for the prompt a dog and a horse. In the top row both animals appear together in every frame, scoring one. In the bottom row only the horse appears, so the pair never co-occurs and the score is zero. Getting one of two objects is common for video models.
Guide
Figure A18 illustrates Human Action for the prompt a person is barbequing. In the top row UMT recognises a man at a grill, scoring one. In the bottom row the video shows only food on a plate, with nobody performing the action, scoring zero. Getting the objects right is not the same as getting the action right.
Guide
Figure A19 illustrates Color for the prompt a pink chair. In the top row the chair is pink in every frame, scoring a hundred percent. In the bottom row it is partly pink and white striped, so only about 77 percent of frames are captioned with the right colour. Partial colour errors give partial scores.
Guide
Figure A20 illustrates Spatial Relationship for a clock to the left of a vase. In the top row the two objects are separate and correctly placed, scoring a hundred percent. In the bottom row the clock and vase are fused into one shape, so the relationship is missing and the score is zero.
Guide
Figure A21 illustrates Scene for the prompt bedroom. In the top row Tag2Text's caption contains the word bedroom, scoring one. In the bottom row the model produced a flower field, so the scene word never appears and the score is zero.
Guide
Figure A22 illustrates Appearance Style for the Bund in Shanghai in Van Gogh style. The swirly painted skyline scores about 33.1 percent CLIP similarity, the plain photo about 20.9. Both numbers look low, because CLIP similarities are small in absolute terms. Only the gap between videos carries meaning.
Guide
Figure A23 illustrates Temporal Style for a corgi prompt ending in zoom in. In the top row the camera really zooms from far to close-up, scoring about 30.5 percent on ViCLIP. In the bottom row the camera instruction is ignored, scoring about 8.7. A per-frame metric could not tell these apart.
Guide
Figure A24 illustrates Overall Consistency for a corgi playing a drum kit. The top video matches the whole prompt and scores about 40.1 percent. The bottom video shows hands on drums but no corgi, scoring about 28.9. Missing one key element of the prompt costs about eleven points here.
Guide
Figure A25 shows why the tuned video language model helps. Before tuning, VideoChat misreads subject consistency as a question about content and gives an unexplained low score. After tuning on VBench scores and human votes, it describes the phone booth frame by frame, notes that it stays the same, and gives eight out of ten. The tuning taught it what each dimension means.
Guide
Figure A26 uses the same category data as figure seven but grouped the other way: one radar per category, with the four models as lines, normalised to 0.3 to 0.8. Two patterns repeat in every category. VideoCrafter's Dynamic Degree spike is always there, and CogVideo's Overall Consistency is always lowest. So these are model traits, not category effects.
Guide
Figure A27 shows how WebVid-10M, a common training set, splits across the eight categories. Human clips are 26 percent and Scenery 21 percent, while Architecture and Lifestyle are only 4 percent each and Food 11 percent. The next figure uses this to argue about data quality versus quantity.
Guide
Figure A28 gives the average aesthetic score of WebVid clips per category. Food scores highest at about 45.1 percent despite being only 11 percent of the data, and Animal lowest at about 41.1. Since models also do well on Food aesthetics, the paper argues that the quality of training data matters more than its quantity.
§7Results
| Model | Subject Consistency | Background Consistency | Temporal Flickering | Motion Smoothness | Dynamic Degree | Aesthetic Quality | Imaging Quality | Object Class |
|---|---|---|---|---|---|---|---|---|
| LaVie | 91.41% | 97.47% | 98.30% | 96.38% | 49.72% | 54.94% | 61.90% | 91.82% |
| ModelScope | 89.87% | 95.29% | 98.28% | 95.79% | 66.39% | 52.06% | 58.57% | 82.25% |
| VideoCrafter | 86.24% | 92.88% | 97.60% | 91.79% | 89.72% | 44.41% | 57.22% | 87.34% |
| CogVideo | 92.19% | 95.42% | 97.64% | 96.47% | 42.22% | 38.18% | 41.03% | 73.40% |
| Empirical Min | 14.62% | 26.15% | 62.93% | 70.60% | 0.00% | 0.00% | 0.00% | 0.00% |
| Empirical Max | 100.00% | 100.00% | 100.00% | 99.75% | 100.00% | 100.00% | 100.00% | 100.00% |
Guide
Table one, part one, gives the raw scores for the quality dimensions plus Object Class, with Empirical Min and Max rows as anchors. No model wins everything. CogVideo leads subject consistency and motion smoothness, LaVie leads background, flicker, aesthetics, imaging and object class, and VideoCrafter is by far the most dynamic at about 89.7 percent. Note how close the flicker scores are, all around 98 percent, which is why small changes matter there.
| Model | Multiple Objects | Human Action | Color | Spatial Relationship | Scene | Appearance Style | Temporal Style | Overall Consistency |
|---|---|---|---|---|---|---|---|---|
| LaVie | 33.32% | 96.80% | 86.39% | 34.09% | 52.69% | 23.56% | 25.93% | 26.41% |
| ModelScope | 38.98% | 92.40% | 81.72% | 33.68% | 39.26% | 23.39% | 25.37% | 25.67% |
| VideoCrafter | 25.93% | 93.00% | 78.84% | 36.74% | 43.36% | 21.57% | 25.42% | 25.21% |
| CogVideo | 18.11% | 78.20% | 79.57% | 18.24% | 28.24% | 22.01% | 7.80% | 7.70% |
| Empirical Min | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% | 0.09% | 0.00% | 0.00% |
| Empirical Max | 100.00% | 100.00% | 100.00% | 100.00% | 82.22% | 28.55% | 36.40% | 36.40% |
Guide
Table one, part two, covers the condition dimensions. Semantics is where models separate: Multiple Objects and Spatial Relationship sit around 18 to 39 percent, far below the maximum. LaVie leads most columns, while CogVideo collapses on Temporal Style and Overall Consistency at under 8 percent. The Empirical Max row shows that style and overall scores top out near 28 to 36 percent even for real video.
Guide
This bar chart ranks the sixteen dimensions by how well they agree with humans, using the Spearman correlations from Table A5. Teal bars are quality dimensions and gold bars are condition dimensions. Color, at about 61 percent, Object Class at 80 and Dynamic Degree at 82 are the weakest, while Motion Smoothness, Appearance Style and Multiple Objects are near perfect. Lean more on the tall bars when a result is borderline.
| Model | Static Benchmark | Semi-Dynamic Benchmark | Dynamic Benchmark |
|---|---|---|---|
| LaVie | 0.00% | 6.51% | 49.72% |
| ModelScope | 0.00% | 33.72% | 66.39% |
| VideoCrafter | 0.00% | 51.63% | 89.72% |
| CogVideo | 0.00% | 14.19% | 42.22% |
Guide
Table A2 checks the three benchmarks used to validate flicker. Every model scores zero Dynamic Degree on the static benchmark, confirming it is truly static, and the semi-dynamic and dynamic sets show increasing motion. This supports the claim in figure A11 that flicker rankings hold regardless of motion.
| Model | Subject Consistency | Background Consistency | Temporal Flickering | Motion Smoothness | Dynamic Degree | Aesthetic Quality | Imaging Quality | Object Class |
|---|---|---|---|---|---|---|---|---|
| LaVie | 67.87 / 69.95 | 85.27 / 65.04 | 73.42 / 87.96 | 69.54 / 65.65 | 41.81 / 53.10 | 77.56 / 83.41 | 77.20 / 79.46 | 57.55 / 79.20 |
| ModelScope | 49.07 / 56.30 | 49.96 / 56.36 | 65.42 / 62.44 | 58.61 / 59.58 | 52.92 / 53.84 | 67.74 / 63.15 | 60.00 / 68.53 | 49.37 / 49.58 |
| VideoCrafter | 24.72 / 20.42 | 15.89 / 27.21 | 31.20 / 43.64 | 10.00 / 13.80 | 68.47 / 62.18 | 35.34 / 32.33 | 55.05 / 37.85 | 54.18 / 41.77 |
| CogVideo | 58.33 / 53.33 | 48.88 / 51.40 | 29.96 / 5.96 | 61.85 / 60.97 | 36.81 / 30.88 | 19.35 / 21.11 | 7.74 / 14.16 | 38.90 / 29.45 |
| Correlation ρ | 96.51% | 94.80% | 88.73% | 99.80% | 82.09% | 98.65% | 92.16% | 80.37% |
Guide
Table A5, part one, gives the numbers behind figure five for the quality dimensions and Object Class. Each cell shows the VBench win ratio then the human win ratio for one model, and the last row is their Spearman correlation. Motion Smoothness agrees almost perfectly at 99.8 percent, while Object Class and Dynamic Degree are lowest at about 80 and 82. The orderings of models usually match even when the exact ratios differ.
| Model | Multiple Objects | Human Action | Color | Spatial Relationship | Scene | Appearance Style | Temporal Style | Overall Consistency |
|---|---|---|---|---|---|---|---|---|
| LaVie | 53.37 / 57.97 | 54.43 / 58.13 | 52.31 / 51.37 | 52.30 / 49.81 | 59.69 / 77.52 | 61.85 / 58.22 | 69.07 / 55.73 | 70.82 / 77.35 |
| ModelScope | 57.15 / 62.15 | 51.10 / 53.07 | 50.12 / 49.73 | 53.25 / 53.15 | 48.22 / 50.00 | 57.48 / 54.93 | 65.40 / 57.50 | 66.31 / 60.07 |
| VideoCrafter | 48.74 / 49.63 | 52.17 / 47.87 | 48.71 / 47.92 | 56.11 / 54.66 | 52.79 / 46.05 | 36.67 / 40.07 | 65.40 / 51.90 | 62.65 / 48.10 |
| CogVideo | 40.73 / 30.24 | 42.30 / 40.93 | 48.86 / 50.98 | 38.33 / 42.38 | 39.30 / 26.43 | 44.00 / 46.78 | 0.13 / 34.87 | 0.22 / 14.48 |
| Correlation ρ | 98.98% | 89.15% | 60.73% | 97.59% | 94.07% | 99.65% | 97.53% | 93.27% |
Guide
Table A5, part two, covers the condition dimensions in the same format, VBench win ratio then human win ratio. Most correlations are above 89 percent, but Color stands out at about 61, because the four models are close and small differences flip the ranking. CogVideo's near-zero VBench win ratios on Temporal Style and Overall Consistency match humans ranking it last.
| Model | Subject Consistency | Background Consistency | Motion Smoothness | Dynamic Degree | Aesthetic Quality | Imaging Quality | Appearance Style | Temporal Style | Overall Consistency |
|---|---|---|---|---|---|---|---|---|---|
| LaVie | 91.41% | 97.47% | 96.38% | 49.72% | 54.94% | 61.90% | 23.56% | 25.93% | 26.41% |
| ModelScope | 89.87% | 95.29% | 95.79% | 66.39% | 52.06% | 58.57% | 23.39% | 25.37% | 25.67% |
| VideoCrafter | 86.24% | 92.88% | 91.79% | 89.72% | 44.41% | 57.22% | 21.57% | 25.42% | 25.21% |
| CogVideo | 92.19% | 95.42% | 96.47% | 42.22% | 38.18% | 41.03% | 22.01% | 7.80% | 7.70% |
| Empirical Min | 14.62% | 26.15% | 70.60% | 0.00% | 0.00% | 0.00% | 0.09% | 0.00% | 0.00% |
| WebVid-Avg | 96.17% | 96.59% | 98.17% | 44.13% | 42.37% | 58.22% | 22.15% | 25.77% | 34.14% |
| Empirical Max | 100.00% | 100.00% | 99.75% | 100.00% | 100.00% | 100.00% | 28.55% | 36.40% | 36.40% |
Guide
Table A6 adds the WebVid-Avg row, the average score of real clips retrieved for each prompt. Real video wins subject consistency, motion smoothness and overall consistency, but LaVie beats it on aesthetic and imaging quality, and VideoCrafter on dynamic degree. It is the numeric source for figure six b and a useful reminder that real data is not the ceiling on every axis.
| Model | Category | Subject Consistency | Background Consistency | Motion Smoothness | Dynamic Degree | Aesthetic Quality | Imaging Quality | Overall Consistency |
|---|---|---|---|---|---|---|---|---|
| LaVie | Animal | 97.49% | 97.18% | 97.29% | 15.20% | 48.26% | 68.81% | 26.43% |
| Architecture | 98.04% | 97.38% | 97.83% | 5.20% | 54.20% | 69.30% | 25.46% | |
| Food | 97.11% | 96.90% | 98.18% | 28.80% | 54.15% | 65.24% | 24.88% | |
| Lifestyle | 96.10% | 96.19% | 98.08% | 33.60% | 48.76% | 64.02% | 24.43% | |
| Scenery | 97.27% | 97.06% | 97.58% | 6.40% | 51.76% | 63.86% | 24.56% | |
| Human | 96.11% | 95.88% | 97.57% | 39.00% | 51.87% | 64.07% | 24.63% | |
| Plant | 97.52% | 97.20% | 96.73% | 16.40% | 52.68% | 67.86% | 24.50% | |
| Vehicles | 95.23% | 95.82% | 97.11% | 34.00% | 50.70% | 61.02% | 24.51% | |
| ModelScope | Animal | 94.08% | 95.80% | 96.40% | 37.20% | 47.32% | 60.30% | 26.58% |
| Architecture | 95.77% | 95.88% | 97.20% | 24.80% | 52.10% | 58.38% | 24.89% | |
| Food | 94.53% | 95.53% | 97.17% | 40.80% | 53.06% | 64.39% | 24.40% | |
| Lifestyle | 94.36% | 95.17% | 97.18% | 41.00% | 45.77% | 59.62% | 23.51% | |
| Scenery | 94.88% | 95.57% | 97.03% | 26.00% | 48.57% | 57.49% | 23.28% | |
| Human | 93.37% | 94.21% | 96.45% | 56.00% | 48.14% | 58.41% | 22.84% | |
| Plant | 95.14% | 96.26% | 96.48% | 26.40% | 51.03% | 63.83% | 23.55% | |
| Vehicles | 93.17% | 94.61% | 96.47% | 50.20% | 47.53% | 55.75% | 23.60% | |
| VideoCrafter | Animal | 87.01% | 92.40% | 91.80% | 79.60% | 40.51% | 59.79% | 25.47% |
| Architecture | 91.18% | 92.93% | 94.83% | 47.80% | 43.71% | 59.63% | 24.27% | |
| Food | 89.50% | 92.87% | 93.44% | 75.00% | 48.19% | 63.47% | 24.47% | |
| Lifestyle | 89.51% | 91.87% | 93.63% | 72.20% | 39.84% | 59.44% | 24.01% | |
| Scenery | 89.67% | 92.86% | 94.17% | 51.80% | 43.06% | 58.98% | 23.20% | |
| Human | 88.50% | 90.92% | 92.35% | 86.20% | 42.62% | 59.23% | 23.31% | |
| Plant | 89.86% | 93.57% | 93.72% | 52.00% | 41.81% | 63.81% | 23.41% | |
| Vehicles | 88.38% | 91.44% | 93.04% | 70.60% | 42.95% | 54.14% | 23.39% | |
| CogVideo | Animal | 92.95% | 94.69% | 96.65% | 30.20% | 45.37% | 48.45% | 8.26% |
| Architecture | 95.00% | 94.65% | 97.39% | 10.20% | 46.29% | 45.33% | 7.48% | |
| Food | 94.08% | 94.94% | 96.99% | 32.00% | 52.79% | 45.05% | 7.01% | |
| Lifestyle | 93.80% | 93.93% | 96.93% | 28.00% | 41.57% | 41.28% | 7.85% | |
| Scenery | 95.27% | 95.46% | 97.58% | 13.20% | 46.72% | 40.49% | 7.66% | |
| Human | 92.08% | 92.29% | 95.93% | 46.80% | 46.38% | 43.81% | 8.29% | |
| Plant | 94.86% | 95.71% | 97.05% | 19.60% | 48.63% | 43.22% | 6.65% | |
| Vehicles | 93.11% | 93.27% | 96.80% | 33.60% | 44.18% | 41.05% | 8.34% |
Guide
Table A7 breaks seven dimensions down by content category for each model, with the best category marked. Consistency scores barely move across categories, while Dynamic Degree swings a lot, for example LaVie ranges from about 5 percent on Architecture to 39 on Human. It is the data behind figures seven and A26, and shows why prompts from several categories are needed for a fair comparison.
| Model | Aesthetic Quality | Imaging Quality | Object Class | Multiple Objects | Human Action | Color | Spatial Relationship | Scene | Appearance Style | Overall Consistency |
|---|---|---|---|---|---|---|---|---|---|---|
| LaVie | 54.94% | 61.90% | 91.82% | 33.32% | 96.80% | 86.39% | 34.09% | 52.69% | 23.56% | 32.96% |
| ModelScope | 52.06% | 58.57% | 82.25% | 38.98% | 92.40% | 81.72% | 33.68% | 39.26% | 23.39% | 31.99% |
| VideoCrafter | 44.41% | 57.22% | 87.34% | 25.93% | 93.00% | 78.84% | 36.74% | 43.36% | 21.57% | 30.78% |
| CogVideo | 38.18% | 41.03% | 73.40% | 18.11% | 78.20% | 79.57% | 18.24% | 28.24% | 22.01% | 27.80% |
| SD1.4 | 65.85% | 69.86% | 91.14% | 34.39% | 91.80% | 90.57% | 61.89% | 52.33% | 25.35% | 32.59% |
| SD2.1 | 66.50% | 69.10% | 93.42% | 51.22% | 89.00% | 91.15% | 73.11% | 58.14% | 25.48% | 33.08% |
| SDXL | 70.38% | 68.79% | 91.39% | 69.51% | 91.20% | 88.92% | 86.17% | 54.65% | 25.23% | 33.77% |
Guide
Table A8 compares the four video models with three Stable Diffusion image models on dimensions that can be judged per frame, using CLIP for overall consistency so images can be scored. SDXL reaches about 70 percent on Multiple Objects and 86 on Spatial Relationship, roughly double the best video model. Image models also lead on aesthetics. This is the evidence for the compositionality gap.
Guide
The compositionality gap in one chart. For Multiple Objects and Spatial Relationship, the best video models reach about 34 to 37 percent, while SD2.1 and SDXL reach 51 to 86. The gap on aesthetics is smaller. The paper reads this as a cost of temporal modelling: learning motion seems to take capacity away from getting frame-level semantics right.
§8Why it matters for this thesis
- Pick the dimensions that compression can break. Int8/int4 weight-only quantization of LTX-2.3 mainly risks Imaging Quality (noise/blur, MUSIQ), Aesthetic Quality, Temporal Flickering and Subject/Background Consistency; step-caching mainly risks Motion Smoothness and Dynamic Degree. Semantics dims (Object Class, Spatial) check that the text path survived. A 6–8 dimension subset is enough.
- Always pair consistency with Dynamic Degree. A degraded model that produces near-static clips will gain on consistency/flicker (§3). Report Dynamic Degree next to them, and next to WWB similarity, so “smoother” is not mistaken for “better”.
- Compare FP16 vs. quantized on the same prompts and seeds. VBench scores are absolute; the thesis needs deltas. Use the per-dimension prompt suites (~70–100 prompts) with fixed seeds, and treat changes smaller than the model-to-model gaps in Table 1 (e.g. <0.5 pt on Motion Smoothness) as noise unless repeated.
- Evaluation runs off-device in PyTorch. The judges (DINO, CLIP, RAFT, AMT, MUSIQ, GRiT, UMT, ViCLIP) are separate networks; generate videos with OpenVINO on Intel CPU/Arc, save frames, then score on any machine. Nothing needs converting to OpenVINO, but store frames losslessly (PNG) — codec artifacts would contaminate Imaging Quality and Flicker.
- Audio is not covered. VBench is video-only and 2-second-oriented; LTX-2.3’s audio stream and longer clips need a separate check (e.g. WWB-style similarity or audio metrics), and resolution/length should be stated since the paper sampled 256–512 px, 16–33 frames.
Guide
Use VBench as a before-and-after test, not a leaderboard. Pick six to eight dimensions that compression can break: imaging and aesthetic quality, flicker and consistency for quantization, motion smoothness and dynamic degree for caching, plus one or two semantic checks. Generate FP16 and quantized videos with OpenVINO on the same prompts and seeds, save frames as PNG, and score them in PyTorch on any machine. Always report Dynamic Degree next to consistency, and remember VBench does not cover audio.