西川和久の不定期コラム

USB4接続のGeForce RTX 3090が突然認識されなくなったので、OCuLinkで復活させた話

 Ubuntu+GeForce RTX 4090(PCI Express x16接続)と、Windows+GeForce RTX 3090(USB4接続)の2台構成でAI三昧している筆者であるが、後者がWindows UpdateをきっかけにGPUを認識しなくなってしまった。

 そこでメインPCの座からセカンドPCになっていたCore i9-12900搭載PCにOCuLink経由でGeForce RTX 3090を接続。AIマシンへ変身させた経緯/結果などをまとめてみた。

トラブルはある日突然やってくる

 これまでRyzen 9 6900HX搭載NUCタイプのミニPCに、USB 4経由でGeForce RTX 3070→GeForce RTX 4070 Ti→GeForce RTX 3090が入ったeGPU Boxへ接続し、生成AI画像メインに使っていたのだが、GeForce RTX 4090を購入、別途AIサーバーを構築したので、こちらはLLMなどを使うようになっていた。

 下記の記事は関連のコラムの回となる。最近は104BのCommand R+をIQ2だが動かしており(2.5token/s程度と遅いが、結構使える。この辺りの話は別の機会に)平和に暮らしていた。

 ところがゴールデンウィーク終わりかけの最終日の夜、Windows Updateが自動的にかかり失敗。何とかリカバリーして再起動すると、USB4接続のeGPU Boxを認識しなくなってしまった。ほかのPCに接続すると認識するので、eGPU BoxやGeForce RTX 3090が壊れたわけでない。

 何をしても認識せず、仕方ないのWindowsをリセット。これで認識すると思いきや、やはりダメ。結局3回リセットしてもダメなので諦めた。ゴールデンウィーク最終日の夜にこれは勘弁してほしい。

 USB4(Thunderbolt 3)接続のeGPU Boxは相性があり、接続するPCによって認識したりしなかったりするのだが、「認識していたのが、しなくなった」現象は今回初だ。

 ローカルLLMが使えないとそれはそれで困るため、代替えを考えたのだが、そもそもUSB4やThunderbolt 3搭載のPCがない(上記で作動確認したのはM1 Pro搭載MacBook 14 Pro。CUDA関連がないので使えないものの、認識はする)。

 そこでふと思い出したのが、以前「UM780 XTX」にOCuLinkを使いGeForce RTX 3090を動かしたこと。OCuLinkは、簡単にいえばM.2の信号をそのまま延長するだけ……という単純なものだ。この関係でケーブルの距離はあまり伸ばせないものの、USB4(Thunderbolt 3)のように相性問題は発生しない。

 ただ、M.2の変換基板と、PCI Express x16の基板だけだと上記の記事でも分かるように収まりが悪いため、ガッチリしたベースと電源ユニットを一体化できるフレームがあれば……と検索して発見したのが、今回ご紹介するOCuLink GPUドックとなる。

OCuLink GPUドックを購入

 今回購入したのはこの「OCuLink GPUドック」。「あれ!? どこかで見たような……」っと思った方は正解! 以前eGPUドックキットで買ったものと瓜二つ。

