From fd7fe6f99149918065356af999a8a8a9ce6b7921 Mon Sep 17 00:00:00 2001 From: koide Date: Thu, 19 Feb 2026 11:31:37 +0000 Subject: [PATCH] =?UTF-8?q?Add:=20DGX=20Spark=E3=81=A7Qwen3-Coder-Next?= =?UTF-8?q?=EF=BC=8880B=20MoE=EF=BC=89=E3=82=92=E5=8B=95=E3=81=8B=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs-tech/dgx-spark-qwen3-coder-next/index.md | 236 ++++++++++++++++++ docs-tech/index.md | 1 + static/scripts/dgx-spark-qwen3-coder.sh | 71 ++++++ 3 files changed, 308 insertions(+) create mode 100644 docs-tech/dgx-spark-qwen3-coder-next/index.md create mode 100644 static/scripts/dgx-spark-qwen3-coder.sh diff --git a/docs-tech/dgx-spark-qwen3-coder-next/index.md b/docs-tech/dgx-spark-qwen3-coder-next/index.md new file mode 100644 index 0000000..c16df90 --- /dev/null +++ b/docs-tech/dgx-spark-qwen3-coder-next/index.md @@ -0,0 +1,236 @@ +--- +sidebar_position: 3 +title: DGX SparkでQwen3-Coder-Next(80B MoE)を動かす +description: NVIDIA DGX Sparkの128GB統合メモリでQwen3-Coder-Next(80B MoE)をFP8量子化で動かす方法を解説 +hide_table_of_contents: false +displayed_sidebar: null +--- + +# DGX SparkでQwen3-Coder-Nextを動かす + +## はじめに + +**DGX Spark**はNVIDIAのデスクトップAIワークステーション。Grace Blackwell(GB10)アーキテクチャで、**128GB統合メモリ**を持つ。この記事では、最新の**Qwen3-Coder-Next**(80B-A3B MoE)をDGX Spark単体で動かす方法を解説する。 + +### 対象読者 + +- DGX Sparkを持っている +- 大規模LLMをローカルで動かしたい +- コーディング用のAIモデルを探している + +### Qwen3-Coder-Nextとは + +Qwen3-Coder-Nextは2026年2月にリリースされたMixture of Experts(MoE)コーディングモデル: + +| 項目 | 値 | +|-----|-----| +| 総パラメータ | 80B(800億) | +| アクティブパラメータ | 3B(30億) | +| アーキテクチャ | Mamba + Transformer ハイブリッド | +| コンテキスト長 | 最大1M tokens | + +MoE構造により、80Bパラメータでありながら推論時は3Bしかアクティブにならないため、効率的。 + +## ワンライナーでセットアップ + +```bash +curl -sL https://docs.techswan.online/scripts/dgx-spark-qwen3-coder.sh | bash +``` + +:::tip 初回起動 +モデルダウンロード(約45GB)+ ロードで15-20分かかる。`docker logs -f qwen3-coder-next-fp8` で進捗確認。 +::: + +## 重要:コンテナ選定 + +:::danger NGCコンテナ必須 +DGX Sparkでは必ずNGC公式コンテナを使う。pipインストールや野良ビルドは、ドライバー互換性問題を引き起こす。 +::: + +```bash +# ❌ やってはいけない +pip install vllm + +# ✅ 正解:NGC公式コンテナ +docker pull nvcr.io/nvidia/vllm:25.11-py3 +``` + +## 量子化の選択 + +### BF16は無理 + +80BモデルをBF16(16bit)で動かすには約160GBのメモリが必要。DGX Sparkの128GBでは足りない。 + +``` +torch.OutOfMemoryError: CUDA out of memory. +GPU 0 has a total capacity of 119.64 GiB of which 994.07 MiB is free. +``` + +### FP8を使う + +**FP8版**(`Qwen/Qwen3-Coder-Next-FP8`)を使えば、約45GBで収まる。 + +| 量子化 | メモリ | DGX Spark単体 | +|--------|--------|--------------| +| BF16 | ~160GB | ❌ | +| FP8 | ~45GB | ✅ | +| NVFP4 | ~25GB | ✅ | + +## 手動セットアップ + +### 起動コマンド + +```bash title="Qwen3-Coder-Next-FP8 起動" +docker run -d --name qwen3-coder-next-fp8 \ + --gpus all \ + -p 8000:8000 \ + -v ~/.cache/huggingface:/root/.cache/huggingface \ + --ipc=host \ + nvcr.io/nvidia/vllm:25.11-py3 \ + vllm serve Qwen/Qwen3-Coder-Next-FP8 \ + --max-model-len 32768 \ + --max-num-seqs 32 \ + --gpu-memory-utilization 0.85 \ + --trust-remote-code +``` + +### パラメータ解説 + +| パラメータ | 値 | 説明 | +|-----------|-----|------| +| `--gpus all` | - | 全GPU使用 | +| `--ipc=host` | - | 共有メモリ設定(必須) | +| `--max-model-len` | 32768 | 最大コンテキスト長 | +| `--max-num-seqs` | 32 | 同時リクエスト数 | +| `--gpu-memory-utilization` | 0.85 | GPUメモリ使用率 | +| `--trust-remote-code` | - | カスタムコード許可 | + +## 起動ログの確認 + +### 正常な起動シーケンス + +```bash +docker logs -f qwen3-coder-next-fp8 +``` + +1. **モデルダウンロード**(初回のみ、約45GB) +2. **Safetensorsロード**(40シャード、約10分) +3. **KVキャッシュ確保** +4. **CUDAグラフキャプチャ** +5. **API起動完了** + +``` +INFO: Application startup complete. +``` + +### 進捗確認 + +```bash +# ダウンロード進捗 +du -sh ~/.cache/huggingface/hub/models--Qwen--Qwen3-Coder-Next-FP8 + +# ロード進捗(ログに表示) +Loading safetensors checkpoint shards: 62% Completed | 25/40 +``` + +## 推論テスト + +### ヘルスチェック + +```bash +curl http://localhost:8000/health +``` + +### チャット + +```bash +curl http://localhost:8000/v1/chat/completions \ + -H "Content-Type: application/json" \ + -d '{ + "model": "Qwen/Qwen3-Coder-Next-FP8", + "messages": [ + {"role": "user", "content": "Pythonでフィボナッチ数列を生成する関数を書いて"} + ], + "max_tokens": 500 + }' +``` + +## トラブルシューティング + +### OOM(メモリ不足) + +:::warning 症状 +``` +CUDA out of memory. Tried to allocate X GiB. +``` +::: + +**対処:** +1. FP8/NVFP4量子化版を使う +2. `--max-model-len`を減らす(32768 → 16384) +3. `--gpu-memory-utilization`を減らす(0.85 → 0.75) +4. 他のプロセスを停止 + +### メモリリーク + +**症状:** OOM後に空きメモリが減ったまま + +**対処:** +```bash +# 全コンテナ停止 +docker stop $(docker ps -q) + +# メモリ確認 +free -h +``` + +### gpu-memory-utilizationエラー + +**症状:** +``` +ValueError: Free memory on device (94.25/119.64 GiB) is less than desired GPU memory utilization +``` + +**対処:** +```bash +# 他のプロセスがGPUを使用中 +# 全コンテナを停止してからリトライ +docker stop $(docker ps -q) +``` + +## スペック情報 + +### 起動後のメモリ使用量 + +``` +Mem: 119Gi total, 84Gi used, 21Gi free +``` + +### KVキャッシュ + +``` +Available KV cache memory: 26.23 GiB +GPU KV cache size: 286,144 tokens +Maximum concurrency for 32,768 tokens per request: 32.91x +``` + +## まとめ + +DGX SparkでQwen3-Coder-Next(80B MoE)を動かすポイント: + +1. **NGC公式コンテナ**を使う(`nvcr.io/nvidia/vllm:25.11-py3`) +2. **FP8量子化版**を使う(BF16は128GBに収まらない) +3. **初回起動は時間がかかる**(ダウンロード + ロードで15-20分) +4. **メモリ競合に注意**(他のプロセスがGPUを使っているとOOM) + +FP8で45GB程度なので、32Kコンテキストで余裕をもって動作する。コーディング用途に最適! + +## 参考リンク + +- [Qwen3-Coder-Next HuggingFace](https://huggingface.co/Qwen/Qwen3-Coder-Next-FP8) +- [DGX Spark Playbooks](https://build.nvidia.com/spark/) +- [vLLM Documentation](https://docs.vllm.ai/) + +--- + +*この記事は2026年2月時点の情報です。* diff --git a/docs-tech/index.md b/docs-tech/index.md index 28b6b4a..6f5e623 100644 --- a/docs-tech/index.md +++ b/docs-tech/index.md @@ -10,5 +10,6 @@ slug: / ## DGX Spark +- [Qwen3-Coder-Next(80B MoE)を動かす](/tech/dgx-spark-qwen3-coder-next) - FP8量子化で単体起動 - [デュアル構成ガイド](/tech/dgx-spark-dual) - 2台接続で256GB環境を構築 - [MiniMax-M2.5-REAP-172Bを動かす](/tech/dgx-spark-minimax) - 172Bモデルを動かす diff --git a/static/scripts/dgx-spark-qwen3-coder.sh b/static/scripts/dgx-spark-qwen3-coder.sh new file mode 100644 index 0000000..052e950 --- /dev/null +++ b/static/scripts/dgx-spark-qwen3-coder.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# DGX Spark - Qwen3-Coder-Next-FP8 起動スクリプト +# https://docs.techswan.online/tech/dgx-spark-qwen3-coder-next/ + +set -e + +CONTAINER_NAME="qwen3-coder-next-fp8" +IMAGE="nvcr.io/nvidia/vllm:25.11-py3" +MODEL="Qwen/Qwen3-Coder-Next-FP8" +PORT="${PORT:-8000}" +MAX_MODEL_LEN="${MAX_MODEL_LEN:-32768}" +MAX_NUM_SEQS="${MAX_NUM_SEQS:-32}" +GPU_MEM_UTIL="${GPU_MEM_UTIL:-0.85}" + +echo "=== DGX Spark - Qwen3-Coder-Next-FP8 起動スクリプト ===" +echo "" + +# 既存コンテナ確認 +if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then + echo "⚠️ 既存コンテナを停止・削除..." + docker stop "$CONTAINER_NAME" 2>/dev/null || true + docker rm "$CONTAINER_NAME" 2>/dev/null || true +fi + +# イメージ確認・取得 +if ! docker images --format '{{.Repository}}:{{.Tag}}' | grep -q "^${IMAGE}$"; then + echo "📦 NGC vLLMイメージを取得中..." + docker pull "$IMAGE" +fi + +echo "" +echo "🚀 コンテナ起動..." +echo " Model: $MODEL" +echo " Port: $PORT" +echo " Max Context: $MAX_MODEL_LEN" +echo " GPU Memory: ${GPU_MEM_UTIL}%" +echo "" + +docker run -d --name "$CONTAINER_NAME" \ + --gpus all \ + -p "${PORT}:8000" \ + -v ~/.cache/huggingface:/root/.cache/huggingface \ + --ipc=host \ + "$IMAGE" \ + vllm serve "$MODEL" \ + --max-model-len "$MAX_MODEL_LEN" \ + --max-num-seqs "$MAX_NUM_SEQS" \ + --gpu-memory-utilization "$GPU_MEM_UTIL" \ + --trust-remote-code + +echo "" +echo "✅ コンテナ起動しました!" +echo "" +echo "📋 ログ確認:" +echo " docker logs -f $CONTAINER_NAME" +echo "" +echo "🔍 起動確認(Application startup complete が出るまで待つ):" +echo " 初回起動は15-20分かかります(モデルダウンロード + ロード)" +echo "" +echo "🧪 テスト:" +echo " curl http://localhost:${PORT}/health" +echo "" +echo "💬 チャット:" +cat << 'CURL_EXAMPLE' + curl http://localhost:8000/v1/chat/completions \ + -H "Content-Type: application/json" \ + -d '{ + "model": "Qwen/Qwen3-Coder-Next-FP8", + "messages": [{"role": "user", "content": "Hello!"}] + }' +CURL_EXAMPLE