TurboDiffusion: Accelerating Video Diffusion Models by 100-200 Times

Authors: Jintao Zhang*, Kaiwen Zheng*, Kai Jiang*, Haoxu Wang*, Ion Stoica, Joseph E. Gonzalez, Jianfei Chen, Jun Zhu Affiliations: Tsinghua University, Shengshu Technology, UC Berkeley arXiv: 2512.16093 GitHub: thu-ml/TurboDiffusion Year: 2025

1. Motivation (研究动机)

当前视频 diffusion 模型(如 Wan2.1/2.2)在单卡上生成一个 5 秒视频需要几十分钟甚至超过一小时(Wan2.1-T2V-14B-720P 在 RTX 5090 上需要约 4767 秒)。这严重限制了视频生成模型在实际场景中的应用。

现有加速方案存在以下不足:

  • FastVideo 等框架仅实现了约 60-70x 加速,且在视频质量上有明显退化
  • 单独使用 step distillation 或 attention 加速只能带来有限的加速比
  • 大模型(14B)在消费级 GPU 上甚至无法运行(OOM)

核心问题:能否将多种正交的加速技术系统性地组合,在单张消费级 GPU 上实现 100-200x 的端到端加速,同时保持视频质量?

2. Idea (核心思想)

TurboDiffusion 的核心思路是将四种正交的加速技术进行协同优化(co-optimization),形成一个端到端的加速框架:

  1. Attention 加速:使用 SageAttention(低精度量化 attention)+ Sparse-Linear Attention (SLA)(稀疏 + 线性 attention 的混合)
  2. Step Distillation:采用 rCM(score-regularized Continuous-time consistency Model)将采样步数从 100 步压缩到 3-4 步
  3. W8A8 量化:将 Linear 层的权重和激活量化为 INT8,利用 INT8 Tensor Core 加速计算并压缩模型体积
  4. 工程优化:使用 Triton/CUDA 重写 LayerNorm/RMSNorm,CPU offload 等

这些技术之间的正交性是关键:

  • SLA 的稀疏计算与 SageAttention 的低精度加速是正交的,可以叠加
  • rCM distillation 通过 model weights merging 自然继承 SLA attention 的加速
  • W8A8 量化与 attention 加速也是正交的

3. Method (方法)

3.1 Sparse-Linear Attention (SLA)

SLA 是 TurboDiffusion 的核心 attention 加速方案,将 sparse attention 和 linear attention 进行互补结合:

  • Sparse Attention:通过 Top-K 选择最重要的 key blocks 来近似 full attention,保留全局信息但计算量大幅降低
  • Linear Attention:使用 feature map 将 softmax attention 近似为线性复杂度,但单独使用精度不够
  • SLA 组合:sparse attention 捕获关键的高频信息,linear attention 补充低频全局信息,两者输出相加

SageSLA 是 SLA 在 SageAttention CUDA kernel 基础上的高效实现,进一步利用 INT8 量化 Q/K 和 FP8 量化 V 来加速 sparse attention 部分的计算。

# Pseudocode: SageSLA Forward Pass
def sage_sla_forward(q, k, v, topk_ratio=0.1):
    """
    q, k, v: [B, H, L, D] - query, key, value tensors
    topk_ratio: ratio of key blocks to select (e.g., 0.1 = 90% sparsity)
    """
    # Step 1: Compute block-level importance map
    # 对 Q 和 K 按 block 分块,计算 block-level 的 QK score
    sparse_map, lut, real_topk = get_block_map(q, k, topk_ratio)
 
    # Step 2: Sparse Attention (SageAttention kernel)
    # 量化 Q, K 为 INT8,V 为 FP8
    q_int8, q_scale, k_int8, k_scale = quantize_qk_int8(q, k)
    v_fp8, v_scale = quantize_v_fp8(v)
    # 使用量化 kernel 仅在 top-k blocks 上计算 attention
    o_sparse = block_sparse_attn(q_int8, k_int8, v_fp8, lut, scales)
 
    # Step 3: Linear Attention
    # 对 Q, K 应用 feature map (softmax)
    q_feat = softmax(q)  # feature map
    k_feat = softmax(k)
    # O(L * D^2) 线性复杂度
    kv_sum = k_feat.T @ v           # [D, D]
    k_sum = k_feat.sum(dim=-2)      # [D]
    o_linear = (q_feat @ kv_sum) / (q_feat * k_sum).sum(dim=-1)
 
    # Step 4: Linear projection + combine
    o_linear = proj_l(o_linear)  # learnable projection, init to zero
    output = o_sparse + o_linear
    return output

代码映射

  • SageSparseLinearAttention 类 → turbodiffusion/SLA/core.py
  • Block map 计算 → turbodiffusion/SLA/utils.py (get_block_map)
  • SageAttention CUDA kernel → 依赖 spas_sage_attn 包(SpargeAttn)
  • proj_l 初始化为零 → 训练初期等价于纯 sparse attention,逐步学习 linear attention 的补充信息

