news 2026/9/17 11:03:30

在 Xinference 中部署与调用 Wan2.2-TI2V-5B:多引擎文生视频 / 图生视频实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 Xinference 中部署与调用 Wan2.2-TI2V-5B:多引擎文生视频 / 图生视频实战指南

在 Xinference 中部署与调用 Wan2.2-TI2V-5B:多引擎文生视频 / 图生视频实战指南

【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference

Wan2.2-TI2V-5B 是阿里通义万相(Wan)系列中一款面向 text2video 与 image2video 双能力的开源视频生成模型,Xinference 将其作为内置(built-in)视频模型纳入统一推理 API,支持diffusersMLX两种引擎。本文将基于内置模型规格文档 wan2.2-ti2v-5b.rst,结合 Xinference 视频模块的源码实现(video/core.py、video/engine.py、video/diffusers.py、video/mlx_video.py)与 REST API 路由(api/routers/videos.py),讲解如何一条命令完成模型启动、如何在 GPU(diffusers 引擎)与 Apple Silicon(MLX 引擎)之间选择,以及如何通过统一视频 API 完成文生视频与图生视频的调用。

模型规格速览

项目内容
Model NameWan2.2-ti2v-5B
Model FamilyWan
Abilitiestext2video、image2video
diffusers 模型 IDWan-AI/Wan2.2-TI2V-5B-Diffusers
MLX 模型 IDSceneWorks/wan2.2-ti2v-5b-mlx
可用引擎diffusersMLX

其中Wan2.2-ti2v-5B这一模型名在 Xinference 的视频模型注册表中同时登记了两条规格(见 video/model_spec.json):

  • diffusers 规格engine: "diffusers"model_format: "diffusers",Hugging Face 源为Wan-AI/Wan2.2-TI2V-5B-Diffusers,ModelScope 源为Wan-AI/Wan2.2-TI2V-5B-Diffusers(revision 为master),默认torch_dtypebfloat16,并且该条规格标记为featured: true
  • MLX 规格engine: "MLX"model_format: "mlx"cache_name: "Wan2.2-ti2v-5B-mlx",Hugging Face 源为SceneWorks/wan2.2-ti2v-5b-mlx,ModelScope 源为Xorbits/wan2.2-ti2v-5b-mlx,并带有独立的缓存文件过滤规则(config.jsonmodel.safetensorst5_encoder.safetensorstokenizer.jsonvae.safetensors)。

这也说明:在 Xinference 中,同一个模型名可以同时绑定多个引擎与多个下载源,引擎的选择由--model-engine参数驱动,下载源的选择由--download-hub参数驱动。

一键启动:CLI 命令与关键参数

原文档给出的标准启动命令如下:

xinference launch --model-name Wan2.2-ti2v-5B --model-type video --model-engine diffusers

命令拆解:

  • --model-name Wan2.2-ti2v-5B:指定内置模型名,Xinference 会从内置注册表(video/model_spec.json)解析出模型规格;
  • --model-type video:声明模型类型为视频模型;
  • --model-engine diffusers:显式选择 diffusers 引擎。

引擎选择与默认行为

从 video/core.py 的resolve_video_model_name_and_engine可以看出引擎解析逻辑:

  • 当未显式传入model_engine时,Xinference 会按注册顺序取该模型第一个可用引擎作为默认值;
  • 在 video/engine.py 的register_builtin_video_engines中,diffusers被注册为第一个引擎,注释明确指出“The first registered engine remains the default for models with several runtimes, preserving the existing diffusers behavior for Wan models”——即对 Wan 系列模型,默认引擎保持为diffusers
  • 若显式传入model_engine,则通过大小写不敏感匹配确认该引擎是否可用,不匹配时会报错Video model {model_name} cannot be run on engine {model_engine}.

因此在实际部署时:

# 显式选择 diffusers 引擎(GPU / CUDA 环境) xinference launch --model-name Wan2.2-ti2v-5B --model-type video --model-engine diffusers # 显式选择 MLX 引擎(Apple Silicon 环境,需 Python >= 3.11) xinference launch --model-name Wan2.2-ti2v-5B --model-type video --model-engine MLX

下载源(download-hub)

Xinference 支持autohuggingfacemodelscopeopenmind_hubcsghub等下载源。在 video/core.py 的match_diffusion中,auto模式会结合环境配置自动选择 ModelScope 或 Hugging Face;若指定了不存在的源组合会抛出明确错误。国内网络环境可优先使用 ModelScope:

xinference launch --model-name Wan2.2-ti2v-5B --model-type video --model-engine diffusers --download-hub modelscope

虚拟环境隔离

