Stable Diffusion (SD) adalah model generasi gambar yang andal, menghasilkan gambar berkualitas tinggi dan beresolusi tinggi dengan stabilitas serta kontrol yang kuat. Proyek Stable Diffusion WebUI sumber terbuka membungkus model ini dalam antarmuka visual berbasis Gradio, menyediakan berbagai alat canggih untuk generasi gambar. Elastic Algorithm Service (EAS) memungkinkan penyebaran berbasis skenario—cukup konfigurasikan beberapa parameter untuk menyebarkan layanan Stable Diffusion WebUI hanya dengan satu klik.
Fitur dan Manfaat
PAI-EAS menawarkan keunggulan berikut dibandingkan layanan yang dibangun sendiri:
Penyebaran satu klik: Gambar yang telah dikonfigurasi sebelumnya mencakup semua dependensi.
Auto Scaling GPU: Sesuaikan sumber daya GPU secara dinamis sesuai kebutuhan.
Fitur tingkat enterprise: Isolasi multi-pengguna, berbagi GPU, dan alokasi biaya.
Manajemen file terintegrasi: Ekstensi FileBrowser menyederhanakan unggah model.
Pilih Edisi
Edisi | Skema Penggunaan | Metode Pemanggilan | Penagihan |
Edisi Standar | Pengujian pribadi, pengembangan prototipe | WebUI, pemanggilan API (sinkron) | Penagihan didasarkan pada konfigurasi penyebaran. Untuk detailnya, lihat Ikhtisar Penagihan EAS. |
Edisi API | Lingkungan produksi API, skenario konkurensi tinggi | Pemanggilan API (sinkron & asinkron) | |
Clustered WebUI | Kolaborasi tim, tim desain | WebUI | |
Edisi Serverless Catatan Hanya didukung di wilayah Tiongkok (Shanghai) dan Tiongkok (Hangzhou). | Beban elastis, optimalisasi biaya | WebUI | Penyebaran layanan gratis. Penagihan hanya berdasarkan durasi generasi gambar. |
Memulai Cepat: Menyebarkan Seni AI Menggunakan Metode Berbasis Skenario
-
Masuk ke Konsol PAI. Pilih wilayah di bagian atas halaman, lalu pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).
Pada halaman Elastic Algorithm Service (EAS), klik Deploy Service. Di area Scenario-based Model Deployment, klik AI Painting - SD Web UI Deployment.
Konfigurasikan parameter utama berikut:
Version: Pilih Edisi Standar.
Model Settings: Menyimpan file model dan gambar hasil inferensi. Pilih OSS dan pilih path bucket.
Instance Type: Pilih tipe GPU. Tipe instans yang direkomendasikan adalah
ml.gu7i.c16m60.1-gu30(rasio harga-kualitas tertinggi).
Setelah mengonfigurasi parameter, klik Deploy. Tunggu 5–10 menit hingga status layanan berubah menjadi Running.
Memanggil Layanan
Memanggil Menggunakan WebUI
Anda dapat memanggil layanan Edisi Standar, WebUI Terkluster, dan Edisi Serverless melalui WebUI sebagai berikut:
Verifikasi inferensi model.
Pada halaman Stable Diffusion WebUI, di tab Text-to-Image, masukkan prompt positif, seperti
cute dog. Lalu, klik Generate untuk menyelesaikan generasi seni AI. Hasilnya sebagai berikut:
Memanggil Menggunakan API Sinkron
Setelah menyebarkan layanan Edisi Standar dan Edisi API, Anda dapat mengirim permintaan API sinkron sebagai berikut.
Informasi Pemanggilan Kueri
Setelah layanan disebarkan, klik nama layanan untuk membuka halaman Overview.
Di area Basic Information, klik View Endpoint Information.
Pada halaman Invocation Information, peroleh endpoint layanan publik dan Token.
Contoh Pemanggilan
Simpan gambar secara lokal
import requests
import base64
from PIL import Image
import io
# Catatan !!!!: Hapus trailing / dari URL layanan.
SERVICE_URL = "<service_url>"
TOKEN = "<Token>"
def generate_image(prompt: str) -> Image.Image:
"""Menghasilkan gambar dari teks prompt."""
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()
# Decode gambar pertama
img_data = response.json()["images"][0]
return Image.open(io.BytesIO(base64.b64decode(img_data)))
# Hasilkan dan simpan
image = generate_image("a serene mountain landscape at sunset")
image.save("output.png")
Simpan gambar ke OSS
import requests
# Catatan !!!!: Hapus trailing / dari URL layanan.
SERVICE_URL = "<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}
)
# Dapatkan path gambar yang disimpan
data = response.json()
# Ini sesuai dengan mount_path folder OSS yang dipasang saat menyebarkan sebagai Layanan EAS.
mount_path = "/code/stable-diffusion-webui/data"
# Ini sesuai dengan URL bucket OSS yang dipilih saat menyebarkan sebagai Layanan EAS.
oss_url = "oss://examplebucket/data-oss"
for idx, img_path in enumerate(data['parameters']['image_url'].split(',')):
# Dapatkan path OSS aktual dari gambar yang dihasilkan.
img_oss_path = img_path.replace(mount_path, oss_url)
print(img_oss_path)Selain itu, gunakan format data LoRA dan ControlNet dalam data permintaan untuk mencapai fitur tertentu.
Konfigurasi Model LoRA dalam Data Permintaan
Saat mengirim permintaan layanan, tambahkan langsung <lora:yaeMikoRealistic_Genshin:1000> ke badan permintaan untuk menyertakan LoRA. Untuk informasi lebih lanjut, lihat LoRA.
Contoh konfigurasi badan permintaan sebagai berikut:
{
"prompt":"girls <lora:yaeMikoRealistic_Genshin:1>",
"steps":20,
"save_images":true
}Gunakan Format Data ControlNet dalam Data Permintaan
Menggunakan format data ControlNet dalam data permintaan API menyederhanakan transformasi gambar umum, seperti mempertahankan orientasi horizontal atau vertikal. Untuk metode konfigurasi spesifik, lihat txt2img menggunakan format data ControlNet.
Memanggil Menggunakan API Asinkron
Setelah menyebarkan layanan Edisi API, Anda dapat mengirim permintaan API asinkron ke layanan tersebut. Klien tidak menunggu hasil secara sinkron, melainkan berlangganan dan menunggu server mendorong hasil setelah komputasi permintaan selesai. Lakukan langkah-langkah berikut:
Informasi Pemanggilan Kueri
Setelah layanan disebarkan, klik nama layanan untuk membuka halaman Overview.
Di area Basic Information, klik View Endpoint Information.
Pada halaman Invocation Information, beralih ke tab Asynchronous Invocation untuk memperoleh endpoint input jaringan publik dan Token.
Mengirim Permintaan
Klien mengirim permintaan ke server melalui API asinkron.
import requests
SERVICE_URL = "<Public 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"Job enqueued: {response.json()}")
Antrian asinkron memiliki batas ukuran untuk permintaan input dan hasil output, biasanya tidak melebihi 8 KB. Oleh karena itu, saat mengirim permintaan, penuhi dua kondisi berikut:
Jika data permintaan mencakup gambar, gunakan URL untuk mengirimkan informasi gambar. Stable Diffusion WebUI secara otomatis mengunduh dan mengurai data gambar ini secara internal.
Untuk memastikan hasil yang dikembalikan tidak berisi data gambar asli, gunakan save_dir untuk menentukan path penyimpanan gambar yang dihasilkan. Untuk detailnya, lihat Parameter tambahan yang didukung oleh operasi API.
Hasil Langganan
Klien menggunakan metode berlangganan. Setelah server selesai memproses permintaan, server secara otomatis mendorong hasil ke klien, memungkinkan komunikasi asinkron yang efisien.
from eas_prediction import QueueClient
# Sesuaikan format URL layanan dengan contoh: 112231234124214.cn-hangzhou.pai-eas.aliyuncs.com
SERVICE_URL = "<service_url>"
TOKEN = "<Token>"
# Nama layanan yang dikonfigurasi saat pembuatan layanan.
SERVICE_NAME = "<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"Tugas {result.tags.get('task_id')} selesai")
print(f"URL Gambar: {result.data}")EAS mendukung fitur baru berdasarkan API native Stable Diffusion WebUI. Tambahkan parameter opsional ke data permintaan untuk fungsionalitas yang lebih kaya atau kebutuhan khusus. Untuk detailnya, lihat Parameter tambahan yang didukung oleh operasi API.
Opsi Penyebaran Lanjutan
Penyebaran Kustom
Penyebaran Mandiri JSON
Instal Plugin untuk Fungsionalitas yang Ditingkatkan
Konfigurasikan plugin untuk Stable Diffusion WebUI guna mencapai fungsionalitas yang lebih beragam. PAI telah memasang banyak plugin, termasuk BeautifulPrompt yang dikembangkan oleh PAI, digunakan untuk bereksperimen dengan ekspansi dan keindahan prompt. Bagian ini menggunakan plugin BeautifulPrompt sebagai contoh untuk memperkenalkan instalasi dan penggunaannya.
Instal Plugin
Lihat dan instal plugin di tab Extensions pada halaman WebUI sebagai berikut:
Pada halaman WebUI, di bawah tab Extensions, periksa apakah BeautifulPrompt dipilih. Jika belum, pilih plugin tersebut dan klik Apply changes and reload UI untuk memuat ulang plugin BeautifulPrompt.

