Add: DGX SparkでQwen3-Coder-Next(80B MoE)を動かす
All checks were successful
Deploy Docusaurus Site / deploy (push) Successful in 26s
All checks were successful
Deploy Docusaurus Site / deploy (push) Successful in 26s
This commit is contained in:
parent
436cebe365
commit
fd7fe6f991
236
docs-tech/dgx-spark-qwen3-coder-next/index.md
Normal file
236
docs-tech/dgx-spark-qwen3-coder-next/index.md
Normal file
@ -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月時点の情報です。*
|
||||
@ -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モデルを動かす
|
||||
|
||||
71
static/scripts/dgx-spark-qwen3-coder.sh
Normal file
71
static/scripts/dgx-spark-qwen3-coder.sh
Normal 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
|
||||
Loading…
x
Reference in New Issue
Block a user