目录

写在前面

一、VAE

二、Transformer 

三、Classifier Free Guidance

四、总结


写在前面

        经常耍视频生成的小伙伴肯定发现了一个现象:同样是生成5s的视频,有的模型几十秒(比如即梦)就能完成,而有的却需要几分钟(比如可灵需要5分钟)。

为什么即梦那么快?可灵那么慢!_算法

        那为什么生成速度差距这么大呢?要不,冲个VIP试试?.

为什么即梦那么快?可灵那么慢!_人工智能_02

        我发现开源的LTXVideo(1.9B参数)和Wan2.1(1.3B参数)在RTX4090上推理时,生成5秒视频分别耗时37秒和260秒——这个速度表现恰好与未付费版的即梦和可灵一致。既然这两个模型规模相近,我们就来深入分析下为何它们的推理速度会相差近10倍。

        先说结论,在同等规模的情况下,影响视频生成速度的最大因素是:压缩比!

        压缩比是啥?这是个问题!

        当下主流视频生成模型采用的是 分阶段训练 策略,即 先训练 VAE(变分自编码器),再训练 Transformer 部分,而非端到端联合训练。

        数据压缩操作是VAE做的,Transformer 感觉压缩的数据执行推理。VAE压的越厉害,压缩比越高,执行速度也就越快。

一、VAE

        VAE的训练目标是高效编码和解码视频帧,降低数据维度,同时保持高画质(在测试中,压缩至原始数据的 1/34 时仍保持 98.7% 画质)。

        两个模型都使用 3D-VAE(三维变分自编码器)对视频数据进行时空分离压缩,将视频分解为空间(Spatial)和时间(Temporal)两个维度分别处理

        LTXVideo和Wan2.1模型结构类似,都是下面这样:

为什么即梦那么快?可灵那么慢!_人工智能_03

图1

        这里有一些重要的对比参数:

Wan2.1

LTXVideo

参数量

1.2亿

9.3亿

空间下采样

8x8        

32x32

时间下采样

4

8

潜在空间维度

16

128

压缩比

1:48

1:192

表1

        重点来了,压缩比:

        压缩操作:所谓的压缩操作时发生在VAE的编码阶段,解码阶段是将压缩后的数据在放大到指定分辨率。

        空间下采样:以LTXVideo为例,将每帧的宽度和高度各缩小 32 倍,即从原始的 H×W 缩小到

为什么即梦那么快?可灵那么慢!_深度学习_04

        时间下采样×8:以LTXVideo为例,将帧数缩小 8 倍,即从原始的 T 帧缩小到

为什么即梦那么快?可灵那么慢!_深度学习_05

帧。

        压缩比:VAE 的潜在空间使用了 128 个通道,而原始视频通常有 3 个通道(RGB)。因此压缩比的计算如下:

压缩比:

为什么即梦那么快?可灵那么慢!_算法_06

压缩比:

为什么即梦那么快?可灵那么慢!_ide_07

        这意味着,经过 VAE 编码后,两个模型分别将视频数据的体积是原始数据的 1/48和1/192。LTXVideo的压缩比是Wan2.1的4倍。那么这个4倍的压缩比会带来多大的速度提升呢。

二、Transformer 

          在 VAE 训练完成后,就是训练基于扩散的 Transformer 结构( DiT 架构)在潜在空间进行时空建模,学习视频的动态变化。VAE+DiT才是整个模型的完全体。

        由于我们只讨论推理速度,所以直接跳过Transformer 的训练直接来到推理阶段,推理时并不会用到VAE的Encoder。

[1, 3, 81, 480, 832];Wan2.1的fps=24,那么模型的输出是[1, 3, 121, 480, 832],

Wan2.1结构如下:

为什么即梦那么快?可灵那么慢!_人工智能_08

图2

LTXVideo结构如下:

为什么即梦那么快?可灵那么慢!_视频_09

图3

        值得注意的是,图中只画了影响速度的一些模块,除此之外很多很多的细节没有展现(比如位置编码等),下面是这些模块具体参数和执行速度的对比:

模块名

Wan2.1输出

Wan2.1输出

Wan2.1
耗时

LTXVideo输出

LTXVideo输出

LTXVideo
耗时

Self-Attention Query

[1, 32760, 1536]

[1, 32760, 1536]

18ms

[1, 6240, 2048]

[1, 6240, 2048]

3ms

Self-Attention Key

[1, 32760, 1536]

[1, 32760, 1536]

18ms

[1, 6240, 2048]

[1, 6240, 2048]

3ms

Self-Attention Value

[1, 32760, 1536]

[1, 32760, 1536]

18ms

[1, 6240, 2048]

[1, 6240, 2048]

3ms

Crosse-Attention Query

