AI特需に対応: 安価なGPUの可能性 (1)

執筆者:佐藤友昭


安くて頼れるローカルLLM環境が欲しい

昨年の夏に GeForce RTX 4070 Ti SUPER JetStream OC (16GB) を買って RAG を構築してからというもの、使わない日はないぐらい重宝している。もっと大きなモデルが動かせるローカル LLM 環境が欲しくなるのが人情である。 とはいえ高い。とにかく高い。AI 特需で生産ラインをシフトしているのか何だか知らないが、一般向けのパーツが GPU 以外も全部高い。 納期も長い。 こうなると安さと早さが正義である。

というわけで、安くて頼れるローカル LLM 環境を実現したい。 方針としては、コストパフォーマンスに優れたコンシューマ向けの GPU を Linux PC に刺して、これを束にして LM 分散実行する「スケールアウトシナリオ」である。

会社に以前ブログで紹介した Falcon 4205 という PCIe ボックスがあり、中に NVIDIA RTX A4000 ada (20GB) という GPU を4台入れて DELL のサーバに繋いで使っている。GPU 4台の「スケールアップシナリオ」である。 GPUメモリが合計 80GB あると、ollama で gpt-oss:120b が動く。

この GPU のメモリ 1GB あたり価格は我が家の 4070 (16GB) と同じくらいだったと思う。 RTX PRO 6000 (96GB) が1台で ¥160万 ぐらいするらしいが、Falcon 4205 と A4000 ada (20GB)4台を合わせた価格よりは安くメモリ容量では 16GB 上回る。最初から 96GB 必要とわかっているなら PRO 6000 (96GB) の方を買うべきなのだろうが、メモリ容量の費用対効果というのは説明が難しい。単純に LM のサイズが2倍になると生産性も2倍になるという感じでもない。 効果を見つつ後から足していくスタイルでもトータルコストで損をしないで済めばありがたい。初期投資は小さいほど始めやすい。

さて、とにかくコンシューマ向け GPU を Linux PC 4台に刺して ConnectX-5 で繋ぐ。 ConnectX-5 も普通に買うと高いのだが、eBay で安いものを買い集める。最新から 2,3 世代型落ちであるが、100Gbps も帯域性能があればよかろう。 そもそも、PC なので PCIe レーン数が限られており、GPU と ConnectX-5 の両方をフルスピードで動かすことができない。NVIDA GPU の場合、GPU と ConnectX-5 の間で直接データをやり取りする GPUDirect RDMA という機能があるが、これが動作するマザーボードは限られる。手持ちの 4 台の PC の中では1台しか動作しない。なので、サーバー/ワークステーション用の高いマザーボードでなければ 100Gbps の帯域性能でも使いきれない。 そう考えると DGX Spark はコストパフォーマンスがとても優れていると思う。ちなみに、本稿執筆時点(9月)で DGX Spark はまだ市場に流通していない。 なんとなく、一人で使うのならば M4 Max でメモリが 128GB の Mac を1台買うのがトータルのコストパフォーマンスでも最強な予感がするが、やっぱり Linux で OSS で実現したいものである。

ユースケースとしては、個人による CLI や API での AI 推論用途とする。 オフィスの島に Linux PC が並んでいるような状況で、サイズの小さい LM 実行は手元の PC だけで単独実行し、サイズの大きい LM 実行は島の PC を何台か(シームレスに)動員して分散実行するようなイメージである。こういった用途にあると便利な共有 NVMe ストレージとセットで考えたい。 AI 学習用途や、より大規模な AI 推論用途についてはフラッシュメモリの書き換え回数制限を考慮する必要があるので今回のスコープからは外すこととし、CXL 接続の大容量メモリ利用事例として別途検討したい。

1ノードでのLM実行時の傾向

ollama は M1 以降の Mac でも Linux PC でも動作する。本稿執筆時点で ollama は MLX に対応していないため、性能上は Linux PC の方が有利な状況である。Mac でも Linux PC でも1ノードでの LM 実行時の傾向としては以下が見られる。

  • モデルサイズが大きくなると「平均トークン/秒」は減少し、「平均初回トークン(秒)」は増加する。
  • モデルサイズが GPU の VRAM 容量(Mac ではユニファイドメモリ容量 - 4GB 程度)を超えると極端に「平均初回トークン(秒)」が増加し、「平均トークン/秒」は減少する。

