尧图精选

深入解析 diffusers 中的 AllegroTransformer3DModel:文本到视频生成的 3D Diffusion Transformer

🕒 发布时间:2026/9/10 23:03:48 📁 来源:尧图网络
深入解析 diffusers 中的 AllegroTransformer3DModel文本到视频生成的 3D Diffusion Transformer【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusersAllegro 是 RhymesAI 提出的开源商用级视频生成模型论文《Allegro: Open the Black Box of Commercial-Level Video Generation Model》而AllegroTransformer3DModel正是其在 Diffusers 仓库中的核心去噪骨干网络——一个面向视频类数据的 3D Diffusion Transformer。本文以 docs/source/en/api/models/allegro_transformer3d.md 为骨架结合仓库源码逐层拆解该模型的加载方式、全部配置参数、内部模块结构与 forward 数据流并展示它如何与AllegroPipeline协作完成 text-to-video 推理。读完本文你将能够独立加载该模型、理解每个超参数的语义并掌握其自注意力 交叉注意力 3D 旋转位置编码3D RoPE的实现细节。一、模型定位与背景AllegroTransformer3DModel是一个用于3D 数据视频的 Diffusion TransformerDiT由 RhymesAI 在论文Allegro: Open the Black Box of Commercial-Level Video Generation Model中提出。与传统的 2D 图像 DiT如 PixArt不同它同时建模空间维度高度、宽度与时间维度帧因此输入输出均为五维张量(batch_size, channels, num_frames, height, width)。在 Diffusers 仓库中该模型位于 src/diffusers/models/transformers/transformer_allegro.py并从顶层命名空间导出from diffusers import AllegroTransformer3DModel。它是 Allegro 完整推理链路的三个核心组件之一另两个是文本编码器T5与视频 VAEAutoencoderKLAllegro文档见 docs/source/en/api/models/autoencoderkl_allegro.md三者被封装进 AllegroPipeline 提供开箱即用的文生视频能力。二、快速加载模型原文档给出了最简洁的加载方式下面的代码片段将其完整保留并补充了设备与精度说明import torch from diffusers import AllegroTransformer3DModel transformer AllegroTransformer3DModel.from_pretrained( rhymes-ai/Allegro, subfoldertransformer, dtypetorch.bfloat16, ).to(cuda) # 或 mps、xpu、cpu要点说明from_pretrained是ModelMixin提供的统一加载接口subfoldertransformer指向官方仓库中 transformer 权重所在的子目录官方权重建议使用torch.bfloat16加载以节省显存设备可按环境替换为cuda、mps、xpu或cpu由于类同时继承ModelMixin、ConfigMixin与CacheMixin见源码transformer_allegro.py第 174 行它不仅支持标准的保存/加载还支持仓库的缓存机制相关介绍见 docs/source/en/optimization/cache_dit.mdAllegro 系列模型支持 DiT 缓存加速。三、核心架构与配置参数详解AllegroTransformer3DModel的__init__通过register_to_config将所有构造参数写入config因此每个超参数都可以通过transformer.config.xxx访问并在推理时被 pipeline 读取。下表完整列出源码transformer_allegro.py第 227–249 行中的全部默认参数参数默认值含义patch_size2空间 patch 大小高度/宽度方向patch_size_t1时间 patch 大小帧方向num_attention_heads24多头注意力的头数attention_head_dim96每个注意力头的通道数in_channels4输入通道数对应 VAE 潜空间通道数out_channels4输出通道数num_layers32Transformer 块的层数dropout0.0注意力与前馈层的 dropout 概率cross_attention_dim2304交叉注意力特征维度文本条件维度attention_biasTrue注意力投影层是否使用 biassample_height90输入潜变量高度sample_width160输入潜变量宽度sample_frames22输入潜变量帧数activation_fngelu-approximate前馈网络激活函数norm_elementwise_affineFalse归一化层是否使用可学习的逐元素仿射参数norm_eps1e-6归一化层的 epsiloncaption_channels4096文本嵌入投影层的输入通道数interpolation_scale_h2.03D 位置编码在高度维度的插值缩放interpolation_scale_w2.03D 位置编码在宽度维度的插值缩放interpolation_scale_t2.23D 位置编码在时间维度的插值缩放从源码结构看模型由五个子模块顺序拼接而成Patch 嵌入Patch Embedding使用PatchEmbedembeddings.py中的公共组件将输入视频潜变量切分为非重叠 patchembed_dim为num_attention_heads * attention_head_dim 230432 层 Transformer 块nn.ModuleList堆叠AllegroTransformerBlock输出归一化与投影LayerNorm 可学习的scale_shift_table2 × inner_dim 线性层proj_out输出维度为patch_size * patch_size * out_channels时间步嵌入AdaLayerNormSingle(inner_dim, use_additional_conditionsFalse)对去噪时间步做自适应层归一化文本条件投影PixArtAlphaTextProjection(in_featurescaption_channels, hidden_sizeinner_dim)将 T5 文本嵌入默认 4096 维投影到模型内维 2304。三个插值缩放参数在__init__中有自动推导逻辑当传入None时时间维度按(sample_frames - 1) // 16 1奇数帧或sample_frames // 16偶数帧推导空间维度按sample_height / 30、sample_width / 40推导。四、AllegroTransformerBlock块内结构每个 Transformer 块transformer_allegro.py第 36–171 行依次包含四部分构成一个 DiT 风格的完整残差单元自注意力norm1LayerNorm→attn1其中Attention使用AllegroAttnProcessor2_0()处理器不接收外部条件交叉注意力norm2→attn2cross_attention_dim默认 2304用于注入文本条件前馈网络norm3→FeedForward激活函数默认gelu-approximateScale-Shift 调制可学习参数scale_shift_table形状为(6, dim)对应 MSA 的 shift/scale/gate 与 MLP 的 shift/scale/gate 共 6 组系数。forward 中一个值得注意的细节是调制方式时间步嵌入temb先 reshape 为(batch, 6, -1)后与scale_shift_table相加并切分为 6 组系数然后对归一化后的隐状态执行hidden_states * (1 scale) shift的 AdaIN 式变换并用 gate 系数对注意力与前馈输出做门控残差。这与 PixArt 系列的 AdaLN 风格一脉相承属于零初始化友好的调制设计。五、3D 旋转位置编码3D RoPE视频建模的关键难点在于位置编码需要同时覆盖时间与空间。Allegro 采用 3D 旋转位置编码实现在src/diffusers/models/embeddings.py的get_3d_rotary_pos_embed_allegro第 932 行起将嵌入维度三等分dim_t dim_h dim_w embed_dim // 3分别对应时间、高度、宽度三个轴各自生成 1D 旋转频率freqs_t / freqs_h / freqs_w并分别除以interpolation_scale_t / interpolation_scale_h / interpolation_scale_w从而实现分辨率/帧数外推通过笛卡尔积把三轴网格组合为 token 级位置频率基数为默认theta10000。RoPE 的注入发生在注意力处理器中。AllegroAttnProcessor2_0src/diffusers/models/attention_processor.py第 1993 行起是基于 PyTorch 2.0F.scaled_dot_product_attention的实现对 Q/K 投影后若传入image_rotary_emb且当前是自注意力非交叉注意力则调用apply_rotary_emb_allegro在 query 与 key 上施加旋转位置编码再执行 SDPA。该处理器在构造时校验 PyTorch 2.0 是否可用否则抛出 ImportError。在 pipeline 侧AllegroPipeline._prepare_rotary_positional_embeddingssrc/diffusers/pipelines/allegro/pipeline_allegro.py第 614 行起根据目标分辨率与帧数动态计算网格与频率并把(freqs_t, freqs_h, freqs_w)与(grid_t, grid_h, grid_w)组装成可广播的笛卡尔积坐标最终作为image_rotary_emb传入模型。这意味着模型可以配合插值缩放参数在训练分辨率之外生成更长帧数或更高分辨率的视频。六、forward 数据流从噪声潜变量到去噪输出forwardtransformer_allegro.py第 305 行起接受如下输入hidden_states形状(batch_size, num_channels, num_frames, height, width)的噪声潜变量encoder_hidden_states形状(batch_size, sequence_len, embed_dims)的文本条件嵌入timestep去噪步长索引attention_mask/encoder_attention_mask自注意力与交叉注意力掩码可选image_rotary_emb预计算的 3D RoPE可选return_dict为True时返回Transformer2DModelOutput否则返回纯 tuple。内部执行顺序为掩码转换把(1保留, 0丢弃)的注意力掩码转换为 bias丢弃位置加-10000.04D 视频掩码会先经F.max_pool3d按(patch_size_t, patch_size, patch_size)下采样到 patch 粒度时间步嵌入adaln_single产出用于各 Transformer 块的调制向量timestep与用于最终输出的embedded_timestepPatch 嵌入(B, C, F, H, W)先 permute 为(B, F, C, H, W)再展平帧维度经pos_embed切 patch 后重组为(B, tokens, dim)文本嵌入同步经caption_projection投影堆叠 Transformer 块逐层执行自注意力、交叉注意力与前馈支持梯度检查点_supports_gradient_checkpointing True输出调制与反 Patch用scale_shift_table的第二组系数对输出做调制proj_out投影后 reshape 回(batch, out_channels, num_frames, height, width)即每个 patch 位置预测出patch_size × patch_size × out_channels的像素级输出完成unpatchify。返回值统一包装为Transformer2DModelOutput(sampleoutput)该输出类文档见 docs/source/en/api/models/allegro_transformer3d.md 末尾的 autodoc 引用实现在src/diffusers/models/modeling_outputs.py。七、在 AllegroPipeline 中的实战应用虽然AllegroTransformer3DModel可以独立加载但实际使用中它几乎总是作为 AllegroPipeline 的transformer组件参与推理。pipeline 源码src/diffusers/pipelines/allegro/pipeline_allegro.py中与 transformer 直接相关的关键点包括默认分辨率与帧数推导num_frames num_frames or transformer.config.sample_frames * vae_scale_factor_temporal默认22 × 4 88帧height/width同理由sample_height/sample_width90×160乘以 VAE 空间缩放因子8得到 720×1280潜空间通道匹配latent_channels self.transformer.config.in_channels即 4prepare_latents按该通道数采样初始高斯噪声并按 VAE 时间压缩比计算潜空间帧数去噪循环每个时间步将latents送入transformer(hidden_states..., encoder_hidden_statesprompt_embeds, encoder_attention_mask..., timestep..., image_rotary_emb...)得到噪声预测后按 Classifier-Free Guidance 公式noise_pred_uncond guidance_scale * (noise_pred_text - noise_pred_uncond)合成再由 scheduler 推进一步CPU offload 顺序model_cpu_offload_seq text_encoder-transformer-vaetransformer 位于卸载链的中间环节帮助在低显存设备上运行。一个可直接运行的端到端示例来自 pipeline 的官方 docstring如下它同时展示了AutoencoderKLAllegro与AllegroPipeline的配合方式import torch from diffusers import AutoencoderKLAllegro, AllegroPipeline from diffusers.utils import export_to_video vae AutoencoderKLAllegro.from_pretrained(rhymes-ai/Allegro, subfoldervae, torch_dtypetorch.float32) pipe AllegroPipeline.from_pretrained(rhymes-ai/Allegro, vaevae, torch_dtypetorch.bfloat16).to(cuda) pipe.vae.enable_tiling() prompt ( A seaside harbor with bright sunlight and sparkling seawater, with many boats in the water. From an aerial view, the boats vary in size and color, some moving and some stationary. Fishing boats in the water suggest that this location might be a popular spot for docking fishing boats. ) video pipe(prompt, guidance_scale7.5, max_sequence_length512).frames[0] export_to_video(video, output.mp4, fps15)其中guidance_scale7.5启用 CFGguidance_scale 1.0时 pipeline 会拼接正负条件批次max_sequence_length512控制 T5 文本编码的最大 token 数。八、测试与正确性验证仓库为该模型提供了完整的单元测试见 tests/models/transformers/test_models_transformer_allegro.py输入/输出形状契约测试配置中input_shape (4, 2, 8, 8)即batch, channels, frames, height, widthoutput_shape与其一致验证了噪声潜变量进、去噪潜变量出的端到端形状保持微型配置测试使用num_attention_heads2, attention_head_dim8等小参数量配置注释特别指出头数与头维度之积必须能被 16 整除——这是 3D RoPE 将嵌入维度三等分后的整除约束覆盖维度通过ModelTesterMixin、MemoryTesterMixin、AttentionTesterMixin、TrainingTesterMixin组合验证前向推理、显存占用、注意力行为、梯度检查点test_gradient_checkpointing_is_applied期望集合包含AllegroTransformer3DModel等。端到端 pipeline 级测试位于 tests/pipelines/allegro/test_allegro.py负责验证文本编码、VAE 编解码与 transformer 去噪全链路的整合行为。九、小结AllegroTransformer3DModel是一个结构清晰、可配置性强的 3D Diffusion Transformer它用时间/空间 patch 嵌入将视频潜变量 token 化用 32 层自注意力 交叉注意力 门控前馈块完成条件去噪用 3D RoPE 编码时空位置并用 AdaLN 风格的 scale-shift 调制注入时间步信息。理解它的参数与数据流是深入掌握 Allegro 文生视频管线、乃至在 diffusers 框架内移植或微调同类视频 DiT 模型的基础。【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →