[ComfyMaster32] AWS上にComfyUI環境を構築しよう!(業務用)

AWS上にComfyUI環境を構築しよう!
3回に渡ってお送りしているAWS編。ホビーとしての画像生成を超えて、プロ向けかつコスト効果大なAWSクラウドサービス上でのComfyUI環境の構築を解説しています。最終回はマルチユーザーでの利用や認証、「業務用」として「業務利用での設定」をしっかりと解説していきます。

※チームでComfyUIを使う必要がある方に向けたプロ向け記事ですので本来は有料設定するべきですが、「祝!AWS ジャパン生成AI実用化推進プログラム採択」キャンペーンで期間限定でリポストで無料とさせていただいております。またこの内容はColoso「ComfyUIマスター:カスタムノードとアプリ開発」や近日発売予定の書籍に収録される予定です。動画メディアや書籍メディアで学びたい方はそちらもオススメいたします!

ユーザーの作成

AWS SageMaker Studio を使ったデフォルト設定のComfyUIにアクセスすると、まずログインを求められます。デプロイオプションでセルフサインアップを有効化している場合は、この画面からサインアップが可能ですが、デフォルトでは無効化されています。この場合は、ユーザー認証を担当するAWSのサービス「Cognito」からアカウントを直接作成しましょう。

画像

Cognitoのユーザープール、つまりログインできるユーザーの一覧を表示します。ここには、「ComfyUIuserPool〜」という名称のユーザープールが作られていますので、それをクリックします(以下の画像では2つありますが、初回の実行では1つしかないはずです)。

画像

表示された画面を下にスクロールすると、ユーザーセクションが見えます。初期状態では誰もユーザーが居ないので、「ユーザーを作成」ボタンをクリックして作成します。

画像

ユーザーアカウントの新規作成画面が開きます。ここで、ユーザー名とパスワードを入力し、最後に「ユーザーを作成」ボタンをクリックします。

画像

そうすると、新規ユーザーが追加されます。このユーザーでComfyUIにログインすることができます。

画像

ComfyUIへのログイン

それでは、先ほど作成したユーザー名とパスワードでログインします。

画像

パスワードの変更が求められるので、新規パスワードを入力し、「Send」ボタンをクリックしてください。

画像

そうすると、ComfyUI画面が開き、ComfyUIを使えるようになります。

画像

ComfyUI Workspace Managerのインストール

AWSの場合、ComfyUIにモデルやワークフローの追加をするためには、SSHで接続する必要がありますが、毎回接続するのは手間ですし、ITに詳しくない人も使用することを考えると、あまり良い手段とは言えません。
そこで、「ComfyUI Workspace Manager」を使用します。このカスタムノードは、ワークフローの管理やモデルのインストールをComfyUI上で行えるようにするカスタムノードです。ComfyUI  Managerから、このカスタムノードをインストールしてください。

https://github.com/11cafe/comfyui-workspace-manager

Workspace Managerをインストールすると、左上にフォルダアイコンと「Model」と表示されます。

画像

Workspace Managerからのモデルのインストール

「Model」をクリックすると、以下のようにCivitAIから取得されたモデル一覧が表示されます。ここから各モデルの「Install」ボタンをクリックするだけで、モデルをインストールできます。
しかし、CivitAIのモデルの中には、ログインしていないとダウンロードできないモデルもあります。その場合は、右上の「Set Civitai API Key」をクリックし、表示されたダイアログにCivitAIで取得したAPIキーを設定することで、ログインが必要なモデルのダウンロードも可能になります。

画像

※Civitaiの業務での利用については弁護士や各事業のAIコンプライアンスを担当する事業法務にご確認を推奨します。

Workspace Managerでのワークフローの管理と生成画像の一覧表示

Workspace Managerでは、左上のフロッピーアイコンをクリックすると、ワークフローを保存することができます。

画像

保存されたワークフローは、フォルダアイコンをクリックすると開かれる画面で管理できます。

画像

ワークフローを保存すると、左上に写真アイコン(ギャラリー)が増えます。ここでは、現在開いているワークフローで生成された画像の一覧を確認できます。

画像

ギャラリーを開くと、以下のように生成した画像一覧を閲覧できます。また、ここから画像をクリックすると、画像が別タブで開くので、そこで画像をダウンロードできます。

画像

画像ファイルをスWebsocketで外部保存するようなテクニックについては既にこの連載で扱ってきましたのでご参照ください。

デプロイオプションの変更

前回は、構築を行う前に、セルフサインアップや自動シャットダウンなどの設定はデフォルトのまま実行しました。ここから先はデプロイオプションの内容を確認しましょう。
最新のオプションはこちらのURLに資料があります。

https://github.com/aws-samples/cost-effective-aws-deployment-of-comfyui/blob/main/docs/DEPLOY_OPTION.md

app.pyでパラメーターを変更することで構成します。
https://github.com/aws-samples/cost-effective-aws-deployment-of-comfyui/blob/main/app.py

app.pyでの値の変更方法

app.pyファイル内でパラメーターを設定します。例えば、self_sign_up_enabled=Trueと設定することでセルフサインアップを有効にできます。その後、新しい設定で再デプロイするために以下のコマンドを実行します。

npx cdk deploy

