图像#
学习如何使用 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",
}'
import openai
client = openai.Client(
api_key="cannot be empty",
base_url="http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1"
)
client.images.generate(
model=<MODEL_UID>,
prompt="an apple"
)
from xinference.client import Client
client = Client("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>")
model = client.get_model("<MODEL_UID>")
input_text = "an apple"
model.text_to_image(input_text)
{
"created": 1697536913,
"data": [
{
"url": "/home/admin/.xinference/image/605d2f545ac74142b8031455af31ee33.jpg",
"b64_json": null
}
]
}
图生图#
图生图 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"
import openai
client = openai.Client(
api_key="cannot be empty",
base_url="http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1"
)
client.images.create_variation(
model=<MODEL_UID>,
image=open("image_edit_original.png", "rb"),
prompt="an apple"
)
from xinference.client import Client
client = Client("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>")
model = client.get_model("<MODEL_UID>")
input_text = "an apple"
with open("xxx.jpg", "rb") as f:
model.image_to_image(f.read(), input_text)
{
"created": 1697536913,
"data": [
{
"url": "/home/admin/.xinference/image/605d2f545ac74142b8031455af31ee33.jpg",
"b64_json": null
}
]
}
大型图像模型(例如 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
from xinference.client import Client
client = Client("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>")
model = client.get_model("<MODEL_UID>")
with open("xxx.jpg", "rb") as f:
model.ocr(f.read())
<OCR result string>