Stable Diffusion是强大的图像生成模型,能够生成高质量、高分辨率的图像,并具有良好的稳定性和可控性。Stable Diffusion WebUI开源项目在模型的基础上进行封装,基于Gradio开发了可视化图形界面,为用户提供了丰富的生图工具。EAS提供了场景化部署方式,您只需配置几个参数,即可一键部署基于Stable Diffusion WebUI的服务。您可以使用该服务进行模型推理,实现基于给定文本生成相应图像的功能。本文为您介绍如何部署和调用Stable Diffusion WebUI服务,以及常见问题的解决方法。
通过EAS实现Stable Diffusion WebUI的云端快速部署与应用,具体功能与优势如下:
使用便捷:快捷部署,开箱即用;可根据需求动态切换GPU等底层资源。
企业级功能:前后端分离改造,支持多用户对多GPU的集群调度;支持用户隔离;支持账单拆分。
插件及优化:在Stable Diffusion WebUI开源版本的基础上,提供了PAI-Blade性能优化工具;提供FileBrowser插件,允许用户在桌面端上传和下载云端模型、图片;提供自研的ModelZoo插件,支持开源模型下载加速。
场景化部署提供了4个版本:标准版、API版、集群版WebUI和Serverless版。不同版本主要区别如下:
适用场景
支持的调用方式
计费
标准版
推荐单用户测试验证时使用。只适用于部署单个实例。
WebUI
在线调试
API调用(同步)
API版
系统将自动转换服务为异步模式,适用于高并发场景。
API调用(同步&异步)
集群版WebUI
适合多人共同使用WebUI的场景。如企业内设计团队多人协同使用。
WebUI
Serverless版
需求波动较大的场景,可根据您的服务请求量自动弹性伸缩。
WebUI
服务部署完全免费,只根据使用出图的时长进行计费。
API版:API版建议结合EAS异步队列使用。系统会创建队列服务实例,因此需要分配额外的CPU实例。
集群版WebUI:每个用户有独立的后端环境和工作目录,实现高效的GPU共享和文件管理。
Serverless版:目前,仅华东2(上海)、华东1(杭州)地域支持部署Serverless版服务。
请提前准备NAS或OSS存储空间,用来存放模型文件和生成的图片。
支持以下三种部署方式:
支持部署标准版、API版、集群版WebUI和Serverless版的服务。具体操作步骤如下:
在模型在线服务(EAS)页面,单击部署服务,然后在场景化模型部署区域,单击AI绘画-SDWebUI部署。
在AI绘画-SDWebUI部署页面,配置以下关键参数。
参数
描述
基本信息
版本选择
模型配置
用来存放模型文件和推理生成的图片。
API版和集群版必须进行模型配置。
单击添加按钮,进行模型配置,支持以下两种配置类型:
对象存储(OSS):使用OSS上传和下载数据更方便,能够为生成后的图像生成公网访问地址,但切换模型和保存图像的速度比NAS慢。配置OSS为已创建的OSS存储空间(Bucket)路径。
文件存储(NAS):切换模型和保存图像的速度更快。仅标准版、API版和集群版WebUI支持该配置类型。
NAS挂载点:选择已创建的NAS文件系统和挂载点。
NAS源路径:配置为/。
本文以挂载OSS为例来说明。
资源配置
资源配置选择
仅标准版、API版和集群版WebUI需要进行资源配置。
推理加速
支持启用推理加速功能,取值如下:
PAI-Blade推理加速:PAI-Blade是PAI推出的通用推理优化工具,对训练完成的模型进行优化,从而达到最优的推理性能。
开源框架xFormers推理加速:xFormers是基于Transformer的开源加速工具,能够有效缩短图片生成时长。
无加速:表示不启用推理加速功能。
专有网络配置
VPC
当模型配置选择文件存储(NAS)时,系统会自动匹配与NAS所在VPC相连通的专有网络,无需进行额外的修改。
交换机
安全组名称
参数配置完成后,单击部署。
支持部署标准版、API版和集群版WebUI服务。具体操作步骤如下:
单击部署服务,然后在自定义模型部署区域,单击自定义部署。
在自定义部署页面,配置以下关键参数。
参数
描述
环境信息
部署方式
部署标准版和集群版WebUI服务时,选择镜像部署,并选中开启Web应用。
部署API版服务时,选择镜像部署,并选中异步服务。
镜像配置
在官方镜像列表中选择stable-diffusion-webui,镜像名称选择最高版本,其中:
x.x-standard:表示标准版。
x.x-api:表示API版。
x.x-cluster-webui:表示集群版WebUI。
由于版本迭代迅速,部署时镜像版本选择最高版本即可。
当需要实现多人同时使用一个Stable Diffusion WebUI出图时,您可以选择x.x-cluster-webui版本。
模型配置
用来存放模型文件和推理生成的图片。
API版和集群版必须进行模型配置。
支持以下几种配置类型:
OSS
Uri:将OSS路径配置为已创建的OSS Bucket路径。
挂载路径:配置为/code/stable-diffusion-webui/data。
NAS
选择文件系统:选择已创建的NAS文件系统。
文件系统挂载点:选择已创建的挂载点。
文件系统路径:配置为/。
挂载路径:配置为/code/stable-diffusion-webui/data。
PAI模型
PAI模型:选择PAI模型和模型版本。
挂载路径:配置为/code/stable-diffusion-webui/data。
本文以OSS挂载为例来说明。
运行命令
完成上述配置后,系统将自动生成相应的运行命令。
填写模型配置后,您需要在运行命令中增加参数--data-dir,将数据挂载到服务实例的指定路径。要求路径与挂载路径一致,如 --data-dir /code/stable-diffusion-webui/data,
资源信息
部署资源
服务接入
专有网络(VPC)
当模型配置选择NAS时,系统会自动匹配与NAS所在VPC相连通的专有网络,无需进行额外的修改。
交换机
安全组名称
参数配置完成后,单击部署。
您可以使用JSON独立部署方式,来部署Stable Diffusion WebUI服务,以下以标准版和API版为例,具体操作步骤如下:
在模型在线服务(EAS)页面,单击部署服务,在自定义模型部署区域,单击JSON独立部署。
在JSON独立部署页面编辑框中,配置以下JSON格式的内容。
其中关键参数说明如下:
参数
是否必选
描述
自定义模型服务名称,同地域唯一。
storage
支持以下两种挂载方式,任意选择一种即可:
本文以挂载OSS为例来说明。
当storage使用NAS挂载时,您需要配置专有网络,包括vpc_id(专有网络ID)、vswitch_id(交换机ID)和security_group_id(安全组ID),且配置的专有网络需要与通用型NAS文件系统保持一致。
相较于标准版服务的配置,以下是API版服务的配置变更,其他参数配置与标准版服务相同。
参数
描述
删除以下参数:
删除该参数,表示不开启webserver。
新增以下参数:
配置为Async,表示打开异步服务。
配置为1,单个实例只允许并发处理一个请求。
配置为1,消息处理错误后不允许重试。
单击部署。
通过WebUI,您可以调用标准版、集群版WebUI和Serverless版的服务。具体操作步骤如下:
服务部署成功后,单击目标服务的服务方式列下的查看Web应用。
进行模型推理验证。
在Stable Diffusion WebUI页面文生图页签中,输入正向提示词Prompt,例如cute dog,然后单击生成,即可完成AI绘图,效果图如下:
标准版和API版服务支持API调用。API调用支持同步调用和异步调用两种方式,其中标准版服务仅支持同步调用,API版服务支持同步调用和异步调用方式。
同步调用:即客户端发送一个请求,同步等待结果返回。
异步调用:即客户端使用EAS的队列服务向输入队列发送请求,并通过订阅的方式从输出队列查询结果。
标准版和API版服务部署成功后,您可以参照以下操作步骤发送同步接口请求。
查询调用信息。
服务部署成功后,单击服务名称,进入概览页面。
在基本信息区域中,单击查看调用信息。
在调用信息页面,查询服务访问地址和Token。
使用以下几种方式发送同步接口请求。
示例如下:
其中:
命令执行成功后,系统会返回图像的Base64位编码。
示例1(推荐):建议您为EAS服务挂载OSS来保存生成后的图像。以下示例在请求体中设置保存地址为OSS挂载路径,实现了将图像直接保存至OSS,并且使用了oss2 SDK获取OSS中的图像下载到本地。
其中关键配置说明如下:
配置
描述
url
将<service_url>替换为步骤1中查询到的服务访问地址。您需要将访问地址末尾的/删除。
bucket
其中:
<examplebucket>需要替换为已创建的OSS存储空间(Bucket)名称。
<token>
替换为步骤1中查询到的服务Token。
mount_path
配置为部署服务时配置的OSS挂载路径。
oss_url
配置为部署服务时配置的OSS存储路径。
示例2:保存图像至本地路径。执行以下Python代码,会返回图像的Base64位编码,并将图像文件保存至本地目录。
其中:
<service_url>:替换为步骤1中查询到的服务访问地址,您需要将访问地址末尾的/删除。
<token>:替换为步骤1中查询到的服务Token。
此外,您还可以在请求数据中使用LoRA和Controlnet数据格式,以实现特定的功能。
请求体配置示例如下:
API版服务部署成功后,您可以向该服务发送异步接口请求,即客户端不再同步等待结果,通过订阅的方式在请求计算完成后等待服务端的结果推送。具体操作步骤如下:
查询调用信息。
客户端通过异步接口向服务端发送请求,支持使用Python SDK和Java SDK两种方式。
异步队列对输入请求和输出结果的大小都有限制,通常不建议超过8 KB。因此,在发送请求时,需要满足以下两个条件:
如果请求数据中包含图片,建议使用URL来传递图片信息。Stable Diffusion WebUI内部会自动下载并解析这些图片数据。
示例代码如下:
其中:
<service_url>:替换为步骤1中查询到的服务访问地址。您需要将访问地址末尾的/删除。
<token>:替换为步骤1中查询到的服务Token。
可以支持WebUI服务的所有POST接口,按照需求请求对应路径。
如果您需要在该服务中透传业务属性,可以使用url参数的方式指定属性标签。例如,您可以在response的url参数中添加参数?task_id=task_abc来指定标签为task_id,并且该信息会在服务的输出结果中的tags字段中体现。
示例代码如下。
其中:
queueEndpoint:配置为步骤1中获取的服务访问地址。请参考示例代码进行相应的配置。
queueToken:配置为步骤1中获取的服务Token信息。
<service_name>:替换为已部署的异步服务名称。
如果您需要在服务中透传业务属性,可以在put函数中设置tag参数。在示例中,您可以参考自定义tag的用法。这些信息会在输出结果的tags属性中体现。
代码执行成功后,系统输出如下结果。您的结果以实际为准。
异步订阅结果。
客户端采用订阅方式,一旦服务端完成相关请求的处理,便会自动推送结果至客户端,实现高效异步通信。支持使用PyThon SDK和Java SDK两种方式异步订阅结果。
示例代码如下:
其中关键配置说明如下:
配置
描述
sink_queue
参考示例代码格式,将sd_async替换为已部署的异步服务名称。
<token>
需要配置为步骤1中获取的服务Token信息。
oss_url
替换为部署服务时配置的OSS存储路径。
bucket
其中:
<examplebucket>需要替换为已创建的OSS存储空间(Bucket)名称。
需要主动进行commit操作,也可以设置auto_commit=True来自动进行commit操作。
如果consumer不再消费数据,需要及时关闭以释放资源。
示例代码如下:
其中:
queueEndpoint:配置为步骤1中获取的服务访问地址。请参考示例代码进行相应的配置。
queueToken:配置为步骤1中获取的服务Token信息。
<service_name>:替换为已部署的异步服务名称。
需要主动进行commit操作,也可以设置auto_commit=True来自动进行commit操作。
如果consumer不再消费数据,需要及时关闭以释放资源。
您可以为Stable Diffusion WebUI配置插件,以实现更加多样化的功能。PAI预置了丰富的插件,例如PAI自主研发的BeautifulPrompt插件,用来实验Prompt的扩写和美化。下文将以BeautifulPrompt插件为例,为您介绍插件的安装和使用方法。
您可以在WebUI页面的扩展页签中,查看并安装插件。具体操作步骤如下:
在安装插件时,WebUI页面将会自动重启,待重新加载完成后即可进行推理验证。
PAI提供了多个Prompt生成模型,每个模型生成的Prompt略有不同。其中:
pai-bloom-1b1-text2prompt-sd-v2:擅长生成复杂场景下的Prompt。
pai-bloom-1b1-text2prompt-sd:生成描述单个物体的Prompt。
选择需要使用的Prompt,单击Prompt右侧的to txt2img。
与不使用BeautifulPrompt插件相比,使用BeautifulPrompt插件可以提升生成图像的美观度,并且帮助您补充更多细节。其他场景使用BeautifulPrompt插件前后效果对比如下:
输入Prompt
不使用BeautifulPrompt的效果
使用BeautifulPrompt的效果
a cat
a giant tiger
其中:
models:该目录用来存放模型文件。
发起推理请求后,系统将按照API代码中预设的配置,自动将结果文件输出至该目录中。
您可以将从开源社区下载的模型或自己训练得到的LoRA或Stable Diffusion等模型存放于上述指定目录中,以便加载使用新的模型。具体操作步骤如下:
在Stable Diffusion WebUI页面切换模型,进行模型推理验证。
您可以先尝试重新打开Stable Diffusion WebUI界面或重启EAS服务来解决:
单击目标服务服务方式列下的查看Web应用,重新打开Stable Diffusion WebUI。
在Stable Diffusion WebUI页面单击设置。
在左侧导航栏单击用户界面,在右侧页面本地化区域,选择无。
在Stable Diffusion WebUI页面上方,单击保存设置,保存成功后单击重载前端。
重新刷新WebUI页面,即可切换为英文。
在部署标准版、集群版WebUI服务时,系统已默认在运行命令中增加了--filebrowser参数,您可以直接通过WebUI界面管理您的文件系统。具体操作步骤如下:
服务部署完成后,单击服务方式列下的查看Web应用。
在Stable Diffusion WebUI页面,单击FileBrowser页签。您可以直接查看文件系统,或进行上传、下载操作。
检查部署版本。如果是API版(镜像为x.x-api)或者集群版WebUI(镜像为x.x-cluster-webui),必须进行模型配置。
检查挂载路径。请检查运行命令中是否有--data-dir参数,并且需要保证其路径与OSS的挂载路径一致。
请检查服务部署版本,API版不支持使用WebUI。如使用自定义部署,x.x-api的镜像是API版。
公共参数
公共参数
功能说明
使用建议
--blade
启用PAI-blade加速,提升出图速度。
建议开启。
--filebrowser
支持您自主上传、下载模型或图片的插件。
默认启用。
--data-dir /code/stable-diffusion-webui/data-oss
持久化存储挂载使用的路径。
挂载持久化存储时使用,默认起始路径为/code/stable-diffusion-webui/,也可以使用相对路径。
--api
WebUI的API调用模式。
默认启用。
--enable-nsfw-censor
默认关闭。如果您有安全合规需求,则可以选择开启鉴黄过滤功能。
根据业务需要进行调整。
--always-hide-tabs
指定部分Tab页处于隐藏状态。
根据业务需要进行调整。
--min-ram-reserved 40 --sd-dynamic-cache
缓存Stable Diffusion大模型到内存中。
无。
集群版参数
ckpt的大模型和ControlNet的大模型会自动加载公共目录下的文件和您自定义的文件。
集群版参数
功能说明
使用建议
--lora-dir
指定公共LoRA模型目录,例如:--lora-dir /code/stable-diffusion-webui/data-oss/models/Lora。
默认不配置,用户的所有LoRA目录将被隔离,并且只加载用户文件夹中的LoRA模型。当指定特定目录后,所有的用户将同时加载该公共目录中的LoRA模型和用户文件夹中的LoRA模型。
--vae-dir
指定公共VAE模型目录,例如:--vae-dir /code/stable-diffusion-webui/data-oss/models/VAE。
默认不配置,用户的所有VAE目录将被隔离,并且只加载用户文件夹中的VAE模型。当指定特定目录后,所有的用户只加载该公共目录下的VAE模型。
--gfpgan-dir
指定公共GFPGAN模型目录,例如:--gfpgan-dir /code/stable-diffusion-webui/data-oss/models/GFPGAN。
默认不配置,用户的所有GFPGAN目录将被隔离,并且只加载用户文件夹中的GFPGAN模型。当指定特定目录后,所有的用户只加载该公共目录下的GFPGAN模型。
--embeddings-dir
指定公共embeddings模型目录,例如:--embeddings-dir /code/stable-diffusion-webui/data-oss/embeddings。
默认不配置,用户的所有embeddings目录将被隔离,并且只加载用户文件夹中的embeddings模型。当指定特定目录后,所有的用户只加载该公共目录下的embeddings模型。
--hypernetwork-dir
指定公共hypernetwork模型目录,例如:--hypernetwork-dir /code/stable-diffusion-webui/data-oss/models/hypernetworks。
默认不配置,用户的所有hypernetwork目录将被隔离,并且只加载用户文件夹中的hypernetwork模型。当指定特定目录后,所有的用户只加载该公共目录下的hypernetwork模型。
--root-extensions
插件目录使用共享目录。使用该参数后,所有用户看到的插件完全相同。
需要集中安装插件或集中管理插件时使用该参数。
EAS基于原生Stable Diffusion WebUI接口支持了一些新特性,在API接口中除了必填参数以外,还可以添加一些可选参数用于实现更加丰富的功能或定制化需求:
可以指定Stable Diffusion模型、VAE模型以及保存目录。
支持通过URL输入参数,并返回相应的状态码。
生成的图片和ControlNet所对应的图片可以通过URL进行访问。
具体使用示例如下:
请求数据格式示例如下:
其中关键参数说明如下:
sd_model_checkpoint:指定Stable Diffusion模型参数,并且可以自动切换到大模型。
sd_vae:指定VAE模型。
save_dir:指定生成图片的保存路径。
发送同步接口请求示例如下:
返回数据格式示例如下:
发送异步接口请求示例如下:
请求数据格式示例如下:
返回数据格式示例如下:
请求数据格式如下:
返回数据格式示例如下:
通过EAS,您还可以完成以下场景化部署:
关注阿里云公众号或下载阿里云APP,关注云资讯,随时随地运维管控云服务