官方权重 H-oliday/SwiftVR bf16 未量化 viggle_new_5090 · 8×RTX 5090 32G 2026-08-20
一步式生成式视频修复模型(Wan2.2-TI2V-5B 骨干)。本页全部数字来自 60+ 次实跑,
覆盖 5 种宽高比、10 种分辨率、6 档 clip_len。速度与显存估算器基于实测点拟合,
拟合公式和原始测量点都在下面列出,可自行核对。
选输入分辨率和时长,给出常驻 worker 稳态下单请求耗时与显存峰值。 模型拟合自实测点(见下方「拟合依据」),对 0.9–4.2 Mpx 输出范围内的插值误差 < 1%。
clip_len=4,常驻,稳态取第 2–4 次请求均值)| 宽高比 | 输入 | 输出 2× | Mpx | 帧 | 单线程 秒 | 多线程 秒 | 单线程 GiB | 多线程 GiB |
|---|
耗时 = 1.246 + 0.7314×Mpx + 帧数 × Mpx ÷ 54.9 秒(单线程,最大残差 0.3%);
多线程 = 0.473 + 1.2551×Mpx + 帧数 × Mpx ÷ 48.9 秒(最大残差 10.8%,
线程调度抖动大,只作参考)。
显存 = 12.034 + 2.4418×Mpx GiB(单线程)/ 12.022 + 3.4083×Mpx GiB(多线程),
两条的最大残差都 < 0.01 GiB —— 显存是严格线性的,截距 12.03 GiB 就是 bf16 权重常驻部分,与分辨率无关。
以上为最小二乘拟合,4 个实测点 3 个参数。实测覆盖 2.36–4.13 Mpx,超出即为外推。
两条线是同一批视频、同一份权重,只有驱动循环不同:官方 restore_video 的四线程流水线
vs 单线程顺序驱动(官方 Space 的 app.py 用的就是后者)。单线程又快又省。
官方 Space 滑块写的是「Larger = more context, slower」,容易让人以为大 chunk 质量更好。
实测四种宽高比全部是 clip_len 越小越快、越省显存,而且质量指标不降反升。
16:9 和 9:16 在 clip_len=24 直接 OOM。
纵轴是稳态 GPU 吞吐(剔除每条视频前两个 chunk 的固定开销)。测于官方多线程驱动、未开 compile。
| clip_len | 时间闪烁 ↓ | 锐度(拉普拉斯方差)↑ | 与 clip20 的平均差 /255 |
|---|---|---|---|
| 20(参考) | 5.309 | 119.9 | — |
| 16 | 5.321 | 121.8 | 1.42 |
| 12 | 5.304 | 120.2 | 1.60 |
| 8 | 5.234 | 121.4 | 1.89 |
| 4 | 4.947 | 126.4 | 2.43 |
clip_len=4 闪烁最低、锐度最高。与 clip20 的差异约 1%(2.43/255),肉眼对比无可辨差别。
1344×768 → 2688×1536,同一帧同一区域。左半 bicubic 放大,右半 SwiftVR。拖动分隔条。

