今天计划之外地更新一下,因为有些收获急着想和读者分享。
在之前的文章中介绍过,我现在的主力显卡是一张 22GB 显存的魔改 2080 Ti。显存虽然非常大,但有个问题让我非常难受:同样跑 MiniMax H3 模型,我生成一个时长 10 秒钟的 720p 的视频,可能需要超过一个小时,而那些显存明显更小的显卡,比如 4070、5060 之类的,生成差不多规格的视频,用时竟然远远少得多。
我非常不甘心,于是把这个问题扔给 GPT-5.6-Sol High:现在很多新卡可以用 SageAttention、各种 Cache、Sparse Attention 等优化,但这些东西通常主要针对 Ampere、Ada、Blackwell,我 Turing 架构的 2080Ti 能不能魔改吃上优化?
答案是:可以的。让我慢慢道来。
我们第一步先做了 profiling,而没有急着去改 CUDA kernel。结果发现,H3 在我的 int8/Turing 环境下,91%~96% 的单步时间都耗在 attention 上。更关键的是,Q/K/V 居然以 FP32 进入 xFormers attention。
2080 Ti 没有 TF32,FP32 attention 基本吃不到 Turing Tensor Core 的优势。
于是我们就试着在 Q/K/V 进入 attention 前转 FP16,attention 输出再转回 FP32,其余 QKV projection、RoPE、FFN 全部保持 FP32。
结果出乎意料的好:720p/10s attention 的耗时从 866.8s 降到了 209.6s,单步 forward 耗时从 902.5s 降到了 245.1s,速度提升了约 3.68 倍,而且 full-S=65,395 的真实 H3 数据验证中,数值误差很小,完整视频 A/B 也没有发现明显质量下降。
接下来是 SageAttention。
Sage V1 的 INT8-QK + FP16-PV 路线其实很适合 Turing(我也是听人工智能说的),但最新版 Triton 在 SM75 上无法正常编译。我们最后采用了一个比较特殊的办法:
在旧 Triton 3.1 环境里把 Sage V1 的 SM75 kernel 编译成 cubin,再把这个 cubin 直接桥接进现在的 torch 2.12 / ComfyUI 环境。
这样完全不用降级生产环境。
真实 H3 shape 下,原来的 FP16 xFormers 是 4.05s/call,而 Sage SM75 cubin 是 1.70s/call。
集成进 H3 后,attention 耗时从 209.6s 进一步降到了 88.5s,单步 forward 耗时从 245.1s 进一步降到了 123.7s。也就是说,从最初的 15 分钟一步,最终压到了大约2 分钟一步。
之后我们又测试了 Cache。
4 到 8 步这种大步长采样,相邻状态变化太大,FirstBlockCache 基本没有命中;但在 Ref2VA 20 步模式下,Fast 配置可以命中 7/20 步,而且盲评里音频和整体质量反而优于 TE-Speed。
啰里巴嗦说了这么多 最终我的生产配置是:Ref2VA 20 步 + Sage + FirstBlockCache,速度比原来的配置快了好几倍。
我们也试过 3+1 progressive latent upscale,速度确实能做到更快,毕竟步数少嘛,但视频出现明显重影,所以最后直接放弃,没有为了 benchmark 数字硬留。
做完这个还是挺感慨的,之前在《我是怎么在手机上部署Hermes和本地模型的》最后写过:
总的来说,这个方案简直为我打开了一个新世界,原来做或改一个安卓 app 这么简单,结合这次的折腾经历,感觉将来也可以做很多事情,不光是手机上,也可以是树莓派这样的开发板,或者其他硬件设备。
当时是改了一个 App,现在在人工智能的帮助下做了更高难度的改动,这在以前简直难以想象,很多以往觉得不可能的事情,现在一下子都变成了可能,感觉是在新世界里又打开了了一个新世界,除了感叹活着真好之外,一下子也不知道应该说什么。
老规矩,如果有说的不对的或者大惊小怪的地方,也欢迎在评论区批评指正。