768p → 2× 超分方法对比

SwiftVR 5B 生成式 CDA-VSR 3.11M 判别式 各含官方配置 + 自研优化 20 条标准片源 × 4 组 = 80 次运行 RTX 5090 32G

统一任务:输入 768p,输出 2× 放大。20 条片源覆盖 5 种宽高比、每个比例 4 个不同的人、73–362 帧不等。 全部 80 次运行零失败。四组产出同一目标分辨率,可直接并排对比。

SwiftVR 优化版
304.5
20 条总耗时 · 最快
CDA-VSR 优化版
347.8
慢 1.14× · 但吃 ×4 劣势
显存差距
4.6×
22.11 vs 4.85 GiB 峰值
参数量差距
1600×
5B vs 3.11M

四组总览

配置20 条总耗时自身优化幅度显存峰值上限显存中位相对最快
SwiftVR 官方877.1 s基线 29.68 GiB29.002.88× 慢
SwiftVR 优化304.5 s2.88× 22.11 GiB19.72最快
CDA-VSR 官方881.6 s基线 5.16 GiB3.942.90× 慢
CDA-VSR 优化347.8 s2.53× 4.85 GiB3.701.14× 慢
这不是同一量级的对比。SwiftVR 是 5B 参数的生成式一步 DiT,CDA-VSR 是 3.11M 参数的判别式在线 VSR, 小 1600 倍。而且 CDA-VSR 是在架构劣势下比的 —— 它发布的重建头只有 ×4,为了产出 2× 必须先算到 3072p(16:9 时 5376×3072,16.5 Mpx)再降采样,多出来的算力全部计入它的耗时。

逐条耗时

SwiftVR 官方 SwiftVR 优化 CDA-VSR 官方 CDA-VSR 优化

横轴按帧数排序。片子越长四条线越收敛 —— 两边的固定 warmup 开销都被摊薄了。

显存

SwiftVR 官方 SwiftVR 优化 CDA-VSR 官方 CDA-VSR 优化
显存是这次对比里差距最大的一项:SwiftVR 优化版仍需 22.11 GiB,CDA-VSR 只要 4.85 GiB。 SwiftVR 在 32G 卡上只能单路常驻;CDA-VSR 一张卡可以并行跑 6 路。

视频对比

五条片源,每条给出输入(bicubic 2× 放到同一画布,仅作参照)和四组输出。四组产出分辨率完全相同。 网页版统一截取前 5 秒并重新编码,细节有损失;判画质请用机器上的原始输出。

客观代理指标

2× 任务没有 ground truth,所以算不了 PSNR/SSIM。下面两个是代理量, 只能横向比同一条片子的不同配置,不能当作画质分数 —— 锐度既会因真实细节上升、也会因振铃和过锐上升;闪烁里混着真实运动。

SwiftVR 优化 CDA-VSR 优化
锐度差距很大且系统性存在(20 条全部如此)。这符合两者的性质:SwiftVR 是生成式的,会「补」出 训练分布里的细节;CDA-VSR 是判别式的,只从压缩域先验和历史帧里「recover」,风格保守得多。 锐度高不等于更正确 —— 生成的细节可能并不存在于原始内容中。这一点必须靠人眼在上面的视频里判断。

我做了哪些优化

SwiftVR — 2.91×,显存 −7.6 GiB

CDA-VSR — 2.29×

优化后 CDA-VSR 只有 52% 的时间在 GPU 上(230.2s / 443.3s),其余是 IO 和编码 —— 它的瓶颈已经不在模型,而在压缩域先验的数据量(20 条片子的先验共 18 GB)。这是它的架构代价。

画幅:每个宽高比实际在算什么

两个模型产出同一目标分辨率,但内部走的路完全不同。SwiftVR 先把输入双线性放大到目标分辨率、 再做 encode→DiT→decode;CDA-VSR 的重建头只有 ×4,必须先算到 4 倍边长再降回来。

宽高比片数输入 768p目标输出 2× 输出 MpxCDA-VSR 内部 ×4 中间画幅SwiftVR 峰值CDA-VSR 峰值

16:9 与 9:16 那两档,CDA-VSR 内部要算到 5376×3072 = 16.5 Mpx,是最终所需 4.13 Mpx 的 4 倍。 这部分额外算力全部计入了它的耗时。SwiftVR 的显存峰值严格随输出像素线性增长 (12.03 + 2.44×Mpx,20 条实测最大残差 0.006 GiB),其中 12.03 GiB 是 bf16 权重常驻。

瓶颈在 GPU 还是 CPU

这两个模型的瓶颈完全不在同一侧,直接决定了「加一张卡」还是「加 CPU/换 IO」才有用。

SwiftVR:GPU 主导(73–80% 在 GPU 上)

机器 / 片源输出总耗时GPU 计算 视频解码编码写出GPU 占比

解码几乎免费(0.2–0.7 秒,占比 1–2%),编码占 8–12%。加 CPU 对 SwiftVR 没意义 —— 换更快的卡才有效。

CDA-VSR:CPU / IO 主导(官方配置只有 38% 在 GPU 上)

