报错根因
Wan2.2-TI2V-5B 是图文视频生成大模型,Diffusers 架构 + Omni 多模态推理显存开销远大于纯文本 LLM,两张 16G 4090 分配 tensor-parallel-size=2 仍会出现显存溢出,核心问题:
- TI2V 视频编码、VAE、文本编码器、UNet 多模块同时加载,显存占用叠加
- vLLM 默认预分配大量 KV 缓存、张量缓冲区,多模态模型无自动显存裁剪
- 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
参数说明
--gpu-memory-utilization 0.75:限制单卡显存使用率 75%,预留显存给 VAE / 视频解码--max-num-seqs 2:最大并发生成序列降到 2,禁止多任务抢占显存--quantization fp8:FP8 权重量化,权重显存直接减半(5B 模型效果明显)--limit-mm-per-prompt:限制单次请求图像 / 视频数量,避免批量多图爆显存--no-enable-paged-attention:分页注意力对视频多模态不友好,关闭释放显存--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
三、系统 & 环境显存调优
- 关闭系统占用显存进程
bash
运行
# 查看占用GPU进程
nvidia-smi
# 杀掉多余显存占用程序
kill -9 PID
- 开启显存释放,环境变量前置
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 动态回收闲置显存,避免一次性预占满。
- 使用模型本地 FP8 量化缓存 提前离线量化模型,避免启动时实时量化占用显存:
bash
运行
python -m vllm.model_executor.quantization.fp8_quantize Wan-AI/Wan2.2-TI2V-5B-Diffusers ./wan2.2-fp8
启动时指定本地量化目录:./wan2.2-fp8
四、推理调用侧限制(客户端请求控制)
TI2V 生成视频长度、分辨率是显存大户,请求参数强制约束:
- 分辨率不超过 720p,优先 480p
- 视频帧数不超过 16 帧,禁止 32/64 帧批量生成
- 单次仅传入 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}
五、终极兜底方案(显存依旧溢出)
- 使用梯度检查点,增加参数:
--enable-gradient-checkpointing,牺牲少量速度换大量显存 - 切换更小版本:Wan2.2-TI2V-1.3B 替代 5B
- 显存硬件扩容,4090 16G 对于 5B 视频 Diffusers 多模态推理属于临界显存,并发下极易 OOM
快速排查命令
启动前先看单卡空闲显存:
bash
运行
nvidia-smi --query-gpu=memory.free,memory.total --format=csv
两张 4090 单卡空闲低于 12G,必 OOM,必须启用 FP8 量化 + 降低并发。
正文完
可以使用微信扫码关注公众号(ID:xzluomor)