Orange Pi 5でAIの第7弾です。
いよいよ画像生成AIです。
Stable Diffusionについて
まぁ今さら言うまでもないですね。プロンプトに合わせて絵を描いてくれるソフトです。今さらここで紹介するまでもないですね。
同類のものが多数ある上に、モデルもいっぱいありますし、あれやこれや騒ぎになったりとか、いろいろ話題に欠きません。そんなこともあって、ここで取り上げるのはちょっと躊躇していたのですが、さすがにこれなしと言うわけにも行かないので、やってみましょう。
インストール
インストール自体は特に難しくもないのは、他のAI系アプリと同じです。そして、留意事項もだいたい同じ。
$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
$ cd stable-diffusion-webui
VALL-E-Xよりも簡単で、pip install -r requirements.txt
すらありません。これは、./modules/launch_utils.py
を見るとわかります。自分でやってるようです。つまり、起動してからもいろいろインストールするんですね。
まっさらな環境だと、いろいろ手で入れないといけないかも知れません。私の環境では、今まで動かしたものに必要なものは既に入ってしまっていますから、ここで特別に何かする必要はありませんでした。
起動
起動はちょっと面倒でした。
Stable Diffusionの使い方自体はネットのそこらじゅうにありますし、mayumiは既にいろいろ使っていたので聞けばいいだけなんですが、Orange Pi 5はCUDAがない環境です。Stable DiffusionはCUDAがある前提がデフォルトとなっています。なので、何も考えないで起動するとCUDA絡みのエラーが出てしまいます(mayumiはGoogle Colabで使ってました)。
ということで、いろいろ試したり調べたりした結果、
$ GRADIO_SERVER_NAME=0.0.0.0 python launch.py --share --enable-insecure-extension-access --skip-torch-cuda-test --no-half --no-half-vae --use-cpu all --opt-sdp-attention --opt-sdp-no-mem-attention
というように起動しました。全部のオプションが必要かまでは確認してないです。とにかく「動いた」というところで。最後の2つは高速化のためという話で、なければないでも問題なく動きます。「高速化」になっているかどうか微妙ですけど。
実は↑で起動すると、Gradio関係のワーニングが出ます。これは--share
のせいです。Gradioで言うshareは「広く世界に公開」ということで、Gradioの提供する逆プロキシを使うのですが、そのためのバイナリモジュールが不足していることで出るワーニングです。別にそんなことする必要はないですし、必要ならNapierを使えば足りるわけなので、モジュールを探して入れる必要はありません。と言うか、このモジュールは現在取れません。まぁ、--share
を入れなきゃいいだけです。
xFormersは用がないので、--xformersは指定しません。指定すると後半の高精細化の処理で落ちます。
試してみる
ブラウザでhttp://takara.local:7860/
につないでやると、web UIが表示されます(takaraがこのホスト名)。
とりあえずプロンプトには「japanese girl wearing glass」とか入れてみています。
処理はされているようです。
悪くない感じですね。モデル選択ですかね。
使い方そのものはあちこちに書かれていますから、ここで特に言うことはありません。
結果についてそっけないのは、あまりに時間がかかるからです。これだけ出すのに30分ほどかかりました。メモリは6GB程度使っているようです。
動いた動いたと喜ぶには良いのですが、画像生成AIはある意味「ガチャ」みたいなところがありますから、好ましい結果を得るためには何度も「ガチャ」を引くわけで、そのために30分とか待つのは、あまりに厳しいなというのが正直な感想です。
まとめ
という感じで、Orange Pi 5でもStable Diffusionは動きます。
では実用になるかと言えば、前述のようにやっぱり時間がかかり過ぎるので厳しいなというところです。特にVALL-E-Xは条件さえ整えてやれば放っておくだけですし、結果もある程度予測がつくので遅いのを我慢することが出来ますが、Stable Diffusionは何度も「ガチャ」引かなければならないので、この速度で実用は厳しいです。
まぁ、暇な時にガチャ気分で生成してみるのであればちゃんと処理はしてくれるので、たとえば「今日の壁紙」みたいな感じで生成するのには良いかも知れません。明確なゴールを目指す生成には向かないと思います。