Saat menginstal plugin, halaman WebUI secara otomatis dimulai ulang. Setelah dimuat ulang, verifikasi inferensi.
Verifikasi Inferensi Menggunakan Plugin
Beralih ke tab BeautifulPrompt. Di kotak teks, masukkan prompt sederhana, lalu klik Generate untuk membuat prompt yang lebih detail.

PAI menyediakan beberapa model generasi prompt. Setiap model menghasilkan prompt yang sedikit berbeda, yaitu:
pai-bloom-1b1-text2prompt-sd-v2: Unggul dalam menghasilkan prompt untuk skenario kompleks.
pai-bloom-1b1-text2prompt-sd: Menghasilkan prompt yang menggambarkan objek tunggal.
Pilih model yang sesuai untuk menghasilkan prompt sesuai kebutuhan.

Pilih prompt yang akan digunakan, lalu klik to txt2img di sebelah kanan prompt.
Halaman secara otomatis dialihkan ke tab Text-to-Image dan mengisi otomatis area prompt.

Klik Generate untuk menghasilkan gambar di sisi kanan halaman WebUI.

Dibandingkan tanpa menggunakan plugin BeautifulPrompt, penggunaannya meningkatkan kualitas estetika gambar yang dihasilkan dan membantu menambahkan lebih banyak detail. Tabel berikut membandingkan efek penggunaan plugin BeautifulPrompt dalam skenario lain:
Input Prompt
Efek Tanpa BeautifulPrompt
Efek Dengan BeautifulPrompt
a cat


