すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:Stable Diffusion WebUI を使用した AI 描画サービスのデプロイ

最終更新日:Nov 27, 2025

Stable Diffusion は、安定した高解像度の画像を生成する高品質な画像生成モデルです。オープンソースの Stable Diffusion WebUI は、Gradio ライブラリで開発されたブラウザインターフェイスを提供し、さまざまな画像生成ツールを備えています。Platform for AI (PAI) の Elastic Algorithm Service (EAS) は、いくつかのパラメーターを設定するだけで Stable Diffusion WebUI モデルサービスをデプロイできるシナリオベースのデプロイモードを提供します。このデプロイされたサービスを使用して、テキストプロンプトに基づいて画像を生成できます。このトピックでは、Stable Diffusion WebUI サービスのデプロイ方法と呼び出し方法について説明し、よくある質問への回答を提供します。

特徴と利点

EAS でのデプロイには、以下の特徴と利点があります:

  • 使いやすさ:EAS にてすぐに使用できるモデルサービスを迅速にデプロイし、必要に応じて GPU などの基盤となるリソースを動的に切り替えることができます。

  • エンタープライズレベルの機能:フロントエンドとバックエンドが分離されたサービスメカニズムにより、マルチ GPU スケジューリング、ユーザー隔離、料金分割など、複数ユーザーでの利用をサポートします。

  • 拡張機能と最適化:PAI は、オープンソース版の Stable Diffusion WebUI、PAI-Blade 最適化ツール、および FileBrowser と ModelZoo 拡張機能を提供します。PAI-Blade はパフォーマンスの最適化を向上させます。FileBrowser 拡張機能を使用すると、ローカルクライアントからモデルや画像をアップロードおよびダウンロードできます。ModelZoo 拡張機能は、オープンソースモデルのダウンロードを高速化します。

デプロイエディション

Stable Diffusion WebUI サービスは、Standard Edition、API Edition、Cluster Edition WebUI、および Serverless Edition を提供します。以下の表は、これらのエディション間の違いを説明しています。

シナリオ

サポートされる呼び出し方法

課金

Standard Edition

単一ユーザーのテストおよび検証に推奨されます。単一インスタンスのデプロイにのみ適用されます。

  • WebUI

  • オンラインデバッグ

  • API 呼び出し (同期)

デプロイ設定に基づいて課金されます。詳細については、「Elastic Algorithm Service (EAS) の課金」をご参照ください。

API Edition

システムはサービスを自動的に非同期モードに変換し、高い同時実行性が求められるシナリオに適しています。

API 呼び出し (同期および非同期)

Cluster Edition WebUI

企業内のデザインチームによる共同利用など、複数のユーザーが WebUI を一緒に使用する必要があるシナリオに適しています。

Web UI

Serverless Edition

ご利用のリクエストボリュームに応じてサービスが自動で弾性的にスケールするため、需要の変動が著しいシナリオに適しています。

Web UI

サービスのデプロイは完全に無料で、画像生成の時間に基づいてのみ課金されます。

  • API Edition: システムはこれを非同期サービスとして自動的にデプロイし、キューサービスインスタンスを作成するため、追加の CPU リソースが必要です。

  • Cluster Edition WebUI: 各ユーザーは独立したバックエンド環境と作業ディレクトリを持ち、効率的な GPU 共有とファイル管理を可能にします。

  • Serverless Edition: 中国 (上海) および中国 (杭州) リージョンでのみ利用可能です。

シナリオベースのデプロイがサービス要件を満たせない場合は、Standard、Cluster、API の各エディションに対応する公式イメージを使用して、より多くのサービス機能をサポートするカスタムモデルデプロイを実行できます。詳細については、「コンソールでのカスタムデプロイのパラメーター」をご参照ください。

前提条件

  • モデルファイルと生成された画像を保存するために、Apsara File Storage NAS (NAS) ファイルシステムまたは Object Storage Service (OSS) バケットが作成されていること。

  • API 操作を使用してサービスを呼び出す場合は、環境変数を設定する必要があります。詳細については、「アクセス認証情報の設定」をご参照ください。

モデルサービスのデプロイ

以下のデプロイ方法がサポートされています:

方法 1:シナリオベースのモデルデプロイ (推奨)

