全部产品
Search
文档中心

Platform For AI:Gunakan Stable Diffusion web UI untuk menyebarkan layanan pelukis AI

更新时间:Nov 27, 2025

Stable Diffusion adalah model generasi citra berkualitas tinggi yang menghasilkan citra stabil beresolusi tinggi. Stable Diffusion WebUI sumber terbuka menyediakan antarmuka browser berbasis pustaka Gradio dan menawarkan berbagai alat untuk generasi citra. Platform for AI (PAI) Elastic Algorithm Service (EAS) menyediakan mode penyebaran berbasis skenario yang memungkinkan Anda menyebarkan layanan model Stable Diffusion WebUI hanya dengan mengonfigurasi beberapa parameter. Layanan yang telah disebarkan dapat digunakan untuk menghasilkan citra berdasarkan prompt teks. Topik ini menjelaskan cara menyebarkan dan memanggil layanan Stable Diffusion WebUI serta memberikan jawaban atas pertanyaan yang sering diajukan.

Fitur dan manfaat

Penyebaran EAS menyediakan fitur dan manfaat berikut:

  • Kemudahan penggunaan: Anda dapat dengan cepat menyebarkan layanan model siap pakai di EAS dan secara dinamis mengganti sumber daya dasar seperti GPU sesuai kebutuhan.

  • Fitur tingkat enterprise: Mekanisme layanan frontend dan backend yang terpisah mendukung banyak pengguna dalam penjadwalan multi-GPU, isolasi pengguna, dan pemisahan tagihan.

  • Ekstensi dan optimasi: PAI menyediakan edisi sumber terbuka Stable Diffusion WebUI, alat optimasi PAI-Blade, serta ekstensi FileBrowser dan ModelZoo. PAI-Blade meningkatkan optimasi kinerja. Ekstensi FileBrowser memungkinkan Anda mengunggah dan mengunduh model serta citra dari klien lokal. Ekstensi ModelZoo mempercepat pengunduhan model sumber terbuka.

Edisi penyebaran

Layanan Stable Diffusion WebUI tersedia dalam edisi berikut: Edisi Standar, Edisi API, WebUI Edisi Kluster, dan Edisi Serverless. Tabel berikut menjelaskan perbedaan antar edisi tersebut.

Skenario

Metode pemanggilan yang didukung

Penagihan

Edisi Standar

Direkomendasikan untuk pengujian dan verifikasi pengguna tunggal. Hanya berlaku untuk menyebarkan satu instans.

  • WebUI

  • Debugging online

  • Pemanggilan API (sinkron)

Anda ditagih berdasarkan konfigurasi penyebaran Anda. Untuk informasi selengkapnya, lihat Penagihan Elastic Algorithm Service (EAS).

Edisi API

Sistem akan secara otomatis mengubah layanan menjadi mode asinkron, cocok untuk skenario konkurensi tinggi.

Pemanggilan API (sinkron & asinkron)

WebUI Edisi Kluster

Cocok untuk skenario di mana banyak pengguna perlu menggunakan WebUI bersama-sama, seperti penggunaan kolaboratif oleh tim desain dalam perusahaan.

Web UI

Edisi Serverless

Cocok untuk skenario dengan fluktuasi permintaan signifikan, di mana layanan dapat melakukan penskalaan elastis secara otomatis berdasarkan volume permintaan Anda.

Web UI

Penyebaran layanan sepenuhnya gratis, dan Anda hanya ditagih berdasarkan durasi generasi citra.

  • Edisi API: Sistem secara otomatis menyebarkan edisi ini sebagai layanan asinkron dan membuat instans layanan antrian, sehingga memerlukan sumber daya CPU tambahan.

  • WebUI Edisi Kluster: Setiap pengguna memiliki lingkungan backend dan direktori kerja independen, memungkinkan berbagi GPU dan manajemen file yang efisien.

  • Edisi Serverless: Hanya tersedia di wilayah Tiongkok (Shanghai) dan Tiongkok (Hangzhou).

Jika penyebaran berbasis skenario tidak memenuhi kebutuhan layanan Anda, Anda dapat menggunakan image resmi yang sesuai untuk Edisi Standar, Edisi Kluster, dan Edisi API guna melakukan penyebaran model kustom yang mendukung lebih banyak fitur layanan. Untuk informasi selengkapnya, lihat Parameter untuk penyebaran kustom di konsol.

Prasyarat

  • Sistem file Apsara File Storage NAS (NAS) atau bucket Object Storage Service (OSS) telah dibuat untuk menyimpan file model dan citra yang dihasilkan.

    • Buat sistem file NAS tujuan umum. Untuk informasi selengkapnya, lihat Buat sistem file.

    • Buat bucket OSS. Untuk informasi selengkapnya, lihat Buat bucket.

  • Jika Anda memanggil layanan melalui operasi API, Anda harus mengonfigurasi variabel lingkungan. Untuk informasi selengkapnya, lihat Konfigurasikan kredensial akses.

Sebarkan layanan model

Metode penyebaran berikut didukung:

Metode 1: Penyebaran model berbasis skenario (direkomendasikan)

Metode ini berlaku untuk Edisi Standar, Edisi API, Edisi Kluster, dan Edisi Serverless. Lakukan langkah-langkah berikut:

  1. Login ke Konsol PAI. Pilih wilayah di bagian atas halaman, lalu pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).

  2. Pada halaman Elastic Algorithm Service (EAS), klik Deploy Service. Di bagian Scenario-based Model Deployment, klik AI Painting-SDWebUI Deployment.

  3. Pada halaman AI Painting - SD Web UI Deployment, konfigurasikan parameter kunci berikut.

    Parameter

    Deskripsi

    Basic Information

    Edition

    Lihat Deployment editions.

    Model Configuration

    Digunakan untuk menyimpan file model dan citra inferensi yang dihasilkan.

    Penting

    Konfigurasi model wajib untuk edisi API dan Kluster.

    Klik Add untuk mengonfigurasi model. Jenis konfigurasi berikut didukung:

    • Object Storage Service (OSS): OSS lebih nyaman untuk unggah dan unduh data serta dapat menghasilkan alamat akses Internet untuk citra yang dihasilkan. Namun, kecepatan pergantian model dan penyimpanan citra lebih lambat dibandingkan NAS. Konfigurasikan OSS sebagai path bucket OSS yang sudah ada.

    • File Storage (NAS): Mendukung pergantian model dan penyimpanan citra yang lebih cepat. Opsi ini hanya didukung untuk edisi berikut: Edisi Standar, Edisi API, dan WebUI Edisi Kluster.

      • NAS Mount Target: Pilih sistem file NAS dan titik pemasangan yang sudah ada.

      • NAS Source Path: Atur nilainya menjadi /.

    Dalam contoh ini, OSS digunakan.

    Resource Configuration

    Resource Configuration Selection

    Parameter ini hanya didukung untuk edisi berikut: Edisi Standar, Edisi API, dan WebUI Edisi Kluster.

    Pilih tipe GPU, untuk Resource Specification kami merekomendasikan menggunakan ml.gu7i.c16m60.1-gu30 (rasio harga-kinerja terbaik).

    Inference Acceleration

    Fitur akselerasi inferensi. Nilai yang valid:

    • PAI-Blade Inference Acceleration: PAI-Blade adalah alat optimasi inferensi tujuan umum yang disediakan oleh PAI. Alat ini mengoptimalkan model yang telah dilatih untuk mencapai kinerja inferensi optimal.

    • Open Source Framework XFormers Inference Acceleration: xFormers adalah alat akselerasi sumber terbuka berbasis Transformer yang dapat secara efektif mengurangi waktu generasi citra.

    • No Acceleration: Menunjukkan bahwa fitur akselerasi inferensi dinonaktifkan.

    VPC Configuration

    VPC

    Ketika Model Settings diatur ke File Storage (NAS), sistem secara otomatis mencocokkan virtual private cloud yang terhubung ke VPC tempat sistem file NAS berada. Tidak diperlukan modifikasi tambahan.

    VSwitch

    Security Group Name

  4. Setelah mengonfigurasi parameter, klik Deploy.

