Viggle Turbo v0.3:在 ComfyUI 中以 6 步和 9 步运行 Qwen-Image 2.1

ComfyUI Wikinews

Viggle 对 Qwen-Image 2.1 的 v0.3 蒸馏新增 9 步模式,并随附官方 ComfyUI 节点、工作流,以及用于 6 步生成与编辑的合并单文件权重。

Viggle Turbo v0.3(Hugging Face)是 Viggle 对 Qwen-Image 2.1 少步数蒸馏的下一版:从 40 步降到 6 步且不启用无分类器引导,现在还带来第二种 9 步模式,把最后两步交还给基础模型。对 ComfyUI 用户而言更大的变化在打包方式:v0.3 自带自定义节点、文生图与编辑工作流,以及合并单文件 transformer,提供 int8、fp8 和 GGUF 格式,而不再把移植工作留给社区。
使用 Viggle Turbo v0.3 从单张照片生成的 360 度等距柱状全景图

由一张透视照片构建的 360 度等距柱状全景图,由 v0.3 以 9 步在 2176x1088 下生成。来源:Viggle 演示 Space 的对比标签页。

v0.3 有哪些变化

蒸馏本身没有变化:在 Qwen-Image 2.1 基础 transformer 上使用 rank 256 的 LoRA,按固定的 sigma 调度采样,true_cfg_scale=1.0 且不使用负面提示词。v0.3 调整的是平衡点,而不是方法。

  • 6 步,重新调校。 与 v0.2.1 相比,结果颗粒感更少,平坦表面更干净,细纹理略微柔和了一些。Viggle 明确说明这不是严格意义上的升级:如果你更喜欢 v0.2.1 更清晰锐利的观感,那个适配器仍保留在仓库中。
  • 全新的 9 步模式。 先执行七个 turbo 步,然后关闭 LoRA,由未经修改的基础模型完成最后两步。细节更精细,小号渲染文字正确的概率更高。耗时约为 6 步的 1.4 到 1.5 倍,仍比 40 步基础模型快约 3.5 倍。
  • 明确的上限。 Viggle 表示 6 步已接近该学生模型所能达到的水平:自 v0.2.1 以来发现的每一项提升都是以牺牲某些东西换来的,更锐利伴随更多颗粒感,颗粒感更少伴随更柔和的观感。超过这一点,质量只能靠增加步数来换取,而这正是 9 步模式所做的。

9 步模式

9 步路径不只是更长的调度。pipeline 会一次性计算文本和引用的 K/V 并复用;7 个 turbo 步会填充该缓存,因此第一个基础模型步必须重新计算它,之后 LoRA 才会被禁用、基础模型接管。在 diffusers 中,这意味着一个 step 回调和一个包裹 transformer 前向传播的 wrapper,两者都在模型卡中展示:

SIGMAS_9 = [1.0, 0.9583, 0.9167, 0.875, 0.75, 0.5, 0.25, 1 / 6, 1 / 12]

6 步调度保留了低噪声节点 0.875, 0.75, 0.5, 0.25,仅在高噪声端增加步数:5 步为 [1, 0.875, 0.75, 0.5, 0.25],7 步为 [1, 0.9583, 0.9167, 0.875, 0.75, 0.5, 0.25]。改为移动低噪声节点会使结果更柔和,而只传入一个普通步数、不提供 sigma 列表则行不通。

9 步目前仅在 diffusers 和演示 Space 中运行。ComfyUI 工作流实现的是 6 步调度。

官方 ComfyUI 支持

这是 v0.2 所不具备的部分。该版本现在在模型仓库的 comfyui/ 文件夹中提供了 ComfyUI 移植,并针对原生支持 Qwen-Image 2.1 的 ComfyUI 0.37.0 进行了测试:

  • viggle_turbo.py 新增两个节点。把它复制到 ComfyUI/custom_nodes/ 并重新启动。
  • Viggle Turbo Sigmas 提供带有 pipeline 分辨率相关 shift 的 6 步调度,需配合 euler 和 BasicGuider 使用,而不是 K 采样器的调度器,同时不使用 CFG 和负面提示词。
  • Viggle Turbo LoRA (unmerged) 在运行时以 diffusers 的方式应用适配器。原生的 LoRA 加载器会把它合并进权重,Viggle 测得这会在 bf16 下丢失该适配器约 30% 的更新量,并在 int8 下引入噪声。未合并节点每步会多花 10% 到 25% 的时间。
  • 适用于文生图和编辑的工作流,以及针对合并单文件权重和 GGUF 的变体。

