あまり時間が取れなかったので、1ヵ月程度sycl関連のソースで遊んでいませんでした。
その間も、llama.cppにはggml-syclに対してパッチを行ってビルドしていましたが、stable-diffusion.cppは完全放置していました。手元のソースを確認すると、8/11から触っていない感じでしたが、どうもこの直後にggmlを拡張してint8をベースにした量子化フォーマットに対応するために色々とテコ入れを行っているようで、素のggmlではビルドできない状態になっているようです。
ディスカッションにも記録が残っていて、8/12に
[Bug] Build Failure: INT8 ConvRot code on master uses undeclared ggml functions #1870
という書き込みが行われていました。
リリースを見てみると、
master-817-bcc7e29 feat: support INT8 ConvRot safetensors (#1857)
となっていて、ここのリリースからINT8への対応が始まっているようです。
具体的にggmlをフォークして機能を拡張したggmlを使用する形で実装されています。
この拡張はメインストリームに乗せるように動いているようですが、現状の感触としては、相当な需要がなければ受け入れられないような気はします。
ggml-org/llama.cppにはggml : add native INT8 convrot support - #26914
としてリクエストされています。
さて、ここまでが経緯ですが、現実問題として、個人的にはどうやって対応するべきか?と言う点です。
現状は、ggml-org/ggmlをフォークしたリポジトリをベースとしてllama.cppとstable-diffusion.cpp内の/ggml部分を挿げ替える形でggml-sycl部分のパッチソースを展開しています(建前としてですがw)。実際にはstable-diffusion.cppは/ggml以下を挿げ替えてビルドして、llama.cppは直接llama.cppの/ggml/src/ggml-syclへ直接パッチを当てています。
とは言え、同期のタイミングによってはllama.cppもstable-diffuion.cppのように挿げ替えても大丈夫なはず…。
どうせ2カ所にパッチしているのであれば、ggm-org/ggmlからフォークしたリポジトリではなく、stable-diffusion.cppのベースのjetlee/ggmlをフォークしてパッチを当ててもいいような気もします。
現時点で、最新のstable-diffusion.cppを動かす必要はないので、ひとまず master-816-487de75(2026/8/12) をベースとしてビルドすることに…。奇しくも触らなくなった翌日ぐらいのリリースのバージョンです(笑)
0 件のコメント:
コメントを投稿