用 500 美元就能跑通的视频生成新范式:Pusa V1.0 通俗全指南
读完本文,你将知道:
Pusa 是什么,为什么它能用 4 000 条样例、500 美元预算,就打败需要 1 000 万条样例、10 万美元的旧方案; 它的「向量时间步」到底动了哪一行代码; 如何 30 分钟内跑通文本-到-视频、图像-到-视频、视频续写、首尾帧插值等 6 个任务; 什么时候该用 LoRA,什么时候该全量微调,以及常见踩坑清单。
一张图先读懂 Pusa V1.0

维度 | Pusa V1.0 | Wan-I2V-14B(基线) |
---|---|---|
训练数据 | 3 860 条 | ≥ 1 000 万条 |
训练预算 | 500 USD | ≥ 100 000 USD |
推理步数 | 10 步 | 50 步 |
VBench-I2V 总分 | 87.32 % | 86.86 % |
额外能力 | 文本-到-视频、首尾帧、视频续写… | 仅图像-到-视频 |
1. Pusa 是什么?为什么值得关注?
一句话:Pusa 把「整段视频必须同步降噪」这一传统假设打碎了,让每一帧拥有独立的时间轴(向量时间步),从而用极低成本学会各种时序任务。
1.1 传统方法为什么贵
-
旧模型用一个标量 t
控制所有帧的噪声水平; -
做「图像-到-视频」时,第一帧是干净的,其余帧是带噪的,强行同步导致模型要重新学习一次“如何保持第一帧不动”; -
于是 Wan-I2V 用 1 000 万条样例、4×880 GB GPU、两个星期的全量微调才勉强学会。
1.2 Pusa 的解法:向量时间步(Vectorized Timestep Adaptation, VTA)
-
把时间步从标量 t
变成向量τ=[τ₁,τ₂,…,τₙ]
,每帧独立; -
想让第一帧保持不动,只要把 τ₁
固定在 0 即可,无需修改网络权重; -
其余帧照常扩散,模型只需学会“何时参考第一帧”,而不是“重新画第一帧”。
1.3 结果
-
只改 2 处代码: -
时间步嵌入层从 Linear(1, D)
换成Linear(N, D)
; -
每个 DiT Block 的 modulate()
函数改成逐帧调制。
-
-
用 LoRA rank-512 在 8×80 GB GPU 上跑 900 步(≈ 2 小时)即可收敛。
2. 如何 30 分钟跑通你的第一条 Pusa 视频
2.1 环境准备
# 1. 克隆仓库
git clone https://github.com/Yaofang-Liu/Pusa-VidGen.git
cd Pusa-VidGen/PusaV1
# 2. 推荐使用 uv 管理依赖
pip install uv
uv venv .venv
source .venv/bin/activate
uv pip install -r requirements.txt
2.2 下载权重
# 方式一:Hugging Face CLI
pip install huggingface_hub
huggingface-cli download RaphaelLiu/PusaV1 --local-dir ./models
# 方式二:手动下载后解压到 ./models
2.3 文本-到-视频(T2V)30 秒出片
python scripts/infer_t2v.py \
--model_dir ./models \
--prompt "A cat wearing sunglasses skateboarding down the beach" \
--num_steps 10 \
--output cat.mp4
2.4 图像-到-视频(I2V)3 行命令
python scripts/infer_i2v.py \
--model_dir ./models \
--image_path ./assets/starry_night.jpg \
--prompt "The stars twinkle and the clouds drift gently" \
--num_steps 10 \
--output starry_motion.mp4
小技巧:把
--noise_multiplier 0.3
加入第一帧,可减少“画面过于静止”的僵硬感。
2.5 首尾帧插值(Start-End Frames)
python scripts/infer_start_end.py \
--model_dir ./models \
--start_frame ./assets/start.jpg \
--end_frame ./assets/end.jpg \
--prompt "Smooth cinematic transition" \
--num_steps 10 \
--output transition.mp4
3. 进阶:训练你自己的 Pusa LoRA
如果你有一批私有数据,可以沿用官方脚本,在单节点 8×A100 上 2 小时完成微调。
3.1 数据格式
dataset/
├─ 00001.mp4
├─ 00001.txt # 对应文本提示
├─ 00002.mp4
└─ 00002.txt
3.2 启动训练
accelerate launch --config_file ds_config_zero2.yaml \
train_lora.py \
--base_model Wan-T2V-14B \
--data_root ./dataset \
--rank 512 \
--alpha 1.7 \
--lr 1e-4 \
--max_steps 900 \
--output_dir ./runs/my_pusa
关键参数 | 推荐值 | 说明 |
---|---|---|
rank | 512 | 过小会欠拟合,过大浪费显存 |
alpha | 1.7 | 推理时缩放系数,经验值 |
max_steps | 900 | 3 860 条数据下已收敛 |
batch_size | 8 | 8×80 GB GPU 刚好 |
3.3 推理时合并权重
python scripts/merge_lora.py \
--base_model ./models/Wan-T2V-14B \
--lora_path ./runs/my_pusa/checkpoint-900 \
--output_path ./models/my_pusa_merged
4. 工作原理拆解:为什么 VTA 如此高效?
4.1 向量时间步 vs 标量时间步
对比点 | 标量时间步 | 向量时间步 |
---|---|---|
控制粒度 | 整段视频同步 | 每帧独立 |
条件生成 | 必须改网络 | 只需改采样策略 |
训练数据 | 高冗余,重复学 | 低冗余,直接学 |
遗忘风险 | 容易忘记 T2V | 几乎无遗忘 |
4.2 训练策略:完全随机时间步
-
每帧 τᵢ
独立采样自U[0,1]
; -
模型必须学会“什么时候参考条件帧、什么时候自由生成”; -
这种随机性迫使网络学到通用时序先验,而非特定布局。
4.3 参数漂移可视化
官方实验显示:
-
Wan-I2V 改动 7 亿参数,Pusa 只改动 1 千万参数(LoRA); -
Pusa 的注意力图与原始 Wan-T2V 更相似,说明只改了“何时看条件帧”而非“如何画内容”。
5. 常见问题 FAQ
Q1:显存不够怎么办?
-
把 --offload
打开,可把 30 GB 需求降到 12 GB; -
或者使用梯度检查点(已内置)。
Q2:LoRA 和全量微调差多少?
方案 | 显存 | 训练时间 | 分数差距 |
---|---|---|---|
LoRA rank-512 | 8×80 GB | 2 h | 87.32 % |
Full FT | 4×880 GB | 3 d | 87.90 % |
0.6 % 的差距换 200× 成本下降,多数人用 LoRA 即可。
Q3:视频最长能到多少?
-
官方脚本默认 81 帧(≈ 3 秒 24 fps); -
把 --num_frames
设成 161 帧即可 6 秒,显存线性增加。
Q4:会不会忘记文本-到-视频能力?
-
不会。LoRA 只更新 <1 % 权重,官方评测 T2V 质量与基线一致。
6. 典型应用场景速配表
场景 | 推荐命令 | 关键参数 |
---|---|---|
产品广告 | infer_i2v.py |
--noise_multiplier 0.2 防抖动 |
故事板预览 | infer_start_end.py |
首尾帧 + 提示词 |
老视频续拍 | infer_extension.py |
--cond_position "[-1]" 只参考最后一帧 |
多视角合成 | infer_multi_frames.py |
3-5 张关键帧 |
动图表情包 | infer_t2v.py |
--num_steps 4 极速出片 |
7. 版本与路线图
版本 | 基座模型 | 能力 | 时间 |
---|---|---|---|
V0.5 | Mochi-1-Preview | T2V, I2V, 续写 | 2025-04 |
V1.0 | Wan-T2V-14B | 同上 + 首尾帧 | 2025-07 |
V1.1 | Wan-T2V-14B 长视频 | 最长 60 s | 计划中 |
V2.0 | 下一代开源模型 | 任意时长、4K | 社区共研 |
8. 一句话结论
把「同步降噪」改成「逐帧降噪」,Pusa 用 500 美元和 3 860 条数据就做到了别人 10 万美元、1 000 万条数据才能勉强达到的效果,而且一次训练、六类任务零样本通用。如果你只想记住一件事:先下模型,跑通一条命令,再决定是否微调——从下载到出片,全程不到 30 分钟。