阿里云国际站代理商:人工智能平台 PAI-AI绘画-SDWebUI部署
功能与优势
PAI-EAS 相比自建服务具有以下优势:
-
一键部署:预配置镜像,包含所有依赖项。
-
GPU 弹性伸缩:根据需求动态调整 GPU 资源。
-
企业级功能:多用户隔离、GPU 共享、成本分摊。
-
集成文件管理:FileBrowser 扩展便于上传模型。
选择适合版本
版本 |
适用场景 |
调用方式 |
计费 |
|
标准版 |
个人测试、原型开发 |
WebUI、API调用(同步) |
根据部署配置进行计费,详情请参见EAS计费说明。 |
|
API版 |
生产环境 API、高并发场景 |
API调用(同步 & 异步) |
|
|
集群版WebUI |
团队协作、设计团队 |
WebUI |
|
|
Serverless版 仅支持华东2(上海)、华东1(杭州)地域。 |
弹性负载、成本优化 |
WebUI |
服务部署完全免费,只根据使用出图的时长进行计费。 |
快速入门:使用场景化方式部署AI绘画
-
登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS。
-
在模型在线服务(EAS)页面,单击部署服务,然后在场景化模型部署区域,单击AI绘画-SDWebUI部署。
-
配置以下关键参数:
-
版本选择:选择标准版。
-
模型配置:用来存放模型文件和推理生成的图片,选择对象存储(OSS)并选择Bucket路径。
-
实例规格:选择GPU类型,规格推荐
ml.gu7i.c16m60.1-gu30(性价比最高)。
-
-
参数配置完成后,单击部署。等待 5-10 分钟,直到服务状态变为运行中。
调用服务
使用WebUI调用
通过WebUI,您可以调用标准版、集群版WebUI和Serverless版的服务。操作步骤如下:
-
单击目标服务名称进入概览页面,在右上角单击Web应用。
-
进行模型推理验证。
在Stable Diffusion WebUI页面文生图页签中,输入正向提示词Prompt,例如
cute dog,然后单击生成,即可完成AI绘图。
使用API同步调用
标准版和API版服务部署成功后,您可以发送同步接口请求。
查询调用信息
-
服务部署成功后,单击服务名称,进入概览页面。
-
在基本信息区域中,单击查看调用信息。
-
在调用信息页面,获取服务公共调用地址和Token。
调用示例:
图片保存至本地:
import requests
import base64
from PIL import Image
import io
# 注意 !!!!:请删除调用地址末尾的 /。
SERVICE_URL = "<调用地址>"
TOKEN = "<Token>"
def generate_image(prompt: str) -> Image.Image:
"""根据文本提示词生成图片。"""
payload = {
"prompt": prompt,
"negative_prompt": "blurry, low quality, deformed",
"steps": 25,
"width": 512,
"height": 512,
"cfg_scale": 7.5,
}
response = requests.post(
f"{SERVICE_URL}/sdapi/v1/txt2img",
json=payload,
headers={"Authorization": TOKEN}
)
response.raise_for_status()
# 解码第一张图片
img_data = response.json()["images"][0]
return Image.open(io.BytesIO(base64.b64decode(img_data)))
# 生成并保存
image = generate_image("a serene mountain landscape at sunset")
image.save("output.png")
图片保存至OSS:
import requests
# 注意 !!!!:请删除调用地址末尾的 /。
SERVICE_URL = "<调用地址>"
TOKEN = "<Token>"
payload = {
"prompt": "professional portrait photography",
"steps": 30,
"alwayson_scripts": {
"sd_model_checkpoint": "v1-5-pruned-emaonly.safetensors",
"save_dir": "/code/stable-diffusion-webui/data/outputs"
}
}
response = requests.post(
f"{SERVICE_URL}/sdapi/v1/txt2img",
json=payload,
headers={"Authorization": TOKEN}
)
# 获取保存的图片路径
data = response.json()
# 对应部署EAS服务时,默认挂载OSS文件夹对应的mount_path。
mount_path = "/code/stable-diffusion-webui/data"
# 对应部署EAS服务时,选择的OSS地址bucket
oss_url = "oss://examplebucket/data-oss"
for idx, img_path in enumerate(data['parameters']['image_url'].split(',')):
# 获取生成的图像在OSS中的实际地址。
img_oss_path = img_path.replace(mount_path, oss_url)
print(img_oss_path)
此外,您还可以在请求数据中使用LoRA和ControlNet数据格式。
发送服务请求时,您可以直接在请求体上加入<lora:yaeMikoRealistic_Genshin:1000>来增加Lora。更多详细内容,请参见Lora。
请求体配置示例如下:
{
"prompt":"girls <lora:yaeMikoRealistic_Genshin:1>",
"steps":20,
"save_images":true
}
在API请求数据中使用ControlNet数据格式,可以对图像进行常见的变换操作。
使用API异步调用
API版服务部署成功后,您可以发送异步接口请求。异步模式下,客户端无需同步等待结果,而是通过订阅方式接收服务端的结果推送。操作步骤如下:
查询调用信息
-
服务部署成功后,单击服务名称,进入概览页面。
-
在基本信息区域中,单击查看调用信息。
-
在调用信息页面,单击切换至异步调用页签,获取公网输入调用地址和Token。
发送请求
客户端通过异步接口向服务端发送请求:
import requests
SERVICE_URL = "<公网输入调用地址>"
TOKEN = "<Token>"
response = requests.post(
f"{SERVICE_URL}/sdapi/v1/txt2img?task_id=job_001",
json={
"prompt": "futuristic city skyline",
"steps": 30,
"alwayson_scripts": {
"save_dir": "/code/stable-diffusion-webui/data/outputs"
}
},
headers={"Authorization": TOKEN}
)
print(f"任务已入队: {response.json()}")
-
异步队列对输入请求和输出结果的大小都有限制,通常不建议超过8 KB。因此,在发送请求时,需要满足以下两个条件:
-
如果请求数据中包含图片,建议使用URL来传递图片信息。Stable Diffusion WebUI内部会自动下载并解析这些图片数据。
-
为了确保返回结果中没有原始图片数据,建议您使用save_dir来指定生成图片的保存路径。
-
订阅结果
客户端通过订阅方式接收结果。服务端处理完请求后,自动将结果推送至客户端。
from eas_prediction import QueueClient
# 请必须将调用地址的格式调整为示例格式:112231234124214.cn-hangzhou.pai-eas.aliyuncs.com
SERVICE_URL = "<调用地址>"
TOKEN = "<Token>"
# 创建服务时配置的服务名称
SERVICE_NAME = "<服务名称>"
sink = QueueClient(SERVICE_URL, SERVICE_NAME + '/sink')
sink.set_token(TOKEN)
sink.init()
for result in sink.watch(0, 5, auto_commit=True).run():
print(f"任务 {result.tags.get('task_id')} 已完成")
print(f"图片地址: {result.data}")
EAS基于原生Stable Diffusion WebUI接口支持了新特性,您可以在请求数据中添加可选参数实现更丰富的功能。
安装插件实现增强功能
您可以为Stable Diffusion WebUI安装插件来扩展功能。PAI预置了多种插件,例如BeautifulPrompt插件用于扩写和美化Prompt。下文以BeautifulPrompt为例,介绍插件的安装和使用方法。
安装插件
您可以在WebUI页面的扩展页签中,查看并安装插件。具体操作步骤如下:
-
单击目标服务名称进入概览页面,在右上角单击Web应用。
-
在WebUI页面中的扩展页签下,检查是否已选中BeautifulPrompt。如果未选中,您需要选中该插件,并单击应用更改并重载前端,来重新加载BeautifulPrompt插件。
在安装插件时,WebUI页面将会自动重启,待重新加载完成后即可进行推理验证。
使用插件进行推理验证
-
切换到BeautifulPrompt页签,在文本框中输入一个比较简单的Prompt,然后单击生成,即可生成更详细的Prompt。
在 Stable Diffusion WebUI 中选择 BeautifulPrompt 标签页,在左侧输入框中输入简短提示词(例如
1girl),选择 Prompt 生成模型并配置生成参数:-
Top K:50
-
Top P:0.9
-
Temperature:0.9
-
Repetition penalty:1.05
-
Max new tokens:384
-
Num prompts:5
单击 生成 按钮后,右侧结果面板将输出多条扩展后的详细 Stable Diffusion 提示词,每条结果右侧提供 to txt2img 和 to img2img 按钮,可将提示词直接发送至对应功能页面使用。
PAI提供了多个Prompt生成模型,每个模型生成的Prompt略有不同。其中:
-
pai-bloom-1b1-text2prompt-sd-v2:擅长生成复杂场景下的Prompt。
-
pai-bloom-1b1-text2prompt-sd:生成描述单个物体的Prompt。
您可以根据场景需要选择合适的模型来生成Prompt。
可配置生成参数:Temperature(默认 0.9)、Repetition penalty(默认 1.05)、Max new tokens(默认 384)、Num prompts(默认 5),并可勾选 反向提示词 复选框以同时生成反向提示词。每条生成结果旁提供 to txt2img 和 to img2img 按钮,可将 Prompt 发送至对应功能页签。
-
-
选择需要使用的Prompt,单击Prompt右侧的to txt2img。
页面自动跳转至文生图页签,并自动填充了提示词(Prompt)区域。
单击后,所选 Prompt 内容自动填入 文生图 页签的正向提示词文本框中。
-
单击生成,即可在WebUI页面右侧生成图片。
自动填充的提示词包含丰富的画质与构图描述词(如 masterpiece、best quality、ultra-detailed 等)。单击 生成 按钮后,模型基于增强后的 Prompt 生成了高质量的动漫风格图像。
与不使用BeautifulPrompt插件相比,使用BeautifulPrompt插件可以提升生成图像的美观度,并且帮助您补充更多细节。其他场景使用BeautifulPrompt插件前后效果对比如下:
输入Prompt
不使用BeautifulPrompt的效果
使用BeautifulPrompt的效果
输入Prompt
不使用BeautifulPrompt的效果
使用BeautifulPrompt的效果
a cat


a giant tiger