実際に試せる範囲で試した感じでは、小さいサイズのモデル実行では上述の 4070 (16GB) の Linux PC が最も高速で、ついで M4 Max (128GB)、A4000 ada (20GB) 、A2 (16GB)、M1 (16/8GB) となった。大きいサイズのモデル実行では M4 Max (128GB) が最も高速で、ついでA4000 ada (20GB) 、4070 (16GB) となった。1分以内にロードが終わらなかった A2 (16GB) と M1 (16/8GB) は結果なしとしている。まとめると、1ノードでの LM 実行には VRAM 容量が大きいマシンが有利な状況である。

2ノードでのLM実行時の傾向

M1 以降の Mac が何台かある場合、それらを Thunderbolt 4 (40Gbps) ケーブルでディジーチェーン接続すると途中の Mac がブリッジになって相互に通信できるようになる。この状態で各 Mac で exo という LM 実行環境を動作させると1台の Mac に収まらないサイズの LM を実行できるようになる(exo の場合、ollama と違って VRAM 容量を超えるサイズのモデル実行はエラーとなる)。 たとえば、8GB メモリの M1 Mac 1台だと llama-3.1-8b モデルや llama-3.2-3b-bf16 モデルは動作しなかったが、8GB メモリの M1 Mac 2台だと動作した。 8GB メモリの M1 Mac 2台で実行した場合の平均トークン/秒の値は 16GB メモリの M1 Mac 1台で実行した場合の半分程度といった感じである。動作速度はさておき、1台では動かなかったモデルが2台繋ぐと動くようになることには十分意味があるように思う。 本稿執筆時点で exo は Linux PC でも動作するが、Mac に比べて選択できる LM が限られていたり、 ollama とは違って上述の DELL サーバのように複数台の GPU がインストールされている環境でもうち1台のみが使用される状況である。 Linux 上での LM 分散実行では vLLM が広く使用されているようである。本稿では Linux PC での LM 分散実行に vLLM を使用することにする。

Linux PC 2ノードでの LM 実行の傾向としては以下が見られた。都合によりノード間接続に ConnectX-5 (100Gbps)ではなく ConnectX-6 (25Gbps) を使用している。GPUは A4000 ada (20GB)である。

  • 1ノードの VRAM に乗り切らないサイズのモデル (Llama-2-13b-hf) の場合、1ノード実行時にはエラーとなり、2ノード実行時には動作する。
  • 1ノードの VRAM に乗り切るサイズのモデル (Llama-2-7b-hf)の場合、使用する CPU によっては1ノード実行時よりも2ノード実行時の方が高速。すなわち、14th Core i7 使用時は平均トークン秒が向上し、平均初回トークン時間(秒)が短縮する。9th Core i9 使用時は1ノード実行時の方が高速。
  • 2ノード実行時、GbE 接続時よりも ConnectX-6 (25Gbps) 接続時の方が高速。

ノード間接続に使用した ConnectX-6 (25Gbps) は Mac/exo で使用した Thunderbold 4 (40Gbps) よりも帯域性能が低いにも関わらず、Mac/exo の時とは違って1ノード実行時よりも2ノード実行時の方が高速に実行できている。

4ノードでのLM実行時の傾向(次のステップ)

コンシューマ向け GPU を載せた Linux PC を ConnectX-5 (100Gbps) で繋ぐことでどこまでのスケーラビリティを実現できるものなのか。 ConnectX-6 (25Gbps) ではなく ConnectX-5 (100Gbps) を使用した場合、帯域性能が高い分、さらに高速化が期待できると思われる。上述したように、上記の環境では PC 用マザーボードの制約で ConnectX-6 (25Gbps) や ConnectX-5 (100Gpbs) の PCIe レーン数要件 (x8/x16) を満たせていないだけでなく、GPUDirect RDMA 機能も使用できていない。サーバー/ワークステーション用のマザーボードであればさらに高帯域と高効率が期待できるが、価格とのトレードオフである。本稿では「安さ」を優先したい。

次のステップとして、4ノードでの測定を実施する予定である。 最近は AMD Radeon AI PRO R9700 (32GB) や Intel Arc Pro B60 (24GB) といった、1GB あたりの価格が NVIDIA GPU に比べて格段に安い GPU が登場している。GPU 単体での購入はできないのかもしれないが、機会があれば是非これらも試してみたい。

この「スケールアウトシナリオ」の有効性が確認できれば、GPU や GPU の帯域性能とバランスする ConnectX-? を、それぞれの PCIe レーン数要件を満たすサーバー/ワークステーション用のマザーボードにインストールし、趣味ではなく実務に使用するシステムを構築するのも「あり」だと思う。