图像#

学习如何使用 Xinference 生成图像。

介绍#

Images API提供了两种与图像交互的方法:

  • 文生图端点根据文本从零开始创建图像。

  • 图生图端点允许您生成给定图像的变体。

API 端点

OpenAI 兼容端点

Text-to-Image API

/v1/images/generations

Image-to-image API

/v1/images/variations

支持的模型列表#

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

  • sd-turbo

  • sdxl-turbo

  • stable-diffusion-v1.5

  • stable-diffusion-xl-base-1.0

  • sd3-medium

  • FLUX.1-schnell

  • FLUX.1-dev

快速入门#

文生图#

可以通过 cURL、OpenAI Client 或 Xinference 的方式尝试使用 Text-to-image API。

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

大型图像模型部署(sd3-medium、FLUX.1 系列)贴士#

有用的传递给加载模型的额外参数包括:

  • --cpu_offload True:指定 True 会在推理过程中将模型的组件卸载到 CPU 上以节省内存,这会导致推理延迟略有增加。模型卸载仅会在需要执行时将模型组件移动到 GPU 上,同时保持其余组件在 CPU 上

  • --quantize_text_encoder <text encoder layer>:我们利用 bitsandbytes 库加载并量化 T5-XXL 文本编码器至8位精度。这使得你能够在仅轻微影响性能的情况下继续使用全部文本编码器。

  • --text_encoder_3 None,对于 sd3-medium,移除在推理过程中内存密集型的47亿参数T5-XXL文本编码器可以显著降低内存需求,而仅造成性能上的轻微损失。

如果你试图在显存小于24GB的GPU上运行像sd3-medium或FLUX.1系列这样的大型图像模型,你在启动或推理过程中可能会遇到显存溢出(OOM)的问题。尝试以下解决方案。

对于 FLUX.1 系列,尝试应用量化。

xinference launch --model-name FLUX.1-dev --model-type image --quantize_text_encoder text_encoder_2

对于 sd3-medium 模型,对 text_encoder_3 应用量化。

xinference launch --model-name sd3-medium --model-type image --quantize_text_encoder text_encoder_3

或者,移除 sd3-medium 模型中内存密集型的 T5-XXL 文本编码器。

xinference launch --model-name sd3-medium --model-type image --text_encoder_3 None

图生图#

你可以在教程笔记本中找到更多 Images API 的示例。

Stable Diffusion ControlNet

学习一个 Stable Diffusion 控制网络的示例

https://github.com/xorbitsai/inference/blob/main/examples/StableDiffusionControlNet.ipynb

OCR#

OCR API 接受图像字节并返回 OCR 文本。

可以通过 cURL 或 Xinference 的 Python 客户端来尝试 OCR API。

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