Wan-Dancer 在低显存显卡上的推理优化配置

文章导读
如果你的显卡只有 4GB 或 6GB 显存,Wan-Dancer 默认启动时经常在模型加载阶段就报 CUDA out of memory。这里给出的处理顺序是:先跑一次默认配置并记录显存峰值,再依次开启半精度、内存切片和高效注意力后端,每一步都用 nvidia-smi 确认显存变化,最后用最短片段做完整的验证。整套操作不改变输入和输出约定,但半精度和高效注意力对老显卡有兼容性要求,需要逐项确认。
📋 目录
  1. 记录默认配置下的显存峰值与运行状态
  2. 开启半精度与内存切片选项
  3. 尝试关闭注意力层的冗余计算
  4. 检查当前驱动与计算后端兼容性
  5. 组合优化项后运行一次短片段验证
A A

如果你的显卡只有 4GB 或 6GB 显存,Wan-Dancer 默认启动时经常在模型加载阶段就报 CUDA out of memory。这里给出的处理顺序是:先跑一次默认配置并记录显存峰值,再依次开启半精度、内存切片和高效注意力后端,每一步都用 nvidia-smi 确认显存变化,最后用最短片段做完整的验证。整套操作不改变输入和输出约定,但半精度和高效注意力对老显卡有兼容性要求,需要逐项确认。

适用场景:6GB 以下显存、默认启动报显存不足的显卡。操作动作:先记录默认显存,再依次开启半精度、内存切片,最后尝试切换高效注意力后端,每步用 nvidia-smi 验证。验证方式:显存峰值下降、无 CUDA 报错、短片段输出可正常播放。风险边界:部分开关依赖驱动和计算能力,不兼容时需回退,图片/视频质量可能因半精度出现细微变化。

记录默认配置下的显存峰值与运行状态

不要先动任何参数,用你平时使用的默认启动命令跑一次。目的是建立基准,判断后续优化是否有效。启动前先查空闲显存:

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

启动 Wan-Dancer 后,在另一个终端持续监控显存:

watch -n 1 nvidia-smi

记录模型加载后的显存占用,再记录一段推理过程中的显存峰值。同时记录默认启动参数和是否报错。如果模型连加载都过不去,先确认是显存不足还是其他错误。以下的表格建议直接留空,每做一步优化就填一行:

优化项加载后显存(MB)推理中显存峰值(MB)是否报错
默认配置填写填写填写
开启半精度填写填写填写
半精度+内存切片填写填写填写
再加高效注意力填写填写填写

这里的“填写”是让你记录自己机器上的真实数值,不要照抄任何网上的数字。

开启半精度与内存切片选项

半精度把模型权重从 FP32 转为 FP16,通常能直接降低权重占用的显存;内存切片把一次计算拆成多个小段,降低激活值峰值。两者可以同时开,但建议先单独开半精度并记录显存,再叠加内存切片。

在启动命令中加入以下通用参数(不同实现可能写作 `--fp16`、`--half` 或 `--precision` 16):

python run.py `--fp16`

如果启动日志中出现类似 Half precision enabled 或 FP16 相关提示,说明半精度生效。再叠加内存切片参数:

python run.py `--fp16` `--enable-memory-slicing`

部分实现用 `--slice-vram` 或 `--max-batch` 限制单次计算量。确认内存切片生效的方法是观察日志中是否有 Memory slicing enabled,并对比同一段短素材在开启前后的显存峰值变化。注意半精度可能带来数值噪声,如果输出出现大面积黑块或颜色异常,说明模型对低精度不友好,需要回退到 FP32。

尝试关闭注意力层的冗余计算

注意力层是中间激活最占显存的部分。关闭冗余计算通常指切换到 FlashAttention 或 xFormers 这类高效后端。先尝试设置环境变量:

Wan-Dancer 在低显存显卡上的推理优化配置
export ATTENTION_BACKEND=flash_attn<br>python run.py `--fp16` `--enable-memory-slicing`

很多实现也支持 `--attention-backend` flash_attn 这类参数。启用后会看到日志中出现 Using FlashAttention 或类似后端名。常见报错有两种:一是提示找不到模块,比如 ImportError: No module named 'flash_attn',说明没有安装对应后端;二是提示 CUDA 计算能力不足,比如设备 kernel 镜像不可用,说明当前显卡架构不被支持。遇到这两种情况,先关闭该开关,回退到默认注意力实现。

检查当前驱动与计算后端兼容性

半精度和 FlashAttention 都依赖驱动和 PyTorch 的 CUDA 版本。先查看驱动支持上限:

nvidia-smi

其中 Driver Version 和 CUDA Version 表示当前驱动能支持的最大 CUDA 版本。再用 PyTorch 确认实际可用性:

python -c "import torch; print(torch.cuda.is_available()); print(torch.zeros(1).cuda())"

如果输出 False 或运行报错,说明 PyTorch 没有正确使用 GPU。再看显卡计算能力:

python -c "import torch; print(torch.cuda.get_device_capability(0))"

比如 (7,5) 对应 10 系显卡,(8,0) 对应 30 系显卡。FlashAttention 通常要求较新的架构,老卡需要换成 xFormers 或默认后端。不兼容的典型报错包括 CUDA error: no kernel image is available for execution on the device,以及 RuntimeError: Found no NVIDIA driver on your system。遇到这些错误,先更新驱动、重装与驱动匹配的 PyTorch,再决定是否保留优化项。

组合优化项后运行一次短片段验证

确认每一项都能单独跑通后,组合起来做最后验证。不要一上来跑长片段,先用最短时长(例如 2 秒或最小帧数)试一次:

export ATTENTION_BACKEND=flash_attn<br>python run.py `--fp16` `--enable-memory-slicing` `--attention-backend` flash_attn `--duration` 2

如果显卡不支持 FlashAttention,就把它从命令中去掉。推理完成后,用 ffprobe 检查输出文件的时长和大小:

ffprobe -v error -show_entries format=duration,size -of default=noprint_wrappers=1 output.mp4

确认时长非零且文件大小合理,再用播放器打开看是否花屏、黑帧或声音不同步。如果中途又爆显存,把命令里的参数逐项删掉,找出是哪一项导致显存回升。优化是为了让显存不足的机器能跑完,而不是提高画质,所以只要结果和基准确认一致,就算成功。