Metode 2: Penyebaran kustom

Metode ini berlaku untuk Edisi Standar, Edisi API, dan WebUI Edisi Kluster. Lakukan langkah-langkah berikut:

  1. Login ke Konsol PAI. Pilih wilayah di bagian atas halaman, lalu pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).

  2. Klik Deploy Service. Di bagian Custom Model Deployment, klik Custom Deployment.

  3. Pada halaman Custom Deployment, konfigurasikan parameter kunci berikut.

    Parameter

    Deskripsi

    Environment Context

    Deployment Mode

    • Untuk menyebarkan layanan Edisi Standar dan WebUI Edisi Kluster, pilih Image-based Deployment, dan pilih Enable Web App.

    • Untuk menyebarkan layanan Edisi API, pilih Image-based Deployment, dan pilih Asynchronous Services.

    Image Configuration

    Dalam daftar Official Images, pilih stable-diffusion-webui, dan pilih nomor versi tertinggi, di mana:

    • x.x-standard: Edisi Standar

    • x.x-api: Edisi API

    • x.x-cluster-webui: WebUI Edisi Kluster

    Catatan
    • Versi image sering diperbarui. Kami merekomendasikan Anda memilih versi terbaru.

    • Jika Anda ingin mengizinkan banyak pengguna menggunakan Stable Diffusion WebUI untuk menghasilkan citra, pilih versi x.x-cluster-webui.

    • Untuk informasi selengkapnya tentang skenario untuk setiap versi, lihat Deployment editions.

    Model Configuration

    Digunakan untuk menyimpan file model dan citra inferensi yang dihasilkan.

    Penting

    Konfigurasi model wajib untuk edisi API dan Kluster.

    Jenis konfigurasi berikut didukung:

    • OSS

      • Uri: Atur path OSS ke path bucket OSS yang sudah ada.

      • Mount Path: Atur ke /code/stable-diffusion-webui/data.

    • NAS

      • Select A File System: Pilih sistem file NAS yang telah tersedia.

      • Mount Target: Pilih titik pemasangan yang sudah ada.

      • File System Path: Atur ke /.

      • Mount Path: Atur ke /code/stable-diffusion-webui/data.

    • PAI Model

      • PAI Model: Pilih model PAI dan versi model.

      • Mount Path: Atur ke /code/stable-diffusion-webui/data.

    Dalam contoh ini, bucket OSS dipasang.

    Command To Run

    Setelah menyelesaikan konfigurasi di atas, sistem secara otomatis menghasilkan perintah run yang sesuai.

    • Setelah menentukan konfigurasi model, tambahkan parameter --data-dir ke perintah run untuk memasang data ke path tertentu pada instans layanan. Path tersebut harus sama dengan path mount, seperti --data-dir /code/stable-diffusion-webui/data.

    • (Opsional) Anda juga dapat menambahkan parameter --blade atau --xformers ke perintah run untuk mengaktifkan fitur akselerasi inferensi dan meningkatkan kecepatan generasi citra. Untuk informasi selengkapnya tentang parameter, lihat Parameter yang didukung saat startup layanan.

    Resource Information

    Deployment Resources

    Pilih tipe GPU, untuk Resource Specification kami merekomendasikan menggunakan ml.gu7i.c16m60.1-gu30 (rasio harga-kinerja terbaik).

    Service Registration

    Virtual Private Cloud (VPC)

    Ketika Model Settings diatur ke NAS, sistem secara otomatis mencocokkan virtual private cloud yang terhubung ke VPC tempat sistem file NAS berada. Tidak diperlukan modifikasi tambahan.

    VSwitch

    Security Group Name

  4. Setelah mengonfigurasi parameter, klik Deploy.

Metode 3: Penyebaran JSON

Anda dapat menyebarkan layanan Stable Diffusion WebUI menggunakan skrip JSON. Bagian berikut menjelaskan cara menggunakan JSON untuk menyebarkan layanan Edisi Standar dan Edisi API.

  1. Login ke Konsol PAI. Pilih wilayah di bagian atas halaman, lalu pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).

  2. Pada halaman Elastic Algorithm Service (EAS), klik Deploy Service, lalu di bagian Custom Model Deployment, klik JSON Deployment.

  3. Pada halaman JSON Deployment, konfigurasikan konten berikut dalam format JSON.

    Sebarkan layanan Edisi Standar

    {
        "metadata": {
            "instance": 1,
            "name": "sd_v32",
            "enable_webservice": true
        },
        "containers": [
            {
                "image": "eas-registry-vpc.<region>.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:4.2",
                "script": "./webui.sh --listen --port 8000 --skip-version-check --no-hashing --no-download-sd-model --skip-prepare-environment --api --filebrowser --data-dir=/code/stable-diffusion-webui/data",
                "port": 8000
            }
        ],
        "cloud": {
            "computing": {
                "instance_type": "ml.gu7i.c16m60.1-gu30",
                "instances": null
            },
            "networking": {
                "vpc_id": "vpc-t4nmd6nebhlwwexk2****",
                "vswitch_id": "vsw-t4nfue2s10q2i0ae3****",
                "security_group_id": "sg-t4n85ksesuiq3wez****"
            }
        },
        "storage": [
            {
                "oss": {
                    "path": "oss://examplebucket/data-oss",
                    "readOnly": false
                },
                "properties": {
                    "resource_type": "model"
                },
                "mount_path": "/code/stable-diffusion-webui/data"
            },
            {
                "nfs": {
                    "path": "/",
                    "server": "726434****-aws0.ap-southeast-1.nas.aliyuncs.com"
                },
                "properties": {
                    "resource_type": "model"
                },
                "mount_path": "/code/stable-diffusion-webui/data"
            }
        ]
    } 

    Perhatikan parameter berikut:

    Parameter

    Wajib

    Deskripsi

    metadata.name

    Ya

    Nama layanan model kustom, yang unik dalam wilayah yang sama.

    containers.image

    Ya

    Ganti <region> dengan ID wilayah saat ini. Misalnya, ganti variabel dengan cn-shanghai untuk Tiongkok (Shanghai). Untuk informasi tentang cara menanyakan ID wilayah, lihat Wilayah dan zona.

    storage

    Tidak

    Anda dapat memilih salah satu dari dua metode pemasangan berikut:

    • oss: Dibandingkan dengan NAS, OSS lebih nyaman untuk unggah dan unduh data serta dapat menghasilkan alamat akses Internet untuk citra yang dihasilkan. Namun, kecepatan pergantian model dan penyimpanan citra lebih lambat. Atur parameter storage.oss.path ke path bucket OSS yang sudah ada.

    • nas: NAS mendukung pergantian model dan penyimpanan citra yang lebih cepat. Atur parameter storage.nfs.server ke sistem file NAS yang sudah ada.

    Dalam contoh ini, OSS digunakan.

    cloud.networking

    Tidak

    Jika Anda mengatur parameter storage ke nas, Anda harus mengonfigurasi VPC, termasuk ID VPC, vSwitch, dan grup keamanan. VPC harus sama dengan VPC sistem file NAS tujuan umum.

    Sebarkan layanan Edisi API

    {
        "metadata": {
            "name": "sd_async",
            "instance": 1,
            "rpc.worker_threads": 1,
            "type": "Async"
        },
        "cloud": {
            "computing": {
                "instance_type": "ml.gu7i.c16m60.1-gu30",
                "instances": null
            },
            "networking": {
                "vpc_id": "vpc-bp1t2wukzskw9139n****",
                "vswitch_id": "vsw-bp12utkudylvp4c70****",
                "security_group_id": "sg-bp11nqxfd0iq6v5g****"
            }
        },
        "queue": {
            "cpu": 1,
            "max_delivery": 1,
            "memory": 4000,
            "resource": ""
        },
        "storage": [
            {
                "oss": {
                    "path": "oss://examplebucket/aohai-singapore/",
                    "readOnly": false
                },
                "properties": {
                    "resource_type": "model"
                },
                "mount_path": "/code/stable-diffusion-webui/data"
            },
            {
                "nfs": {
                    "path": "/",
                    "server": "0c9624****-fgh60.cn-hangzhou.nas.aliyuncs.com"
                },
                "properties": {
                    "resource_type": "model"
                },
                "mount_path": "/code/stable-diffusion-webui/data"
            }
        ],
        "containers": [
            {
                "image": "eas-registry-vpc.<region>.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:4.2",
                "script": "./webui.sh --listen --port 8000 --skip-version-check --no-hashing --no-download-sd-model --skip-prepare-environment --api-log --time-log --nowebui --data-dir=/code/stable-diffusion-webui/data",
                "port": 8000
            }
        ]
    } 

    Tabel berikut hanya menjelaskan parameter yang konfigurasinya berbeda dari penyebaran layanan Edisi Standar.

    Parameter

    Deskripsi

    Hapus parameter berikut:

    metadata.enable_webservice

    Hapus parameter ini untuk menonaktifkan webserver.

    containers.script

    Hapus opsi --filebrowser yang ditentukan dalam parameter containers.script untuk mempercepat startup layanan.

    Tambahkan parameter berikut:

    metadata.type

    Atur nilainya ke Async untuk mengaktifkan layanan asinkron.

    metadata.rpc.worker_threads

    Atur nilainya ke 1 untuk memungkinkan satu instans hanya memproses satu permintaan dalam satu waktu.

    queue.max_delivery

    Atur nilainya ke 1 untuk menonaktifkan percobaan ulang setelah terjadi kesalahan.

    containers.script

    Konfigurasi containers.script menambahkan --nowebui (untuk mempercepat kecepatan startup) dan --time-log (untuk mencatat waktu respons antarmuka).

    Untuk informasi selengkapnya tentang konfigurasi parameter, lihat Sebarkan layanan Edisi Standar.

  4. Klik Deploy.