3.2 rCM Step Distillation

rCM(score-regularized Continuous-time consistency Model)用于将预训练的 diffusion model distill 成一个少步采样模型:

  • 基于 Rectified Flow formulation,将 TrigFlow timesteps 转换为 RectifiedFlow timesteps
  • 训练后仅需 3-4 步即可生成高质量视频
  • 通过 model weights merging 将 SLA finetune 和 rCM distillation 的参数更新合并到同一个模型
# Pseudocode: rCM Sampling (Inference)
def rcm_sampling(model, num_steps=4, sigma_max=80):
    """
    model: distilled model (SLA + rCM combined)
    num_steps: number of sampling steps (3 or 4)
    sigma_max: initial noise level
    """
    # Step 1: Define timestep schedule
    # TrigFlow → RectifiedFlow conversion
    mid_t = [1.5, 1.4, 1.0][:num_steps - 1]
    t_steps = [atan(sigma_max), *mid_t, 0]
    t_steps = sin(t_steps) / (cos(t_steps) + sin(t_steps))  # convert to RF
 
    # Step 2: Initialize with scaled noise
    x = randn(B, C, T, H, W) * t_steps[0]
 
    # Step 3: Iterative denoising (only 3-4 steps!)
    for i, (t_cur, t_next) in enumerate(zip(t_steps[:-1], t_steps[1:])):
        # Model predicts velocity
        v_pred = model(x, timestep=t_cur * 1000, text_emb=text_emb)
        # Euler step with stochastic re-noising
        x_denoised = (1 - t_next) * (x - t_cur * v_pred)
        noise = randn_like(x)
        x = x_denoised + t_next * noise  # re-noise for next step
 
    return x  # final clean sample

代码映射

  • 采样循环 → turbodiffusion/inference/wan2.1_t2v_infer.py 中的主推理代码
  • rCM 训练代码 → turbodiffusion/rcm/ 目录
  • 模型定义 → turbodiffusion/rcm/networks/wan2pt1.py

3.3 W8A8 Quantization

W8A8 量化将 Linear 层的权重和激活都量化为 INT8,使用 block-wise 量化(block size 128x128):