从 video/core.py 可以看到,Xinference 默认启用虚拟环境机制(受XINFERENCE_ENABLE_VIRTUAL_ENV环境变量控制),会依据模型规格中的virtualenv字段自动创建独立环境并安装依赖:

  • diffusers 规格依赖diffusers==0.35.1ftfyimageio-ffmpegimageio等(依赖由#engine#标记按引擎分流);
  • MLX 规格依赖mlx-video @ git+https://github.com/Blaizzy/mlx-video.git@87db56a...(固定 commit)与系统 NumPy。

这套机制使不同视频模型可以各自持有互不冲突的依赖版本,避免“依赖地狱”。

双引擎架构解析

diffusers 引擎:面向 NVIDIA GPU

在 video/engine.py 中,DiffusersVideoEngineModel声明了required_libs = ("diffusers",),其match逻辑为:模型规格未指定引擎或引擎为diffusers即视为匹配。

实际加载逻辑位于 video/diffusers.py:对于model_family == "Wan"的模型,若具备text2video能力则加载WanPipeline;若具备image2video能力,则额外加载CLIPVisionModelimage_encoder子目录,torch.float32)与AutoencoderKLWanvae子目录),组装WanImageToVideoPipeline。因此 Wan2.2-TI2V-5B 同时声明 text2video 与 image2video 两项能力,在 diffusers 引擎下会走WanPipeline分支(推理时仍可同时处理文本与图像条件)。

默认生成配置default_generate_config为空,推理默认num_inference_steps = 50、默认fps = 10(见 video/diffusers.py)。

MLX 引擎:面向 Apple Silicon

在 video/engine.py 中,MLXVideoEngineModel有两个硬性前置检查:

  1. 必须是 Apple Silicon 平台(platform.system() == "Darwin"platform.machine() == "arm64");
  2. Python 版本必须 >= 3.11(Blaizzy/mlx-video的要求)。

match还要求模型名必须出现在MLX_VIDEO_MODEL_NAMES白名单中——Wan2.2-ti2v-5B已在该名单内(video/engine.py)。

MLX 引擎的执行细节可参考 video/mlx_video.py:

  • 所有 MLX 推理被固定到单线程ThreadPoolExecutor(max_workers=1)上执行,原因在类注释中说明:MLX 的 GPU stream 是线程局部的(thread-local);
  • 加载阶段对 Wan 系列模型做了官方 checkpoint → mlx-video 原生布局的自动转换(_prepare_wan_model/_convert_wan_model),转换结果缓存在${模型路径}.mlx-video目录下,并通过 manifest(.xinference-mlx-video-conversion.json)记录来源指纹与转换器版本,二次加载时若未变化则直接复用;
  • MLX 规格的默认生成配置为width: 1280height: 704num_frames: 81scheduler: "unipc"(见 video/model_spec.json)。

通过 REST API 调用视频生成

路由注册

Xinference 在 api/routers/videos.py 注册了三个视频生成端点:

端点能力对应 API 方法
POST /v1/video/generationstext2videocreate_videos
POST /v1/video/generations/imageimage2videocreate_videos_from_images
POST /v1/video/generations/flffirstlastframe2videocreate_videos_from_first_last_frame

服务端实现位于 api/restful_api.py,其中create_videos以 JSON body 接收TextToVideoRequestcreate_videos_from_images以 multipart form 上传图片文件。

curl 示例

文生视频(text2video):

curl -X POST http://localhost:9997/v1/video/generations \ -H "Content-Type: application/json" \ -d '{ "model": "wan2.2-ti2v-5B", "prompt": "A cat walking on the beach at sunset, cinematic lighting", "n": 1 }'

图生视频(image2video,上传本地图片文件):

curl -X POST http://localhost:9997/v1/video/generations/image \ -F "model=wan2.2-ti2v-5B" \ -F "prompt=a drone shot flying over a mountain lake" \ -F "image=@./input.png"

其中model字段对应启动时生成的模型 UID(默认与--model-name同名,可通过--model-uid自定义)。

使用 Xinference Python Client

同步客户端RESTfulVideoModelHandle(client/restful/restful_client.py)提供了text_to_videoimage_to_video方法:

from xinference.client import Client client = Client("http://localhost:9997") model = client.get_model("wan2.2-ti2v-5B") # 文生视频 result = model.text_to_video( prompt="A cat walking on the beach at sunset, cinematic lighting", n=1, ) # result 为 VideoList,data 中每项含 url 或 b64_json # 图生视频(image 可为本地路径或 bytes) result = model.image_to_video( image="./input.png", prompt="a drone shot flying over a mountain lake", )