AliExpress / OCuLink GPUドックの製品ページ。M.2アダプタなしとありがある
OCuLink GPUドック一式。ベース、M.2アダプタ、ATX用フレーム、SFX用フレーム、OCuLinkケーブル(1m)、+ドライバと電源ユニットを支えるパーツ×2
OCuLink GPUドック(左)とeGPUドックキット(右)の比較。OCuLinkは変換回路がないため、ベースにパーツがない。電源コネクタもATX電源コネクタのみ
作動モード切り替えスイッチ(TGX SYNC/OCuLink)。TGX SYNCはどうやらLenovoの規格らしい。今回はOCuLinkで使用

 eGPUドックキットの場合、USB4(Thunderbolt3)からPCI Expressへ変換する回路があるため、ベース部分にちょっとしたパーツが乗っているが、こちらは直結なのでパーツはなく、ベースのみ。

 電源ユニットを固定するフレームも、同じものを流用し、OCuLinkコネクタ用の穴だけ別途開けている(使わないType-Cなどの穴は残ったまま)。そして回路がない分、少し安く約1.3万円ほど(M.2変換基板あり)。早速注文し、中2日で届いた(7日注文/10日着)。

 作動確認を……と思ったが、もともと使っていたRyzen 9 6900HX搭載PCは、M.2 2280スロットが1つしかないため、これをOCuLinkで潰してしまうとSATA SSDからブートさせなければならない。生成AI関連のモデルデータはGB級が多く、読み込みが遅くなるためこれはパス。

 では何につなげようか? と周りを見渡すと、メインで使っていたCore i9-12900搭載PCが余っていることに気がついた。このPC、2022年夏に組み、ずっとメインPCだったのだが、最近Photoshopなど画像処理が増えたこともあり、M1 Pro搭載のMacBook Pro 14+OLED 27型4Kモニターばかりを使っていて、開店休業状態だったのだ。

 構成的には、8Lタイプ(168×219.3×218.3mm)の筐体に、Mini-ITXと500Wの電源ユニットが入ったベアボーンで(ASRock DeskMeet B660)、PCI Express x16もあり、20cmまでのdGPUなら内蔵可能。そこへCore i9-12900を入れたPCとなる。余談になるが、この20cmまでのスペースだと、GeForce RTX 3060(12GB)やGeForce RTX 4060 Ti(16GB)で入るものもある。

 「ん? であればOCuLinkに1.3万円使うなら大きめのケースを購入、それに入れれば事足りるのでは!? 」と思った読者の方も多いと思う。筆者も一瞬そう思ったのだが、すると標準の電源容量が500Wでは不足、別途1KW級のものを購入しなければならず大幅にコストアップする。また、大きめのケースは場所も食う。なのでOCuLinkがいろいろな意味で今回はベストマッチだ。

組み立て、そして作動確認

 OCuLink GPUドック自体の組み立ては簡単で工作レベル。ベースに電源ユニットを固定するフレームを付け、電源ユニットをネジで固定、電源ユニットからケーブル1本刺すだけ。

 PC側のM.2 2280は、本機の場合、1つはPCI Express x16のすぐ下、もう1つはマザーボードの裏にあるため、今回は後者に接続した。またこの時、ついでに、3.0な512GB SSDを4.0な1TBへ変更。加えてRyzen 9マシンでバックアップ用に使っていた2.5インチ1TB SSDも接続。さらにAIサーバーを64GBにして、余っていた16GB x2をこちらへ移植し、16GB x4の64GBへ増量している。

PCI Express 3.0 M.2 2280 SSD 512GBから入れ替えた4.0 M.2 2280 SSD 1TBと、白いDIMMがAIサーバーから外した16GB。合計64GB
Ryzen 9マシンから外したSATA/2.5インチ1TB SSDもこちらへ追加
マザーボード裏のM.2 2280スロットへOCuLink基板を装着
Type-CケーブルとOCuLinkケーブル。どちらも1m

 問題はカバーを付けると、ケーブルを引き出せなくなるので、カバーなしの状態で使わなければならないこと。ドリルを使えば穴は開くので、そのうち処理するかもしれないが、今はカバーなしの状態で使っている。

 作動確認でいきなり高価なGeForce RTX 3090を使うのは怖いので、壊れても気にならないGeForce GT 1030を接続してみたところ、無事認識した。

電源ユニットを合体させたところ
M.2/OCuLinkアダプタからケーブルを引き出す
とりあえずの作動確認でGeForce GT 1030を装着
無事OSで認識

 この時、注意する点としては、OCuLinkはUSB4とは違い、プラグアンドプレイには未対応(単にバスの延長なので当然と言えば当然)。先にOCuLink GPUドック側の電源をONにした後、PC側を起動しなければならない。

