Bernini 使用教程
模型
Bernini 仓库提供 2 个模型族。选择其一,按照其指南下载权重、运行推理命令及可直接执行的脚本:
| Bernini | Bernini-R | |
| 是什么 | 完整管线:基于 MLLM 的语义规划器 + 基于 DIT 的渲染器 | 从 WAN 扩散渲染器微调而来的仅含渲染器模型 |
| 优势 | 在渲染前分解复杂指令,规划语义变化;更强的指令遵循 | 渲染更强、一致性更好,可动部分更少;配置更简单 |
| 检查点 | ByteDance/Bernini-DiffusersByteDance/Bernini-Diffusers-v2 | ByteDance/Bernini-R-DiffusersByteDance/Bernini-R-1.3B-DiffusersByteDance/Bernini-R |
两个模型族共享相同的任务接口:t2i、i2i、t2v、v2v、rv2v 及 r2v。
安装
要求
- Python 3.11.2。
- CUDA GPU——建议使用 Hopper GPU(H100/H800/H200),以便使用 FlashAttention-3;其他 CUDA GPU 将回退到 FlashAttention-2 或 PyTorch SDPA。
- CUDA toolkit 12.6(匹配锁定的
torch==2.7.1+cu126;如果构建 FlashAttention-3,则 12.3+ 是最低要求)。
requirements.txt中锁定:torch==2.7.1+cu126、diffusers==0.35.2、accelerate==0.34.2、transformers==4.57.3。
安装(推理)
git clone https://github.com/bytedance/Bernini.git bernini && cd bernini
pip install -r requirements.txt
# Open-VeOmni is required. Install it with --no-deps so it does not pull in a
# different torch build and override the pinned torch==2.7.1+cu126:
pip install --no-deps git+https://github.com/ByteDance-Seed/VeOmni.git@v0.1.11Open-VeOmni(Apache-2.0,Python 3.11)是必需依赖——所有推理路径都导入它,包括单 GPU。
使用
权重下载和各任务的推理命令因模型而异——请按 docs/bernini.md 或 docs/bernini_r.md 操作。下面这些部分由两条流水线共用。
Case 文件
一次运行由一份 Case 文件描述——assets/testcases/ 下的一小段 JSON,它打包单个任务的路由和输入(task_type、guidance_mode、prompt、源媒体、output)。长提示词不用写在命令行里。
每种任务在 assets/testcases/ 下都有对应的目录,里面放一或多份 Case 文件,以及对应的源媒体和生成结果。Case 文件是打包单个示例的路由和输入的 JSON,因此一次运行只需一行 --case,而不必在命令行里塞很长的提示词:
python infer_single_gpu.py \
--high_noise_ckpt <path> --low_noise_ckpt <path> \
--case assets/testcases/v2v/v2v_case1.json- 布局
assets/testcases/
t2v/ text-to-video
t2i/ text-to-image
v2v/ video editing (v2v_case1.json, v2v_case2.json, ...)
i2i/ image editing
r2v/ reference-to-video
rv2v/ reference + video editing (rv2v_case1.json, rv2v_case2.json, ...)每个目录包含 Case 文件及其引用的源媒体(source*.mp4、ref*.jpg、source.png、...)以及生成的结果。由于相对于当前目录解析 Case 文件中的路径,因此需从仓库根目录运行。
- 格式
Case 文件是单个 JSON 对象。支持如下键(除 prompt 外均可选):
| 键 | 含义 |
task_type | 任务类型——决定使用哪种提示词增强模板。 |
guidance_mode | 采样阶段的引导模式。 |
prompt | 文本提示词 / 编辑指令(必须)。 |
video | 源视频路径或路径列表 |
image | 单张源图像的路径(用于图像编辑)。 |
images | 引用图像路径。 |
output | 输出文件路径。 |
Case 文件完整定义这些字段;生成参数(--seed、--num_frames、--omega_* 等)仍通过命令行传入。--case 不能与 --inputs(批处理模式)同时使用。
- 图像任务
图像任务(t2i、i2i)仅生成单帧,因此运行时必须指定 --num_frames 1:
python infer_single_gpu.py \
--high_noise_ckpt <path> --low_noise_ckpt <path> \
--case assets/testcases/i2i/i2i.json --num_frames 1提示词增强(强烈推荐)
-use_pe 通过兼容 OpenAI 的接口增强提示词,建议启用以获得最佳生成质量。requirements.txt 已安装 OpenAI SDK;通过环境变量配置接口:
export BERNINI_PE_API_KEY=... # or OPENAI_API_KEY
export BERNINI_PE_BASE_URL=... # or OPENAI_BASE_URL
export BERNINI_PE_MODEL=... # vision-capable chat modelBernini-R——仅含渲染器
Bernini-R 是仅含渲染器的 Bernini 模型,由 Wan 扩散渲染器微调而来。它跳过完整 Bernini 流水线中的语义规划阶段,因此更适合作为轻量选择,用于较简单的推理、渲染器评测,以及输出一致性比复杂指令跟随更重要的场景。
| Checkpoint | 基座 | 说明 |
| ByteDance/Bernini-R-Diffusers | Wan2.2-T2V-A14B | 推荐。自包含的 diffusers 格式目录。 |
| ByteDance/Bernini-R | Wan2.2-T2V-A14B | 高噪声 / 低噪声权重分开存放,需额外下载 Wan2.2 基座。 |
| ByteDance/Bernini-R-1.3B-Diffusers | Wan2.1-1.3B | 轻量变体;在简单任务(风格迁移、去字幕/水印、局部编辑)上接近 14B,在人物生成等复杂任务上较弱。 |
下载权重
- Diffuers 格式(推荐)
Diffusers 格式的目录是自包含的:其中已包含 Wan 基座组件以及 Bernini-R 的 transformer / transformer_2 权重。将该目录直接传给 --config 即可,不要再传 --high_noise_ckpt / --low_noise_ckpt。
pip install -U "huggingface_hub"
hf download ByteDance/Bernini-R-Diffusers \
--local-dir pretrained_models/Bernini-R-Diffusers
python infer_single_gpu.py --config pretrained_models/Bernini-R-Diffusers \
--case assets/testcases/t2i/t2i.json --num_frames 1 --guidance_mode t2v_apg1.3B 版本用法相同,仓库名为 ByteDance/Bernini-R-1.3B-Diffusers。
- 分离式 Checkpoint
该布局将 Wan2.2 基座与 Bernini-R 渲染器权重分开存放。仅在确实需要显式指定高噪声 / 低噪声 Checkpoint 路径时使用。
pip install -U "huggingface_hub"
hf download Wan-AI/Wan2.2-T2V-A14B-Diffusers \
--local-dir pretrained_models/Wan2.2-T2V-A14B-Diffusers
hf download ByteDance/Bernini-R \
--local-dir pretrained_models/Bernini-R从 configs/bernini_renderer_wan22 加载渲染器配置,同时传入两条 Checkpoint 路径(将文件名替换为下载目录中实际的 safetensors):
torchrun --nproc-per-node 8 infer_multi_gpu.py \
--config configs/bernini_renderer_wan22 \
--high_noise_ckpt pretrained_models/Bernini-R/<high-noise>.safetensors \
--low_noise_ckpt pretrained_models/Bernini-R/<low-noise>.safetensors \
--case assets/testcases/t2v/t2v.jsonWan2.1-1.3B 基座对应的配置在 configs/bernini_renderer_wan21_1p3b。
运行
单卡图像任务用 infer_single_gpu.py;视频任务用 infer_multi_gpu.py,配合 torchrun 和 --ulysses 序列并行:
# Single-GPU text-to-image
python infer_single_gpu.py --config pretrained_models/Bernini-R-Diffusers \
--case assets/testcases/t2i/t2i.json --num_frames 1 --guidance_mode t2v_apg
# Multi-GPU video editing
torchrun --nproc-per-node 8 infer_multi_gpu.py \
--config pretrained_models/Bernini-R-Diffusers --ulysses 8 \
--case assets/testcases/v2v/v2v_case1.json --guidance_mode v2v_apg- 运行脚本
scripts/bernini_r/ 下每种任务对应一个脚本:
bash scripts/bernini_r/run_t2i.sh # 文生图
bash scripts/bernini_r/run_i2i.sh # 图像编辑
bash scripts/bernini_r/run_t2v.sh # 文生视频
bash scripts/bernini_r/run_v2v.sh # 视频编辑
bash scripts/bernini_r/run_rv2v.sh # 参考图 + 视频编辑
bash scripts/bernini_r/run_r2v.sh # 参考图生视频这些脚本使用 diffusers 布局,读取以下环境变量:
| 变量 | 默认值 | 含义 |
| BERNINI_R_CONFIG | ./pretrained_models/Bernini-R-Diffusers | 模型目录 |
| CASE_PATH | 捆绑的示例 CASE | 要运行的 CASE JSON 文件(用于单 CASE 脚本) |
| NPROC_PER_NODE | 8 | 每节点进程数(用于多 GPU 脚本) |
| ULYSSES | 8 | Ulysses 序列并行度(用于多 GPU 脚本) |
若使用分离式 Checkpoint 布局,将 --config 替换为 --config configs/bernini_renderer_wan22 --high_noise_ckpt <hi> --low_noise_ckpt <lo>。
完整参数列表见 python infer_single_gpu.py --help。