CUEBiC TEC BLOG

キュービックTECチームの技術ネタを投稿しております。

Stable DiffusionのWebUIをAWSのEC2で実装して料金を徹底比較!

thumbnail of article
進化が止まらない生成AI。

その中でもStable Diffusionは特にコンピュータリソースに依存します。そこで今回は生成速度と料金に関して調べるべく、AWSの比較的安価なEC2(Elastic Compute Cloud)からNVIDIA RTX A6000環境まで、様々なスペックで画像生成テストをしてみようと思います。また、つまづきがちなNvidia Driverのインストールが不要で簡単にStable Diffusionが利用できるAMIの使い方もご紹介します。

※本記事は検証のため一時的にサーバーを立ち上げていますが、シャットダウンを忘れるとかなり費用がかかりますので注意してください

Stable Diffusion WebUIをインストールするEC2のGPUインスタンス

AWSの推奨GPUインスタンス

となっております。

docs.aws.amazon.com

それぞれのインスタンスのスペックをまとめてみました。

インスタンスのスペック表

GPUメモリの大きさが同じインスタンスタイプがある場合はインスタンスサイズの小さいものを取り上げています。

この中でも今回は色の付いているインスタンスにStable Diffusionをインストールしていきます。また、データ転送速度は大きな影響がないため、価格の低いバージニア北部リージョンで実行していきます。

今回検証するインスタンスの表

※比較表に用いられている料金は東京リージョンのものです

AWSGPUが使いやすいEC2インスタンスを立ち上げる方法

まずはセキュリティグループの設定です。AWSのコンソールからEC2のダッシュボードを開き、セキュリティグループを作成します。

インバウンドルールではSSHと立ち上げ後のページにアクセスできるようにポート番号7860番を自身のIPアドレスにて開放します。IPアドレスはソースをマイIPとすると勝手に入力されます。アウトバウンドルールはAnywhere−IPv4としておきます。

セキュリティグループの設定方法

次にEC2の立ち上げです。今回はトラブルが起こりやすいNvidia Driverのインストールが必要ないAMIを利用してインストールしていきます。

AMIはNVIDIAドライバー、CUDA ツールキットがインストール済みの「Deep Learning AMI GPU PyTorch 1.13.1 (Amazon Linux 2) 」を使います。また、インスタンスタイプによって利用できるアベイラビリティゾーンが異なりますので注意してください。基本的には全てに対応している「ap-northeast-1a」を利用するのが良いでしょう。

インスタンスとアベイラビリティゾーンの関係

AMIの設定はアプリケーションおよびOSイメージより検索できます。

AMIの設定方法

その後検索窓に「Deep Learning AMI GPU PyTorch 1.13.1 (Amazon Linux 2) 」と入力すると該当のAMIが選択できます。選択したら先程作成したセキュリティーグループを選択し、EC2を立ち上げます。

AMIの検索方法

Stable Diffusion AUTOMATIC1111 web UIをAWSのEC2にインストールする方法と使い方

Stable Diffusion Web UIでは、Python 3.10.6(2023年12月現在の対応バージョン)が必要なので、Pyenvを利用してインストールします。opensslもバージョン変更をします。

$ sudo yum remove openssl openssl-devel
$ sudo yum -y install bzip2 bzip2-devel gcc git libffi-devel make openssl11 openssl11-devel readline readline-devel sqlite sqlite-devel zlib-devel xz-devel

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

.bashrcに下記PATHを記載し、

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"

バージョン確認をします。

$ source .bashrc
$ pyenv --version

インストールが完了したらPython3.10.6をインストールします。すこし時間がかかります。

$ pyenv install 3.10.6
$ pyenv global 3.10.6

$ python3 -V
Python 3.10.6

ここまで来たら後はWebUIをインストールして実行するだけです。

$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
$ cd stable-diffusion-webui

ここで、Publicリンクを生成するための設定を追加します。

$ vim webui-user.sh
export COMMANDLINE_ARGS=""

export COMMANDLINE_ARGS="--xformers --share --enable-insecure-extension-access"

