vLLM-Omni Wan2.2 FP8 完整部署指南

44次阅读
没有评论

一、基础说明

1. 硬件要求(FP8 硬件加速)

  • NVIDIA Hopper(H100/H200)、Blackwell(B100):完整 W8A8 FP8,权重 + 激活 + KV Cache FP8 硬件加速,速度提升 40%+,显存减半vLLM
  • Ada Lovelace(RTX4090/4090Ti/A6000):支持 FP8 权重量化,激活 FP16
  • Ampere(3090/3090Ti):仅支持权重 FP8 (W8A16),无硬件 FP8 计算加速
  • 不建议 24G 以下单卡跑 Wan2.2 A14B FP8,5B-TI2V FP8 单 24G 可跑低分辨率

2. Wan2.2 模型版本

  1. Wan-AI/Wan2.2-T2V-A14B-Diffusers 文生视频 MoE 14B
  2. Wan-AI/Wan2.2-I2V-A14B-Diffusers 图生视频 MoE 14B
  3. Wan-AI/Wan2.2-TI2V-5B-Diffusers 图文统一稠密 5B(FP8 门槛最低)

3. FP8 收益

  • 模型显存占用直接减半(BF16 → FP8)
  • Diffusion 3D Transformer 前向 / 反向步提速明显
  • Cache-DiT 缓存同样支持 FP8,进一步降低峰值显存
  • 视频画面质量损失极小,几乎肉眼无差别CSDN博…

二、环境安装(vLLM-Omni 最新版)

bash

运行

# 1. 虚拟环境
uv venv --python 3.12
source .venv/bin/activate

# 2. 安装匹配vLLM + vLLM-Omni(必须0.12.0+完整支持Diffusion FP8)
uv pip install vllm==0.12.0
uv pip install git+https://github.com/vllm-project/vllm-omni.git

三、两种 FP8 使用方案

方案 A:预量化 FP8 权重(推荐,开箱即用)

社区 / ModelScope 已产出 Wan2.2 FP8-E4M3 量化权重,加载时直接指定量化参数,无需本地量化。

离线推理命令示例(T2V 14B FP8)

bash

运行

python examples/offline_inference/text_to_video/text_to_video.py \
--model Wan-AI/Wan2.2-T2V-A14B-FP8 \
--quantization fp8 \
--dtype fp8_e4m3 \
--kv-cache-dtype fp8 \
--calculate-kv-scales True \
--gpu-memory-utilization 0.92 \
--prompt "A cute cat running on green grass, smooth motion, cinematic lighting" \
--height 720 --width 1280 --num-frames 81 \
--num-inference-steps 40 --guidance-scale 4.0 --fps 24 \
--output t2v_fp8.mp4

TI2V-5B 轻量化 FP8(单 24G 480p 可用)

bash

运行

python text_to_video.py \
--model Wan-AI/Wan2.2-TI2V-5B-FP8 \
--quantization fp8 --dtype fp8_e4m3 --kv-cache-dtype fp8 \
--height 480 --width 832 --num-frames 48

方案 B:本地将 BF16 模型量化为 FP8(无预量化权重时)

使用 llmcompressor RTN 无校准 FP8 量化(Diffusion Transformer 通用)vLLM

python

运行

from transformers import AutoModel, AutoTokenizer
from llmcompressor.transformers import oneshot
from llmcompressor.modifiers.quantization import QuantizationModifier

model_id = "Wan-AI/Wan2.2-TI2V-5B-Diffusers"
save_fp8_dir = "./wan2.2-ti2v-5b-fp8"

# FP8动态量化配方 W8A8
recipe = QuantizationModifier(
    targets="Linear",
    scheme="FP8_DYNAMIC",
    ignore=["lm_head", "vae", "text_encoder"] # VAE/CLIP不量化
)

model = AutoModel.from_pretrained(model_id, torch_dtype="bfloat16")
oneshot(model=model, recipe=recipe)
model.save_pretrained(save_fp8_dir)

量化完成后用方案 A 命令加载 ./wan2.2-ti2v-5b-fp8

四、Python API FP8 完整示例

python

运行

import torch
from vllm_omni.entrypoints.omni import Omni

# FP8初始化参数
omni = Omni(
    model="Wan-AI/Wan2.2-TI2V-5B-FP8",
    quantization="fp8",
    dtype="fp8_e4m3",
    kv_cache_dtype="fp8",
    calculate_kv_scales=True,
    gpu_memory_utilization=0.93,
    trust_remote_code=True,
)

# 生成视频
frames = omni.generate(
    prompt="sunset ocean waves, realistic, smooth 24fps",
    height=720,
    width=1280,
    num_frames=65,
    num_inference_steps=35,
    guidance_scale=4.5,
)

# 导出mp4
omni.save_video(frames, "fp8_video_out.mp4", fps=24)

五、关键 FP8 参数详解

表格

参数 作用 推荐配置
--quantization fp8 开启权重 FP8 量化 必加
--dtype fp8_e4m3 计算精度 E4M3(视觉模型首选) fp8_e4m3,不要 e5m2
--kv-cache-dtype fp8 3D Transformer 缓存 FP8,大幅降显存 开启
--calculate-kv-scales True 动态计算 KV 缩放,不用硬编码 scale True
--gpu-memory-utilization 0.9 FP8 显存余量更大,可拉高利用率 0.9~0.94
--trust-remote-code Wan2.2 自定义 3D Transformer 必需 必加

六、多卡张量并行 FP8(A14B MoE 大模型)

14B MoE 单卡显存不足时,TP 切分 FP8 权重:

bash

运行

python text_to_video.py \
--model Wan-AI/Wan2.2-T2V-A14B-FP8 \
--tensor-parallel-size 2 \
--quantization fp8 --dtype fp8_e4m3 --kv-cache-dtype fp8 \
--height 720 --width 1280 --num-frames 65

七、常见踩坑与优化

  1. RTX4090 报 FP8 不支持 W8A8 Ada 架构仅权重 FP8,激活自动回退 FP16,无需修改参数,框架自动兼容。
  2. OOM 显存溢出
    • 降低分辨率 / 帧数(720p→480p,81 帧→48 帧)
    • 开启 --kv-cache-dtype fp8
    • 换 5B-TI2V 模型替代 14B MoE
  3. 画面噪点 / 色彩失真 必须使用 fp8_e4m3,不要 fp8_e5m2;VAE、CLIP 禁止量化。
  4. 速度无提升(3090 及以下 Ampere) Ampere 无 FP8 计算单元,仅省显存,不会加速;升级 4090/H100 才能提速。
  5. 模型找不到 quantization_config 用预量化 FP8 权重,或本地执行 llmcompressor 量化保存后再加载。

八、显存参考(单卡 FP8 / BF16 对比)

以 Wan2.2-TI2V-5B,720p 65 帧为例:

  • BF16:峰值~18GB
  • FP8-E4M3 + FP8 KV Cache:峰值~9.5GB

Wan2.2-A14B MoE 720p 81 帧:

  • BF16:>35GB(单卡无法运行)
  • FP8 双卡 TP:单卡负载~16GB
正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码