10x NVidia V100 のAIサーバーを自作してみた—320GB VRAM—vLLMテスト(Linuxヘッドレス)—ただの弁護士、ヒント求む

Reddit r/LocalLLaMA / 2026/4/6

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical UsageModels & Research

要点

  • 弁護士が、複数のNVIDIA V100 SXM2 GPU(NVLinkボードに10基搭載。最終的には12×32GB=384GB VRAM構成を目指す)を用い、法務用途向けにプライベートモデルを動かすヘッドレスのローカルAIサーバーを構築したことを語る。
  • 構築は、RAGやQLoRA/DoRAといったローカルLLMワークフローの実験を軸に進められており、Claude Codeを使ってインストールや設定をオーケストレーションしている。
  • 利用者は、Linuxカーネルの再コンパイル、CUDAの互換性問題、推論エンジン間でのテストなど、大きなトラブルシューティングと試行錯誤を報告しており、現在も構成を詰めている段階だ。
  • 初期のベンチマーク/テストとしてvLLMを使用しており、実行中に複数の大きなGGUFを同時にダウンロードした場合の性能への影響についても疑問を挙げている。
  • 自身の文章スタイルを模倣するのに適したモデルや設定、パターンの認識、低レベルな法的推論やフォーム記入の処理を行うための最適解について、提案を求めている。

ひとまず背景として:私は中西部出身ですが、今はサウスカロライナで弁護士をしています(しかも来週に裁判の準備をしていて、寝ないといけないはず)。自分の法律事務所はもう11年やっています。

約4か月前にClaude Codeがかなり強力なことをいくつかやってくれて、正直言ってビビってしまいました。それ以来、得した時間より無駄にした時間のほうが多いかもしれませんが、低レベルのパラリーガル系のタスクをかなり自動化できるようになったし、多くのことを学びました。道のりの中では楽しかったというか、少なくとも自分が楽しめるような面白さはありました。

ローカルで動くモデルを載せたローカル専用サーバを持って、そこでRagやQlora/doraをやりたい、ということに取り憑かれていました。その目標に向かってはまだ進めていますが、他の用事で忙しくないときは、という感じです。

4か月前は、コンピュータを組んだり、ヘッドレスのLinuxサーバをうまくインストールして動かしたり、ローカルネットワークを構築したりはできませんでした。なので、$$がかなり間違って配分されて途中で無駄にした時間もかなりあるとしても、複数の面でかなり前進した実感はあります。

ともあれ、私の最初のローカルAIマシンは完成していて、ほぼ完全です。2枚の4カードNVLINKボードに入っている10×SXM V100×(各32GBのSXM2)で、さらにスレッドリッパーpro上にNVLINKボードを2カード分。DDR4が256GBです。最後のV100を2台(合計V100は増える想定)受け取って、もう2カードのボードも追加で、という流れです。そしてV100はこれで最後。最終的な形は12×32GBのV100です。VRAMは384GB。

たぶん、もっと良い並列性のために4カードのボードを追加で買うかもしれません…多分。あるいは、ほかのマザーボード向けに4枚目のRTX 3090と、64GBのRAMスティックを買うかも…。

まあこれは、いままでで一番“ダサい”ミッドライフ・クライシスって感じですね。

とにかく私はまだ完全にClaude Codeに縛られていて、それを使って私の代わりに全部をオーケストレーションし、サーバ上にインストールし、さらに設定しています。いまは、異なる推論エンジンを使ってさまざまなローカルモデルをテストし始めた段階です。途中でエラーや行き違いもありました。Linuxカーネルを再コンパイルしました。新しいCUDAが動かないので、古いCUDAをインストールし直さないといけませんでした。

わかりませんが、ここに最初のテスト結果があります。モデルを走らせている間に600GBものggufモデルをダウンロードしていたせいで遅くなっているのかは不確かです。でもたぶん違うと思います。これでいいのか、何をもっとしたほうがいいのか、なぜ自分がバカなのか、など教えてください。私は返事で「どれだけ金持ちか」みたいなことを言って防衛機制にします。

本気で、私が何をすべきかを教えてください。他の推論エンジンや設定、コツなど、なんでも。

結局のところ、私の文章スタイルを模倣できるモデルを知りたいんです。パターンを認識して、低レベルの法務的なフォーム記入やパターン認識をしてほしい。どのモデルがQloraできるのか。何をすればいいのか、お願いです。

今日のvLLMテスト結果は以下です(AIの雑多なものが続きます):

# vLLM on 10x V100 SXM2 32GB — ビルドノート & ベンチマーク

私は弁護士であってエンジニアではありません。このサーバを、法務作業のためにローカルLLMを動かす目的で作り、学びながら進めています。vLLMのセットアップ一式(ソースビルド、依存関係の修正、ベンチマーク)はClaude Code(Opus)を通じて行いました。V100ハードウェアでのvLLMの明確なガイドが見つからなかったので、同じような状況の人もいるかもしれないと思い、投稿します。

