はじめに
Stable Diffusion、使っていますか ? Stable Diffusion は Stability.AI 社が開発した画像生成 AI です。生成したい画像を表すテキスト (プロンプト) を入力するだけで、お手軽に画像を生成することができます。
そんな Stable Diffusion をブラウザベースの UI で利用できるのが AUTOMATIC1111 氏が公開している Stable Diffusion Web UI です。
8 月にお届けした「1 クリックで立ち上がる自分だけの環境で、お猫様の画像生成をやってみた。」 では、CloudFormation のテンプレートを利用して、AWS 上で Stable Diffusion Web UI を利用する環境を立ち上げる方法をご紹介しました。
もちろん、前回構築した環境でもかわいい猫様の画像を生成してお楽しみいただくことはできます。
ですが人間は欲深い生き物、より可愛い猫様を生成したい、と思ってしまうのは仕方がないことです。
Stable Diffusion Web UI で生成した「満月の夜に窓辺で佇む猫様」の画像です
そうなると、目指す画像を生成するために Stable Diffusion Web UI を使って試行錯誤を重ねる必要がでてきます。ならば快適な画像生成環境が欲しくなってきますよね。
例えば、Stable Diffusion Web UI の便利な拡張機能を利用したり、ローカル PC と Stable Diffusion Web UI 間で効率的にファイルをやりとりしたり、自分だけの画像生成モデルのトレーニングをしたり・・・。
そこで今回の記事は「拡張編」としてより快適な Stable Diffusion Web UI 環境を作っていきたいと思います ! どんな環境を作ることができるのか、はじめにご紹介します。

ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
builders.flash メールメンバー登録
1. 今回できる環境の紹介
1-1. ブラウザ経由での Web UI 拡張機能インストール
Stable Diffusion Web UI の Extension タブから、有志が開発した拡張機能をインストールすることができます。
画像では、入力したプロンプトを自動で補完 (オートコンプリート) してくれる拡張機能を導入した例になります。
次々にプロンプトを補完してくれるため非常に便利です。

1-2. ファイルをお手軽にローカルとやりとりする
Amazon EC2 や EC2 にマウントした Amazon S3 の中にあるファイルに、ブラウザ経由でアクセスすることができます。
こちらの画像は、Stable Diffusion Web UI で生成した画像が保存されているディレクトリを参照している例です。
生成した画像を簡単に管理できることに加え、ローカル PC からファイルをアップロードすることもできるため、ローカルから直接モデルを EC2 にアップロードして利用することもできます。

1-3. Web UI からモデルのトレーニングを行う
ブラウザ経由でモデルのトレーニングを行うことができます。
例えば、「我が家の猫が一番可愛い ! 我が家の猫を生成するモデルを作りたい !」と思い立ったとしましょう。
この機能があれば、数枚の画像を用意し、Stable Diffusion の画像モデルのファインチューニングを行うことで、「我が家の猫」を生成するモデルを作成することができます !
それでは、実際に環境を作っていきましょう !

2. 事前準備
2-1. クォータの確認
まずは、EC2 インスタンスのクォータ (起動台数の上限) を確認しましょう。
前回の記事の「事前準備」を参考に確認を行い、必要に応じてクォータの引き上げリクエストを行いましょう。
すでに実施済みの場合は、次の手順に進んでください。
2-2. Amazon VPC の設定
2-3. Amazon S3 バケットの作成
2-4. インスタンスプロファイル の作成
2-5. IAM ユーザーの作成
3. AWS CloudFormation でリソースを作成する
それでは、事前準備が終わったところで CloudFormation を利用して環境を構築していきましょう !
3-1. Github リポジトリを確認する
Stable Diffusion Web UI on AWS の Github リポジトリをブラウザで開きます。
このリポジトリには 4 種類の CloudFormation テンプレートが用意されています。
前回の記事では、sd-webui.yaml を使いましたね。
今回は sd-webui-kohya-private-s3.yaml を使って環境を構築していきます。
3-2. CloudFormation テンプレートを読み込む
sd-webui-kohya-private-s3.yaml の左にある「Launch Stack」ボタンを押しましょう。