この方法は、Standard Edition、API Edition、Cluster Edition、および Serverless Edition に適用されます。次の手順を実行します:

  1. PAI コンソールにログインします。ページ上部でリージョンを選択し、目的のワークスペースを選択して [Elastic Algorithm Service (EAS)] をクリックします。

  2. [Elastic Algorithm Service (EAS)] ページで、[サービスをデプロイ] をクリックします。[シナリオベースのモデルデプロイ] セクションで、[AI 描画 - SDWebUI デプロイ] をクリックします。

  3. [AI 描画 - SD Web UI デプロイ] ページで、以下の主要なパラメーターを設定します。

    パラメーター

    説明

    基本情報

    エディション

    デプロイエディションをご参照ください。

    モデル設定

    モデルファイルと生成された推論画像を保存するために使用されます。

    重要

    API および Cluster エディションではモデル設定が必須です。

    [追加] をクリックしてモデルを設定します。以下の設定タイプがサポートされています:

    • [Object Storage Service (OSS)]:OSS はデータのアップロードとダウンロードがより便利で、生成された画像のインターネットアクセスアドレスを生成できます。ただし、モデルの切り替えや画像の保存速度は NAS よりも遅くなります。既存の OSS バケットのパスとして OSS を設定します。

    • [File Storage (NAS)]:より高速なモデル切り替えと画像保存をサポートします。このオプションは、Standard Edition、API Edition、および Cluster Edition WebUI のみでサポートされています。

      • [NAS マウントポイント]:既存の NAS ファイルシステムとマウントポイントを選択します。

      • [NAS ソースパス]:値を / に設定します。

    この例では、OSS を使用します。

    リソース設定

    リソース設定の選択

    このパラメーターは、Standard Edition、API Edition、および Cluster Edition WebUI のみでサポートされています。

    [GPU] タイプを選択し、[リソース仕様] には ml.gu7i.c16m60.1-gu30 (最高のコストパフォーマンス) を使用することを推奨します。

    推論アクセラレーション

    推論アクセラレーション機能。有効な値:

    • [PAI-Blade 推論アクセラレーション]:PAI-Blade は PAI が提供する汎用推論最適化ツールです。トレーニング済みのモデルを最適化して、最適な推論パフォーマンスを実現します。

    • [オープンソースフレームワーク XFormers 推論アクセラレーション]:xFormers は Transformer ベースのオープンソースアクセラレーションツールで、画像生成時間を効果的に短縮できます。

    • [アクセラレーションなし]:推論アクセラレーション機能が無効になっていることを示します。

    VPC 設定

    VPC

    [モデル設定][File Storage (NAS)] に設定されている場合、システムは NAS ファイルシステムが存在する VPC に接続されている VPC を自動的に照合します。追加の変更は必要ありません。

    VSwitch

    セキュリティグループ名

  4. パラメーターを設定した後、[デプロイ] をクリックします。

方法 2:カスタムデプロイ

この方法は、Standard Edition、API Edition、および Cluster Edition WebUI に適用されます。次の手順を実行します:

  1. PAI コンソールにログインします。ページ上部でリージョンを選択し、目的のワークスペースを選択して [Elastic Algorithm Service (EAS)] をクリックします。

  2. [サービスをデプロイ] をクリックします。[カスタムモデルデプロイ] セクションで、[カスタムデプロイ] をクリックします。

  3. [カスタムデプロイ] ページで、以下の主要なパラメーターを設定します。

    パラメーター

    説明

    環境コンテキスト

    デプロイモード

    • Standard Edition および Cluster Edition WebUI サービスをデプロイするには、[イメージベースのデプロイ] を選択し、[Web アプリを有効にする] を選択します。

    • API Edition サービスをデプロイするには、[イメージベースのデプロイ] を選択し、[非同期サービス] を選択します。

    イメージ設定

    [公式イメージ] リストで stable-diffusion-webui を選択し、最も高いバージョン番号を選択します。ここで:

    • x.x-standard: Standard Edition

    • x.x-api: API Edition

    • x.x-cluster-webui: Cluster Edition WebUI

    説明
    • イメージのバージョンは頻繁に更新されます。最新バージョンを選択することを推奨します。

    • 複数のユーザーが Stable Diffusion WebUI を使用して画像を生成できるようにする場合は、x.x-cluster-webui バージョンを選択してください。

    • 各バージョンのシナリオの詳細については、「デプロイエディション」をご参照ください。

    モデル設定

    モデルファイルと生成された推論画像を保存するために使用されます。

    重要

    API および Cluster エディションではモデル設定が必須です。

    以下の設定タイプがサポートされています:

    • OSS

      • Uri:OSS パスを既存の OSS バケットパスに設定します。

      • マウントパス/code/stable-diffusion-webui/data に設定します。

    • NAS

      • ファイルシステムを選択:既存の NAS ファイルシステムを選択します。

      • マウントポイント:既存のマウントポイントを選択します。

      • ファイルシステムパス/ に設定します。

      • マウントパス/code/stable-diffusion-webui/data に設定します。

    • PAI モデル

      • PAI モデル:PAI モデルとモデルバージョンを選択します。

      • マウントパス/code/stable-diffusion-webui/data に設定します。

    この例では、OSS バケットがマウントされています。

    実行コマンド

    上記の設定を完了すると、システムは対応する実行コマンドを自動的に生成します。

    • モデル設定を指定した後、実行コマンドに --data-dir パラメーターを追加して、データをサービスインスタンス上の指定されたパスにマウントします。パスはマウントパスと同じでなければなりません。例:--data-dir /code/stable-diffusion-webui/data

    • (オプション) 実行コマンドに --blade または --xformers パラメーターを追加して、推論アクセラレーション機能を有効にし、画像生成速度を向上させることもできます。パラメーターの詳細については、「サービス起動時にサポートされるパラメーター」をご参照ください。

    リソース情報

    デプロイリソース

    GPU タイプを選択し、[リソース仕様] には ml.gu7i.c16m60.1-gu30 (最高のコストパフォーマンス) を使用することを推奨します。

    サービス登録

    Virtual Private Cloud (VPC)

    [モデル設定] が NAS に設定されている場合、システムは NAS ファイルシステムが存在する VPC に接続されている VPC を自動的に照合します。追加の変更は必要ありません。

    VSwitch

    セキュリティグループ名

  4. パラメーターを設定した後、[デプロイ] をクリックします。

