ArtCraft 本地跑图时,显存不是「够不够」的问题,而是「余量留给谁」的问题。图像任务的显存占用相对可预测,视频任务会把多帧堆在时间维度上,峰值往往出现在出帧或编码阶段,而不是启动瞬间。稳妥的做法是先在本机记下三组数:空闲基线、图像峰值、视频峰值,再拿这三组数决定分辨率、批量、帧数分别卡在哪。
把显存当预算而不是瓶颈:先在空闲桌面状态记一次基线,再用最小设置分别跑一次图像和一次视频,记下两次峰值。图像峰值决定画质能开到多大,视频峰值决定能不能一次跑完。判断标准是峰值加一档安全余量仍低于总量;不满足时先降批量和帧数,再降分辨率。这些数字只代表本机当次运行,换模型、换驱动、换系统版本都要重测。
用系统自带的显存查看方式记录空闲时的基线占用
基线占用的意义是:知道有多少显存是系统、桌面、浏览器、其他常驻程序已经拿走的。这一部分在 ArtCraft 启动前就要记,否则后面测出来的峰值会掺进别的程序的占用。
NVIDIA 显卡在 Linux 或 Windows 上可以直接用命令行定时采样,把输出重定向到文件,方便事后对照:
nvidia-smi `--query-gpu`=name,memory.total,memory.used,memory.free `--format`=csv -l 1
不想写命令的话,Windows 走「任务管理器 → 性能 → GPU」,看「专用 GPU 内存」这一栏;Linux 可以用 nvtop 或 watch -n 1 nvidia-smi;macOS 统一内存机型没有独立显存项,看「活动监视器 → 内存」的内存压力即可,这类机器上「显存上限」实际等于整机内存里能分给 GPU 的那部分。
记录至少三个字段:总量、已用、峰值。总量是上限,已用是当下值,峰值才是有用的那一个——因为显存不足通常发生在峰值那一刻,而不是平均水位。记录时注意两件事:一是关闭浏览器、其他推理程序之后再读一次,二是读两次,一次在刚进桌面时,一次在 ArtCraft 界面打开但未加载模型时。两者的差值就是界面本身的固定开销。
跑一次最基础的图像任务并记录峰值占用
这一步的目的是拿到图像环节的真实下限,而不是拿它当日常出图配置。把 ArtCraft 的参数压到最小,跑单张:
分辨率: 512x512
批量(batch): 1
采样步数: 20
张数: 1
高分辨率修复 / 放大: 关
额外 ControlNet 或参考图: 不上传
字段名在不同版本里可能不同,以你界面上实际的滑块和开关为准。采样命令保持一直开着,出图前后各读一次峰值。
需要记录的除峰值数值外,还有两点行为:出图结束后已用是否回落到接近基线。如果回落明显,说明这部分占用是可回收的,后续可以按峰值规划;如果几乎不回落,说明存在常驻缓存,第二次出图会在更高的起点上叠加。另一点是有没有出现交换:Windows 看任务管理器里「共享 GPU 内存」是否明显上涨,Linux 可以看 dmesg 里有没有 swap 相关记录,或直接观察采样间隔里已用是否被顶到接近总量。一旦发生交换,速度会掉得很明显,此时的峰值数字也不适合当作规划依据,应当先降到不触发交换的配置再测。
跑一次最短的视频任务并记录峰值占用
视频环节不能沿用图像的数字,因为显存占用大致随帧数增长,而且解码、编码、帧拼接通常还要额外占一块。用最短的任务去看差距:
分辨率: 512x512(或更低)
帧数: 8 - 16
帧率: 8
时长: 最短可选值
上采样 / 插帧 / 补帧: 关
参考图或首帧条件: 只留一张
同样的采样命令保持开启,重点看三个时间点:模型加载完、开始出帧、出帧结束进入编码。三个点的最高值才是这一节的峰值。多数情况下视频的峰值出现在出帧中段,因为此时帧缓存和中间张量同时驻留。
如果这一步直接失败,把报错原文完整记下来,不要只记「显存不足」四个字。常见形式包括 CUDA out of memory. Tried to allocate ... MiB、torch.cuda.OutOfMemoryError、RuntimeError: CUDA error: out of memory。报错里的申请数值很有用:它告诉你下一次尝试至少还差多少,比你反复猜参数省事。如果失败发生在编码阶段而不是出帧阶段,说明瓶颈不在采样,降分辨率的收益会比降帧数小,优先动帧数和时长。
按记录决定先动分辨率还是先动批量
做完上面三步,手上应该有两组峰值。取舍顺序不是凭感觉,按下面这张表对号入座即可。「对占用的影响方向」指的是改动方向带来的变化趋势,不是具体数值。
| 改动项 | 对画质的影响方向 | 对显存占用的影响方向 | 建议调整次序 |
|---|---|---|---|
| 批量 / 帧数 | 基本不变,只影响一次出几张、几帧 | 降批量、降帧数 → 占用明显下降 | 第一顺位 |
| 时长 / 总帧数 | 视频变短,内容完整度下降 | 降时长 → 占用按比例下降 | 第二顺位 |
| 分辨率 | 细节、锐度直接下降,肉眼可见 | 降分辨率 → 占用下降较快,但降幅小于降帧数 | 第三顺位 |
| 采样步数 | 影响收敛程度和细节稳定度 | 占用变化通常不明显,主要影响耗时 | 多数情况不动它 |
| 精度 / 半精度开关 | 可能带来色彩或细节差异 | 占用下降,但兼容性需本机确认 | 其他都试过再考虑 |
判断规则可以很直接:图像峰值如果已经接近「总量减去一档安全余量」,那连单张都不该再往上开批量;视频峰值如果明显高于图像峰值,就要为视频单独留出这段差值,不要用图像任务的配置去推视频任务。顺序上先降批量与帧数,是因为这两项对画质影响小、对占用影响大;分辨率和精度放到后面,是因为它们直接改变输出结果,改完可能得重新调提示词。
把稳定运行的设置写成一份余量检查清单
找到一套能稳定跑完的组合之后,把它固定下来,并在换任务前按顺序自查一遍。清单按下面的次序走,每一项都写清楚看哪里、什么时候该降档。
- 确认基线:查看位置是本机显存查看工具(nvidia-smi、任务管理器 GPU 页、活动监视器)。触发降档的条件:基线比上次记录明显变高,说明有其他程序占了显存,先关掉再继续。
- 确认图像峰值:查看位置是出图过程中的采样输出。触发降档的条件:峰值加安全余量超过总量,先降批量回到 1。
- 确认视频峰值:查看位置是模型加载完、出帧中、编码前三个时间点。触发降档的条件:任一点超过「总量减安全余量」,先降帧数或时长,再考虑分辨率。
- 确认回落行为:查看位置是任务结束后的已用读数。触发降档的条件:连续两次任务后已用不回落且逐次抬高,说明有常驻缓存,下次启动前重启 ArtCraft 进程。
- 确认有无交换:查看位置是共享 GPU 内存或系统日志。触发降档的条件:出现交换就当作配置不可用,不要用它跑长任务。
- 记录本次配置:把分辨率、批量或帧数、步数、精度、峰值一起写进一个文本文件或表格,下次直接对照,不再重测。
这份清单的价值在于把「跑到一半报错」变成一个可以提前判断的问题:只要峰值加余量还在总量以内,中途失败的概率就低;一旦某一项逼近上限,就按第一到第三顺位降参数,而不是等报错出现再猜。换模型、换驱动、升级系统之后,基线可能变化,清单需要重跑一遍。