本番、GeForce RTX 3090を接続
無事OSで認識

 ここまで来れば、eGPU BoxからGeForce RTX 3090を外し(二股電源コネクタも)、こちらへ移植、認識後、NVIDIAのドライバ系を一式インストールすれば作業完了だ。何の問題も発生せず、スムーズに処理は完了した。

軽くベンチマークテスト

 無事動いたので、いつもの512×768:神里綾華ベンチマークで生成速度を測定してみたい。USB4(Thunderbolt3)の最大40Gbpsに対して、OCuLink = M.2/PCI Express 4.0 x4は64Gbpsなので、当然後者の方が有利なはず。

512×768:神里綾華ベンチマークのテスト結果。10枚18秒で処理を終えている。USB4の時には29秒かかっていたのでかなり速くなった
  • GeForce GeForce RTX 3090(USB4接続) 8.77(it)/29秒(10枚)
  • GeForce GeForce RTX 3090(OCuLink接続) 12.92(it)/18秒(10枚)

 結果をみるとかなりの差だ。512×768:神里綾華ベンチマークのサイトにある値を見る限り、PCI Express x16接続と変わらない値になっており、大満足! なおもうさすがにないと思うが、M.2がPCI Express 3.0の場合、最大32Gbps。USB4より遅くなるため要注意だ。

 さて、このOCuLinkを使ってのGPU増設パターン、以下のケースが考えられる

  1. NUCタイプのミニPCへ強力なGPUを接続したい(ただしM.2が2スロット必要/1つはSSD)
  2. GPUを買い換えたものの、これまで使っていたのもそれなりなので同時に使いたい

 今回はNUCタイプではないものの1のパターンにあたる。たとえば前回ご紹介したGMKtec NucBox K9のように、2つあるM.2スロット1つにOCuLinkを付け、外部に強力なdGPUを購入、接続することができる。おそらくコスト的にも安上がりだ。

 2は、タワー型でもともとそれなりのGPUを搭載していたが、さらに強力なGPUを購入、もったいないので同時に使いたいパターン(もしくは同じものを増設)となる。

 これ簡単そうで意外と大変。当初から増設を想定して、マザーボード、ケース、電源を用意していれば大丈夫なのだが、そうでない場合、下手すればこれら全ての交換が必要となる。GPUだけでも結構な値段なのに、全とっかえでは物凄い出費が伴う。

 転送速度は少し劣るものの、M.2経由でOCuLinkにすればサクッと増設可能。このキットと500W程度の電源ユニットでいいなら大したコストもかからない。

 仮にUSB4があり、M.2が2つ、PCI Express x16 1つあれば、ストレージをSATA接続でいいのなら、最大4つのGPUを扱うこともできる(OS側がどうなるか? は不明だが)。

 今後いろいろ出るであろうThunderbolt 5だと最大80Gbps。これを使ったeGPU Boxが出れば、速度面は有利となるが、値段が高そうなので、コスト面ではOCuLinkに軍配があがる。


27型4Kモニターの後ろ、狭い空間へ無理やりPCとGeForce RTX 3090を押し込んで運用中

 以上、メインPCだったCore i9-12900(@8Lタイプの筐体)搭載小型PCへOCuLinkを使い、GeForce RTX 3090を接続した試用記となる。ケーブルを引き出す関係からパネルを付けられないのが欠点だが、それ以外はかなりいい感じで作動している。

 しかし面白いもので、このCore i9-12900 PCを組んだ2022年は、CPUさえ速ければGPUは何でもいい! とiGPUで動かしていたのに、今やdGPUでVRAM 24GB必要! (本当はもっと欲しい)と、生成AI関連を使うようになり、一気に趣向が変わってしまった。

 このOCuLink、(穴でも開けない限り)どこかパネルを開けっぱにする必要はあるものの、最近ハイパワーになってきたNUCタイプのミニPCにサクッと強力なGPUを接続したい時に有効な手段ではないだろうか!?