方法 3:JSON デプロイ

JSON スクリプトを使用して Stable Diffusion WebUI サービスをデプロイできます。以下のセクションでは、JSON を使用して Standard Edition および API Edition サービスをデプロイする方法について説明します。

  1. PAI コンソールにログインします。ページ上部でリージョンを選択し、目的のワークスペースを選択して [Elastic Algorithm Service (EAS)] をクリックします。

  2. [Elastic Algorithm Service (EAS)] ページで、[サービスをデプロイ] をクリックし、[カスタムモデルデプロイ] セクションで [JSON デプロイ] をクリックします。

  3. [JSON デプロイ] ページで、JSON 形式で以下の内容を設定します。

    Standard Edition サービスのデプロイ

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

    以下のパラメーターに注意してください:

    パラメーター

    必須

    説明

    metadata.name

    はい

    カスタムモデルサービスの名前。同じリージョン内で一意である必要があります。

    containers.image

    はい

    <region> を現在のリージョンの ID に置き換えます。たとえば、中国 (上海) の場合は cn-shanghai に置き換えます。リージョン ID のクエリ方法については、「リージョンとゾーン」をご参照ください。

    storage

    いいえ

    以下の 2 つのマウント方法のいずれかを選択できます:

    • oss:NAS と比較して、OSS はデータのアップロードとダウンロードがより便利で、生成された画像のインターネットアクセスアドレスを生成できます。ただし、モデルの切り替えや画像の保存速度は遅くなります。storage.oss.path パラメーターを既存の OSS バケットのパスに設定します。

    • nas:NAS はより高速なモデル切り替えと画像保存をサポートします。storage.nfs.server パラメーターを既存の NAS ファイルシステムに設定します。

    この例では、OSS を使用します。

    cloud.networking

    いいえ

    storage パラメーターを nas に設定した場合、VPC、vSwitch、およびセキュリティグループの ID を含む VPC を設定する必要があります。VPC は、汎用 NAS ファイルシステムの VPC と同じでなければなりません。

    API Edition サービスのデプロイ

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

    以下の表は、Standard Edition サービスのデプロイと設定が異なるパラメーターのみを説明しています。

    パラメーター

    説明

    以下のパラメーターを削除します:

    metadata.enable_webservice

    Web サーバーを無効にするためにこのパラメーターを削除します。

    containers.script

    containers.script パラメーターで指定されている --filebrowser オプションを削除して、サービスの起動を高速化します。

    以下のパラメーターを追加します:

    metadata.type

    値を Async に設定して、非同期サービスを有効にします。

    metadata.rpc.worker_threads

    値を 1 に設定して、単一インスタンスが一度に 1 つのリクエストのみを処理できるようにします。

    queue.max_delivery

    値を 1 に設定して、エラー発生後のリトライを無効にします。

    containers.script

    containers.script 設定に --nowebui (起動速度を高速化するため) と --time-log (インターフェイスの応答時間を記録するため) を追加します。

    パラメーター設定の詳細については、「Standard Edition サービスのデプロイ」をご参照ください。

  4. [デプロイ] をクリックします。

サービスの呼び出し

Web UI を使用したサービスの呼び出し

Web UI を使用して、Standard Edition、Cluster Edition WebUI、および Serverless Edition のサービスを呼び出すことができます。次の手順を実行します:

  1. サービスがデプロイされた後、対象サービスの [サービスタイプ] 列にある [Web アプリを表示] をクリックします。

  2. モデル推論を実行します。

    Stable Diffusion WebUI ページの [Txt2img] タブで、cute dog などのポジティブプロンプトを入力し、[生成] をクリックします。次の図は生成された画像を示しています:

    image

API 操作を使用したサービスの呼び出し

API 操作を使用して、Standard Edition または API Edition サービスを呼び出すことができます。API 呼び出しは、同期および非同期サービス呼び出しをサポートします。Standard Edition サービスは同期呼び出しのみをサポートします。API Edition サービスは、同期および非同期サービス呼び出しの両方をサポートします。

  • 同期呼び出し:同期リクエストを送信すると、クライアントは実行を一時停止し、結果が返されるのを待ちます。

  • 非同期呼び出し:クライアントは EAS のキューサービスを使用してリクエストを入力キューに送信し、出力キューで推論結果をサブスクライブします。

同期呼び出し

