FastSDCPUで実際作られた画像 |
無料マシンで動くけど超遅いStable Diffusion
以前、Oracle Cloudで無料で借りれるAmpere A1(ARM4コア)、メモリ24ギガのマシンで通常のstable diffusionをCPUだけで動かしていました。
このマシン、わかりやすく言うと、メモリがアホみたいに載ってるラズパイ5ぐらいのイメージで良いと思います。 IntelCPUだと2世代Core i5あたりの性能です。
生成速度は20分で1枚書くみたいな終わってるレベルでしたが、ずっと動いてるマシンなのでバッチ50枚とか指示して一旦忘れて、思い出したころに生成画像のディレクトリ一覧をwebサーバーから見るという使い方をしていました。
昔20分かかって作られた絵 |
「かわいい女の子の画像がたくさん作られて嬉しいなぁ」
というレベルならいいのですが、blogの挿絵につかえる画像というような要望が入ると、なかなか地獄で、正直使い物にはならないです。
最近FastSDCPUというものを知り、ラズパイ4でも稼働実績があるという事で、それなら同じARMのAmpere A1で動きそうだと興味が湧きました。
環境
OS: Ubuntu 22.04
CPU: Ampere A1(4コア)
MEM: 24ギガ
Python: 3.9.13
FastSD CPU動作要件
Python:3.9~
メモリ 4ギガ
インストール
ラズパイ4で稼働実績があるという事で、楽に行けるのではないかと思っていたのですが、引っかかるポイントはありました。
まずはpythonの仮想環境を作ります。
$ python -m venv fastsdcpu
作ったディレクトリへ移動して、仮想環境をアクティベート
$ source ./bin/activate
pythonヴァージョンが3.9か確認
$ python --version
FastSDCPUを取得する
$ git clone https://github.com/rupeshs/fastsdcpu.git
Readmeに書いてあるとおりにインストールする
$ chmod
+x install.sh
$ ./install.sh
pyqt5というのがpipで引っかかって進めないが、こちらのフォーラムの情報で
https://forums.raspberrypi.com/viewtopic.php?t=369140
pipじゃなくてaptでOSのやつ入れちゃえば行けるという情報を得て、OSのやつを入れる
OSのpyqt5をインストールする
$ sudo apt install python3-pyqt5
詳細はわからないが
$ python -m venv --system-site-packages env
とするとOS側のパッケージを使ってくれる?
まだうまくいかないが、
requirements.txtからpyqt5の記述を消したらインストール完了した。
全て終わってから気づいたのはReadmeのAndroidへのインストールにpyqt5なしでのインストール方法が書いてあった😅
$./install.sh --disable-gui
とオプション付きでインストールを実行してあげれば引っかからないで行けたのかも?
どうせweb-uiしか使わないので、pyqt5は要らないんじゃないかな?
起動
webuiはinstall.shと同じ位置にあるstart-webui.shを起動すればよいらしい
$ ./start-webui.sh
一応起動するが、localhostからのアクセス限定で起動するので、インターネット上のマシンの場合使えない。
どこからでもアクセス可能なように変更する方法を探るが、Readmeに書いて無い気がする。
本家のissueに同じことを考えた方たちが議論しており
https://github.com/rupeshs/fastsdcpu/issues/156
ソースコードを直接書き換えず--shareなど引数もあるようだが、うまくいかない。
インストール時?なのかな?
書いてある方法を色々試すが、うまくいかず。
結局力技のmaolei133さんの方法でうまくいく
ui.pyの最後あたりを直接書き換えちゃう方法
/fastsdcpu/src/frontend/webui/ui.py
def start_webui( share: bool = True, ): webui = get_web_ui() webui.queue() webui.launch(server_name="0.0.0.0",share=share)
ファイアウォール設定
OCIのセキュリティグループで、使用する7860ポートを自宅のIPアドレスだけに限定して開ける。
サーバー側にもiptablesがあった気がして7860ポートを開ける設定する
$ sudo iptables -I INPUT 5 -p tcp --dport 7860 -j ACCEPT
適当に5番目に入れた
保存
$ sudo
netfilter-persistent save
$ sudo netfilter-persistent reload
OCIのiptablesはなにか仮想機構がかぶっていて素ではないのでよくわからない。iptablesはfirewall-cmdなどと比べるとルーターなどのアクセスリスト寄りの設定方法で分かりにくい。
FastSDCPUを使ってみる
生成速度
生成速度は512x512で1分ちょい、プロンプトをがっつりと指定すると2分程度に伸びる、昔の20分と比べれば雲泥の差かな。SDXLのモデルを使うと時間は長くなるし、モデルのサイズが大きくてディスク残量で困るので使わない事にした。
標準で入ってるAnything v5のlora?を使用 |
検証時の設定
設定はよくわからないが、LCM-LoRAでanything-v5を指定したらアニメ風キャラが出るようになった。Generation SettingsはStep数は1だと抽象画みたいになるので4ぐらい指定しました。
CPUとメモリの使用状況
CPUもしっかり使われている模様、メモリはfreeコマンドで確認したら3.5ギガ+共有4ギガぐらい使用していました。
メモリ8ギガのpi5なら、同じぐらいの性能がでそうな気がします。
FastSDCPUの目玉機能であるOpenVinoはラズパイならば使える?のか試してないのでよくわかりませんが、今回のAmpere A1環境では機能しませんでした。機能しないどころか、Open-Vino使う設定にするとアプリケーションだけでなくサーバーまでが応答なくなって強制再起動が必要になるので面倒なことになります。
オラクルクラウドの仮想マシンはストレージが最低50Gからのため、通常の用途なら余裕があると思っていたのですが、モデルダウンロードすると10G単位でガリガリ減って簡単にディスク残量が0になってしまいます。~/.cacheディレクトリ内にある使っていないモデルはガンガン捨てないとサーバーがディスク不足に陥ります。
tmux上でweb-ui起動して、detachしてあるのでログアウトしても終了せず、常時稼働したお絵描きAI環境が得られました。
できたけど使い道が 、スマホから暇つぶしにアクセスするぐらいしか思いつきません。