在 int8 默认设置、启用 r128 LoRA 和提示词增强器的情况下,这些工作流在 1248x832 下的显存峰值约为 26 GB。模型卡还提到,该 ComfyUI 移植主要是借助 AI 编程助手编写的,因此存在粗糙之处在所难免,欢迎提交修复。

合并单文件 transformer

如果你完全不想加载 LoRA,v0.3 也提供了基础 transformer,其中 rank 256 适配器已以 fp32 合并并完成一次量化。这些文件放入 models/diffusion_models/;GGUF 版本需要 ComfyUI-GGUF,而每条路径仍然需要来自自定义节点的 Viggle Turbo Sigmas。这种方式仅支持 6 步模式。

格式大小ComfyUI 加载器LPIPS v0.3LPIPS v0.2.1
GGUF Q8_07.7 GBUNet加载器(GGUF)0.0510.054
int8,Comfy-Org convrot 方案7.3 GBUNet加载器0.0570.060
GGUF Q6_K6.0 GBUNet加载器(GGUF)0.0550.067
fp8 e4m3fn,仅权重7.3 GBUNet加载器0.0680.070
GGUF Q5_K_M5.1 GBUNet加载器(GGUF)0.0760.083
GGUF Q4_K_M4.3 GBUNet加载器(GGUF)0.1000.118
int8 加 r128 LoRA(LoRA 工作流)8.0 GBUNet加载器0.0410.044

LPIPS 是 Viggle 以 diffusers 运行 rank 256 LoRA 为基准测得的平均 VGG 距离,基于 96 个留出请求,提示词、输入、种子和噪声均相同;数值越低表示越接近。作为量级参考,在未加载 LoRA 时,ComfyUI 与 diffusers 之间的差异约为 0.03 到 0.04。

合并权重与 LoRA 路径接近,但并不完全相同。在那 96 个请求中,约 8 个请求上合并的 int8 或 Q8_0 版本会落在不同的构图或服装上,而 LoRA 工作流为 3 到 5 个。Q4_K_M 的偏移明显更大,为 96 个中的 23 到 29 个,Viggle 仅在没有更大的模型能装进内存时才推荐它。

40 步基础模型对比 6 步与 9 步

以下示例来自 Viggle 自家演示 Space 的对比标签页。每一列都使用相同的提示词、输入、种子和噪声。

40 步基础模型Viggle Turbo v0.3 6 步Viggle Turbo v0.3 9 步
基础模型,40 步v0.3,6 步v0.3,9 步

一个角色引用被带入红树林栈道场景,尺寸 1344x1760。6 步结果是两个 turbo 列中最干净的;9 步找回了一部分细纹理。

9 步模式针对的是 6 步学生模型仍落后于基础模型的两个方面:密集的渲染文字和细小细节。一张 1536x2720 的竖直应用截图,包含大量小号界面文字,是一个合理的压力测试,对比标签页中就运行了这样一个测试。

40 步基础模型在同一张密集应用截图上Viggle Turbo v0.3 9 步在同一张截图上
基础模型,40 步v0.3,9 步

该蒸馏在 diffusers 中还支持最多 3 张引用图像,下面的六人合影测试了这条路径:六个身份、一个提示词、一个酒吧内景。

40 步基础模型在六引用合影上Viggle Turbo v0.3 6 步在同一张合影上
基础模型,40 步v0.3,6 步

速度

同样的对比,每张图像的秒数如演示 Space 中所报告:

场景分辨率基础模型,40 步v0.3,6 步v0.3,9 步
基于引用的肖像1344x176014.0 s2.9 s4.0 s
六引用合影1248x188825.8 s5.9 s8.8 s
密集应用截图1536x272026.9 s4.9 s6.8 s
360 度全景2176x108814.3 s2.9 s4.1 s

它仍然做不到的事情

模型卡对剩余差距的描述异常直接。复杂编辑仍然是学生模型落后的地方:多引用构图、换脸和保持身份的指令可能会产生重复或重影的人物以及身份漂移。小号或长篇渲染文字比基础模型更容易出错,9 步有所帮助但并未解决该问题。颜色饱和度会低几个百分点。2K 输出、RGBA 输出、蒙版引导编辑以及引用超过 3 个的编辑仅在对比标签页中通过肉眼检查,未声称任何基准测试结果。

评论

使用 GitHub 登录后即可参与讨论。

评论加载中…
Viggle Turbo v0.3:在 ComfyUI 中以 6 步和 9 步运行 Qwen-Image 2.1 | ComfyUI Wiki