参数说明(与源码 docstring 一致):

  • promptstrList[str],引导视频生成的提示词;
  • imagestr(本地路径)或bytes(图片二进制),用于图生视频;
  • n:每个 prompt 生成的视频数量,范围 1~10;
  • negative_prompt:负面提示词(可选);
  • response_format"url""b64_json",默认b64_json(见 video/diffusers.py 与 video/mlx_video.py)。

其他可用参数

在 diffusers 引擎下,以下参数可透传给底层 pipeline(video/diffusers.py 的load/ 生成方法支持):

  • 加载参数scheduler(如CogVideoXDDIMScheduler)、torch_dtypecpu_offloadsequential_cpu_offloadgroup_offloadcompile_graphtorch.compile)、layerwise_cast(FP8 逐层 cast)、device_map(多卡时自动balanced)等;
  • 生成参数num_inference_steps(默认 50)、fps(默认 10)、guidance_scaleseednegative_prompt等。

注意:MLX 引擎的参数名与 diffusers 存在差异(如stepsguide_scale),Xinference 在 video/mlx_video.py 中做了guidance_scaleguide_scale的自动映射,调用方无需关心。

能力校验与错误处理

Xinference 会根据模型声明的model_ability对请求做前置校验(video/mlx_video.py):

  • 传入图片但模型不具备image2video能力 → 报错;
  • 无图片且模型不具备text2video能力 → 报错;
  • n < 1response_format非法 → 报错。

对应地,内置注册表校验逻辑位于 video/tests/test_video_engine.py(如("Wan2.2-ti2v-5B", "Xorbits/wan2.2-ti2v-5b-mlx")的 MLX 源映射断言),可用于核对注册数据是否完整。

小结与适用场景

在 Xinference 中部署 Wan2.2-TI2V-5B 的完整路径为:

  1. 选择硬件:NVIDIA GPU 环境使用--model-engine diffusers;Apple Silicon(macOS arm64、Python >= 3.11)使用--model-engine MLX
  2. 选择下载源:国内网络可加--download-hub modelscope
  3. 启动模型xinference launch --model-name Wan2.2-ti2v-5B --model-type video --model-engine <引擎>,其余依赖自动装入独立虚拟环境;
  4. 统一调用:通过POST /v1/video/generations(文生视频)与POST /v1/video/generations/image(图生视频),或使用 Python Client 的text_to_video/image_to_video

该模型适合在统一的 Xinference 视频推理 API 下快速接入文生视频与图生视频工作流,双引擎设计则让用户在同一套接口上自由切换 GPU 与 Apple Silicon 平台。

【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 11:02:49

服务器使用手册:从选型部署到运维排障的全流程指南

干服务器运维这些年&#xff0c;被问得最多的一句话就是&#xff1a;“服务器到底怎么用&#xff1f;”问的人从刚毕业的实习生&#xff0c;到创业公司里被赶鸭子上架的开发&#xff0c;再到想给自家小店搭个进销存系统的小老板&#xff0c;什么背景都有。很多人一开始都以为服…

作者头像 李华
网站建设 2026/9/17 11:01:22

GPU与NPU推理加速选型:指令集、数据通路、稀疏化与存算一体

手里同时压着GPU服务器和NPU开发板的人&#xff0c;大概率都经历过同一种分裂感&#xff1a;同一段模型代码&#xff0c;在GPU上跑得稳稳当当&#xff0c;搬到NPU上不是算子不支持&#xff0c;就是精度掉点&#xff0c;再不然就是速度根本没达到标称算力。GPU、NPU、指令集、稀…

作者头像 李华
网站建设 2026/9/17 11:01:13

华为随板AC在线无线用户查询与排障实践指南

1. 先用一个真实的故障场景说清楚&#xff1a;为什么查在线用户是最重要的一步早上刚坐下&#xff0c;工作群就弹了好几条消息——销售部反映无线网“连得上但是我这边卡得很”&#xff0c;会议室投屏断了好几次&#xff0c;还有人说楼下AP明明信号满格&#xff0c;扫码枪却一直…

作者头像 李华
网站建设 2026/9/17 10:58:39

数字电路实战:从真值表到稳定PCB的三大关键跨越

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/17 10:58:11

计算机组成原理指令系统全解析:操作码、寻址方式与扩展操作码

讲真&#xff0c;很多同学学计算机组成原理&#xff0c;学到“指令系统”这一章就开始掉队。前面数字电路、运算器还能靠背&#xff0c;一到指令系统&#xff0c;全是抽象概念&#xff1a;操作码、地址码、寻址方式、扩展操作码……每个字都认识&#xff0c;放在一起就懵。我当…

作者头像 李华
网站建设 2026/9/17 10:55:22

douyin-downloader:抖音无水印批量下载的本地化方案

douyin-downloader&#xff1a;抖音无水印批量下载的本地化方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…

作者头像 李华