Panggil layanan

Panggil layanan menggunakan web UI

Anda dapat menggunakan web UI untuk memanggil layanan Edisi Standar, WebUI Edisi Kluster, dan Edisi Serverless. Lakukan langkah-langkah berikut:

  1. Setelah layanan disebarkan, klik View Web App di kolom Service Type layanan target.

  2. Lakukan inferensi model.

    Pada tab Txt2img halaman Stable Diffusion WebUI, masukkan prompt positif, seperti cute dog, lalu klik Generate. Gambar berikut menunjukkan citra yang dihasilkan:

    image

Panggil layanan menggunakan operasi API

Anda dapat menggunakan operasi API untuk memanggil layanan Edisi Standar atau Edisi API. Pemanggilan API mendukung panggilan sinkron dan asinkron. Layanan Edisi Standar hanya mendukung panggilan sinkron, sedangkan layanan Edisi API mendukung kedua jenis panggilan tersebut.

  • Panggilan sinkron: Jika Anda mengirim permintaan sinkron, klien menghentikan eksekusi dan menunggu hasil dikembalikan.

  • Panggilan asinkron: Klien menggunakan layanan antrian EAS untuk mengirim permintaan ke antrian input dan berlangganan hasil inferensi di antrian output.

Panggilan sinkron

Setelah menyebarkan layanan Edisi Standar atau Edisi API, lakukan langkah-langkah berikut untuk mengirim permintaan sinkron.

  1. Dapatkan informasi pemanggilan.

    1. Setelah layanan disebarkan, klik nama layanan untuk membuka halaman Overview.

    2. Di bagian Basic Information, klik View Call Information.

    3. Pada halaman Invocation Information, dapatkan titik akhir layanan dan token.

      • Jika layanan adalah Edisi API, Anda dapat memperoleh titik akhir layanan dan token di tab Synchronous Call.image

      • Untuk layanan Edisi Standar, lihat gambar berikut untuk memperoleh titik akhir layanan dan token.image

  2. Gunakan salah satu metode berikut untuk mengirim permintaan sinkron.

    Gunakan perintah cURL untuk mengirim permintaan layanan

    Kode contoh:

    curl --location --request POST '<service_url>/sdapi/v1/txt2img' \
    --header 'Authorization: <token>' \
    --header 'Content-Type: application/json' \
    --data-raw '{
      "prompt":"cute dog ",
      "steps":20
    }'

    Di mana:

    • <service_url>: Ganti dengan titik akhir layanan yang Anda peroleh di Langkah 1. Anda perlu menghapus / di akhir titik akhir.

    • <token>: Atur parameter ini ke token layanan yang Anda peroleh di Langkah 1.

    Setelah menjalankan perintah, sistem mengembalikan citra yang dikodekan Base64.

    Gunakan Python untuk mengirim permintaan layanan

    Lihat API untuk mengirim permintaan layanan.

    • Contoh 1 (direkomendasikan): Kami merekomendasikan Anda memasang bucket OSS ke layanan EAS untuk menyimpan citra yang dihasilkan. Dalam contoh berikut, path mount OSS digunakan dalam badan permintaan untuk menyimpan citra ke OSS, dan SDK oss2 digunakan untuk mengunduh citra dari OSS ke perangkat lokal Anda.

      import requests
      import oss2
      from oss2.credentials import EnvironmentVariableCredentialsProvider
      
      # Langkah 1: Kirim permintaan. Citra yang dihasilkan disimpan ke OSS.
      url = "<service_url>"
      
      # Pasangan Kunci Akses akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi di OSS adalah operasi berisiko tinggi. Kami merekomendasikan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat Pengguna RAM, login ke konsol RAM.
      auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
      
      # Dalam contoh ini, endpoint wilayah Tiongkok (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
      bucket = oss2.Bucket(auth, '<endpoint>', '<examplebucket>')
      
      payload = {
          "alwayson_scripts": {
              "sd_model_checkpoint": "deliberate_v2.safetensors",
              "save_dir": "/code/stable-diffusion-webui/data/outputs"
          },
          "steps": 30,
          "prompt": "girls",
          "batch_size": 1,
          "n_iter": 2,
          "width": 576,
          "height": 576,
          "negative_prompt": "ugly, out of frame"
      }
      
      session = requests.session()
      session.headers.update({"Authorization": "<token>"})
      
      response = session.post(url=f'{url}/sdapi/v1/txt2img', json=payload)
      if response.status_code != 200:
          raise Exception(response.content)
      
      data = response.json()
      
      
      # Langkah 2: Dapatkan citra dari OSS dan unduh citra ke perangkat lokal Anda.
      
      # Konfigurasi mount_path untuk OSS yang Anda tentukan saat menyebarkan layanan.
      mount_path = "/code/stable-diffusion-webui/data"
      
      # Path OSS yang Anda tentukan saat menyebarkan layanan.
      oss_url = "oss://examplebucket/data-oss"
      
      for idx, img_path in enumerate(data['parameters']['image_url'].split(',')):
          # Dapatkan URL aktual citra yang dihasilkan di OSS.
          img_oss_path = img_path.replace(mount_path, oss_url)
          print(idx, img_oss_path, url)
      
          # Unduh objek OSS ke sistem file lokal. Ganti <examplebucket> dengan nama bucket OSS yang Anda buat.
          bucket.get_object_to_file(img_oss_path[len("oss://examplebucket/"):], f'output-{idx}.png')

      Tabel berikut menjelaskan parameter kunci:

      Konfigurasi

      Deskripsi

      url

      Ganti <service_url> dengan titik akhir layanan yang Anda peroleh di Langkah 1. Anda perlu menghapus / di akhir titik akhir.

      bucket

      Di mana:

      • <endpoint> mengacu pada Endpoint OSS yang dikonfigurasi. Misalnya: Endpoint untuk wilayah Tiongkok (Shanghai) adalah http://oss-cn-shanghai.aliyuncs.com. Jika layanan Anda disebarkan di wilayah lain, konfigurasikan parameter sesuai kebutuhan. Untuk informasi selengkapnya, lihat Wilayah dan endpoint OSS.

      • Ganti <examplebucket> dengan nama bucket OSS yang Anda buat.

      <token>

      Atur parameter ini ke token yang Anda peroleh di Langkah 1.

      mount_path

      Path mount OSS yang Anda konfigurasi saat menyebarkan layanan.

      oss_url

      Path penyimpanan OSS yang Anda konfigurasi saat menyebarkan layanan.

      Jika kode berhasil dijalankan, hasil berikut dikembalikan. Anda dapat membuka Konsol OSS dan melihat citra yang dihasilkan di direktori outputs penyimpanan yang Anda pasang saat menyebarkan layanan.

      0 /code/stable-diffusion-webui/data/outputs/txt2img-grids/2024-06-26/grid-093546-9ad3f23e-a5c8-499e-8f0b-6effa75bd04f.png oss://examplebucket/data-oss/outputs/txt2img-grids/2024-06-26/grid-093546-9ad3f23e-a5c8-499e-8f0b-6effa75bd04f.png
      1 /code/stable-diffusion-webui/data/outputs/txt2img-images/2024-06-26/093536-ab4c6ab8-880d-4de6-91d5-343f8d97ea3c-3257304074.png oss://examplebucket/data-oss/outputs/txt2img-images/2024-06-26/093536-ab4c6ab8-880d-4de6-91d5-343f8d97ea3c-3257304074.png
      2 /code/stable-diffusion-webui/data/outputs/txt2img-images/2024-06-26/093545-6e6370d7-d41e-4105-960a-b4739af30c0d-3257304075.png oss://examplebucket/data-oss/outputs/txt2img-images/2024-06-26/093545-6e6370d7-d41e-4105-960a-b4739af30c0d-3257304075.png
    • Contoh 2: Simpan citra ke path lokal. Jalankan kode Python berikut untuk mendapatkan citra yang dikodekan Base64 dan menyimpan file citra ke direktori lokal.

      import requests
      import io
      import base64
      from PIL import Image, PngImagePlugin
      
      url = "<service_url>"
      
      payload = {
          "prompt": "puppy dog",
          "steps": 20,
          "n_iter": 2
      }
      
      session = requests.session()
      session.headers.update({"Authorization": "<token>"})
      
      
      response = session.post(url=f'{url}/sdapi/v1/txt2img', json=payload)
      if response.status_code != 200:
          raise Exception(response.content)
      
      data = response.json()
      
      # Anda dapat memperoleh citra yang dikodekan Base64 dari permintaan sinkron, tetapi kami merekomendasikan Anda memperoleh URL citra sebagai gantinya.
      for idx, im in enumerate(data['images']):
          image = Image.open(io.BytesIO(base64.b64decode(im.split(",", 1)[0])))
      
          png_payload = {
              "image": "data:image/png;base64," + im
          }
          resp = session.post(url=f'{url}/sdapi/v1/png-info', json=png_payload)
      
          pnginfo = PngImagePlugin.PngInfo()
          pnginfo.add_text("parameters", resp.json().get("info"))
          image.save(f'output-{idx}.png', pnginfo=pnginfo)
      

      Di mana:

      • <service_url>: Atur parameter ini ke titik akhir layanan yang Anda peroleh di Langkah 1. Hapus / di akhir.

      • <token>: Ganti dengan token yang Anda peroleh di Langkah 1.

    Anda juga dapat menggunakan data LoRA dan ControlNet dalam permintaan untuk mengaktifkan fungsionalitas tertentu.

    Konfigurasi LoRA

    Saat mengirim permintaan layanan, Anda dapat menambahkan <lora:yaeMikoRealistic_Genshin:1000> dalam badan permintaan untuk menggunakan model LoRA. Untuk informasi selengkapnya, lihat LoRA.

    Badan permintaan contoh:

    {
      "prompt":"girls <lora:yaeMikoRealistic_Genshin:1>",
      "steps":20,
      "save_images":true
    }

    Konfigurasi ControlNet

    Anda dapat menggunakan format data ControlNet dalam permintaan API untuk dengan mudah melakukan transformasi umum pada citra yang dihasilkan, seperti menjaga orientasi citra tetap horizontal atau vertikal. Untuk informasi selengkapnya tentang metode konfigurasi, lihat Contoh: txt2img dengan ControlNet.

    Pada halaman Invocation Method, ambil titik akhir layanan dan Token.

    • Jika layanan adalah versi API, Anda dapat menemukan titik akhir layanan dan token di tab Synchronous Call.image

    • Jika layanan adalah Edisi Standar, Anda dapat menemukan titik akhir layanan dan token seperti yang ditunjukkan pada gambar berikut.image

