Skip to content

Deploy Open-Sora 2.0: Self-Hosted Sora Alternative

Install Open-Sora 2.0 (11B) as a self-hosted Sora alternative: exact commands, 52.5GB VRAM reality, weights download, and first inference.

6 min readIntermediate

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-smi first. 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.