影片(實驗性質)#

學習如何使用 Xinference 生成影片

Introduction#

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