Panggilan asinkron

Setelah menyebarkan layanan Edisi API, Anda dapat mengirim permintaan asinkron ke layanan tersebut. Klien berlangganan hasil inferensi di antrian output. Lakukan langkah-langkah berikut:

  1. Dapatkan informasi pemanggilan.

    Klik Invocation Method di kolom Service Type layanan. Di tab Asynchronous Call, lihat titik akhir layanan dan token.image

  2. Kirim permintaan asinkron. Anda dapat menggunakan SDK untuk Python atau SDK untuk Java.

    Penting
    • Layanan antrian mensyaratkan bahwa ukuran antrian input atau output tidak boleh melebihi 8 KB. Perhatikan hal-hal berikut:

      • Jika data permintaan berisi citra, kami merekomendasikan Anda menggunakan URL untuk meneruskan informasi citra. SD WebUI secara otomatis mengunduh dan mengurai data citra.

      • Untuk memastikan respons tidak berisi data citra asli, kami merekomendasikan Anda menggunakan parameter save_dir untuk menentukan path tempat citra yang dihasilkan disimpan. Untuk informasi selengkapnya, lihat Parameter konfigurasi tambahan untuk operasi API.

    • Secara default, EAS tidak dapat terhubung ke Internet. Jika Anda menggunakan parameter image_link untuk menentukan URL citra dari internet, Anda harus mengonfigurasi akses jaringan publik seperti yang dijelaskan di Pengaturan jaringan EAS agar layanan dapat mengakses citra.

    Metode 1: Gunakan SDK untuk Python

    Kode contoh:

    import requests
    
    url = "<service_url>"
    session = requests.session()
    session.headers.update({"Authorization": "<token>"})
    
    prompts = ["cute dog", "cute cat", "cute girl"]
    
    for i in range(5):
        p = prompts[i % len(prompts)]
        payload = {
            "prompt": p,
            "steps": 20,
            "alwayson_scripts": {
                "save_dir": "/code/stable-diffusion-webui/data-oss/outputs/txt2img"
            },
        }
        response = session.post(url=f'{url}/sdapi/v1/txt2img?task_id=txt2img_{i}', json=payload)
        if response.status_code != 200:
            exit(f"send request error:{response.content}")
        else:
            print(f"send {p} success, index is {response.content}")
    
    
    for i in range(5):
        p = prompts[i % len(prompts)]
        payload = {
            "prompt": p,
            "steps": 20,
            "alwayson_scripts": {
                "save_dir": "/code/stable-diffusion-webui/data-oss/outputs/img2img",
                "image_link": "https://eas-cache-cn-hangzhou.oss-cn-hangzhou-internal.aliyuncs.com/stable-diffusion-cache/tests/boy.png",
            },
        }
        response = session.post(url=f'{url}/sdapi/v1/img2img?task_id=img2img_{i}', json=payload)
        if response.status_code != 200:
            exit(f"send request error:{response.content}")
        else:
            print(f"send {p} success, index is {response.content}")
    

    Di mana:

    • <service_url>: Ganti nilainya dengan titik akhir layanan yang Anda peroleh di Langkah 1. Hapus / di akhir titik akhir.

    • <token>: Ganti dengan token yang Anda peroleh di Langkah 1.

    Catatan
    • Semua antarmuka POST layanan WebUI didukung. Anda dapat mengirim permintaan ke path yang sesuai sesuai kebutuhan.

    • Jika Anda ingin meneruskan informasi kustom ke layanan, Anda dapat menentukan tag kustom menggunakan parameter URL. Misalnya, Anda dapat menambahkan parameter ?task_id=task_abc ke URL untuk menentukan tag bernama task_id, dan informasi tag dikembalikan di field tags output layanan.

    Jika kode berhasil dijalankan, sistem menghasilkan output berikut. Hasil aktual Anda mungkin berbeda.image.png

    Metode 2: Gunakan SDK untuk Java

    Maven digunakan untuk mengelola proyek Java. Oleh karena itu, Anda harus menambahkan dependensi klien yang diperlukan ke file pom.xml. Untuk informasi selengkapnya, lihat SDK untuk Java.

    Kode contoh:

    import com.aliyun.openservices.eas.predict.http.HttpConfig;
    import com.aliyun.openservices.eas.predict.http.QueueClient;
    import com.aliyun.openservices.eas.predict.queue_client.QueueUser;
    import org.apache.commons.lang3.tuple.Pair;
    
    import java.util.HashMap;
    
    public class SDWebuiAsyncPutTest {
        public static void main(String[] args) throws Exception {
            // Buat klien untuk layanan antrian.
            String queueEndpoint = "http://166233998075****.cn-hangzhou.pai-eas.aliyuncs.com";
            String queueToken = "xxxxx==";
            // Nama antrian input terdiri dari nama layanan dan path permintaan yang ingin Anda gunakan.
            String inputQueueName = "<service_name>/sdapi/v1/txt2img";
    
            // Buat antrian input. Setelah Anda menambahkan data permintaan ke antrian input, layanan inferensi secara otomatis membaca data permintaan dari antrian input.
            QueueClient inputQueue =
                new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser());
            // Hapus data antrian. Lakukan dengan hati-hati.
            // input_queue.clear();
    
            // Tambahkan data permintaan ke antrian input.
            int count = 5;
            for (int i = 0; i < count; ++i) {
                // Buat data permintaan.
                String data = "{\n" +
                    "    \"prompt\": \"cute dog\", \n" +
                    "    \"steps\":20,\n" +
                    "    \"alwayson_scripts\":{\n" +
                    "        \"save_dir\":\"/code/stable-diffusion-webui/data-oss/outputs/txt2img\"\n" +
                    "    }\n" +
                    "  }";
                // Buat tag kustom.
                HashMap<String, String> map = new HashMap<String, String>(1);
                map.put("task_id", "txt2img_" + i);
                Pair<Long, String> entry = inputQueue.put(data.getBytes(), map);
    
                System.out.println(String.format("send success, index is %d, request_id is %s", entry.getKey(), entry.getValue()));
                // Layanan antrian mendukung antrian multi-prioritas. Anda dapat menggunakan fungsi put untuk mengatur tingkat prioritas permintaan. Nilai default adalah 0. Nilai 1 menentukan prioritas tinggi.
                //  inputQueue.put(data.getBytes(), 0L, null);
            }
            // Tutup klien.
            inputQueue.shutdown();
    
    
            inputQueueName = "<service_name>/sdapi/v1/img2img";
            inputQueue =
                new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser());
            for (int i = 0; i < count; ++i) {
                // Buat data permintaan.
                String data = "{\n" +
                    "    \"prompt\": \"cute dog\", \n" +
                    "    \"steps\":20,\n" +
                    "    \"alwayson_scripts\":{\n" +
                    "        \"save_dir\":\"/code/stable-diffusion-webui/data-oss/outputs/img2img\",\n" +
                    "        \"image_link\":\"https://eas-cache-cn-hangzhou.oss-cn-hangzhou-internal.aliyuncs.com/stable-diffusion-cache/tests/boy.png\"\n" +
                    "    }\n" +
                    "  }";
                HashMap<String, String> map = new HashMap<String, String>(1);
                map.put("task_id", "img2img_" + i);
                Pair<Long, String> entry = inputQueue.put(data.getBytes(), map);
    
                System.out.println(String.format("send success, index is %d, requestId is %s", entry.getKey(), entry.getValue()));
            }
    
            // Tutup klien.
            inputQueue.shutdown();
        }
    }

    Di mana:

    • queueEndpoint: Konfigurasikan sebagai titik akhir layanan yang diperoleh di Langkah 1. Rujuk kode contoh untuk mengonfigurasi parameter ini.

    • queueToken: Konfigurasikan sebagai informasi token layanan yang diperoleh di Langkah 1.

    • <service_name>: Ganti dengan nama layanan asinkron yang disebarkan.

    Catatan

    Jika Anda ingin meneruskan tag dalam layanan, Anda dapat mengatur parameter tag di fungsi put. Anda dapat merujuk kode contoh untuk penggunaan tag kustom. Informasi tag dikembalikan di field tag hasil output.

    Jika kode berhasil dijalankan, sistem menghasilkan output berikut. Hasil aktual Anda mungkin berbeda.

    send success, index is 21, request_id is 05ca7786-c24e-4645-8538-83d235e791fe
    send success, index is 22, request_id is 639b257a-7902-448d-afd5-f2641ab77025
    send success, index is 23, request_id is d6b2e127-eba3-4414-8e6c-c3690e0a487c
    send success, index is 24, request_id is 8becf191-962d-4177-8a11-7e4a450e36a7
    send success, index is 25, request_id is 862b2d8e-5499-4476-b3a5-943d18614fc5
    send success, index is 26, requestId is 9774a4ff-f4c8-40b7-ba43-0b1c1d3241b0
    send success, index is 27, requestId is fa536d7a-7799-43f1-947f-71973bf7b221
    send success, index is 28, requestId is e69bdd32-5c7b-4c8f-ba3e-e69d2054bf65
    send success, index is 29, requestId is c138bd8f-be45-4a47-a330-745fd1569534
    send success, index is 30, requestId is c583d4f8-8558-4c8d-95f7-9c3981494007
    
    Process finished with exit code 0

  3. Berlangganan hasil permintaan asinkron.

    Setelah server menyelesaikan pemrosesan permintaan terkait, server secara otomatis mendorong hasil ke klien untuk komunikasi asinkron yang efisien. Anda dapat menggunakan SDK untuk Python atau SDK untuk Java untuk berlangganan hasil.

    Metode 1: Gunakan SDK untuk Python

    Kode contoh:

    import json
    import oss2
    
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    from eas_prediction import QueueClient
    
    sink_queue = QueueClient('139699392458****.cn-hangzhou.pai-eas.aliyuncs.com', 'sd_async/sink')
    sink_queue.set_token('<token>')
    sink_queue.init()
    
    mount_path = "/code/stable-diffusion-webui/data-oss"
    oss_url = "oss://<examplebucket>/aohai-singapore"
    # Pasangan Kunci Akses akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi di OSS adalah operasi berisiko tinggi. Kami merekomendasikan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat Pengguna RAM, login ke konsol RAM.
    auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
    # Dalam contoh ini, endpoint wilayah Tiongkok (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
    bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<examplebucket>')
    
    
    watcher = sink_queue.watch(0, 5, auto_commit=False)
    for x in watcher.run():
        if 'task_id' in x.tags:
            print('index {} task_id is {}'.format(x.index, x.tags['task_id']))
        print(f'index {x.index} data is {x.data}')
        sink_queue.commit(x.index)
        try:
            data = json.loads(x.data.decode('utf-8'))
            for idx, path in enumerate(data['parameters']['image_url'].split(',')):
                url = path.replace(mount_path, oss_url)
                # Unduh objek OSS ke sistem file lokal.
                bucket.get_object_to_file(url[len("oss://<examplebucket>/"):], f'{x.index}-output-{idx}.png')
                print(f'save {url} to {x.index}-output-{idx}.png')
        except Exception as e:
            print(f'index {x.index} process data error {e}')
    

    Tabel berikut menjelaskan parameter kunci:

    Konfigurasi

    Deskripsi

    sink_queue

    • Ganti 139699392458****.cn-hangzhou.pai-eas.aliyuncs.com dengan titik akhir layanan dari alamat layanan yang Anda peroleh di langkah sebelumnya, mengikuti format yang ditunjukkan dalam kode contoh.

    • Ganti sd_async dengan nama layanan asinkron yang Anda sebarkan dalam format yang ditunjukkan dalam kode contoh.

    <token>

    Atur nilainya ke token layanan yang Anda peroleh di Langkah 1.

    oss_url

    Atur parameter ini ke path OSS yang Anda tentukan saat menyebarkan layanan.

    bucket

    Di mana:

    • http://oss-cn-hangzhou.aliyuncs.com mewakili Endpoint OSS yang dikonfigurasi menggunakan wilayah Tiongkok (Hangzhou) sebagai contoh. Jika layanan Anda disebarkan di wilayah lain, tentukan endpoint aktual Anda. Untuk informasi selengkapnya, lihat Wilayah dan endpoint OSS.

    • Ganti <examplebucket> dengan nama bucket OSS yang Anda buat.

    Catatan
    • Anda dapat melakukan operasi commit secara manual, atau atur auto_commit=True untuk melakukannya secara otomatis.

    • Jika klien layanan antrian berhenti mengonsumsi data, kami merekomendasikan Anda menutup klien untuk melepaskan sumber daya.

    • Anda juga dapat menggunakan perintah cURL atau memanggil API sinkron untuk berlangganan hasil. Untuk informasi selengkapnya, lihat Sebarkan layanan inferensi asinkron.

    Klien terus-menerus mendengarkan hasil dari server menggunakan metode watcher.run(). Jika server tidak mengembalikan hasil, klien terus menunggu. Jika server mengembalikan hasil, klien mencetak hasil tersebut. Berikut adalah hasil contoh. Hasil aktual Anda mungkin berbeda. Anda dapat membuka Konsol OSS untuk melihat citra yang dihasilkan di path penyimpanan OSS yang Anda tentukan saat menyebarkan layanan.

    index 1 task_id is txt2img_0
    index 1 data is b'{"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data/outputs/txt2img/txt2img-images/2024-07-01/075825-a2abd45f-3c33-43f2-96fb-****50329671-1214613912.png","seed":"1214613912","error_msg":"","image_mask_url":""},"info":"{\\"hostname\\": \\"***-8aff4771-5c86c8d656-hvdb8\\"}"}'
    save oss://examplebucket/xx/outputs/txt2img/txt2img-images/2024-07-01/075825-a2abd45f-3c33-43f2-96fb-****50329671-1214613912.png to 1-output-0.png
    index 2 task_id is txt2img_1
    index 2 data is b'{"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data/outputs/txt2img/txt2img-images/2024-07-01/075827-c61af78c-25f2-47cc-9811-****aa51f5e4-1934284737.png","seed":"1934284737","error_msg":"","image_mask_url":""},"info":"{\\"hostname\\": \\"***-8aff4771-5c86c8d656-hvdb8\\"}"}'
    save oss://examplebucket/xx/outputs/txt2img/txt2img-images/2024-07-01/075827-c61af78c-25f2-47cc-9811-****aa51f5e4-1934284737.png to 2-output-0.png
    index 3 task_id is txt2img_2
    index 3 data is b'{"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data/outputs/txt2img/txt2img-images/2024-07-01/075829-1add1f5c-5c61-4f43-9c2e-****9d987dfa-3332597009.png","seed":"3332597009","error_msg":"","image_mask_url":""},"info":"{\\"hostname\\": \\"***-8aff4771-5c86c8d656-hvdb8\\"}"}'
    save oss://examplebucket/xx/outputs/txt2img/txt2img-images/2024-07-01/075829-1add1f5c-5c61-4f43-9c2e-****9d987dfa-3332597009.png to 3-output-0.png
    index 4 task_id is txt2img_3
    index 4 data is b'{"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data/outputs/txt2img/txt2img-images/2024-07-01/075832-2674c2d0-8a93-4cb5-9ff4-****46cec1aa-1250290207.png","seed":"1250290207","error_msg":"","image_mask_url":""},"info":"{\\"hostname\\": \\"***-8aff4771-5c86c8d656-hvdb8\\"}"}'
    save oss://examplebucket/xx/outputs/txt2img/txt2img-images/2024-07-01/075832-2674c2d0-8a93-4cb5-9ff4-****46cec1aa-1250290207.png to 4-output-0.png
    index 5 task_id is txt2img_4
    index 5 data is b'{"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data/outputs/txt2img/txt2img-images/2024-07-01/075834-8bb15707-ff0d-4dd7-b2da-****27717028-1181680579.png","seed":"1181680579","error_msg":"","image_mask_url":""},"info":"{\\"hostname\\": \\"***-8aff4771-5c86c8d656-hvdb8\\"}"}'
    save oss://examplebucket/xx/outputs/txt2img/txt2img-images/2024-07-01/075834-8bb15707-ff0d-4dd7-b2da-****27717028-1181680579.png to 5-output-0.png

    Metode 2: Gunakan SDK untuk Java

    Kode contoh:

    import com.aliyun.openservices.eas.predict.http.HttpConfig;
    import com.aliyun.openservices.eas.predict.http.QueueClient;
    import com.aliyun.openservices.eas.predict.queue_client.DataFrame;
    import com.aliyun.openservices.eas.predict.queue_client.QueueUser;
    import com.aliyun.openservices.eas.predict.queue_client.WebSocketWatcher;
    
    public class SDWebuiAsyncWatchTest {
        public static void main(String[] args) throws Exception {
            // Buat klien untuk layanan antrian.
            String queueEndpoint = "http://166233998075****.cn-hangzhou.pai-eas.aliyuncs.com";
            String queueToken = "xxxxx==";
            // Nama antrian output terdiri dari nama layanan dan "/sink".
            String sinkQueueName = "<service_name>/sink";
    
            // Antrian output. Layanan inferensi memproses data input dan menulis hasil ke antrian output.
            QueueClient sinkQueue =
                new QueueClient(queueEndpoint, sinkQueueName, queueToken, new HttpConfig(), new QueueUser());
    
            // Hapus data antrian. Lakukan dengan hati-hati.
            //  sinkQueue.clear();
    
            // Berlangganan antrian dan dapatkan data antrian.
            WebSocketWatcher watcher = sinkQueue.watch(0L, 5L, false, false, null);
            try {
                while (true) {
                    DataFrame df = watcher.getDataFrame();
                    if (df.getTags().containsKey("task_id")) {
                        System.out.println(String.format("task_id = %s", df.getTags().get("task_id")));
                    }
                    System.out.println(String.format("index = %d, data = %s, requestId = %s", df.getIndex(), new String(df.getData()), df.getTags().get("requestId")));
                    sinkQueue.commit(df.getIndex());
                }
            } catch (Exception e) {
                System.out.println("watch error:" + e.getMessage());
                e.printStackTrace();
                watcher.close();
            }
    
            // Tutup klien.
            sinkQueue.shutdown();
        }
    }

    Di mana:

    • queueEndpoint: Konfigurasikan sebagai titik akhir layanan yang diperoleh di Langkah 1. Rujuk kode contoh untuk mengonfigurasi parameter ini.

    • queueToken: Konfigurasikan sebagai informasi token layanan yang diperoleh di Langkah 1.

    • <service_name>: Ganti dengan nama layanan asinkron yang disebarkan.

    Catatan
    • Anda dapat melakukan commit data secara manual, atau atur auto_commit=True untuk melakukan commit data secara otomatis.

    • Jika klien layanan antrian berhenti mengonsumsi data, kami merekomendasikan Anda menutup klien untuk melepaskan sumber daya.

    • Anda juga dapat menggunakan perintah cURL atau memanggil API sinkron untuk berlangganan hasil. Untuk informasi selengkapnya, lihat Sebarkan layanan inferensi asinkron.

    Klien menggunakan metode watcher.getDataFrame() untuk terus-menerus mendengarkan hasil dari server. Jika server tidak mengembalikan hasil, klien terus menunggu. Jika server mengembalikan hasil, klien mencetak hasil tersebut. Berikut menunjukkan hasil contoh. Hasil aktual Anda mungkin berbeda. Anda dapat membuka Konsol OSS dan melihat citra yang dihasilkan di path yang sesuai.

    2023-08-04 16:17:31,497 INFO [com.aliyun.openservices.eas.predict.queue_client.WebSocketWatcher] - WebSocketClient Successfully Connects to Server: 1396993924585947.cn-hangzhou.pai-eas.aliyuncs.com/116.62.XX.XX:80
    task_id = txt2img_0
    index = 21, data = {"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data-oss/outputs/txt2img/txt2img-images/2023-08-04/54363a9d-24a5-41b5-b038-2257d43b8e79-412510031.png","seed":"412510031","error_msg":"","total_time":2.5351321697235107},"info":""}, requestId = 05ca7786-c24e-4645-8538-83d235e791fe
    task_id = txt2img_1
    index = 22, data = {"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data-oss/outputs/txt2img/txt2img-images/2023-08-04/0c646dda-4a53-43f4-97fd-1f507599f6ae-2287341785.png","seed":"2287341785","error_msg":"","total_time":2.6269655227661133},"info":""}, requestId = 639b257a-7902-448d-afd5-f2641ab77025
    task_id = txt2img_2
    index = 23, data = {"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data-oss/outputs/txt2img/txt2img-images/2023-08-04/4d542f25-b9cc-4548-9db2-5addd0366d32-1158414078.png","seed":"1158414078","error_msg":"","total_time":2.6604185104370117},"info":""}, requestId = d6b2e127-eba3-4414-8e6c-c3690e0a487c
    task_id = txt2img_3

    Setelah mengirim permintaan asinkron dan berlangganan hasilnya, Anda dapat menggunakan metode search() untuk menanyakan status permintaan. Untuk informasi selengkapnya, lihat SDK untuk Python dan SDK untuk Java.

