# 200台サーバーのローカルllmクラスターを構築

Large-language-model（LLM）APIはとても強力ですが、コストが高いものです。一方、ローカルでLLMを推論させる場合、ハードウェアさえ手元にあればほぼ無料で動かせます。本記事では、オフィスで眠っていたApple Siliconラップトップを活用し、**200台の推論クラスター**を構築して本番トラフィックの25 %を処理するまでの道のりを紹介します。しかもデータセンター契約は一切ありません。

*ネタバレ*: あるほこりだらけの会議室から始まり、最後は午前3時にオフィスのネットワークを総配線し直すことになりました。

## フェーズ1：眠れるMacBookに息を吹き込む

オフィスの棚には、誰も使っていない **M1 MacBook Pro（32 GB RAM）**が12台並んでいました。時間がたてば資産価値は下がるだけ――そこで私は「これをLLM推論サーバーにしよう」と提案。CEOはコスト削減のアイデアを気に入り、私たちはすぐに行動を開始しました。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1751606134537/3d8d8cf0-72f4-459f-a41b-47d4f5c11a66.jpeg?auto=compress,format&format=webp align="left")

### スタック構成

特別なものはありません。

* **Ollama** でモデル提供（4つ試した中で最終的に採用）
    
* 1台のMacBookに **HAProxy** を入れ、シンプルなラウンドロビン負荷分散
    
* **Prometheus + Grafana** でメトリクスとダッシュボード
    
* 6 m²の会議室が“データセンター”なので、冷却用の安い卓上ファン
    
* MacBookは**1台ずつ**設置
    

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1751606710440/9b418d3e-ace1-4913-8b99-76fc7d19aea7.png?auto=compress,format&format=webp align="left")

### フレームワーク比較

| フレームワーク | 採用しなかった理由 |
| --- | --- |
| **LM Studio（MLXバックエンド）** | MLX対応は優秀だが、長いコンテキストや並列リクエストでフリーズ |
| **Raw MLX Library** | OpenAI風APIがなく、独自解析が必要。メモリ使用量も多い |
| **ollama.cpp** | 性能は高いが、当時は自動化が困難（Ansible未対応） |
| **Ollama** | デプロイが簡単で性能も十分。OpenAI互換エンドポイント。**採用決定** |

1週間で12台のMacBookが30Bモデルをローカルで動かし、本番トラフィックの約5 %を処理できるようになりました。

## フェーズ2：Mac Studioの寄り道 ― “大きい＝速い”とは限らない

成功すると欲が出るもの。マネジメントは「メモリが多ければスループットも上がる」と考え、**Mac Studio（512 GB RAM・80-core GPU）**を6台購入。各Mac StudioでMacBook 8台分の性能を期待しました。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1751606310302/9e838dd5-9c78-454c-bec2-4544fbb6024d.jpeg?auto=compress,format&format=webp align="left")

しかし現実は、LLMの速度はほぼ**GPUコア数**に比例し、**Amdahlの法則**が示すようにパイプラインの一部は並列化できません。その結果、Mac Studio 1台はMacBookの**約3–4倍**しか速くありませんでした（8倍ではない）。

![undefined](https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/AmdahlsLaw.svg/1920px-AmdahlsLaw.svg.png align="left")

![Understanding Concurrency Through Amdahl's Law - DEV Community](https://res.cloudinary.com/practicaldev/image/fetch/s--hYys61pY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nnn1wctofyp25352v51v.png align="center")

教訓は得ましたが、6台のMac Studioでトラフィックカバー率は約25 %に増えました。

## フェーズ3：200台のMac miniとAnsibleの歓喜

### なぜMac mini？

コスト分析の結果、**Mac mini（20-core GPU）2台**で1台のMac Studioよりもトークンあたりのコストパフォーマンスが高いと判明。**200台**を一括購入しました。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1751606390595/c7e32ec5-287c-49dc-adcc-fc8d90ed4fdb.jpeg?auto=compress,format&format=webp align="left")

### 自動プロビジョニング

200台を手動セットアップなど論外。そこで**Ansible**を導入しました。

（以下は例。本番環境はもっと複雑です）

```bash
# プレイブックの抜粋
- hosts: mac
  tasks:
    - name: Install Ollama
      homebrew:
        name: ollama
        state: present
    - name: Configure model
      shell: ollama pull mistral:7b-instruct
    - name: Register with HAProxy
      template:
        src: haproxy.cfg.j2
        dest: /usr/local/etc/haproxy/haproxy.cfg
```

最初の50台が一気に稼働した瞬間はまさに魔法のよう。あとは繰り返しでOKです。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1751606439615/ef003b5f-8b5d-4580-ad36-13c58ce78d39.jpeg?auto=compress,format&format=webp align="left")

### 午前3時のネットワーク大混乱

最大の難所はネットワークでした。サーバー群用に**専用VLAN**が必要でしたが、手元のYamahaルーターのマニュアルは中途半端な翻訳PDF、前任のネットワーク技術者は退職済み。ポート設定を1つミスっただけでオフィスWi-Fiが全滅。12時間、コーヒー3ポット、VLANタグ付けの猛勉強の末、無事に両ネットワークが復旧しました。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1751606531418/1425a0b8-a726-49be-b09c-4ac876e80710.jpeg?auto=compress,format&format=webp align="left")

## 今後の計画

**ラック化スケール** – 200台は収まっているものの、エアフローとケーブル管理が限界。次は42Uラックと本格PDUを導入予定です。

パート2ではVLAN奮闘記の詳細と、クラスターを支えるGrafanaダッシュボードを紹介します。お楽しみに！

### 読んでくれてありがとう！

質問やコメント、あなたの失敗談などあればぜひ教えてください。情報交換しましょう。
