想把生图的推理成本压下来,最近在研究把 diffusion transformer 直接跑在 4bit(FP4)上。拆开看是几刀,分别砍在成本的不同轴上:
- 量化到 FP4,但别只做事后量化。 单纯量化速度是快,色彩会明显掉——红色发灰,饱和度整体往下走。原因在于去噪是一步步迭代的:某一步 velocity 偏一点,下一步 latent 就跟着偏,误差滚雪球,等出到像素层色彩信息已经没了,后处理补不回来。
- 训练时就让权重去适应量化噪声。 rounding 那一步没法求导,梯度用直通估计绕过去,权重会自己挪到“被压成 4bit 也不难受”的区域。等于在源头摁住误差,不靠事后修色。
- 把 CFG 的两条分支蒸成一条。 原来每一步要跑有条件和无条件两遍,合成一条之后每步少跑一遍。
- 去噪步数也蒸到个位数。 前向次数跟着降。
最后的结果:1K 分辨率下从 2.75 秒压到 0.44 秒,画面跟全精度基本看不出差别,挺狠的。
几项能叠着用,是因为互不打架:砍位宽、砍分支、砍步数。真要抄我会先做第 2 条,掉色不解决,再快也没法用。