这是一款开源的 SOTA(State-of-the-Art)视频生成模型,仅用 20 万美元(224 张 GPU)就能训练出商业级 11B 参数的视频生成大模型。它采用 Python 语言和 PyTorch 深度学习框架开发,具有生成速度快、资源消耗低、扩展性强等优势,适合内容创作者、广告制作者和社交媒体运营人群使用。目前,已全面开源模型权重、推理代码及分布式训练全流程。
技术报告
-
以前版本的报告(最好在相应的分支中查看):
- Open-Sora 1.3:移位窗口注意力、统一时空 VAE 等。
- Open-Sora 1.2 技术报告:整流、3D-VAE、评分条件、评估等
- Open-Sora 1.1:多分辨率/长度/纵横比、图像/视频调理/编辑、数据预处理等。
- Open-Sora 1.0:架构、字幕等
📍 由于 Open-Sora 正在积极开发中,因此我们针对不同的版本保持不同的分支。最新版本是 main。旧版本包括:v1.0、v1.1、v1.2、v1.3。
安装和使用
安装
# create a virtual env and activate (conda as an example)
conda create -n opensora python=3.10
conda activate opensora
# download the repo
git clone https://github.com/hpcaitech/Open-Sora
cd Open-Sora
# Ensure torch >= 2.4.0
pip install -v . # for development mode, `pip install -v -e .`
pip install xformers==0.0.27.post2 --index-url https://download.pytorch.org/whl/cu121 # install xformers according to your cuda version
pip install flash-attn --no-build-isolation
或者,您可以安装 flash attention 3 以获得更快的速度。
git clone https://github.com/Dao-AILab/flash-attention # 4f0640d5
cd flash-attention/hopper
python setup.py install
模型下载
我们的 11B 型号支持 256 像素和 768 像素的分辨率。一个模型同时支持 T2V 和 I2V。🤗 Huggingface 🤖 ModelScope。
从 huggingface 下载:
pip install "huggingface_hub[cli]"
huggingface-cli download hpcai-tech/Open-Sora-v2 --local-dir ./ckpts
从 ModelScope 下载:
pip install modelscope
modelscope download hpcai-tech/Open-Sora-v2 --local_dir ./ckpts
文本到视频生成
我们的模型针对图像到视频的生成进行了优化,但它也可以用于文本到视频的生成。为了生成高质量的视频,在 flux 文本到图像模型的帮助下,我们构建了一个文本到图像到视频的管道。对于 256x256 分辨率:
# Generate one given prompt
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py configs/diffusion/inference/t2i2v_256px.py --save-dir samples --prompt "raining, sea"
# Save memory with offloading
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py configs/diffusion/inference/t2i2v_256px.py --save-dir samples --prompt "raining, sea" --offload True
# Generation with csv
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py configs/diffusion/inference/t2i2v_256px.py --save-dir samples --dataset.data-path assets/texts/example.csv
对于 768x768 分辨率:
# One GPU
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py configs/diffusion/inference/t2i2v_768px.py --save-dir samples --prompt "raining, sea"
# Multi-GPU with colossalai sp
torchrun --nproc_per_node 8 --standalone scripts/diffusion/inference.py configs/diffusion/inference/t2i2v_768px.py --save-dir samples --prompt "raining, sea"
您可以通过以下方式调整生成纵横比,按 调整生成长度。aspect_ratio 的候选值包括 、 、 、 、 。num_frames 的候选值应为 且小于 129。--aspect_ratio--num_frames16:99:161:12.39:14k+1
您还可以通过以下方式运行直接文本到视频:
# One GPU for 256px
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py configs/diffusion/inference/256px.py --prompt "raining, sea"
# Multi-GPU for 768px
torchrun --nproc_per_node 8 --standalone scripts/diffusion/inference.py configs/diffusion/inference/768px.py --prompt "raining, sea"
图像到视频生成
给定提示和参考图像,您可以使用以下命令生成视频:
# 256px
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py configs/diffusion/inference/256px.py --cond_type i2v_head --prompt "A plump pig wallows in a muddy pond on a rustic farm, its pink snout poking out as it snorts contentedly. The camera captures the pig's playful splashes, sending ripples through the water under the midday sun. Wooden fences and a red barn stand in the background, framed by rolling green hills. The pig's muddy coat glistens in the sunlight, showcasing the simple pleasures of its carefree life." --ref assets/texts/i2v.png
# 256px with csv
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py configs/diffusion/inference/256px.py --cond_type i2v_head --dataset.data-path assets/texts/i2v.csv
# Multi-GPU 768px
torchrun --nproc_per_node 8 --standalone scripts/diffusion/inference.py configs/diffusion/inference/768px.py --cond_type i2v_head --dataset.data-path assets/texts/i2v.csv
高级用法
运动分数
在训练期间,我们会在文本提示中提供动作分数。在推理过程中,您可以使用以下命令生成带有运动分数的视频(默认分数为 4):
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py configs/diffusion/inference/t2i2v_256px.py --save-dir samples --prompt "raining, sea" --motion-score 4
我们还提供动态运动评分评估器。设置 OpenAI API 密钥后,您可以使用以下命令来评估视频的运动分数:
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py configs/diffusion/inference/t2i2v_256px.py --save-dir samples --prompt "raining, sea" --motion-score dynamic
得分 | 1 | 4 | 7 |
---|---|---|---|
提示优化
我们利用 ChatGPT 来优化提示。您可以使用以下命令来优化提示符。该函数可用于文本到视频和图像到视频的生成。
export OPENAI_API_KEY=sk-xxxx
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py configs/diffusion/inference/t2i2v_256px.py --save-dir samples --prompt "raining, sea" --refine-prompt True
再生产
要使结果可重现,您可以通过以下方式设置随机种子:
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py configs/diffusion/inference/t2i2v_256px.py --save-dir samples --prompt "raining, sea" --sampling_option.seed 42 --seed 42
用于为每个提示生成样本。--num-sample kk
计算效率
我们在 H100/H800 GPU 上测试了文本转视频的计算效率。对于 256x256,我们使用 colossalai 的张量并行度,并被使用。对于 768x768,我们使用 colossalai 的序列并行性。都使用步数 50。结果以以下格式显示:--offload True
$\color{蓝色}{\text{总时间(秒)}}/\color{红色}{\text{GPU 内存峰值 (GB)}}$
分辨率 | 1 个 GPU | 2 个 GPU | 4 个 GPU | 8 个 GPU |
---|---|---|---|---|
256 像素 256 像素 | 60/52.5 | 40/44.3 | 34/44.3 | |
768 像素 768 | 1656/60.3 | 863/48.3 | 466/44.3 | 276/44.3 |