EAS mendukung fitur baru di atas API Stable Diffusion WebUI native. Anda dapat menambahkan parameter opsional dalam data permintaan untuk mengaktifkan fitur lebih lanjut atau memenuhi kebutuhan kustom. Untuk informasi selengkapnya, lihat Parameter konfigurasi tambahan untuk operasi API.

Instal ekstensi untuk fitur yang ditingkatkan

Anda dapat mengonfigurasi ekstensi untuk Stable Diffusion WebUI guna mengaktifkan berbagai fitur. PAI menyediakan berbagai ekstensi preset, seperti ekstensi BeautifulPrompt yang digunakan untuk memperluas dan memoles prompt. Bagian berikut menggunakan ekstensi BeautifulPrompt sebagai contoh untuk menjelaskan cara menginstal dan menggunakan ekstensi.

Instal ekstensi

Anda dapat melihat dan menginstal ekstensi di tab Extensions halaman web UI. Lakukan langkah-langkah berikut:

  1. Di daftar layanan, klik View Web App di kolom Service Type layanan target untuk memulai web UI.image

  2. Di tab Extensions halaman web UI, periksa apakah BeautifulPrompt dipilih. Jika tidak dipilih, pilih ekstensi tersebut dan klik Apply And Restart UI untuk memuat ulang ekstensi BeautifulPrompt.image

    Saat Anda menginstal ekstensi, halaman WebUI akan secara otomatis restart. Setelah dimuat ulang, Anda dapat melakukan verifikasi inferensi.

