☰
DiT架构解析:为何它能成为视频生成的公共底座
2026/10/14 15:28:28 网站建设 项目流程

2024年2月那个晚上,OpenAI把Sora的演示视频丢出来之后,很多做视频生成的朋友第一反应都是“这活儿没法干了”。一只纸船在玻璃杯里漂、长颈鹿在空无一人的美术馆里探头,这些60秒的连续镜头,直接把行业拉进了一个新维度。但比起那批反复循环的演示片段,真正让从业者睡不着觉的,是Sora技术报告里一个不起眼的名词:DiT。我后来跟同事复盘,得出的结论很朴素——Sora并没有发明一种全新的视频生成理论,它只是拿一个2022年底就公开的架构,把规模、数据和算力推到了别人没到过的位置。这个架构就是DiT,Diffusion Transformer。而这一轮视频模型竞赛里,大家抄的几乎都是同一个剧本:把扩散模型里面的U-Net拿掉,换上Transformer,然后拼命加大参数、加多数据、调长上下文。这篇漫话就聊聊DiT到底解决过什么问题,为什么它成了几乎所有视频模型的公共底座,以及要靠这个方向做产品、做研究,该从哪些地方下手。

1. 为什么DiT成了视频生成的新“公共底盘”

1.1 扩散模型本来没有Transformer什么事

先回到扩散模型最朴素的白话:你给模型看一堆图片,然后往图片上逐步加噪声,加到你完全认不出原图;再教它反着走,从一堆纯噪声里一步步把清晰画面“擦”出来。这个“擦”的过程,就是一次次去噪预测。传统上执行这个过程的主干网络是U-Net,一个编码器—解码器结构的卷积网络,靠下采样建出多尺度特征、再上采样还原细节。U-Net在图像扩散时代非常能打,Stable Diffusion早期几乎都长这个样。它擅长局部纹理建模,但也有一个绕不开的短板:结构固定、通道数上不去的性价比不高,想继续靠堆参数变强,收益很快触顶。换句话说,U-Net像一台调校得很顺的老发动机,扭矩曲线不错,但马力上限摆在那里。

真正让我对这个短板有体感的,是一次扩训练分辨率的经历。当时想把一个U-Net扩散模型从512上调到1024,发现改动哪都在冒烟:中间层的特征图尺寸、残差连接的比例、甚至attention块的位置都要重推。反观Transformer家族,只要你把位置编码和patch化处理好,序列变长就是换个数据集、调一下max length的事,这从工程角度看完全是两种物种。

1.2 把U-Net换成Transformer,图的是什么

DiT的论文题目就叫《Scalable Diffusion Models with Transformers》,两位作者是William Peebles和谢赛宁,2022年底投稿,后来拿了ICCV 2023的最佳论文奖。题目里最值钱的是“Scalable”——可扩展。他们把主干从U-Net换成Transformer之后,得到一条很关键的曲线:当你把DiT的参数量从S档放大到XXL档,并且把训练FLOPs一并提上去,FID这条指标会一路变好;在同样的计算预算下,大DiT也稳定碾压同等规模的U-Net。Transformer之所以能有这个性质,是因为它的信息处理方式不是靠卷积核滑动窗口,而是让每一个token都能直接看到其他所有token,注意力矩阵的长度等于序列长度。扩大到视频场景,好处被进一步放大:U-Net对时序的处理往往要靠额外的3D卷积或者临时编码模块来回折腾,而Transformer天然把时间轴也当成序列的一部分,于是“空间patch”加“时间帧”可以统一写成一种时空token,这正好是Sora选取的做法。

很多人问,为什么非要用Transformer替代U-Net?有个类比我一直觉得挺合适:U-Net像一支分工明确的工厂流水线,下采样、上采样、瓶颈层各管一摊,改一条线就得动好几个工位;Transformer则像一个全栈工程师,你给它一副token清单,它用统一的注意力机制处理所有关系。对于视频这种“空间关系+时间关系”一起出现的数据,后者组织起来天然更顺手。

1.3 一个架构通吃图片和视频,行业马上松散不下去了

