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
|
## DGX Spark
|
||||||
|
|
||||||
|
- [Qwen3-Coder-Next(80B MoE)を動かす](/tech/dgx-spark-qwen3-coder-next) - FP8量子化で単体起動
|
||||||
- [デュアル構成ガイド](/tech/dgx-spark-dual) - 2台接続で256GB環境を構築
|
- [デュアル構成ガイド](/tech/dgx-spark-dual) - 2台接続で256GB環境を構築
|
||||||
- [MiniMax-M2.5-REAP-172Bを動かす](/tech/dgx-spark-minimax) - 172Bモデルを動かす
|
- [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