セキュリティ関連の設定: セルフサインアップの有効化

ユーザーがアプリに簡単にオンボード(利用開始)できるようにするにはセルフサインアップを有効にします。self_sign_up_enabledをTrueに設定します(デフォルトはFalseです)。

comfy_ui_stack = ComfyUIStack(
    ...
    # Override Parameters
    self_sign_up_enabled=True,
    ...
)

MFAの有効化

MFA(多段階認証)をユーザーに強制するには、mfa_requiredをTrueに設定します(デフォルトはFalseです)。

comfy_ui_stack = ComfyUIStack(
    ...
    # Override Parameters
    mfa_required=True,
    ...
)

サインアップ可能なメールアドレスのドメインを制限

許可するドメインのリストをallowed_sign_up_email_domainsに設定します。Noneの場合、制限はありません。[]の場合、すべてのドメインが禁止されます。

comfy_ui_stack = ComfyUIStack(
    ...
    # Override Parameters
    allowed_sign_up_email_domains=["amazon.com", "amazon.co.jp"],
    ...
)

AWS WAFによるIPアドレス制限

アプリケーションへのアクセスをIPアドレスで制限するには、allowed_ip_v4_address_rangesおよびallowed_ip_v6_address_rangesにCIDR範囲を指定します。

comfy_ui_stack = ComfyUIStack(
    ...
    # Override Parameters
    allowed_ip_v4_address_ranges=["192.168.0.0/24"],
    allowed_ip_v6_address_ranges=["2001:0db8::/32"],
    ...
)

SAML認証の有効化

SAML認証を使用するためにSAMLの設定を有効にします。これによりCognitoによる従来の認証機能は無効になります。

comfy_ui_stack = ComfyUIStack(
    ...
    # Override Parameters
    saml_auth_enabled=True,
    ...
)

コスト関連の設定: スポットインスタンス

非クリティカルなワークロードでコスト削減を目的として、スポットインスタンスを使用できます。use_spotをFalseに設定すると無効にできます。スポット価格の上限をspot_priceで指定します。

comfy_ui_stack = ComfyUIStack(
    ...
    # Override Parameters
    use_spot=True,
    spot_price="0.752"
    ...
)

自動またはスケジュールでのスケールダウン

インスタンスをゼロまでスケールダウンしてさらにコストを削減できます。1時間の活動がない場合に自動でスケールダウンするには、auto_scale_downをTrueに設定します。

comfy_ui_stack = ComfyUIStack(
    ...
    # Override Parameters
    auto_scale_down=True,
    ...
)

スケジュールでスケールアップ/ダウンするには、schedule_auto_scalingをTrueに設定し、タイムゾーンとスケジュールを指定します。

comfy_ui_stack = ComfyUIStack(
    ...
    # Override Parameters
    schedule_auto_scaling=True,
    timezone="Asia/Tokyo",
    schedule_scale_up="0 8 * * 1-5",
    schedule_scale_down="0 19 * * *",
    ...
)

NATインスタンスの使用

NATゲートウェイの代わりにNATインスタンスを使用するには、cheap_vpcをTrueに設定します。

comfy_ui_stack = ComfyUIStack(
    ...
    # Override Parameters
    cheap_vpc=True,
    ...
)

カスタムドメインの使用

カスタムドメインを利用するには、事前にRoute53のパブリックホストゾーンが作成されている必要があります。host_name、domain_name、hosted_zone_idの値をapp.pyで指定します。

comfy_ui_stack = ComfyUIStack(
    ...
    # Override Parameters
    host_name="comfyui",
    domain_name="example.com",
    hosted_zone_id="XXXXXXXXXXXXXXXXXXXX",
    ...
)

運用コストを下げる技「自動スケールダウン」

インスタンスを放置すると自動でスケールダウンして運用コストを下げることができます。Scale Up ボタンを押すと5~10分程度でインスタンスが起動し利用できるようになります。

一方で、業務時間がはっきりしている実務で使う際は auto_scale_down を無効にして指定時刻で起動する方が使いやすいでしょう。

短時間での起動は現状インスタンスを削除して起動し直しているため、実測で5分以上かかっていますが、この辺りは業務で使う皆様はフィードバックをいただければよりよい改善ができるかもしれません。

最後に:まとめと謝辞

このたびAICUは「AWS ジャパン生成 AI 実用化推進プログラム」に採択されました!

クリエイティブAIで「つくるひとをつくる」をビジョンに、「わかるAIを届ける」をコンセプトに活動しているAICU mediaは、高い技術力と、わかりやすい記事を通して今後もより一層力を入れて、AWS(Amazon Web Services)の企業での社内開発やプロフェッショナル向けの使いこなし事例を当事者目線でお届けしていきます。

本稿の執筆にあたり、ご協力いただいたAWS前川さん、ありがとうございました。

ゲーム、広告、アニメ製作など、自社開発での画像生成の自社開発は見返りが大きいです。画像生成AIからプロフェッショナル業務でのオープンソース活用を盛り上げていきましょう!AICUもお手伝いいたします。
お問い合わせは X@AICUai までDMでどうぞ。


この記事の続きはこちらから https://note.com/aicu/n/na834888caa78

Originally published at https://note.com on Nov 7, 2024.