メインコンテンツに移動
日常で楽しむクラウドテクノロジー

1 クリックで立ち上がる自分だけの環境で、お猫様の画像生成をやってみた。

2023-08-02 | Author : 小林 大樹

はじめに

みなさん、こんにちは ! VTuber 大好きソリューションアーキテクトの小林 D です。

 

突然ですが、みなさんは Stable Diffusion という画像生成 AI を使ったことはありますか ? Stable Diffusion は英国の Stability.AI 社が開発した、入力したテキスト (プロンプト) から画像を生成することができる画像生成 AI です。

Stable Diffusion はオープンソースのモデルとなっており、Amazon SageMaker JumpStart 上でも簡単に動かすことができます。

以下は SageMaker JumpStart で Stable Diffusion を利用する AWS Blog の記事です。

このように、SageMaker JumpStart を使うことで、SageMaker や Jupyter Notebook に慣れた方は簡単に Stable Diffusion のをデプロイし、システムに組み込むことができます。

一方で、システムに組み込むのではなく、業務の補助ツールとして Stable Diffusion を利用したい、というニーズもあります。

実際に、お客様に対して SageMaker JumpStart の画面をお見せして画像生成のデモをした際、デザイナーの方から「自分でも弄ってみたいけど、Python や Jupyter Notebook に馴染みがないので難しそう」「GUI で細かくパラメータ調整をしたい」というお声をいただくことがありました。

A vibrant, AI-generated artistic portrait of a cat with green eyes and a colorful abstract background.

Stable Diffusion Web UI

そこで利用できるのが AUTOMATIC1111 氏が公開している Stable Diffusion Web UI です。

Stable Diffusion Web UI ではブラウザベースの UI で Stable Diffusion を利用することができるツールとなっています。そのため、コードを書くことなく、様々なパラメータを直感的に操作することが可能です。

ということで、この記事では Amazon EC2 を利用して、AWS 上に Stable Diffusion Web UI を利用できる環境を作っていきたいと思います !


X ポスト » | Facebook シェア » | はてブ »

Screenshot of the Stable Diffusion user interface showing settings and the result of generating a detailed watercolor painting of a cat with a colorful background.

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »

builders.flash メールメンバー登録

builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。

今すぐ登録 »

1. 事前準備

Stable Diffusion web UI を実行するために、インスタンスタイプ g4dn.xlarge の EC2 インスタンスを起動します。

デフォルトでは GPU インスタンスのクォータ (起動台数の上限) が 0 に設定されているため、クォータの引き上げを行いましょう。

クォータを確認したいリージョンを選択

こちらのリンク から「Running On-Demand G and VT instances」 のページを開きます。

ページが開いたら、「リージョン」を選択 を押してクォータを確認したいリージョンを選択します。

※この記事の手順ではバージニア北部リージョンを利用します

Screenshot of the AWS Management Console with the region selection dropdown menu open, displayed in Japanese. The selected region is US East (N. Virginia) (us-east-1), with other AWS regions listed below, including Ohio, N. California, Oregon, Mumbai, and Osaka.

クォータの引き上げをリクエスト

適用されたクォータ値の値を確認し、値が 4 未満であれば「クォータの引き上げをリクエスト」を押して、クォータを 4 以上に引き上げます。

※ なぜ 4 以上に引き上げるかというと、Running On-Demand G and VT instances の設定値はインスタンスの数ではなく vCPU の数になっているからです。g4dn.xlarge インスタンスが利用する vCPU 数は 4 です。そのため、最低 4 vCPU で申請を行いましょう。

Screenshot of the AWS Service Quotas console in Japanese showing the quota details for Running On-Demand G and VT instances, including quota values, usage, and quota increase request options.

g4dn.xlarge インスタンスについて

今回利用する g4dn.xlarge インスタンスは、NVIDIA T4 GPU を搭載した GPU インスタンスです。他の多くのAWS サービスと同様に、EC2 インスタンスは利用した分の従量課金となっており、バージニア北部 (us-east-1) リージョンで g4dn.xlarge インスタンスを利用する場合、1 時間あたり 0.526 ドルで利用することができます。

1 日 6 時間利用したとしても、料金は 0.526 x 6 = 3.156 ドル。1 ドル 140 円換算でも 441 円です !

ランチの牛丼一杯分のお値段で、6 時間画像を作り放題ということになりますね !

※ 利用料はリージョンによって異なります、us-east-1、 us-east-2、us-west-2 など北米のリージョンは EC2 インスタンスを比較的安価に利用することが可能です。それぞれのリージョンの最新の料金については料金ページをご確認ください。

