阶跃星辰 Step-Vedio-T2V Docker 推理
https://www.dong-blog.fun/post/1956
参考:
- github仓库:https://github.com/stepfun-ai/Step-Video-T2V
- Step-Vedio-T2V模型下载:https://huggingface.co/stepfun-ai/stepvideo-t2v
- Step-Vedio-T2V-Turbo模型:https://huggingface.co/stepfun-ai/stepvideo-t2v-turbo
Step-Video-T2V是一款由StepFun团队发布的最先进(SoTA)的文本生成视频预训练模型。该模型拥有300(即30B)亿参数,并能生成长达204帧的视频。其核心技术包括深度压缩的视频变分自编码器(Video-VAE)、3D完全注意力机制的DiT架构、中英双语预训练的文本编码器、人类偏好优化(DPO)技术。
该模型在专门设计的视频生成基准测试Step-Video-T2V-Eval上表现卓越,全面超越其他开源和商业引擎。
Step-Video-T2V-Turbo是Step-Video-T2V模型的高效推理版本,通过蒸馏技术进行优化。两个模型在推理时候的配置参数建议为下表。
模型 | 推理步数 | 配置比例 | 时间偏移 | 帧数 |
---|---|---|---|---|
Step-Video-T2V | 30-50 | 9.0 | 13.0 | 204 |
Step-Video-T2V-Turbo(推理步数蒸馏) | 10-15 | 5.0 | 17.0 | 204 |
2. 核心技术
下图是Step-Video-T2V 的整体模型架构。
- 设计高压缩率视频变分自编码器 (Video-VAE),实现了 16x16 空间和 8x 时间压缩,显著降低了大规模视频生成训练的计算复杂度。Video-VAE采用新颖的双路径架构,通过 3D 卷积和优化像素解混洗操作实现统一的空间时间压缩。
- 使用 Hunyuan-CLIP 和 Step-LLM 两个双语文本编码器处理用户文本提示,支持中英双语输入。
- 使用 Flow Matching 训练了具有 3D 全注意力的 DiT,用于将输入噪声去噪成潜在帧,文本嵌入和时间步作为调节因素。比空间时间注意力机制更高效,且在生成具有平滑且一致运动的视频方面表现更优。
- 为了进一步增强生成视频的视觉质量,应用了一种基于视频的 DPO 方法,有效减少了伪影,确保视频输出更流畅、更加真实。
下图是带 3D 全注意力机制的 DiT模型架构。
Step-Video-T2V 建立在 DiT 架构之上,该架构有 48 层,每层包含 48 个注意力头,每个注意力头的尺寸设置为 128。利用 AdaLN-Single 来纳入时间步条件,同时引入自注意力机制中的 QK-Norm 来确保训练稳定性。此外,还采用了 3D RoPE,在处理不同视频长度和分辨率的序列时发挥着关键作用。
StepFun团队开发了一套精细的训练系统,要点有:
- Step Emulator (SEMU) - 训练框架优化: SEMU 是一个高度准确且高效的模拟器,用于估计训练过程中的资源消耗和端到端性能。
- 分布式训练 - 并行策略: Step-Video-T2V 采用 8-way 张量并行 (TP) 策略,结合序列并行 (SP) 和 Zero1 技术,以实现较高的模型浮点运算利用率 (MFU)。为了降低 TP 的开销,开发了 StepCCL 集合通信库,实现数据传输和 GEMM 计算的并行执行。对于数据并行 (DP) 过程,采用参数和梯度传递的混合重叠策略,提高训练效率。
- 定制计算和通信模块: 在 VAE 部分,采用通道后格式和多 GPU 并行,加速卷积操作并支持长视频和高分辨率视频。在 DiT 部分,使用定制的 RoPE-3D 内核和时步调制优化,提高效率和内存利用率。
- DP 负载平衡: 针对 DP 训练中不同分辨率视频和图像导致的负载不均衡问题,提出混合粒度负载平衡策略。
- StepRPC - 高性能通信框架: StepRPC 利用分布式命名管道作为核心编程抽象,实现服务器之间的无缝通信。它支持 Tensor-Native Communication over RDMA 和 TCP,直接传输张量内存中的数据,提高通信效率。
- StepTelemetry - 训练框架可观测性: StepTelemetry 是一个训练框架的可观测性套件,用于收集、后处理和分析训练相关的数据。它采用基于 CUDA 事件的异步数据收集管道,降低开销。
- StepMind - 分布式训练平台: StepMind 是一个为大规模机器学习工作负载设计的分布式训练平台。它实现了高可用性和高效的 GPU 利用率,通过精细粒度监控和故障检测,确保训练任务的稳定运行。
Step-Vedio-T2V的预训练数据: 包含 20 亿视频-文本对和 38 亿图像-文本对的大规模数据集。通过视频分割、视频质量评估、视频运动评估、视频字幕生成、视频概念平衡和视频-文本对齐等多阶段处理,确保数据高质量和多样性。
- 视频分割: 使用 PySceneDetect 和 FFmpeg 将视频拆分为单镜头片段,删除不稳定帧。
- 视频质量评估: 评估标签包括美学、NSFW、水印、字幕、饱和度、模糊和黑边检测。
- 视频运动评估: 计算光流平均幅度,引入运动平均值、最大和最小运动幅度标签。
- 视频字幕生成: 生成简短标题、密集字幕和原始标题,以提升生成模型的表现。
- 视频概念平衡: 使用 VideoCLIP 模型和 K-means 聚类解决类别不平衡。
- 视频-文本对齐: 计算 CLIP 分数评估视频与文本的对齐程度。
3. 竞品比较
与开源模型HunyuanVideo对比
Step-Video-T2V-Eval 是 Step-Video-T2V 论文提出的一个新型基准数据集,旨在评估文本到视频生成模型的性能。它包含了来自真实用户的 128 个中文提示,涵盖了 11 个不同的类别,包括:体育、 美食、 风景、 动物、 节日、 混合概念、 超现实、 人物、 3D 动画、 电影制作、 风格。
下表展示了Step-Video-T2V模型与开源模型HunyuanVideo的综合表现对比。每个单元格代表两个模型在特定指标上的得分。评价维度包括遵循指令、运动流畅度、物理合理性和美学吸引力。表格中以绿色标记的部分表示Step-Video-T2V模型在该指标上优于HunyuanVideo模型的得分。
与Runway Gen-3 Alpha模型对比
在Movie Gen Video Bench上对比
下表中,将Step-Video-T2V与Movie Gen Video和HunyuanVideo进行了比较。与Movie Gen Video相比,Step-Video-T2V表现相当,但由于其预训练的视频数量只有27.3M,不到Movie Gen Video的三分之一,基础训练仍显不足。此外,Movie Gen Video生成的720P视频质量比Step-Video-T2V的540P更高。对比结果显示Step-Video-T2V在多个分类上的表现与其它两者互有胜负,其中在总评、人体和物理学等类别上分别有485-315-489和615-313-361的表现。
Docker
单卡体验
魔搭社区开源项目 DiffSynth-Studio(https://github.com/modelscope/DiffSynth-Studio)对 Step-Video-T2V 模型进行了显存管理优化,使其能够在单张 80G 显存的 A100 显卡上进行推理。
以下是一些有用的指令,可以用于安装和运行 DiffSynth-Studio
项目:
-
docker run:
docker run -it --gpus '"device=7"' --net host -v /data/xiedong:/data/xiedong/ pytorch/pytorch:2.5.0-cuda12.4-cudnn9-devel bash
-
更新并安装必要的包:
apt update && apt install vim git -y
-
克隆
DiffSynth-Studio
仓库:git clone https://github.com/modelscope/DiffSynth-Studio.git cd DiffSynth-Studio
-
安装Python包:
pip install -e .
-
编辑示例代码(可选,使用vim编辑器):
vim examples/stepvideo/stepvideo_text_to_video.py
-
运行示例代码:
python examples/stepvideo/stepvideo_text_to_video.py
-
如果遇到库文件依赖问题,可以安装必要的库:
apt-get install libgl1-mesa-glx -y apt-get install -y libglib2.0-0 libsm6 libxrender1 libxext6 -y
通过以上指令,可以帮助你安装和运行 DiffSynth-Studio
项目的主要步骤。
运行 Step-Video-T2V 模型:
python examples/stepvideo/stepvideo_text_to_video.py
提示词和帧数等参数可以在样例代码 stepvideo_text_to_video.py
中进行修改。
运行这个:
# Run!
video = pipe(
prompt="一名宇航员在月球上发现一块石碑,上面印有“stepfun”字样,闪闪发光。超高清、HDR 视频、环境光、杜比全景声、画面稳定、流畅动作、逼真的细节、专业级构图、超现实主义、自然、生动、超细节、清晰。",
negative_prompt="画面暗、低分辨率、不良手、文本、缺少手指、多余的手指、裁剪、低质量、颗粒状、签名、水印、用户名、模糊。",
num_inference_steps=30, cfg_scale=9, num_frames=51, seed=1
)
save_video(
video, "video.mp4", fps=25, quality=5,
ffmpeg_params=["-vf", "atadenoise=0a=0.1:0b=0.1:1a=0.1:1b=0.1"]
)
单卡显存占用:
也可以使用我打包好的镜像:
docker pull kevinchina/deeplearning:2.5.0-cuda12.4-cudnn9-devel-DiffSynth