一句话定义
出图的时间与显存由「分辨率 × 步数 × 主干前向次数 × 精度」四个变量主导,其中注意力的平方复杂度使分辨率是指数级因子——把参数翻译成算力账,才能在质量与速度间做理性交换。
为什么重要
同一张图,「跑 40 秒」与「跑 8 分钟」的迭代体验决定生产力;OOM(显存溢出)则是新手劝退第一名。本知识点把 kp-022 的管线换成会计视角:哪些钱(算力)必须花、哪些是冤枉钱、花钱买质量的汇率何时最划算。它也是读硬件推荐帖时「为什么有人 8G 能跑、有人 24G 爆显存」的解释框架。
前置知识
kp-022(管线六环节,账目挂在各环节上);kp-009(步数与前向次数的关系)。
核心概念
- 主干前向成本:与潜码面积成正比(卷积)、与序列长度平方成正比(注意力)。
- 总时间账:时间 ≈ steps × 前向次数/步 × 单次前向耗时 + 解码耗时。
- 精度(fp16/bf16 vs fp32):半精度省一半显存、快约一倍,质量损失可忽略(VAE 解码除外,见 kp-022)。
- 分块/平铺(tiled):把大图切成带重叠的小块分别处理,绕开显存墙。
- 两段式放大(hires/ upscale 二段):基准分辨率出图 + 小重绘幅度放大精修(kp-012 的应用)。
原理与机制
账目一:分辨率是指数因子。潜码边长翻倍 → 面积 ×4 → 注意力序列长度 ×4 → 注意力计算 ×16、激活显存 ×4。512²→1024² 对 SD 系意味着潜码 64→128,「勉强能跑」与「随意能跑」的分水岭就在这里。这也是两段式放大存在的理由:与其一步生成 2048²(潜码 256²,注意力开销 ×16 于 128²),不如 1024² 出图后用 img2img(s≈0.3~0.5)放大精修——总耗时常常更低且构图更稳。
账目二:步数是线性因子。时间随 steps 线性增长,而质量增益在 20~30 步后趋平(kp-009);「40 步 vs 60 步」几乎总是纯浪费时间。二阶采样器每步两次前向(Heun 类),总前向次数 = steps × 每步前向数——DPM++ 2M 单次前向是它成为性价比之王的原因之一。
账目三:精度减半。fp16 把权重与激活的显存与带宽减半;主干 fp16 无感,VAE 解码偶发溢出需单独 fp32(kp-022 案例)。批处理(batch)显存近似线性翻倍,迭代调试期用 batch=1 + 多种子循环更省。
账目四:显存去哪儿了。大头是激活值(随分辨率与批大小),其次是权重(SDXL 主干 fp16 约 5GB 级)、缓存与碎片。OOM 的工程解法依次:降分辨率/批 → 开注意力分块(如 xformers/PyTorch SDP 类优化)→ tiled VAE 解码 → 量化/卸载模型。优化顺序有讲究:先动「平方因子」(分辨率)收益最大,再动线性因子。
公式与推导
近似账(忽略常数项):单次前向耗时 ∝ c₁·A + c₂·L²,A 为潜码面积(卷积项),L 为注意力序列长度(L ∝ A,故高分辨率下注意力主导,总趋势 ~A²);总时间 T ≈ steps·k·(c₁A + c₂A²) + 解码。代入对比:1024² 相对 512²,A×4 → 卷积项 ×4、注意力项 ×16。这就是「分辨率翻倍、时间不止翻倍」的定量解释。
图示
| 杠杆 | 时间影响 | 显存影响 | 质量代价 |
|---|---|---|---|
| 降分辨率 | 平方级 ↓ | 平方级 ↓ | 低频结构受限(kp-003) |
| 减步数 40→25 | ~40% ↓ | 缓存 ↓ | 趋平区无感(kp-009) |
| fp16 | ~2× 快 | ~50% ↓ | VAE 需单独处理 |
| 分块/tiled | 略增 | 绕开显存墙 | 重叠区拼接需羽化 |
直观类比
像装修预算:分辨率是「房子面积」(单价固定、面积平方级花钱),步数是「工序遍数」(多一遍多一遍钱,但三遍后看不出差别),精度是「用国标还是普通电线」(便宜一半、住着没区别),分块是「分房间装修」绕开一次性付全款。
实例或案例
- 迭代期配方:SDXL、512×768、25 步、DPM++ 2M、batch=1、fp16——单张数秒级,kp-020 的多轮迭代得以实用;定型后再上基准分辨率精修。
- 8G 显存跑 1024²:tiled VAE + 注意力分块 + fp16,可行但接近墙;同一硬件跑 768² 则余量充足——「降一档分辨率」比「硬开 tiling」更稳。
- 大图性价比对比:直接 2048²(潜码 256²)vs 1024² 两段式放大:后者常快 2~4 倍且构图更稳——「平方因子」直觉的实战应用。
常见误区
- 误区一:卡不行就跑不了。分辨率、步数、精度的优化空间常被低估;多数「跑不动」是 1024² + 40 步 + fp32 的组合问题,不是硬件问题。
- 误区二:步数是保险,多设点没坏处。坏处是纯时间浪费,且部分场景高步数累积过饱和(kp-009 误区一)。
- 误区三:显存只和模型大小有关。激活值随分辨率/批大小增长常超过权重本身;「小模型大图」照样 OOM。
自测题
- 为什么 1024² 比 512² 慢的不止 4 倍?
答案要点:潜码面积 ×4,注意力序列 ×4 而计算量 ×16,注意力项主导时总趋势接近平方于面积。
- 两段式放大为什么常常比直接大图更快更稳?
答案要点:主图在小潜码上生成(平方因子小),放大段是小重绘幅度的 img2img,总前向成本低于大潜码一步到位。
- OOM 时的优化顺序应如何排列?为什么?
答案要点:先降分辨率(平方因子)→ 减步数/批(线性)→ fp16/分块 → 量化卸载;先动收益最大的因子。
与其他知识点的关系
kp-022 把账挂在管线环节上;kp-009 决定「步数的钱怎么花」;kp-012 是两段式放大的机制;kp-021 的缓存机制是工作流层面的省算力手段。
延伸阅读
Karras 等《Elucidating…》(NeurIPS 2022)对「网络前向 vs 采样策略」成本分离的系统分析;SDXL 论文附录的分辨率条件实验。