2. Amazon VPC の作成

2-1. VPC を作成する

では、クォータが問題なければ、早速 EC2 インスタンスを起動し、Stable Diffusion Web UI をインストールしていきましょう !

まずは、EC2 インスタンスを立ち上げるための VPC を用意します。VPC は AWS アカウント内に作成される、プライベートな仮想ネットワークのことです。

VPC を選択

検索欄に「VPC」と入力し、表示された VPC を押します。
Screenshot of the AWS Management Console displaying a search for 'VPC' in the Japanese language interface, highlighting the VPC service and related results.

VPC を作成

VPC を作成」を押します。
AWS VPCダッシュボードの日本語インターフェースで「VPCを作成」ボタンがハイライトされているスクリーンショット。VPCやサブネット、リソース一覧などのメニューも表示されている。

VPC の設定

VPC の作成画面が表示されるので、「VPC など」を選択します。

名前タグの自動生成」欄に、任意の名前を入力しましょう。ここでは stable-diffusion とします。

Screenshot of the AWS VPC creation interface displayed in Japanese, showing options for creating VPC and highlighting the use of 'stable-diffusion' as a tag example.

プレビューを確認

画面右側のプレビュー欄を見ると、「 名前タグの自動生成」欄に入力した値が VPC 内のリソースに付与されており、識別がしやすくなりました。
Diagram showing the structure of an AWS VPC with subnets for Stable Diffusion, labeled in Japanese, including public and private subnets in us-east-1a and us-east-1b.

オプション設定

その他の値はデフォルトのままで問題ありません。

画面を一番下までスクロールし、「VPC を作成」を押します。

Screenshot of the AWS VPC creation screen in Japanese, showing DNS options with 'Enable DNS hostnames' and 'Enable DNS resolution' checked, and the 'Create VPC' button highlighted.

VPC ワークフローの作成

VPC に加えて、インターネットに接続するための経路であるインターネットゲートウェイや、ルートテーブルの設定などが自動的に行われます。

成功」が表示されたら、右下の「VPC を表示」を押しましょう。

Screenshot of a successful AWS VPC workflow creation process in Japanese, showing the detailed steps of VPC, subnets, route tables, and endpoint configuration in the AWS Management Console.

2-2. VPC ID の値を確認する

表示された VPC ID の値を控えておきます。

※ Stable Diffusion Web UI 環境を立ち上げる際、VPC を指定するために利用します。

Screenshot of the AWS console displaying details for a VPC named 'stable-diffusion-vpc' with VPC ID vpc-083bc6bdbf9b0ee72, showing the status as 'Available' and additional configuration details in Japanese.

2-3. サブネット ID の値を確認する

画面下の Resource map 欄に表示されているサブネットを確認します。

サブネットは、VPC を小さく分割したネットワークセグメントのことです。

名前の中に public と入ったサブネットと、private が入ったサブネットが 2 つずつ作成されています。前者はパブリックサブネットと呼ばれており、インターネットへアクセスする経路があるサブネットのことを指します。後者はプライベートサブネットと呼ばれており、インターネットへアクセスする経路がない、閉じたサブネットのことを指します。

今回はパブリックにアクセス可能な環境を作成するため、EC2 インスタンスが起動するサブネットはパブリックサブネットを指定します。

パブリックサブネットの ID を確認するため、「stable-diffusion-subnet-public1...」という名前のサブネットをクリックして、サブネットの詳細画面を開きましょう。

Screenshot showing an example AWS VPC resource map in the AWS Management Console, highlighting subnets for a stable diffusion deployment. The interface displays subnet details in us-east-1 and instructions about VPC resource map features.

サブネット ID の値を保存

サブネット ID」の値を控えておきましょう。
Screenshot showing AWS VPC subnet details UI with highlighted subnet ID (subnet-0c3792f34c2d36663), ARN, and IP address information, used as a reference for Stable Diffusion example.

3. AWS CloudFormation でリソースを作成する

3-1. Github リポジトリを確認する

Stable Diffusion Web UI on AWS の Github リポジトリ をブラウザで開きます。このリポジトリには 4 種類の AWS CloudFormation テンプレートが用意されています。

CloudFormation は AWS リソースの構築をコードによって行うことができるサービスです。YAML または JSON 形式で、AWS のリソースの構成を記述したテンプレートファイルを用意し、CloudFromation に読み込ませることで、自動的にリソースを作成することができます。