Standard Edition または API Edition サービスをデプロイした後、次の手順で同期リクエストを送信できます。

  1. 呼び出し情報を取得します。

    1. サービスがデプロイされた後、サービス名をクリックして [概要] ページに移動します。

    2. [基本情報] セクションで、[呼び出し情報を表示] をクリックします。

    3. [呼び出し情報] ページで、サービスエンドポイントとトークンを取得します。

      • サービスが API Edition の場合、[同期呼び出し] タブでサービスエンドポイントとトークンを取得できます。image

      • Standard Edition サービスの場合、次の図を参照してサービスエンドポイントとトークンを取得します。image

  2. 以下のいずれかの方法で同期リクエストを送信します。

    cURL コマンドを使用したサービスリクエストの送信

    サンプルコード:

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

    ここで:

    • <service_url>ステップ 1 で取得したサービスエンドポイントに置き換えます。エンドポイントの末尾にある / を削除する必要があります。

    • <token>ステップ 1 で取得したサービストークンにこのパラメーターを設定します。

    コマンドを実行すると、システムは Base64 エンコードされた画像を返します。

    Python を使用したサービスリクエストの送信

    API を参照してサービスリクエストを送信します。

    • 例 1 (推奨):EAS サービスに OSS バケットをマウントして、生成された画像を保存することを推奨します。以下の例では、リクエストボディで OSS マウントパスを使用して画像を OSS に保存し、oss2 SDK を使用して画像を OSS からローカルデバイスにダウンロードします。

      import requests
      import oss2
      from oss2.credentials import EnvironmentVariableCredentialsProvider
      
      # ステップ 1: リクエストを送信します。生成された画像は OSS に保存されます。
      url = "<service_url>"
      
      # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、高いリスクを伴う操作です。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。RAM ユーザーを作成するには、RAM コンソールにログインしてください。
      auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
      
      # この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の エンドポイントを指定してください。
      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()
      
      
      # ステップ 2: OSS から画像を取得し、オンプレミスのデバイスに画像をダウンロードします。
      
      # サービスをデプロイしたときに指定した OSS の mount_path 設定。
      mount_path = "/code/stable-diffusion-webui/data"
      
      # サービスをデプロイしたときに指定した OSS パス。
      oss_url = "oss://examplebucket/data-oss"
      
      for idx, img_path in enumerate(data['parameters']['image_url'].split(',')):
          # OSS で生成された画像の実際の URL を取得します。
          img_oss_path = img_path.replace(mount_path, oss_url)
          print(idx, img_oss_path, url)
      
          # OSS オブジェクトをオンプレミスのファイルシステムにダウンロードします。<examplebucket> を作成した OSS バケットの名前に置き換えます。
          bucket.get_object_to_file(img_oss_path[len("oss://examplebucket/"):], f'output-{idx}.png')

      以下の表は、主要なパラメーターを説明しています:

      設定

      説明

      url

      <service_url> をステップ 1 で取得したサービスエンドポイントに置き換えます。エンドポイントの末尾にある / を削除する必要があります。

      bucket

      ここで:

      • <endpoint> は設定された OSS エンドポイントを指します。たとえば、中国 (上海) リージョンのエンドポイントは http://oss-cn-shanghai.aliyuncs.com です。サービスが別のリージョンにデプロイされている場合は、必要に応じてパラメーターを設定してください。詳細については、「OSS のリージョンとエンドポイント」をご参照ください。

      • <examplebucket> を作成した OSS バケットの名前に置き換えます。

      <token>

      このパラメーターをステップ 1 で取得したトークンに設定します。

      mount_path

      サービスをデプロイしたときに設定した OSS マウントパス。

      oss_url

      サービスをデプロイしたときに設定した OSS ストレージパス。

      コードが正常に実行されると、以下の結果が返されます。OSS コンソールに移動し、サービスをデプロイしたときにマウントしたストレージの outputs ディレクトリで生成された画像を表示できます。

      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
    • 例 2:画像をローカルパスに保存します。以下の Python コードを実行して、Base64 エンコードされた画像を取得し、画像ファイルをローカルディレクトリに保存します。

      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()
      
      # 同期リクエストから Base64 エンコードされた画像を取得できますが、代わりに画像 URL を取得することを推奨します。
      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)
      

      ここで:

      • <service_url>:このパラメーターをステップ 1 で取得したサービスエンドポイントに設定します。末尾の / を削除します。

      • <token>:ステップ 1 で取得したトークンに置き換えます。

    リクエストに LoRA および ControlNet データを使用して、特定の機能を有効にすることもできます。

    LoRA 設定

    サービスリクエストを送信する際、リクエストボディに <lora:yaeMikoRealistic_Genshin:1000> を追加して LoRA モデルを使用できます。詳細については、「LoRA」をご参照ください。

    リクエストボディの例:

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

    ControlNet 設定

    API リクエストで ControlNet データ形式を使用して、生成された画像に対して画像の水平または垂直維持などの一般的な変換を簡単に行うことができます。設定方法の詳細については、「例:ControlNet を使用した txt2img」をご参照ください。

    [呼び出し方法] ページで、サービスエンドポイントとトークンを取得します。

    • サービスが API バージョンの場合、[同期呼び出し] タブでサービスエンドポイントとトークンを見つけることができます。image

    • サービスが Standard Edition の場合、次の図に示すようにサービスエンドポイントとトークンを見つけることができます。image

非同期呼び出し