[1, 32760, 1536]

[1, 32760, 1536]

18ms

[1, 6240, 2048]

[1, 6240, 2048]

3ms

Crosse-Attention Key

[1, 512, 1536]

[1, 512, 1536]

0.1ms

[1, 128, 2048]

[1, 128, 2048]

0.01ms

Crosse-Attention Value

[1, 512, 1536]

[1, 512, 1536]

0.1ms

[1, 128, 2048]

[1, 128, 2048]

0.01ms

FFN

[1, 32760, 1536]

[1, 32760, 1536]

5ms

[1, 6240, 2048]

[1, 6240, 2048]

0.18ms

Scheduler

FlowMatchEulerDiscreteScheduler

[1, 16380, 1536]

[1, 16, 21, 60, 104]

33ms

UniPCMultistepScheduler

[1, 6240, 2048] 

[1, 128, 16, 15, 26] 

0.14ms

Decode

[1, 16, 21, 60, 104]

[1, 3, 81, 480, 832]

4s

[1, 128, 16, 15, 26] 

[1, 3, 121, 480, 832]

0.83s

表2

        从表1可以看出,LTXVideo的压缩程度更强,是Wan2.1的4倍(192/48),这就造成表2中耗时的主要来源Attention 中的KQV的输入输出规模都是Wan2.1更大,约为LTXVideo的4倍;高压缩比带来的Attention的KQV推理速度提升达到6倍(18ms/3ms),FFN的推理速度提升达到惊人的27倍(5s/0.18s);Scheduler两者是算法区别带来的速度差异,我们暂且不做讨论;decode的速度也提高了4.8倍,但是因为decode操作只执行一次,这部分收益有限。

        表2中的32760和6240两个数来自输入数据的下采样,而1536和2048是可以根据Transformer的参数算出来的,先来看两个模型Transformer部分的参数对比:

参数

Wan2.1

LTXVideo

class_name

WanTransformer3DModel

LTXVideoTransformer3DModel

层数 (num_layers)

30

28

注意力头数 (num_attention_heads)

12

32

每头维度 (attention_head_dim)

128

64

输入通道数 (in_channels)

16

128

输出通道数 (out_channels)

16

128

patch size

[1, 2, 2]

[1, 1, 1]

FFN维度 (ffn_dim/caption_channels)

8960

4096

跨模态注意力维度 (cross_attention_dim/text_dim)

4096

2048

表3        

        根据表3,注意力头数x每头维度,Wan2.1:12×128=1536;LTXVideo: 32×64=2048 。

        最后计算一下总耗时,计算结果会略小于开篇提到的时间,因为有一些耗时不高的操作没有统计进来,我们只关注耗时高的操作:

Wan2.1耗时 = (18*4+0.1*2+5)*30*2*50+33*2*50+4000 = 238900ms,其中30是Attention的层数;

LTXVideo耗时 = (3*4+0.01*2+0.18+0.14)*28*2*50+830 = 35382ms,其中28是Attention的层数。

三、Classifier Free Guidance

        我们在图2和图3中可以看到有一个CFG参数,在使用ComfyUI时也经常看到这个参数,那他是干什么的呢?

为什么即梦那么快?可灵那么慢!_ide_10

        Classifier-Free Guidance(CFG) 是一种在生成模型(如扩散模型或条件生成模型)中用于提升生成样本质量和条件控制能力的技术。直白点说,CFG越大,反向提示词的作用就越大,而反向提示词一般都是控制输出质量的(例如:“模糊、畸变、多手指”),所以提高CFG就达到了提升图像质量的目的。

        如果CFG<=1,那么生成的视频完全根据正向提示词,负向提示词不起作用。

        为什么要提CFG呢 ,因为在模型的实现代码中都会出现类似下面的判断,当CFG<=1就不再生成反向提示词的latent,那Transformer部分执行时长会减半,这对推理速度来说很重要!!

if self.do_classifier_free_guidance:noise_uncond = self.transformer(hidden_states=latent_model_input,timestep=timestep,encoder_hidden_states=negative_prompt_embeds,attention_kwargs=attention_kwargs,return_dict=False,)[0]noise_pred = noise_uncond + guidance_scale * (noise_pred - noise_uncond)

四、总结

        最后总结一下:

        1.影响视频生成速度的最大因素是压缩比;

        2.压缩比是由VAE控制的;

        3.模型最耗时的地方在Transformer,因为会循环执行很多次,所有压缩比带来的收益在Transformer部分最明显;

        4.调整CFG可以改变生成质量,CFG越大,反向提示词越重要,如果CFG<=1则反向提示词不起作用,Transformer执行时间减半。

        好了关于视频生成模型速度的内容就介绍到这。