vLLM Wan2.2-TI2V 双卡 4090 OOM 完整解决方案

19次阅读
没有评论

报错根因

Wan2.2-TI2V-5B 是图文视频生成大模型,Diffusers 架构 + Omni 多模态推理显存开销远大于纯文本 LLM,两张 16G 4090 分配 tensor-parallel-size=2 仍会出现显存溢出,核心问题:

  1. TI2V 视频编码、VAE、文本编码器、UNet 多模块同时加载,显存占用叠加
  2. vLLM 默认预分配大量 KV 缓存、张量缓冲区,多模态模型无自动显存裁剪
  3. TP=2 张量并行仅拆分权重,无法降低视频 VAE / 图像编码器独立显存占用

一、先改启动命令(立刻缓解 OOM,优先执行)

优化后完整启动脚本

bash

运行

vllm serve Wan-AI/Wan2.2-TI2V-5B-Diffusers \
--omni \
--trust-remote-code \
--port 8000 \
--host 0.0.0.0 \
--tensor-parallel-size 2 \
--pipeline-parallel-size 1 \
# 显存限制核心参数
--gpu-memory-utilization 0.75 \
--max-num-batched-tokens 1024 \
--max-num-seqs 2 \
--enforce-eager \
--disable-custom-all-reduce \
# 多模态专用显存优化
--limit-mm-per-prompt image=1,video=1 \
--mm-cache-capacity 1 \
--enable-prefix-caching \
# 加载权重压缩
--load-format gptq \
--quantization fp8 \
# 关闭冗余缓存
--no-enable-paged-attention

参数说明

  1. --gpu-memory-utilization 0.75:限制单卡显存使用率 75%,预留显存给 VAE / 视频解码
  2. --max-num-seqs 2:最大并发生成序列降到 2,禁止多任务抢占显存
  3. --quantization fp8:FP8 权重量化,权重显存直接减半(5B 模型效果明显)
  4. --limit-mm-per-prompt:限制单次请求图像 / 视频数量,避免批量多图爆显存
  5. --no-enable-paged-attention:分页注意力对视频多模态不友好,关闭释放显存
  6. --enforce-eager:禁用 CUDA graph,减少图编译预留显存

二、硬件 / 并行策略调整(如果上面命令仍 OOM)

方案 1:切换 PP 流水线并行(推荐 TI2V 视频模型)

视频模型 VAE、UNet、文本编码器适合流水线拆分,替换并行参数:

bash

运行

# TP1 PP2,两张卡分段加载模型,显存隔离
--tensor-parallel-size 1 \
--pipeline-parallel-size 2

TP=2 是权重均分,两张卡都要完整加载 VAE / 图像编码器;PP=2 会把 UNet 前半 / 后半分到两张卡,单卡显存压力大幅下降。

方案 2:单卡跑,降低并发(临时方案)

bash

运行

--tensor-parallel-size 1 \
--gpu-memory-utilization 0.65 \
--max-num-seqs 1

三、系统 & 环境显存调优

  1. 关闭系统占用显存进程

bash

运行

# 查看占用GPU进程
nvidia-smi
# 杀掉多余显存占用程序
kill -9 PID
  1. 开启显存释放,环境变量前置

bash

运行

export CUDA_VISIBLE_DEVICES=0,1
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512,expandable_segments:True
export VLLM_ATTENTION_BACKEND=FLASHINFER
# 再执行vllm serve ...

expandable_segments:True 让 PyTorch 动态回收闲置显存,避免一次性预占满。

  1. 使用模型本地 FP8 量化缓存 提前离线量化模型,避免启动时实时量化占用显存:

bash

运行

python -m vllm.model_executor.quantization.fp8_quantize Wan-AI/Wan2.2-TI2V-5B-Diffusers ./wan2.2-fp8

启动时指定本地量化目录:./wan2.2-fp8

四、推理调用侧限制(客户端请求控制)

TI2V 生成视频长度、分辨率是显存大户,请求参数强制约束:

  1. 分辨率不超过 720p,优先 480p
  2. 视频帧数不超过 16 帧,禁止 32/64 帧批量生成
  3. 单次仅传入 1 张参考图,不做多图融合 错误示例(极易 OOM):

json

{"image":"xxx","num_frames":32,"height":720,"width":1280,"n":3}

安全请求模板:

json

{"image":"xxx","num_frames":16,"height":480,"width":720,"n":1}

五、终极兜底方案(显存依旧溢出)

  1. 使用梯度检查点,增加参数:--enable-gradient-checkpointing,牺牲少量速度换大量显存
  2. 切换更小版本:Wan2.2-TI2V-1.3B 替代 5B
  3. 显存硬件扩容,4090 16G 对于 5B 视频 Diffusers 多模态推理属于临界显存,并发下极易 OOM

快速排查命令

启动前先看单卡空闲显存:

bash

运行

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

两张 4090 单卡空闲低于 12G,必 OOM,必须启用 FP8 量化 + 降低并发。

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码