ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Prism 模型架构拆解:MOVA 双塔 DiT、a2v/v2a 条件桥与 Flow Matching 噪声调度的协同工作方式

Prism 模型架构拆解:MOVA 双塔 DiT、a2v/v2a 条件桥与 Flow Matching 噪声调度的协同工作方式

【免费下载链接】Prism

We propose Prism, a dynamic sparse attention framework for natively training joint video-audio generation models at 2K.

项目地址:https://gitcode.com/gh_mirrors/prism69/Prism
点击查看免费下载

Prism 是一个面向2K 分辨率原生视频-音频联合生成的动态稀疏注意力(Dynamic Sparse Attention)训练框架,核心架构由 MOVA 双塔 DiT、双向 a2v/v2a 条件桥与 Flow Matching 配对噪声调度三部分组成。本文带你完整拆解这三者如何协同工作,无需深奥的数学背景。

Prism 解决了什么问题

高分辨率视频生成最大的瓶颈是Full Attention 的二次方复杂度:分辨率越高,token 数爆炸,注意力摊在冗余 token 上,学习信号被稀释。Prism 的思路是:

  • 把 token 序列组织成时空宏区(Macro-Zone),让注意力结构随局部内容自适应;
  • 用视频特征通道方差+a2v 交叉注意力范数两个信号,为每个宏区动态分配块形状;
  • 配合Top-k / Top-p 混合块选择,实现每个 query 的自适应稀疏度。

实验表明 Prism 相比 Full Attention 获得2.5× 训练加速,且生成质量更优。框架总览见下图:

双塔 DiT:一塔管画面,一塔管声音

Prism 的生成主干是MOVA 双塔结构:一个视频 DiT(video_dit,基于 WanModel)和一个音频 DiT(audio_dit,基于WanAudioModel),各自独立处理自己的模态 token:

组件说明
Video DiT处理 3D 视频 token(时间×高×宽网格),支持 3D RoPE 位置编码
Audio DiT处理 1D 音频 token(44100/2048 ≈ 21.5 fps 的音频步长),使用 1D RoPE
video_dit_2可选的第二级视频专家,与boundary_ratio=0.9配合实现"高噪声/低噪声"双专家分工

加载逻辑集中在 mova.py:MOVABridge.from_mova_pretrained()从 MOVA 预训练目录中分别加载video_dit/、video_dit_2/、audio_dit/、dual_tower_bridge/等子模块。

关键设计是FusedMOVABlock(融合块):它把视频塔第 i 层、音频塔第 i 层和两个方向的桥接模块打包成一层统一前向。每一层的执行顺序是:

  1. 先桥接:用两塔的原始状态分别计算 a2v 和 v2a 条件残差,按a2v_scale/v2a_scale叠加回各自输入;
  2. 再进塔:视频 block 与音频 block 各自完成自注意力 + FFN;
  3. 稀疏注意力:视频自注意力中启用 BSA 时,会复用第 1 步的 a2v 桥接残差做"音频引导评分"(见下文)。

视频塔层数多于音频塔时,剩余的视频层作为remaining_video_blocks独立运行——即两塔"层对齐"的部分才做跨模态交互。

a2v / v2a 条件桥:让画面"听"到声音,声音"看"到画面

双塔之间不是简单拼接,而是通过 interactionv2.py 中的DualTowerConditionalBridge(双塔条件桥)实现双向条件注入:

层映射策略:shallow_focus

CrossModalInteractionController决定"哪些层做交互"。默认策略shallow_focus只在前 1/3 层(最多 10 层)插入双向桥,避免深层不对称;也支持distributed(每 3 层一次)、progressive(浅层密集 + 深层稀疏)等策略。

桥接单元:条件交叉注意力

每个交互层包含两个ConditionalCrossAttentionBlock:

  • a2v(audio→video):query 是视频 token(3072 维隐藏态),key/value 来自音频 token(1536 维隐藏态),输出以残差形式加到视频塔,告诉画面"哪个区域该响";
  • v2a(video→audio):方向相反,让音频塔感知画面内容,例如口型、动作时机。

两个方向都支持跨模态 RoPE 对齐:build_aligned_freqs()按音频步长为基准,把视频帧位置换算到同一时间轴(VAE 时间下采样 4 倍,还可加首帧偏置),使跨模态注意力天然具备时间对齐性。桥接强度由condition_scale统一控制(推理时可外置覆盖,类似 CFG scale 的"桥接 CFG")。

视觉塔 ──a2v 桥──▶ 音频塔 (音频条件化视觉) 视觉塔 ◀──v2a 桥── 音频塔 (视觉条件化音频)

一个巧妙的联动:桥接残差反哺稀疏注意力

注意 mova.py 中FusedMOVABlock.forward()会把未经缩放的 a2v 桥接残差传给视频 block。视频自注意力(见 wan_video_dit.py 的SelfAttention.forward)在 BSA 评分时取它的逐 token L2 范数‖Δh_v‖₂,作为"音频对该视觉区域影响强度"的代理信号——发声区域(口型、乐器)范数大,就会被分配更细的块、保留更多注意力。这就是 README 中说的"跨模态交互天然集中在发声区域"在代码里的落点。

