すこし過去の記事を見てみると1ヵ月ぐらい前の記事で、テスト的に出力したものがあったので同じものを出力して違いを確認してみました。
出力時に使用したコマンドラインも記録が残っていたので同じ状態で出力できたと思いますが、微妙に差が出ています。左側が以前に生成した画像、右側が今回となります。
今回も、指定した文字がちゃんと出ずに「e」が欠けています(笑)
大きな違いはvaeの出力がcpuからvaeに変わっただけなのですが、コアとなるggmlのバージョンが変わっていることと、syclの動作の核心部分を手直ししているのでその影響が出ているのだと思います。リファレンス的なcpuのみの実行を行うとどちらが正しいのか判断できます。どのくらい時間がかかるのだろう…なんちゃってvae256で動かせば少しはましになりそうですが…cpuビルドをmakeしなおしておきましょうかね…
リファレンスになりそうと思ったのですが、文字は微妙な結果に…ついでに現状の生成時間もまとめてみましょうか。各モデルの量子化状態はテキストエンコーダーはQ4_K_M、本体のFlux2.KleinはQ8_0、VAEはたぶんF32のsafetensorsとなっています。
| backend | TextEncode | ImageSteps | VAE | Total |
|---|---|---|---|---|
| CPU | 35.71s | 572.69s | 97.40s | 705.81s |
| CPU/SYCL/CPU | 34.56s | 275.72s | 96.17s | 406.46s |
| SYCL | 18.90s | 277.40s | 26.65s | 322.97s |
結果だけ見るとCPU単体の時間の半分以下の時間でSYCL単体で生成できている感じになっています。VAE部分だけ見ると3分の1以下になっているので他もそのぐらいになるのが目標値として妥当という事でしょうか?
中段はTextEncodeとVAEはCPUを使用しているので同じ数字なりそうですが、主体となる処処理(binbcast?)がGPU処理されている結果少し早くなっているのかな?誤差と言うには1秒以上違うので気にはなりますね。
一番の利点はGPUを使うとCPUのスレッドはほとんど待ち続けることになるのでCPUコアの温度がほとんど上がりません。消費電力もCPU4コアが回ってしまうと15wを超えてしまうのですが、GPUを主体で動かすと10W以下になるのも利点と言えます。とは言えワット当たりのトークン処理数を見るとCUDAとか電力が多くなっても時間単辺りで単位が変わるレベルの差があるのでSYCLの方が不利だったような…あまり考えないようにしよう(笑)



0 件のコメント:
コメントを投稿