眼睫毛、发丝、毛衣针织纹理、衬衫格纹差异最明显。未见振铃或结构幻觉。
同一条输入、同一份官方权重,只有运行配置不同。三路播放同步,可切换宽高比。 左边是输入 bicubic 放大到相同画布(不是模型输出,只作参照)。 素材为 FL2VA 生产产物。网页上这几条统一截取前 5 秒并重新编码(控制传输体积,细节略有损失)—— 实际跑的是完整时长,1:1 / 4:3 / 9:16 均为 10 秒 241 帧,16:9 另有 15 秒版本, 完整长度的三联对比包见页尾。
2× 之外 4× 也能跑。输出 3.69 Mpx,显存峰值 29.6 GiB,稳态 13.3 fps。 更极端的 854×480 → 3392×1920(6.51 Mpx)也跑通了,需把 clip_len 降到 8。
提速倍数不是一个常数。每条视频有一笔固定的 warmup 开销(前两个 chunk), 官方默认配置的这笔开销更大;视频越长它被摊得越薄,官方一方吃的亏也就越小。 同一条 16:9 素材,5 秒和 15 秒的差别:
| 时长 | 帧数 | 官方默认 | 优化后 | 提速 | 官方 每帧 ms | 优化 每帧 ms |
|---|---|---|---|---|---|---|
| 5 秒 | 121 | 44.96 s | 13.37 s | 3.36× | 371.6 | 110.5 |
| 15 秒 | 357 | 77.00 s | 31.67 s | 2.43× | 215.7 | 88.7 |
两边的每帧成本都随时长下降,但官方那一列降得更多(371.6 → 215.7 ms,−42%), 优化后本来就没多少固定开销可摊(110.5 → 88.7 ms,−20%),所以倍数收窄。 15 秒这一档只跑了 2 次请求(5 秒那档是 4 次),置信度低一些; 同档的多线程 clip4+compile 是 29.98 s,与单线程的 31.67 s 落在噪声范围内没分出胜负 —— 单线程稳定领先的结论来自 5 秒那组 4 次请求的数据。
上面的估算公式是用 121 / 241 帧的实测点拟合的。15 秒这条 357 帧完全在拟合集之外, 正好拿来验证外推:
一个常驻实例连续吞 8 条视频、5 种宽高比、分辨率 640×360 → 768×1344,零配置改动全部成功。 内部自动 pad 到 32 的倍数再裁回。开 compile 时新形状不会每次重编译:第 3 个新形状起就和不编译一样快。
| 送入顺序 | 输入 | 输出 2× | compile 开(秒) | compile 关(秒) |
|---|---|---|---|---|
| 1 | 640×360 16:9 | 1280×720 | 41.35 ← 首次编译 | 7.57 |
| 2 | 854×480 16:9 | 1696×960 | 15.88 | 8.72 |
| 3 | 960×544 16:9 | 1920×1088 | 10.25 | 10.03 |
| 4 | 768×768 1:1 | 1536×1536 | 14.24 | 14.71 |
| 5 | 768×1344 9:16 | 1536×2688 | 24.68 | 26.00 |
| 6 | 992×416 21:9 | 1984×832 | 8.43 | 9.66 |
| 7 | 640×360 重复 | 1280×720 | 6.86 | 7.42 |
| 8 | 768×768 重复 | 1536×1536 | 13.58 | 15.16 |
第 4 行起 compile 列全部 ≤ 不编译列 —— 混合分辨率的生产队列大约两条视频后进入稳态。
没有到极限。下面按「已验证 / 待验证」分开列,每条都标了实测量级。
| 配置 | 耗时 | 本级收益 | 显存峰值 | 代价 |
|---|---|---|---|---|
官方默认:restore_video 多线程 · clip_len=20 · 无 compile |
44.96 s | 基线 | 29.68 GiB | 默认的 clip_len=24 在这一档 OOM |
| + clip_len 20 → 4 | 16.27 s | 2.76× | 26.10 GiB | 无代价,质量指标反而更好 |
| + 换单线程驱动 | 14.49 s | −11% | 22.12 GiB | 自己写约 40 行驱动循环;官方 Space 就是这么做的 |
| + torch.compile | 13.37 s | −7.7% | 22.12 GiB | 首个进程 +34~90 秒编译,常驻只付一次 |
| 合计 | 13.37 s | 3.36× | −7.56 GiB | 质量指标未下降 |
每一级都是独立实测的常驻稳态数(第 2–4 次请求均值),不是估算叠乘。 贡献最大的是 clip_len —— 一个滑块,2.76×。
这三条已经全部叠加在推荐配置里。与「官方默认 restore_video 多线程 + clip_len=24
+ 无 compile」对比(两边都是常驻稳态口径,取第 2–4 次请求均值):
| 宽高比 | 帧 | 官方默认 秒 | 优化后 秒 | 提速 | 官方 GiB | 优化 GiB | 省显存 |
|---|
16:9 与 9:16 的「官方默认」实际跑的是 clip_len=20 —— 默认的 24 在这两档直接 OOM, 所以那两行的对比其实已经对官方一方有利。
_BACKEND_PRIORITY = (flash_attn_3, flash_attn_2, sageattention, sdpa, xformers)),
但环境里一个都没装,所以 auto 一路回落到 sdpa。本页所有数字都是 sdpa 的。
这是最大的一块未知收益,参照同机 H3 上 sage 2.2 拿到的 −10% 量级。
(正在为 py3.10 + torch 2.10 cu130 编译,尚未跑通。)
不建议的方向:clip_len 已经是最小合法值(必须是 4 的倍数); 多卡切分单条视频会撞上因果流式的跨 chunk 状态,接缝风险高。
swiftvr/runner.py 的 record_error() 用阻塞式 q.put()
往 maxsize=3 的有界队列发停止信号,OOM 时队列必满 → put 永不返回 → 主线程卡死在 join()。
表现是 GPU 0% 占着显存挂住,而不是崩溃退出。已改为先 drain 再 put_nowait 并立即打印
traceback。外层还必须有超时看门狗。
(改用单线程驱动可以整个绕开这条路径。)
sm_120,5090 跑不起来。
torch 版本号仍用官方要求的 2.10.0。
完整时长的三联对比包(输入 / 官方默认 / 优化配置,等分三联,顶部条幅标注各自配置与耗时):
viggle_new_5090:~/swiftvr_deploy/swiftvr_compare.tar(201 MB,含 5 个宽高比 / 时长组合与 README)。
未经二次编码的模型原始输出在 ~/swiftvr_deploy/out/ —— 判画质请用后者,
三联包为并排观看重编码过。
测试机 viggle_new_5090(8×RTX 5090 32G,驱动 580.159.03)· 环境 conda swiftvr:
Python 3.10 + torch 2.10.0+cu130 + diffusers 0.36.0 · 权重 H-oliday/SwiftVR(fp32 19 GB,bf16 加载 12.03 GiB)·
测试素材为 FL2VA 生产产物 · 2026-08-20