vLLM-Omni 离线图生视频实战:image_to_video.py 驱动 Wan2.2、LTX-2 与 SANA-Video 的 I2V 生成

vLLM-Omni 离线图生视频实战:image_to_video.py 驱动 Wan2.2、LTX-2 与 SANA-Video 的 I2V 生成 vLLM-Omni 离线图生视频实战image_to_video.py 驱动 Wan2.2、LTX-2 与 SANA-Video 的 I2V 生成【免费下载链接】vllm-omniA framework for efficient model inference with omni-modality models项目地址: https://gitcode.com/GitHub_Trending/vl/vllm-omni本文围绕 vLLM-Omni 仓库中的离线推理示例 image_to_video.md 展开介绍如何用统一的命令行脚本image_to_video.py从单张图像生成视频覆盖 Wan2.2-I2V-A14BMoE、Wan2.2-TI2V-5B统一式、LTX-2 与 SANA-Video-2B 四类模型的完整运行命令、关键参数语义、内存优化开关并结合示例脚本源码解析模型默认值、分辨率自动计算与extra-body过滤等底层机制。读完本文你可以在本地复现上述模型的图生视频流程并针对显存不足、多卡并行等实际问题进行针对性调优。I2V 离线推理示例概览vLLM-Omni 的图生视频Image-to-Video, I2V离线示例位于 examples/offline_inference/image_to_video/ 目录核心是一个统一的 CLI 脚本 image_to_video.py。该脚本通过 vLLM-Omni 的离线推理入口Omni定义于 vllm_omni/entrypoints/omni.py加载 Diffusers 格式的 I2V 模型将图像与文本提示组织成多模态请求经扩散去噪后把帧序列导出为 MP4。从脚本文件头部的使用说明image_to_video.py第 4–14 行看该脚本实际支持的范围比文档标题更广包括Wan2.2-I2V-A14B-Diffusers带 CLIP 图像编码器的 MoE 模型含低噪声/高噪声双阶段 DiTWan2.2-TI2V-5B-Diffusers统一 T2VI2V 的 dense 5B 模型LTX2 / LTX-2.3图生视频管线支持音视频联合生成HunyuanVideo-1.5 I2VSigLIP VAE 双路图像条件SANA-Video 2B480p / 720p 首帧潜变量条件Wan2.1 VACE首帧/尾帧、修补inpainting与参考图条件。无论选择哪个模型请求的组织方式一致脚本会把prompt、modalities: [video]、multi_modal_data其中image键承载输入图像以及可选的negative_prompt组装成规范请求信封见build_image_to_video_prompt函数image_to_video.py再交由omni.generate()执行。准备工作下载示例图像文档所有命令行示例都使用同一张示例图cherry_blossom.jpg樱花场景便于观察“花瓣飘落、微风摆动”等运动生成效果wget https://vllm-public-assets.s3.us-west-2.amazonaws.com/vision_model_images/cherry_blossom.jpg四个模型的实际运行命令Wan2.2-I2V-A14B-DiffusersMoE这是文档给出的默认模型。注意它比统一式模型多出两个 MoE 专属参数--guidance-scale-high高噪声阶段的独立 CFG 强度与--boundary-ratio两阶段边界切分比例python image_to_video.py \ --model Wan-AI/Wan2.2-I2V-A14B-Diffusers \ --image cherry_blossom.jpg \ --prompt Cherry blossoms swaying gently in the breeze, petals falling, smooth motion \ --negative-prompt optional quality filter \ --height 480 \ --width 832 \ --num-frames 48 \ --guidance-scale 5.0 \ --guidance-scale-high 6.0 \ --num-inference-steps 40 \ --boundary-ratio 0.875 \ --flow-shift 12.0 \ --fps 16 \ --output i2v_output.mp4从示例 README 的模型对照表examples/offline_inference/image_to_video/README.md看I2V-A14B 基础单卡 BF16 占用约 60 GiB属于较大规模模型TI2V-5B则只需约 20–25 GiB是四者中最轻量的 I2V 选项适合快速验证流程。Wan2.2-TI2V-5B-Diffusers统一式统一式 T2VI2V 模型不需要 MoE 的边界与双 CFG 参数命令更简洁python image_to_video.py \ --model Wan-AI/Wan2.2-TI2V-5B-Diffusers \ --image cherry_blossom.jpg \ --prompt Cherry blossoms swaying gently in the breeze, petals falling, smooth motion \ --negative-prompt optional quality filter \ --height 480 \ --width 832 \ --num-frames 48 \ --guidance-scale 4.0 \ --num-inference-steps 40 \ --flow-shift 12.0 \ --fps 16 \ --output i2v_output.mp4LTX-2LTX-2 支持提示词驱动的同步环境声生成命令只给最少参数即可其余采样参数走模型内建默认值python image_to_video.py \ --model Lightricks/LTX-2 \ --image cherry_blossom.jpg \ --prompt Cherry blossoms swaying gently in the breeze with synchronized ambient sound \ --output ltx2_i2v_output.mp4关于 LTX-2 的全部 checkpoint、管线选择、T2V 用法、默认值与高级选项可进一步查阅仓库内的 LTX-2 recipe。从源码看LTX 系列在脚本中有专门的默认值分支帧率 24、帧数 121、步数 40LTX-2.3 为 30、最大像素面积 512×768、维度需为 32 的倍数image_to_video.py且 LTX 系列不消费--flow-shift选项。SANA-Video-2BSANA-Video 的 checkpoint 元数据model_index.json声明的是上游 T2V 管线因此 I2V 场景必须显式指定管线类名SanaImageToVideoPipelinepython image_to_video.py \ --model Efficient-Large-Model/SANA-Video_2B_480p_diffusers \ --model-class-name SanaImageToVideoPipeline \ --image cherry_blossom.jpg \ --prompt Cherry blossoms sway in the breeze as petals drift past the camera. \ --negative-prompt blurry, low quality, temporal artifacts \ --height 480 \ --width 832 \ --num-frames 81 \ --num-inference-steps 50 \ --guidance-scale 6.0 \ --extra-body {motion_score: 30} \ --fps 16 \ --seed 42 \ --output sana_video_i2v_480p.mp4文档对 SANA-Video 给出三条重要的适用边界务必注意720p checkpoint 用法改用Efficient-Large-Model/SANA-Video_2B_720p_diffusers并设置--height 704 --width 1280VAE 差异原生 I2V 路径同时支持两个变体480p checkpoint 使用 Wan VAE720p checkpoint 使用 LTX-2 Video VAE时长边界81 帧 16 FPS 约等于五秒的标准 checkpoint 请求不是分钟级长视频生成分钟级 SANA 生成需要独立的 LongSANA/LongLive 自回归工作流本管线未实现。SANA-Video 的在线服务方式、后端边界与已验证硬件配置见仓库中的 SANA-Video recipe。关键参数详解以下参数说明完整继承原文档并结合 image_to_video.py 的argparse定义补充了默认值与取值约束--model模型 ID 或本地路径如 Wan I2V/TI2V、LTX-2、SANA-Video。脚本默认值为Wan-AI/Wan2.2-I2V-A14B-Diffusers。--model-class-name显式管线类名覆盖。SANA-Video I2V 必须传SanaImageToVideoPipelineLTX checkpoint 默认解析为LTX2Pipeline。--image输入图像路径图生视频场景必需。脚本还额外提供--last-image尾帧条件、--mask-image修补掩码与可重复的--reference-image参考图主要服务于 VACE 类模型。--prompt描述期望运动/动画的文本提示。--height/--width输出分辨率不设置时根据输入图像自动计算并保持宽高比。Wan 维度应为 16 的倍数LTX 维度应为 32 的倍数。--num-frames生成帧数各模型有自己的默认值LTX 风格模型取8k 1形式效果最佳如 121。--guidance-scale与--guidance-scale-highCFG 强度对 MoE 模型分别作用于低噪声/高噪声两个阶段。--negative-prompt可选用于抑制伪影如blurry, low quality, temporal artifacts。--boundary-ratio两阶段 MoE 模型的边界切分比例脚本默认0.875。--flow-shift调度器 flow shift720p 用 5.0480p 用 12.0Wan 默认 5.0Cosmos3 默认 10.0。--sample-solverWan2.2 采样求解器默认unipc多步求解器Lightning/Distill 蒸馏 checkpoint 应使用euler。取值为unipc/euler二选一。--num-inference-steps去噪步数默认 50各模型默认值不同Wan 50、LTX2 40、Cosmos3 35。--fps输出 MP4 的帧率导出依赖diffusers的export_to_video。--frame-rate生成帧率部分管线如 LTX2需要缺省时回退为--fps。--audio-sample-rate内嵌音频的兜底采样率默认 24000。--output输出 MP4 路径默认i2v_output.mp4。--vae-use-slicing/--vae-use-tilingVAE 切片/分块解码用于显存优化。--cfg-parallel-size设为 2 可启用 CFG 并行仅支持 1/2更多示例见 cfg_parallel 用户指南。--tensor-parallel-sizeDiT 内部张量并行规模对支持 TP 的模型生效如 LTX2。--enable-cpu-offload启用扩散模型权重 CPU offload。--use-hsdp启用 HSDPHybrid Sharded Data Parallel把模型权重分片到多张 GPU。--hsdp-shard-size每个副本组内分片权重使用的 GPU 数默认-1时自动计算为world_size / replicate_size。--hsdp-replicate-sizeHSDP 副本组数每个副本持有一份完整分片拷贝默认 1 即纯分片无复制。此外脚本源码中还提供了文档未逐一列举的实用开关--ulysses-degree/--ring-degree序列并行、--vae-patch-parallel-sizeVAE patch 并行、--enable-layerwise-offloadDiT 逐层 offload、--enable-distributed-layerwise-offload带主机到设备权重流式重叠的分布式逐层 offload、--cache-backendcache_dit或tea_cache缓存加速、--quantizationfp8/mxfp8/mxfp4/mxfp4_dualscale/int8量化以及--lora-path/--lora-backendPEFT 运行时 LoRA 或初始化期蒸馏 LoRA 融合。显存不足提示如果生成过程遇到 OOM优先尝试--vae-use-slicing与--vae-use-tiling降低解码显存更大的模型可叠加--enable-cpu-offload或--enable-layerwise-offload。源码机制默认值、分辨率计算与 extra-body 过滤理解脚本的几处关键实现有助于解释“为什么可以少传参数”以及“为什么某些参数会被静默忽略”。1. 按模型分派的生成默认值。脚本的main()中维护了按模型族分支的默认值元组fps、guidance、帧数、步数、flow_shift、最大像素面积、维度倍数Cosmos3-Nano/Super 为 1280×720 面积、189 帧、35 步、flow_shift 10.0Cosmos3-Edge 为 480×832、flow_shift 3.0注释明确说明套用 Nano/Super 参数会产生退化输出SANA-Video 480p/720p 分别为 480×832 / 704×1280 面积、81 帧、50 步、flow_shift 5.0Wan2.2 / HunyuanVideo-1.5 兜底为 16 fps、guidance 5.0、81 帧、50 步、flow_shift 5.0、480×832 面积image_to_video.py。这些默认值仅在对应 CLI 参数省略时生效因此命令行显式传参始终优先。此外vllm_omni/model_extras目录如 sana_video.py、ltx2.py中声明的模型自有默认值VideoGenerationDefaults见 video_generation.py优先级更高。2. 分辨率自动计算。未显式指定--height/--width时calculate_dimensions函数以输入图像宽高比为约束、以目标像素面积如 480×832为约束解出并向下取整到模型要求倍数Wan 16 / LTX 32 / SANA-720p 32的分辨率image_to_video.py。同时脚本会把输入图像 LANCZOS 重采样到目标分辨率后再送入管线个别模型如 LingBot 保持原始几何交由管线内部做 resize 与中心裁剪。3. 管线类名解析。未显式传--model-class-name时脚本调用resolve_model_class_namevllm_omni/diffusion/data.py从 checkpoint 的model_index.json读取管线类名。这正是 SANA-Video I2V 必须显式覆盖的原因——其元数据声明的是 T2V 管线。4. extra-body 白名单过滤。--extra-body接收 JSON 对象如 SANA-Video 的{motion_score: 30}、Cosmos3 的{flow_shift: 10.0, max_sequence_length: 4096, guardrails: false}。脚本通过apply_declared_extra_args把其中的键与vllm_omni/model_extras中该模型声明的extra_body_params做过滤未被模型声明的键会被静默丢弃——这避免了把不适用的参数错误地下发到管线对未声明任何 extra 参数的模型则原样透传显式传入的 JSON。5. 输出与音频混流。omni.generate()返回的OmniRequestOutput中若携带audio通道如 LTX-2 的音视频联合生成脚本会调用 vllm_omni/diffusion/utils/media_utils.py 的mux_video_audio_bytes把音频流混入 MP4帧数组先裁剪 RGBA 到 RGB、量化为 uint8纯视频路径则直接用diffusers.utils.export_to_video导出。帧张量在导出前会做-1..1到0..1的归一化。多卡并行与显存优化策略文档与脚本把显存与吞吐优化收敛为一组开关可组合使用VAE 解码侧--vae-use-slicing/--vae-use-tiling是 OOM 场景的第一选择--vae-patch-parallel-size进一步把 VAE 解码分片到多卡权重侧--enable-cpu-offload做整模型 offload--enable-layerwise-offload做 DiT 模块逐层 offload--enable-distributed-layerwise-offload在多卡间流式搬运权重并可与 AllGather 分片重组配合--dlo-use-allgather默认开启计算侧--cfg-parallel-size 2把 CFG 的正/负条件分支拆到两张卡--tensor-parallel-size在支持 TP 的模型如 LTX2内切分 DiT--ulysses-degree/--ring-degree提供序列并行维度--use-hsdp--hsdp-shard-size/--hsdp-replicate-size控制权重分片/复制拓扑。各并行策略的系统性说明见 parallelism 用户指南。一个典型的高显存需求场景是 HunyuanVideo-1.5示例 README 指出其默认设置约需 100 GiB因此在 80 GiB 卡上的推荐命令会叠加--enable-cpu-offload --vae-use-tiling --vae-use-slicingexamples/offline_inference/image_to_video/README.md。Python API 快速示例除了 CLI同一套离线 API 也适合直接嵌入 Python 程序。以下是最小可用的 TI2V-5B 图生视频代码取自示例目录 READMEimport PIL.Image import torch from vllm_omni.entrypoints.omni import Omni from vllm_omni.inputs.data import OmniDiffusionSamplingParams if __name__ __main__: image PIL.Image.open(cherry_blossom.jpg).convert(RGB) image image.resize((576, 320)) omni Omni( modelWan-AI/Wan2.2-TI2V-5B-Diffusers, flow_shift12.0, ) outputs omni.generate( { prompt: Cherry blossoms swaying gently in the breeze, petals falling, multi_modal_data: {image: image}, }, OmniDiffusionSamplingParams( height320, width576, num_frames17, num_inference_steps20, guidance_scale4.0, generatortorch.Generator(devicecuda).manual_seed(42), ), ) from diffusers.utils import export_to_video frames outputs[0].images export_to_video(frames, quick_test_i2v.mp4, fps16)OmniDiffusionSamplingParams与 CLI 参数一一对应height/width/num_frames/num_inference_steps/guidance_scale/fps/frame_rate等见 vllm_omni/inputs/data.pygenerator传入手动设种子的torch.Generator可保证采样可复现。延伸阅读LoRA 与蒸馏加速Wan2.2 LightX2V 转换后的本地 Diffusers 目录及相关 LoRA 资产的离线组装流程见 LoRA 指南 中的 “Wan2.2 LightX2V Offline Assembly” 小节。脚本侧对应--lora-pathWan2.2 MoE 需先传高噪声 checkpoint、再传低噪声 checkpoint、--lora-scale与--lora-backendpeft请求期激活 /distill初始化期融合。模型级 recipeLTX-2 recipe、SANA-Video recipe 提供了 checkpoint 矩阵、在线服务与硬件验证信息。模型元数据声明各视频模型的默认值、extra_body_params与条件结构声明集中在 vllm_omni/model_extras/是理解“某个参数为什么对该模型生效”的权威出处。完整脚本示例目录中的 image_to_video.py 与 README.md 保留了本文未展开的 MAGI-2、Cosmos3、VACEI2V / V2LF / FLF2V / Inpainting / R2V等更多命令形态。【免费下载链接】vllm-omniA framework for efficient model inference with omni-modality models项目地址: https://gitcode.com/GitHub_Trending/vl/vllm-omni创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考