# Pseudocode: W8A8 INT8 Linear Layer
class Int8Linear:
    def __init__(self, weight_int8, weight_scale, bias):
        """
        weight_int8: [out, in] INT8 quantized weights
        weight_scale: [out/128, in/128] per-block scales
        bias: [out] float bias
        """
        self.weight_int8 = weight_int8
        self.weight_scale = weight_scale
        self.bias = bias
 
    @classmethod
    def from_linear(cls, linear_module):
        # Block-wise quantization: 128x128 blocks
        weight = linear_module.weight  # [out, in]
        blocks = weight.reshape(out//128, 128, in//128, 128)
        scales = blocks.abs().amax(dim=(-1, -3)) / 127.0
        weight_int8 = (weight / scales).round().clamp(-128, 127).to(int8)
        return cls(weight_int8, scales, linear_module.bias)
 
    def forward(self, x):
        # Quantize activation to INT8 (also block-wise 128)
        x_int8, x_scale = int8_quant(x, block_size=128)
        # INT8 matmul on Tensor Cores
        output = int8_matmul(x_int8, self.weight_int8, x_scale, self.weight_scale)
        return output + self.bias

代码映射

  • Int8Linear 类 → turbodiffusion/ops/core.py
  • INT8 量化函数 → turbodiffusion/ops/core.py (int8_quant)
  • GEMM kernel → turbodiffusion/ops/gemm/ 目录(CUTLASS-based)
  • 模型替换逻辑 → turbodiffusion/inference/modify_model.py (replace_linear_norm)

关键设计proj_l(SLA 中 linear attention 的投影层)被 skip 不做量化,因为它是 float32 且对精度敏感。

3.4 FusedNorm 优化

使用 Triton 重写 LayerNorm 和 RMSNorm,替换 PyTorch 原生实现以获得更好的 GPU 利用率:

代码映射

  • FastLayerNorm / FastRMSNormturbodiffusion/ops/core.py
  • Triton kernel → 使用 @triton.jit 装饰器编写高效 GPU kernel

3.5 Training Pipeline

训练分为两个并行的过程,最后通过 weight merging 合并:

# Pseudocode: Training Pipeline
def training_pipeline(pretrained_model, data):
    # Phase 1a: SLA Finetuning (parallel)
    # 将 full attention 替换为 SLA,finetune 适配 sparsity
    sla_model = replace_attention(pretrained_model, attention_type="sla")
    sla_delta = finetune(sla_model, data)  # ΔW_sla
 
    # Phase 1b: rCM Distillation (parallel)
    # 使用 rCM 将 teacher → student (few-step)
    rcm_delta = rcm_distill(pretrained_model, data)  # ΔW_rcm
 
    # Phase 2: Weight Merging
    # 合并两个 delta,rCM 自然继承 SLA 的 attention 加速
    final_model = pretrained_model + sla_delta + rcm_delta
 
    # Phase 3: Quantization (post-training)
    final_model = quantize_w8a8(final_model, skip="proj_l")
    return final_model

训练基础设施支持:FSDP2(分布式并行)、Ulysses CP(context parallel)、SAC(selective activation checkpointing)。


3.6 机制补充:为什么四个组件必须组合使用

TurboDiffusion 的核心价值不只是把某一个算子替换成更快版本,而是把视频 diffusion 推理中的三类瓶颈分开处理:采样步数、单步 transformer 计算、以及显存/访存开销。rCM 主要压缩采样轨迹,把原来需要多次网络评估的生成过程变成极少步甚至一类 consistency-style 的求解;SLA 主要压缩单次前向中的 attention 复杂度;W8A8 和 FusedNorm 则处理工程层面的带宽、kernel launch 和显存占用。如果只做 rCM,单步仍然很贵,尤其在长视频或 720P 设置下 attention 和 MLP 的矩阵乘依然会占据主时间;如果只做 SLA/量化,采样步数仍然把总延迟放大。

因此论文把它们作为 pipeline,而不是互相替代的技巧。从动机上看,视频 diffusion 的 token 维度同时乘上空间分辨率与时间帧数,dense attention 的代价随 token 数平方增长,且视频模型的中高层需要跨帧聚合运动和外观信息。SLA 的设计假设是:真实 attention 里真正决定输出的强相关项往往比较稀疏,而大量低权重项主要提供平滑的全局背景。于是它不能简单丢掉远距离 token,否则会破坏全局一致性;也不能完整保留 dense softmax,否则速度收益不足。更合理的解释是把 attention 拆成“少量显著依赖”和“可低秩/线性近似的背景项”,在质量与复杂度之间找折中。

这个机制也解释了为什么 SLA 对大模型更有意义:模型越大、token 越多,dense attention 的绝对成本越高,近似 attention 的收益越容易超过额外的索引和重排开销。

rCM 的作用是从另一个维度减少误差累积。普通 few-step sampling 往往会因为每一步跨越太大而偏离原始 diffusion/flow trajectory,视频任务中这种偏离会表现为运动不连贯、细节闪烁或身份漂移。rCM 更像是把 teacher 的多步演化压缩成一个短轨迹一致性约束:学生不仅要在单个噪声水平上重建 clean latent,还要学习不同噪声时间之间的一致映射。这样做的动机是让少步推理仍然继承 teacher 的去噪方向,而不是只靠最后一帧或最后一步的重建 loss。论文没有把所有训练超参数都展开到可以完全复现的程度,因此笔记中不应把 rCM 解读成某个固定步数的万能公式;更稳妥的理解是它提供了“步数压缩”的训练原则。

W8A8 量化在这里也不是单纯为了模型体积。视频生成推理常常受显存带宽和 activation 读写限制,特别是 batch 小、序列长时,权重和激活在 GPU memory 与 compute core 之间搬运的成本很高。把权重与激活都压到 8 bit 可以降低内存流量,但风险在于视频 diffusion 的不同 timestep、不同层 activation 分布差异较大,粗暴量化会放大色彩、纹理或运动伪影。因此它必须和校准、敏感层保护或算子融合一起使用。FusedNorm 则进一步减少 normalize、scale、shift 等细碎操作之间的中间张量写回,让速度收益不被 Python 调度和 kernel launch 吃掉。

因此这篇论文的方法论可以概括为“算法蒸馏负责少步,注意力近似负责单步,低精度与融合负责落地”。这种组合对实时或交互式视频生成尤其重要,因为用户感知的是端到端 latency,而不是单一算子的 FLOPs。也要注意,组件组合会带来误差叠加:少步蒸馏的分布偏移、attention 近似的上下文损失、INT8 量化的数值误差可能在同一段视频里同时出现。论文的实验结果说明这种组合在报告设置下仍然可接受,但若迁移到更长时长、更复杂镜头或不同 backbone,仍需要重新校准 SLA 阈值、量化策略与 rCM 训练数据分布。

4. Experimental Setup (实验设置)

Models & Baselines

模型参数量分辨率任务
Wan2.1-T2V-1.3B-480P1.3B480pText-to-Video
Wan2.1-T2V-14B-480P14B480pText-to-Video
Wan2.1-T2V-14B-720P14B720pText-to-Video
Wan2.2-I2V-A14B-720P~14B720pImage-to-Video

Baselines:

  • Original:Wan 官方实现(100 步)
  • FastVideo:使用 3 步采样 + 0.8 sparsity attention

Hyperparameters

  • Top-K ratio: 0.1(对应 90% attention sparsity)
  • 采样步数: 3 步(推荐范围 3-4 步)
  • Top-K 推荐范围: [0.1, 0.15]
  • 量化: W8A8, block size 128x128, INT8

Hardware

  • 主要实验在 单张 RTX 5090 GPU 上进行
  • 也在 RTX 4090 和 H100 上验证了加速效果(加速比略低于 5090)

5. Experimental Results (实验结果)

5.1 整体加速分解

TurboDiffusion 的加速来自四个层面的叠加,以 Wan2.1-T2V-14B-720P 在 RTX 5090 上为例:

阶段Latency加速比
原始 (Wan2.1-14B-720P)4767s1x
+ CPU Offload3182s (OOM → 可运行)-
+ W8A8 & FusedNorm2783s1.14x
+ rCM (4 steps)84s33.3x
+ SageSLA24s3.45x
最终 (TurboDiffusion)24s199x

Figure 3 解读:左图为柱状图对比四个模型的 latency,TurboDiffusion 在所有模型上均实现了数量级的加速。右图为水平条形图展示具体加速倍数:Wan2.1-T2V-14B-720P 达到 199x,Wan2.1-T2V-14B-480P 达到 170x,Wan2.1-T2V-1.3B-480P 达到 97x,Wan2.2-I2V-A14B-720P 达到 120x。注意 I2V 模型因为需要在 high-noise 和 low-noise 模型之间切换,实际测量的加速比略低于理论值。

Figure 4 解读:Waterfall 图展示了各优化技术的逐步加速贡献。从 4767s 开始,CPU Offload 使得模型可以在单卡上运行(否则 OOM),W8A8 + FusedNorm 带来 1.14x 加速(压缩模型大小和计算量),rCM 是最大的加速贡献者(33.3x,将 100 步减少到 3-4 步),最后 SageSLA 提供额外 3.45x 的 attention 加速。这四种技术的组合最终达到约 200x 的总加速比。


5. Results

5.1 端到端加速性能

模型OriginalFastVideoTurboDiffusion加速比
Wan2.1-T2V-1.3B-480P184s5.3s1.9s97x
Wan2.1-T2V-14B-480P1676s26.3s9.9s170x
Wan2.1-T2V-14B-720P4767s72.6s24s199x
Wan2.2-I2V-A14B-720P4549sN/A38s120x

5.2 视频质量对比

Figure 1 解读:Wan2.1-T2V-1.3B-480P 模型在 “东京街头红裙女性” prompt 下的视频帧对比。Original 需要 184 秒,TurboDiffusion 仅需 1.9 秒。TurboDiffusion 生成的视频保持了人物外观一致性、场景光影效果和运动自然度,整体质量与原始模型相当。

Figure 5 解读:Wan2.2-I2V-A14B-720P 模型的 Image-to-Video 生成对比(冲浪猫 prompt)。Original 需要 4549 秒,TurboDiffusion 仅需 38 秒(120x 加速)。在 I2V 任务中,TurboDiffusion 成功保持了第一帧图像的视觉一致性,同时生成了流畅的运动。

5.3 与 FastVideo 的质量对比

在 Wan2.1-T2V-1.3B-480P 上,TurboDiffusion 不仅比 FastVideo 快(1.9s vs 5.3s),视频质量也明显更好:

Figure 13 解读:在 “复古电视墙” prompt 下的三方对比。FastVideo(5.3s)生成的视频出现了严重的色彩偏移(整体偏绿),内容细节丢失。TurboDiffusion(1.9s)在更快的速度下保持了更好的色彩准确性和场景一致性,接近 Original(184s)的质量。

5.4 大模型 720P 对比

Figure 24-27 解读:Wan2.1-T2V-14B-720P 模型上的对比。在此配置下 TurboDiffusion 达到了最高的 199x 加速(4767s → 24s)。与 FastVideo(72.6s)相比,TurboDiffusion 在速度上快 3x,且在复杂场景(如梵高风格街头、Minecraft 洞穴、新闻纪录片)中保持了更好的细节和运动一致性。

5.5 关键发现

  1. 加速比随模型规模增大而增大:1.3B 模型 97x → 14B-720P 模型 199x。这是因为大模型的 attention 计算占比更高,SLA 的加速效果更显著
  2. W8A8 量化使大模型在消费级 GPU 上可运行:14B 模型原本 OOM,量化后模型体积减半,可以在单张 RTX 5090 上运行
  3. rCM 是最大的加速贡献者(33x),SageSLA 提供额外 3.5x
  4. 未来方向:扩展到 autoregressive video diffusion 等更多范式