DiT最有杀伤力的特性是通用性:图像可以用2D patch,视频就加一个时间轴变成3D patch,序列长度变长、但网络结构可以几乎不动。这套设计意味着,做图像生成的团队和做视频生成的团队,底层是可以共享一套训练框架的。视频任务远比图像难——要处理同一内容跨帧的一致性、运动连续性、光影变化,数据量需求也大好几倍。但如果连底层模型架构都互不通用,每家公司就得从头点一遍科技树,这是最费钱的。DiT给出的答案是:我先不负责具体任务,我只把视频也翻译成token序列,然后交给一个统一的大Transformer去学习和生成。你可以把DiT理解成一个“统一度量衡”,之后大家比的就是数据、算力和工程,而不是各玩各的架构。

这套“通吃”能力带来的行业变化,我感觉得特别明显。DiT出来之前,图像团队和视频团队聊技术栈几乎是鸡同鸭讲:一边在说U-Net怎么调,另一边在说光流和帧插值。DiT起来之后,两边忽然能用同一套关于“token、注意力、位置编码”的话语体系交流了,人才流动也顺畅很多。对一个技术社区来说,公共底盘一旦形成,迭代速度会快得惊人。

2. 拆开DiT:视频是怎么变成一串token然后被生成的

2.1 时空patch化:一段视频在模型眼里长什么样

要理解DiT怎么处理视频,最直观的比喻是拼图。传统方法处理视频要一帧一帧来,帧与帧之间靠额外机制去对齐。DiT不走这个偏门:它把视频看成一个大方块数据,用固定的窗口把方块切成小立方体。比如一个2秒的视频,每帧1080p,模型先缩到训练分辨率,然后按patch size=2x2x2这种三维窗口切成很小的立方体,每个立方体展平之后过一个线性投影,变成一个向量,也就是embedding。这些向量带上各自的位置信息,就组成了进入Transformer的token序列。从模型视角看,一段视频就是“一长串嵌着时间和空间位置标签的token”,和你在语言模型里处理一串文字没有本质区别。

这里有个关键参数patch size。DiT论文里报告过,在ImageNet 256x256上,patch size取2的效果优于4和8。道理也不难猜:patch越小,token个数越多,模型能看到的空间细节越细;代价是序列变长,算力跟着涨。视频场景里选择还要叠加时间维度,patch size的选择要综合考虑分辨率、帧数和显存预算。实际操作上,视频DiT通常不会把原始像素直接丢进去,而是先用一个编码器把画面塞进一个紧凑的latent空间,再在latent空间里做patch化。这也是为什么能力强的视频模型几乎都有一个专门的视频VAE——先负责“压缩”,再交给DiT“表演”。

不少同学刚接触这个概念时,会把patch化和语言模型里的tokenization搞混。两者本质上是一个意思:把连续信号切成离散单元再嵌入成向量。区别在于文本token是词或子词,天然有明确的边界;视频token是从连续像素里切出来的立方体,本身没有语义边界,全靠模型自己去学。这导致视频token的“含义”没有文本那么凝固,也正因如此,DiT对位置编码的依赖要比LLM重得多。没有好的时空位置编码,模型很容易把注意力全部分布到同类patch上,画面乱成一锅粥。

2.2 DiT block里怎么混入“时间步”和“文本条件”

如果说patch化解决了“视频怎么进入Transformer”,那还有两个信息必须混进去:这是去噪的第几步(扩散时间步t),以及我想要的画面内容是什么(文本prompt、类别等)。DiT论文比较了三种条件注入机制:adaLN(自适应层归一化)、cross-attention(交叉注意力)、in-context conditioning(把条件直接拼进token序列)。结论是adaLN-Zero效果最好:它将时间步和类别条件通过MLP算出来,变成一组scale和shift参数,对每个DiT block的层归一化输出做一次仿射变换,同时把残差分支初始化为零。这么做的好处是训练初期模型输出就是纯恒等映射,稳定性好,收敛也更快。

