nipplelfsblog

nipplelf’s blog

1週間に1記事を目標にして、考えたことや描いた絵について書いてます。

ローカル環境でVRAM増設だ その1

生成AIで遊んでいると、どうしてもグラフィックボードの性能でこける。なんとかしようと頑張ってみた。

(今週の一枚)モコモコ(春だね🌸)

 

今のパソコン環境

nipplelf.hatenablog.jp

 約1年前、RTX4070を外付けGPU用にしてごく小さなローカル環境構築に成功した。これで遊んでいたが、結局、ちょっとずつ部品を集めて今ではもう一つPCが作ることになった。

 今、このPCをWindows11Proのリモートデスクトップ機能を使って遠隔制御している。LAN経由で別のパソコンから制御するので一つの画面で色々遊べる。外出中に使えるのもいいかと思ったんだけど、色々とセキュリティがやばそうなので、残念ながら自宅にいる時に遊ぶおもちゃになっている。

 なぜ外付けGPUを止めて、もう一個PCを組んだかと言うと、色々な作業をいっぺんにやり始めたからだ。例えば、Stable DiffusionでAIお絵かきしたり、LM StudioでChatGTPやGeminiやったり、Photoshopでお絵かきしたり、動画を見たりと言った処理を同時に2つ以上やるようになった。

 初期の操作では生成AI関連はRTX4070内の計算でまとまっていたが、重複の過程で、グラボ内のVRAMだけでは足りなくなり、共有分を使ったり、勝手にCPUの計算を使ったりする(管理不足)。遅くなる程度なら問題ないんだけど、処理がスタックするとPC自体がフリーズすることがあったので、少なくとも処理PCと常用PCに分けることになった。

 この分割は当初うまくいっていたが、やはりVRAMが足りない。計算処理が増えるならGPUがもう1つ2つ欲しいなぁと思うようになった。

 今回の目標は多少遅くとも学習データ量のでかい生成AIを動かすことと、いくつかのソフトを展開しても止まらないシステムをお安く作ることになる。

 

どうすれば安くデータ処理ができるのか

 ローカル環境構築にしないで、サブスクで外部から計算力を買うのが一番賢い判断だ。しかし、ロマンがない。また、これから色んな制約(規制)がどんどん追加されるだろうから、好き勝手にやるなら先がない。しかし、今のローカル環境拡大のためにパソコン追加やGPU用サーバー増設を普通の方法で組もうとするとすごく金がかかる。何百万もする。もちろん、そんな金はない!ない!ない( ;∀;) …かと言って、まんじりと何もしないのも間抜けなので、色々調べてみた。

 

必要なGPU計算力と読み込みRAM量

 生成AIにもいろんなものがあるが、基本的にGPU直近にあるVRAMにデータを仮置きして計算を繰り返すシステムだ。データ転送のラグを考えると、グラフィックボード上のGPUの計算処理量は余るはずだ。実際の電力消費量の推移を見ると、自分が使うRTX4070や2080において、頭出しで強く動いても残りの計算は最大処理量の精々70%程度しかGPU性能を使っていない。ゲームと比べても明らかだ。恐らく、生成AIの場合、GPU-VRAM間の転送速度がボトルネックとなり速度が出ないのかなぁと思う。一方で、古いRTXでは動かないと言われる生成AI関係のソフトは実は処理が重たいわけじゃなくて、RAMに展開しないといけない学習データ量が多すぎるためにうまく動かせないようだ。データ軽量化が盛んにおこなわれているが、家庭用PCではすでに動かせない学習モデルが多数ある。

 例えば、去年12月にリリースされたFLEX.2は画像生成系でかなり高性能な学習定義モデルで、こういったものがこれからのスタンダードになってくるだろう。

bfl.ai

 このモデルは最軽量のFLUX.2 [klein] 4Bでも8GBのデータ(fb量子化で4GB、一つ上の9Bで18GB)を持ち、他の拡張データを並行で読み込むと今のシステムでは動かない。

 多少遅くても色々遊べる環境を作るためには、なんらかの方法でVRAMを増やし、読み込んだデータを対象GPUに運ぶ方法を考えれる必要がある。

 そのため、GPU性能や転送速度を犠牲にしてもVRAM量を20GB以上、できれば40GBは欲しい。

 