今回は、このリポジトリにある CloudFormation テンプレートを使って、Stable Diffusion Web UI の実行環境を作成していきます。

このリポジトリには 4 種類の異なる構成のテンプレートがあります。以下に、それぞれのテンプレートの内容をまとめました。

  • sd-webui.yaml
    • EC2 上に Stable Diffusion Web UI が起動する環境を用意します。パブリックにアクセスすることが可能です。
    • 一方で、セキュリティ上の理由 から UI 経由で拡張機能をインストールができないなど、機能に制約があります。
  • sd-webui-private.yaml
    • EC2 上 に Stable Diffusion Web UI が起動する環境を用意するところは sd-webui.yaml と変わりませんが、EC2 をパブリックに開放せず、プライベートなアクセスに限った環境を用意する、という違いがあります。
    • こちらのテンプレートで作成した Stable Diffusion Web UI にはパブリックにアクセスをすることはできませんが、AWS Systems Manager のセッションマネージャーという機能を利用することで、EC2 にポートフォワーディングを行い、プライベートに Stable Diffusion Web UI を利用することが可能です。
    • また、File Browser というツールが EC2 にインストールされるため、ブラウザから EC2 内のディレクトリにアクセスし、ファイルの管理を行うことができます。
  • sd-webui-kohya-private.yaml
    • sd-webui-private.yaml の機能に加えて、Kohya’s GUI がインストールされます。こちらは、GUI ベースでモデルのトレーニングができるツールです。お手元の画像を File Browser 経由で EC2 にアップロードし、Kohya’s GUI でトレーニングをしてみる…といったことが可能になります
  • sd-webui-kohya-private-s3.yaml
    • sd-webui-kohya-private.yaml の機能に加えて、オブジェクトストレージの S3 が EC2 にマウントされます。File Browser 経由で S3 にアクセスすることもできるため、非常に便利です。

今回は、最もシンプルな sd-webui.yaml を利用して環境を構築していきます。

3-2. CloudFormation テンプレートを読み込む

CloudFormation テンプレートをダウンロードし、マネジメントコンソールから読み込む方法もあるのですが、「Launch Stack」ボタンを押すことで、直接 CloudFormation のスタック作成ページに飛ぶことができます。

sd-webui.yaml の左にある「Launch Stack」ボタンを押しましょう。

A screenshot of a table listing CloudFormation templates for launching the Stable Diffusion Web UI on AWS EC2 instances. The table columns include Launch Stack, Cfn Template, and Description, with various templates and access options described in Japanese.

3-3. スタックの詳細の入力

Launch Stack」ボタンを押すと sd-webui.yaml テンプレートが自動的に読みこまれ、CloudFormation スタックの詳細を設定する画面が開きます。

起動する EC2 の設定や、Stable Diffusion Web UI のバージョン情報などはデフォルトの値が設定されているため、SubnetIdVpcId の値に、先ほど控えた「サブネット ID の値」、「VPC ID の値」をそれぞれ設定し、「スタックの作成」を押しましょう。

ここで指定した VPC のサブネットに、EC2 インスタンスが起動します。

Screenshot of the AWS CloudFormation setup interface in Japanese, showing parameters for deploying Stable Diffusion WebUI. Parameters include stack name, AMI ID, EC2 instance type, SDWebUI version, Subnet ID, and VPC ID. 'Create Stack' button is highlighted.

構築完了

スタックの作成が開始されると、CloudFormation の「イベント」タブにリソースの作成状況が表示されます。

数分ほど待って、論理 ID 欄が sd-webui (スタック名) のレコードのステータス欄が CREATE_COMPLETE ステータスに変わった後、10 分ほど待つと環境構築が完了します。

CREATE_COMPLETE が表示された時点で EC2 インスタンスの作成は完了していますが、EC2 インスタンスの内部で Stable Diffusion Web UI のインストール等が実行されるため、ブラウザから接続できる準備が整うまで 10 分程度かかります

Screenshot of the AWS Console showing the stack events for 'sd-webui', highlighting the 'CREATE_COMPLETE' status for stack creation. The image shows a list of events with timestamps, logical IDs, and status columns.

3-4. 作成されたリソースを確認する

出力」タブを確認すると、作成されたリソースの情報を確認することができます。

  • InstanceID : EC2 インスタンスの ID です。
  • Publicip : EC2 インスタンスに割り当てられた IP アドレスです。

Publicip の IP アドレスの値はこのあと Stable Diffusion Web UI に接続する際に利用するので、控えておきましょう。