3-3. スタックの詳細の入力
3-4. 作成されたリソースを確認する
4. インストール状況を確認する
4-1. Session Manager で EC2 インスタンスに接続する
4-2. インストール状況のログを確認する
では、Stable Diffusion Web UI の実行状況を確認しましょう。
実行ログを確認
以下のコマンドを実行し、CloudFormation で定義された EC2 の UserData (起動時に実行されるスクリプト) の実行ログを確認します。
sudo tail -f /var/log/cloud-init-output.log
UserData 実行完了
以下のようなログが表示されていれば、UserData の実行は完了しています。 表示されていない場合は、スクリプトが実行中なのでしばらく待ちましょう。
Successfully installed Cloud-init v. 23.1.2-0ubuntu0~20.04.1 running 'modules:final' at Tue, 12 Sep 2023 03:36:57 +0000. Up 90.06 seconds.
Stable Diffusion Web UI のインストール状況を確認
次に、以下のコマンドを実行し、Stable Diffusion Web UI のインストール状況を確認します。
cd /home/ubuntu/
cat sd-webui-log.txt
ログを確認
特にエラーがなく、以下のようなログが出力されていれば起動が完了しています。
Calculating sha256 for /home/ubuntu/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors: Running on local URL: http://127.0.0.1:7860
To create a public link, set `share=True` in `launch()`.
5. インスタンスへの接続を制限する
以上で、EC2 上での Stable Diffusion Web UI 環境のインストールは完了です。
この EC2 はパブリックサブネット (AWS 外部のインターネットにアクセスすることができるサブネット) に起動しているため、EC2 のパブリック IP アドレスさえわかっていれば、外部からアクセスすることができてしまいます。
セキュリティを高めるため、EC2 に対してアクセスできる IP アドレスやポートを制限してみましょう。ここでは、セキュリティグループを使ってアクセスを制限していきます。
5-1. セキュリティグループを作成する
5-2. インスタンスにセキュリティグループを紐づける
6. ブラウザから Web UI にアクセスできるようにする
先ほどの手順で、EC2 に対してインバウンドのアクセスを制限することができました。
ですが、このままだと自分も Stable Diffusion Web UI にアクセスすることができません。
そこで SSM の Session Manager 機能を使ってみましょう。Session Manager は EC2 インスタンスにインストールされたエージェントと、ローカル PC 上のクライアントの間にセッションを作成してくれます。
この Session Manager の機能を使って、EC2 インスタンスのポートをローカル PC にポートフォワーディングすることで、EC2 インスタンス側でポートを解放していなくても、ローカル PC のブラウザから Stable Diffusion Web UI にアクセスすることが可能です。
それでは、Session Manager を利用する準備をしていきましょう。
6-1. AWS CLI をインストールする
Session Manager のポートフォワーディングを利用するには、AWS CLI をインストールする必要があります。
Windows、macOS、Linux それぞれインストール手順が異なりますので、こちらの公式ドキュメント を参考に、AWS CLI のインストールを行ってください。
6-2. AWS CLI への認証情報の設定
AWS CLI に認証情報を設定します。以下のコマンドを実行しましょう。
$ aws configure
各種設定
以下のとおり、各種設定を行います。
AWS Access Key ID: (先ほど作成したアクセスキー)
AWS Secret Access Key: (先ほど作成したシークレットアクセスキー)
Default region name: us-east-1(S3 バケットを作成したリージョンと同じリージョン)
Default output format: json
設定完了
6-3. Session Manager のポートフォワーディングを利用する
それでは、EC2 上の Stable Diffuison Web UI 等に接続していきましょう。
前回の記事で構築した環境では、EC2 上の Stable Diffusion Web UI に対してパブリック IP で直接接続を行っていました。
ですが、今回構築する環境では、Session Manager のポートフォワーディング機能を利用して、よりセキュアに EC2 へアクセスを行います。
Session Manager 経由の構成に変更することで、エンドポイントをパブリックに公開する必要がなくなるため、Stable Diffusion Web UI 経由で拡張機能のインストールが可能になります。
AWS Systems Manager Session Manager のポートフォワーディング機能の詳細については こちらの記事 をご参照ください。
ポートフォワーディングには、Github リポジトリの port-forwarding.sh スクリプトを利用します。こちらの sh ファイルをローカルにダウンロードしましょう。
スクリプトは以下のように引数を渡して実行する必要があります。
EC2 インスタンスの ID は 3-4. 作成されたリソースを確認する で事前に控えておいた インスタンスの ID に置換してください。
スクリプト
引数を渡して実行します
AWS Access Key ID: (先ほど作成したアクセスキー)
AWS Secret Access Key: (先ほど作成したシークレットアクセスキー)
Default region name: us-east-1(S3 バケットを作成したリージョンと同じリージョン)
Default output format: json
表示ログ
引数に指定した 3 つの数字はそれぞれポートフォワーディングを行うポート番号になります。 以下のようなログが表示されたら、ポートフォワーディングの準備は完了です。
Starting session with SessionId: cli-user-09f4858eb3e25f8ee
Port 7861 opened for sessionId cli-user-09071b3bb0c49e67a.
Waiting for connections...
Port 7860 opened for sessionId cli-user-084d2a01fd201e710.
Waiting for connections...
Port 8080 opened for sessionId cli-user-09f4858eb3e25f8ee.
Waiting for connections...
7. 起動したアプリケーションにアクセスする
7-1. Stable Diffusion Web UI にアクセスする
7-2. Stable Diffusion Web UI に拡張機能をインストールしてみる
7-3. Kohya's GUI にアクセスしてみる
次は localhost:7861 にアクセスしてみましょう。
こちらの画面が表示されれば、Kohya's GUI の起動ができています。
Kohya’s GUI では、GUI ベースでモデルのトレーニングを行うことができます。
モデルのトレーニングについては、またの機会に取り上げる予定です !

7-4. File Browser にアクセスしてみる
8. インスタンスを停止する
8. まとめ
前回の記事に引き続き、aws-samples の CloudFormation テンプレートを使うことで、Stable Diffusion Web UI + α を使うことができる環境を立ち上げることができました !
拡張機能のインストールや、File Browser でのファイル操作など、より本格的に Stable Diffusion Web UI を EC2 上で使う場合、こちらのソリューションをぜひお試しください !
筆者プロフィール
小林 大樹
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト
VTuber をこよなく愛するソリューションアーキテクト。普段は業種業界問わず、様々なお客様のプロダクト開発をサポートさせていただいております。悩みは推し VTuber が増えすぎて視聴時間を確保できないことです。

Did you find what you were looking for today?
Let us know so we can improve the quality of the content on our pages