に変更します。

今回は「majicMIX realistic V7」を使っていくのでそのセットアップも行います。

$ cd models/Stable-diffusion
$ curl -L "https://civitai.com/api/download/models/176425?type=Model&format=SafeTensor&size=pruned&fp=fp16" -o majicmixRealistic_v7.safetensors
$ cd ../..

最後に

$ ./webui.sh 

で実行するとRunning on public URLで記載されているURLからStable Diffusionが使えるようになります。

AWSGPUインスタンスの料金と生成速度比較

今回は下記の設定とし、解像度は512×768。2倍と3倍にアップスケールした際の生成速度を測定します。

Steps: 20, Sampler: Restart, CFG scale: 7, Seed: 491788995, Size: 512x768, Model hash: 7c819b6d13, Model: majicmixRealistic_v7, Denoising strength: 0.7, Hires upscale: 1, Hires upscaler: R-ESRGAN 4x+, Version: v1.6.0-2-g4afaaf8a

生成結果は下記のとおりです。

インスタンス別の生成速度とコスト比較表

インスタンス別の生成速度とコスト比較グラフ

GPUメモリの少ないインスタンスでは、CUDA out of memoryとなり生成が完了しないこともありました。

また、解像度が512×768pxで外れ値的な時間がかかっている「g3s.xlarge」インスタンスを除いたグラフは下記のとおりです。

インスタンス別の生成速度とコスト詳細比較グラフ

自前のA6000(48GB)サーバーで実行した際には

  • 1倍 : 5.5 sec.
  • 2倍 : 19.6 sec.
  • 3倍 : 1 min. 1.4 sec. という結果になりました。

今回の検証で拡張すると構造がおかしくなってしまう事象が確認できました。そのため、拡張は2倍位に抑えたほうが良さそうです。はじめから解像度の高い写真を生成することも可能ですが、解像度を高くすると顔が2つでてきてしまうこともあるため、適切な解像度に設定する必要があります。

Denoising strengthを低めに設定するアイデアもありますが、その場合は変なノイズが入ってしまったりぼやけてしまうことがあります。高解像度の画像生成は調整が必要ですが、今回は写真のクオリティにはこだわらないことにしました。

また、g4adインスタンスAMD Radeon Pro V520 GPUになりますので、CUDA環境とは少し異なります。Stable Diffusionの利用のみを考える場合はg4adインスタンスでの実行も検討余地がありそうです。

結論

検証の結果、「g4dn.xlarge」で十分であるという結論に至りました。

もちろん「g5.xlarge」のほうが短辺1024pxで生成する場合は圧倒的に生成が早いですが、1024pxで生成すると構成の崩れなどが起こるので512pxでの生成を行い、必要な画像のみ2倍にアップスケールする運用がメインになってくると思います。その場合、短辺512pxで生成する場合は時間的な差分がほとんどないため「g4dn.xlarge」インスタンスで十分という結論になります。

その際のコストも、 0.526($/h) × 8 (営業時間) × 25(営業日)= 105.2 $/月 と現実的なものになります。

よくある質問

AWSでStable Diffusionを使うと費用はどのくらいかかりますか?

Stable Diffusion自体は無料で利用可能です。しかしモデルを動かすサーバーが必要となり、最も安価なEC2でも1時間で$0.526かかります。

AWSのBedrockでStable Diffusionを使うにはどれくらいの料金がかかりますか?

プレイグラウンドで試す分には無料で利用可能です。しかし、設定できるパラメータが少なく、自由に設定するためにはAPIから利用する必要があります。

APIで利用する場合は最新モデルのSDXL 1.0 で1枚あたり$0.04の費用がかかります。

BedrockのStableDiffusionの料金

詳細はこちら。

aws.amazon.com

Stable Diffusionで生成した画像は商用利用可能ですか?

基本的には商用利用可能です。

しかし、中には商用利用が認められていないモデルもありますので、ライセンスに「CreativeML Open RAIL-M」と表示されているか確認を行いましょう。