おぼえておきたい

記憶力がないのでおぼえておきたいことを書いています。

eGPUを使ったLLM推論環境を作る

ただLLMが面白いからという理由だけで推論用環境を増築しました。

この記事はOMEN 40Lの原形が残ってない話の続きです。

ten-meteor.hatenablog.com

システム構成

MB: ASUS TUF Gaming H670 Plus WiFi D4

CPU: Intel Core i7-12700K

RAM: DDR4-3200 16GB x2 + 32GB x2

SSD: 2TB x2, 1TB, 4TB

GPU: Gainward Phantom GeForce RTX4090 24GB

Extension: ASUS ThunderboltEX4

eGPU: Razer Core X

GPU: NVIDIA RTX A6000

デスクトップマシンなのにeGPUの構成がユニーク?だと思います。

A6000をeGPUにしてるのは自分でもおかしいと思ってます。

パーツ選定

MB ASUS TUF Gaming H670 Plus WiFi D4

購入時の2023年前半の時点で、2万円台かつM.2スロットが4つを達成できるのはこれくらいしかありませんでした。LLMの容量えげつないので。

CPU i7-12700K

流用。元々OMEN 40Lだった名残り。

LLMにCPUはあまり必要ないため、i7-12700Kで足りている、と思ってます。

RAM DDR4-3200 96GB

コスト的にも安定性的にもJEDEC準拠のDDR4。足りていないので本当は128GBにしたい。

OMEN時代の名残り16GBx2にcrucial 32GBx2です。

SSD HIKSEMI Future 2TB, Samsung 980 Pro 2TB, WD SN810 1TB, Samsung 870 4TB

LLMはとにかく膨大なSSD容量を食う上に、ロード時やモデル変換時などは読み込み速度、書き込み速度も必要なので高性能なSSDが必要です。SATAの870は倉庫です。

GPU Gainward Phantom GeForce RTX 4090

2023/01の時点で最安だったモデル。3.5スロットで大きすぎるので少し後悔がある。

RTX4090は非常に省電力で高性能なので、使い道があるのであれば非常に良い。

拡張カード ASUS Thunderboltex4, eGPU Razer Core X

元々面白いからRazer Core Xは持っていました。

ASUSIntel用マザーは多くがThunderboltヘッダーを備えているのでThunderboltex4カードを搭載できます。

TUFのマザーには2枚目に2スロット占有グラフィックカードを挿せるようなスロットは元からない上、仮にあったとしても、3.5スロット占有のRTX4090があると2枚目は入るところがケース内に物理的にないため外に出しました。RTX4090でかすぎ。

eGPUは相性問題や原因不明の挙動との戦いなので頑張りましょう。

GPU NVIDIA RTX A6000

Ampare世代のプロフェッショナル用グラフィックカード。VRAM 48GB。性能的にはRTX3090相当。GPU 2つでVRAM 72GBを実現するには必要なパーツでした。

Xを見ている限り、RTX3090x2のほうがRTX A6000x1よりも遥かにパフォーマンスが良いため(1枚と2枚の比較なので当たり前といえばそう)、システムに繋げられてスペースに収まるならば、コスパはRTX3090を並べるほうが遥かに良いと思います。

困ったこと

ブートのバグ

何故かわからないのですが、RTX4090とRTX A6000が両方とも接続されているとシステムがブートに失敗します(マザーボードVGAエラーで止まるためOSが起動しない)。これはeGPUは関係なくて、PCIeに直接繋いでも起こります。

幸い?eGPUだとオンオフが容易な上、電源がついている状態でも抜き差しできるのがTBの仕様なので、起動してから接続すれば問題は起きません。

この2つ以外の組み合わせ(たとえば、RTX3060とRTX A6000)であれば繋ぎっぱなしでも起動できるので本当に謎です。

RTX4090のデカさと電力

RTX4090は外付けできません。Razer Core Xに3スロット以上のボードは入らず、電源も足りないためです。

かと言ってケース内にあるともう他のスペースが全くありません。

結果RTX A6000が外に追い出されました。

ドライバ

GdForceのドライバとRTX/Quadroのドライバは別物として提供されており、共存の場合どうすればよいのかよくわかりませんでした。

なんとかなるやろとGeForce GameReadyドライバのまま繋ぎましたが、普通に両方認識します。問題は起きていないのでこれでよいのだと思います。

その他

PCIeの帯域について

「eGPUは性能が下がるのでもったいない」とよく言われますが、あまりそうは思っていません。

まず第一として、コンシューマー向けのマザーボードでPCIe x16が2つ以上あるマザーボードはおそらくありません。(x16とx8があるものはZ790/B670にあります。)そのため、端からマルチGPUを前提としている時点で帯域は確実に足りません。XeonとかThreadripperであれば大量のPCIeレーンを確保できますが、非常に高価であるため、その予算でRTX3090を増やす方が効率が良いです。

2つめに、性能低下は主にレイテンシの増加によるゲームのフレームレート低下です。一度計算し始めたらGPUのみで処理が進む機械学習では影響は少ないです。実際A6000を両方に繋いで実験しましたが、直に繋いでもeGPUでもLLMの推論速度に差はありません。当然ですが、RTX4090があるのにRTX A6000でゲームはしません。

コスパ

考えたら負け。そもそも一番コスパが良いのはchatGPT Plusでは?