Open-Sora 2.0 is the 11B open-weights video model from HPC-AI Tech – Apache-2.0, on your GPUs, no SaaS queue. Ship date: 12 March 2025. Code lives at github.com/hpcaitech/Open-Sora. The technical report (roughly $200k train cost; VBench/human-pref near HunyuanVideo 11B and Runway Gen-3 Alpha; gap to OpenAI Sora cut to 0.69%) is arXiv:2503.09642.
SaaS roundups already cover Veo, Kling, and Runway. This page is the metal path: clone, pin the wheels that break, pull checkpoints, get one mp4.
There’s a particular calm that shows up when the only rate limit is your PSU and the weights sit on a disk you own. Whether that calm is worth 52+ GB of VRAM is the real product decision – not another feature matrix.
System requirements for Open-Sora 2.0
Official H100/H800 table, 50 denoising steps (README computational efficiency):
| Resolution | GPUs | Time | Peak VRAM |
|---|---|---|---|
| 256×256 | 1× | ~60 s | 52.5 GB |
| 256×256 | 2×+ | ~40-34 s | ~44.3 GB/card |
| 768×768 | 1× | ~1656 s (~27.6 min) | 60.3 GB |
| 768×768 | 8× (seq. parallel) | ~276 s | ~44.3 GB/card |
Practical floor: Linux (Ubuntu 22.04), NVIDIA stack with CUDA 12.1-compatible toolkit, Python 3.10, ≥64 GB system RAM, fast SSD with 100+ GB free. One 80 GB A100/H100 is the sane single-card setup for 256px. Multi-GPU via ColossalAI tensor/sequence parallel cuts per-card memory. A lone RTX 4090 24 GB? Full 11B at these resolutions is a bad night – offload helps, then often OOMs anyway.
Pro tip:
nvidia-smifirst. Free memory under ~48 GB on one card → plan 2-4 GPUs or rent an H100 hour.
Download the code and weights
conda create -n opensora python=3.10 -y
conda activate opensora
git clone https://github.com/hpcaitech/Open-Sora
cd Open-Sora
Main branch is 2.0 (older tags stay on v1.0-v1.3). Weights are separate.
~23.8 GB for Open_Sora_v2.safetensors on Hugging Face – that’s the file you actually need. Full ModelScope snapshots list around 69 GB; plan disk for the larger number if you mirror everything. Prefer HF CLI for resume:
pip install "huggingface_hub[cli]"
huggingface-cli download hpcai-tech/Open-Sora-v2 --local-dir ./ckpts
Model card: huggingface.co/hpcai-tech/Open-Sora-v2. If HF is slow, as of the project docs: pip install modelscope && modelscope download hpcai-tech/Open-Sora-v2 --local_dir ./ckpts (paths can differ by region). Configs expect ./ckpts.
Install dependencies (exact pins)
As of the March 2025 README Quickstart, from repo root:
pip install -v .
pip install xformers==0.0.27.post2 --index-url https://download.pytorch.org/whl/cu121
pip install flash-attn --no-build-isolation
Two lines. That’s it – most failed first installs die here. xformers from plain PyPI? ABI soup. Must be the cu121 PyTorch index. flash-attn without --no-build-isolation never sees your torch; the error almost never says so. Optional: FlashAttention-3 from Dao-AILab/flash-attention hopper/ (commit pinned in README) if you want the faster hopper path.
python -c "import torch; import colossalai; print(torch.__version__, torch.cuda.is_available())"
Want torch ≥ 2.4.0 and True.
The catch is generation, not git clone.
First generation and verification
Start with t2i2v. Maintainers optimize for I2V and route text through a reference-image stage (Flux-style) for stabler clips – config t2i2v_256px.py, not bare T2V, on day one:
torchrun --nproc_per_node 1 --standalone
scripts/diffusion/inference.py
configs/diffusion/inference/t2i2v_256px.py
--save-dir samples
--prompt "raining, sea"
--offload True
--offload True shuttles weights CPU↔GPU. On borderline cards it’s finish vs CUDA out of memory. Clips land in samples/.
torchrun --nproc_per_node 8 --standalone
scripts/diffusion/inference.py
configs/diffusion/inference/t2i2v_768px.py
--save-dir samples
--prompt "raining, sea"
Knobs from the inference docs: --aspect_ratio in 16:9, 9:16, 1:1, 2.39:1; --num_frames as 4k+1 and < 129. Pure T2V uses 256px.py / 768px.py. I2V: --cond_type i2v_head plus --ref path/to/image.png. One 11B checkpoint covers T2V and I2V at 256 and 768.
Done means: playable file in samples/, process exit 0. Empty dir? Second terminal, nvidia-smi -l 1, watch the spike.
High-compression fork exists too – hpcai-tech/Open-Sora-v2-Video-DC-AE with configs/diffusion/inference/high_compression.py (see docs/hcae.md). Faster, some fidelity loss. Try it after baseline works.
Open question worth sitting with after your first clip: if motion priors still feel “open-model,” is that a checkpoint gap or a data-mixture gap – and would another 0.69% on a leaderboard change how you use local weights day to day?
Common install errors and fixes
- xformers ABI / undefined symbol – reinstall from the cu121 index only; wipe any generic PyPI wheel first.
- flash-attn build failure – always
--no-build-isolation; nvcc must match torch’s CUDA. - CUDA OOM mid-run –
--offload True, stay on 256px, or add GPUs. That 52.5 GB peak at 256px is measured, not aspirational. - Docker exec format / platform mismatch – images are linux/amd64; ARM Macs without platform flags fail (recurring in project issues). Bare-metal or matching cloud VMs for bring-up.
- Apex / fused layernorm warnings – often noise; build NVIDIA apex from source only if you need fused kernels.
- ImportError on fused_layer_norm_cuda – torch/CUDA skew; recreate the env, don’t patch.
Once it runs, look at ComfyUI-Open-Sora nodes – and compare prompt adherence to hosted Kling/Veo only when you truly need air-gapped weights.
Upgrade and uninstall
cd Open-Sora
git pull
pip install -v .
2.x tracks main. Redownload weights only when the model card or changelog ships a new checkpoint. No formal 1.x→2.0 config migrator – fresh install mindset.
conda deactivate
conda env remove -n opensora
# optional: rm -rf Open-Sora and ./ckpts
Docker: stop/remove container and image; volumes are yours.
FAQ
Is Open-Sora 2.0 a drop-in Sora replacement?
No. Open 11B weights with solid VBench/human-pref numbers – different motion priors, no native product audio pipeline.
Can I run this on a single RTX 4090?
Not the full published 256/768 path. Peak sits in the 52-60 GB band on one GPU. Picture a debugging evening: offload on, 256px, still OOM at denoise mid-point. Real options are multi-GPU 48 GB cards, a cloud H100, or community quantized/Comfy forks (quality and support vary – measure yourself).
t2i2v vs plain T2V – which should I start with?
t2i2v_256px.py. The stack is built around I2V; text prompts get a reference-image stage so clips hold together. Plain 256px.py / 768px.py drop that stage when you already have conditioning frames or want fewer moving parts – same prompt length usually looks weaker. After 256px is green, raise resolution and frame count on purpose. Single-GPU 768px was measured near half an hour; don’t discover that mid-demo.
Next: create the conda env, pull weights overnight if bandwidth is tight, run the 256px t2i2v command with --offload True, and confirm an mp4 in samples/ before you touch multi-GPU or 768px.