GGML_SYCL_DEBUG=1で出力した場合と、そうでない場合の差異が気になったので時間を目視ベースで確認したところ、全体で1分程度の差の様です。
テスト中に実行していてもエラーで止まるまでの時間がほとんど変わらなかったので、予想はしてましたが、あまり差異はないみたいですね。コンパイルの時点ですべてのデバッグ出力を消し込んだ場合の差は不明ですが、大昔と違い経験上あまり変わらないんですよねw
以下、vaeをgpuで実行しようとしたところ、メモリーが足りませんでしたw
[INFO ] stable-diffusion.cpp:3450 - generating image: sampling_end
[INFO ] stable-diffusion.cpp:3452 - generating image: x_0.empty()
[INFO ] stable-diffusion.cpp:3454 - sampling completed, taking 1260.23s
[INFO ] stable-diffusion.cpp:3474 - generating 1 latent images completed, taking 1260.23s
[INFO ] stable-diffusion.cpp:3209 - decoding 1 latents
[DEBUG] ggml_extend.hpp:2692 - compute() start
[ERROR] ggml_extend.hpp:69 - ggml_backend_sycl_buffer_type_alloc_buffer: can't allocate 4831838208 Bytes of memory on device
[ERROR] ggml_extend.hpp:69 - ggml_gallocr_reserve_n_impl: failed to allocate SYCL0 buffer of size 8322547968
[ERROR] ggml_extend.hpp:1919 - vae: failed to allocate the compute buffer
[ERROR] ggml_extend.hpp:2716 - vae alloc compute buffer failed
[ERROR] vae.hpp:200 - vae decode compute failed
[ERROR] stable-diffusion.cpp:3217 - decode_first_stage failed for latent 1
[ERROR] main.cpp:741 - generate failed
エラーで止まりましたwメモリーか…メモリーがいかんのか!wはぁ…とりあえずvaeをcpuで行うように戻して再実行してみよう…w
11分ぐらいからvae処理…
[DEBUG] ggml_extend.hpp:2692 - compute() start
[DEBUG] ggml_extend.hpp:1929 - vae compute buffer size: 6657.00 MB(RAM)
[DEBUG] ggml_extend.hpp:2719 - compute() return execute_graph
[DEBUG] ggml_extend.hpp:2374 - execure_graph start
[DEBUG] ggml_extend.hpp:2414 - call copy_data_to_backend_tensor()
[DEBUG] ggml_extend.hpp:2422 - call ggml_backend_graph_compute()
[DEBUG] ggml_extend.hpp:2447 - execure_graph auto result = ggml_get_tensor()
[DEBUG] ggml_extend.hpp:2471 - execure_graph return optput
[DEBUG] vae.hpp:207 - computing vae decode graph completed, taking 438.62s
[INFO ] stable-diffusion.cpp:3225 - latent 1 decoded, taking 438.62s
[INFO ] stable-diffusion.cpp:3229 - decode_first_stage completed, taking 438.62s
[INFO ] stable-diffusion.cpp:3613 - generate_image completed in 1727.54s
[INFO ] main.cpp:441 - save result image 0 to 'xxxxxxxx.png' (success)
[INFO ] main.cpp:490 - 1/1 images saved
出力まで約30。Step処理だけだと 23min/4steps=約6分/Step vae処理約7分と言う感じかな?ログの数字はもう少し小さいみたいですね。
1024x1024とかだと寝る前に実行するとか、出かけるときに実行する感じだったので30分で出力できるなら十分遊べそうですw
追加の試しで、compute()の最初に一回だけwait()を入れてみるパターンと最後にwait()を入れるパターンで試してみたいかな…。
で、前後どちらか一回だけでは今まで通り止まってしまいました。もしかしたらアクセサーとかスコープの関係で後ろ一回だけでもいいかもしれないと思ったのですが、ダメだったようでした。
残りのwaitのタイミングですが、試しに256回毎にしても大丈夫だったのを確認しました。
何らかのゴミが残っていたのか、最初の1Step目は消費電力などが15Wでしたが、その後は10W前後に落ち着き温度もそれなりでした。
ログを見る限り、処理時間は10回毎にwait()をいれても256回毎にwait()を入れてone stepの処理時間は0.2secぐらいの差があるぐらいで、おそらく誤差の範囲です。とりあえず256回毎にwaitを入れる感じにしようかと思います。
ggmlとしてみた場合、非同期処理にならない実装なのでおそらく受け入れられない実装なので、それの方が問題かな…w

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