API Edition サービスをデプロイした後、サービスに非同期リクエストを送信できます。クライアントは出力キューで推論結果をサブスクライブします。次の手順を実行します:

  1. 呼び出し情報を取得します。

    サービスの [サービスタイプ] 列にある [呼び出し方法] をクリックします。[非同期呼び出し] タブで、サービスエンドポイントとトークンを表示します。image

  2. 非同期リクエストを送信します。SDK for Python または SDK for Java を使用できます。

    重要
    • キューサービスでは、入力または出力キューのサイズが 8 KB を超えることはできません。以下の点に注意してください:

      • リクエストデータに画像が含まれている場合、URL を使用して画像情報を渡すことを推奨します。SD WebUI は画像データを自動的にダウンロードして解析します。

      • 応答に元の画像データが含まれないようにするため、save_dir パラメーターを使用して生成された画像が保存されるパスを指定することを推奨します。詳細については、「API 操作の追加設定可能パラメーター」をご参照ください。

    • デフォルトでは、EAS はインターネットに接続できません。image_link パラメーターを使用してインターネットからの画像 URL を指定する場合、「EAS ネットワーク設定」で説明されているようにパブリックネットワークアクセスを設定して、サービスが画像にアクセスできるようにする必要があります。

    方法 1:SDK for Python の使用

    サンプルコード:

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

    ここで:

    • <service_url>:値をステップ 1 で取得したサービスエンドポイントに置き換えます。エンドポイントの末尾にある / を削除します。

    • <token>:ステップ 1 で取得したトークンに置き換えます。

    説明
    • WebUI サービスのすべての POST インターフェイスがサポートされています。必要に応じて対応するパスにリクエストを送信できます。

    • サービスにカスタム情報を渡したい場合は、URL パラメーターを使用してカスタムタグを指定できます。たとえば、URL に ?task_id=task_abc パラメーターを追加して task_id という名前のタグを指定すると、タグ情報がサービス出力の tags フィールドで返されます。

    コードが正常に実行されると、システムは次の結果を出力します。実際の結果は異なる場合があります。image.png

    方法 2:SDK for Java の使用

    Maven を使用して Java プロジェクトを管理します。そのため、必要なクライアント依存関係を pom.xml ファイルに追加する必要があります。詳細については、「SDK for Java」をご参照ください。

    サンプルコード:

    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 {
            // キューサービスのクライアントを作成します。
            String queueEndpoint = "http://166233998075****.cn-hangzhou.pai-eas.aliyuncs.com";
            String queueToken = "xxxxx==";
            // 入力キューの名前は、サービス名と使用したいリクエストパスで構成されます。
            String inputQueueName = "<service_name>/sdapi/v1/txt2img";
    
            // 入力キューを作成します。入力キューにリクエストデータを追加すると、推論サービスは自動的に入力キューからリクエストデータを読み取ります。
            QueueClient inputQueue =
                new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser());
            // キューデータをクリアします。注意して進めてください。
            // input_queue.clear();
    
            // 入力キューにリクエストデータを追加します。
            int count = 5;
            for (int i = 0; i < count; ++i) {
                // リクエストデータを作成します。
                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" +
                    "  }";
                // カスタムタグを作成します。
                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()));
                // キューサービスは多優先度キューをサポートしています。put 関数を使用してリクエストの優先度レベルを設定できます。デフォルト値は 0 です。値 1 は高い優先度を指定します。
                //  inputQueue.put(data.getBytes(), 0L, null);
            }
            // クライアントを閉じます。
            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) {
                // リクエストデータを作成します。
                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()));
            }
    
            // クライアントを閉じます。
            inputQueue.shutdown();
        }
    }

    ここで:

    • queueEndpoint:ステップ 1 で取得したサービスエンドポイントとして設定します。サンプルコードを参照してこのパラメーターを設定してください。

    • queueToken:ステップ 1 で取得したサービストークン情報として設定します。

    • <service_name>:デプロイされた非同期サービスの名前に置き換えます。

    説明

    サービスでタグを渡したい場合は、put 関数の tag パラメーターを設定できます。カスタムタグの使用法については、サンプルコードを参照してください。タグ情報は出力結果の tag フィールドで返されます。

    コードが正常に実行されると、システムは次の結果を出力します。実際の結果は異なる場合があります。

    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. 非同期リクエストの結果をサブスクライブします。

    サーバーが関連リクエストの処理を完了すると、サーバーは結果をクライアントに自動的にプッシュし、効率的な非同期通信を実現します。SDK for Python または SDK for Java を使用して結果をサブスクライブできます。

    方法 1:SDK for Python の使用

    サンプルコード:

    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"
    # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、高いリスクを伴う操作です。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。RAM ユーザーを作成するには、RAM コンソールにログインしてください。
    auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
    # この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の エンドポイントを指定してください。
    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)
                # OSS オブジェクトをオンプレミスのファイルシステムにダウンロードします。
                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}')
    

    以下の表は、主要なパラメーターを説明しています:

    設定

    説明

    sink_queue

    • 139699392458****.cn-hangzhou.pai-eas.aliyuncs.com を、前のステップで取得したサービスアドレスのサービスエンドポイントに、サンプルコードに示されている形式で置き換えます。

    • sd_async を、サンプルコードに示されている形式でデプロイした非同期サービスの名前に置き換えます。

    <token>

    値をステップ 1 で取得したサービストークンに設定します。

    oss_url

    このパラメーターを、サービスをデプロイしたときに指定した OSS パスに設定します。

    bucket

    ここで:

    • http://oss-cn-hangzhou.aliyuncs.com は、中国 (杭州) リージョンを例として設定された OSS エンドポイントを表します。サービスが別のリージョンにデプロイされている場合は、実際の エンドポイントを指定してください。詳細については、「OSS のリージョンとエンドポイント」をご参照ください。

    • <examplebucket> を作成した OSS バケットの名前に置き換えます。

    説明
    • コミット操作は手動で実行することも、auto_commit=True を設定して自動的に実行することもできます。

    • キューサービスのクライアントがデータの消費を停止した場合、リソースを解放するためにクライアントを閉じることを推奨します。

    • cURL コマンドを使用するか、同期 API を呼び出して結果をサブスクライブすることもできます。詳細については、「非同期推論サービスのデプロイ」をご参照ください。

    クライアントは watcher.run() メソッドを使用してサーバーからの結果を継続的にリッスンします。サーバーが結果を返さない場合、クライアントは待機し続けます。サーバーが結果を返すと、クライアントは結果を出力します。以下は結果のサンプルです。実際の結果は異なる場合があります。OSS コンソールに移動して、サービスをデプロイしたときに指定した OSS ストレージパスで生成された画像を表示できます。

    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

    方法 2:SDK for Java の使用

    サンプルコード:

    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 {
            // キューサービスのクライアントを作成します。
            String queueEndpoint = "http://166233998075****.cn-hangzhou.pai-eas.aliyuncs.com";
            String queueToken = "xxxxx==";
            // 出力キューの名前は、サービス名と "/sink" で構成されます。
            String sinkQueueName = "<service_name>/sink";
    
            // 出力キュー。推論サービスは入力データを処理し、結果を出力キューに書き込みます。
            QueueClient sinkQueue =
                new QueueClient(queueEndpoint, sinkQueueName, queueToken, new HttpConfig(), new QueueUser());
    
            // キューデータをクリアします。注意して進めてください。
            //  sinkQueue.clear();
    
            // キューをサブスクライブし、キューデータを取得します。
            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();
            }
    
            // クライアントを閉じます。
            sinkQueue.shutdown();
        }
    }

    ここで:

    • queueEndpoint:ステップ 1 で取得したサービスエンドポイントとして設定します。サンプルコードを参照してこのパラメーターを設定してください。

    • queueToken:ステップ 1 で取得したサービストークン情報として設定します。

    • <service_name>:デプロイされた非同期サービスの名前に置き換えます。

    説明
    • データを手動でコミットすることも、auto_commit=True を設定して自動的にコミットすることもできます。

    • キューサービスのクライアントがデータの消費を停止した場合、リソースを解放するためにクライアントを閉じることを推奨します。

    • cURL コマンドを使用するか、同期 API を呼び出して結果をサブスクライブすることもできます。詳細については、「非同期推論サービスのデプロイ」をご参照ください。

    クライアントは watcher.getDataFrame() メソッドを使用してサーバーからの結果を継続的にリッスンします。サーバーが結果を返さない場合、クライアントは待機し続けます。サーバーが結果を返すと、クライアントは結果を出力します。以下は結果のサンプルです。実際の結果は異なる場合があります。OSS コンソールに移動し、対応するパスで生成された画像を表示できます。

    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

    非同期リクエストを送信し、その結果をサブスクライブした後、search() メソッドを使用してリクエストのステータスをクエリできます。詳細については、「SDK for Python」および「SDK for Java」をご参照ください。

