图像#

学习如何使用 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

  • sd3.5-medium

  • sd3.5-large

  • sd3.5-large-turbo

  • FLUX.1-schnell

  • FLUX.1-dev

  • Kolors

  • hunyuandit-v1.2

  • hunyuandit-v1.2-distilled

快速入门#

文生图#

可以通过 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",
  }'

图生图#

图生图 API 模拟了 OpenAI 的 图像变体创建 API。我们可以通过 cURL、OpenAI 客户端,或 Xinference 的 Python 客户端来尝试使用图生图 API:

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

大型图像模型(例如 SD3-Medium、FLUX.1)的内存优化#

备注

从 v0.16.1 开始,Xinference 默认对大图像模型如 Flux.1 和 SD3.5 系列开启量化。如果你使用新于 v0.16.1 的 Xinference 版本,你不需要做什么事情来在小 GPU 显存的机器上来运行这些大型图像模型。

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

  • --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文本编码器可以显著降低内存需求,而仅造成性能上的轻微损失。

  • --transformer_nf4 True :使用 nf4 量化 transformer。

  • --quantize :只对 Mac 上的 MLX 引擎生效,Flux.1-dev 和 Flux.1-schnell会在 Mac 上使用 MLX 引擎计算,quantize 可以用来量化模型。

对于 WebUI,只需要添加额外参数,比如,添加 key cpu_offload 以及值 True 来开启 CPU 卸载。

如下列出了从 v0.16.1 开始默认使用的参数。

模型

quantize_text_encoder

quantize

transformer_nf4

FLUX.1-dev

text_encoder_2

True

False

FLUX.1-schnell

text_encoder_2

True

False

sd3-medium

text_encoder_3

N/A

False

sd3.5-medium

text_encoder_3

N/A

False

sd3.5-large

text_encoder_3

N/A

True

sd3.5-large-turbo

text_encoder_3

N/A

True

备注

如果你想关闭某些量化,只需要设置相应的选项为 False。比如,对于 Web UI,设置 key quantize_text_encoder 和值 False,或对于命令行,指定 --quantize_text_encoder False 来关闭 text encoder 的量化。

对于 CogView4,我们发现量化对模型的影响较大。因此,当显存有限时,我们推荐在 Web UI 中启用 CPU offload 选项,在命令行加载模型时指定 --cpu_offload True

GGUF 文件格式#

GGUF 文件格式为 transformer 模块提供了丰富的量化选项。要使用 GGUF 文件,你可以在 Web 界面上指定额外选项 gguf_quantization ,或者在命令行指定 --gguf_quantization ,以为 Xinference 内建支持 GGUF 量化的模型开启。如下是内置支持的模型。

模型

支持 GGUF 量化格式

FLUX.1-dev

F16, Q2_K, Q3_K_S, Q4_0, Q4_1, Q4_K_S, Q5_0, Q5_1, Q5_K_S, Q6_K, Q8_0

FLUX.1-schnell

F16, Q2_K, Q3_K_S, Q4_0, Q4_1, Q4_K_S, Q5_0, Q5_1, Q5_K_S, Q6_K, Q8_0

sd3.5-medium

F16, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0

sd3.5-large

F16, Q4_0, Q4_1, Q5_0, Q5_1, Q8_0

sd3.5-large-turbo

F16, Q4_0, Q4_1, Q5_0, Q5_1, Q8_0

备注

我们强烈推荐在 WebUI 上开启额外选项 cpu_offload 并指定为 True,或对命令行,指定 --cpu_offload True

例如:

xinference launch --model-name FLUX.1-dev --model-type image --gguf_quantization Q2_K --cpu_offload True

使用 Q2_K 量化,你只需要大约 5GB 的显存来运行 Flux.1-dev。

对于非内建支持 GGUF 量化的模型,或者你希望自己下载 GGUF 文件,你可以在 Web UI 指定额外选项 gguf_model_path 或者用命令行指定 --gguf_model_path /path/to/model_quant.gguf

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