文章目录
一、关于 Open-Sora
Open-Sora 由 潞晨科技 设计并实施,这是一项致力于高效制作高质量视频的计划。希望让所有人都能使用模型、工具和所有细节。
通过采用开源原则,Open-Sora 不仅使高级视频生成技术的使用变得民主化,而且还提供了一个简化且用户友好的平台,简化了视频生成的复杂性。
借助 Open-Sora,我们的目标是在内容创作领域促进创新、创造力和包容性。
- github :https://github.com/hpcaitech/Open-Sora
- 中文文档:https://github.com/hpcaitech/Open-Sora/blob/main/docs/zh_CN/README.md
- 主页:https://hpcaitech.github.io/Open-Sora/
- 视频教程:https://www.bilibili.com/video/BV1ow4m1e7PX/
- OpenSora镜像:https://cloud.luchentech.com/doc/docs/image/open-sora/
- 潞晨云:https://cloud.luchentech.com/
其他有用的文档和链接。
- 报告: 技术报告 v1.2, 技术报告 v1.1, 技术报告 v1.0, 训练加速.md
- Repo 结构: 结构.md
- 配置文件说明: config.md
- Useful commands: commands.md
- 数据处理管道和数据集: datasets.md
- 每个数据处理工具的 README: dataset conventions and management, scene cutting, scoring, caption
- 评估: eval
- 画廊: gallery
📰 资讯
详见:https://github.com/hpcaitech/Open-Sora/blob/main/docs/zh_CN/README.md#-资讯
最新的 Demo 🎥
🔥 您可以在HuggingFace上的 🤗 Gradio应用程序上体验Open-Sora. 我们的画廊中提供了更多示例.
4s 720×1280 | 4s 720×1280 | 4s 720×1280 |
---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
二、安装
1、从源头安装
对于 CUDA 12.1,您可以使用以下命令安装依赖项。否则,请参阅安装以获取有关不同 cuda 版本的更多说明以及数据预处理的其他依赖项。
# create a virtual env and activate (conda as an example)
conda create -n opensora python=3.9
conda activate opensora
# install torch, torchvision and xformers
pip install -r requirements/requirements-cu121.txt
# download the repo
git clone https://github.com/hpcaitech/Open-Sora
cd Open-Sora
# the default installation is for inference only
pip install -v . # for development mode, `pip install -v -e .`
(Optional, recommended for fast speed, especially for training) To enable `layernorm_kernel` and `flash_attn`, you need to install `apex` and `flash-attn` with the following commands.
```bash
# install flash attention
# set enable_flash_attn=False in config to disable flash attention
pip install packaging ninja
pip install flash-attn --no-build-isolation
# install apex
# set enable_layernorm_kernel=False in config to disable apex
pip install -v --disable-pip-version-check --no-cache-dir --no-build-isolation --config-settings "--build-option=--cpp_ext" --config-settings "--build-option=--cuda_ext" git+https://github.com/NVIDIA/apex.git
2、使用Docker
运行以下命令从提供的Dockerfile 构建docker 镜像。
docker build -t opensora .
运行以下命令以交互模式启动docker容器。
docker run -ti --gpus all -v .:/workspace/Open-Sora opensora
三、模型权重
Open-Sora 1.2 模型权重
分辨率 | 模型大小 | 数据 | 迭代次数 | 批次大小 | 网址 |
---|---|---|---|---|---|
Diffusion | 1.1B | 30M | 70k | 动态大小 | 🔗 |
VAE | 384M | 3M | 1M | 8 | 🔗 |
请参阅我们的**report 1.2**以了解更多信息。
四、Gradio演示
🔥 您可以在Hugging Face 上的🤗 Gradio 应用程序上在线体验Open-Sora。【由于GPU资源不足,已失效】
1、本地部署
如果您想在本地部署 gradio,我们还在这个存储库中提供了一个Gradio 应用程序 ,您可以使用以下命令启动一个交互式 Web 应用程序来体验使用 Open-Sora 生成视频。
pip install gradio spaces
python gradio/app.py
这将在您的本地主机上启动 Gradio 应用程序。如果您想了解有关 Gradio 应用程序的更多信息,可以参考Gradio README。
要启用提示增强和其他语言输入(例如中文输入),您需要OPENAI_API_KEY在环境中进行设置。查看OpenAI的文档以获取您的 API 密钥。
export OPENAI_API_KEY=YOUR_API_KEY
2、入门
在 Gradio 应用程序中,基本选项如下:
生成视频最简单的方式是输入文本提示,然后点击“生成视频”按钮(如果找不到,请向下滚动)。生成的视频将显示在右侧面板中。勾选“使用 GPT4o 增强提示”将使用 GPT-4o 来细化提示,而“随机提示”按钮将由 GPT-4o 为您生成随机提示。由于 OpenAI 的 API 限制,提示细化结果具有一定的随机性。
然后,你可以选择生成视频的分辨率、时长、长宽比。不同的分辨率和视频长度会影响视频生成速度。在 80G H100 GPU 上,生成速度和峰值内存使用量为:
分辨率 | 图像 | 2秒 | 4秒 | 8秒 | 16秒 |
---|---|---|---|---|---|
360p | 3s, 24G | 18s, 27G | 31s, 27G | 62s, 28G | 121s, 33G |
480p | 2s, 24G | 29s, 31G | 55s, 30G | 108s, 32G | 219s, 36G |
720p | 6s, 27G | 68s, 41G | 130s, 39G | 260s, 45G | 547s, 67G |
注意,除了文本转视频,你还可以使用图片转视频。你可以上传图片,然后点击“生成视频”按钮,生成以图片为第一帧的视频。或者,你可以填写文本提示,然后点击“生成图片”按钮,根据文本提示生成图片,然后点击“生成视频”按钮,根据同一模型生成的图片生成视频。
然后您可以指定更多选项,包括“运动强度”、“美学”和“相机运动”。如果未选中“启用”或选择“无”,则不会将信息传递给模型。否则,模型将生成具有指定运动强度、美学分数和相机运动的视频。
对于美学分数,我们建议使用高于 6 的值。对于运动强度,较小的值将导致更平滑但动态性较差的视频,而较大的值将导致更动态但可能更模糊的视频。因此,您可以尝试不使用它,然后根据生成的视频进行调整。对于相机运动,有时模型无法很好地遵循指令,我们正在努力改进它。
您还可以调整“采样步数”,这是去噪的次数,与生成速度直接相关。小于 30 的数字通常会导致较差的生成结果,而大于 100 的数字通常不会有明显的改善。“种子”用于可重复性,您可以将其设置为固定数字以生成相同的视频。“CFG 比例”控制模型遵循文本提示的程度,较小的值会导致视频更随机,而较大的值会导致视频更遵循文本(建议为 7)。
对于更高级的用法,您可以参考Gradio README.
五、推理
1、Open-Sora 1.2 命令行推理
基础的命令行推理:
# text to video
python scripts/inference.py configs/opensora-v1-2/inference/sample.py \
--num-frames 4s --resolution 720p --aspect-ratio 9:16 \
--prompt "a beautiful waterfall"
您可以向命令行添加更多选项来定制生成。
python scripts/inference.py configs/opensora-v1-2/inference/sample.py \
--num-frames 4s --resolution 720p --aspect-ratio 9:16 \
--num-sampling-steps 30 --flow 5 --aes 6.5 \
--prompt "a beautiful waterfall"
对于图像到视频生成和其他功能,API 与 Open-Sora 1.1 兼容。请参阅[此处]](commands.md)了解更多说明。
如果您的安装不包含 apex
和 flash-attn
, 则需要在配置文件中或通过以下命令禁用它们。
python scripts/inference.py configs/opensora-v1-2/inference/sample.py \
--num-frames 4s --resolution 720p \
--layernorm-kernel False --flash-attn False \
--prompt "a beautiful waterfall"
2、序列并行推理
要启用序列并行,您需要使用 torchrun
来运行推理脚本。以下命令将使用 2 个 GPU 运行推理。
# text to video
CUDA_VISIBLE_DEVICES=0,1 torchrun --nproc_per_node 2 scripts/inference.py configs/opensora-v1-2/inference/sample.py \
--num-frames 4s --resolution 720p --aspect-ratio 9:16 \
--prompt "a beautiful waterfall"
⚠️ 注意: gradio 部署不支持序列并行。目前,只有当维度可以除以 GPU 数量时才支持序列并行。因此,在某些情况下可能会失败。我们测试了 4 个 GPU 用于 720p 和 2 个 GPU 用于 480p。
3、GPT-4o 快速细化
我们发现 GPT-4o 可以细化提示并提高生成视频的质量。利用此功能,您还可以使用其他语言(例如中文)作为提示。要启用此功能,您需要在环境中准备您的 openai api 密钥:
export OPENAI_API_KEY=YOUR_API_KEY
然后您可以用 --llm-refine True
启用GPT-4o进行提示细化以完成推理。
六、数据处理
高质量的数据对于训练良好的生成模型至关重要。为此,我们建立了完整的数据处理流程,可以将原始视频无缝转换为高质量的视频-文本对。流程如下所示。有关详细信息,请参阅数据处理。另请查看我们使用的数据集。
七、训练
Open-Sora 1.2 训练
训练过程与Open-Sora 1.1相同。
# one node
torchrun --standalone --nproc_per_node 8 scripts/train.py \
configs/opensora-v1-2/train/stage1.py --data-path YOUR_CSV_PATH --ckpt-path YOUR_PRETRAINED_CKPT
# multiple nodes
colossalai run --nproc_per_node 8 --hostfile hostfile scripts/train.py \
configs/opensora-v1-2/train/stage1.py --data-path YOUR_CSV_PATH --ckpt-path YOUR_PRETRAINED_CKPT
八、评估
我们支持基于以下方面的评估:
- 验证损失
- VBenchh分数
- VBench-i2v 分数
- 批量生成以供人工评估 所有评估代码均发布在
eval
文件夹中。查看README了解更多详细信息。我们的 技术报告还提供了有关训练期间评估的更多信息。下表显示 Open-Sora 1.2 大大改进了 Open-Sora 1.0。
模型 | 总得分 | 质量得分 | 语义得分 |
---|---|---|---|
Open-Sora V1.0 | 75.91% | 78.81% | 64.28% |
Open-Sora V1.2 | 79.23% | 80.71% | 73.30% |
九、VAE 训练与评估
我们训练一个由空间 VAE 和时间 VAE 组成的 VAE 管道。有关更多详细信息,请参阅VAE 文档。在运行以下命令之前,请按照我们的安装文档安装 VAE 和评估所需的依赖项。
如果您想训练自己的 VAE,我们需要按照数据处理流程在 csv 中准备数据,然后运行以下命令。请注意,您需要根据自己的 csv 数据大小相应地调整配置文件中的训练epochs
数量。
# stage 1 training, 380k steps, 8 GPUs
torchrun --nnodes=1 --nproc_per_node=8 scripts/train_vae.py configs/vae/train/stage1.py --data-path YOUR_CSV_PATH
# stage 2 training, 260k steps, 8 GPUs
torchrun --nnodes=1 --nproc_per_node=8 scripts/train_vae.py configs/vae/train/stage2.py --data-path YOUR_CSV_PATH
# stage 3 training, 540k steps, 24 GPUs
torchrun --nnodes=3 --nproc_per_node=8 scripts/train_vae.py configs/vae/train/stage3.py --data-path YOUR_CSV_PATH
为了评估 VAE 的性能,您需要首先运行 VAE 推理来生成视频,然后计算生成的视频的分数:
# video generation
torchrun --standalone --nnodes=1 --nproc_per_node=1 scripts/inference_vae.py configs/vae/inference/video.py --ckpt-path YOUR_VAE_CKPT_PATH --data-path YOUR_CSV_PATH --save-dir YOUR_VIDEO_DIR
# the original videos will be saved to `YOUR_VIDEO_DIR_ori`
# the reconstructed videos through the pipeline will be saved to `YOUR_VIDEO_DIR_rec`
# the reconstructed videos through the spatial VAE only will be saved to `YOUR_VIDEO_DIR_spatial`
# score calculation
python eval/vae/eval_common_metric.py --batch_size 2 --real_video_dir YOUR_VIDEO_DIR_ori --generated_video_dir YOUR_VIDEO_DIR_rec --device cuda --sample_fps 24 --crop_size 256 --resolution 256 --num_frames 17 --sample_rate 1 --metric ssim psnr lpips flolpips
2024-07-20(六)