必要なGPUとVRAM

 こういった計算処理を行うグラフィックボードには所謂業務用グラフィックカードと言うものがあって、Nvidiaからは現行のNVIDIA RTX PROシリーズがある。まぁこれが高い!ハイクラスは1枚100万以上する。くそ高い!この前シリーズでもミドルクラスで40万もする。高い!www.nichepcgamer.com

 では、このボードがどんな能力を持つかを見る。上記のPROシリーズの一番上のRTX PRO6000の計算量はRTX5090と同じくらいだ。違いはゲーム用のRTXよりも多くVRAMを積んでいる点だ。定格電力量もほぼ同じ点からもわかる。そのため、未処理データ画像をVRAMに置く高負荷ゲームならむしろPROの方が高性能になる。

www.youtube.com

 業務用で前シリーズのミドルスペックのRTX 4000 SFF はCUDAコア数(計算力と言っていい)は今持っているRTX4070よりも少ない。つまり、業務用ボードで必要とされるCUDAコア数は今自分が持っているRTX4070でも必要量にあると考えられる。もちろん、RTX5090のようなコア数があればもっといいが、VRAMとのバランスの悪さや値段が高いので論外。

 

 単純にデータシート状(おそらく実際はもっと複雑)の比較から考えると、ゲーム用のグラフィックボードに業務用のVRAM量を積むことができれば、安くツヨツヨグラボができるのではないかと仮説が立つ。

 十分量のVRAMが確保できれば、多少古いGPUでも結構安く生成AI用に利用できるから、型落ちのサーバー型GPUと専用RAMのセットもいいかもしれない。

technical.city

 例えば、M40やV100用ボードはPCIe変換ボードと一緒に一時期低価格で大量に出回ったらしいけど、同じような考えから飛ぶように売れて、いまは価格が3倍以上になってコスパは激減だ。たぶん、半年おきにコスパの良さは大きく変化することがわかる。

 

どうVRAMを増やすか

 VRAM量とデータ転送がボトルネックになって生成AI関係の計算が維持できないとわかれば、それを解決するためにみんなどうやっているのだろうか。

 

ソフト的アプローチ

 かっこいいやり方は読み込みデータの圧縮だが、正直理解が追い付かない。流行りの量子化だと線形のデータ配列を多次元化することで計算効率を上げるなんて言われても意味不明だ。わかりやすい方法は、いくつかのグラボをPC内にセットして、ソフト上で処理の振り分け作業と異なるグラボ間で内部部品の共有化をする方法だろう。マザーボードのCPU-chipsetで制御する方法もあるが、Nvidia GPUの場合、NVLinkの様にGPU処理とVRAMデータを共有化する場合もある。

www.nttpc.co.jp

 同様に、Windows上のAPPからコントロールする場合もあるが、基本的には各ボードのVRAM・RAMの共有化にとどまり、GPUのタスク振り分けは実用的ではないみたいだ。例えば、LM Studioではデフォルトで振り分け機能が実装されているが、データ転送がボトルネックになって分けると遅くなることもある。一方でVRAM共有は写真や動画で生成AI用に使っているComfyUIでも有志がやっている。Redditのフォーラムを読むと、マルチGPU環境において、いくつかのグラボのVRAMをストレージとして使い、起動時データの一部や処理待ちデータを部分的に別グラボ内のVRAMに展開することで、通常動かすことができないワークフローも動かせるそうだ。同一ボードでモデルデータを割って計算を共有する試みもあるが、条件がかなり限定されており今の環境では厳しい。

 つまり、複数GPUと複数VRAMを使ってデータをあっちこっちに動かすのは難しいけど、1つのGPUで複数VRAMを使ったり、全く別の作業を各GPUに指令することはできるみたいだ。

 ただ、これらができてもデータ転送で速度遅延があり、高速化ができない点には注意が必要だと思う。あくまで動かないものを動かせるようにするものだと思う。

 

