ちょっと表現で面白いことはできないだろうか?という事でFlux.1で試してみました。
最初はschnellで。
試したことは、ふとジェイソンボーンという単語が頭に過り、骨…骸骨、スケルトン!
と言う感じになんかモンスターでも出てきたら面白いかなと…
メモやら記録やら
ちょっと表現で面白いことはできないだろうか?という事でFlux.1で試してみました。
最初はschnellで。
試したことは、ふとジェイソンボーンという単語が頭に過り、骨…骸骨、スケルトン!
と言う感じになんかモンスターでも出てきたら面白いかなと…
色々と試行錯誤している最中ですが、巷ではすでにFlux.1の話題はすでに終了していてFlux.2に移行しているようです。
Flux.1に出てくる人物モデルのレパートリーが少ない気がするような?と、一般的なちゃんとした環境をそろえている方はおそらく物足りなくなっているのかな?とは感じます。
しかもFlux.2の生成スピードはほんの数秒で生成できるらしいような記事も見かけます。(まぁ今の環境だと単位が一つ違うのでそれでも数分で出力されたらそれはそれで驚異的なわけで…)
結果から言えば全く処理速度は変わらなかったわけですが、当然と言えば当然(笑)
量子化でファイルサイズは小さくなったものの、後から分かったのですが、扱ったsafetensorsはcliplとかt5とかvaeとか全て入っているsafetensorsファイルだったものらしく、stable-diffusion.cppで実行時にエラーにはならないものの、モデルファイルのロード時に大量の「 unknown tensor」が表示されました。
昔、Raspberry piとかでストレージを使い切ってしまうと結構悲惨だった記憶が残っていますw
まず、最終的に外部から接続できなくなり、直接コンソールを使わないと何もできなくなってしまった記憶があります。
実際にビルドしてみて使って見ると少しの差でSycl32の方が早かったわけですが、実際の演算結果の差が出るのかどうか気になったので、stable-diffusion.cppで同じモデルを使用してSYCL16とSYCL32でmakeしたものを同じプロンプトで出力させて比べてみました。
ついでにCPUと比べてもみたいわけですが、犬の看板画像で試した感じだとCPUとSYCLでは結構差が出てた記憶があります。
ようやく出そろいました。SYCL16 / SYCL32 / CPUで出力させてみました。
512x512のサイズならvaeもGPUで動く気がしたので試してみたら、出力されたものが真っ白の物でした…どこかで情報が欠落してしまっているようでw
なので、textencoderとvaeはすべてCPU上で動いています。
| SYCL16 | SYCL32 | CPU |
|---|---|---|
CPUだけはおでこの模様が異なってたり、首紐が無かったり、輪郭が違っています。SYCL16とSYCL32の違いはfluxの「f」の文字の太さが違っているのと、背景の左側の人が若干異なっている程度です。
ほぼ、同じ結果を得られていますが、「同じ」出力にはならないのが本当に面白いですね。
乱数誤差なのか内部バッファのメモリ形式が異なっていることによる差なのか…要因はいくつか考えられます。
他にもいくつか同じ構成で違うバックエンドで出力させたものがありますがSYCL16とSYCL32はほとんど違いがないですが、やはりどこか違っている部分があります。バグなのか実装の仕様なのかかなり難しい部分ですね。
参考として出力から得られた実行時間はそれぞれ、456.72s / 440.92s / 997.77s。消費電力は1Step目はそれぞれ15W程度かかっていましたが、2~4Stepの間はSYCL16/32は10W。CPUはすべてのステップでGPU電力は0WでしたがCPUだけで15W消費していました。瞬間的に表示上16.01Wとか表示されてはいました。テキストエンコーダとvaeはCPUのみなのでこちらも15W消費している感じです。
出力が真っ白になってしまいましたが、vaeもGPUで動作させた場合はSYCL16は382.46s、SYCL32は366.12sでした。vaeの処理が滑っていただけかもしれないので、あくまでも参考値として残しておきます。