显存不够跑不动、跑起来又太慢、Wan-Dancer 本地部署的取舍

文章导读
只有一张消费级显卡时,先降分辨率还是先降帧数,不该照抄别人的配置,而取决于你自己机器上的两组数:峰值显存和单次生成耗时。显存决定能不能跑,耗时决定值不值得反复跑。稳妥的顺序是:先把显存压到安全线以内,降分辨率通常最直接;确认能跑之后,再比较降帧数和降时长哪个更省时间。下面几步都在本机记录、对比,再写回配置,不依赖任何外部结论。
📋 目录
  1. 壹 用一条命令读出显卡型号、显存总量与驱动版本
  2. 贰 跑一段最短输入,记录峰值显存与单次耗时
  3. 叁 先把输出分辨率降一档,观察显存与耗时的变化
  4. 肆 再降帧数与时长,比较哪一项更划算
  5. 伍 把选定的参数组合写进启动配置
A A

只有一张消费级显卡时,先降分辨率还是先降帧数,不该照抄别人的配置,而取决于你自己机器上的两组数:峰值显存和单次生成耗时。显存决定能不能跑,耗时决定值不值得反复跑。稳妥的顺序是:先把显存压到安全线以内,降分辨率通常最直接;确认能跑之后,再比较降帧数和降时长哪个更省时间。下面几步都在本机记录、对比,再写回配置,不依赖任何外部结论。

单卡跑 Wan-Dancer 这类人像舞蹈生成,先确认显存总量,再跑最短输入,拿到“峰值显存 + 单次耗时”的基线。调参顺序建议先降输出分辨率一档,因为分辨率同时影响显存占用和计算量;确认不再 OOM 后,再单独改帧数或时长,比较耗时代价。每次只改一个变量,两次记录的差值就是这一档的代价。风险边界:显存贴着上限跑,长序列或换分辨率时容易突然 OOM,建议留余量;分辨率降太多,会先在人脸和手指上露出问题。

用一条命令读出显卡型号、显存总量与驱动版本

先确认硬件条件,否则后面拿别人的参数对照会得出错误结论。开一个终端执行:

nvidia-smi
nvidia-smi `--query-gpu`=name,memory.total,memory.used,driver_version `--format`=csv

要记的是四列。Name 决定你属于哪一档,同一型号往往有不同显存版本,别只看名字。Memory Total 是真正的上限,后面所有“还剩多少”的判断都以它为准。Driver Version 和右上角的 CUDA Version 决定你能装哪个版本的 torch,装错会在启动阶段就报错。Memory Used 在空闲时应当接近 0;如果没跑任何任务就已占掉一大块,说明有残留进程,先结束掉再继续。

跑一段最短输入,记录峰值显存与单次耗时

基线要选一个必然跑通的输入:单张人像、最短时长、最低帧数、步数取下限。目的不是出好看的结果,而是拿到一组可复现的数。

显存不够跑不动、跑起来又太慢、Wan-Dancer 本地部署的取舍

峰值显存开第二个终端轮询:

nvidia-smi `--query-gpu`=memory.used `--format`=csv,noheader,nounits -l 1

生成结束那一刻读到的最大值即近似峰值。也可以直接读运行日志,看有没有打印峰值显存或显存分配信息;没有打印就靠轮询。单次耗时用 time 包住启动命令,或用日志里的起止时间戳相减。

记录表建议至少这些字段:显卡型号、显存总量 MiB、分辨率(宽×高)、帧数、时长秒、采样步数、数值精度、峰值显存 MiB、单次耗时 s、是否 OOM、备注。这张表后面每次只追加一行,不覆盖旧行。

先把输出分辨率降一档,观察显存与耗时的变化

分辨率参数的位置各仓库不同,常见是启动脚本里的 `--width`/`--height`、`--size`、`--resolution`,或在 WebUI 表单、ComfyUI 工作流的隐空间尺寸节点上。不确定就先搜:

显存不够跑不动、跑起来又太慢、Wan-Dancer 本地部署的取舍
grep -rn "width\|height\|resolution" ./configs ./scripts 2>/dev/null | head -30

降一档的意思是沿宽高比例整体缩,不是只改一个边。比如 720×1280 压到 640×1120 或 480×832,保持比例可以避免人脸被拉伸变形。对比时锁死其他一切:同一张输入图、同一提示词、同一帧数、同一步数,只改分辨率。两次各记一行,看峰值显存降了多少、单次耗时降了多少。如果显存下降明显而耗时几乎没动,说明瓶颈不在分辨率,继续压分辨率的收益有限。

再降帧数与时长,比较哪一项更划算

帧数参数常见命名是 num_frames、frame_num、video_length,时长则是 duration 或在帧率固定时由帧数间接决定。同样先用 grep 确认实际字段名,不要凭猜测改。

比较时不要看总耗时,看折算后的单帧耗时:总耗时 ÷ 有效帧数。帧数一少总耗时必然下降,但单帧耗时基本不变,说明耗时随帧数近似线性增长;若单帧耗时也明显变化,就要留意是否有固定开销被摊薄。一次只改一个变量:改帧数就锁住分辨率和步数;改时长在帧率固定时等于改帧数,不要两个一起动,否则算不出是哪一项带来的差别。

显存不够跑不动、跑起来又太慢、Wan-Dancer 本地部署的取舍

判断方向大致是:显存仍然吃紧时,继续降分辨率通常比降帧数有效;显存已经够用而只想缩短等待时间时,降帧数或缩短时长更直接,代价是动作更短、更卡顿。

把选定的参数组合写进启动配置

选定组合后写进配置文件或启动脚本,而不是每次手敲。字段名以你本地仓库和实际工作流为准,下面的模板只作骨架,仓库里不存在的字段(例如精度、批大小、卸载策略)直接删掉,不要硬塞,也不要假设它支持。

# 示例配置骨架,字段名请按本地实际替换
model: wan-dancer
ckpt: ./models/wan_dancer.safetensors
width: 640
height: 1120
num_frames: 49
fps: 16
steps: 25
dtype: fp16
batch_size: 1
output_dir: ./outputs

判断跑通的依据有四条:启动无 OOM 报错;输出文件确实生成且能正常播放;生成过程中的峰值显存低于显存总量并留有余量;同一份配置、同一输入重跑一次,耗时接近(不要求和上一次分秒一致)。把这份配置和前面那张记录表放在一起,交接时别人照着就能复现,而不是再问一遍“你当时用的多大分辨率”。