2026年4月19日日曜日

LocalAI backend stablediffusion-ggml

 llama.cppのリリースが落ち着いている様だったので他のバックエンドも様子を見てみようかと。

今までイメージ出力が上手く行っていなかったので、LocalAIでcommitされていたbackendのstablediffusion-ggmlをビルドしてみました。

経験上LocalAIのbackendで一番のネックがgrpcとしてビルドするためにコンパイル時に必要なライブラリとか実環境でのバージョンを一致させる必要があることでしょうか。

llama-cppの時はどちらかと言うと不要な部分を切り捨てた格好で対処しましたが、golangのbackendは現状だとそのまま通ってしまいました。とりあえずラッキーという事でw

あとは実際に使用しているbackendで使用しているbackend本体のビルドに依存しますが、この辺はあまり問題になったことはありません。大抵そのままビルドが通るのと、特殊なライブラリが必要な場合は、その追加手順はそのbackendとなるドキュメントに確実に記載があります。

イメージ生成は他にもpythonベースのものもあって、最初はそちらで試行錯誤していましたが、肝心のpytouchパッケージがうまくインストールすることができずにuvなどで自動的にすげ変わってしまうためにいまだに上手く行きません…なのでpythonべーつのものは一旦放置状態です。とはいえ、pythonベースのものが動かないと大半のbackendが動かないので何とかしないといけないのですが(悩

あとは、実際にmakeファイルを見て、どの指定をして実行するか?という事になります。

一般的なのかは知りませんが、LocalAIではgitなどでソースをcloneした後、必要となるgrpcサーバーのラッパーのソースをcloneした中にコピーしてからmakeしています。また、SYCL用の別バイナリの作成にはいったんテンポラリディレクトリに複製した後、makeしていて、出来上がったバイナリをコピーすることでコンパイルオプションを確実なものにしています。

stablediffusion-ggmlは、必要なBUILD_TYPEを指定し、makeのオプションはstablediffusion-ggmlを指定するだけでとりあえずは実行できるバイナリの準備は完了しました。

ただ、どうもLocalAIv4.1.3では
HEAD is now at 8afbeb6 chore: normalize text files to utf-8 without bom (#1394)
remote: Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
fatal: remote error: upload-pack: not our ref 1a34176cd6d39ad3a226b2b69047e71f6797f6bc
fatal: Fetched in submodule path 'examples/server/frontend', but it did not contain 1a34176cd6d39ad3a226b2b69047e71f6797f6bc. Direct fetching of that commit failed.
make: *** [Makefile:64: sources/stablediffusion-ggml.cpp] Error 128
make: Leaving directory '/home/siriuth/LocalAIv4.1.3/backend/go/stablediffusion-ggml'
と言うエラーで止まってしまうので最新のmasterの値を指定して実行しました。
STABLEDIFFUSION_GGML_VERSION=a564fdf642780d1df123f1c413b19961375b8346

実際にLocalAIv4.1.3で動かしてみます。ついこの前まではイメージ生成のインタフェースは単一のものだったのですが今現在は画像、動画、TTS、Soundが一つの画面に収められたStudioという形にまとまっています。

全く良く分からないのですが、適当に今まで動かないままのモデルのdreamshaperと言う物がセットされているのでそもままで。プロンプトに日本語よりは英語がよいかと思い

「fish」

と入れてみます…いままで適当に入れてますが、どれもまともに出てきた試しがありません…なぜ魚か…意味はないですがw。待つこと約30分ほど放置すると画像が出てました。

どこがどうfishなのか謎すぎますが、とりあえず何か絵が出ました。今までは動かないか、出力されたとしても、黒塗に白い点がひとつとか、ロケットの打ち上げの切り離しのような円弧があるような画像とか…動いているのかどうかも良く分からない出力しかなかったので、とりあえず何か出てきたという実感が初めて得られましたw

とりあえず何か出てきたのでプロンプトに何を指定すればよいのかちょっとググってみたところ、なんかそれっぽいのをコピペで貼り付けてみましたが、出力されたものはなんか違うんですよね…よくよく見るとImageInputとかあってそれに元画像と参考にするための画像とか設定できるようになっていました。が、これを設定するとエラーになってしまうようで…良く分かりません。

で、実際の動作ですが、make時に無意味にBUILD_TYPE=intelとかやったおかげで、おそらくcpuのみのmakeがかかってしまったようで…htopとかintel_gpu_topとかで見る限りGPUは一切動いていませんでした。なので今度はBUILD_TYPE=sycl_f16とか指定してmakeして動かしてみました。

が…どうも途中でgpuの動作が行われなくなり、cpu側は1つだけ100%のままのJobが走り続けている様子。20分過ぎても変化なく…ここで寝落ちして朝を迎えましたが、全く変化なし。諦めてプロセスkillしました。

まだまだ先は長そうですが、とりあえず「動いた」と言うのはやはりうれしいですね!

0 件のコメント:

コメントを投稿