とりあえず一通り、syclのggml分のソースは目を通したと思います…w
結果から言えば単純に高負荷になるcompute()内で同期をとるようにしました。
実際には不要な同期ですが、原因がハッキリしないのでとりあえず内部の処理ループ10回毎にwaitをかけるようにしました。
GPUの使用率は99%以下にならなかったので、同期化によるGPU側の速度低下は発生していないように見えました。ただ、CPU側の負荷は確実に上がっているようで、待機中の温度が今までよりも下がらなくなりました。
消費電力を見るとnon waitだと全体で15Wというほぼ限界値にへばり付いていたのが、10W前後で推移するようになりました。消費電力から見ると処理速度が2/3程度になっているのかもしれません。
実際に画像が出力されるまでにvaeとテキストエンコードをcpuで行っているのですが、vaeの処理が画像生成1Step分かかっているので単純に比較ができないのですが、実行開始から約31分程度で出力されました。cpuのみの時は約74分。この時間だけ見て倍の処理速度となっているのでiGPUでもやはり捨てたものではないという感じです。
出力の確認ができたので、ggmlのSYCLのデバッグ出力を止めて出力させています。結果は30分後ぐらいかな?
おそらく今までsyclで動作していてハングアップしていた状態もこれで回避できると思うので、蛇の道だったSYCLでももっと楽しく遊べそうですw
いや、まじつかれた…けども、確認作業として、computeの開始前後に1回同期すれば回避できるかもしれないのと、それでだめでも現状10回毎に同期しているのでそれの頻度をどこまで下げれるか?という点も気になりますね。
追記 2026/05/14
具体的な変更点はsrc/ggml-sycl/ggml-sycl.cppファイル内のソースです。
https://github.com/siriuth/ggml_sycl_patch/commit/dbbfe8235446912b6856795fdd4edf570c503428
0 件のコメント:
コメントを投稿