見出し画像

Stable Diffusion APIサーバー

PhotoShopプラグインからStableDiffusionが呼び出せるようになりました。
これはGitHubの記事の翻訳です。



Stable Diffusion APIサーバー

Stable Diffusion Photoshopプラグイン用のローカル推論REST APIサーバー(https://christiancantrell.com/#ai-ml)です。
(また、何にでも使える一般的なStable Diffusion REST APIでもあります。)
※photoshopからは有償のDreamStudioを使うこともできるようです。(https://beta.dreamstudio.ai/


PhotoShopプラグイン



PhotoShop側のプラグインはこちらからダウンロードしてインストールしてください。


APIサーバーについて



現在、APIサーバーは以下をサポートしています:

  • Stable Diffusionのモデルは自動的にHugging Faceからダウンロードします。

  • DreamBoothで作成されたようなHugging Faceディフューサーファイル形式のカスタムファインチューニングモデル。

(チェックポイントファイル(モデル)を直接読み込むことは現在サポートしていませんが、適切に名付けられたconvert_original_stable_diffusion_to_diffusers.pyスクリプトを使用して.ckptファイルをdiffusers形式に簡単に変換できます。)

 このサーバーは、NVIDIA GPUを備えたWindowsおよびLinuxマシン、およびM1 Macで動作します。M1 MacでのMPS(Metal Performance Shaders)の使用は非常に実験的で(そして設定は容易ではありません)ですが、それは動作し、時間とともに改善されるでしょう。

 可能なら、最高の結果を得るために、専用のLinuxマシンを使用することをお勧めします。Windowsでのパフォーマンスも非常に良いですが、他のアプリが動作していない専用マシンをお勧めします。
 やむを得ない場合は同じマシン上でPhotoshopを実行できますが、その場合、Photoshopユーザー環境のためのGPUメモリの一部を放棄することになり、ローカル推論の最適化には悪影響となります。

 このプロジェクトでは、コンテンツ安全性フィルターを使用していることに注意してください。

インストール


※以下の'%'文字はコマンドプロンプトを示すためのものであり、コピー&ペーストする際には含めないでください。

Windows、Linux、およびMacの手順

  • Pythonをインストールします。

  • Condaをインストールします。

  • このリポジトリをダウンロードします。(git clone https://github.com/cantrell/stable-diffusion-api-server.git)

  • cdコマンドでリポジトリのディレクトリに移動します。

  • 以下のコマンドを実行して、sd-api-serverという名前のConda環境を設定します。


WindowsおよびLinux

% conda env create -f environment.yaml

M1 Mac:

% conda env create -f environment-m1.yaml


その後、Conda環境をアクティベートします:

% conda activate sd-api-server


サーバーを更新する場合は、Conda環境も更新することを確認してください(プラットフォーム固有のyamlファイルを使用して):

% conda env update -f environment.yaml
% conda activate sd-api-server

古い環境を削除し、新たに作り直したい場合
(プラットフォーム固有のyamlファイルを使用して):

% conda env remove -n sd-api-server
% conda env create -f environment.yaml
% conda activate sd-api-server



Hugging Faceの設定


Stable Diffusionモデルをローカルで実行するために、Hugging Faceで設定する必要があることが二つあります:

  1. モデルにアクセスするためには、ユーザーネームとメールアドレスをHugging Faceと共有することに同意する必要があります。

  2. また、Hugging Faceトークンを設定する必要があります。読取専用トークンを作成したら、それをconfig.jsonファイルのhf_tokenキーの値としてコピー&ペーストしてください(そして、ファイルを保存するのを忘れないでください)。

WindowsとLinuxのユーザーの方々、これで準備は整いました!あとはサーバーを起動するだけです:

% python3 server.py


M1 Mac追加の指示


 これは非常に実験的であり、すべての方に対して機能するわけではないかもしれません。しかし、次回のPyTorchのリリースにより簡単になる可能性があります。

方法1:ナイトリービルド
Terminalで、Condaのプロンプトにて、sd-api-server環境がアクティベートされた状態で:

% conda install pytorch torchvision -c pytorch-nightly
% conda deactivate
% conda activate sd-api-server
% python3 server.py

 はPyTorchとTorchvisionのナイトリービルドをインストールしたことに気づいたかもしれません。
 ナイトリービルドは、保証も保証もありません。サーバーが起動し、画像を生成できる場合、あなたはナイトリーロトを勝ち取ったことになります!
 そうでない場合は、明日もう一度試すことができます。これは一時的な状況であり、次のPyTorchのリリースで必要なくなる可能性があります。

方法2:環境変数

 ナイトリービルドが機能しなかった場合、または単にナイトリービルドにアレルギーがある場合、PyTorchにMPSに加えてCPUを使用するよう指示することができます。
 すでにナイトリービルドをインストールしている場合は、上記のコマンドを使用してConda環境を削除し、再度始めから行い、ナイトリービルドのステップをスキップし、これを試してみてください
(sd-api-server環境がアクティブな状態で):

% conda env config vars set PYTORCH_ENABLE_MPS_FALLBACK=1
% conda activate sd-api-server
% python3 server.py

 もし'ModuleNotFoundError: No module named 'flask''というメッセージが表示された場合、それはおそらくPythonのバージョンが間違っていることを意味します。
 python3を使用した場合はpythonを試してみてください。pythonを使用した場合はpython3を試してみてください。(これらは、Macに古いバージョンのPythonがプレインストールされていることによる悦びです。)


カスタムモデルの設定



 サーバー(そしてPhotoshopプラグイン)をカスタム訓練モデルと共に使用したい場合、最初に必要なのはカスタム訓練モデルそのものです。
 それをする方法についての指示は、このREADMEの範囲を超えていますが、以下にいくつかのリソースを挙げます:

  • 私のカスタムフォークのDreamBoothリポジトリ(大幅に簡略化されています)。

  • DreamBooth Stable DiffusionのColabノートブック(ローカルで訓練するよりもずっと簡単)。

  • Colabノートブックの使用に関する良いYouTubeチュートリアル。

  • オリジナルのDreamBooth論文。

 現在、チェックポイントファイルを直接ロードすることはサポートされていませんが、適切に命名されたconvert_original_stable_diffusion_to_diffusers.pyスクリプトを使用して、.ckptファイルをdiffusers形式に簡単に変換することができます。

 一旦モデルの訓練が完了したら、残りは簡単です。あなたがやるべきことはすべて以下の通りです:

  1. config.jsonファイルをconfig-custom-models.jsonテンプレートに置き換えます(config-custom-models.jsonconfig.jsonにリネームします)。

  2. 新しいconfig.jsonファイルにHugging Faceのトークンをコピー&ペーストしていることを確認します。

  3. configファイルのcustom_model配列を適切に入力します。


以下はキー/値のペアが何を意味するかの説明です:

  • model_pathmodel_index.jsonファイルを含むディレクトリへのフルパス(ディレクトリだけで、ファイル自体は含めない)。スペースをエスケープしないでくださいが、バックスラッシュはバックスラッシュでエスケープしてください
    G:\\My Drive\\stable_diffusion_weights\\MyCustomModelOutput

  • ui_label:Photoshopプラグインに表示したいモデルの名前。

  • url_path:エンドポイントパスとして使用されるユニークでURLフレンドリーな値(以下のREST APIセクションを参照)。

  • requires_safety_checker:カスタムモデルが安全チェッカーを必要とするかどうか。Hugging Faceのdiffusersファイル形式のモデルについては、これは真です;チェックポイントファイルからdiffusersファイル形式にコンパイルされたモデルについては、これはおそらく偽です。

    configファイルが準備できたら、サーバーを(再)起動します。Photoshopプラグインがすでにロードされている場合は、再起動するか(または、「Generate」タブの右下隅の「Reload Plugin」リンクをクリックすればよい)。

    config.jsonファイルのcustom_modelセクションが配列であることに注意してください。つまり、必要なだけカスタムモデルを含めることができます。以下は、複数のカスタム訓練モデルの場合の見た目です:

{
  "hf_token": "your_hugging_face_token",
  "custom_models": [
    {
      "model_path": "/path/to/directory/containing/model_index.json",
      "ui_label": "My First Model",
      "url_path": "my_first_model",
      "requires_safety_checker": true
    }
  ],
  [
    {
      "model_path": "/path/to/another/directory/containing/model_index.json",
      "ui_label": "My Second Model",
      "url_path": "my_second_model",
      "requires_safety_checker": true
    }
  ]
}

 Stable Diffusion PhotoshopプラグインのGenerateタブでカスタムモデルを表示するには、API Keyタブでローカル推論サーバーを設定していることを確認してください。


APIリセット


すべてのPOSTリクエストはapplication/x-www-form-urlencodedのコンテンツタイプを使用し、すべての画像はbase64でエンコードされた文字列であることに注意してください。

GET /ping
レスポンス

{'status':'success'}


GET /custom_models
レスポンス

[
  {
    "model_path": "/path/to/directory/containing/model_index.json",
    "ui_label": "My First Model",
    "url_path": "my_first_model",
    "requires_safety_checker": "true | false"
  }
], [...]

(カスタムモデルが設定されていない場合、空の配列が返されます。)


POST /txt2img
パラメーター

  • prompt:テキストの説明。

  • seed:数値の種(seed)。

  • num_outputs:取得したい画像の数。

  • width:結果の幅。 height:結果の高さ。

  • num_inference_steps:ステップの数(ステップが多いほど品質が高くなります)。

  • guidance_scale:プロンプトの強度。

レスポンス

{
  'status':'success | failure',
  'message':'Only if there was a failure',
  'images': [
    {
      'base64': 'base64EncodedImage==',
      'seed': 123456789,
      'mimetype': 'image/png',
      'nsfw': true | false
    }
  ]
}


POST /img2img
パラメーター

  • prompt:テキストの説明。

  • seed:数値の種(seed)。

  • num_outputs:取得したい画像の数。

  • num_inference_steps:ステップの数(ステップが多いほど品質が高くなります)。

  • guidance_scale:プロンプトの強度。

  • init_image:初期入力画像。

  • strength:画像の強度。

レスポンス

{
  'status':'success | failure',
  'message':'Only if there was a failure',
  'images': [
    {
      'base64': 'base64EncodedImage==',
      'seed': 123456789,
      'mimetype': 'image/png',
      'nsfw': true | false
    }
  ]
}


POST /masking
パラメーター

  • prompt:テキストの説明。

  • seed:数値の種(seed)。

  • num_outputs:取得したい画像の数。

  • num_inference_steps:ステップの数(ステップが多いほど品質が高くなります)。

  • guidance_scale:プロンプトの強度。

  • init_image:初期入力画像。

  • strength:画像の強度。

  • mask_image:置き換えるべきピクセルを表すマスク。

レスポンス

{
  'status':'success | failure',
  'message':'Only if there was a failure',
  'images': [
    {
      'base64': 'base64EncodedImage==',
      'seed': 123456789,
      'mimetype': 'image/png',
      'nsfw': true | false
    }
  ]
}


POST /custom/<url_path>

url_pathは、config.jsonファイルで定義したurl_pathキー/値ペアを指します。

パラメーター

  • prompt:テキストの説明。

  • seed:数値の種(seed)。

  • num_outputs:取得したい画像の数。

  • width:結果の幅。

  • height:結果の高さ。

  • num_inference_steps:ステップの数(ステップが多いほど品質が高くなります)。

  • guidance_scale:プロンプトの強度。

レスポンス

{
  'status':'success | failure',
  'message':'Only if there was a failure',
  'images': [
    {
      'base64': 'base64EncodedImage==',
      'seed': 123456789,
      'mimetype': 'image/png',
      'nsfw': true | false
    }
  ]
}

いいなと思ったら応援しよう!