From e0e2ef2e694e42946e963d420f4acaf28af3e955 Mon Sep 17 00:00:00 2001 From: koide Date: Thu, 19 Feb 2026 01:18:33 +0000 Subject: [PATCH] =?UTF-8?q?Fix:=20DGX=20Spark=E5=85=AC=E5=BC=8F=E6=89=8B?= =?UTF-8?q?=E9=A0=86=E3=81=AB=E6=BA=96=E6=8B=A0=EF=BC=88NGC=E3=82=A4?= =?UTF-8?q?=E3=83=A1=E3=83=BC=E3=82=B8=20+=20Ray=E3=82=AF=E3=83=A9?= =?UTF-8?q?=E3=82=B9=E3=82=BF=E3=83=BC=E6=A7=8B=E6=88=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dgx-spark-minimax-m25-reap.md | 251 ++++++++++++++++++++++------------ 1 file changed, 162 insertions(+), 89 deletions(-) diff --git a/dgx-spark-minimax-m25-reap.md b/dgx-spark-minimax-m25-reap.md index 2237a9b..41656c7 100644 --- a/dgx-spark-minimax-m25-reap.md +++ b/dgx-spark-minimax-m25-reap.md @@ -39,87 +39,159 @@ MiniMax-M2.5は、中国MiniMax社が開発したコーディング・エージ | GPU | Blackwell GPU × 2 | | メモリ | 256GB統合メモリ(LPDDR5x)| | ストレージ | 4TB NVMe × 2 | -| ネットワーク | ConnectX-7 (クラスタ間接続) | +| ネットワーク | ConnectX-7 (QSFP接続) | -※ 単体構成(128GB)の場合は、より小さいREAP-139B版か量子化版を検討してください。 +--- + +## 事前準備:ネットワーク構成 + +デュアルSpark構成では、2台のノードをQSFPケーブルで物理接続する必要があります。 + +詳細な手順は公式ドキュメントを参照してください: +👉 [Connect two Sparks](https://build.nvidia.com/spark/connect-two-sparks) + +### 確認事項 + +- QSFPケーブルによる物理接続 +- ネットワークインターフェース設定(自動または手動IP割当) +- パスワードなしSSHの設定 +- ネットワーク疎通確認 --- ## 環境構築 -### 1. システムアップデート +### 1. Dockerグループの設定(初回のみ) ```bash -sudo apt update && sudo apt upgrade -y +sudo groupadd docker +sudo usermod -aG docker $USER +newgrp docker ``` -### 2. Python環境の準備 +### 2. NGC公式vLLMイメージの取得 + +DGX Sparkではドライバー互換性の関係で、**必ずNGC公式イメージを使用**してください。 ```bash -# Python 3.11推奨 -sudo apt install python3.11 python3.11-venv python3-pip -y - -# 仮想環境作成 -python3.11 -m venv ~/minimax-env -source ~/minimax-env/bin/activate +# 両方のノードで実行 +docker pull nvcr.io/nvidia/vllm:25.11-py3 +export VLLM_IMAGE=nvcr.io/nvidia/vllm:25.11-py3 ``` -### 3. vLLMのインストール +### 3. クラスターデプロイスクリプトの取得 ```bash -# nightlyビルド推奨(最新モデル対応) -pip install -U vllm --extra-index-url https://wheels.vllm.ai/nightly - -# または検証済みバージョン -export VLLM_COMMIT=dea63512bb9bdf7521d591546c52138d9d79e8ce -pip install vllm \ - --torch-backend=auto \ - --extra-index-url https://wheels.vllm.ai/${VLLM_COMMIT} +# 両方のノードで実行 +wget https://raw.githubusercontent.com/vllm-project/vllm/refs/heads/main/examples/online_serving/run_cluster.sh +chmod +x run_cluster.sh ``` -### 4. 関連パッケージ +--- + +## Rayクラスターの起動 + +### Node 1(ヘッドノード)の起動 ```bash -pip install transformers accelerate huggingface_hub +# 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= + +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 CLIでダウンロード +### Hugging Faceへのログイン ```bash -# ログイン(初回のみ) -huggingface-cli login +# Node 1のコンテナ内で実行 +export VLLM_CONTAINER=$(docker ps --format '{{.Names}}' | grep -E '^node-[0-9]+$') +docker exec -it $VLLM_CONTAINER /bin/bash -# モデルダウンロード(約330GB、時間かかります) -huggingface-cli download cerebras/MiniMax-M2.5-REAP-172B-A10B \ - --local-dir ~/models/MiniMax-M2.5-REAP-172B-A10B +# コンテナ内で +huggingface-cli login ``` -### ダウンロード時間の目安 +### MiniMax-M2.5-REAP-172Bのダウンロード -| 回線速度 | 所要時間 | -|---------|---------| -| 1Gbps | 約45分 | -| 10Gbps | 約5分 | +```bash +# コンテナ内で(約330GB、時間がかかります) +huggingface-cli download cerebras/MiniMax-M2.5-REAP-172B-A10B +``` --- -## モデルの起動 +## 推論サーバーの起動 -### 基本起動コマンド(デュアル構成・256GB) +### MiniMax-M2.5-REAP-172B用の起動コマンド ```bash -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 +# 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' ``` ### パラメータ解説 @@ -135,15 +207,16 @@ vllm serve cerebras/MiniMax-M2.5-REAP-172B-A10B \ ### メモリ節約版(長文不要な場合) ```bash -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 +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' ``` --- @@ -166,50 +239,32 @@ curl http://localhost:8000/v1/chat/completions \ }' ``` -### Pythonクライアント +### ヘルスチェック -```python -from openai import OpenAI - -client = OpenAI( - base_url="http://localhost:8000/v1", - api_key="dummy" # vLLMはAPIキー不要 -) - -response = client.chat.completions.create( - model="cerebras/MiniMax-M2.5-REAP-172B-A10B", - messages=[ - {"role": "user", "content": "SWE-benchスタイルのバグ修正タスクをシミュレートして"} - ], - temperature=1.0, - top_p=0.95 -) - -print(response.choices[0].message.content) +```bash +curl http://localhost:8000/health ``` --- -## パフォーマンスチューニング +## 監視とデバッグ -### 推奨設定 +### Rayダッシュボード -```bash -# 環境変数でCUDAグラフ最適化 -export VLLM_ATTENTION_BACKEND=FLASHINFER - -# DeepGEMMを有効化(要インストール) -./tools/install_deepgemm.sh +``` +http://:8265 ``` -### 期待されるスループット +### GPU使用状況の確認 -| 設定 | Input/Output | スループット | -|------|-------------|-------------| -| TP=2, 64K context | 2048/1024 | ~100 tok/s | -| TP=2, 16K context | 2048/1024 | ~150 tok/s | +```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 +``` --- @@ -235,11 +290,18 @@ export VLLM_ATTENTION_BACKEND=FLASHINFER --compilation-config "{\"cudagraph_mode\": \"PIECEWISE\"}" ``` -### 出力が文字化け/破損する +### Rayクラスターに接続できない ```bash -# vLLMを最新のnightlyに更新 -pip install -U vllm --extra-index-url https://wheels.vllm.ai/nightly +# ネットワークインターフェースの確認 +ibdev2netdev + +# ファイアウォールの確認 +sudo ufw status + +# Rayポートの開放(必要な場合) +sudo ufw allow 6379 +sudo ufw allow 8265 ``` --- @@ -258,15 +320,26 @@ content = response.replace(r'.*?', '') history.append({"role": "assistant", "content": response}) ``` +### 推奨推論パラメータ + +```json +{ + "temperature": 1.0, + "top_p": 0.95, + "top_k": 40 +} +``` + --- ## まとめ -DGX Sparkデュアル構成(256GB)があれば、最新のMiniMax-M2.5-REAP-172Bが快適に動作します。オープンソースモデルとしてはトップクラスのコーディング・エージェント性能を持つこのモデル、ぜひ試してみてください。 +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)