vLLM-Omni 完全支持 Wan2.2-TI2V-5B-Diffusers(含 FP8 量化部署)

11次阅读
没有评论

结论前置:vLLM-Omni 原生内置 Wan2.2-TI2V-5B 专属推理管线,原生兼容官方 Diffusers 格式权重 + Kijai 社区 FP8 量化版权重,支持文生视频 (T2V)+ 图生视频 (I2V) 双模式,自带 Cache-DiT 缓存加速、分层卸载、多卡 TP 并行,推理速度远快于原生 Diffusers,FP8 可把显存压到10~14GB,16G 显卡无压力跑 720P 视频DeepWiki。

一、环境硬性依赖

1. 版本要求

  • CUDA ≥ 12.1
  • PyTorch ≥ 2.4
  • vLLM ≥ 0.12.0
  • vllm-omni 拉取最新 main 分支

2. 一键安装环境

bash

运行

# 新建纯净虚拟环境
conda create -n vllm-omni python=3.12 -y
conda activate vllm-omni

# 安装基础vLLM
pip install vllm==0.12.0 torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

# 安装vllm-omni主项目
pip install git+https://github.com/vllm-project/vllm-omni.git

二、两种权重部署方案(原版 FP16 / FP8 量化)

方案 A:直接拉取 HuggingFace 在线权重(最简单)

模型 ID 直接填写:

plaintext

Wan-AI/Wan2.2-TI2V-5B-Diffusers

vLLM-Omni 会自动拉取transformer、text_encoder、vae全套官方权重,无需手动拆分文件。

方案 B:本地 FP8 量化权重部署(推荐,省显存)

1. 下载 FP8 三套文件放到同目录

plaintext

./wan2.2-ti2v-5b-fp8/
├─ transformer/
│  └─ wan2.2_ti2v_5b_fp8_scaled.safetensors
├─ text_encoder/
│  └─ umt5_xxl_fp8_e4m3fn_scaled.safetensors
├─ vae/
│  └─ wan2.2_vae.safetensors
└─ model_index.json  # 从官方仓库复制即可

FP8 权重源:kijai/Wan2.2-TI2V-5B-FP8

2. 启动时指定本地文件夹路径作为model参数即可。

三、离线推理基础调用(Python API)

① 纯文生视频 T2V

python

运行

from vllm_omni import Omni

# 加载模型,本地FP8文件夹填路径,在线直接填HF模型名
omni = Omni(
    model="./wan2.2-ti2v-5b-fp8",
    # 单卡显存不足开启分层卸载
    enable_layerwise_offload=True,
    # 开启Cache-DiT大幅提速
    enable_cache_dit=True,
    # FP8权重自动识别加载,无需额外参数
)

prompt = "雨天城市街道,镜头缓慢推进,电影质感,细腻光影"
negative_prompt = "模糊、扭曲、水印、低画质、画面闪烁"

frames = omni.generate(
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=704,
    width=1280,
    num_frames=120,    # 24fps × 5秒
    num_inference_steps=30,
    guidance_scale=6.0,
    fps=24
)

# 导出MP4
from diffusers.utils import export_to_video
export_to_video(frames, "t2v_fp8_out.mp4", fps=24)

② 图生视频 I2V(TI2V 原生支持)

python

运行

from vllm_omni import Omni
from PIL import Image

omni = Omni(model="./wan2.2-ti2v-5b-fp8")
img = Image.open("input.jpg").convert("RGB")

frames = omni.generate(
    prompt="画面花朵随风缓缓摆动,花瓣飘落",
    image=img,
    height=704,
    width=1280,
    num_frames=120,
    num_inference_steps=30
)
export_to_video(frames, "i2v_fp8_out.mp4", fps=24)

四、命令行一键运行脚本(仓库自带)

进入 vllm-omni 根目录,使用官方示例脚本:

文生视频命令

bash

运行

python examples/offline_inference/text_to_video/text_to_video.py \
--model Wan-AI/Wan2.2-TI2V-5B-Diffusers \
--prompt "A cat walking on grass" \
--height 704 --width 1280 \
--num-frames 120 --num-inference-steps 30 \
--fps 24 --output t2v.mp4

图生视频命令

bash

运行

python examples/offline_inference/image_to_video/image_to_video.py \
--model ./wan2.2-ti2v-5b-fp8 \
--image test.jpg \
--prompt "object slowly rotate" \
--height 704 --width 1280 \
--num-frames 120 --output i2v.mp4

五、FP8 关键显存优化参数(必开)

表格

参数 作用
enable_cache_dit=True Cache-DiT 缓存去冗余计算,速度提升 2~4 倍
enable_layerwise_offload=True 显存不够时分层 CPU 卸载,12G 显卡可运行
dtype="auto" 自动识别文件夹内 FP8 权重并以 FP8 加载
tensor_parallel_size=2 双卡 4090 开启 TP 并行,均分权重与显存

双卡并行示例

python

运行

omni = Omni(
    model="./wan2.2-ti2v-5b-fp8",
    tensor_parallel_size=2,
    enable_cache_dit=True
)

六、HTTP API 服务化部署(对外接口)

vLLM-Omni 支持启动 OpenAI 兼容接口服务:

bash

运行

python -m vllm_omni.entrypoints.api_server \
--model ./wan2.2-ti2v-5b-fp8 \
--port 8000 \
--host 0.0.0.0

之后可通过 POST 请求http://ip:8000/v1/generate传入提示词、图片、分辨率生成视频。

七、常见坑与排查

  1. FP8 加载报错类型不匹配 务必使用Kijai 标准化 scaled FP8 权重,原生 torchao 未缩放 FP8 vLLM-Omni 无法兼容。
  2. VAE 花屏 必须使用官方原版wan2.2_vae.safetensors,不能混用 14B 模型 VAE。
  3. CUDA out of memory 开启enable_layerwise_offload;降低分辨率 / 帧数;启用 TP 多卡拆分。
  4. 版本过旧找不到 Wan2.2 管线 删除旧 vllm-omni,重新pip install git+xxx拉取最新代码。

八、硬件显存参考(704×1280 120 帧)

  • FP16 原版:21~24GB → 仅 24G 显卡可裸跑
  • FP8 量化 + Cache-DiT:11~15GB → 16G 4080S/4070Ti Super 稳定运行
  • FP8 + 分层卸载:9~12GB → 12G 3090/4070 可勉强运行
正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码