AWSマネジメントコンソールでEC2インスタンスの出力タブに表示される、インスタンスIDとパブリックIPアドレスの日本語画面。

EC2 インスタンスの作成に失敗する場合

※ もしここで、このようなエラーが出て EC2 インスタンスの作成に失敗する場合は、GPU インスタンスのクォータ (起動台数の上限) に抵触しています。 1. 事前準備 を参考にクォータの引き上げを行ってください。
Screenshot showing an AWS EC2Instance error where the vCPU limit has been exceeded. The error message indicates that more vCPU capacity was requested than the current vCPU limit allows and provides instructions to request a limit adjustment via AWS support.

スタックを再度作成する場合

クォータの引き上げ後、スタックを再度作成する際には、作成に失敗したスタックは削除しておきましょう。

削除」ボタンからスタックの削除を行うことができます。

スタックの削除後、再度 Github リポジトリの「Launch Stack」ボタンからスタックを作成しましょう。

Screenshot of the AWS Management Console in Japanese, highlighting the 'Delete' (削除) button.

4. Stable Diffusion Web UI の実行状況を確認する

4-1. Amazon EC2 インスタンスに接続する

CloudFormation によるリソースの作成完了から 10 分程度経ったら、Stable Diffusion Web UI の実行状況を確認してみましょう。検索欄に「 EC2」と入力し、表示された「 EC2」を押します。
Screenshot of the AWS Management Console displaying a search for EC2 services in Japanese, highlighting the EC2 virtual server service.

実行中のインスタンスを選択

EC2 ダッシュボードが開くので。「 インスタンス (実行中)」を押します。
Screenshot of the AWS EC2 dashboard in Japanese, showing an EC2 instance in a running state highlighted in the resources panel.

インスタンスに接続

CloudFormation によって作成された sd-web-ui-cf インスタンスが実行中になっています。

インスタンスを選択し、「接続」を押しましょう。

Screenshot of the AWS EC2 console instance list page, displayed in Japanese language, showing an instance named 'sd-web-ui-cf' with ID 'i-04acf260d160961de' and type 'g4dn.xlarge' in a running state.

EC2 Instance Connect を使用して接続する

インスタンスの接続画面が開くので「EC2 Instance Connect」タブが選択されていることを確認し、「EC2 Instance Connect を使用して接続する」を選びます。

右下の「接続」ボタンを押して、ブラウザ経由で EC2 インスタンスに接続しましょう。

Screenshot of the AWS EC2 Instance Connect user interface in Japanese, showing connection options, instance ID, IP address, and user name fields for connecting to an EC2 instance.

接続成功

EC2 Instance Connect 経由で EC2 インスタンスに接続できました。
Screenshot of the AWS Management Console showing an EC2 SSH login terminal with Japanese user interface elements. The terminal displays a successful login to an Ubuntu instance.

4-2. Stable Diffusion web UI のログを確認する

では、Stable Diffusion web UI の実行状況を確認しましょう。

Stable Diffusion web UI のログを確認

以下のコマンドを実行し、Stable Diffusion web UI のログを確認します。

bash
cd /home/ubuntu/
cat sd-webui-log.txt

出力ログ確認

特にエラーがなく、以下のようなログが出力されていれば起動が完了しています。

bash
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. Stable Diffusion Web UI に接続する

5-1. ブラウザからアクセスする

ブラウザを起動し、http://<PublicIP>:7860 にアクセスしましょう。

<PublicIP> の値は CloudFormation でリソースを作成した際に控えた IP アドレスです。

アクセス成功

このような画面が表示されたら、Stable Diffusion Web UI へのアクセスに成功しています !
Screenshot of the Stable Diffusion txt2img user interface, showing various input fields and configuration options such as prompt entry, sampling method, image dimensions, batch size, CFG scale, and a large 'Generate' button.

お猫様の画像を生成

試しにお猫様の画像を生成してみましょう。Prompt に a cat と入力し、「Generate」を押します。

かわいいお猫様が出力されました !

A cat generated by Stable Diffusion UI, shown on a green background.

5-2. インスタンスへの接続を制限する

Stable Diffusion Web UI をパブリックに利用できる環境を作ることができました。

ですがこの状態だと、Public IP の値を知っていれば誰でも Stable Diffusion Web UI を使うことができてしまいます。セキュリティを高めるため、アクセス元の IP を制限してみましょう。

表示されているセキュリティグループ ID を選択

EC2 のインスタンス一覧を開き、sd-web-ui-cf インスタンスを選択します。

