Magic 1-For-1:在一分钟内生成一分钟视频剪辑
paper是PKU发布在Arxiv 2025的工作
paper title:Magic 1-For-1: Generating One Minute Video Clips within One Minute
Code:地址
Abstract
在本技术报告中,我们提出了 Magic 1-For-1(Magic141),这是一种在内存消耗和推理延迟方面经过优化的高效视频生成模型。其核心思想很简单:将文本到视频的生成任务分解为两个更容易的子任务,即文本到图像生成和图像到视频生成,从而实现扩散步蒸馏。我们验证了,在相同的优化算法下,相较于文本到视频任务,图像到视频任务确实更容易收敛。
我们还探索了一系列优化技巧,从三个方面降低训练图像到视频(I2V)模型的计算成本:1)通过多模态先验条件注入来加速模型收敛;2)通过应用对抗性步蒸馏来加速推理延迟;3)通过参数稀疏化来优化推理阶段的内存消耗。
利用这些技术,我们能够在3秒内生成5秒的视频片段。通过在测试时使用滑动窗口机制,我们能够在一分钟内生成时长为一分钟的视频,在显著提升视觉质量和动作动态的同时,实现平均每秒视频生成耗时不到1秒。
我们还进行了一系列初步探索,以寻找扩散步蒸馏中计算成本与视频质量之间的最佳权衡点,并希望这可以作为开源探索的一个良好的基础模型。
图一:在General VBench上的对比实验结果表明,Magic 1-For-1具有很强的性能。在性能和效率方面,我们的模型优于其他开源TI 2 V模型,包括CogVideoX-I2 VSAT,I2 Vgen-XL,SEINE-512 x320,VideoCrafter-I2 V和SVD-XT-1.0。
图2:Magic 1-For-1可以生成具有优化的效率-质量权衡的视频剪辑。
1 Introduction
近年来,扩散模型在生成高质量图像和视频方面表现出色,较传统的生成对抗网络(GAN)方法展现出更广泛的多样性。然而,传统扩散模型通常需要数百甚至上千步来逐渐将噪声转换为结构化数据,计算开销巨大,限制了其实际应用。例如,近期的一个开源视频生成模型 [18] 在未经过优化的情况下,生成一个5秒的视频片段大约需要8块GPU和15分钟。
近期关于扩散步蒸馏的工作 [28, 31, 26, 26] 旨在通过减少推理步骤来加速生成过程,同时保持较高的样本质量。然而,大多数研究集中在图像生成方面。尽管这些方法具有潜力,但在视频生成中常常牺牲生成质量,并且需要精心设计的架构才能达到令人满意的效果。正如 SeaweedAPT [20] 所指出的,当这些方法迁移到视频生成任务时,大多数一步视频生成算法仍然在运动动态和结构方面存在显著的质量下降。
在本报告中,我们提出将视频生成任务简化为两个独立的子任务:文本到图像生成和图像到视频生成。这一策略与 Emu Video [?] 关注于提升视频生成质量的目标不同,我们更关注于减少扩散推理步骤。文本到图像任务本身较为简单,并且有大量先前的研究支持,因此天生就需要更少的扩散步骤。
我们通过实验证明,在文本到图像生成任务中,扩散步蒸馏算法的收敛速度显著更快,并且能够提升最终的生成质量。为了进一步增强生成先验,我们引入多模态输入,通过将文本编码器与视觉输入结合使用。借助量化技术,我们将内存消耗从40G降低到28G,并将扩散步骤从50步减少到仅4步,在生成质量几乎没有下降的情况下实现性能优化。
总之,我们的贡献如下:
• 生成先验注入:我们通过任务分解引入更强的生成先验,提出了一种新颖的视频生成加速策略。
• 多模态引导:我们提出一种多模态引导机制,通过引入视觉输入辅助文本输入,加快模型收敛。
• 全面优化策略:我们结合多种模型加速技术,在生成质量和推理效率之间实现了最优的权衡。
2 Related Works
视频生成是一个快速发展的研究领域,依托深度学习和生成模型的进步而不断取得突破。早期方法依赖自回归模型 [17],通过基于过去帧逐帧生成视频,但该方法容易出现累积误差问题。随后引入了变分自编码器(VAE)[2] 和生成对抗网络(GAN)[34, 7],这些方法在提升视觉保真度方面表现更好,但在长序列中仍然难以保证时间一致性。
近年来,基于 Transformer 架构和扩散模型的突破推动了视频生成的发展。VideoGPT [39] 将类似 GPT 的架构用于视频标记化和合成,能够有效捕捉长期依赖关系。扩散模型同样展现出出色的生成能力,例如 Video Diffusion Models (VDMs) [12] 将图像扩散模型扩展到视频生成,通过迭代去噪建模时空动态。此外,基于潜空间的方法如 Imagen Video [13] 和 Make-A-Video [30] 则在压缩表示空间中进行高效的高分辨率合成,这些方法显著提升了视频生成的质量和时间一致性,使得生成具有高度真实感的视频成为可能。
扩散步蒸馏的最新研究则提出了多种方法,以加速扩散模型的采样过程,降低计算成本,同时保持高质量输出。Salimans 和 Ho(2022)提出了渐进式蒸馏(Progressive Distillation),通过让学生模型匹配具有更多采样步数的教师模型的输出,逐步减半采样步数,实现更快的采样同时保持图像质量 [28]。Meng 等人(2023)针对无分类器引导的扩散模型开发了蒸馏方法,大幅加速了推理过程 [21]。Geng 等人(2024)提出将扩散模型蒸馏为单步生成器的方法,采用深度平衡架构,在图像质量损失最小的前提下实现高效采样 [9]。
Watson 等人(2024)提出了 EM 蒸馏方法,一种基于最大似然估计的策略,可将扩散模型压缩为单步生成器,有效减少采样步骤,同时保持感知质量 [36]。Zhou 等人(2024)提出了简单快速蒸馏(Simple and Fast Distillation,SFD),简化了现有的蒸馏范式,将微调时间最多减少 1000 倍,同时实现高质量图像生成 [42]。Yin 等人(2024)提出了分布匹配蒸馏(Distribution Matching Distillation,DMD),该方法可将扩散模型转化为一步图像生成器,对图像质量影响极小 [40]。
这些研究的共同目标是显著降低计算开销,从而使基于扩散的生成模型在实际应用中更加高效和可行。
3 Method
图像先验生成
我们同时采用基于扩散的方法和基于检索的方法来获取图像。我们定义了一个统一的函数 G \mathcal{G} G,它将基于扩散的生成与基于检索的增强结合在一起:
x 0 = G ( x T , y , R ( y ) ; θ ) \mathbf{x}_0=\mathcal{G}\left(\mathbf{x}_T, y, \mathcal{R}(y) ; \theta\right) x0=G(xT,y,R(y);θ)
其中, x T ∼ N ( 0 , I ) \mathbf{x}_T \sim \mathcal{N}(0, I) xT∼N(0,I) 表示初始噪声, y y y 是文本输入, R ( y ) \mathcal{R}(y) R(y) 是检索到的相关图像集合, θ \theta θ 表示模型参数。检索函数 R \mathcal{R} R 被形式化定义为:
R ( y ) = { r i ∣ r i = arg max x ∈ D sim ( ϕ ( y ) , ψ ( x ) ) } \mathcal{R}(y)=\left\{\mathbf{r}_i \mid \mathbf{r}_i=\arg \max _{\mathbf{x} \in \mathcal{D}} \operatorname{sim}(\phi(y), \psi(\mathbf{x}))\right\} R(y)={ri∣ri=argx∈Dmaxsim(ϕ(y),ψ(x))}
其中, D \mathcal{D} D 是图像语料库, ϕ ( y ) \phi(y) ϕ(y) 和 ψ ( x ) \psi(\mathbf{x}) ψ(x) 分别是文本和图像的嵌入表示, sim ( ⋅ , ⋅ ) \operatorname{sim}(\cdot, \cdot) sim(⋅,⋅) 是一个相似度函数(例如余弦相似度)。被检索到的图像作为在去噪过程中的额外条件信号:
x t − 1 = x t − α t ϵ θ ( x t , t , y , R ( y ) ) + σ t z \mathbf{x}_{t-1}=\mathbf{x}_t-\alpha_t \epsilon_\theta\left(\mathbf{x}_t, t, y, \mathcal{R}(y)\right)+\sigma_t \mathbf{z} xt−1=xt−αtϵθ(xt,t,y,R(y))+σtz
其中 ϵ θ \epsilon_\theta ϵθ 是学习得到的噪声预测模型, α t \alpha_t αt 是步长, σ t \sigma_t σt 是噪声方差, z ∼ N ( 0 , I ) \mathbf{z} \sim \mathcal{N}(0, I) z∼N(0,I)。
这种检索增强的扩散过程确保了生成图像在保持高保真度的同时,也具备较强的事实准确性。近期的方法如检索增强扩散模型(RDM)[27] 和 kNN-Diffusion [29] 也证明了该方法的有效性,在提升生成图像的真实感和语义对齐方面具有显著作用。
图像先验注入与多模态引导设计
图像到视频(Image-to-Video,I2V)任务旨在根据给定的文本描述生成一段与其语义一致的视频,同时使用输入图像作为第一帧。具体而言,I2V 模型的输入是一个形状为 T × C × H × W T \times C \times H \times W T×C×H×W 的潜变量张量 X X X,其中 T , C , H , W T, C, H, W T,C,H,W 分别表示压缩视频的帧数、通道数、高度和宽度。
类似于 Emu Video [10],为了引入图像条件 I I I,我们将图像 I I I 视为视频的第一帧,并通过零填充构造一个维度为 T × C × H × W T \times C \times H \times W T×C×H×W 的张量 I o I_o Io,如图 3 所示。同时,我们引入一个形状为 T × 1 × H × W T \times 1 \times H \times W T×1×H×W 的二值掩码 m m m,其在时间维度的第一个位置设置为 1,其余位置设置为 0。然后,将潜变量张量 X X X、填充后的张量 I o I_o Io 和掩码 m m m 在通道维度上拼接,作为模型的输入。
由于输入张量的通道维度从 C C C 增加到了 2 C + 1 2C+1 2C+1(见图 3),我们将模型首个卷积模块的参数从 ϕ = ( C in ( = C ) , C out , s h , s w ) \phi=\left(C_{\text{in}}(=C), C_{\text{out}}, s_h, s_w\right) ϕ=(Cin(=C),Cout,sh,sw) 调整为 ϕ ′ = ( C in ′ ( = 2 C + 1 ) , C out , s h , s w ) \phi^{\prime}=\left(C_{\text{in}}^{\prime}(=2C+1), C_{\text{out}}, s_h, s_w\right) ϕ′=(Cin′(=2C+1),Cout,sh,sw)。其中, C in C_{\text{in}} Cin 与 C in ′ C_{\text{in}}^{\prime} Cin′ 分别表示修改前后的输入通道数, C out C_{\text{out}} Cout 是输出通道数, s h s_h sh 与 s w s_w sw 分别是卷积核的高度与宽度。
为了保留 T2V 模型的表达能力, ϕ ′ \phi^{\prime} ϕ′ 的前 C C C 个输入通道直接复制自原始参数 ϕ \phi ϕ,而新增通道则初始化为零。该 I2V 模型在与 T2V 模型相同的数据集上进行预训练,以保证一致性。
为了进一步增强图像参考的语义对齐能力,我们通过 VLM 文本编码器的视觉分支提取图像的嵌入表示,并将其与文本嵌入拼接,如图 3 所示。该机制提升了模型对图像与文本联合
图3:Magic 1-For-1的整体架构。
3.1 Diffusion Distillation
扩散模型推理的迭代特性,其多步采样过程成为推理速度的主要瓶颈。对于如我们13B参数规模的扩散模型 Magic 1-For-1 来说,这一问题尤为突出,因为每一步采样都伴随着显著的计算开销。如图4所示,我们通过引入双重蒸馏策略,结合步骤蒸馏与CFG蒸馏,有效提升采样速度。
在步骤蒸馏方面,我们采用了DMD2,这是一种为高效分布对齐与加速采样设计的最新算法。受 Score Distillation Sampling(SDS)[25] 启发,DMD2 通过三模型协同训练范式实现步骤蒸馏。三种模型包括:
- 一步/四步生成器 G ϕ G_\phi Gϕ,其参数在训练过程中被持续优化;
- 真视频模型 u θ real u_\theta^{\text{real}} uθreal,用于近似真实数据分布 p real p_{\text{real}} preal;
- 假视频模型 u θ fake u_\theta^{\text{fake}} uθfake,用于建模生成数据分布 p fake p_{\text{fake}} pfake。
值得注意的是,所有三个模型均初始化自同一预训练模型,从而保证了训练的一致性并简化了流程。
步骤蒸馏的分布匹配目标可表述为:
∇ ϕ L D M D ≜ E t ∇ ϕ D K L ( p fake ∥ p real ) ≈ − E t ∫ ϵ ( [ z t − σ t u θ real ( z t , t ) − z t + σ t u θ fake ( z t , t ) ] ∂ G ϕ ( ϵ ) ∂ ϕ d ϵ ) \nabla_\phi L_{\mathrm{DMD}} \triangleq \mathbb{E}_t \nabla_\phi \mathcal{D}_{\mathrm{KL}}\left(p_{\text{fake}} \| p_{\text{real}}\right) \approx -\mathbb{E}_t \int_\epsilon \left( \left[ z_t - \sigma_t u_\theta^{\text{real}}(z_t, t) - z_t + \sigma_t u_\theta^{\text{fake}}(z_t, t) \right] \frac{\partial G_\phi(\epsilon)}{\partial \phi} d\epsilon \right) ∇ϕLDMD≜Et∇ϕDKL(pfake∥preal)≈−Et∫ϵ([zt−σtuθreal(zt,t)−zt+σtuθfake(zt,t)]∂ϕ∂Gϕ(ϵ)dϵ)
其中, z t \mathbf{z}_t zt 表示第 t t t 步的视频潜变量, z t = σ t z 1 + ( 1 − σ t ) z ^ 0 z_t = \sigma_t z_1 + (1 - \sigma_t) \hat{z}_0 zt=σtz1+(1−σt)z^0, z ^ 0 \hat{z}_0 z^0 为少步生成器输出, σ t \sigma_t σt 为噪声调度参数。
该形式将传统基于 score function 的分布匹配(标准 DMD2 中固有)重构为以 t = 0 t = 0 t=0 为中心的分布对齐方法,此重构确保了与 Magic 1-For-1 的训练方法保持一致性。
此外,DMD2 要求对 u θ fake u_\theta^{\text{fake}} uθfake 实时更新,以精准拟合生成数据分布 p fake p_{\text{fake}} pfake。该更新由以下损失函数控制:
L f a k e = E z ^ 0 , z 1 , t ∼ [ 0 , 1 ] [ ∥ z 1 − z ^ 0 − u θ f a k e ( z t , t ) ∥ 2 2 ] L_{\mathrm{fake}} = \mathbb{E}_{\hat{z}_0, z_1, t \sim [0, 1]} \left[ \left\| z_1 - \hat{z}_0 - u_\theta^{\mathrm{fake}}(z_t, t) \right\|_2^2 \right] Lfake=Ez^0,z1,t∼[0,1][ z1−z^0−uθfake(zt,t) 22]
在实际实现中,训练 DMD2 需要同时使用三个模型,即生成器、真实模型与伪模型,这使得即便在每个节点配备 8 张 80GB 显存的 GPU、使用 ZeRO3 配置的情况下,也难以完成标准训练,显存消耗极为巨大。
为了解决这一限制,我们提出利用 LoRA(低秩适配)仅对伪模型的参数进行更新,从而显著减少训练所需的内存开销。
此外,我们还观察到,直接采用标准 DMD2 进行训练常常导致训练崩溃。其根本原因在于:真实模型的输入来源于少步生成器的输出,而该输出的数据分布与预训练阶段使用的训练数据分布存在显著差异,导致真实模型难以适应。
为缓解这一问题,我们采用了一种简单但有效的解决策略:通过调整低秩分支的权重因子,使真实模型的参数轻微向伪模型的参数方向偏移。这一调整有助于对齐两者之间的数据分布,从而保证训练过程的稳定性。
在扩散模型的推理阶段,常常在每一步采样中使用无分类器扩散引导(Classifier-Free Diffusion Guidance,CFG)[14,6]。CFG 通过在去条件化(dropout-conditioning)下执行额外的计算,增强了生成结果对于指定条件的保真度。然而,这会引入显著的计算开销,从而降低推理速度。
为消除该开销并提升推理效率,我们引入了 CFG 蒸馏(CFG Distillation)[21]。我们定义了一个蒸馏目标,训练学生模型 u θ s u_\theta^s uθs 直接产生引导后的输出。具体而言,我们最小化以下关于时间步与引导强度的期望损失:
L c f g = E w ∼ p w , t ∼ U [ 0 , 1 ] [ ∥ u θ ^ ( z t , t , w , T s ) − u θ s ( z t , t , w , T s ) ∥ 2 2 ] L_{\mathrm{cfg}}=\mathbb{E}_{w \sim p_w, t \sim U[0,1]}\left[\left\|\hat{u_\theta}\left(\mathbf{z}_t, t, w, T_s\right)-u_\theta^s\left(\mathbf{z}_t, t, w, T_s\right)\right\|_2^2\right] Lcfg=Ew∼pw,t∼U[0,1][∥uθ^(zt,t,w,Ts)−uθs(zt,t,w,Ts)∥22]
其中,
u θ ^ ( z t , t , w , T s ) = ( 1 + w ) u θ ( z t , t , T s ) − w u θ ( z t , t , ∅ ) \hat{u_\theta}\left(\mathbf{z}_t, t, w, T_s\right)=(1+w) u_\theta\left(\mathbf{z}_t, t, T_s\right)-w u_\theta\left(\mathbf{z}_t, t, \emptyset\right) uθ^(zt,t,w,Ts)=(1+w)uθ(zt,t,Ts)−wuθ(zt,t,∅)
表示在条件输出与无条件输出之间的线性插值预测。 T s T_s Ts 表示文本 prompt。在该公式中, p w ( w ) = U [ w min , w max ] p_w(w)=\mathcal{U}\left[w_{\min }, w_{\max }\right] pw(w)=U[wmin,wmax] 表示引导强度 w w w 是在训练过程中从一个均匀分布中采样得到,这种训练方式使得蒸馏后的模型能够处理多种不同的引导尺度,无需再次训练。
为将引导权重 w w w 整合进模型,我们将其作为额外输入传入学生模型。通过该蒸馏过程,我们可以将传统 CFG 的计算过程压缩为一次简单的前向传播。
我们将总体蒸馏损失 L distillation L_{\text{distillation}} Ldistillation 构建为两个损失项的加权和。CFG 蒸馏损失用于使学生模型的输出对齐到教师模型引导后的预测,而基础预测损失则确保学生模型保留教师模型的基础生成能力。完整的蒸馏损失如下所示:
L distillation = λ cfg L c f g + L b a s e , L_{\text {distillation }}=\lambda_{\text {cfg }} L_{\mathrm{cfg}}+L_{\mathrm{base}}, Ldistillation =λcfg Lcfg+Lbase,
其中,
L b a s e = E z 0 , z 1 , t ∼ [ 0 , 1 ] [ ∥ z 1 − z 0 − u θ s ( z t , t , T s ) ∥ 2 2 ] L_{\mathrm{base}}=\mathbb{E}_{z_0, z_1, t \sim[0,1]}\left[\left\|z_1-z_0-u_\theta^s\left(z_t, t, T_s\right)\right\|_2^2\right] Lbase=Ez0,z1,t∼[0,1][∥z1−z0−uθs(zt,t,Ts)∥22]
λ cfg \lambda_{\text{cfg}} λcfg 是用于平衡两个损失项的重要系数。
3.2 Model Quantization
我们使用 optimum-quanto 框架进行模型量化,采用 int8 的权重量化方法以最小化模型的内存占用。该量化策略主要针对去噪网络的各个部分,包括 Transformer 块、文本编码器以及视觉语言模型(VLM)编码器。
量化过程将原始的 bfloat16 权重映射为 int8 数值。常见的做法是先将 bfloat16 值缩放到合适的范围后再进行转换。例如,可以先找出某个权重张量中绝对值的最大值,并将所有权重按比例缩放,使该最大值对应 int8 可表示的最大数值(127 或 -128),然后执行转换操作。一个简化的缩放示意如下所示:
w i n t 8 = round ( w b f 16 × 127 max ( ∣ w b f 16 ∣ ) ) w_{\mathrm{int} 8}=\operatorname{round}\left(w_{\mathrm{bf} 16} \times \frac{127}{\max \left(\left|w_{\mathrm{bf} 16}\right|\right)}\right) wint8=round(wbf16×max(∣wbf16∣)127)
其中, w b f 16 w_{\mathrm{bf16}} wbf16 表示原始的 bfloat16 权重, w i n t 8 w_{\mathrm{int8}} wint8 表示量化后的 int8 权重, max ( ∣ w b f 16 ∣ ) \max \left(\left|w_{\mathrm{bf16}}\right|\right) max(∣wbf16∣) 表示该权重张量中元素的绝对值最大值。
在实际应用中,为获得更好的性能,也可以使用更复杂的技术,例如通道级量化(per-channel quantization)或量化感知训练(quantization aware training)。
为了在推理过程中缓解潜在的 CUDA 错误并确保数值稳定性,所有线性层在进行矩阵乘法前,会先将输入转换为 bfloat16,然后再与 int8 权重相乘。这种 bfloat16-int8 的乘法方式既能保持精度,又能充分利用 int8 权重所带来的内存节省优势。
在量化前,模型权重大约占用 32GB 的内存。应用 int8 量化后,模型大小减少至约 16GB。在推理运行时,峰值内存使用量约为 30GB。此优化后的模型可以在消费级及推理优化型 GPU(如 RTX 5090、A10 和 L20)上运行。