博文标签:vLLM、vLLM-Omni、文生图、图生图、OpenAI兼容API、AI图像推理、大模型部署
更新时间:2026.06|适配版本:vLLM-Omni 0.18.0+
一、接口核心定位:为什么要用 /v1/images/generations?
1.1 接口基础定义
/v1/images/generations 是 vLLM-Omni 模块专属、完全兼容OpenAI DALL·E 标准的图像生成REST接口,区别于通用对话接口 /v1/chat/completions,是vLLM官方专为文生图、图生图、LoRA定制绘图打造的轻量化专用接口。
核心能力汇总:
- ✅ 完全对齐OpenAI Images API请求/响应格式,原有DALL·E业务代码几乎零改造迁移
- ✅ 支持三大绘图场景:纯文本绘图、参考图改写、LoRA微调模型专属绘图
- ✅ 复用vLLM核心加速引擎:PagedAttention、张量并行、VAE分片加速,推理速度原生优于原生diffusers部署
- ✅ 独立绘图参数体系:分辨率、降噪步数、CFG值、正负提示词、随机种子全覆盖
- ✅ 支持批量出图、固定种子复现绘图结果、显存优化开关,适配生产环境
1.2 接口区别:images/generations VS chat/completions
很多新手会混淆vLLM两大绘图接口,这里做核心对比,业务选型一目了然:
| 接口路由 | 适用场景 | 参数位置 | 响应格式 | 推荐场景 |
|---|---|---|---|---|
/v1/images/generations |
专属图像生成 | 参数一级平铺,无需extra_body嵌套 | 标准b64_json/url格式,极简解析 | 绘图业务、批量出图、对接现有AI绘图SDK |
/v1/chat/completions |
图文对话+附带绘图 | 绘图参数必须放入extra_body | 嵌套message结构体,解析繁琐 | 多模态问答、图文混合交互业务 |
开发结论:纯AI绘图业务,优先使用
/v1/images/generations,代码更简洁、解析成本更低、参数更直观。
二、前置环境:启用接口必备条件
该接口不属于原生vLLM,必须安装启用 vLLM-Omni 多模态全能模块,仅文本大模型vLLM服务无法调用此接口。
2.1 依赖安装
# 安装带绘图能力的完整版vLLM-Omni
pip install "vllm[omni]" --upgrade
# 如需Gradio可视化调试,安装拓展依赖
pip install "vllm-omni[demo]"
2.2 支持绘图模型清单(官方适配)
目前稳定适配该接口的开源绘图大模型:
- 阿里通义绘:Qwen/Qwen-Image(主推,接口适配最优)
- 混元绘图:HunyuanImage-3.0(支持专属系统提示词)
- 开源扩散模型:BAGEL-7B-MoT
2.3 启动带绘图接口的vLLM服务
基础启动命令(单卡,最低配置)
# 启用omni模态、开放images绘图接口、指定端口
vllm serve Qwen/Qwen-Image \
--omni \
--port 8091 \
--host 0.0.0.0
生产优化启动命令(解决OOM+加速推理)
# 开启VAE分片+分块、张量并行、显存优化,适配16G显存显卡
vllm serve Qwen/Qwen-Image \
--omni \
--port 8091 \
--tensor-parallel-size 2 \
--vae-use-slicing \
--vae-use-tiling \
--vae-patch-parallel-size 2
启动校验:服务启动成功后,访问 http://localhost:8091/docs,可在线调试 /v1/images/generations 接口。
三、标准请求&响应结构(核心必读)
3.1 最简通用请求体(文生图)
适配所有绘图模型,最小必填参数仅prompt,完全贴合OpenAI DALL·E请求格式:
{
"prompt": "赛博朋克风格小猫,霓虹夜景,8k高清",
"n": 1,
"size": "1024x1024",
"response_format": "b64_json",
"seed": 42
}
3.2 全量可控请求体(生产完整版)
{
"prompt": "森系治愈林间小鹿,水彩质感,自然光",
"negative_prompt": "畸形肢体,模糊,低画质,水印",
"n": 2,
"size": "1024x1024",
"num_inference_steps": 50,
"true_cfg_scale": 4.0,
"seed": 1024,
"response_format": "b64_json",
"lora": {
"name": "watercolor-style",
"local_path": "/opt/lora/watercolor-lora",
"scale": 0.8
}
}
3.3 标准响应体解析
{
"created": 1792268910,
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUhEUgA...(图片base64编码)",
"revised_prompt": "优化后绘图提示词(模型自动优化)"
}
]
}
核心字段说明:
- created:时间戳,对齐OpenAI返回规范
- b64_json:base64图片编码,业务直接解码存图
- revised_prompt:大模型自动优化后的提示词,可用于迭代优化绘图效果
四、全场景调用实操代码(可直接复制运行)
整理三类开发最常用调用方式:curl调试、OpenAI SDK调用、原生requests调用,全覆盖业务开发场景。
4.1 Curl快速调试(服务自测首选)
# 一键调用绘图,输出图片到本地
curl -X POST http://localhost:8091/v1/images/generations \
-H "Content-Type: application/json" \
-d '{
"prompt": "雪山星空极简风景画",
"size": "1024x1024",
"seed": 42,
"num_inference_steps": 50
}' | jq -r '.data[0].b64_json' | base64 -d > snow.png
4.2 OpenAI Python SDK调用(业务最优)
复用OpenAI原生SDK,无需适配新客户端,迁移成本为0:
import base64
from openai import OpenAI
# 对接本地vLLM-Omni绘图服务
client = OpenAI(
base_url="http://localhost:8091/v1",
api_key="none" # vLLM本地服务无需密钥,填空即可
)
def vllm_t2i():
response = client.images.generate(
model="Qwen/Qwen-Image",
prompt("日系海边动漫少女,晴天,胶片质感"),
n=1,
size="1024x1024",
seed=666,
negative_prompt="失真,人脸畸形,杂物背景"
)
# 解码base64保存图片
img_b64 = response.data[0].b64_json
with open("anime_girl.png", "wb") as f:
f.write(base64.b64decode(img_b64))
if __name__ == "__main__":
vllm_t2i()
4.3 带LoRA专属调用(定制风格绘图)
接口原生支持PEFT格式LoRA,无需修改服务配置,请求体动态挂载即可:
curl -X POST http://localhost:8091/v1/images/generations \
-H "Content-Type: application/json" \
-d '{
"prompt": "奶油风甜品蛋糕",
"size": "1024x1024",
"lora": {
"name": "cream-food",
"local_path": "/data/lora/food-cream-lora",
"scale": 0.9
}
}'
4.4 图生图调用(Image-to-Image)
传入原图base64,实现图片风格改写、画质修复,接口原生支持image入参:
{
"prompt": "把照片改成水墨国风",
"image": "原图base64编码",
"size": "1024x1024",
"strength": 0.7
}
五、接口全参数详解(生产调优必备)
区分通用标准参数(兼容OpenAI)+vLLM独有拓展参数,新手可直接抄默认值。
5.1 标准兼容参数
| 参数名 | 类型 | 默认值 | 作用说明 |
|---|---|---|---|
| prompt | string | 必填 | 正向绘图提示词,核心绘图指令 |
| negative_prompt | string | 空 | 反向提示词,过滤畸形、低质画面 |
| n | int | 1 | 单次生成图片数量,最大支持4张 |
| size | string | 1024×1024 | 分辨率,支持512/1024/1536主流尺寸 |
| response_format | string | b64_json | 返回格式:b64_json/base64/url |
| seed | int | 随机 | 固定种子,复现一模一样绘图结果 |
5.2 vLLM独有拓展参数(性能/画质调优)
- num_inference_steps:扩散降噪步数,默认50,数值越高画质越好、速度越慢,商用推荐40-60
- true_cfg_scale:提示词遵循度,默认4.0,数值越大越贴合prompt,取值2-8
- strength:图生图改写强度,0-1之间,越大改动原图幅度越高
- lora:LoRA挂载结构体,支持路径、权重、名称配置
六、常见报错&生产避坑指南
6.1 接口404 Not Found
原因:启动服务未加 --omni 参数,原生vLLM未加载绘图模块
解决方案:重启服务,必须携带 –omni 全局模态参数
6.2 绘图OOM显存溢出
解决方案:启动命令增加显存优化参数
--vae-use-slicing --vae-use-tiling
6.3 LoRA加载失败
避坑要点:
- 仅支持PEFT格式LoRA,不支持原生diffusers格式
- local_path 必须是服务端本地绝对路径,客户端路径无效
- lora.scale 建议0.6-1.2,过高会画面崩坏
6.4 提示词不生效
排查:调低true_cfg_scale数值、增大降噪步数num_inference_steps,Qwen-Image模型推荐cfg=4、steps=50最优配比。
七、接口优势总结:对比Diffusers/原生API
- 兼容成本极低:全适配OpenAI Images接口,现有DALL·E业务无缝迁移
- 推理提速30%-80%:依托vLLM显存调度、并行推理,优于原生diffusers离线绘图
- 运维统一:文本推理、图像生成复用同一套vLLM服务,不用单独部署绘图服务
- 能力一体化:同一个接口兼顾文生图、图生图、LoRA定制,适配全绘图业务
八、文末小结&后续进阶方向
1. /v1/images/generations 是vLLM-Omni专属标准化绘图接口,生产绘图业务首选,替代chat/completions绘图方案;
2. 核心门槛:服务启动必须加 –omni,显存不足开启VAE分片优化;
3. 开发最优范式:OpenAI SDK调用 + 固定seed + 反向提示词,兼顾稳定性与画质;
后续进阶:接口限流配置、批量绘图异步改造、多LoRA热切换、对接Gradio前端绘图面板。
💡 收藏本文,搭建vLLM私有化绘图服务直接抄部署+调用代码,少走90%适配弯路。