Gunakan ekstensi untuk verifikasi inferensi

  1. Di tab BeautifulPrompt, masukkan prompt sederhana di kotak teks dan klik Generate untuk menghasilkan prompt yang lebih detail.image

    PAI menyediakan beberapa model generasi prompt. Prompt yang dihasilkan oleh setiap model berbeda:

    • pai-bloom-1b1-text2prompt-sd-v2: Unggul dalam menghasilkan prompt untuk skenario kompleks.

    • pai-bloom-1b1-text2prompt-sd: Menghasilkan prompt yang menggambarkan objek tunggal.

    Anda dapat memilih model yang sesuai untuk menghasilkan prompt berdasarkan kebutuhan skenario Anda.image

  2. Pilih Prompt yang ingin Anda gunakan, lalu klik to txt2img di sebelah Prompt.

    Halaman secara otomatis beralih ke tab Text-to-image, dan area Prompt diisi secara otomatis.image

  3. Klik Generate untuk menghasilkan citra di sisi kanan halaman web UI.image

    Dibandingkan dengan tidak menggunakan ekstensi BeautifulPrompt, penggunaan ekstensi ini dapat meningkatkan estetika citra yang dihasilkan dan membantu Anda menambahkan lebih banyak detail. Perbandingan efek sebelum dan sesudah menggunakan ekstensi BeautifulPrompt dalam skenario lain adalah sebagai berikut:

    Input prompt

    Efek tanpa BeautifulPrompt

    Dengan BeautifulPrompt

    a cat

    image.png

    image.png

    a giant tiger

    image.png

    image.png

