Open-Sora 2.0 开源 11B 视频模型:权重和训练代码全放开,20 万美元训完
项目信息
- 仓库:hpcaitech/Open-Sora(Apache-2.0,Python,约 2.97 万 star)
- 样例/Gallery:hpcaitech.github.io/Open-Sora
- 2.0 技术报告:arXiv 2503.09642
- 权重(11B):Hugging Face hpcai-tech/Open-Sora-v2 | ModelScope luchentech/Open-Sora-v2
- 在线 Demo:Hugging Face Space
它是什么
Open-Sora 是潞晨科技(HPC-AI Tech)维护的开源视频生成项目,目标是压低视频生成模型的训练与使用门槛。2.0 版在 2025-03-12 发布:11B 参数,一个模型同时支持文生视频(T2V)和图生视频(I2V),覆盖 256px 与 768px 两档分辨率,权重和训练代码都开源。
版本推进得很快,各版本要点:
| 版本 | 时间 | 关键变化 |
|---|---|---|
| 1.0 | 2024-03-18 | 全流程开源(数据预处理、训练、推理),2s 512×512,3 天训练 |
| 1.1 | 2024-04-25 | 2s |
| 1.2 | 2024-06-17 | 引入 3D-VAE、rectified flow、score condition,画质明显提升 |
| 1.3 | 2025-02-20 | 1B 模型,新版 VAE 与 Transformer 架构 |
| 2.0 | 2025-03-12 | 11B,768px,T2V/I2V 共用权重,训练成本约 20 万美元 |
老版本按分支保留:opensora/v1.0、/v1.1、/v1.2、/v1.3,主分支 main 是最新版。想复现旧结论就得切到对应分支,README 对不同分支的文档、权重都有说明。
2.0 的数字
- 11B 参数,256px / 768px 两档,T2V 与 I2V 一个模型搞定。
- 在 VBench 上与 11B 的 HunyuanVideo、30B 的 Step-Video 表现大致同级;与 OpenAI Sora 的差距从 Open-Sora 1.2 的 4.52% 收窄到 0.69%。
- 官方称训练一个商用级视频生成模型只需 约 20 万美元,并公开了训练代码与 checkpoint。
这两条是它和「只放权重、不放训练细节」的模型最大的区别。
安装
环境要求 Python 3.10、torch >= 2.4.0:
# 建虚拟环境(以 conda 为例)
conda create -n opensora python=3.10
conda activate opensora
git clone https://github.com/hpcaitech/Open-Sora
cd Open-Sora
# torch 需 >= 2.4.0
pip install -v . # 开发模式用 pip install -v -e .
pip install xformers==0.0.27.post2 --index-url https://download.pytorch.org/whl/cu121 # 按自己的 CUDA 版本选
pip install flash-attn --no-build-isolation
xformers 的 index-url 要按本机 CUDA 版本换,照抄 cu121 容易装不上。可选装 FlashAttention 3 提速:
git clone https://github.com/Dao-AILab/flash-attention # 4f0640d5
cd flash-attention/hopper
python setup.py install
下载权重
# Hugging Face
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
推理
文生视频
官方说明模型本身对 I2V 优化得更好,T2V 走的是「文本 → 图片 → 视频」的 t2i2v 管线,中间借了 Flux 文生图模型。256px:
# 单条 prompt
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py \
configs/diffusion/inference/t2i2v_256px.py --save-dir samples --prompt "raining, sea"
# 显存不够时开启 offload
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py \
configs/diffusion/inference/t2i2v_256px.py --save-dir samples --prompt "raining, sea" --offload True
# 批量:走 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
768px:
# 单卡
torchrun --nproc_per_node 1 --standalone scripts/diffusion/inference.py \
configs/diffusion/inference/t2i2v_768px.py --save-dir samples --prompt "raining, sea"
# 8 卡,colossalai 序列并行
torchrun --nproc_per_node 8 --standalone scripts/diffusion/inference.py \
configs/diffusion/inference/t2i2v_768px.py --save-dir samples --prompt "raining, sea"
想跳过中间的文生图,也可以直接跑纯 T2V(configs/diffusion/inference/256px.py / 768px.py)。
参数上有两个硬限制:
--aspect_ratio候选值只有16:9、9:16、1:1、2.39:1;--num_frames必须是 4k+1,且小于 129。
图生视频
# 256px,单图 + prompt
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, ..." \
--ref assets/texts/i2v.png
# 256px,批量
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
# 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
几个进阶开关
训练时把 motion score 写进了文本 prompt,推理时可以显式指定,默认是 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
打分也能交给模型动态评(--motion-score dynamic),需要 OpenAI API key。同理还有 prompt 改写:
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
要可复现结果就固定种子;--num-sample k 会给每条 prompt 生成 k 个样本:
... --sampling_option.seed 42 --seed 42
耗时与显存
官方在 H100/H800 上测的 T2V 数据,格式是「总耗时(s) / 峰值显存(GB)」,步数都是 50。256px 用 colossalai 张量并行并开 --offload True,768px 用序列并行:
| 分辨率 | 1 卡 | 2 卡 | 4 卡 | 8 卡 |
|---|---|---|---|---|
| 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 |
768px 的账很清楚:单卡出片要 27 分钟以上、吃 60GB 显存,8 卡才压到 4 分半。256px 单卡 1 分钟能出,显存也要 52.5GB,量级上不是消费级卡能硬扛的。
自己训练
README 指向三份文档,按需要跳:
- 训练/微调自己的模型:docs/train.md
- 训练与评测视频 autoencoder:docs/ae.md
- 高压缩率视频 autoencoder:docs/hcae.md
需要注意的地方
- README 未给出消费级显卡上的可跑性说明,实测数据都来自 H100/H800;想在单张 4090 上跑 768px,先按上面的显存表估算,别抱侥幸。
--offload True是拿时间换显存,256px 单卡那档的 60s 是开/不开 offload 之外还要看具体配置,自己测一遍更稳。- motion score、prompt refine、dynamic 评分都依赖 OpenAI API key,纯离线环境里这几个开关用不了。
- 版本迭代很快,README 的安装与推理命令跟着
main分支走;拿 1.x 的旧命令跑 2.0 大概率对不上。