前几天实验室的渲染流水线遇到了一个耗时的奇怪症状:GPU1(RTX 5060 Ti 16GB)上的 flux 任务每步耗时超过 2 分钟,而相同任务在 GPU0(同型号显卡)上整批只需约 54 秒。我们重复测试了 3 次 — 不是随机现象

先正确解读特征

我做的第一件事是在任务卡住时采集 6 次 nvidia-smi 样本,结果呈现出一个说明一切的特征:

卡住时的指标 测量值
SM 利用率 96–99%(看起来"工作繁忙")
内存利用率 0–1%(完全没有数据传输)
显卡功耗 38W(采样时异常低)
每步耗时 >120 秒(正常约 4 秒)

SM 满载但内存为零 + 低功耗 = 显卡没有真正计算,它在空转等待。这是运行时的活锁,不是模型负载。对比正常任务的特征:sm 96–99% + mem-util 18–41% + 功耗 115–143W

实际变化的变量只有一个

GPU0 和 GPU1 使用同型号显卡、相同模型(flux1-dev fp8),但运行时不同:

  • GPU0 (:8188) — imgfactory python_embeded, torch 2.13.0+cu130
  • GPU1 (:8190) — venv Python 3.12, torch 2.7.1+cu128

当晚唯一的假设:运行时 2.7.1+cu128 与 5060 Ti 的 Blackwell 架构在重度反量化工作负载下不兼容。验证方法不难 — 将 GPU0 已验证的运行时通过 CUDA_VISIBLE_DEVICES=1 迁移到 GPU1 上运行,不触碰模型或工作负载

切换运行时后的结果

切换到 start_gpu1_v2(imgfactory python_embeded, torch 2.13.0+cu130,output/input/db 目录完全分离以避免与 8188 冲突)后:

检查项 结果
单任务 (job 85917) 54.4 秒 — 恢复正常
连续 8 个任务 50.7–127.4 秒,全部通过
10 个任务总计 10/10 PASS · 中位时间 54.15 秒
与同期 GPU0 对比 parity 100.3% (band ±50%)
GPU0 副作用 零 — 8188 在同一时段继续运行并发布图像

修复后 GPU1 的实际吞吐量 = 30.5 任务/小时(10 个任务 / 1,182 秒)

我们没做的事(也不该做)

  • 没有删除旧 venv — 按"迁移不删除"规则保留在 E:\ComfyUI,只更改 schtask 指向新 launcher
  • 没有触碰旧的 idle_watchdog(它曾帮助重启但导致重复实例)— 已移除,改为按需手动修复
  • 没有改变任何其他东西:工作负载、参数、模型、队列顺序 — 一切字节级相同

实验室的教训

如果 GPU "变慢",别急着怪模型或增加 VRAM — 先读这三个值:SM、内存利用率、瓦特数。如果 sm 满载但内存为零,问题几乎总是在运行时。正确的验证方法是只切换一个变量(运行时),保持其他一切不变,然后测量 10 个任务 — 而不是猜测并从头开始寻找新驱动