EAS は、ネイティブの Stable Diffusion WebUI API に加えて新しい機能をサポートしています。リクエストデータにオプションのパラメーターを追加して、より高度な機能を有効にしたり、カスタム要件を満たしたりできます。詳細については、「API 操作の追加設定可能パラメーター」をご参照ください。

拡張機能のインストールによる機能強化

Stable Diffusion WebUI の拡張機能を設定して、さまざまな機能を有効にすることができます。PAI は、プロンプトを拡張および洗練するために使用される BeautifulPrompt 拡張機能など、さまざまなプリセット拡張機能を提供しています。以下のセクションでは、BeautifulPrompt 拡張機能を例に、拡張機能のインストール方法と使用方法について説明します。

拡張機能のインストール

Web UI ページの [拡張機能] タブで拡張機能を表示およびインストールできます。次の手順を実行します:

  1. サービスリストで、対象サービスの [サービスタイプ] 列にある [Web アプリを表示] をクリックして Web UI を起動します。image

  2. Web UI ページの [拡張機能] タブで、[BeautifulPrompt] が選択されているかどうかを確認します。選択されていない場合は、拡張機能を選択し、[適用して UI を再起動] をクリックして BeautifulPrompt 拡張機能を再読み込みします。image

    拡張機能をインストールすると、WebUI ページが自動的に再起動します。再読み込み後、推論検証を実行できます。