Flow Matching 噪声调度:视频和音频各走各的时间轴

Prism 采用Flow Matching训练范式,其配对调度器FlowMatchPairScheduler(见 flow_match_pair.py)专为双塔设计,输出形状为[num_timesteps, 2]的时间步对(visual_t, audio_t)。

三个核心机制:

1. Shift 重参数化

基础 σ 曲线是线性插值,随后应用著名的 shift 变换:

σ = shift · σ / (1 + (shift − 1) · σ)

shift越大,越多去噪步数被分配给高噪声阶段(负责全局结构),少数的低噪声步数留给细节精修。

2. dual_sigma_shift:双塔独立 shift

这是 Prism 的亮点。推理时通过set_pair_postprocess_by_name("dual_sigma_shift", visual_shift=..., audio_shift=...)为视频列和音频列各自构建独立的 σ 曲线:

  • 训练默认:visual_shift=9.0/audio_shift=5.0;
  • 推理推荐:720p 用7.0,1080p 用9.0–13.0,2K 用13.0–17.0(VISUAL_SHIFT),音频7.0。

原因是视频 token 数远多于音频,高分辨率下视频塔需要把更多步数"压"到高噪声段以保证结构质量,而音频塔序列短,较激进的 shift 反而浪费步数。

3. 训练目标与采样

Flow Matching 的训练目标是简单的速度场noise − sample(training_target),加噪是线性插值(1−σ)·x₀ + σ·noise(add_noise);推理每步更新prev_sample = sample + v·(σ_next − σ)。双塔损失按video_loss_weight=0.75 / audio_loss_weight=0.25加权合并。

三者如何协同:一步去噪里发生了什么

把三大件串起来,一个 denoising step 的完整流程是:

  1. 调度器按双 σ 曲线取当步时间步对(t_v, t_a),视频塔和音频塔各自拿到自己的噪声水平;
  2. 双塔并行前向:FusedMOVABlock逐层执行——先由 a2v/v2a 桥用对方的原始隐状态注入条件,视频 block 内的 BSA 再借助 a2v 残差范数做音频引导的块级稀疏选择,随后两塔各自完成自注意力与 FFN;
  3. 动态块形状:dynamic_block_shape.py 提供 13 种候选形状(如(4,4,4)各向同性、(8,2,4)纵向细分为口型/人脸、(2,4,8)横向细分为快速运动),每个宏区按内容方差 + 音频耦合强度挑一个;
  4. Top-k + Top-p 混合选择:在 bsa_interface.py 的 Triton 门控内核中,先取分数最高的 k 个块,再沿 CDF 累积到cdf_threshold(默认 0.20),逐 query 自适应稀疏;
  5. 更新样本:两塔分别按各自 σ 差做一步外推,进入下一步。

这样,稀疏注意力、跨模态桥接和噪声调度不是三个孤立模块,而是共享同一份前向数据流:桥接残差既是条件注入量,又是稀疏注意力评分信号。

实际案例与上手参考

项目自带若干文生视频+音频(ti2va)示例,位于assets/ti2va_cases/,例如 case-1 用一张人物照片配合带<speech>标签的结构化 prompt,生成口型、语音与画面联动的视频:

推理只需两条命令之一:

bash prism_infer.sh # 单卡 / DeepSpeed 多卡(720p 推荐) bash prism_infer_fsdp.sh # FSDP 多卡(1080p / 2K 推荐)

与本文架构直接相关的核心参数:

参数作用
VISUAL_SHIFT/AUDIO_SHIFT双塔 Flow Matching 噪声调度 shift
ENABLE_BSA/BSA_SPARSITY开关 Prism 块稀疏注意力及 top-k 稀疏率
ENABLE_IVPQ_DYNAMIC_BLOCK开关动态块形状分配
CFG_SCALE无分类器引导强度(默认 5.0)

训练侧入口为 train_t2va_wan.py,两级 YAML 配置(顶层 wan_ti2va.yaml + 分辨率注入配置如 wan_15B_ti2va_2k_init_top_k_p.yaml)分别控制并行/优化器与损失权重/噪声 shift,用bash scripts/pretrain/pdsh_train.sh一键拉起。

总结

Prism 的架构精髓可以概括为一句话:双塔 DiT 负责"各管一摊",a2v/v2a 条件桥负责"互相通气",Flow Matching 配对调度负责"各走各的噪声节奏",而动态块稀疏注意力则把桥接产生的跨模态信号直接转化为计算量的节省——2.5× 加速的同时还提升了生成质量。理解了这条数据流,再深入 BSA 的 Triton 内核或训练细节就会顺畅得多。

【免费下载链接】Prism

We propose Prism, a dynamic sparse attention framework for natively training joint video-audio generation models at 2K.

项目地址:https://gitcode.com/gh_mirrors/prism69/Prism
点击查看免费下载
上一篇:高效控制利器:STM32F103四路PWM输出项目推荐
下一篇:KcBERT-base训练全记录:1.2G模型如何用12.5GB新闻评论数据从零开始训练

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进