|
--- |
|
license: apache-2.0 |
|
--- |
|
|
|
## Open-Sora: Democratizing Efficient Video Production for All |
|
|
|
We design and implement **Open-Sora**, an initiative dedicated to **efficiently** producing high-quality video. We hope to make the model, |
|
tools and all details accessible to all. By embracing **open-source** principles, |
|
Open-Sora not only democratizes access to advanced video generation techniques, but also offers a |
|
streamlined and user-friendly platform that simplifies the complexities of video generation. |
|
With Open-Sora, our goal is to foster innovation, creativity, and inclusivity within the field of content creation. |
|
|
|
Github: https://github.com/hpcaitech/Open-Sora |
|
|
|
## 🔆 Reports |
|
|
|
- **[Tech Report of Open-Sora 2.0](https://github.com/hpcaitech/Open-Sora-Demo/blob/main/paper/Open_Sora_2_tech_report.pdf)** |
|
- **[Step by step to train or finetune your own model](docs/train.md)** |
|
- **[Step by step to train and evaluate an video autoencoder](docs/ae.md)** |
|
- **[Visit the high compression video autoencoder](docs/hcae.md)** |
|
- Reports of previous version (better see in according branch): |
|
- [Open-Sora 1.3](docs/report_04.md): shift-window attention, unified spatial-temporal VAE, etc. |
|
- [Open-Sora 1.2](docs/report_03.md), [Tech Report](https://arxiv.org/abs/2412.20404): rectified flow, 3d-VAE, score condition, evaluation, etc. |
|
- [Open-Sora 1.1](docs/report_02.md): multi-resolution/length/aspect-ratio, image/video conditioning/editing, data preprocessing, etc. |
|
- [Open-Sora 1.0](docs/report_01.md): architecture, captioning, etc. |
|
|
|
📍 Since Open-Sora is under active development, we remain different branchs for different versions. The latest version is [main](https://github.com/hpcaitech/Open-Sora). Old versions include: [v1.0](https://github.com/hpcaitech/Open-Sora/tree/opensora/v1.0), [v1.1](https://github.com/hpcaitech/Open-Sora/tree/opensora/v1.1), [v1.2](https://github.com/hpcaitech/Open-Sora/tree/opensora/v1.2), [v1.3](https://github.com/hpcaitech/Open-Sora/tree/opensora/v1.3). |
|
|
|
## Quickstart |
|
|
|
### Installation |
|
|
|
```bash |
|
# 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 |
|
``` |
|
|
|
Optionally, you can install flash attention 3 for faster speed. |
|
|
|
```bash |
|
git clone https://github.com/Dao-AILab/flash-attention # 4f0640d5 |
|
cd flash-attention/hopper |
|
python setup.py install |
|
``` |
|
|
|
### Model Download |
|
|
|
Our 11B model supports 256px and 768px resolution. Both T2V and I2V are supported by one model. 🤗 [Huggingface](https://huggingface.co/hpcai-tech/Open-Sora-v2) 🤖 [ModelScope](https://modelscope.cn/models/luchentech/Open-Sora-v2). |
|
|
|
Download from huggingface: |
|
|
|
```bash |
|
pip install "huggingface_hub[cli]" |
|
huggingface-cli download hpcai-tech/Open-Sora-v2 --local-dir ./ckpts |
|
``` |
|
|
|
Download from ModelScope: |
|
|
|
```bash |
|
pip install modelscope |
|
modelscope download hpcai-tech/Open-Sora-v2 --local_dir ./ckpts |
|
``` |
|
|
|
### Text-to-Video Generation |
|
|
|
Our model is optimized for image-to-video generation, but it can also be used for text-to-video generation. To generate high quality videos, with the help of flux text-to-image model, we build a text-to-image-to-video pipeline. For 256x256 resolution: |
|
|
|
```bash |
|
# 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" |
|
|
|
# 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 |
|
``` |
|
|
|
For 768x768 resolution: |
|
|
|
```bash |
|
# 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" |
|
``` |
|
|
|
You can adjust the generation aspect ratio by `--aspect_ratio` and the generation length by `--num_frames`. Candidate values for aspect_ratio includes `16:9`, `9:16`, `1:1`, `2.39:1`. Candidate values for num_frames should be `4k+1` and less than 129. |
|
|
|
You can also run direct text-to-video by: |
|
|
|
```bash |
|
# 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" |
|
``` |
|
|
|
### Image-to-Video Generation |
|
|
|
Given a prompt and a reference image, you can generate a video with the following command: |
|
|
|
```bash |
|
# 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 |
|
``` |
|
|
|
## Advanced Usage |
|
|
|
### Motion Score |
|
|
|
During training, we provide motion score into the text prompt. During inference, you can use the following command to generate videos with motion score (the default score is 4): |
|
|
|
```bash |
|
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 |
|
``` |
|
|
|
We also provide a dynamic motion score evaluator. After setting your OpenAI API key, you can use the following command to evaluate the motion score of a video: |
|
|
|
```bash |
|
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 |
|
``` |
|
|
|
| Score | 1 | 4 | 7 | |
|
| ----- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | |
|
| | <img src="https://github.com/hpcaitech/Open-Sora-Demo/blob/main/demo/v2.0/motion_score_1.gif" width=""> | <img src="https://github.com/hpcaitech/Open-Sora-Demo/blob/main/demo/v2.0/motion_score_4.gif" width=""> | <img src="https://github.com/hpcaitech/Open-Sora-Demo/blob/main/demo/v2.0/motion_score_7.gif" width=""> | |
|
|
|
### Prompt Refine |
|
|
|
We take advantage of ChatGPT to refine the prompt. You can use the following command to refine the prompt. The function is available for both text-to-video and image-to-video generation. |
|
|
|
```bash |
|
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 |
|
``` |
|
|
|
### Reproductivity |
|
|
|
To make the results reproducible, you can set the random seed by: |
|
|
|
```bash |
|
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 |
|
``` |
|
|
|
Use `--num-sample k` to generate `k` samples for each prompt. |
|
|
|
## Computational Efficiency |
|
|
|
We test the computational efficiency of text-to-video on H100/H800 GPU. For 256x256, we use colossalai's tensor parallelism. For 768x768, we use colossalai's sequence parallelism. All use number of steps 50. The results are presented in the format: $\color{blue}{\text{Total time (s)}}/\color{red}{\text{peak GPU memory (GB)}}$ |
|
|
|
| Resolution | 1x GPU | 2x GPUs | 4x GPUs | 8x GPUs | |
|
| ---------- | -------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | |
|
| 256x256 | $\color{blue}{60}/\color{red}{52.5}$ | $\color{blue}{40}/\color{red}{44.3}$ | $\color{blue}{34}/\color{red}{44.3}$ | | |
|
| 768x768 | $\color{blue}{1656}/\color{red}{60.3}$ | $\color{blue}{863}/\color{red}{48.3}$ | $\color{blue}{466}/\color{red}{44.3}$ | $\color{blue}{276}/\color{red}{44.3}$ | |
|
|
|
## Evaluation |
|
|
|
On [VBench](https://huggingface.co/spaces/Vchitect/VBench_Leaderboard), Open-Sora 2.0 significantly narrows the gap with OpenAI’s Sora, reducing it from 4.52% → 0.69% compared to Open-Sora 1.2. |
|
|
|
 |
|
|
|
Human preference results show our model is on par with HunyuanVideo 14B and Step-Video 30B. |
|
|
|
 |
|
|
|
## Contribution |
|
|
|
Thanks goes to these wonderful contributors: |
|
|
|
<a href="https://github.com/hpcaitech/Open-Sora/graphs/contributors"> |
|
<img src="https://contrib.rocks/image?repo=hpcaitech/Open-Sora" /> |
|
</a> |
|
|
|
If you wish to contribute to this project, please refer to the [Contribution Guideline](./CONTRIBUTING.md). |
|
|
|
## Acknowledgement |
|
|
|
Here we only list a few of the projects. For other works and datasets, please refer to our report. |
|
|
|
- [ColossalAI](https://github.com/hpcaitech/ColossalAI): A powerful large model parallel acceleration and optimization |
|
system. |
|
- [DiT](https://github.com/facebookresearch/DiT): Scalable Diffusion Models with Transformers. |
|
- [OpenDiT](https://github.com/NUS-HPC-AI-Lab/OpenDiT): An acceleration for DiT training. We adopt valuable acceleration |
|
strategies for training progress from OpenDiT. |
|
- [PixArt](https://github.com/PixArt-alpha/PixArt-alpha): An open-source DiT-based text-to-image model. |
|
- [Flux](https://github.com/black-forest-labs/flux): A powerful text-to-image generation model. |
|
- [Latte](https://github.com/Vchitect/Latte): An attempt to efficiently train DiT for video. |
|
- [HunyuanVideo](https://github.com/Tencent/HunyuanVideo/tree/main?tab=readme-ov-file): Open-Source text-to-video model. |
|
- [StabilityAI VAE](https://huggingface.co/stabilityai/sd-vae-ft-mse-original): A powerful image VAE model. |
|
- [DC-AE](https://github.com/mit-han-lab/efficientvit): Deep Compression AutoEncoder for image compression. |
|
- [CLIP](https://github.com/openai/CLIP): A powerful text-image embedding model. |
|
- [T5](https://github.com/google-research/text-to-text-transfer-transformer): A powerful text encoder. |
|
- [LLaVA](https://github.com/haotian-liu/LLaVA): A powerful image captioning model based on [Mistral-7B](https://huggingface.co/mistralai/Mistral-7B-v0.1) and [Yi-34B](https://huggingface.co/01-ai/Yi-34B). |
|
- [PLLaVA](https://github.com/magic-research/PLLaVA): A powerful video captioning model. |
|
- [MiraData](https://github.com/mira-space/MiraData): A large-scale video dataset with long durations and structured caption. |
|
|
|
## Citation |
|
|
|
```bibtex |
|
@software{opensora, |
|
author = {Zangwei Zheng and Xiangyu Peng and Tianji Yang and Chenhui Shen and Shenggui Li and Hongxin Liu and Yukun Zhou and Tianyi Li and Yang You}, |
|
title = {Open-Sora: Democratizing Efficient Video Production for All}, |
|
month = {March}, |
|
year = {2024}, |
|
url = {https://github.com/hpcaitech/Open-Sora} |
|
} |
|
``` |
|
|
|
## Star History |
|
|
|
[](https://star-history.com/#hpcaitech/Open-Sora&Date) |
|
|