圖像#
學習如何使用 Xinference 生成圖像。
Hello! How can I assist you today?#
Images API 提供了兩種與影像互動的方法:
文生圖端點根據文字從零開始建立圖像。
圖生圖端點允許您生成給定圖像的變體。
API 端點 |
OpenAI 兼容端點 |
|---|---|
Text-to-Image API |
/v1/images/generations |
Image-to-image API |
/v1/images/variations |
支援的模型列表#
在 Xinference 中,Text-to-image API 支援以下模型:
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
cogview4
Qwen-Image
支援的模型列表
Flux.1-Kontext-dev
Qwen-Image-Edit
快速入門#
文生圖#
可以透過 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 |
Qwen-Image |
text_encoder |
N/A |
False |
Qwen-Image-Edit |
text_encoder |
N/A |
False |
備註
如果你想關閉某些量化,只需設定相應的選項為 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 |
|
Qwen-Image |
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 |
|
Qwen-Image-Edit |
Q2_K, 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 |
|
Qwen-Image-Edit-2509 |
Q2_K, 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 |
|
備註
我們強烈建議在 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。
Lightning LORA 支持#
Lightning LORA 以 LoRA 的形式對模型進行蒸餾,在保持模型效能的同時減少推理步數,並大幅提升推理速度。以下模型目前支援此 LoRA:
模型 |
支援的 Lightning 版本 |
|
|---|---|---|
Qwen-Image |
4steps-V1.0-bf16, 4steps-V1.0, 8steps-V1.0, 8steps-V1.1-bf16, 8steps-V1.1 |
|
Qwen-Image-Edit |
4steps-V1.0-bf16, 4steps-V1.0, 8steps-V1.0-bf16, 8steps-V1.0 |
|
Qwen-Image-Edit-2509 |
4steps-V1.0-bf16, 4steps-V1.0-fp32, 8steps-V1.0-bf16, 8steps-V1.0-fp32 |
|
4 步或 8 步是指推理步數( num_inference_steps )。當指定了 lightning_version 時,Xinference 會自動設定推理步數。
使用時,可以在界面上選擇 lightning 版本,或者透過命令列指定。

在命令列中使用 --lightning_version <version>。
對於自行下載了 lightning LoRA 檔案的使用者,可以在介面上透過 Lightning Model Path 指定,或者使用命令列參數 --lightning_model_path 。
例如,使用 4steps-V1.0 時,推理時間從原來的 34 秒減少到 3 秒。
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 'kwargs={"model_size":"large"}' \
-F image=@xxx.jpg
from xinference.client import Client
client = Client("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>")
model = client.get_model("<MODEL_UID>", model_size="large")
with open("xxx.jpg", "rb") as f:
model.ocr(f.read())
<OCR result string>