ComfyUI 出图性能测试:如何测出真值而不是缓存
把 ComfyUI 当性能测试工具时,同 seed 同参数第二次提交根本不进 GPU,直接返回缓存。本方案给出可复现的测量方法。
ComfyUI性能测试SDXLPython这条适用于
- 用 ComfyUI 做性能测试或批量跑图
- 需要测的是「显卡真值」而不是「缓存命中」
版本指纹
ComfyUI(Prompt executed 计时口径);判据与版本无关
具体做法
def bench(prompt, seed, steps=20, cfg=7.0):
# 关键:seed 必须递增,否则 ComfyUI 节点级缓存直接命中
payload = build_workflow(prompt, seed=seed, steps=steps, cfg=cfg)
t0 = time.time()
pid = post_prompt(payload)
poll_history(pid)
return time.time() - t0
# 预热 1 次 + 正式 3 次取中位数
bench(prompt, seed=0)
times = [bench(prompt, seed=1 + i * 7919) for i in range(3)]
stable = sorted(times)[1]
# 显存峰值:独立线程采样,不要用主线程阻塞式查询
def vram_sampler(stop, out):
while not stop.is_set():
out.append(int(subprocess.check_output(
["nvidia-smi", "--query-gpu=memory.used",
"--format=csv,noheader,nounits"]).decode().strip()))
time.sleep(0.12)
失效边界
第一版没递增 seed,三轮回来的全是 0.52-0.54 秒,看着像神迹。查 ComfyUI 日志发现每轮都是 “Prompt executed in 0.00 seconds” —— 缓存直接命中。改递增 seed 后真值变成 4.98 秒,差了近 10 倍。如果你用 API 做性能测试或批量跑图,不换 seed 你测的是缓存,不是显卡。
第一版没递增 seed,三轮回来的全是 0.52-0.54 秒,看着像神迹。查 ComfyUI 日志发现每轮都是 “Prompt executed in 0.00 seconds” —— 缓存直接命中。改递增 seed 后真值变成 4.98 秒,差了近 10 倍。如果你用 API 做性能测试或批量跑图,不换 seed 你测的是缓存,不是显卡。