FAQ

Bagaimana cara menggunakan model dan direktori output saya?

Setelah layanan disebarkan, sistem secara otomatis membuat struktur direktori berikut di ruang penyimpanan OSS atau NAS yang dipasang:image

Di mana:

  • models: Direktori ini digunakan untuk menyimpan file model.

  • Setelah Anda mengirim permintaan inferensi, sistem secara otomatis menghasilkan file hasil ke direktori ini berdasarkan konfigurasi preset dalam kode API.

Untuk memuat dan menggunakan model baru, Anda dapat menyimpan model LoRA atau Stable Diffusion yang Anda unduh dari komunitas sumber terbuka atau latih di direktori yang ditentukan. Lakukan langkah-langkah berikut:

  1. Unggah file model ke subdirektori yang sesuai di direktori models penyimpanan yang dipasang. Untuk informasi selengkapnya, lihat Langkah 2: Unggah file.

  2. Di halaman Elastic Algorithm Service (EAS), klik image > Restart Service di kolom Actions layanan target. Setelah layanan restart, konfigurasi berlaku.

  3. Di halaman Stable Diffusion WebUI, ganti model dan lakukan inferensi model.

    image

Apa yang harus saya lakukan jika layanan membeku dalam waktu lama?

  • Anda dapat membuka kembali halaman aplikasi web Stable Diffusion atau restart layanan EAS untuk menyelesaikan masalah:

    • Klik View Web App di kolom Service Type layanan target untuk membuka kembali Stable Diffusion WebUI.

    • Klik image > Restart Service di kolom Actions layanan target untuk restart layanan EAS.

  • Jika masalah tetap berlanjut setelah restart, kemungkinan besar karena layanan perlu mengunduh konten seperti model atau ekstensi dari Internet. Secara default, EAS tidak terhubung ke Internet. Anda dapat memulai image atau memasang model secara offline. Namun, beberapa ekstensi memerlukan koneksi Internet untuk mengunduh konten. Dalam hal ini, kami merekomendasikan Anda memeriksa log untuk menemukan path unduhan model atau ekstensi, mengunduh model secara manual, mengunggahnya ke OSS, lalu memasangnya. Untuk informasi selengkapnya, lihat Bagaimana cara menggunakan model dan direktori output saya?. Jika Anda masih perlu terhubung ke Internet, lihat Pengaturan Jaringan EAS untuk mengonfigurasi akses jaringan publik.

