自分専用の画像生成エージェントを作ってみた1
なぜ作ろうと思ったか
本記事は、ComfyUIを用いたローカル画像生成をクラウドで快適にに行うための環境を整備する過程を記録するものである。普段私はChatGPTで毎回プロンプトを打って様々な画像生成を行っているが、1回の入力に対して1枚の画像出力しかできないのがネックであった。そこで、大量のプロンプトを事前に用意し、他の作業をしている間に画像生成を進めてくれるシステムがあれば便利だなと思ったことが今回のプロジェクトのきっかけである。
画像生成を簡単に行うSaaSは世に溢れているが、自分専用の環境が欲しかったことと、今後様々な作業を実行するAIエージェントを開発していく上での練習も兼ねている。
まずは「作る」より「触る」ことにした
当初は、自分専用の生成基盤についてWebUIで実行できるようにしたいとなとなく考えていたが、ClaudeでNext.jsプロジェクトを作成し、UIを整え始めると本質である画像生成モデルの設定に時間を使えなくなると考え、まずはローカルモデルで1枚画像生成をすることから始めてみようと考えた。本記事はAWS上のUbuntuサーバーでComfyUIを導入し、Fluxで1枚画像生成を生成するところまでの記録である。
今日やったこと
EC2インスタンスを立ち上げる
まずは、AWSでEC2インスタンスを立ち上げた。今回はローカル画像生成のモデルを動かすため、インスタンスタイプはg6.xlargeを採用した。
以下にインスタンスの設定を示す。
| 項目 | 値 |
|---|---|
| 名前 | image-agent |
| AMI | AWS Deep Learning Base OSS Nvidia Driver GPU AMI (Ubuntu 22.04) |
| インスタンスタイプ | g6.xlarge |
| リージョン | ap-northeast-1(東京) |
| ストレージ | 150GB gp3 |
注意
上記設定でインスタンスを起動しようとしたところ以下のエラーが発生した。
原因は、AWSの新規アカウントではGPUインスタンスの利用枠がデフォルトで0に設定されている場合があることである。今回起動しようとしたインスタンスはGPUインスタンスであり、上>限が0に設定されていた。 対処法は以下の通りである。
- AWSコンソールからService Quotasへ移動
Amazon EC2のRunning On-Demand G and VT instancesを開く- クォータの引き上げ申請を行う 通常であれば数分から数時間で承認される。
EC2起動前にServiceQuotasを確認しておくとスムーズになるだろう。
EC2へSSH接続
EC2起動後、以下のコマンドでSSH接続を行った。
chmod 400:秘密鍵ファイルの権限を「所有者のみ読み取り可能」に変更するコマンド。SSHは権限が緩い秘密鍵を拒否するため、接続前に実行する必要がある。
ssh -i:指定した秘密鍵を使ってサーバーへ接続するコマンド。今回はEC2作成時にダウンロードした.pemファイルを認証に利用した。
セットアップスクリプトをEC2へ転送
ローカルで作成したセットアップスクリプトをEC2へ転送した。
学び
scpはSecure Copyの略で、SSH経由でファイルを転送するコマンド。
-iは認証に使用する秘密鍵を指定するオプション。SSH接続時と同じ.pemファイルを利用する。
続いて、転送したスクリプトに実行権限を付与した。
学び
chmodはファイルの権限(permission)を変更するコマンド
+xは「実行可能」(executable)」な権限を追加することを意味する。
シェルスクリプトは実行権限がないと./setup-ec2のように実行できない。
実行前に内容を確認するため、以下のコマンドでスクリプトを表示した。
学び
catはファイル内容をそのまま表示するコマンド。 実行前にスクリプトの中身を確認することで、意図しない処理が含まれていないかを確認できる
ComfyUIセットアップスクリプトの実行
EC2へ接続後、Claudeが生成したセットアップスクリプトを実行した。
このスクリプトは、以下の5つの処理を自動化している。
- Linuxパッケージ更新
- GPU(CUDA)動作確認
- Python,PyTorch環境構築
- ComfyUIインストール
- サービス化
AI開発環境は、GPUドライバ→CUDA→PyTorch→ComfyUIのような依存関係の上に成り立っている。
CUDAはNVIDIAが提供するGPU計算基盤である。画像生成AIや機械学習では、CPUではなくGPUで大量の行列計算を実行する。今回のスクリプトでは、
でGPUを確認し、
でPyTorchからGPUが利用可能か確認している。
学び
GPUが搭載されていることと、AIから利用できることは別問題。 CUDAが正しく認識されて初めてAIモデルがGPUを使える。
PyTorchとは機械学習・深層学習の代表的なライブラリで、Stable Diffusion、ComfyUI、画像分類、物体検出など、多くのAIシステムがPyTorch上で動いている。
SSHポートフォワーディング
ComfyUIは通常
で起動するが、今回はEC2のUbuntu上で起動するため、自分のPCからは直接アクセスできない。
そこでSSHポートフォワーディングを行った。 SSHポートフォワーディングとは、SSH接続を利用して、EC2上のポートを自分のPCに転送する仕組みである。
これにより、EC2のlocalhost:8188を、自分のPC上のlocalhost:8188として利用できる。
外部公開せずに安全にアクセスできる点が特徴である。
実際のコマンドは次のような流れで行う。
Fluxのインストール
Hugging FaceからFLUX.1 Schnellに必要なファイルをダウンロードした。
| ファイル | 役割 | サイズ |
|---|---|---|
| flux1-schnell.safetensors | 画像生成を行うメインモデル | 22GB |
| ae.safetensors | VAE(潜在空間⇔画像変換) | 320MB |
| clip_l.safetensors | テキストエンコーダ | 235MB |
| t5xxl_fp8_e4m3fn.safetensors | 大規模テキストエンコーダ | 4.66GB |
合計で27GBとなり、AIモデルが非常に大きなデータであることがわかる。 これらのファイルの役割はそれぞれ異なり、
- プロンプトを理解するモデル
- 画像を生成するモデル
- 生成結果を画像へ変換するモデル に分かれている。当初は、FLUXモデルを1つダウンロードすれば終わりだと考えていたが、実際の処理の流れに応じて複数のモデルを入れる必要があるとわかった。
今回FLUXを実際にダウンロードしたことで、画像生成AIがどのような部品で動いているのかを理解できた。
学び
VAE(Variational AutoEncoder) は、AIが内部で扱う「潜在空間(Latent)」のデータと、人間が見る画像を相互に変換するためのモデルである。 画像生成AIでは、モデル本体が潜在空間上で画像を生成し、VAEがその結果を最終的なPNGやJPEG画像へ変換する役割を担う。