文章链接:https://arxiv.org/abs/2406.16260
工程地址:https://video-infinity.tanzhenxiong.com/
代码地址:https://github.com/Yuanshi9815/Video-Infinity
虽然最近扩散模型在视频生成方面取得了显著的成果,但生成的视频通常仅限于少量帧,导致剪辑只持续几秒钟。生成较长视频的主要挑战包括显著的内存需求以及在单个GPU上所需的长时间处理。一个简单的解决方案是将工作负载分散到多个GPU上,但这会导致两个问题:
-
确保所有GPU有效通信以共享时间和上下文信息;
-
修改现有的视频扩散模型,这些模型通常在短序列上进行训练,以创建更长的视频而无需额外训练。
为了解决这些问题,本文介绍了Video-Infinity,一种分布式推理pipeline,能够在多个GPU上并行处理以生成长视频。具体来说,提出了两种一致性机制:剪辑并行和双范围注意力。剪辑并行优化了跨GPU的上下文信息收集和共享,最小化通信开销,而双范围注意力则调节时间自注意力,在设备之间有效平衡局部和全局上下文。两种机制结合在一起,分配工作负载并实现快速生成长视频。在8×Nvidia 6000 Ada GPU(48G)设置下,本文的方法可以在大约5分钟内生成最多2300帧的视频,使得长视频生成的速度比现有方法快100倍。
亮点直击
首次通过分布式并行计算解决长视频生成问题,提高了可扩展性并减少了生成时间。
引入了两种相互关联的机制:剪辑并行化优化了GPU间的上下文信息共享,双范围注意力机制调整时间自注意力以确保设备间视频的连贯性。
本文的实验表明,与现有的超长文本到视频方法Streaming T2V 相比,本文的方法可以快达100倍。
介绍
人类一直以来追求在数字系统中复制我们所生活的动态世界。传统上这部分工作由物理学和图形学主导,但最近随着数据驱动生成模型的出现而得到了增强。这些模型可以创建高度逼真的图像和视频,使其与现实难以区分。然而,这些模型通常只能生成非常短的视频片段,大多数限制在16-24帧。一些模型可以扩展到60或120帧,但在分辨率和视觉质量上做出了很大妥协。
生成长视频面临重大挑战,主要是由于模型训练和推理所需的资源需求巨大。当前的模型受限于可用资源,通常在短片段上进行训练,很难在更长的序列中保持质量。此外,一次性生成一分钟长的视频可能会占用GPU内存,使任务显得难以实现。
现有的解决方案,包括自回归方法、分层方法和从短到长的方法,提供了部分补救措施,但存在显著的局限性。自回归方法按顺序生成帧,依赖于前面的帧。分层方法先创建关键帧,然后填充过渡帧。此外,一些方法将长视频视为多个重叠的短视频片段。这些方法不是端到端的;它们通常缺乏全局连续性,需要大量计算,尤其是在重叠区域,并且在跨段一致性方面挣扎。
为了解决这些问题,本文引入了一个用于分布式长视频生成的新框架,称为Video-Infinity。从高层次来看,它采用分而治之的原则。它将长视频生成任务分解为较小的、可管理的段。这些段分布在多个GPU上,允许并行处理。所有客户端应协同工作,以确保最终视频在语义上的连贯性。
这种设置虽然简单明了,但面临两个主要挑战:确保所有GPU之间有效通信以共享上下文信息,以及调整现有模型(通常在较短序列上训练)以生成更长的视频而无需额外的训练。
为了克服这些挑战,本文引入了两种协同机制:剪辑并行化和双范围注意力机制。剪辑并行化通过将上下文信息分成三部分,实现了多个GPU之间的高效协作。它采用交错通信策略,分三步完成共享。在剪辑并行化的基础上,双范围注意力机制精细调整时间自注意力机制,以在设备间实现局部和全局上下文的最佳平衡。这种平衡使得在短片段上训练的模型能够扩展到长视频生成,同时保持整体连贯性。
更令人兴奋的是,通过利用这两种策略,Video-Infinity将内存开销从二次方减少到线性。凭借多设备并行的强大能力和足够的显存,本文的系统可以生成任意长度甚至无限长的视频。
因此,本文的方法显著延长了可生成视频的最大长度,并加快了长视频生成的速度。具体而言,在8×Nvidia 6000 Ada(48G)设置下,本文所提出的方法在仅5分钟内就能生成长达2300帧的视频。
前提
视频生成的扩散模型
使用扩散模型生成视频的过程涉及逐步去噪潜在表示,即 ,其中 t 的范围是从 0 到 T。初始的噪声视频潜在表示由一个随机噪声张量 表示。随着每一步去噪过程, 会更新为更清晰的潜在表示。这一迭代过程持续进行,直到 被去噪为 ,然后将 输入解码器以生成最终视频。将 更新为 的关键步骤是计算噪声预测 ,其公式如下:
其中 表示扩散模型。
扩散模型 可以使用各种架构实现,例如 U-Net 或 DiT 。这些扩散模型通常由几个相似的层组成。更具体地说,初始的随机噪声张量表示为 ,其中 表示帧数, 和 分别表示每帧的高度和宽度, 表示通道数。
每层中的潜在张量 一般保持一致的形状, ,其中 在各层之间保持不变。由于U-Net架构中的下采样和上采样操作,、 和 的维度可能会有所变化。
在扩散模型 中,这些层通常由两种主要类型的模块组成:空间模块和时间模块。空间模块接收形状为 的潜在张量 的切片(即单帧),表示潜在空间中每个视频帧的标记。它们独立地处理每帧内的空间特征。时间模块接收形状为 的潜在张量 的延长条(strip),表示包含特定空间位置上跨帧的时间信息的标记。它们捕捉每个位置上帧之间的时间依赖关系。这两种模块协同工作,使得扩散模型能够有效地处理视频生成任务中的空间和时间特征,从而生成高质量的视频序列。
分布式长视频生成
在本文的核心pipeline中,Video-Infinity将视频的潜变量分割成多个片段,然后分布到多个设备上。如下图 3 所示,在其中沿着时间维度划分视频的潜变量。这种分割允许在不同设备上并行地对不重叠帧进行去噪处理。为了实现这一点,本文提出了剪辑并行机制(在后面章节中详细介绍),它有效地同步设备间的时间信息。此外,本文也引入了双范围注意力机制,调节时间注意力以确保无需额外训练的长视频一致性。
形式上,Video-Infinity 将噪声潜变量 分割成 个子潜变量片段 ,其中 , 表示每个片段中的帧数, 表示总的片段数。这种结构化的分割方式实现了跨 个设备的负载均衡分布。此外,视频扩散模型的空间模块独立地在帧间操作,消除了设备间的通信需求,并保持了不同设备输出的一致性。
视频扩散的剪辑并行化机制
为了确保分布在不同设备上的片段的一致性,本文提出了剪辑并行机制,如上图3所示。该机制并行化了视频扩散模型的时间层,并实现了高效的设备间通信。
并行化的时间模块:在标准扩散模型中,时间模块聚合跨帧的特征,可以简化为:
其中 是该时间层的输入特征。
然而,Video-Infinity将输入特征张量 分布在多个设备上,将其划分为多个片段 ,每个片段都放置在不同的设备上(即device(i)上)。为了在不修改时间模块原始结构的情况下实现分布式推理,本文重新定义了时间操作。这个修改后的操作现在不仅考虑当前片段,还考虑相邻片段和全局语义。概念上,并行化的时间模块定义如下:
其中, 代表通过结合设备间上下文来丰富每个设备计算的时间信息。每个 包括来自前一个设备(device(i-1))的时间信息 ,以及来自后一个设备(device(i+1))的时间信息 。此外, 是来自所有设备输入的选择性聚合,优化了全局信息的一致性并减少了开销。
每个设备的输出 反映了由这些上下文输入增强的局部计算。通过将所有设备的输出连接起来,可以得到该层的完整输出 :
这种连接提供了对处理特征的整体视图,保持了分布式系统中时间的一致性。关于这些时间模块如何整合上下文的进一步细节将在文章的后面章节中讨论。
三轮上下文通信。重新定义时间模块需要高效地传递上下文组件 。这通过三阶段同步过程实现,每个阶段处理上下文的特定部分,如上图3所示。
在第一阶段 ( T1 ) 中,每个设备 ( i ) 通过 all_gather() 操作向所有其他设备广播其全局上下文 。此操作确保每个设备接收到全局上下文,保持整个视频的全局一致性。
后续阶段 ( T2 ) 和 ( T3 ) 侧重于交换邻近上下文。由于连接限制,本文采用交错策略。在 ( T2 ) 中,奇数节点将其 发送到其后续设备 ( i+1 ),偶数节点将其 发送到设备 ( i-1 )。在 ( T3 ) 中,此模式反转——奇数设备从其前任接收上下文,偶数设备从其后继接收上下文。这种方法防止瓶颈,优化通道使用,并最大限度减少死锁风险。
最终,所有节点完成上下文同步,确保每个设备拥有执行计算所需的全部上下文。更多细节可以参考原文附录。
将每个模块并行化
在剪辑并行化的基础上,本节详细介绍了每个时间模块中信息如何进行同步。关键技术是双范围注意力(Dual-scope attention),它促进了无需训练的长视频生成并降低了通信成本。
视频扩散模型通常包括三个时间模块:注意力模块(Attention())、卷积模块(Conv())和群规范化模块(GroupNorm())。本文定制了这些模块,使它们能够集成到剪辑并行化中,实现跨多设备的分布式处理,从而有效地实现视频内容的同步和一致性。
DualScope注意力模块。在并行推理中应用注意力带来了新的挑战。原始的注意力模块需要同时访问所有输入标记。为了在剪辑并行性下采用它,需要跨设备聚合标记,这导致了巨大的通信成本。此外,当应用于更长序列时,那些在较短视频片段上训练的注意力模块通常会降低质量。
为了解决这些问题,本文引入了DualScope注意力模块。它修改了 K-V 对的计算,将本地和全局上下文整合到注意力中。对于来自帧集合 中的每个查询标记,其对应的键和值是从帧 的标记中计算得出的:
-
本地上下文 :这包括帧 的 个相邻帧,从中推导出的键和值以捕获本地上下文。这种本地设置通常通过窗口注意力来实现,专注于附近的帧以增强时间上的连贯性。
-
全局上下文 :相反,全局上下文包括从所有设备的视频中均匀采样的帧。这种上下文提供了从更广泛范围获取键和值的信息,使模型能够访问长距离的信息。
在实际应用中,键 和值 是通过连接来自两种上下文的标记构建的: 和 。其中 和 是从 中推导出的,而 和 是从 中推导出的。本文发现,这种修改后的键-值计算可以轻松地集成到现有的时间注意力机制中,无需额外的训练,从而增强了长视频的连贯性。
在剪辑并行性的实现中,上述重新构造的注意力显著减少了通信开销。与收集长度为 的所有标记相比,本文仅同步恒定数量的标记。具体来说,设置 ,以及 ,其中 和 均配置为16。这减少了数据同步的需求,同时仍捕获了关键的本地和全局信息。
卷积模块。时间卷积模块 Conv() 在其输入 的时间维度上应用卷积。在剪辑并行性中,Conv() 的上下文 包括 和 。它们被填充到原始序列中。具体而言, 包括 的最后 帧,而 包括 的前 帧,其中 是卷积的感受大小。
组规范化。在视频扩散模型中,组规范化应用于输入张量 ,以保持不同帧之间一致的特征缩放。
在剪辑并行性中,每个设备首先计算其所在视频片段的组均值 。这些均值聚合后计算全局均值 ,其中 是设备数量。随后,使用 ,每个设备计算其标准差 ,并用于计算全局标准差 。全局均值 和全局标准差 作为 ,用于归一化过程。
实验
设置
基础模型。在实验中,选择了文本到视频模型VideoCrafter2 (320 x 512) 作为本文方法的基础模型。VideoCrafter2 模型是在16帧视频上训练的,擅长生成既一致又高质量的视频片段。它还是VBench 评估中得分最高的开源视频生成模型。
指标评估。使用VBench 作为综合视频评估工具,涵盖各种视频维度的广泛指标。对于每种方法,使用VBench 提供的提示生成视频进行评估。所测量的指标包括VBench 中视频质量类别下的所有指标,包括主体一致性、背景一致性、时间闪烁、运动平滑度、动态程度、美学质量和成像质量。考虑到VBench 评估通常针对16帧视频片段进行,本文对超过16帧的视频进行了评估方法的修改:从每个视频中随机抽取五个16帧片段进行单独评估,然后计算这些评估的平均分数。
基线方法。本文的方法与几种其他方法进行了基准比较:
-
FreeNoise : 本文选择FreeNoise作为基准,因为它也是一种无需训练的方法,可以基于VideoCrafter2 模型生成长视频。它采用重新调度技术来初始化噪声,并结合基于窗口的注意力融合来生成更长的视频。
-
Streaming T2V : 为了评估本文方法在生成长视频方面的有效性,选择了Streaming T2V作为基准。Streaming T2V涉及训练一个新模型,使用自回归方法生成长格式视频。与本文的方法类似,它也具备生成超过1000帧视频的能力。
-
OpenSora V1.1 : 基于DiT 的视频扩散模型,支持最多120帧,可以在各种分辨率下生成视频,并专门针对长视频序列进行了训练,以增强其扩展视频生成能力。
双范围注意力设置。在双范围注意力的实现中,邻近帧数 设为16,其中8帧来自前一个剪辑,另外8帧来自后一个剪辑。全局帧数 设置为16。为了在去噪过程中平衡一致性和动态性,动态调整了 和 中帧的权重。具体来说,对于超过800个时间步长 , 的权重增加了10;而对于不超过800个时间步长 , 的权重增加了10。
实现细节。默认情况下,所有扩散的参数均保持与VideoCrafter2 的原始推理设置一致,去噪步骤设置为30。本文的实验在8 × Nvidia 6000 Ada(48G内存)上进行。为了实现剪辑并行化中的时间模块,本文使用 torch.distributed 工具包,并使用Nvidia的NCCL作为后端,以促进高效的GPU间通信。此外,所有fps条件设置为24,分辨率设置为512 × 320。请注意,Streaming T2V的分辨率无法修改,因此视频以其默认分辨率生成(预览视频为256 × 256,最终视频为720 × 720)。
主要结果
容量和效率
本文在8 × Nvidia 6000 Ada(48G)设置上评估了本文所提出方法的能力。本文的方法成功地生成了分辨率为512 × 320、时长达95秒(以24帧每秒计算)的2300帧视频。值得注意的是,得益于高效的通信和多GPU并行处理的利用,整个计算过程大约花费了5分钟(312秒)。
下表1展示了各种方法在相同设备规格下生成长视频的能力。为了确保可比性,本文将所有方法生成的视频分辨率标准化为512x320。对于StreamingT2V,本文提供了两组数据:一组用于生成预览视频,分辨率为256x256;另一组用于生成分辨率为720x720的最终视频。结果表明,本文的方法在端到端类别中是最具能力的,可以生成长达2300帧的最长视频 — 比OpenSora V1.1多8.2倍。此外,本文的方法在生成128帧短视频和1024帧长视频方面始终表现出最短的时间。值得注意的是,在生成1024帧视频时,本文的方法比唯一能够生成这种长度视频的基线方法StreamingT2V快100多倍。即使与StreamingT2V生成更小、分辨率较低的预览视频的速度相比,本文的方法也快16倍。
视频质量 本文比较了本文方法生成的视频与FreeNoise 和StreamingT2V 在长视频生成方面的表现。下图4展示了使用相同提示生成的不同方法生成的一些视频帧。此外,下表2显示了这些方法生成的视频质量,评估了VBench 中的各种指标。
如上图所示,虽然StreamingT2V方法生成了具有足够动态性的长视频,但它们在开始和结束之间缺乏一致性。相比之下,FreeNoise 生成的视频在整个过程中对象位置保持一致,但视觉上变化较少。例如,弹吉他的人的视频保持了单一的姿势,仅有微小的移动。同样地,左侧的狗专注地看着摄像头,耳朵、鼻子或身体的位置没有变化。OpenSora V1.1 未能生成第一个视频,第二个视频的背景也不够平滑。相反,本文的方法不仅确保了更好的一致性,而且在生成的视频中呈现出更明显的运动。
上表 2显示,与本文中提到的基础模型VideoCrafter 2 相比,本文的方法在大多数指标上略有下降,除了动态指标。在生成64帧视频时,本文的方法与其他方法相比表现出优势和劣势。然而,本文的平均指标得分高于FreeNoise和OpenSora V1.1。在生成更长的192帧视频时,本文的方法在大多数评估指标上表现优于StreamingT2V,这是唯一能够生成这种长度视频的其他方法。
消融
如前面章节所述,剪辑并行性中采用了三种类型的时间模块(Conv()、GroupNorm()和Attention()),用于同步上下文。为了展示这些模块在同步上下文方面的有效性,本文进行了消融实验,并在下图5中可视化了移除某些部分上下文同步对生成视频质量的影响。本文在视频扩散模型中的时间 Attention() 模块和时间 ResNet() 模块之间的通信进行了消融实验,其中ResNet模块包括时间 Conv() 和时间 GroupNorm() 作为子模块。随后,本文对 Attention() 模块中的全局上下文 和局部上下文 进行了消融实验。
移除局部上下文。从上图5的顶部面板可以观察到,ResNet()中同步信息的缺失导致在设备(1)上的最后一帧(第23帧)和设备(2)上的第一帧(第24帧)之间出现了细节上的差异,这些差异在图中用红色标出。例如,人物服装颜色的差异和机器人手上桌面零件的形状差异,这些在原始推断中并不存在。当 Attention() 模块的上下文缺失时,第23帧和第24帧变成了明显不同的图像,显示出相邻设备生成的视频段之间存在显著的不连续性。这些观察结果表明,ResNet() 和 Attention() 模块中的同步对于在不同设备上生成的视频帧的视觉一致性和连续性至关重要。
移除全局上下文。上图5的底部面板展示了当全局上下文同步缺失时,视频内部的内容一致性难以维持的情况。例如,在第12帧和第16帧中,地平线保持较高,但在第20帧以后,地平线明显上升。此外,当移除局部上下文同步时,虽然不同设备片段之间的内容保持一致,但在过渡区域缺乏共享上下文导致异常。例如,第22帧的雪内容突然过渡到图中标记为红色的狗。这些示例突显了全局和局部上下文同步在视频生成中的重要性。
结论
本文介绍了Video-Infinity,这是一个利用多个GPU进行长视频生成的分布式推断pipeline。提出了两种机制,剪辑并行化和双范围注意力机制,来解决分布式视频生成中的关键挑战。剪辑并行化通过优化上下文信息的交换来减少通信开销,而双范围注意力修改了自注意力机制以确保设备间的一致性。这些创新共同促成了高达2,300帧的视频快速生成,大幅提升了与现有方法相比的生成速度。这种方法不仅扩展了扩散模型在视频制作中的实际应用性,还为长视频生成效率设立了新的基准。
限制
为了充分发挥本文方法的潜力,它依赖于多个GPU的可用性。此外,本文的方法在涉及场景转换的视频生成方面表现不佳。
参考文献
[1] Video-Infinity: Distributed Long Video Generation