Bagaimana cara mengubah bahasa default antarmuka aplikasi web ke Bahasa Inggris?

  1. Di halaman Stable Diffusion WebUI, klik Settings.

  2. Di panel navigasi sebelah kiri, klik User Interface. Di sisi kanan halaman, pada area Localization, pilih None.

  3. Di bagian atas halaman Stable Diffusion WebUI, klik Save Settings, lalu klik Reload Frontend.

    Muat ulang halaman WebUI, dan halaman akan beralih ke Bahasa Inggris.

Bagaimana cara mengelola sistem file saya?

Saat menyebarkan layanan Edisi Standar atau WebUI Edisi Kluster, sistem telah menambahkan parameter --filebrowser ke perintah run secara default. Anda dapat langsung mengelola sistem file melalui antarmuka WebUI. Lakukan langkah-langkah berikut:

  1. Setelah layanan disebarkan, klik View Web App di kolom Service Type.

  2. Di halaman Stable Diffusion WebUI, klik tab FileBrowser. Anda dapat melihat sistem file, atau mengunggah dan mengunduh file.

    image

Kesalahan: Tidak ada file atau direktori tersebut: 'data-oss/data-********.png'

  1. Periksa versi penyebaran. Jika ini adalah Edisi API (image: x.x-api) atau edisi cluster WebUI (image: x.x-cluster-webui), konfigurasi model wajib.

  2. Periksa path mount. Pastikan perintah startup menyertakan parameter --data-dir dan path-nya konsisten dengan path mount OSS.

    image

Apa yang dapat saya lakukan jika tidak dapat mengakses halaman WebUI

Harap periksa versi penyebaran layanan—Edisi API tidak mendukung akses WebUI. Untuk penyebaran kustom, perhatikan bahwa image x.x-api sesuai dengan Edisi API.

Lampiran

Parameter konfigurasi opsional saat membuat layanan

  • Parameter umum

    Parameter umum

    Deskripsi

    Rekomendasi penggunaan

    --blade

    Mengaktifkan PAI-Blade untuk mempercepat generasi citra.

    Kami merekomendasikan Anda mengaktifkan fitur ini.

    --filebrowser

    Memungkinkan Anda mengunggah dan mengunduh model atau citra.

    Secara default, fitur ini diaktifkan.

    --data-dir /code/stable-diffusion-webui/data-oss

    Path yang digunakan untuk memasang penyimpanan persisten.

    Digunakan saat memasang penyimpanan persisten. Path awal default adalah /code/stable-diffusion-webui/, atau Anda dapat menggunakan path relatif.

    --api

    Mode pemanggilan API dari web UI.

    Secara default, fitur ini diaktifkan.

    --enable-nsfw-censor

    Secara default, fitur ini dinonaktifkan. Jika Anda memerlukan kepatuhan keamanan, Anda dapat mengaktifkan fitur deteksi pornografi.

    Aktifkan fitur sesuai kebutuhan.

    --always-hide-tabs

    Sembunyikan tab tertentu.

    Aktifkan fitur sesuai kebutuhan.

    --min-ram-reserved 40 --sd-dynamic-cache

    Cache model Stable Diffusion ke memori.

    Tidak berlaku

  • Parameter Edisi Kluster

    Catatan

    Model ckpt dan ControlNet secara otomatis memuat file di direktori publik dan file kustom.

    Parameter Edisi Kluster

    Deskripsi

    Catatan penggunaan

    --lora-dir

    Tentukan direktori model LoRA publik, misalnya: --lora-dir /code/stable-diffusion-webui/data-oss/models/Lora.

    Secara default, parameter ini tidak dikonfigurasi. Semua direktori LoRA pengguna diisolasi dan hanya model LoRA di folder pengguna yang dimuat. Jika Anda menentukan direktori, semua pengguna memuat model LoRA di direktori publik dan model LoRA di folder pengguna.

    --vae-dir

    Tentukan direktori model VAE publik, misalnya: --vae-dir /code/stable-diffusion-webui/data-oss/models/VAE.

    Secara default, parameter ini tidak dikonfigurasi. Semua direktori VAE pengguna diisolasi dan hanya model VAE di folder pengguna yang dimuat. Jika Anda menentukan direktori, semua pengguna memuat model VAE di direktori publik.

    --gfpgan-dir

    Tentukan direktori model GFPGAN publik, misalnya: --gfpgan-dir /code/stable-diffusion-webui/data-oss/models/GFPGAN.

    Secara default, parameter ini tidak dikonfigurasi. Semua direktori GFPGAN pengguna diisolasi dan hanya model GFPGAN di folder pengguna yang dimuat. Jika Anda menentukan direktori, semua pengguna hanya memuat model GFPGAN di direktori publik.

    --embeddings-dir

    Tentukan direktori model embeddings publik, misalnya: --embeddings-dir /code/stable-diffusion-webui/data-oss/embeddings.

    Secara default, parameter ini tidak dikonfigurasi. Semua direktori embeddings pengguna diisolasi dan hanya model embedding di folder pengguna yang dimuat. Jika Anda menentukan direktori, semua pengguna memuat model embedding di direktori publik.

    --hypernetwork-dir

    Tentukan direktori model hypernetwork publik, misalnya: --hypernetwork-dir /code/stable-diffusion-webui/data-oss/models/hypernetworks.

    Secara default, parameter ini tidak dikonfigurasi. Semua direktori hypernetwork pengguna diisolasi dan hanya model hypernetwork di folder pengguna yang dimuat. Jika Anda menentukan direktori, semua pengguna hanya memuat model hypernetwork di direktori publik.

    --root-extensions

    Menggunakan direktori ekstensi sebagai direktori publik. Jika Anda mengonfigurasi parameter ini, semua pengguna dapat melihat ekstensi yang sama.

    Jika Anda ingin menginstal atau mengelola ekstensi secara terpusat, gunakan parameter ini.

Parameter apa saja yang dapat saya konfigurasi untuk operasi API?

EAS menambahkan dukungan untuk fitur baru ke API Stable Diffusion WebUI native. Selain parameter yang diperlukan, Anda dapat menambahkan parameter opsional ke permintaan API untuk mengaktifkan lebih banyak fungsionalitas dan memenuhi kebutuhan kustom:

  • Konfigurasikan model SD, model VAE, dan path untuk menyimpan citra yang dihasilkan.

  • Gunakan parameter URL untuk mengirim permintaan, yang kode statusnya dikembalikan.

  • Akses citra yang dihasilkan melalui URL, termasuk citra yang diproses oleh ControlNet.

Kode contoh:

Contoh permintaan dan respons Txt2img

Badan permintaan contoh:

{
      "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"
  }

Tabel berikut menjelaskan parameter kunci:

  • sd_model_checkpoint: Menentukan parameter model Stable Diffusion, yang dapat secara otomatis beralih ke model besar.

  • sd_vae: Menentukan model VAE.

  • save_dir: Menentukan path untuk menyimpan citra yang dihasilkan.

Permintaan sinkron contoh:

# Panggil API sinkron untuk menguji 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"
  }'

Format respons contoh:

{
  "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": ""
}

Permintaan asinkron contoh:

# Kirim data 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

Badan permintaan contoh:

{
    "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", # The name of the script. Skip this field if you do not use a script.
    #"script_args": ["Outpainting", 128, 8, ["left", "right", "up", "down"], 1, 0.05]  # The parameters of the script in the following order: fixed field, pixels, mask_blur, direction, noise_q, and color_variation.
}

Format respons contoh:

{
    "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":""
}

Format data Txt2img dengan ControlNet

Format permintaan contoh:

{
    "alwayson_scripts": {
        "sd_model_checkpoint": "deliberate_v2.safetensors", # The name of the model. 
        "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
                }
            ]
        }
    },
    # Key parameters.
    "prompt": "girls",          
    "batch_size": 1,                                            
    "n_iter": 2,                                                 
    "width": 576, 
    "height": 576,
    "negative_prompt": "ugly, out of frame"
}

Format respons contoh:

{
    "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 selengkapnya tentang penagihan EAS, lihat Penagihan Elastic Algorithm Service (EAS).