Separate Blog and Tech sections
Deploy Docusaurus Site / deploy (push) Successful in 26s

This commit is contained in:
2026-02-19 04:31:43 +00:00
parent 516972ab1a
commit bfc04ddfa4
8 changed files with 91 additions and 20 deletions
+444
View File
@@ -0,0 +1,444 @@
---
sidebar_position: 3
title: DGX Spark デュアル構成ガイド
description: 2台のDGX Sparkを接続して256GBメモリ環境を構築する方法を初心者向けに解説
---
# DGX Spark デュアル構成ガイド
2台のDGX Sparkを接続して、**256GBの巨大メモリ環境**を構築する方法を解説します。
## はじめに
### この記事で学べること
- 2台のDGX Sparkを接続する方法
- ネットワーク設定の仕組み
- vLLMクラスターの起動方法
### 対象読者
- DGX Sparkを2台持っている方
- 70B〜405Bの大規模モデルを動かしたい方
- Linuxの基本操作ができる方
### 前提条件
- DGX Spark × 2台
- QSFPケーブル × 1本
- 両方のマシンに同じユーザー名でログインできる
---
## なぜデュアル構成が必要?
DGX Spark 1台のメモリは **128GB** です。
| 構成 | メモリ | 動かせるモデル |
|------|--------|---------------|
| 単体 | 128GB | 〜70B(量子化時) |
| **デュアル** | **256GB** | 〜405B |
**Llama-3.3-70B****MiniMax-M2.5-172B** など、大きなモデルを動かすにはデュアル構成が必要です。
---
## 全体像
まず、完成形のイメージを掴みましょう。
```
┌─────────────────────┐ ┌─────────────────────┐
│ │ │ │
│ DGX Spark 1 │ │ DGX Spark 2 │
│ (ヘッドノード) │ │ (ワーカーノード) │
│ │ │ │
│ ┌───────────────┐ │ QSFPケーブル │ ┌───────────────┐ │
│ │ 192.168.100.10│◄─┼─────────────────────────┼─►│ 192.168.100.11│ │
│ │ (QSFP) │ │ 200Gbps │ │ (QSFP) │ │
│ └───────────────┘ │ │ └───────────────┘ │
│ │ │ │
│ ┌───────────────┐ │ │ ┌───────────────┐ │
│ │ 10.0.0.10 │ │ 通常のLAN │ │ 10.0.0.11 │ │
│ │ (eth0) │◄─┼─────────────────────────┼─►│ (eth0) │ │
│ └───────────────┘ │ │ └───────────────┘ │
│ │ │ │
└─────────────────────┘ └─────────────────────┘
│ API (ポート8000)
クライアント
```
**ポイント**
- **QSFPケーブル**:2台のSparkを直接つなぐ超高速回線(200Gbps)
- **通常LAN**:普段使っているネットワーク(SSH接続、API公開用)
---
## 手順1:物理接続
### ケーブルを差す
両方のDGX Sparkの **QSFPポート** にケーブルを差すだけ!
```
DGX Spark 1 DGX Spark 2
┌───────────┐ ┌───────────┐
│ [QSFP]───┼──────────────┼───[QSFP] │
│ │ ケーブル1本 │ │
└───────────┘ └───────────┘
```
:::tip QSFPポートの場所
背面にある大きめのポートです。LANケーブルより太いケーブルが刺さります。
:::
### 接続確認
どちらかのマシンで以下を実行:
```bash
ibdev2netdev
```
出力例:
```
mlx5_0 port 1 ==> enp1s0f1np1 (Up) ← ✅ Upになっていれば接続OK
mlx5_1 port 1 ==> enp1s0f0np0 (Down)
```
:::warning Upにならない場合
- ケーブルがしっかり刺さっているか確認
- 両方のマシンでコマンドを実行して確認
:::
---
## 手順2:ネットワーク設定
QSFPポートには **IPアドレスが自動で割り当てられません**。手動で設定が必要です。
### 設計を決める
| マシン | QSFPのIP | 役割 |
|--------|---------|------|
| Spark 1 | 192.168.100.10 | ヘッドノード |
| Spark 2 | 192.168.100.11 | ワーカーノード |
:::tip IPアドレスの決め方
`192.168.100.x` は例です。既存のネットワークと被らなければOK。
:::
### Spark 1 で設定
```bash
# 一時的に設定(再起動で消える)
sudo ip addr add 192.168.100.10/24 dev enp1s0f1np1
sudo ip link set enp1s0f1np1 up
```
### Spark 2 で設定
```bash
# 一時的に設定(再起動で消える)
sudo ip addr add 192.168.100.11/24 dev enp1s0f1np1
sudo ip link set enp1s0f1np1 up
```
### 疎通確認
Spark 1 から Spark 2 に ping
```bash
ping 192.168.100.11
```
```
PING 192.168.100.11 (192.168.100.11) 56(84) bytes of data.
64 bytes from 192.168.100.11: icmp_seq=1 ttl=64 time=0.123 ms ← ✅ 成功!
```
### 永続化(再起動しても消えないように)
設定を永続化するには、netplanファイルを作成します。
**Spark 1**
```bash
sudo tee /etc/netplan/99-qsfp.yaml << 'EOF'
network:
version: 2
ethernets:
enp1s0f1np1:
addresses:
- 192.168.100.10/24
EOF
sudo netplan apply
```
**Spark 2**
```bash
sudo tee /etc/netplan/99-qsfp.yaml << 'EOF'
network:
version: 2
ethernets:
enp1s0f1np1:
addresses:
- 192.168.100.11/24
EOF
sudo netplan apply
```
---
## 手順3SSH設定
2台のマシン間で **パスワードなしでSSH接続** できるようにします。
### なぜ必要?
vLLMクラスターが内部で自動的にSSH接続を使うためです。
### Spark 1 → Spark 2
Spark 1 で実行:
```bash
# 鍵がなければ作成
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
# Spark 2 に公開鍵をコピー
ssh-copy-id $USER@192.168.100.11
```
確認:
```bash
ssh 192.168.100.11 "hostname"
```
パスワードなしで `spark2`(ホスト名)が表示されればOK
### Spark 2 → Spark 1
Spark 2 で実行:
```bash
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
ssh-copy-id $USER@192.168.100.10
```
確認:
```bash
ssh 192.168.100.10 "hostname"
```
---
## 手順4vLLMクラスター起動
いよいよ本番!2台を1つのクラスターとして動かします。
### 4-1. 両方のマシンで準備
**両方のマシンで実行:**
```bash
# vLLMイメージを取得
docker pull nvcr.io/nvidia/vllm:25.11-py3
# クラスター起動スクリプトを取得
wget https://raw.githubusercontent.com/vllm-project/vllm/refs/heads/main/examples/online_serving/run_cluster.sh
chmod +x run_cluster.sh
```
### 4-2. ヘッドノード起動(Spark 1)
Spark 1 で実行:
```bash
# 環境変数を設定
export VLLM_IMAGE=nvcr.io/nvidia/vllm:25.11-py3
export MN_IF_NAME=enp1s0f1np1
export VLLM_HOST_IP=192.168.100.10
# ヘッドノードとして起動
bash run_cluster.sh $VLLM_IMAGE $VLLM_HOST_IP --head ~/.cache/huggingface \
-e VLLM_HOST_IP=$VLLM_HOST_IP \
-e NCCL_SOCKET_IFNAME=$MN_IF_NAME \
-e GLOO_SOCKET_IFNAME=$MN_IF_NAME \
-e RAY_memory_monitor_refresh_ms=0
```
:::tip 起動を待つ
`Ray runtime started.` と表示されるまで待ちます(1〜2分)
:::
### 4-3. ワーカーノード起動(Spark 2)
Spark 2 で実行:
```bash
# 環境変数を設定
export VLLM_IMAGE=nvcr.io/nvidia/vllm:25.11-py3
export MN_IF_NAME=enp1s0f1np1
export VLLM_HOST_IP=192.168.100.11
export HEAD_NODE_IP=192.168.100.10 # ← Spark 1 のIP
# ワーカーノードとして起動
bash run_cluster.sh $VLLM_IMAGE $HEAD_NODE_IP --worker ~/.cache/huggingface \
-e VLLM_HOST_IP=$VLLM_HOST_IP \
-e NCCL_SOCKET_IFNAME=$MN_IF_NAME \
-e GLOO_SOCKET_IFNAME=$MN_IF_NAME \
-e RAY_memory_monitor_refresh_ms=0
```
### 4-4. クラスター確認
Spark 1 で実行:
```bash
# コンテナ名を取得
export VLLM_CONTAINER=$(docker ps --format '{{.Names}}' | grep -E '^node-[0-9]+$')
# Rayクラスターの状態を確認
docker exec $VLLM_CONTAINER ray status
```
期待する出力:
```
Healthy:
2 node(s) ← ✅ 2ノードになっていれば成功!
```
---
## 手順5:モデルを起動
クラスターができたら、大規模モデルを起動します。
### MiniMax-M2.5-172B を起動する例
Spark 1(ヘッドノード)で実行:
```bash
docker exec -it $VLLM_CONTAINER /bin/bash -c '
vllm serve MiniMax-AI/MiniMax-M2.5-REAP-172B-A10B \
--tensor-parallel-size 2 \
--trust-remote-code \
--max-model-len 8192 \
--host 0.0.0.0 \
--port 8000'
```
| オプション | 意味 |
|-----------|------|
| `--tensor-parallel-size 2` | 2台のGPUに分散 |
| `--host 0.0.0.0` | 外部からアクセス可能に |
| `--max-model-len 8192` | 最大コンテキスト長 |
:::warning 起動に時間がかかります
モデルのダウンロード(初回のみ)と読み込みで **10〜30分** かかることがあります。
:::
---
## 手順6:動作確認
### APIにリクエストを送る
別のターミナル(または別のPC)から:
```bash
curl http://<Spark1のIP>:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-AI/MiniMax-M2.5-REAP-172B-A10B",
"messages": [{"role": "user", "content": "こんにちは!"}]
}'
```
レスポンスが返ってくれば成功!🎉
---
## ワンライナーで簡単セットアップ
上記の手順を自動化するスクリプトを用意しています。
```bash
# フルセットアップ
curl -sL https://docs.techswan.online/scripts/dgx-spark-setup.sh | bash -s -- all
```
| コマンド | 内容 |
|----------|------|
| `network` | QSFPのIP設定 |
| `ssh` | SSH鍵配布 |
| `docker` | Docker権限設定 |
| `vllm-pull` | vLLMイメージ取得 |
| `cluster` | クラスター起動 |
| `all` | 全部実行 |
---
## トラブルシューティング
### pingが通らない
**症状**`ping 192.168.100.11` がタイムアウト
**対処**
1. ケーブルが正しく接続されているか確認
2. `ibdev2netdev``Up` になっているか確認
3. IPアドレスが正しく設定されているか確認:
```bash
ip addr show enp1s0f1np1
```
### Rayクラスターが1ノードのまま
**症状**`ray status` で `1 node(s)` と表示される
**対処**
1. ワーカーノードでSSH接続テスト
2. ワーカー側のコンテナログを確認:
```bash
docker logs $(docker ps -q)
```
### vLLMがOOMで落ちる
**症状**Out of Memory エラー
**対処**
```bash
# max-model-len を小さくする
vllm serve <model> --tensor-parallel-size 2 --max-model-len 4096
```
---
## まとめ
| 手順 | 内容 |
|------|------|
| 1 | QSFPケーブルで2台を接続 |
| 2 | QSFPポートにIPアドレスを設定 |
| 3 | パスワードなしSSHを設定 |
| 4 | vLLMクラスターを起動 |
| 5 | 大規模モデルを起動 |
これで **256GB環境** が手に入りました!🎉
---
## 参考リンク
- [NVIDIA DGX Spark Playbooks](https://build.nvidia.com/spark/)
- [vLLM ドキュメント](https://docs.vllm.ai/)
- [DGX SparkでMiniMax-M2.5を動かす](/tech/dgx-spark-minimax/)
---
*この記事は2026年2月時点の情報です。最新情報は公式ドキュメントをご確認ください。*
+453
View File
@@ -0,0 +1,453 @@
# DGX Sparkで最新LLM「MiniMax-M2.5-REAP-172B」を動かしてみた
## はじめに
NVIDIA DGX Sparkは、デスクトップサイズでありながら最大200Bパラメータ(デュアル構成で405B)のAIモデルを動かせる小型AIワークステーションです。今回は、2026年2月にリリースされたばかりの最新モデル「**MiniMax-M2.5-REAP-172B-A10B**」をDGX Sparkデュアル構成(256GB統合メモリ)で動かす手順を紹介します。
---
## MiniMax-M2.5-REAP-172Bとは?
MiniMax-M2.5は、中国MiniMax社が開発したコーディング・エージェント特化のMixture-of-ExpertsMoE)モデルです。Cerebras社がREAPRouter-weighted Expert Activation Pruning)技術を適用し、オリジナルの230Bパラメータから172Bに軽量化したものが本モデルです。
### スペック
| 項目 | 値 |
|------|-----|
| 総パラメータ数 | 172B |
| アクティブパラメータ数 | 10B/トークン |
| レイヤー数 | 62 |
| エキスパート数 | 192(256から25%削減)|
| コンテキスト長 | 196,608トークン |
| ライセンス | Modified MIT |
### なぜREAP版がおすすめ?
- **ほぼ無劣化で25%軽量化**: HumanEval等のベンチマークでオリジナルと同等性能
- **vLLMネイティブ対応**: パッチ不要でそのまま動く
- **256GBメモリで十分動作**: オリジナル230B版では厳しいVRAM要件をクリア
---
## 動作環境
### DGX Spark デュアル構成
| 項目 | スペック |
|------|----------|
| アーキテクチャ | NVIDIA Grace Blackwell (GB10) |
| GPU | Blackwell GPU × 2 |
| メモリ | 256GB統合メモリ(LPDDR5x|
| ストレージ | 4TB NVMe × 2 |
| ネットワーク | ConnectX-7 (QSFP接続) |
---
## 事前準備:ネットワーク構成
デュアルSpark構成では、2台のノードをQSFPケーブルで物理接続する必要があります。
詳細な手順は公式ドキュメントを参照してください:
👉 [Connect two Sparks](https://build.nvidia.com/spark/connect-two-sparks)
### ネットワーク構成の理解(重要)
DGX Sparkデュアル構成では、**2種類のネットワーク**を使い分けます。公式ドキュメントではこの点が分かりにくいため、詳しく解説します。
```
┌─────────────────────┐ QSFP (200GbE) ┌─────────────────────┐
│ DGX Spark 1 │◄────────────────────────────►│ DGX Spark 2 │
│ │ 192.168.100.10/11 │ │
│ enp1s0f1np1 │ (クラスター通信) │ enp1s0f1np1 │
│ ┌───────────────┐ │ │ ┌───────────────┐ │
│ │ NCCL/Ray通信 │ │ │ │ NCCL/Ray通信 │ │
│ └───────────────┘ │ │ └───────────────┘ │
├─────────────────────┤ ├─────────────────────┤
│ eth0 (10.0.0.10) │◄──── 通常LAN ──────────────►│ eth0 (10.0.0.11) │
│ ┌───────────────┐ │ │ ┌───────────────┐ │
│ │ 管理/API公開 │ │ │ │ 管理のみ │ │
│ └───────────────┘ │ │ └───────────────┘ │
└─────────────────────┘ └─────────────────────┘
クライアントからの
APIリクエスト
http://10.0.0.10:8000
```
| ネットワーク | 用途 | インターフェース例 | IP例 |
|-------------|------|-------------------|------|
| **クラスター通信** | NCCL、Ray、テンソル並列 | enp1s0f1np1 (QSFP) | 192.168.100.x |
| **管理/API公開** | SSH、APIエンドポイント | eth0 (通常LAN) | 10.0.0.x |
### なぜ分離が必要?
1. **セキュリティ**: クラスター通信は暗号化されていないため、プライベートネットワーク推奨
2. **パフォーマンス**: NCCL通信は200GbE QSFPを使用し、APIトラフィックと分離
3. **柔軟性**: APIエンドポイントを外部公開しつつ、クラスター通信は内部に閉じる
### QSFPインターフェースへのIP割り当て(手動)
**重要**: QSFPインターフェースにはIPアドレスが自動で割り当てられません。手動設定が必要です。
```bash
# 両ノードで実行
# 1. インターフェース確認
ibdev2netdev
# 出力例: mlx5_0 port 1 ==> enp1s0f1np1 (Up)
# mlx5_1 port 1 ==> enp1s0f0np0 (Down)
# "(Up)" と表示されるインターフェースを使用
# 2. IPアドレス設定
# Node 1
sudo ip addr add 192.168.100.10/24 dev enp1s0f1np1
sudo ip link set enp1s0f1np1 up
# Node 2
sudo ip addr add 192.168.100.11/24 dev enp1s0f1np1
sudo ip link set enp1s0f1np1 up
# 3. 疎通確認(Node 1から)
ping 192.168.100.11
```
### 永続化(netplan使用)
再起動後もIPを維持するには、netplanで設定します。
```bash
# /etc/netplan/99-qsfp.yaml を作成
sudo tee /etc/netplan/99-qsfp.yaml << 'EOF'
network:
version: 2
ethernets:
enp1s0f1np1:
addresses:
- 192.168.100.10/24 # Node 2は192.168.100.11/24
EOF
sudo netplan apply
```
### パスワードなしSSHの設定
```bash
# Node 1で
ssh-keygen -t ed25519 -N ""
ssh-copy-id [email protected]
# Node 2でも同様に設定(逆方向)
```
---
## 環境構築
### 1. Dockerグループの設定(初回のみ)
```bash
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```
### 2. NGC公式vLLMイメージの取得
DGX Sparkではドライバー互換性の関係で、**必ずNGC公式イメージを使用**してください。
```bash
# 両方のノードで実行
docker pull nvcr.io/nvidia/vllm:25.11-py3
export VLLM_IMAGE=nvcr.io/nvidia/vllm:25.11-py3
```
### 3. クラスターデプロイスクリプトの取得
```bash
# 両方のノードで実行
wget https://raw.githubusercontent.com/vllm-project/vllm/refs/heads/main/examples/online_serving/run_cluster.sh
chmod +x run_cluster.sh
```
---
## Rayクラスターの起動
### Node 1(ヘッドノード)の起動
```bash
# Node 1で実行
# 高速インターフェースのIPアドレスを取得
# ibdev2netdev で "(Up)" と表示されるインターフェースを使用
export MN_IF_NAME=enp1s0f1np1
export VLLM_HOST_IP=$(ip -4 addr show $MN_IF_NAME | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
echo "Using interface $MN_IF_NAME with IP $VLLM_HOST_IP"
bash run_cluster.sh $VLLM_IMAGE $VLLM_HOST_IP --head ~/.cache/huggingface \
-e VLLM_HOST_IP=$VLLM_HOST_IP \
-e UCX_NET_DEVICES=$MN_IF_NAME \
-e NCCL_SOCKET_IFNAME=$MN_IF_NAME \
-e OMPI_MCA_btl_tcp_if_include=$MN_IF_NAME \
-e GLOO_SOCKET_IFNAME=$MN_IF_NAME \
-e TP_SOCKET_IFNAME=$MN_IF_NAME \
-e RAY_memory_monitor_refresh_ms=0 \
-e MASTER_ADDR=$VLLM_HOST_IP
```
### Node 2(ワーカーノード)の起動
```bash
# Node 2で実行
export MN_IF_NAME=enp1s0f1np1
export VLLM_HOST_IP=$(ip -4 addr show $MN_IF_NAME | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
# 重要:Node 1のIPアドレスを設定
# Node 1で `echo $VLLM_HOST_IP` を実行して確認
export HEAD_NODE_IP=<NODE_1_IP_ADDRESS>
echo "Worker IP: $VLLM_HOST_IP, connecting to head node at: $HEAD_NODE_IP"
bash run_cluster.sh $VLLM_IMAGE $HEAD_NODE_IP --worker ~/.cache/huggingface \
-e VLLM_HOST_IP=$VLLM_HOST_IP \
-e UCX_NET_DEVICES=$MN_IF_NAME \
-e NCCL_SOCKET_IFNAME=$MN_IF_NAME \
-e OMPI_MCA_btl_tcp_if_include=$MN_IF_NAME \
-e GLOO_SOCKET_IFNAME=$MN_IF_NAME \
-e TP_SOCKET_IFNAME=$MN_IF_NAME \
-e RAY_memory_monitor_refresh_ms=0 \
-e MASTER_ADDR=$HEAD_NODE_IP
```
### クラスター状態の確認
```bash
# Node 1で実行
export VLLM_CONTAINER=$(docker ps --format '{{.Names}}' | grep -E '^node-[0-9]+$')
echo "Found container: $VLLM_CONTAINER"
docker exec $VLLM_CONTAINER ray status
```
2ノードが認識され、GPUリソースが利用可能と表示されればOKです。
---
## モデルのダウンロード
### Hugging Faceへのログイン
```bash
# Node 1のコンテナ内で実行
export VLLM_CONTAINER=$(docker ps --format '{{.Names}}' | grep -E '^node-[0-9]+$')
docker exec -it $VLLM_CONTAINER /bin/bash
# コンテナ内で
huggingface-cli login
```
### MiniMax-M2.5-REAP-172Bのダウンロード
```bash
# コンテナ内で(約330GB、時間がかかります)
huggingface-cli download cerebras/MiniMax-M2.5-REAP-172B-A10B
```
---
## 推論サーバーの起動
### MiniMax-M2.5-REAP-172B用の起動コマンド
```bash
# Node 1で実行
export VLLM_CONTAINER=$(docker ps --format '{{.Names}}' | grep -E '^node-[0-9]+$')
docker exec -it $VLLM_CONTAINER /bin/bash -c '
vllm serve cerebras/MiniMax-M2.5-REAP-172B-A10B \
--tensor-parallel-size 2 \
--tool-call-parser minimax_m2 \
--reasoning-parser minimax_m2_append_think \
--trust-remote-code \
--enable-auto-tool-choice \
--max-model-len 65536 \
--gpu-memory-utilization 0.90'
```
### パラメータ解説
| パラメータ | 説明 |
|-----------|------|
| `--tensor-parallel-size 2` | 2台のSparkでテンソル並列 |
| `--tool-call-parser minimax_m2` | MiniMax専用ツールコールパーサー |
| `--reasoning-parser minimax_m2_append_think` | thinking出力を履歴に保持 |
| `--max-model-len 65536` | 最大コンテキスト長(64K|
| `--gpu-memory-utilization 0.90` | メモリ使用率上限 |
### メモリ節約版(長文不要な場合)
```bash
docker exec -it $VLLM_CONTAINER /bin/bash -c '
vllm serve cerebras/MiniMax-M2.5-REAP-172B-A10B \
--tensor-parallel-size 2 \
--tool-call-parser minimax_m2 \
--reasoning-parser minimax_m2_append_think \
--trust-remote-code \
--enable-auto-tool-choice \
--max-model-len 16384 \
--max-num-seqs 32 \
--gpu-memory-utilization 0.85'
```
### APIエンドポイントを別IPで公開する
クラスター通信(QSFP)とAPIエンドポイント(通常LAN)を分離したい場合:
```bash
docker exec -it $VLLM_CONTAINER /bin/bash -c '
vllm serve cerebras/MiniMax-M2.5-REAP-172B-A10B \
--tensor-parallel-size 2 \
--host 0.0.0.0 \
--port 8000 \
...'
```
| オプション | 説明 |
|-----------|------|
| `--host 0.0.0.0` | 全インターフェースでリッスン(推奨) |
| `--host 10.0.0.10` | 特定IPのみでリッスン |
| `--port 8000` | APIポート番号 |
**ポイント**: `VLLM_HOST_IP`環境変数はクラスター内部通信用であり、`--host`オプションはAPIエンドポイント用です。これらは独立して設定できます。
---
## 動作確認
### OpenAI互換APIでテスト
```bash
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "cerebras/MiniMax-M2.5-REAP-172B-A10B",
"messages": [
{"role": "user", "content": "Pythonでフィボナッチ数列を生成する関数を書いて"}
],
"temperature": 1.0,
"top_p": 0.95,
"top_k": 40
}'
```
### ヘルスチェック
```bash
curl http://localhost:8000/health
```
---
## 監視とデバッグ
### Rayダッシュボード
```
http://<head-node-ip>:8265
```
### GPU使用状況の確認
```bash
# 両ノードで
nvidia-smi
# コンテナ内から
export VLLM_CONTAINER=$(docker ps --format '{{.Names}}' | grep -E '^node-[0-9]+$')
docker exec $VLLM_CONTAINER nvidia-smi --query-gpu=memory.used,memory.total --format=csv
```
---
## トラブルシューティング
### OOM(メモリ不足)エラー
```bash
# 対策1: シーケンス数を減らす
--max-num-seqs 32
# 対策2: コンテキスト長を短く
--max-model-len 16384
# 対策3: メモリ使用率を下げる
--gpu-memory-utilization 0.80
```
### CUDA illegal memory access エラー
```bash
# CUDAグラフモードを変更
--compilation-config "{\"cudagraph_mode\": \"PIECEWISE\"}"
```
### Rayクラスターに接続できない
```bash
# ネットワークインターフェースの確認
ibdev2netdev
# ファイアウォールの確認
sudo ufw status
# Rayポートの開放(必要な場合)
sudo ufw allow 6379
sudo ufw allow 8265
```
---
## 重要な注意点
### Thinkingトークンの扱い
MiniMax-M2.5は **interleaved thinking model** です。出力に含まれる `<think>...</think>` タグは、履歴として次のリクエストに含める必要があります。
```python
# ❌ NGパターン:thinkingを削除
content = response.replace(r'<think>.*?</think>', '')
# ✅ OKパターン:そのまま保持
history.append({"role": "assistant", "content": response})
```
### 推奨推論パラメータ
```json
{
"temperature": 1.0,
"top_p": 0.95,
"top_k": 40
}
```
---
## まとめ
DGX Sparkデュアル構成(256GB)とNGC公式vLLMイメージを使えば、最新のMiniMax-M2.5-REAP-172Bが快適に動作します。オープンソースモデルとしてはトップクラスのコーディング・エージェント性能を持つこのモデル、ぜひ試してみてください。
### 参考リンク
- [MiniMax-M2.5-REAP-172B (Hugging Face)](https://huggingface.co/cerebras/MiniMax-M2.5-REAP-172B-A10B)
- [DGX Spark vLLM公式ガイド](https://build.nvidia.com/spark/vllm/stacked-sparks)
- [MiniMax-M2 公式リポジトリ (GitHub)](https://github.com/MiniMax-AI/MiniMax-M2)
- [vLLM MiniMax-M2 デプロイガイド](https://docs.vllm.ai/projects/recipes/en/latest/MiniMax/MiniMax-M2.html)
- [REAP論文 (arXiv)](https://arxiv.org/abs/2510.13999)
---
*この記事は2026年2月時点の情報です。最新情報は各公式ドキュメントをご確認ください。*
+14
View File
@@ -0,0 +1,14 @@
---
sidebar_position: 1
title: Tech
slug: /
---
# 💻 Tech
技術記事・ハウツー・検証レポートなど。
## DGX Spark
- [デュアル構成ガイド](/tech/dgx-spark-dual) - 2台接続で256GB環境を構築
- [MiniMax-M2.5-REAP-172Bを動かす](/tech/dgx-spark-minimax) - 172Bモデルを動かす