但在视频生成场景下,文本条件要复杂得多。单靠adaLN携带全局向量,很难把一整段文字细枝末节都注入到位。所以到了Sora以及后续视频模型里,条件注入早就不再是单一机制,而是“adaLN+交叉注意力+原生token拼接”混合着用。OpenAI技术报告里专门谈到“单流”和“双流”两种做法:双流是文本token和视频token先各走各的Transformer分支,再找一个阶段合并;单流是把两类token拼接成同一条序列统一处理。后者共享计算资源,减少了一倍的注意力开销,但代价是模型要自己学会分辨“这是文字”和“这是画面”,需要更强的先验。说人话就是:单流更省算力但更难练,双流练起来更稳但费钱。现在很多团队在这两种路线之间反复横跳,本质上就是在这笔账上做权衡。

2.3 从“预测噪声”到“预测v”,再聊聊训练目标

扩散模型的训练目标这些年也在进化。最早的实现是直接预测噪声(noise prediction),后来又流行起预测v(即让模型估计“当前图像与干净图像的差异方向”),以及预测x0(直接预测原始干净样本)。DiT论文用的时候以噪声预测为主,但新一代视频DiT普遍混合了v-prediction和时间步采样策略,这直接影响生成质量尤其是运动细节。理解这个演进不需要记住太多公式,抓住一条主线就够:模型学的不是“画成什么样”,而是“每一步怎么从更乱的状态退回到更干净的状态”,而不同的预测目标相当于给这个“退回过程”指定了不同的路标系统。回到实操里,你会发现大部分视频DiT的训练稳定性和采样步数选择,都跟这个细节强相关。

拿v-prediction举例,它在高噪声区域比直接预测x0更稳,因为此时输入信号几乎全是噪声,硬猜x0等于让模型做极限推理;测v相当于让它先找到方向感,再逐步推算走多远。视频模型的运动连贯性,很大程度上就从这种“方向感”里来。做视频DiT项目时,如果你发现生成的画面静止时清晰、一动起来就发虚,排除掉VAE的问题之后,先怀疑训练目标和时间步采样策略是不是不匹配。这是我踩过真金白银的坑,特别值得记下来。

3. 各大视频模型为什么都在“抄DiT这个剧本”

3.1 从Sora之后,公开技术栈几乎一页纸就能理清

Sora自己就是DiT的直接扩展:它在时序上做时空patch化,用DiT做主干,报告里的架构描述几乎可以翻译成“我们给DiT加了超长上下文、3D token和混合条件注入”。问题的关键不是Sora用了DiT,而是Sora证明了这个路线在暴力堆算力的情况下可以突破分钟级长生成。这个信号比任何论文都管用。于是后续你能看到的头部视频生成模型,技术路线收敛得惊人:Runway的Gen-3系列明确用了DiT;Luma的Dream Machine背后是DiT类模型;Pika 2.0、快手可灵、字节即梦、以及智谱清影背后的CogVideoX,基本都在Diffusion Transformer的框架下做文章。区别主要在于视频表征(VAE设计)、条件注入方式、并行策略和长视频注意力优化。

为了更直观,我用一张速查表整理一下公开资料里各家视频模型与DiT的关联。需要说明的是,这些信息一部分来自论文和技术报告,一部分来自官方公开演讲,信息颗粒度不同,仅供梳理思路,别当合同引用。

模型底层架构方向公开资料要点
Sora (OpenAI)DiT扩展时空patch、单流/双流训练、混合条件注入
Runway Gen-3DiT官方技术博客明确基于DiT,专注高保真运动控制
Luma Dream MachineDiT类自研视频VAE + Transformer主干
Pika 2.0DiT类强调多模态上下文,沿用扩散+Transformer
快手可灵DiT类面向长时间视频的Transformer生成框架
字节即梦 (Seedance)DiT类大规模DiT + 自研视频编码器
智谱CogVideoXDiT3D Causal VAE + DiT,开源权重可下载

这张表的潜台词是:你几乎找不到一家还在纯U-Net路线上做视频生成的头部玩家。这跟三年前“图像模型必用U-Net、各有各的结构创新”的局面差别非常大,行业共识之强,在AI历史上都算少见。

3.2 为什么没有人回头去战U-Net了

