视频(实验性质)#

学习如何使用 Xinference 生成视频

介绍#

Video API 提供了和视频交互的方式:

  • Text-to-video 端点将一段文本提示词从头开始创建视频

  • Image-to-video 端点将一张图片从头开始创建视频

  • firstlastframe-to-video 接口根据首帧和尾帧之间的过渡生成视频。

API

Endpoint

Text-to-Video API

/v1/video/generations

Image-to-Video API

/v1/video/generations/image

FirstLastFrame-to-Video API

/v1/video/generations/flf

支持的模型列表#

Text-to-video API 在 Xinference 中支持以下模型:

Image-to-video API 在 Xinference 中支持以下模型:

Xinference 中支持以下模型使用 firstlastframe-to-video 接口:

快速入门#

文生视频#

可以通过 cURL 或 Xinference 的方式尝试使用 text-to-video API

curl -X 'POST' \
  'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/video/generations' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "<MODEL_UID>",
    "prompt": "<your prompt>"
  }'

图生视频#

可以通过 cURL 或 Xinference 的方式尝试使用 image-to-video API

curl -X 'POST' \
  'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/video/generations/image' \
  -F model=<MODEL_UID> \
  -F image=@xxx.jpg \
  -F prompt=<prompt>

首尾帧生视频#

你可以通过 cURL 或 Xinference 的 Python 客户端来体验 firstlastframe-to-video 接口:

curl -X 'POST' \
  'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/video/generations/flf' \
  -F model=<MODEL_UID> \
  -F first_frame=@xxx.jpg \
  -F last_frame=@xxx2.jpg \
  -F prompt=<prompt>

内存优化#

视频生成会占用大量显存,举例来说,运行 CogVideoX 可能会使用到约 35 GB 的显存。

Xinference 支持若干选项,来优化视频模型显存(VRAM)使用。

  • CPU 卸载或块级分组卸载。

  • 逐层类型转换(Layerwise casting)。

备注

CPU 卸载和块级分组卸载不能同时开启,但逐层类型转换可以与其中之一配合使用。

CPU 卸载#

CPU 卸载会将模型权重保留在 CPU 上,仅在执行前向传播时才加载到 GPU。适用于显存极其有限的场景,但对性能影响较大。

当使用显存小于 24 GB 的 GPU 时,建议在启动模型时添加 --cpu_offload True。对于 Web UI,可添加额外选项 cpu_offload,值设为 True

xinference launch --model-name Wan2.1-i2v-14B-480p --model-type video --cpu_offload True

块级分组卸载#

块级分组卸载将模型的多个内部层(如 torch.nn.ModuleListtorch.nn.Sequential)分组,并根据需要在推理过程中将这些分组从 CPU 加载到 GPU。与 CPU 卸载相比,它使用更多的内存,但对性能的影响更小。

对于命令行,添加 --group_offload True 选项;对于 Web UI,添加一个额外选项 group_offload,值设为 True

通过启用 CUDA 流,我们可以加速分组卸载推理。然而,使用 CUDA 流需要将模型参数移动到固定内存中。这项分配由 Pytorch 在后台处理,并可能导致 CPU RAM 使用量显著增加。如果您的 CPU RAM 至少是模型大小的两倍,请考虑使用此选项。通过在命令行中添加 --use_stream True 启用 CUDA 流;对于 Web UI,添加一个额外选项 use_stream,值设为 True

xinference launch --model-name Wan2.1-i2v-14B-480p --model-type video --group_offload True --use_stream True

将逐层类型转换应用于 Transformer#

逐层类型转换将把每个层的权重降级为 torch.float8_e4m3fn,在层的前向传播过程中暂时升级为 torch.bfloat16,然后在之后恢复为 torch.float8_e4m3fn。这种方法将内存需求减少约 50%,同时由于精度折衷,生成的视频质量会略有下降。通过在命令行中添加 --layerwise_cast True 来启用逐层类型转换;对于 Web UI,添加一个额外选项 layerwise_cast,值设为 True

此示例将需要 20GB 的显存。

xinference launch --model-name Wan2.1-i2v-14B-480p --model-type video --layerwise_cast True --cpu_offload True