🐪

lambdalabsを使ってcomfyuiを立ててみる

2024/12/08に公開

lambdalabsを使ってcomfyuiを立ててみる

(本記事は、生成AI Advent Calendar 2024の8日目の記事です)

現状の課題

元々、お古のM1 Macbook Proを酔狂でホームサーバー化して運用して(遊んで)いた
cuda使えなくてもpytorchベースのものであればcuda->mpsにすればだいたい動く

同様にcomfyuiもそのmacbookサーバーで動かして画像生成して運用して(遊んで)いた
画像生成はできるがアニメーション作る系のワークフローを動かすとVRAMのOOME(Out of Memory)で落ちることが多発

元々生成できるとは言っても遅いかつ4090などのgpuを自前で買うのは高い
というわけで、こいつをlambdalabsで建てたgpuインスタンスに載せ替えてOOMEしないようにしてみる

結果

$0.7/hourのA10でも元々の環境(=ローカルサーバー)と変わらず手元のmacのブラウザでアクセスして8倍高速化かつ安定して生成できるようになった

(結局、VRAMとしてはそんなに変わってない。VRAMのOOMEだと思ってたけどRAMのOOMEだったかも?🤔 というか調べると実際はメモリの問題じゃないとか色々出てくるけどようわからん)

以下、OOMEになった全く同じワークフローでの生成時間比較

before
RuntimeError: MPS backend out of memory (MPS allocated: 10.67 GB, other allocations: 7.23 GB, max allowed: 18.13 GB). Tried to allocate 480.00 MB on private pool. Use PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0 to disable upper limit for memory allocations (may cause system failure).

Prompt executed in 705.28 seconds

after
Prompt executed in 93.55 seconds

comfyui起動時の表示比較

before
Total VRAM 16384 MB, total RAM 16384 MB

after
Total VRAM 22503 MB, total RAM 227496 MB

参考にした海外記事だとsshトンネル使ってるがtailscaleが便利なので今回はtailscaleを使う

そもそもlambdalabsとは

gpu付きのec2みたいなやつ。storageのマウントも簡単。安い

https://x.com/arutema47/status/1855057804262088900

手順

1. アカウント作成

https://lambdalabs.com/

2. ssh公開鍵の登録

sshコマンド打つローカルマシンのssh公開鍵を登録
だいたい~/.ssh/id_rsa.pubとか~/.ssh/id_ed25519.pubとかの名前であるはず
暗号化方式はrsaでもed25519でも可

3. インスタンス作成

Launch instanceを押下

好きなgpuインスタンスを押下

初回は好きなリージョンを押下。次回以降はストレージと同じリージョンを選択

初回はCreate New Filesystemを押下。comfyuiと指定すると、/home/ubuntu/comfyuiにマウントされる

あらかじめ登録しておいたsshキーを選択しLaunch instanceを押下

ちょっと待つ

3. sshログイン

しばらくするとSSH LOGINのところにコマンドが表示される
ターミナルにコピペしてsshできることを確認

4. ローカルで動かしてるcomfyuiの中身をgpuインスタンスにコピー

アップロード効率考えてzipにしておく

cd /path/to/comfyui
zip -r ComfyUI.zip ComfyUI

scpでアップロード

scp ComfyUI.zip ubuntu@{your-ip-address}:/home/ubuntu/

unzipしてstorageに移動させる

cd /home/ubuntu
unzip ComfyUI.zip
mv ComfyUI/* /home/ubuntu/comfyui/

5. pip install

gpuインスタンス一度消しても、次回以降毎回pip installしなくていいようにvenv使う
venv使うと使うとレポジトリ配下(=マウントしたstorage)に依存がインストールされる

cd /home/ubuntu/comfyui
python -m venv comfyui_venv
source comfyui_venv/bin/activate
pip install -r requirements.txt

6. comfyui起動

動かしてみる

python main.py --listen

カスタムノードに必要なパッケージがなくてエラーがでるので都度pip installする

7. ブラウザからアクセスできるように

お家vpnを簡単に作れる(=社内からだけアクセス可能な社内サーバーが簡単に建てられる)のでtailscaleがおすすめ
が、sshトンネルでも可
sshトンネルでのやり方は参考記事を参照のこと

ssh元のマシンにtailscale入れとく

brew install tailscale

tailscale起動してログイン
(ここは色々な記事があるので割愛)

Add device

Linux serverを選択

Generate scriptを押して出てきたcurlコマンドをgpuインスタンスにsshしてから打つ

lambda-labs-comfyuiみたいな名前をつけておけば、tailscaleのネットワーク内のホストマシンからであればどこからでも
http://lambda-labs-comfyui:8188で接続できるようになる

元々ローカルで起動してたcomfyui(http://localhost:8188)のワークフローをダウンロードして、新しく建てたcomfyui(http://labmda-labs-comfyui:8188)にアップロード

と言ってもブラウザにドラッグ&ドロップするだけ

before

after

うまく生成できなかったりしたのが安定して生成できるように👏
(と言ってもワークフローとしてのチューニングは今後めちゃ必要ですが🥲)

終わりに

本当はlambdalabsのstorage使わず、smbでローカルmacのディレクトリをgpuインスタンスのubuntuにマウントしたかったけど、mac->macは上手くいってもmac->ubuntuは上手くいかず調べても未解決問題っぽいので泣く泣くscpでアップロードする方式に変更した

以上。

参考

以下はsshトンネルを使用
https://www.reddit.com/r/comfyui/comments/1bhi85x/oc_how_i_run_comfyui_cloud_gpu_servers_easily/

Discussion