配置机器总耗时GPU 净算GPU 占比其余(IO + 编解码)
CDA-VSR 官方5090881.6 s333.3 s 37.8%548.3 s
CDA-VSR 官方40901096.9 s418.9 s 38.2%678.1 s
CDA-VSR 优化5090347.8 s199.6 s 57.4%148.2 s
CDA-VSR 优化4090489.2 s284.9 s 58.2%204.2 s
CDA-VSR 要读压缩域先验:每帧 2.4–4.1 MB 的运动矢量,20 条片子的先验共 18 GB。 官方配置是逐帧同步 cv2.imread + np.load,再在 5376×3072 上做 CPU 端 resize, 所以近 2/3 的时间不在 GPU 上。我的优化把预取搬到后台线程、把降采样搬到 GPU, GPU 占比从 38% 提到 58% —— 但它依然是这条链路上最该继续优化的地方,而不是模型本身

硬件对比:RTX 5090 vs RTX 4090

同一套代码、同一份权重、同样的 20 条片源,两台机器采用完全相同的执行协议: 单配置顺序执行、4 分片跑在 GPU 0–3、全程无其他负载。

配置5090 (32G)4090 (24G)4090 慢 5090 峰值4090 峰值
SwiftVR 优化304.50 s443.36 s 1.46×22.11 GiB22.11 GiB
CDA-VSR 官方881.57 s1096.94 s 1.24×5.16 GiB4.92 GiB
CDA-VSR 优化347.83 s489.17 s 1.41×4.85 GiB4.85 GiB
CDA-VSR 官方 · 仅 GPU 净算333.28 s418.85 s 1.26×
CDA-VSR 优化 · 仅 GPU 净算199.63 s284.94 s 1.43×
结论:4090 比 5090 慢约 1.4–1.46×(同配置、同显存峰值)。 CDA-VSR 官方那行的 1.24× 偏低,是因为它近 2/3 时间耗在 CPU 上、摊薄了 GPU 差距 —— 只看 GPU 净算就回到 1.26×,优化配置则是 1.43×。
SwiftVR 官方配置在 4090 上不构成有效对比,已从上表移除。 20 条片子全部被迫降 clip_len(1:1 从 24→20,4:3/3:4 从 24→12,16:9/9:16 从 20→8), 因为 4090 的分配峰值最高只到 22.32 GiB,而 5090 用到 29.68 GiB。 两边跑的已经不是同一个配置,速度比值没有意义 —— 它的总耗时看起来是 884.45 vs 877.12 秒(1.01×,形同打平), 但那是小 chunk 换来的假象
4090 跑 SwiftVR 属于「刚好能跑」。优化配置峰值 22.11 GiB 顶着 23.65 GiB 可用, 只剩约 1.5 GiB 给 CUDA context —— 8 条 4.13 Mpx 的片子全过了但零余量, 画幅再大一点、或同卡再起一个进程就会翻车。CDA-VSR 峰值仅 4.85 GiB,一张 4090 可并行 4 路。

已知的两处硬件口径瑕疵

其余全部对齐并逐项核验:仓库 rev 相同、checkpoint 字节数相同、跑分脚本与打过补丁的 runner.py md5 一致、CDA-VSR 的 LR 重编码码流逐字节相同、 两边 DCN 后端一一对应(官方都用 mmcv、优化都用 tv shim,max|diff| = 0.000e+00)。

一次方法论更正

本页 5090 的数字全部重测过。最初那版把 official(GPU 0–3)和 optimised(GPU 4–7) 同时启动了 8 个进程,而 official 是 CPU 重的配置,两者抢 CPU。 4090 那边只有 4 张卡可用、是顺序跑的,协议不一致。

线索是按输入像素归一化后的吞吐形状:4090 在五种分辨率上是平的(7.47–7.71), 5090 却浮动 1.85 倍、且在 768×768 那档绝对值反而低于 4090 —— 而 optimised 下 5090 每档都赢。 这不是硬件差异该有的形状。

配置(均为 5090)并发协议顺序协议差异
SwiftVR 官方892.85 s877.12 s−1.8%
SwiftVR 优化306.46 s304.50 s−0.6%
CDA-VSR 官方1015.73 s881.57 s−13.2%
CDA-VSR 优化443.27 s347.83 s−21.5%
这改变了模型之间的结论。按污染数据,SwiftVR 优化版比 CDA-VSR 优化版快 1.45×; 按干净数据只快 1.14×。原因正是上面那条 —— CDA-VSR 是 CPU 主导的,被并发惩罚得最重(−21.5%), 而 GPU 主导的 SwiftVR 几乎没受影响(−0.6%)。本页展示的是干净数据。

口径与已知问题

测试机 viggle_new_5090(8×RTX 5090 32G,驱动 580.159.03)· SwiftVR:conda swiftvr, torch 2.10.0+cu130,官方 H-oliday/SwiftVR 权重 bf16 未量化 · CDA-VSR:conda cdavsr, torch 2.10.0+cu128,mmcv 2.2.0 源码编译(sm_120),官方 best.pth,权重 0 missing / 0 unexpected · 片源为 MiniMax-H3 历史输出,20 条覆盖 5 种宽高比 · 2026-08-21