可能有人会问,这个剧本真的是唯一答案吗?我觉得不是唯一,但它是当下综合性价比最高的。原因有三层。第一,Transformer的强扩展性是已经被大模型验证过的:语言模型的scaling规律直接迁移到视觉上,DiT论文里那张FID随参数量下降的曲线摆在那里;第二,工程生态已经全面倾斜。分布式训练框架、优化器、推理加速库,全都针对Transformer做了深度优化,继续优化U-Net意味着要自己养一套并行方案;第三,人才和经验可以横跨文本与视觉复用。今天负责视频DiT训练的人,很多是从LLM团队借调来的,他们对序列并行、激活重算、混合精度这些技术已经熟得不能再熟。这三点叠起来,足以让绝大多数团队选择“同一个剧本”。

这里想特别展开一下工程生态这事。你可能觉得“架构选择”是纯学术问题,但工程师会告诉你,一套成熟的分布式训练栈比模型结构本身更能决定项目死活。我用PyTorch训练过U-Net和DiT,体感差异特别明显:DiT的算子、模块划分、梯度同步策略,几乎可以从开源LLM训练框架里直接搬;U-Net的那些多尺度特征和中转张量,反而在张量并行场景下让通信开销变得很难看。说白了,生态已经把Transformer的复用价值打到了极致,这不是“坚持特色创新”就能抵消的成本。

3.3 抄剧本也不代表没差别:你们比的到底是什么

既然架构都在趋同,差异化跑到哪去了?这是这段时间我反复跟同行聊的问题。目前来看拉开差距的其实是四块:视频编码器的质量(比如可灵和即梦的VAE能保留多少高频细节,直接决定画面锐度);时序和运动建模(时间注意力的窗口开多大、是否做分层稀疏注意力,决定长视频不崩);数据配方(视频从哪里来、怎么清洗、配比如何,决定审美和风格);以及工程效率(同样的预算下谁能把有效上下文拉到更长、采样做得更快)。换句话说,DiT给所有参赛者发了同一支笔,但不同的答卷质量依然天差地别。

举一个具体例子,同样一句话“一只猫在雨中的城市街道上慢跑”,两个都用DiT的模型可能给出完全不同的结果。一个画面锐利但猫的四肢轨迹偶尔穿模,另一个整体风格偏柔和但运动非常连贯。这种差异极少来自DiT主干本身,更多来自视频VAE对雨丝和毛发的重建能力、数据里猫跑动样本的数量、以及时间注意力对连续性的约束方式。做产品的人如果理解不到这一层,很容易被“架构都一样”的结论误导,忽视数据与表征这两个真正的护城河。

4. 想上手DiT做视频生成,需要抓住的参数和实操要点

4.1 模型骨架和超参数怎么选:从看懂到跑通

如果你现在想自己复现或微调一个视频DiT,最基础的骨架就三块:Video VAE(负责把视频压缩到latent空间)、DiT主干(负责去噪和条件建模)、文本编码器(把prompt变成token)。我在摸索阶段最推荐的路径是先跑通DiT的图像版,把patch、adaLN-Zero和缩放规律吃透,再切到视频。理由是视频DiT里80%的调试经验在图像DiT里已经有了,直接上视频,排查问题会顾此失彼。

实操里几个参数优先级最高:

  • patch size:决定token数和细节上限。建议图片阶段从2起步,视频阶段按设备从2x2x2或2x2x1试起。patch越小细节越好但序列越长,显存压力线性上涨。
  • latent空间通道数:VAE一般把视频压缩到4到16个通道,通道数越多,重建质量越好但去噪计算越贵。很多画面发灰问题,根源在这里而不在DiT。
  • 最大训练分辨率/帧数:这个直接限制序列长度,也是注意力计算的大头。新手别一上来就冲1080Px24帧,先在256x256x16帧上验证稳定,再逐步加码。
  • 学习率和优化器:AdamW基本标配,学习率要根据batch size和DiT规模做线性缩放,别照抄别人媒体文章里不匹配的数值,要跟自己的batch size配套。