拡張機能を使用した推論検証

  1. [BeautifulPrompt] タブで、テキストボックスに簡単なプロンプトを入力し、[生成] をクリックして、より詳細なプロンプトを生成します。image

    PAI は複数のプロンプト生成モデルを提供します。各モデルによって生成されるプロンプトは異なります:

    • pai-bloom-1b1-text2prompt-sd-v2:複雑なシナリオのプロンプト生成に優れています。

    • pai-bloom-1b1-text2prompt-sd:単一のオブジェクトを記述するプロンプトを生成します。

    シナリオのニーズに応じて、適切なモデルを選択してプロンプトを生成できます。image

  2. 使用したいプロンプトを選択し、プロンプトの横にある [txt2img へ] をクリックします。

    ページは自動的に [Text-to-image] タブに切り替わり、プロンプトエリアが自動的に入力されます。image

  3. [生成] をクリックして、Web UI ページの右側に画像を生成します。image

    BeautifulPrompt 拡張機能を使用しない場合と比較して、BeautifulPrompt 拡張機能を使用すると、生成された画像の美観が向上し、より多くの詳細を追加するのに役立ちます。他のシナリオで BeautifulPrompt 拡張機能を使用する前後の効果の比較は次のとおりです:

    入力プロンプト

    BeautifulPrompt なしの効果

    BeautifulPrompt を使用

    a cat

    image.png

    image.png

    a giant tiger

    image.png

    image.png

よくある質問

自分のモデルと出力ディレクトリを使用するにはどうすればよいですか?

サービスがデプロイされると、システムはマウントされた OSS または NAS ストレージスペースに次のディレクトリ構造を自動的に作成します:image

ここで:

  • models:このディレクトリはモデルファイルを保存するために使用されます。

  • 推論リクエストを送信すると、システムは API コードのプリセット設定に基づいて、このディレクトリに結果ファイルを自動的に生成します。

新しいモデルをロードして使用するには、オープンソースコミュニティからダウンロードした、またはトレーニングした LoRA または Stable Diffusion モデルを指定されたディレクトリに保存します。次の手順を実行します:

  1. マウントされたストレージの models ディレクトリ内の対応するサブディレクトリにモデルファイルをアップロードします。詳細については、「ステップ 2:ファイルのアップロード」をご参照ください。

  2. [Elastic Algorithm Service (EAS)] ページで、対象サービスの [操作] 列の image > [サービスの再起動] をクリックします。サービスの再起動後、構成が有効になります。

  3. Stable Diffusion WebUI ページで、モデルを切り替えてモデル推論を実行します。

    image

サービスが長時間フリーズした場合はどうすればよいですか?

  • Stable Diffusion Web アプリケーションページを再度開くか、EAS サービスを再起動して問題を解決できます:

    • 対象サービスの [サービスタイプ] 列にある [Web アプリを表示] をクリックして、Stable Diffusion WebUI を再度開きます。

    • 対象のサービスの [操作] 列で image > [サービスの再起動] をクリックして、EAS サービスを再起動します。

  • 再起動後も問題が解決しない場合は、サービスがモデルや拡張機能などのコンテンツをインターネットからダウンロードする必要がある可能性があります。デフォルトでは、EAS はインターネットに接続されていません。イメージを起動するか、モデルをオフラインでマウントできます。ただし、一部の拡張機能はコンテンツをダウンロードするためにインターネット接続が必要です。この場合、ログを確認してモデルまたは拡張機能のダウンロードパスを見つけ、モデルを手動でダウンロードし、OSS にアップロードしてからマウントすることを推奨します。詳細については、「自分のモデルと出力ディレクトリを使用するにはどうすればよいですか?」をご参照ください。それでもインターネットに接続する必要がある場合は、「EAS ネットワーク設定」を参照してパブリックネットワークアクセスを設定してください。

Web アプリケーションインターフェイスのデフォルト言語を英語に変更するにはどうすればよいですか?

  1. Stable Diffusion WebUI ページで、[設定] をクリックします。

  2. 左側のナビゲーションウィンドウで、[ユーザーインターフェイス] をクリックします。ページの右側にある [ローカライズ] エリアで、[なし] を選択します。

  3. Stable Diffusion WebUI ページの上部で、[設定を保存] をクリックし、次に [フロントエンドを再読み込み] をクリックします。

    WebUI ページを更新すると、英語に切り替わります。

ファイルシステムを管理するにはどうすればよいですか?

Standard Edition または Cluster Edition WebUI サービスをデプロイする際、システムはデフォルトで実行コマンドに --filebrowser パラメーターを既に追加しています。WebUI インターフェイスを通じて直接ファイルシステムを管理できます。次の手順を実行します:

  1. サービスがデプロイされた後、[サービスタイプ] 列にある [Web アプリを表示] をクリックします。

  2. Stable Diffusion WebUI ページで、[FileBrowser] タブをクリックします。ファイルシステムを表示したり、ファイルをアップロードおよびダウンロードしたりできます。

    image

