Stable Diffusion(SD)是強大的映像產生模型,能夠產生高品質、高解析度的映像,並具有良好的穩定性和可控性。Stable Diffusion WebUI開源專案在模型的基礎上進行封裝,基於Gradio開發了可視化圖形介面,為使用者提供了豐富的生圖工具。EAS提供了情境化部署方式,您只需配置幾個參數,即可一鍵部署基於Stable Diffusion WebUI的服務。
功能與優勢
PAI-EAS 相比自建服務具有以下優勢:
一鍵部署:預配置鏡像,包含所有依賴項。
GPU Auto Scaling:根據需求動態調整 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模型配置
發送服務要求時,您可以直接在請求體上加入<lora:yaeMikoRealistic_Genshin:1000>來增加Lora。更多詳細內容,請參見Lora。
請求體配置樣本如下:
{
"prompt":"girls <lora:yaeMikoRealistic_Genshin:1>",
"steps":20,
"save_images":true
}請求資料中使用ControlNet資料格式
API請求資料中使用ControlNet資料格式可以方便地對映像進行一些常見的變換操作,比如使映像保持水平或垂直等。具體配置方法,請參見txt2img使用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來指定產生圖片的儲存路徑。具體操作,請參見API介面額外支援配置的參數。
訂閱結果
用戶端採用訂閱者式,一旦服務端完成相關請求的處理,便會自動推送結果至用戶端,實現高效非同步通訊。
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介面支援了一些新特性,您可以在請求資料中添加一些選擇性參數用於實現更加豐富的功能或定製化需求。具體操作,請參見API介面額外支援配置的參數。
進階部署選項
自訂部署
JSON獨立部署
安裝外掛程式實現增強功能
您可以為Stable Diffusion WebUI配置外掛程式,以實現更加多樣化的功能。PAI預置了豐富的外掛程式,例如PAI自主研發的BeautifulPrompt外掛程式,用來實驗Prompt的擴寫和美化。下文將以BeautifulPrompt外掛程式為例,為您介紹外掛程式的安裝和使用方法。
安裝外掛程式
您可以在WebUI頁面的擴充頁簽中,查看並安裝外掛程式。具體操作步驟如下:
單擊目標服務名稱進入概览頁面,在右上方單擊Web应用。
在WebUI頁面中的擴充頁簽下,檢查是否已選中BeautifulPrompt。如果未選中,您需要選中該外掛程式,並單擊應用更改並重載前端,來重新載入BeautifulPrompt外掛程式。

在安裝外掛程式時,WebUI頁面將會自動重啟,待重新載入完成後即可進行推理驗證。
使用外掛程式進行推理驗證
切換到BeautifulPrompt頁簽,在文字框中輸入一個比較簡單的Prompt,然後單擊產生,即可產生更詳細的Prompt。

PAI提供了多個Prompt產生模型,每個模型產生的Prompt略有不同。其中:
pai-bloom-1b1-text2prompt-sd-v2:擅長產生複雜情境下的Prompt。
pai-bloom-1b1-text2prompt-sd:產生描述單個物體的Prompt。
您可以根據情境需要選擇合適的模型來產生Prompt。

選擇需要使用的Prompt,單擊Prompt右側的to txt2img。
頁面自動跳轉至文生圖頁簽,並自動填滿了提示詞(Prompt)地區。

單擊產生,即可在WebUI頁面右側產生圖片。

與不使用BeautifulPrompt外掛程式相比,使用BeautifulPrompt外掛程式可以提升產生映像的美觀度,並且協助您補充更多細節。其他情境使用BeautifulPrompt外掛程式前後效果對比如下:
輸入Prompt
不使用BeautifulPrompt的效果
使用BeautifulPrompt的效果
a cat


a giant tiger


