阿里云国际站代理商:人工智能平台 PAI-AI绘画-SDWebUI部署

Stable Diffusion(SD)是强大的图像生成模型,能够生成高质量、高分辨率的图像。Stable Diffusion WebUI基于Gradio开发了可视化图形界面,提供丰富的生图工具。EAS支持场景化部署,只需配置几个参数即可一键部署SD WebUI服务。

功能与优势

PAI-EAS 相比自建服务具有以下优势:

  • 一键部署:预配置镜像,包含所有依赖项。

  • GPU 弹性伸缩:根据需求动态调整 GPU 资源。

  • 企业级功能:多用户隔离、GPU 共享、成本分摊。

  • 集成文件管理:FileBrowser 扩展便于上传模型。

选择适合版本

版本

适用场景

调用方式

计费

标准版

个人测试、原型开发

WebUI、API调用(同步)

根据部署配置进行计费,详情请参见EAS计费说明。

API版

生产环境 API、高并发场景

API调用(同步 & 异步)

集群版WebUI

团队协作、设计团队

WebUI

Serverless版

说明

仅支持华东2(上海)、华东1(杭州)地域。

弹性负载、成本优化

WebUI

服务部署完全免费,只根据使用出图的时长进行计费。

快速入门:使用场景化方式部署AI绘画

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

  2. 模型在线服务(EAS)页面,单击部署服务,然后在场景化模型部署区域,单击AI绘画-SDWebUI部署

  3. 配置以下关键参数:

    • 版本选择:选择标准版。

    • 模型配置:用来存放模型文件和推理生成的图片,选择对象存储(OSS)并选择Bucket路径。

    • 实例规格:选择GPU类型,规格推荐ml.gu7i.c16m60.1-gu30(性价比最高)。

  4. 参数配置完成后,单击部署。等待 5-10 分钟,直到服务状态变为运行中

调用服务

使用WebUI调用

通过WebUI,您可以调用标准版、集群版WebUI和Serverless版的服务。操作步骤如下:

  1. 单击目标服务名称进入概览页面,在右上角单击Web应用

  2. 进行模型推理验证。

    在Stable Diffusion WebUI页面文生图页签中,输入正向提示词Prompt,例如cute dog,然后单击生成,即可完成AI绘图。

使用API同步调用

标准版和API版服务部署成功后,您可以发送同步接口请求。

查询调用信息

  1. 服务部署成功后,单击服务名称,进入概览页面。

  2. 基本信息区域中,单击查看调用信息

  3. 调用信息页面,获取服务公共调用地址和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模型配置:

发送服务请求时,您可以直接在请求体上加入<lora:yaeMikoRealistic_Genshin:1000>来增加Lora。更多详细内容,请参见Lora。

请求体配置示例如下:

{
  "prompt":"girls <lora:yaeMikoRealistic_Genshin:1>",
  "steps":20,
  "save_images":true
}
请求数据中使用ControlNet数据格式:

在API请求数据中使用ControlNet数据格式,可以对图像进行常见的变换操作。

使用API异步调用

API版服务部署成功后,您可以发送异步接口请求。异步模式下,客户端无需同步等待结果,而是通过订阅方式接收服务端的结果推送。操作步骤如下:

查询调用信息

  1. 服务部署成功后,单击服务名称,进入概览页面。

  2. 基本信息区域中,单击查看调用信息

  3. 调用信息页面,单击切换至异步调用页签,获取公网输入调用地址和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页面的扩展页签中,查看并安装插件。具体操作步骤如下:

  1. 单击目标服务名称进入概览页面,在右上角单击Web应用

  2. 在WebUI页面中的扩展页签下,检查是否已选中BeautifulPrompt。如果未选中,您需要选中该插件,并单击应用更改并重载前端,来重新加载BeautifulPrompt插件。

    在安装插件时,WebUI页面将会自动重启,待重新加载完成后即可进行推理验证。

使用插件进行推理验证

  1. 切换到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 发送至对应功能页签。

  2. 选择需要使用的Prompt,单击Prompt右侧的to txt2img

    页面自动跳转至文生图页签,并自动填充了提示词(Prompt)区域。

    单击后,所选 Prompt 内容自动填入 文生图 页签的正向提示词文本框中。

  3. 单击生成,即可在WebUI页面右侧生成图片。

    自动填充的提示词包含丰富的画质与构图描述词(如 masterpiece、best quality、ultra-detailed 等)。单击 生成 按钮后,模型基于增强后的 Prompt 生成了高质量的动漫风格图像。

    与不使用BeautifulPrompt插件相比,使用BeautifulPrompt插件可以提升生成图像的美观度,并且帮助您补充更多细节。其他场景使用BeautifulPrompt插件前后效果对比如下:

    输入Prompt

    不使用BeautifulPrompt的效果

    使用BeautifulPrompt的效果

    输入Prompt

    不使用BeautifulPrompt的效果

    使用BeautifulPrompt的效果

    a cat

    image.png

    image.png

    a giant tiger

    image.png

    image.png

相关新闻

联系我们

联系我们

电报:@yunshuguoji

邮件:yunshuguoji@outlook.com

工作时间:早上8:00-晚上11:00

认准电报
认准电报
分享本页
返回顶部