## ハードウェア

- **CPU:** AMD Threadripper PRO

- **GPU:** 10x Tesla V100 SXM2 32GB(合計320GBのVRAM)

- **トポロジ:** NVLinkクアッドメッシュが2つ(GPU 0–3、4/5/8/9)+NV6ペア(GPU 6–7)

- **ドライバ:** NVIDIA 580.126.20

- **OS:** Ubuntu 24.04、ヘッドレス

## V100で動作するvLLM

- **FP16の非量子化:** 主経路。`--dtype half`

- **bitsandbytes 4-bit:** FP16では大きすぎるモデルでも動く

- **TRITON_ATTN:** FlashAttention2がSM 80+を要求するため、自動フォールバック

- **テンソル/パイプライン並列:** TP=4とTP=4 PP=2の両方をテストして成功

## 動作しないもの

- **GPTQ:** ExLlamaV2のカーネルがSM 7.0で壊れる(vLLM issue #2165)

- **AWQ:** SM 75+が必要

- **FP8:** SM 75+が必要。MiniMax M2.5は内部でFP8を使う—到着時点で詰んでいる。

- **FlashAttention2:** SM 80+が必要

- **DeepSeek MLA:** Hopper/Blackwellのみ。完全版のDeepSeek V3/R1は、vLLM + V100では動かせない。

## ビルド要件

- **PyTorch 2.11.0+cu126** — cu126はV100サポートの最後のバージョン。cu128以降はVoltaを落としています。

- **ソースコンパイル** with `TORCH_CUDA_ARCH_LIST="7.0"`, `MAX_JOBS=20`

- **MoEカーネルパッチ** — issue #36008、`fused_moe.py`で`B.size(1)`を`B.size(0)`に変更(2行)

- **PYTHONNOUSERSITE=1** — staleなシステムパッケージからconda環境を隔離するために必要

## 重要な修正:NCCL依存関係の競合

`pip install -e .` を実行すると `nvidia-nccl-cu13` が `nvidia-nccl-cu12` と並んで入ってしまいます。cu13のライブラリが実行時にロードされ、存在しないCUDA 13のシンボルを参照します(cu126ランタイムにはない)。結果として「NCCL error: unhandled cuda error」が全てのマルチGPU起動で発生します。

**修正:** すべての `nvidia-*` pipパッケージをアンインストールし、PyTorch wheel indexからPyTorch cu126を入れ直します(正しいcu12の依存関係を引いてくる)、その後、`--no-deps` を付けてvLLMをeditableで入れ直します。

## 必須の起動フラグ

```

--dtype half

--enforce-eager

--no-enable-chunked-prefill

--gpu-memory-utilization 0.90

CUDA_DEVICE_ORDER=PCI_BUS_ID

```

## ベンチマーク結果

FP16、enforce-eager、max-model-len 8192。モデルごとにプロンプトは5つ(最大256トークン)。最初のリクエストにはウォームアップのオーバーヘッドが含まれます。

|モデル |パラメータ|GPU|構成 |平均 tok/s|定常 tok/s|

|-------------|--------|----|---------|---------|------------|

|Command R 32B|35B |4 |TP=4 |33.1 |35.2 |

|Gemma 4 31B |31B |4 |TP=4 |21.6 |21.6 |

|Qwen 2.5 72B |72B |8 |TP=4 PP=2|13.9 |14.9 |

|MiniMax M2.5 |456B MoE|8 |TP=4 PP=2|N/A (FP8)|N/A |

*Gemma 4の、同程度のサイズにおけるCommand Rより低いスループットは、おそらくヘッドの次元が異質(256/512)で、TRITON_ATTNパスに追加のオーバーヘッドが強制されることが原因です。*

## vLLM V100で収まらないモデル

- **MiniMax M2.5:** FP8の重み。SM 75+が必要。llama.cppではGGUFとして問題なく動きます。

- **DeepSeek V3/V3.2/R1 (671B):** MLAの注意(attention)カーネルはHopper向け。llama.cppを`-cmoe`で使ってください。

- **Llama 4 Maverick (400B MoE):** FP16だと約800GB。Ollama/llama.cppでGGUFとしてのみ。

## セットアップを行ったのは

Claude Code(Opus 4)。SSHでサーバ上で動かしました。要望を説明すると、ソースビルド、依存関係のデバッグ、NCCLの修正、モデルのダウンロード、ベンチマークまで全部対応してくれました。技術面は学んでいますが、コンパイルやパッケージ管理が絡むことは、まだそれに頼っています。

"NCCL error: cuda error" が全てのマルチGPU起動で発生

submitted by /u/TumbleweedNew6515
[link] [comments]