常見問題
Q:如何掛載自己的模型及輸出目錄等內容
Q:下載的外掛程式、上傳的檔案等,在配置不變的情況下,會儲存在執行個體中嗎?
Q:服務長時間卡住怎麼辦?
Q:如何將WebUI頁面的預設語言切換為英文?
Q:如何管理自己的檔案系統?
Q:報錯:No such file or directory: 'data-oss/data-********.png'
Q:無法訪問WebUI頁面
附錄
服務啟動時支援配置的參數
公用參數
公用參數
功能說明
使用建議
--blade啟用PAI-blade加速,提升出圖速度。
建議開啟。
--filebrowser支援您自主上傳、下載模型或圖片的外掛程式。
預設啟用。
--data-dir /code/stable-diffusion-webui/data-oss持久化儲存掛載使用的路徑。
掛載持久化儲存時使用,預設起始路徑為
/code/stable-diffusion-webui/,也可以使用相對路徑。--apiWebUI的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外掛程式目錄使用共用目錄。使用該參數後,所有使用者看到的外掛程式完全相同。
需要集中安裝外掛程式或集中管理外掛程式時使用該參數。
API介面額外支援配置的參數
EAS基於原生Stable Diffusion WebUI介面支援了一些新特性,在API介面中除了必填參數以外,還可以添加一些選擇性參數用於實現更加豐富的功能或定製化需求:
可以指定Stable Diffusion模型、VAE模型以及儲存目錄。
支援通過URL輸入參數,並返回相應的狀態代碼。
產生的圖片和ControlNet所對應的圖片可以通過URL進行訪問。
具體使用樣本如下:
txt2img請求和返回樣本
請求資料格式樣本如下:
{
"alwayson_scripts": {
"sd_model_checkpoint": "deliberate_v2.safetensors",
"save_dir": "/code/stable-diffusion-webui/data-oss/outputs",
"sd_vae": "Automatic"
},
"steps": 20,
"prompt": "girls",
"batch_size": 1,
"n_iter": 2,
"width": 576,
"height": 576,
"negative_prompt": "ugly, out of frame"
}其中關鍵參數說明如下:
sd_model_checkpoint:指定Stable Diffusion模型參數,並且可以自動切換到大模型。
sd_vae:指定VAE模型。
save_dir:指定產生圖片的儲存路徑。
發送同步介面請求樣本如下:
# 調用同步介面驗證模型效果。
curl --location --request POST '<service_url>/sdapi/v1/txt2img' \
--header 'Authorization: <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"alwayson_scripts": {
"sd_model_checkpoint": "deliberate_v2.safetensors",
"save_dir": "/code/stable-diffusion-webui/data-oss/outputs",
"sd_vae": "Automatic"
},
"prompt": "girls",
"batch_size": 1,
"n_iter": 2,
"width": 576,
"height": 576,
"negative_prompt": "ugly, out of frame"
}'
返回資料格式樣本如下:
{
"images": [],
"parameters": {
"id_task": "14837",
"status": 0,
"image_url": "/code/stable-diffusion-webui/data-oss/outputs/txt2img-grids/2023-07-24/grid-29a67c1c-099a-4d00-8ff3-1ebe6e64931a.png,/code/stable-diffusion-webui/data-oss/outputs/txt2img-images/2023-07-24/74626268-6c81-45ff-90b7-faba579dc309-1146644551.png,/code/stable-diffusion-webui/data-oss/outputs/txt2img-images/2023-07-24/6a233060-e197-4169-86ab-1c18adf04e3f-1146644552.png",
"seed": "1146644551,1146644552",
"error_msg": "",
"total_time": 32.22393465042114
},
"info": ""
}發送非同步介面請求樣本如下:
# 將資料直接送入非同步隊列。
curl --location --request POST '<service_url>/sdapi/v1/txt2img' \
--header 'Authorization: <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"alwayson_scripts": {
"sd_model_checkpoint": "deliberate_v2.safetensors",
"id_task": "14837",
"uid": "123",
"save_dir": "tmp/outputs"
},
"prompt": "girls",
"batch_size": 1,
"n_iter": 2,
"width": 576,
"height": 576,
"negative_prompt": "ugly, out of frame"
}'img2img請求資料格式樣本
請求資料格式樣本如下:
{
"alwayson_scripts": {
"image_link":"https://eas-cache-cn-hangzhou.oss-cn-hangzhou-internal.aliyuncs.com/stable-diffusion-cache/tests/boy.png",
"sd_model_checkpoint": "deliberate_v2.safetensors",
"sd_vae": "Automatic",
"save_dir": "/code/stable-diffusion-webui/data-oss/outputs"
},
"prompt": "girl",
"batch_size": 1,
"n_iter": 2,
"width": 576,
"height": 576,
"negative_prompt": "ugly, out of frame",
"steps": 20, # Sampling steps
"seed": 111,
"subseed": 111, # Variation seed
"subseed_strength": 0, # Variation strength
"seed_resize_from_h": 0, # Resize seed from height
"seed_resize_from_w": 0, # Resize seed from width
"seed_enable_extras": false, # Extra
"sampler_name": "DDIM", # Sampling method
"cfg_scale": 7.5, # CFG Scale
"restore_faces": true, # Restore faces
"tiling": false, # Tiling
"init_images": [], # image base64 str, default None
"mask_blur": 4, # Mask blur
"resize_mode": 1, # 0 just resize, 1 crop and resize, 2 resize and fill, 3 just resize
"denoising_strength": 0.75, # Denoising strength
"inpainting_mask_invert": 0, #int, index of ['Inpaint masked', 'Inpaint not masked'], Mask mode
"inpainting_fill": 0, #index of ['fill', 'original', 'latent noise', 'latent nothing'], Masked content
"inpaint_full_res": 0, # index of ["Whole picture", "Only masked"], Inpaint area
"inpaint_full_res_padding": 32, #minimum=0, maximum=256, step=4, value=32, Only masked padding, pixels
#"image_cfg_scale": 1, # resized by scale
#"script_name": "Outpainting mk2", # 使用的script名字,不使用的話不要加這個欄位
#"script_args": ["Outpainting", 128, 8, ["left", "right", "up", "down"], 1, 0.05] # 對應script指令碼的參數,此處依次對應: 固定欄位, pixels, mask_blur, direction, noise_q, color_variation
}返回資料格式樣本如下:
{
"images":[],
"parameters":{
"id_task":"14837",
"status":0,
"image_url":"/data/api_test/img2img-grids/2023-06-05/grid-0000.png,/data/api_test/img2img-images/2023-06-05/00000-1003.png,/data/api_test/img2img-images/2023-06-05/00001-1004.png",
"seed":"1003,1004",
"error_msg":""
},
"info":""
}txt2img使用controlnet的資料格式
請求資料格式如下:
{
"alwayson_scripts": {
"sd_model_checkpoint": "deliberate_v2.safetensors", #模型名稱,需要帶著
"save_dir": "/code/stable-diffusion-webui/data-oss/outputs",
"controlnet":{
"args":[
{
"image_link": "https://pai-aigc-dataset.oss-cn-hangzhou.aliyuncs.com/pixabay_images/00008b87bf3ff6742b8cf81c358b9dbc.jpg",
"enabled": true,
"module": "canny",
"model": "control_v11p_sd15_canny",
"weight": 1,
"resize_mode": "Crop and Resize",
"low_vram": false,
"processor_res": 512,
"threshold_a": 100,
"threshold_b": 200,
"guidance_start": 0,
"guidance_end": 1,
"pixel_perfect": true,
"control_mode": "Balanced",
"input_mode": "simple",
"batch_images": "",
"output_dir": "",
"loopback": false
}
]
}
},
# 主要參數
"prompt": "girls",
"batch_size": 1,
"n_iter": 2,
"width": 576,
"height": 576,
"negative_prompt": "ugly, out of frame"
}返回資料格式樣本如下:
{
"images":[],
"parameters":{
"id_task":"14837",
"status":0,
"image_url":"/data/api_test/txt2img-grids/2023-06-05/grid-0007.png,/data/api_test/txt2img-images/2023-06-05/00014-1003.png,/data/api_test/txt2img-images/2023-06-05/00015-1004.png",
"seed":"1003,1004",
"error_msg":"",
"image_mask_url":"/data/api_test/controlnet_mask/2023-06-05/00000.png,/data/api_test/controlnet_mask/2023-06-05/00001.png"
},
"info":""
}相關文檔
更多關於EAS產品的計費詳情,請參見模型線上服務(EAS)計費說明。