エラー:No such file or directory: 'data-oss/data-********.png'

  1. デプロイバージョンを確認します。API Edition (イメージ:x.x-api) または cluster WebUI edition (イメージ:x.x-cluster-webui) の場合、モデル設定が必要です。

  2. マウントパスを確認します。起動コマンドに --data-dir パラメーターが含まれているかどうかを確認し、そのパスが OSS マウントパスと一致していることを確認します。

    image

WebUI ページにアクセスできない場合はどうすればよいですか

サービスのデプロイバージョンを確認してください - API Edition は WebUI アクセスをサポートしていません。カスタムデプロイの場合、イメージ x.x-api は API Edition に対応することに注意してください。

付録

サービス作成時のオプション設定パラメーター

  • 共通パラメーター

    共通パラメーター

    説明

    使用推奨

    --blade

    PAI-Blade を有効にして画像生成を高速化します。

    この機能を有効にすることを推奨します。

    --filebrowser

    モデルや画像のアップロードとダウンロードを許可します。

    デフォルトでこの機能は有効になっています。

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

    永続ストレージをマウントするために使用されるパス。

    永続ストレージをマウントする際に使用します。デフォルトの開始パスは /code/stable-diffusion-webui/ です。または相対パスを使用することもできます。

    --api

    Web UI の API 呼び出しモード。

    デフォルトでこの機能は有効になっています。

    --enable-nsfw-censor

    デフォルトでは、この機能は無効になっています。セキュリティコンプライアンスが必要な場合は、ポルノ検出機能を有効にできます。

    必要に応じて機能を有効にします。

    --always-hide-tabs

    特定のタブを非表示にします。

    必要に応じて機能を有効にします。

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

    Stable Diffusion モデルをメモリにキャッシュします。

    N/A

  • Cluster Edition パラメーター

    説明

    ckpt および ControlNet モデルは、パブリックディレクトリ内のファイルとカスタムファイルを自動的にロードします。

    Cluster Edition パラメーター

    説明

    使用上の注意

    --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 ディレクトリは隔離されており、ユーザーフォルダ内の embedding モデルのみがロードされます。ディレクトリを指定すると、すべてのユーザーがパブリックディレクトリ内の embedding モデルをロードします。

    --hypernetwork-dir

    パブリック hypernetwork モデルディレクトリを指定します。例:--hypernetwork-dir /code/stable-diffusion-webui/data-oss/models/hypernetworks

    デフォルトでは、このパラメーターは設定されていません。ユーザーのすべての hypernetwork ディレクトリは隔離されており、ユーザーフォルダ内の hypernetwork モデルのみがロードされます。ディレクトリを指定すると、すべてのユーザーはパブリックディレクトリ内の hypernetwork モデルのみをロードします。

    --root-extensions

    拡張機能ディレクトリをパブリックディレクトリとして使用します。このパラメーターを設定すると、すべてのユーザーが同じ拡張機能を見ることができます。

    拡張機能を一元的にインストールまたは管理したい場合は、このパラメーターを使用します。

API 操作で設定できるパラメーター

EAS は、ネイティブの Stable Diffusion WebUI API に新しい機能のサポートを追加します。必須パラメーターに加えて、API リクエストにオプションのパラメーターを追加して、より多くの機能を有効にし、カスタム要件を満たすことができます:

  • SD モデル、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:生成された画像を保存するパスを指定します。

同期リクエストの例:

# 同期 API を呼び出してモデルをテストします。

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, # サンプリングステップ
    "seed": 111,   
    "subseed": 111, # バリエーションシード
    "subseed_strength": 0, # バリエーション強度
    "seed_resize_from_h": 0, # 高さからシードをリサイズ
    "seed_resize_from_w": 0, # 幅からシードをリサイズ
    "seed_enable_extras": false, # エクストラ
    "sampler_name": "DDIM", # サンプリング方法
    "cfg_scale": 7.5, # CFG スケール
    "restore_faces": true, # 顔を復元
    "tiling": false, # タイリング
    "init_images": [], # image base64 str, default None
    "mask_blur": 4, # マスクぼかし
    "resize_mode": 1, # 0 just resize, 1 crop and resize, 2 resize and fill, 3 just resize
    "denoising_strength": 0.75, # ノイズ除去強度
    "inpainting_mask_invert": 0, #int, index of ['Inpaint masked', 'Inpaint not masked'], マスクモード
    "inpainting_fill": 0, #index of ['fill', 'original', 'latent noise', 'latent nothing'], マスクされたコンテンツ
    "inpaint_full_res": 0, # index of ["Whole picture", "Only masked"], インペイントエリア
    "inpaint_full_res_padding": 32, #minimum=0, maximum=256, step=4, value=32, Only masked padding, pixels
    #"image_cfg_scale": 1, # スケールでリサイズ
    #"script_name": "Outpainting mk2", # スクリプト名。スクリプトを使用しない場合はこのフィールドをスキップします。
    #"script_args": ["Outpainting", 128, 8, ["left", "right", "up", "down"], 1, 0.05]  # スクリプトのパラメーターを次の順序で指定します:固定フィールド、ピクセル、mask_blur、方向、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":""
}

ControlNet を使用した Txt2img データ形式

リクエスト形式の例:

{
    "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 の課金の詳細については、「Elastic Algorithm Service (EAS) の課金」をご参照ください。