ハード的アプローチ

 もう一つは物理的にグラボのVRAMを増設する方法だ。有名なのがRTX4090のGPUをグラボから剥がして、別のボードにそのGPU載せ変える。そのボードには2倍のVRAMを載せるスペースがあるので、実行VRAMの量が倍になるというものだ。

www.youtube.com

 まぁ、PCBの設計みたいな難しいことをしないでも、VRAMを載せ変える方法が有効だ。RTX2060、2070、2080、2080ti、3060、3070、3080において元々のボードには電圧的に各VRAMスペースに2GB分のVRAMが載せられる(理論上4GB?)が、多くのボードには1GBを載せている。例えば、RTX2060の6GBモデルは6個のVRAMスペースにそれぞれ1GBのVRAMを載せて合計6GBとしている。そこで、それらボードから1GBのVRAMを剝がして、新たに2GBのVRAMを載せて12GBにできる。

www.youtube.com

 

じゃあどうするか

 どうせならソフトハードの両方やってみよう!

 

 ソフト側はすごい人がなんかすごいことをしているので、それを丸パクリしてしまおう( ̄ー ̄)ニヤリ。ComfyUIのVRAM共有については、Distorch2.0ノードをワークフローに入れるだけなのですぐにできる。LM StudioでもPCのWindows上にグラフィックボードが認識されていればタスクを割れる。学習は難しくても別々のテーマで推論を投げればやってくれるだろう。パラメータの調整は多少必要かもしれないが、何とかなるだろう。

 ハード側はグラボを物理的に弄るのでちょっと手間だ。まず、どのRTXを選ぶかを考えると、処理速度よりもVRAM量だ。今持っているRTX4070を使い、ストレージとしてもう一つのグラボを使ったり、各GPUに別作業をさせたい。そこで値段的にもVRAM容量的にもコスパのいいRTX2080tiの22GB化を狙う。

 グラボに熱を加えてハンダを溶かして部品を入れ替えるので、当然、壊れる可能性はある。そのため、ちゃんと動いているものを使うのは怖い。そこでジャンクを買うことにした。しかも、ジャンクの中でも電源関係やGPUが飛んでいるものは多分直せないので、VRAMだけがいかれているものが欲しい。エラーとしてはWindows上でコード43が出ているものだ(GPUとしては認識するが機能しないもの)。

 …と言うわけで、某ジャンク屋で2つ買ってみた。

 ついでに、載せ変えるVRAMもAliexpressで買った。2080tiのヒートシンクを剥がしてVRAMを見ると、K4ZAF325BC-HC14(1GB)が載っていたので、K4ZAF325BM-HC14(2GB)

を1枚1500円(10米ドル)くらいで合計で3.5万円で買った(今見たら値上げしてた)。

 合計約6万円弱!!!大出費だ。でも、二つとも動かせれば、50万円くらい節約できる!うまくいくはずだ!

 

ローカル環境構築計画を立てる

 予定(希望的解釈)としては処理用に使っているPCに4070(12GB)と2080ti(22GB)をPCに突っ込んで(PCケースサイズ的にギリギリで熱は不安)、PCIeでリンクしてRTX4070+RTX2080ti(34GB)でVRAMを食うソフトに使う。もう一つのRTX2080ti(22GB)は外付けGPUとする。これなら、独立した2つ以上の処理を並列してできる。また、さらにVRAMを必要とする処理をする際、例えば、独自学習モデルを作ると言った一つ上の処理も3つ合体(56GB)させて挑戦できる(多分計算にすごく時間はかかる)。

 GPUサーバーとまではいかないけど、それなりの処理がかなり安くできるはず。

 

終わりに

 さて、うまくいくか、ゴミを6万も出して絶望するか( ^ω^)・・・

 まぁやってみよう(^ω^)

 

(続く)

 

☆エロ同人CG販売中

 

COPYRIGHT Nipplelf ALL RIGHTS RESERVED.