概要
Wikiによると、Stable Diffusion WebUIを動かすとWindowsとWSL2ではWSL2のほうが速度が速いようです。
プログラム自体は全く同じなのに速度に差が出るのかどうかをテストしてみました。
テスト環境
- CPU:Intel Core i7-13700K
- CPUクーラー:サイズ Big shuriken3 RGB
- マザーボード:Asrock Z690M-ITX/ax
- SSD:M2_2(チップセット側) ARKINE NVMe Gen3 SSD 256GB
- M2_1(CPU側) なし
- NVMe-USB3.2 Gen2X2 アルミエンクロージャー BLM20C:SUNEAST SE900NVG3-256G(今回は使用していません)
- 電源:Corsair SFX 750W電源 SF-750
- メモリ:G Skill Trident Z DDR4-3600 OCメモリ16GB*2=32GB
- ケース:QDIY 0040-*PCJMK6-ITX(テストベンチ)
- OS:Lubuntu 22.04LTS(jammy-jellyfishベース)
- GPU Zotac Geforce RTX3060 Twinedge & Zotac Geforce RTX4070Ti 12GB
- OS Windows11(最新までアップデート) & Lubuntu 22.04LTS(最新までアップデート)
- ドライバ Windows11 nVIDIA公式ドライバ GRD551.23、Linux nVIDIA公式ドライバ 550.40
今回はUSB-SSDは使用しないで、本体側に取り付けたNVMe Gen3 SSD 256GBを使って検証いたしました。
それではさっそく結果を見てみましょう。
Stable Diffsuion WebUI生成ベンチマーク
Windowsは当サイトで配布しているポータブル版を、Linuxはgithubからcloneしました。
Windowsのpythonは3.10.6、Linuxは3.6.12です。
torch2.0.1+cu118です。
オプションは–autolaunchと–opt-sdp-attentionをつけています。
検証方法
- ハローアスカベンチマーク:バッチカウント10のバッチサイズ1
- ハローアスカベンチマーク768:上記の設定を768*768にしたもの
これらをそれぞれcudnnをデフォルト(torchに内蔵)のまま、最新版に差し替えしたものを三回測定して、平均値を算出しています。
秒数は数字が小さいほど性能が高く、一秒あたりの処理ステップ数は数字が大きいほど性能が高いです。
ハローアスカベンチマーク:512*512/28steps/10images
RTX4070Ti | RTX3060 | ||||
生成時間(秒) | 1秒あたりの ステップ数(it/s) |
生成時間(秒) | 1秒あたりの ステップ数(it/s) |
||
Windows | cudnnデフォルト | 17.1 | 19.45 | 44.8 | 6.96 |
cudnn8.9.7.29 | 17.0 | 19.56 | 41.8 | 7.38 | |
Linux | cudnnデフォルト | 15.2 | 20.73 | 40.0 | 7.55 |
cudnn8.9.7.29 | 14.8 | 21.61 | 39.7 | 7.53 |
ハローアスカベンチマーク768:768*768/28steps/10images
RTX4070Ti | RTX3060 | ||||
生成時間(秒) | 1秒あたりの ステップ数(it/s) |
生成時間(秒) | 1秒あたりの ステップ数(it/s) |
||
Windows | cudnnデフォルト | 40.3 | 8.44 | 107.0 | 2.87 |
cudnn8.9.7.29 | 39.5 | 8.54 | 102.2 | 2.99 | |
Linux | cudnnデフォルト | 35.5 | 9.09 | 100.4 | 2.98 |
cudnn8.9.7.29 | 35.9 | 8.97 | 99.3 | 3.01 |
基本的に、Windowsの性能はLinuxに勝っているものは一つもなく、特に最新のGPUであるRTX4070Tiでは性能差が顕著です。
LinuxのRTX4070Tiはcudnnのバージョンに左右されず、安定して高速です。
WindowsでのRTX4070Tiは明確にLinuxよりも遅いです。
512*512では性能差は小さく見えますが、処理が膨大になると差が大きくなっていくことが768*768の結果から読み取れます。
一方で枯れているRTX3060ではcudnnのバージョンを上げるとLinuxとの結果が小さくなっていることが確認できました。
ここから、WindowsのドライバやライブラリはLinuxと比較すると最適化が遅れているのだと思われます。
それでも一項目もLinuxには勝っていないことから何かしらの問題があるのでしょう。
kohya_ss gui(学習)ベンチマーク
当サイトで配布している動作確認用&性能確認用のカエル画像でLoRAを生成。
AdamW8bit、Lion8bit、AdamW、Lionでの1秒あたりの処理ステップ数で比較
処理数が膨大なため、数字にほとんど変化はなく、一発どりです。
数字が大きいほど性能が高いです。
RTX4070Ti | RTX3060 | ||||||||
AdamW8bit | Lion8bit | AdamW | Lion | AdamW8bit | Lion8bit | AdamW | Lion | ||
Windows | cudnnデフォルト | 3.58 | 3.60 | 4.02 | 3.38 | 2.53 | 2.53 | 2.64 | 2.52 |
cudnn8.9.7.29 | 3.60 | 3.62 | 3.99 | 3.60 | 2.54 | 2.49 | 2.65 | 2.51 | |
Linux | cudnnデフォルト | 6.84 | 7.03 | 7.28 | 7.26 | 3.19 | 3.22 | 3.26 | 3.28 |
cudnn8.9.7.29 | 6.81 | 7.02 | 7.26 | 7.26 | 3.19 | 3.23 | 3.26 | 3.28 |
それでは、学習の結果を見てみましょう。
推論では、それほど大きくなかった・・・・と言ってもAda Lovelaceではそれなりの差がついておりましたが、学習においてはもうどう逆立ちしてもひっくり返せないくらいの差があります。
RTX4070Tiおいてはほぼ倍、最適化が進んでいると思われる1世代前のRTX3060においても30%前後の差が存在します。
pythonやpytorchなどはもともとはLinuxからWindowsに移植されたものですから、推論の結果と合わせるとWindowsには何かボトルネックが存在すると思われます。
結論
Windowsユーザーにとっては残酷な結論を書きます。
生成AIを使うOSとしてのWindowsには何一つ優位性はありません。
特に最新世代のGPUを使っている方にとっては無料のLinuxを使うことによってWindowsと比較するとワングレード上の性能を手に入れられるといってもよいです。
また、学習においては2-3グレード上の性能になるといっても差し支えないと思います。
Stable Diffusion WebUIには関係ありませんが、すでにTensorFlow-GPU(演算にCUDAを使うもの)はWindows版のバイナリのリリースを取りやめており、そうした今後の傾向を考えると、Windowsで生成AIを使うことにはまったく優位性はありません。
ゲーミングPCで片手間にイラストAIを楽しんでいる方もいると思いますし、そういった方も立派に生成AIを使っていると思います。
しかし、生成AIで収入を得たい・現に得ているなどの真剣度の高い方はLinuxへの移行を真面目に検討したほうが良いと思います。
そもそも、Linuxなら、ROCmもありますので、Radeonも使えます。
選択肢が広がり、比較的安価に環境をそろえることも可能になります。
ちなみに今回の企画は上の2行が言いたいがために行いました。
おまけ
LinuxでのnVIDIA Geforce シリーズ向け環境セットアップ、ドライバインストール、SD-WUI及びkohy_ss GUIセットアップスクリプト
クリーンインストール後に順番に実行してください。
※アップデートはしませんので、中身を見て修正ができる方向けです。
使用にあたっては自己責任でお願いします。
当方はこのスクリプトを使ったことにより発生したいかなる損害も一切の責任を負いません。
それに納得できる方のみ使用してください。
使用した時点で、同意したものと見なします。
今回はバイナリファイルが含まれていません。
簡単なシェルスクリプトが書ける方なら100%理解してもらえると思います。
また、情報発信をされている方が使われる場合は出典を明記し、このページにリンクを張ってくれると嬉しいです。
もちろん、強制ではありません。
今回検証に使ったグラボ
現在はRTX4070Superがお得です。