这个参数清单看起来不长,但每一项都牵一发动全身。我自己见过最典型的新手失误,就是把patch size从2改到4来省显存,结果画面细节掉了一个档次,又回头折腾VAE。改参数之前,最好先定位瓶颈到底在哪,再动手。

4.2 显存和FLOPs的账:注意力长度是显存杀手

很多人第一次接触视频DiT就被显存吓到。原因很简单,注意力复杂度是O(n^2)。一个256x256x16帧的视频,经过VAE压缩后latent尺寸可能是32x32x16,假设patch size取2,时间维token数也会被压缩折算,序列长度经常上万。这个长度在自注意力里会生成上亿规模的注意力矩阵,显存直接告急。业内主流解法包括:把视频切成多个时间块做注意力窗口(Temporal Attention Window)、使用稀疏注意力和FlashAttention系列算子、开激活重算来换显存、以及用序列并行把长序列分摊到多个GPU。选GPU时也别只看显存,带宽和互联速度往往才是长序列训练的实际瓶颈。

你可以快速估算一个batch的显存占用:先算出token数N,注意力矩阵就是N乘N乘batch里并行头的数量,再乘每个元素的字节数。我遇到过一个案例,模型规模没多大,但token数从四千涨到八千,显存直接翻了三倍。这就是注意力平方项在发威。动手训练前,先把本质流程想明白确实能省很多时间。

为了让你对这个过程有骨架认识,我贴一段理解性的伪代码,别看它短,视频DiT单步训练的核心逻辑都在里面。

# 伪代码:视频DiT单步训练主干逻辑 for batch in loader: video = batch["video"] # (B, C, T, H, W) prompt = batch["prompt"] # (B,) latents = video_vae.encode(video) # 压缩到 (B, c, t, h, w) t = sample_timestep(batch_size) # 基于训练策略采样时间步 noise = randn_like(latents) noisy = latents * sqrt(alpha[t]) + noise * sqrt(1 - alpha[t]) tokens = patchify(noisy) # 时空patch化,加位置编码 cond = text_encoder(prompt) # 中间混合adaLN + cross-attention注入条件,主干DiT Block反复堆叠 pred = dit(tokens, t, cond) target = get_target(latents, noise, t, prediction_type="v") loss = mse_loss(pred, target) optimizer.zero_grad() loss.backward() optimizer.step()

当然这只是主干,真实工程里还包括EMA、混合精度、梯度裁剪、并行策略、数据预取这些,但训练的本质就是反复做“加噪—反向去噪—算差值—更新权重”。把这个循环刻在脑子里,后面看任何视频DiT项目都会快很多。

4.3 训练和采样阶段最常踩的坑

我整理了五个自己观察或亲历过的坑,每个都能劝退一批初学者。

  • 直接照搬图像DiT的学习率。视频DiT序列更长、梯度噪声更大,往往需要更小的学习率或更长预热。图像阶段work的1e-4,到视频上直接可能让loss起飞。
  • 忽略时间位置编码的重要性。视频里时间维的位置编码如果没学好,模型会分不清前后帧,生成结果一会出现“鬼影”或倒放。排查时优先看时间位置编码的初始化方式。
  • VAE练得不够好却归咎于DiT。视频画面模糊、闪烁,很多时候是视频VAE重建上限不够,DiT模型很冤枉。先单独测VAE的重建误差,再谈DiT优化。
  • 采样步数用太少。视频DiT默认30步,有些场景需要50步或更多;步数太少会出现运动不连贯或过度平滑。推理时不能只追速度,得在步数和画质间找平衡。
  • 长视频直接单序列硬推理。超过预算的序列长度要么爆显存,要么注意力崩坏。多数产品会分成多段续拍,再靠时序条件拼接。单序列硬扛是最常见的失败姿势。

这几个坑的共同点在于,它们都不是“模型结构不对”,而是“训练和推理习惯还停留在图像模型时代的惯性”。做视频DiT,最需要转变的是对序列长度和时间维度的敏感度,这个心态转过来,后面就顺了。

5. 常见问题与误区排查

5.1 视频模型为什么既像Sora又不像Sora

