RTX4090を買った理由

さて、年が明けてしまったが、色々あったが何とか去年の内にPCにRTX4090を入れる事ができた。

何故こんなクソ高いグラボが必要なのか?と言えば、これから先、AIで遊んでいくにはGTX1080の8GBのVRAMで戦っていけるとは思えなかったからだ。RTX4090の24GBでも十分とは言えないが、消費者向けのグラボではこれが最大だ。

じゃあ何故そんなに大量のVRAMが必要なのか?と言えば、例えば私が愛用しているJoePenna版のDreamboothはVRAM24GBを要求する。今まではRunpodなどのクラウドでしか学習させることができなかったが、RTX4090があれば手元で学習させることが可能になる。

去年の秋ごろまでは、GoogleColabがあれば無料でクラウドのVRAM15GBのT4などのグラボが使用できていたから、自分で高性能なグラボ買う必要なんてないじゃんという雰囲気もあった。しかし、GoogleColabで画像生成しまくる人達が殺到したため、サービスは改悪され、無料で使い続ける事は難しくなった。

さらに言うと、私はジェネレーティブゲームの開発を画策しているが、これはプレイ中に様々なAIを同時に読み込む事になるだろうと思う。手元で実験したところ、Unityアプリを動作しつつ、その中で334Mパラメータの日本語GPT-2を実行しつつ、ついでにSDも実行…これだけで8GBのVRAMはパンパンに埋まってしまう。もっと他にWhisper(音声書き起こし)やVoiceVox(音声合成)とかも同時に動かしたいのに! そう考えると少なくともVRAM24GBは無いと話にならないと分かる。まあ、VRAM24GB使うゲームを作ったとして、それを配布するのにユーザーにVRAM24GBを求めるのは狂気の沙汰な気がするが。

RTX4090でDreamboothしても全然速くない?

早速RTX4090でJoePenna版のDreamboothを試してみた。WindowsのWSL2でjupyterサーバを実行して、Colabノートブックから繋いだ。 無事に実行できたが、速度が1.8s/it(1回のイテレーションに1.8秒かかる)くらいしか出なかった。これは遅すぎる。 というのも、RunpodでRTX3090でDreamboothしていた時は、1.5s/itくらいの速度が出ていたからだ。4090は3090の2倍以上のスペックがあるハズだから、0.8s/itくらい速度が出てもいいんじゃないのか?

やはり、WSL2は仮想OSだから、実行にオーバーヘッドがあるんだろうか?と思って、Windows上のAnacondaで直接JoePenna版Dreamboothを実行する事もしてみた。

導入はこちらの記事を参考にさせていただいた。↓

【Stable Diffusion】WindowsでDreamBoothを動かす

Windowsだとワケの分からんエラーが色々と出てしまうのだが、一通り対策を書いてくれている。ただし、この記事に完全に従っても私の環境、タイミング(2022/12/31)ではもう一つだけエラーが出てしまった。

「RuntimeError: indices should be either on cpu or on the same device as the indexed tensor (cpu) 」とかいうエラーだ。

これを修正するにはこちらのページの内容が役に立った。

Nvidia以外のグラボに関して

・「RuntimeError: indices should be either on cpu or on the same device as the indexed tensor (cpu) 」とか出て実行できないんですけお! →一旦「Ctrl+C」で停止 →cd (各としあき環境)/stable-diffusion-webui/repositories/stable-diffusion/ldm/models/diffusion →ddpm.pyの行1030(コード内容「logvar_t = self.logvar[t].to(self.device)」)の直上に「t = t.to('cpu')」を追加

ddpm.pyは私のバージョンでは1096行のあたりに「logvar_t = self.logvar[t].to(self.device)」の記述があったが、その上に「t = t.to('cpu')」を追加したらエラーが出なくなった。

で、Anaconda上で動かしたJoePenna版Dreamboothの速度は1.5s/it程度で、要するにRunpodで動かした3090と同じくらいだ。

https://twitter.com/umiyuki_ai/status/1609041588701003776