目录
写在前面
一、VAE
二、Transformer
三、Classifier Free Guidance
四、总结
写在前面
经常耍视频生成的小伙伴肯定发现了一个现象:同样是生成5s的视频,有的模型几十秒(比如即梦)就能完成,而有的却需要几分钟(比如可灵需要5分钟)。
那为什么生成速度差距这么大呢?要不,冲个VIP试试?.
我发现开源的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模型结构类似,都是下面这样:
图1
这里有一些重要的对比参数:
Wan2.1 | LTXVideo | |
参数量 | 1.2亿 | 9.3亿 |
空间下采样 | 8x8 | 32x32 |
时间下采样 | 4 | 8 |
潜在空间维度 | 16 | 128 |
压缩比 | 1:48 | 1:192 |
表1
重点来了,压缩比:
压缩操作:所谓的压缩操作时发生在VAE的编码阶段,解码阶段是将压缩后的数据在放大到指定分辨率。
空间下采样:以LTXVideo为例,将每帧的宽度和高度各缩小 32 倍,即从原始的 H×W 缩小到
。 时间下采样×8:以LTXVideo为例,将帧数缩小 8 倍,即从原始的 T 帧缩小到
帧。
压缩比:VAE 的潜在空间使用了 128 个通道,而原始视频通常有 3 个通道(RGB)。因此压缩比的计算如下:
压缩比:
压缩比:
这意味着,经过 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结构如下:
图2
LTXVideo结构如下:
图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时也经常看到这个参数,那他是干什么的呢?
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执行时间减半。
好了关于视频生成模型速度的内容就介绍到这。