画面下に表示される「セキュリティ」タブを選択し、「セキュリティグループ」欄に表示されているセキュリティグループ ID を押しましょう。

AWS マネジメントコンソールで EC2 インスタンス(sd-web-ui-cf)のセキュリティグループ(sg-07cb21270046f196b)設定画面を日本語で表示しているスクリーンショット。

インバウンドのルールを編集

インバウンドのルールを編集」を押します。
AWSマネジメントコンソールのセキュリティグループのインバウンドルール設定画面(日本語インターフェース)。SSHとカスタムTCPルールの例が表示されています。

IP アドレスを制限

現在はポート 22 7860 に対して、0.0.0.0/0 からのアクセスが許可されています。0.0.0.0/0 はすべての IP アドレスを意味しているため、どこからでもアクセスができる状態になっています。

こちらを自分の IP アドレスだけに絞りましょう。

AWSの日本語コンソールでセキュリティグループのインバウンドルール編集画面が表示されており、SSH(TCP 22)およびカスタムTCP(ポート7860)のソースが0.0.0.0/0(全公開)となっている内容です。

自分の IP アドレス以外を制限

それぞれのレコードの 0.0.0.0/0 の隣の × を押します。
AWSの日本語ユーザーインターフェースで、セキュリティグループの0.0.0.0/0許可ルールを削除する操作を示すスクリーンショット。削除ボタンに赤い矢印が指されています。

マイ IP を選択

カスタム」→「マイ IP」を選択します。

現在操作を行っている環境の IP アドレスが自動的に入力されます。

AWSセキュリティグループのインバウンドルール設定画面を表示しています。SSHやカスタムTCPの設定例があり、ソースIPとして「カスタム」や「マイIP」を選ぶ日本語UIが強調されています。

設定を保存

このように、自分の IP アドレスが設定されれば OK です。

ルールを保存」ボタンを押して、設定を保存しましょう。

AWSの管理コンソールにおけるセキュリティグループのインバウンドルール編集画面(日本語インターフェース)のスクリーンショット。SSHやカスタムTCPルールが表示され、IPアドレスやポートの設定が可能です。

アクセス制限完了 !

変更後のインバウンドルールのソース欄の値が、自身の IP アドレスの値になっていれば変更は完了です。

ここで指定した IP アドレス 以外からは Stable Diffusion Web UI にアクセスできないようになりました !

Screenshot of the AWS security group inbound rules interface in Japanese, displaying IPv4 rules for SSH and custom TCP ports with masked IP addresses.

6. インスタンスを停止する

EC2 インスタンスは、利用した分だけ料金が発生する従量課金となっています。そのため、画像生成を楽しんだ後は EC2 インスタンスを停止して、課金を止めておきましょう。

インスタンスの停止の手順

対象の EC2 インスタンスを選択し、「インスタンスの状態」→「インスタンスの停止」を押すことで、EC2 インスタンスを停止することができます。

再度 Stable Diffusion Web UI を触りたいときは、「インスタンスの状態」→ 「インスタンスを開始」を押すことで、インスタンスを起動することが可能です。

※ このとき「インスタンスを終了」を押すと、EC2 インスタンスが削除されてしまい、生成した画像も一緒に消えてしまうためご注意ください。

AWS マネジメントコンソール(日本語版)でEC2インスタンスのステータスを『停止』に変更する手順を示す画面のスクリーンショット。インスタンス一覧リストと『インスタンスの状態』メニューの操作が表示されています。

Stable Diffusion Web UI 環境 の

また、Stable Diffusion Web UI 環境が不要になった際は、マネジメントコンソールの CloudFormation の画面から「 削除」を押すことで EC2 を含めたリソースを削除することができます。
Screenshot of the AWS CloudFormation web console in Japanese, showing the interface for deleting a stack. The 'Delete' button is highlighted in red.

7. おわりに

aws-samples の CloudFormation テンプレートを使うことで、簡単に Stable Diffusion web UI を使うことができる環境を立ち上げることができました ! Stable Diffusion Web UI を AWS 上に立ち上げてお手軽に画像生成をしたい、という際にはぜひこちらの手順をお試しください。

筆者プロフィール

小林 大樹
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト

VTuber をこよなく愛するソリューションアーキテクト。普段は業種業界問わず、様々なお客様のプロダクト開発をサポートさせていただいております。悩みは推し VTuber が増えすぎて視聴時間を確保できないことです。

A person smiling and holding a glass with lime slices at a restaurant, with a warm and lively indoor atmosphere.