很多读者会问:如果都用DiT,为什么各家生成风格差这么多?前面已经提过差异来源,这里再补一个视角:DiT管的是“去噪主干”,但prompt理解深度、视频表征、训练数据这三大因素,基本决定了最终风格的走向。所以“架构趋同”和“成品各异”并不矛盾,就像同一颗发动机,底盘、调校、悬挂不同,开起来完全是两种车。

有些朋友可能还会困惑,既然Sora把DiT带到公众视野,为什么总有人强调“DiT不是Sora提出的”?这个问题在学术和工程圈其实都有共识:DiT是公开论文成果,Sora是它的知名应用。搞清楚这个先后关系,对你判断哪些技术是真正壁垒、哪些是公开基础,非常重要。如果连这个根都认错,很容易被各种营销话术带着走。

我用一个表格把常见的误区和实际情况整理出来,方便速查:

常见说法实际情况
视频模型都抄Sora更准确说,都继承了DiT这个共同起点,Sora本身也是DiT扩展
DiT就是视频模型DiT是通用扩散主干,图像、视频、3D都能用
用DiT就能生成高质量视频数据、VAE、算力、工程缺一不可,架构只是入场券
单流一定比双流好两种设计各有取舍,单流更紧凑但训练要求更高
视频模型靠的是神秘新架构真正拉开差距的是视频表征、数据配方和工程效率

5.2 初学DiT,时间该花在哪

如果让我只给你一条路线建议,我的顺序是这样的:先把扩散模型的基本原理搞熟,知道什么是对噪声、对v;然后把ViT和注意力机制弄明白,知道序列长度怎么影响计算;再看一遍DiT论文和复现代码,重点看adaLN-Zero和patch化;最后才进入视频任务,先跑小规模的类DiT代码,在单卡上把训练、采样闭环跑通。这条路我能想到的最省时间的路径,替你省下的主要是反复试错成本。

有人会问,能不能直接跳到最后一步,跑通一个开源视频DiT就当会了?我见过不少这么做的人,结果遇到loss震荡、画面崩坏时完全无从下手。原因就是前面的原理模块没有打通,一报错就只能去论坛里发帖等回复。反过来,那些花了两周把原理吃透的人,遇到问题能直接定位到是条件注入、位置编码还是数据预处理,效率差好几倍。

5.3 从学习到落地:你现在能用的框架和验证路径

现在生态已经比Sora刚发布时友好得多。Diffusers库里对DiT模型的支持越来越全,想快速跑一个官方DiT checkpoint做图像生成,审视一下效果,一两个小时足够。视频方向有CogVideoX这类开源权重,可以微调出可运行的小模型。如果你主要是为了理解DiT,用PyTorch搭一个mini版DiT跑MNIST或小分辨率图像,会比只看论文收获大得多。遇到问题先看注意力矩阵,先在VAE上做消融,大部分疑难杂症都能定位。

还有一个特别容易被忽略的验证手段:可视化位置编码。很多视频DiT起动后生成乱码,你把位置编码的热力图画出来,一眼就能看出时间维和空间维是否学到了合理的相对顺序。这个手段成本极低,但能省下大量排查时间。做视觉生成方向的工程师,千万别把自己困在“只读loss曲线”的思维里,把中间产物打开看,永远是最快的诊断方式。

我个人在实操里最深的体会是:Sora之后这场视频模型大战,最值得复盘的不是哪家视频多惊艳,而是整个行业几乎同频地选择了一个公开多年的架构作为公共底座。DiT能走到这个位置,靠的并不是某个神乎其神的技巧,而是它把“可扩展性”和“通用性”这两件事做到了极致。如果你正在考虑入局视频生成,我的建议是先别急着追各种花哨的产品功能,老老实实把DiT这套机制吃透——这条路不轻松,但最稳。最后再分享一个小技巧:真正理解DiT的最好方法,不是反复读论文,而是亲手把patch化的代码写一遍、把注意力长度变化时显存的账算一遍,这个过程比任何视频教程都管用。把底层算力账和结构账都摸清了,你再回头看各家视频模型的竞争,就不会被任何营销话术忽悠了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询