a giant tiger


FAQ
T: Bagaimana cara memasang direktori model dan output saya?
T: Apakah plugin yang diunduh dan file yang diunggah disimpan di instans jika konfigurasi tidak berubah?
T: Bagaimana jika layanan tetap macet dalam waktu lama?
T: Bagaimana cara mengganti bahasa default halaman WebUI ke Bahasa Inggris?
T: Bagaimana cara mengelola sistem file saya?
P: Kesalahan: Tidak ada berkas atau direktori seperti itu: 'data-oss/data-********.png'
T: Tidak dapat mengakses halaman WebUI.
Lampiran
Parameter yang Didukung Selama Startup Layanan
Parameter Umum
Parameter Umum
Deskripsi Fungsi
Rekomendasi Penggunaan
--bladeAktifkan akselerasi PAI-blade untuk meningkatkan kecepatan generasi gambar.
Aktifkan.
--filebrowserPlugin yang memungkinkan Anda mengunggah dan mengunduh model atau gambar.
Diaktifkan secara default.
--data-dir /code/stable-diffusion-webui/data-ossPath yang digunakan untuk pemasangan penyimpanan persisten.
Gunakan saat memasang penyimpanan persisten. Path awal default adalah
/code/stable-diffusion-webui/. Anda juga dapat menggunakan path relatif.--apiMode pemanggilan API WebUI.
Diaktifkan secara default.
--enable-nsfw-censorNonaktif secara default. Jika Anda memiliki persyaratan keamanan dan kepatuhan, aktifkan fitur deteksi pornografi.
Atur sesuai kebutuhan.
--always-hide-tabsTentukan tab tertentu untuk disembunyikan.
Atur sesuai kebutuhan.
--min-ram-reserved 40 --sd-dynamic-cacheAnda dapat menyimpan cache model besar Stable Diffusion ke memori.
Tidak ada.
Parameter Edisi Terkluster
CatatanModel besar ckpt dan ControlNet secara otomatis memuat file dari folder publik dan file kustom Anda.
Parameter Edisi Terkluster
Deskripsi Fungsi
Rekomendasi Penggunaan
--lora-dirTentukan direktori model LoRA publik, misalnya:
--lora-dir /code/stable-diffusion-webui/data-oss/models/Lora.Tidak dikonfigurasi secara default. Semua direktori LoRA pengguna diisolasi, dan hanya model LoRA di folder pengguna yang dimuat. Saat direktori tertentu ditentukan, semua pengguna secara bersamaan memuat model LoRA dari direktori publik dan folder pengguna mereka.
--vae-dirTentukan direktori model VAE publik, misalnya:
--vae-dir /code/stable-diffusion-webui/data-oss/models/VAE.Tidak dikonfigurasi secara default. Semua direktori VAE pengguna diisolasi, dan hanya model VAE di folder pengguna yang dimuat. Saat direktori tertentu ditentukan, semua pengguna hanya memuat model VAE dari direktori publik tersebut.
--gfpgan-dirTentukan direktori model GFPGAN publik, misalnya:
--gfpgan-dir /code/stable-diffusion-webui/data-oss/models/GFPGAN.Tidak dikonfigurasi secara default. Semua direktori GFPGAN pengguna diisolasi, dan hanya model GFPGAN di folder pengguna yang dimuat. Saat direktori tertentu ditentukan, semua pengguna hanya memuat model GFPGAN dari direktori publik tersebut.
--embeddings-dirTentukan direktori model embeddings publik, misalnya:
--embeddings-dir /code/stable-diffusion-webui/data-oss/embeddings.Tidak dikonfigurasi secara default. Semua direktori embeddings pengguna diisolasi, dan hanya model embeddings di folder pengguna yang dimuat. Saat direktori tertentu ditentukan, semua pengguna hanya memuat model embeddings dari direktori publik tersebut.
--hypernetwork-dirTentukan direktori model hypernetwork publik, misalnya:
--hypernetwork-dir /code/stable-diffusion-webui/data-oss/models/hypernetworks.Tidak dikonfigurasi secara default. Semua direktori hypernetwork pengguna diisolasi, dan hanya model hypernetwork di folder pengguna yang dimuat. Saat direktori tertentu ditentukan, semua pengguna hanya memuat model hypernetwork dari direktori publik tersebut.
--root-extensionsDirektori plugin menggunakan direktori bersama. Setelah menggunakan parameter ini, semua pengguna melihat plugin yang sama persis.
Gunakan parameter ini saat menginstal atau mengelola plugin secara terpusat.
Parameter Tambahan yang Didukung oleh Operasi API
EAS mendukung fitur baru berdasarkan API native Stable Diffusion WebUI. Selain parameter yang diperlukan, tambahkan parameter opsional ke operasi API untuk fungsionalitas yang lebih kaya atau kebutuhan khusus:
Tentukan model Stable Diffusion, model VAE, dan direktori penyimpanan.
Dukung parameter input melalui URL dan kembalikan kode status yang sesuai.
Akses gambar yang dihasilkan dan gambar yang sesuai dengan ControlNet melalui URL.
Contoh penggunaan spesifik sebagai berikut:
Contoh Permintaan dan Respons txt2img
Contoh format data permintaan sebagai berikut:
{
"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"
}Deskripsi parameter utama sebagai berikut:
sd_model_checkpoint: Menentukan parameter model Stable Diffusion dan mengaktifkan pergantian otomatis ke model besar.
sd_vae: Menentukan model VAE.
save_dir: Menentukan path penyimpanan untuk gambar yang dihasilkan.
Contoh permintaan API sinkron sebagai berikut:
# Panggil API sinkron untuk memverifikasi efek model.
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"
}'
Contoh format data respons sebagai berikut:
{
"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": ""
}Contoh permintaan API asinkron sebagai berikut:
# Kirim data langsung ke antrian asinkron.
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"
}'Contoh Format Data Permintaan img2img
Contoh format data permintaan sebagai berikut:
{
"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, # Langkah sampling
"seed": 111,
"subseed": 111, # Seed variasi
"subseed_strength": 0, # Kekuatan variasi
"seed_resize_from_h": 0, # Ubah ukuran seed dari tinggi
"seed_resize_from_w": 0, # Ubah ukuran seed dari lebar
"seed_enable_extras": false, # Ekstra
"sampler_name": "DDIM", # Metode sampling
"cfg_scale": 7.5, # Skala CFG
"restore_faces": true, # Pulihkan wajah
"tiling": false, # Ubin
"init_images": [], # string base64 gambar, default None
"mask_blur": 4, # Kabur mask
"resize_mode": 1, # 0 hanya ubah ukuran, 1 potong dan ubah ukuran, 2 ubah ukuran dan isi, 3 hanya ubah ukuran
"denoising_strength": 0.75, # Kekuatan penghilangan derau
"inpainting_mask_invert": 0, #int, indeks ['Inpaint masked', 'Inpaint not masked'], Mode mask
"inpainting_fill": 0, #indeks ['fill', 'original', 'latent noise', 'latent nothing'], Konten yang dimask
"inpaint_full_res": 0, # indeks ["Whole picture", "Only masked"], Area inpaint
"inpaint_full_res_padding": 32, #minimum=0, maximum=256, step=4, value=32, Padding hanya yang dimask, piksel
#"image_cfg_scale": 1, # diubah ukurannya berdasarkan skala
#"script_name": "Outpainting mk2", # Nama skrip yang digunakan. Jangan tambahkan bidang ini jika tidak digunakan.
#"script_args": ["Outpainting", 128, 8, ["left", "right", "up", "down"], 1, 0.05] # Parameter yang sesuai dengan skrip. Di sini, sesuai dengan: bidang tetap, piksel, mask_blur, arah, noise_q, variasi warna
}Contoh format data respons sebagai berikut:
{
"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 Menggunakan Format Data ControlNet
Format data permintaan sebagai berikut:
{
"alwayson_scripts": {
"sd_model_checkpoint": "deliberate_v2.safetensors", # Nama model, wajib
"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
}
]
}
},
# Parameter utama
"prompt": "girls",
"batch_size": 1,
"n_iter": 2,
"width": 576,
"height": 576,
"negative_prompt": "ugly, out of frame"
}Contoh format data respons sebagai berikut:
{
"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":""
}Referensi
Untuk informasi lebih lanjut tentang penagihan Elastic Algorithm Service, lihat Penagihan Elastic Algorithm Service.



