自宅サーバ5台+GPU2枚で「実際に試す」ラボを組んだ──全機材と選定理由

Proto.Violet.Lab の実機ラボ構成イメージ(AI計算コア)

このブログの記事は、調べてまとめたものではなく「自宅の常設ラボで実際に組んで・壊して・記録したもの」です。その検証を回している実機そのものを、この1本にまとめておきます。サーバ5台・GPU2枚・NAS・自前ネットワーク——何を、なぜその構成で選んだのかを記録します。

このラボは何をする場所か

自宅ラボの設置全景。ミニタワー2台の上にWi-Fiルーター、右にQNAP 8ベイNASと外付け4ベイRAIDケース
設置全景。左からミニタワー2台(計算ノード)、中央にQNAP 8ベイNAS、右に外付け4ベイRAIDケース

役割はひとつ。「実行すれば分かること」を、本番に出す前に自分の手で確かめる場所です。使い捨ての仮想マシンやコンテナを立てては壊し、成功も失敗も生ログのまま残す。だから記事の証拠が「きれいなスクショ」ではなく「実際のターミナル出力」になります。

物理的には、仮想化ホスト3台・AI計算ノード2台・ストレージ(NAS)・自前ルータ/スイッチで構成しています。常時動かすもの(監視・このブログの自動化基盤)と、必要なときだけ起こすもの(GPUノード)を分けているのが特徴です。

実検証ノードに使い捨てVMを立てて自動実行させる仕組みは、最初から綺麗には動きませんでした。実行ログにはこんな素のエラーが並びます。

WORKDIR: unbound variable
ansible-playbook: command not found
Warning: Permanently added '...' (ED25519) to the list of known hosts.

最後の host-key 警告がエラー欄に大量(数百件)混ざり、本物の失敗が埋もれる——という「ログが汚れて判断できない」失敗まで含めて記録しています。検証基盤づくり自体が検証対象でした。

CPU:役割でコア数を割り当てる

全ノード同じCPUにする意味はありません。「常時動く軽い役」には省電力寄り、「AIをブン回す役」には多コア。実際の割り当てはこうなっています。

役割            CPU                     コア/スレッド
インフラ母艦    Intel Core i3-13100      4C / 8T
監視・副系      AMD Ryzen 5 5600G        6C / 12T
AI検証サンドボックス AMD Ryzen 7 9700X    8C / 16T
AI母艦(デスクトップ) AMD Ryzen 9 9950X   16C / 32T
GPUワーカー     AMD Ryzen 9 3900        12C / 24T
ストレージ(NAS) Intel Core i5-12400      6C / 12T

インフラ母艦はコンテナや軽いサービスを並べるだけなので、あえて非力な i3 で十分。逆にAI母艦は推論や生成を抱えるので 16コアの 9950X を載せています。「メモリやGPUより先に、まずそのノードが何をするかでCPUを決める」のが選定の順番でした。

メモリ:載せるものが必要量を決める

メモリは「多ければ偉い」ではなく、そのノードに載せる役割が必要量を決めると考えています。実際、搭載量が一番多いノードが一番非力なCPU、ということも起きています。

  • インフラ母艦(128GB):CPUは控えめな i3 だが、コンテナ・仮想マシンを多数同居させるのでRAMだけは厚く。
  • AI母艦(96GB):推論・生成スタックとデスクトップ用途を兼ねるため大容量。
  • 検証サンドボックス(96GB):使い捨て環境を複数同時に立てるためのバッファ。
  • 監視・副系/GPUワーカー/NAS(各64GB前後):役割が決まっているので過剰に積まない。

つまりメモリ容量は「ノードの格」ではなく「同居させる数と種類」を映した結果です。

GPU:推論とバッチ生成で2枚を使い分ける

母艦ノードの内部。850W電源、空冷CPUクーラー、GeForce RTXを縦配置
母艦の内部。850W電源+大型空冷+GeForce RTX。シリアル部はぼかし加工

GPUは24GBクラスを2枚。役割を完全に分けています。

  • RTX 4090(24GB) — AI母艦:常時起動側。推論や対話系スタックを動かす「すぐ使える」枠。
  • RTX 3090 Ti(24GB) — GPUワーカー:ヘッドレスの専用機。普段は電源を落としておき、まとまったバッチが溜まったときだけ起こします。

そしてこのGPUワーカー、実はこのブログのアイキャッチ画像を生成しているのも同じ機体です。1枚ずつ無駄に起こさないよう、ジョブが一定数溜まるまで起動しない仕組みにしています。電源投入から作業、停止までを自動で確認しているログがこれです。

$ subpc-power on
subpc: UP (SSH reachable)
... (バッチ生成) ...
$ subpc-power off
shutdown rc= 0
$ subpc-power status
subpc: DOWN

「使うときだけ起こす」を機械化することで、24GB級GPUを常時回しっぱなしにせずに済んでいます。

稼働中のGeForce RTXのLEDロゴ発光
夜間も稼働し続けるGPUノード

ネットワーク:用途ごとにVLANで分ける(大枠だけ)

細かいIP設計はここでは出しませんが、考え方はシンプルです。「人が使う機器」「サーバ群」「IoT」「公開用」などを用途ごとにVLANで分離し、サーバ群から家庭側へは原則アクセスさせない、という方針で組んでいます。

  • ルータ:ヤマハ RTX1300。VLANルーティングとフィルタの中心。
  • コアスイッチ / エッジスイッチ:MikroTik CRS326 / CRS309。サーバ間は10GbE級で束ねています。

「とりあえず全部同じネットワーク」をやめて用途で割るだけで、検証で何かやらかしても家庭側に波及しない安心感が出ます。

ストレージ:NASを中心に冗長とバックアップ

データの正本はQNAPのNASに置き、冗長(RAID6)で日常の故障に備えつつ、別筐体の外付けRAID5へバックアップしています。クラウド同期も併用し、「同じデータを別の場所にも持つ」を徹底しています。

  • NAS本体:QNAP(RAID6 HDDアレイ + NVMe階層)。
  • バックアップ:外付けハードウェアRAID5筐体(大容量)。

このラボ構成のポイント

  • CPUは「ノードの役割」で先に決める。インフラ母艦は省電力 i3、AI母艦は16コア 9950X。
  • メモリ量は格ではなく「同居させる数」を映す。最大容量のノードが最も非力なCPU、も普通に起きる。
  • GPUは常時起動(4090)と必要時起動(3090 Ti)で分け、後者はこのブログの画像生成も兼ねる。
  • ネットワークは用途ごとにVLAN分離。検証のやらかしを家庭側に波及させない。
  • データは正本(NAS RAID6)+別筐体バックアップ(RAID5)+クラウドで多重化。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人