eGPUを活用して余っているミニPCをGPUサーバー2ndとして復活させる(GPUクラスター構築計画：第一弾)

この記事は[FUJITSU Advent Calendar](https://qiita.com/advent-calendar/2022/fujitsu) 12日目の記事です。

# 事の顛末

筆者はかつてIntel NUCとRayzer製のGPUボックス(Core X)を活用してLinuxデスクトップマシンを構築しました。その顛末は以下の2報の記事として投稿しています。執筆当時は低消費電力GPUサーバーをモットーに構築しました。

https://qiita.com/y-vectorfield/items/2fcbc669a43fe0d0cb15

https://qiita.com/y-vectorfield/items/8960c804441d2ebd605e

しかし、GPUとの接続がThunderbolt3と言うこともあり、実際のGPUの演算速度の8割(PCIExpress x8相当)ぐらいのスピードしか出ないことが分かりました。当時のハイエンドビデオカードGeforce RTX 2080 Superをわざわざ演算速度を下げて使うのは正直勿体無い使い方であり、加えてIntel NUCが低消費電力版Core i7 8559Uということもあり、その後Core i9 10900K搭載のデスクトップPCをパソコン工房のバーゲンで衝動買いしてしまったことも有って、低消費電力GPUサーバーは半年あまりで稼働停止となりました。しかし、先日ふと低消費電力GPUサーバーの残骸が目に留まりました。このままにしておくのは勿体無いということで、メインのGPUサーバーは兎に角演算速度に優れたマシン(Core i9 10900K + Geforce RTX 2080 Super)とし、2ndマシンとして低消費電力かつビデオメモリが豊富なGPUというマシンの構想を思いつきました。以下その構築の顛末です。


# パーツ選定
今回のPC構築は最小限の予算で実現したかったため、流用出来るパーツは上記の低消費電力GPUサーバーのパーツを流用し、必要な物を追加で購入するという方針で進めました。よって、SSD 1TB(SATA, M.2)とGPUを新たに購入しました。

## SSD購入
アマゾンのブラックフライデーセールを活用し、シリコンパワーとTeamのSSDを購入しました。

|パーツの種類|型番|メーカー|価格|備考|
|---|---|---|---|---|
|SATA SSD|SP001TBSS3A55S25|シリコンパワー|￥7,548||
|M.2 SSD|M.2 2280 NVMe|Team|￥8,780||

## GPU購入
メインサーバーのRTX 2080 Superはビデオメモリが8GBです。最近はTensor FlowやPyTorchにおけるデータセットの取り扱いが洗練されてきているため、以前ほどGPUのメモリ不足になることは減りましたが、それでもデータセットによってはメモリ不足に陥ります。ならばとビデオメモリが10GBぐらい搭載されており、低消費電力で、そしてリーズナブルな価格帯のGPUを探していた所、Geforce RTX 3060(12GB)を偶然見つけました。価格も当初想定していた予算額よりも安く手に入れられました。こうして2年振りに低消費電力GPUサーバーを復活させることが出来ました。:yum:

![kakakucom.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/c15e0047-8be9-b944-041a-59e2622aa22a.png)

![rtx3060.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/8657494a-200a-7079-9ce1-ab6e87ca2056.png)

|パーツの種類|型番|メーカー|価格|備考|
|---|---|---|---|---|
|GPU|PH-RTX3060-12G-V2|ASUS|￥45,680|ドスパラで購入(初回登録者限定クーポン¥300を使用)|

但し、RTX3000シリーズはRTX2000シリーズの性能を凌駕しており、RTX 3060はRTX 2080 SPよりCUDAコア数、Tensorコア数双方共に上回っており、動作周波数だけが負けているという状況からRTX3060の方が実はハイスペックなのでは？とも思ったのですが、ビデオメモリの多さと低消費電力が売りのRTX3060の活用法として低消費電力PCに取り付けるのが良いと判断しました。余談ですが、今年の冬最も売れているNVIDIAのGPUは最新ハイエンドのRTX 4090とリーズナブルな価格ながら、ビデオメモリ12GBを搭載したRTX 3060(12GB)だそうです。RTX 3060は8GBモデルも有ります。筆者が価格を調べた時期はあまり価格に差が無く、寧ろ8GBモデルの方が割高でした。

# 低消費電力GPUサーバーの構築
構築方法は上記の過去の記事で紹介した方法で構築しました。但し、当時はUbuntu 18.04をOSとして採用しましたが、今回はUbuntu 22.04を採用しました。但し、2年振りの構築ということもあり、技術の進歩！？によって少々構築作業に変更が発生しました。

## GPUドライバーのインストールでの注意事項
先日、以下の記事を投稿しました。この記事で言及している様に、`ubuntu-drivers devices`コマンドで`recommended(お薦め)`されたドライバーをインストールすると事故が発生するため、注意しましょうという注意喚起の記事です。詳細は記事を以下の記事を参照して下さい。

https://qiita.com/y-vectorfield/items/72bfb66d8ec85847fe2f

## egpu-switcherが無くてもeGPU経由で画面出力が可能
かつてはeGPUをから画面出力をしようとすると、egpu-switcherのセットアップが必要でした。筆者は2年前に構築した時は画面出力が出来ず、egpu-switcherを発見するまでPCセットアップで大苦戦しました。しかし、2022年12月現在NVIDIAのGPUドライバーをインストールする時に上記記事の注意事項を守って正しくセットアップすれば、eGPU経由で画面出力が出来ました。egpu-switcherが`apt`非対応となり、ソースビルドのためにGo言語の環境を用意していたのですが、不要になりました。これはセットアップが楽になるありがたい進歩です。

# まとめ
低消費電力GPUサーバーをGPUサーバー2ndとして復活させました。まだセットアップが途中でこれからクジラ(Docker)をインストールしたり、タコ(Docker Compose)をインストールしたりと幾つか作業が残っていますが、山場は超えた認識です。折角GPUマシンが2台になり、しかもそれぞれ特性の異なるサーバーが2台となったので、近々予てから念願だったHorovodによる分散学習の環境を構築して、学習の速度が向上するか(その時の消費電力なども合わせて)検証してみたいなという野望を抱きつつこの記事の執筆を終えます。分散学習環境構築は早くて年明けから取り掛かれそうかな？？と思っています。