Add: DGX SparkでQwen3-Coder-Next(80B MoE)を動かす
All checks were successful
Deploy Docusaurus Site / deploy (push) Successful in 26s

This commit is contained in:
koide 2026-02-19 11:31:37 +00:00
parent 436cebe365
commit fd7fe6f991
3 changed files with 308 additions and 0 deletions

View File

@ -0,0 +1,236 @@
---
sidebar_position: 3
title: DGX SparkでQwen3-Coder-Next80B MoEを動かす
description: NVIDIA DGX Sparkの128GB統合メモリでQwen3-Coder-Next80B MoEをFP8量子化で動かす方法を解説
hide_table_of_contents: false
displayed_sidebar: null
---
# DGX SparkでQwen3-Coder-Nextを動かす
## はじめに
**DGX Spark**はNVIDIAのデスクトップAIワークステーション。Grace BlackwellGB10アーキテクチャで、**128GB統合メモリ**を持つ。この記事では、最新の**Qwen3-Coder-Next**80B-A3B MoEをDGX Spark単体で動かす方法を解説する。
### 対象読者
- DGX Sparkを持っている
- 大規模LLMをローカルで動かしたい
- コーディング用のAIモデルを探している
### Qwen3-Coder-Nextとは
Qwen3-Coder-Nextは2026年2月にリリースされたMixture of ExpertsMoEコーディングモデル
| 項目 | 値 |
|-----|-----|
| 総パラメータ | 80B800億 |
| アクティブパラメータ | 3B30億 |
| アーキテクチャ | 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モデルをBF1616bitで動かすには約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-Next80B 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月時点の情報です。*

View File

@ -10,5 +10,6 @@ slug: /
## DGX Spark
- [Qwen3-Coder-Next80B MoEを動かす](/tech/dgx-spark-qwen3-coder-next) - FP8量子化で単体起動
- [デュアル構成ガイド](/tech/dgx-spark-dual) - 2台接続で256GB環境を構築
- [MiniMax-M2.5-REAP-172Bを動かす](/tech/dgx-spark-minimax) - 172Bモデルを動かす

View File

@ -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