Papers › Q-DiT: Accurate Post-Training Quantization for Diffusion Transformers

Q-DiT: Accurate Post-Training Quantization for Diffusion Transformers

25 Jun 2024CVPR 2025 1arXiv:2406.17343archive 2025-07-28

Lei Chen, Yuan Meng, Chen Tang, Xinzhu Ma, Jingyan Jiang, Xin Wang, Zhi Wang, Wenwu Zhu

Recent advancements in diffusion models, particularly the architectural transformation from UNet-based models to Diffusion Transformers (DiTs), significantly improve the quality and scalability of image and video generation. However, despite their impressive capabilities, the substantial computational costs of these large-scale models pose significant challenges for real-world deployment. Post-Training Quantization (PTQ) emerges as a promising solution, enabling model compression and accelerated inference for pretrained models, without the costly retraining. However, research on DiT quantization remains sparse, and existing PTQ frameworks, primarily designed for traditional diffusion models, tend to suffer from biased quantization, leading to notable performance degradation. In this work, we identify that DiTs typically exhibit significant spatial variance in both weights and activations, along with temporal variance in activations. To address these issues, we propose Q-DiT, a novel approach that seamlessly integrates two key techniques: automatic quantization granularity allocation to handle the significant variance of weights and activations across input channels, and sample-wise dynamic activation quantization to adaptively capture activation changes across both timesteps and samples. Extensive experiments conducted on ImageNet and VBench demonstrate the effectiveness of the proposed Q-DiT. Specifically, when quantizing DiT-XL/2 to W6A8 on ImageNet (256 ×256), Q-DiT achieves a remarkable reduction in FID by 1.09 compared to the baseline. Under the more challenging W4A8 setting, it maintains high fidelity in image and video generation, establishing a new benchmark for efficient, high-quality quantization in DiTs. Code is available at \href{https://github.com/Juanerx/Q-DiT}{https://github.com/Juanerx/Q-DiT}.

PaperPDFConference PDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="2406.17343")

Code

Syntology Ran 16 of 19 code samples harvested from 1 repository linked to this paper; 3 have no recorded run. Of those that ran: 4 ran · honoured contract; 5 ran · our draft was wrong; 1 ran · fixture could not drive it; 6 ran with no contract checked.

By repository: official repository: 18 samples from 1 repository, 15 ran; 1 identical to code first harvested elsewhere. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

juanerx/q-dit officialmentioned in papermentioned on GitHubpytorch report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

19 samples harvested; 16 ran; 4 honoured the contract we drafted; 3 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

4ran · honoured contract
5ran · our draft was wrong
1ran · fixture could not drive it
6ran
3unverified

Licence: 19 of the 19 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from juanerx/q-dit. Some samples are identical code Syntology first harvested from another repository; for those, this paper's copy is not located and its licence is not recorded. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

approx_standard_normal_cdf juanerx/q-dit/diffusion/diffusion_utils.py official repository ran · our draft was wrong fingerprinted no licence file found · pointer only · d6a68e210556f857 · report
continuous_gaussian_log_likelihood juanerx/q-dit/diffusion/diffusion_utils.py official repository ran · our draft was wrong no licence file found · pointer only · ab1c9568b4e13899 · report
find_qlinear_layers juanerx/q-dit/qdit/qLinearLayer.py official repository ran no licence file found · pointer only · c24774ad2fb2f546 · report
get_2d_sincos_pos_embed juanerx/q-dit/models/models.py official repository ran · honoured contract no licence file found · pointer only · c92c27c924b517e8 · report
get_act_scales juanerx/q-dit/qdit/outlier.py official repository ran no licence file found · pointer only · bd3eec7f4e40b082 · report
get_act_stats juanerx/q-dit/qdit/outlier.py official repository ran no licence file found · pointer only · f027e9d1a43bd9a1 · report
get_beta_schedule juanerx/q-dit/diffusion/gaussian_diffusion.py official repository ran · honoured contract no licence file found · pointer only · 3e0fa4efc22272d4 · report
get_loader juanerx/q-dit/qdit/datautils.py official repository ran no licence file found · pointer only · b4ced3357c4fdc20 · report
get_loader_t juanerx/q-dit/qdit/datautils.py official repository ran no licence file found · pointer only · 703de1f371187e12 · report
get_named_beta_schedule juanerx/q-dit/diffusion/gaussian_diffusion.py official repository ran · honoured contract no licence file found · pointer only · 36e30c7fb679ec78 · report
mean_flat juanerx/q-dit/diffusion/gaussian_diffusion.py official repository ran · our draft was wrong fingerprinted no licence file found · pointer only · f6d7c009a8efb8b7 · report
modulate juanerx/q-dit/models/models.py official repository ran · our draft was wrong fingerprinted no licence file found · pointer only · 03310bba324ae4fb · report
normal_kl juanerx/q-dit/diffusion/diffusion_utils.py official repository ran · honoured contract fingerprinted no licence file found · pointer only · 8afbfc42c6ea0448 · report
quantize_gptq juanerx/q-dit/qdit/gptq.py official repository ran no licence file found · pointer only · 7c80863b71df5fa3 · report
space_timesteps juanerx/q-dit/diffusion/respace.py official repository ran · fixture could not drive it no licence file found · pointer only · ea9dbc131adf582e · report
create_named_schedule_sampler juanerx/q-dit/diffusion/timestep_sampler.py official repository unverified no licence file found · pointer only · e48218d7d73db0b3 · report
get_2d_sincos_pos_embed_from_grid juanerx/q-dit/models/models.py official repository unverified no licence file found · pointer only · 665d8a4e8f673a4c · report
save_grad_data juanerx/q-dit/qdit/datautils.py official repository unverified no licence file found · pointer only · 6a8bc8f9f72e0018 · report
create_npz_from_sample_folder identical code first harvested elsewhere ran · our draft was wrong licence of this copy not recorded · 19a5b88fdb546606 · report

Tasks

Image GenerationModel CompressionQuantizationVideo Generation

Results from the paper archive 2025-07-28

No leaderboard rows for this paper in the archive.

Methods

Absolute Position EncodingsAdamAttentionBPEDense ConnectionsDiffusionDropoutLabel SmoothingLayer NormalizationLinear LayerMulti-Head AttentionPosition-Wise Feed-Forward LayerResidual ConnectionSoftmaxTransformer

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections