【Nyantech ハンズオンシリーズ】

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

2023-08-02
日常で楽しむクラウドテクノロジー

Author : 小林 大樹

Nyantech ハンズオンシリーズのその他の記事はこちら

選択
  • 選択
  • 機械学習を使って写真に写っている猫を見分けてみよう! ~ 前編 : Amazon SageMaker Ground Truth を使った画像のラベリング ~
  • 機械学習を使って写真に写っている猫を見分けてみよう! 〜中編:Amazon Rekognition Custom Labels を使った機械学習モデルの作成
  • 機械学習を使って写真に写っている猫を見分けてみよう! 〜後編:Amazon SageMaker を使った機械学習モデルの作成
  • たくさんの写真の中からうちの子 (猫) をみつけよう ! 〜機械学習と Amazon Elasticsearch Service で類似画像検索
  • Nyantech とはじめる MLOps 〜学習パイプランを使って効率的に猫を見分ける機械学習モデルを目指そう ! の巻〜
  • 猫の画像を使ってあそぶブラウザゲームを作ろう ! 〜AWS Cloud Development Kit (AWS CDK)で簡単デプロイ〜
  • Nyantech 画像生成選手権 ~ 画像生成 AI を使ってお題に近い猫の画像を生成しよう ! の巻
  • 1 クリックで立ち上がる自分だけの環境で、お猫様の画像生成をやってみた。
  • 1 クリックで立ち上がる自分だけの環境で、お猫様の画像生成をやってみた。- 拡張編 -
  • Nyantech であの猫のこんな写真を見つけたい ~ マルチモーダル埋め込みモデルを使って類似画像検索をパワーアップ ~
  • IoT を使ってお猫様の健康 (体重) をモニタリングしてみた
みなさん、こんにちは ! VTuber 大好きソリューションアーキテクトの小林 D です。
 
突然ですが、みなさんは Stable Diffusion という画像生成 AI を使ったことはありますか ? Stable Diffusion は英国の Stability.AI 社が開発した、入力したテキスト (プロンプト) から画像を生成することができる画像生成 AI です。

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

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

Stable Diffusion で生成した猫の水彩画

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

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

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

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

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

 画像をクリックすると拡大します

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

このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »

毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。 


1. 事前準備

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

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

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

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

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

 画像をクリックすると拡大します

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

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

 画像をクリックすると拡大します

今回利用する 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 を作成」を押します。

 画像をクリックすると拡大します

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

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

 画像をクリックすると拡大します

画面右側のプレビュー欄を見ると、「名前タグの自動生成」欄に入力した値が VPC 内のリソースに付与されており、識別がしやすくなりました。

 画像をクリックすると拡大します

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

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

 画像をクリックすると拡大します

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

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

 画像をクリックすると拡大します

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

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

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

 画像をクリックすると拡大します

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

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

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

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

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

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

 画像をクリックすると拡大します

サブネット ID」の値を控えておきましょう。

 画像をクリックすると拡大します

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」ボタンを押しましょう。

 画像をクリックすると拡大します

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

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

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

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

 画像をクリックすると拡大します

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

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

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

 画像をクリックすると拡大します

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

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

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

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

 画像をクリックすると拡大します

※ もしここで、このようなエラーが出て EC2 インスタンスの作成に失敗する場合は、GPU インスタンスのクォータ (起動台数の上限) に抵触しています。1. 事前準備 を参考にクォータの引き上げを行ってください。

 画像をクリックすると拡大します

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

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

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

 画像をクリックすると拡大します

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

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

CloudFormation によるリソースの作成完了から 10 分程度経ったら、Stable Diffusion Web UI の実行状況を確認してみましょう。検索欄に「EC2」と入力し、表示された「EC2」を押します。

 画像をクリックすると拡大します

EC2 ダッシュボードが開くので。「インスタンス (実行中)」を押します。

 画像をクリックすると拡大します

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

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

 画像をクリックすると拡大します

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

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

 画像をクリックすると拡大します

EC2 Instance Connect 経由で EC2 インスタンスに接続できました。

 画像をクリックすると拡大します

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

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

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

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

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

このような画面が表示されたら、Stable Diffusion Web UI へのアクセスに成功しています !

 画像をクリックすると拡大します

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

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

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

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

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

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

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

 画像をクリックすると拡大します

インバウンドのルールを編集」を押します。

 画像をクリックすると拡大します

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

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

 画像をクリックすると拡大します

それぞれのレコードの 0.0.0.0/0 の隣の × を押します。

 画像をクリックすると拡大します

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

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

 画像をクリックすると拡大します

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

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

 画像をクリックすると拡大します

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

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

 画像をクリックすると拡大します

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

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

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

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

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

 画像をクリックすると拡大します

また、Stable Diffusion Web UI 環境が不要になった際は、マネジメントコンソールの CloudFormation の画面から「削除」を押すことで EC2 を含めたリソースを削除することができます。

 画像をクリックすると拡大します

7. おわりに

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

Nyantech ハンズオンシリーズのその他の記事はこちら

選択
  • 選択
  • 機械学習を使って写真に写っている猫を見分けてみよう! ~ 前編 : Amazon SageMaker Ground Truth を使った画像のラベリング ~
  • 機械学習を使って写真に写っている猫を見分けてみよう! 〜中編:Amazon Rekognition Custom Labels を使った機械学習モデルの作成
  • 機械学習を使って写真に写っている猫を見分けてみよう! 〜後編:Amazon SageMaker を使った機械学習モデルの作成
  • たくさんの写真の中からうちの子 (猫) をみつけよう ! 〜機械学習と Amazon Elasticsearch Service で類似画像検索
  • Nyantech とはじめる MLOps 〜学習パイプランを使って効率的に猫を見分ける機械学習モデルを目指そう ! の巻〜
  • 猫の画像を使ってあそぶブラウザゲームを作ろう ! 〜AWS Cloud Development Kit (AWS CDK)で簡単デプロイ〜
  • Nyantech 画像生成選手権 ~ 画像生成 AI を使ってお題に近い猫の画像を生成しよう ! の巻
  • 1 クリックで立ち上がる自分だけの環境で、お猫様の画像生成をやってみた。
  • 1 クリックで立ち上がる自分だけの環境で、お猫様の画像生成をやってみた。- 拡張編 -
  • Nyantech であの猫のこんな写真を見つけたい ~ マルチモーダル埋め込みモデルを使って類似画像検索をパワーアップ ~
  • IoT を使ってお猫様の健康 (体重) をモニタリングしてみた

builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

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

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

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する