🤖

DGX SparkでQwen3-Coder-Nextを動かす

に公開
2026/02/06

はじめに

DGX Spark1台でQwen3-Coder-Nextが快適に動くという投稿があったので

  • DGX SparkでQwen3-Coder-Next-FP8を実行
  • opencodeで簡単なコードの編集
  • ts-benchを実行

を試してみました。

参考サイト

Qwen3-Coder-Next-FP8の実行

参考サイトに従い、spark用にカスタマイズされたvLLMのdockerを立ち上げてQwen/Qwen3-Coder-Next-FP8を立ち上げます。

# spark-vllm-dockerのビルド
git clone https://github.com/eugr/spark-vllm-docker.git
cd spark-vllm-docker
./build-and-copy.sh --use-wheels

# Qwen3-Coder-Next-FP8の実行
./launch-cluster.sh --solo \
exec vllm serve Qwen/Qwen3-Coder-Next-FP8 \
	--enable-auto-tool-choice \
	--tool-call-parser qwen3_coder \
	--gpu-memory-utilization 0.8 \
	--host 0.0.0.0 --port 8888 \
	--load-format fastsafetensors \
	--attention-backend flashinfer \
	--enable-prefix-caching

opencodeの設定

今回はWSL2のdockerコンテナ内で試します。opencodeをインストールして、以下の設定ファイルを作成します。

~/.config/opencode/opencode.jsonc
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "vllm-local": {
      "options": {
        "baseURL": "http://<DGXSparkのIPアドレス>/v1/"
      },
      "models": {
        "Qwen/Qwen3-Coder-Next-FP8": {
          "name": "Qwen3-Coder-Next-FP8",
          "limit": { "context": 262144, "output": 65536 }
        }
      }
    }
  }
}

適当なベンチマークを実行しようと思い、目についたts-benchを試します。

ts-bench実行準備

早速ベンチマークの実行方法をQwen3-Coder-Nextに聞きました。

何度かやり取りを行い、最終的にはローカルLLMに対応させるために2つのファイルを書き換えることでベンチマークが開始されました。

src/agents/builders/opencode.ts
@@ -55,15 +55,23 @@
                 return {
                     CEREBRAS_API_KEY: requireEnv('CEREBRAS_API_KEY', 'Missing CEREBRAS_API_KEY for OpenCode (Cerebras) provider')
                 };
+             case 'vllm-local':
+                 return {};
             default:
                 throw new Error(`Unsupported provider for OpenCode: ${provider}`);
         }
     }

     protected getCoreArgs(instructions: string): string[] {
-        const model = this.config.provider && !this.config.model.includes('/')
-            ? `${this.config.provider}/${this.config.model}`
-            : this.config.model;
+          let model = this.config.model;
+
+          if (this.config.provider === 'vllm-local') {
+              model = this.config.model.includes('/')
+                  ? `vllm-local/${this.config.model}`
+                  : `vllm-local/Qwen/${this.config.model}`;
+          } else if (this.config.provider && !this.config.model.includes('/')) {
+              model = `${this.config.provider}/${this.config.model}`;
+          }

         return [
             'bash',
src/config/types.ts
@@ -1,5 +1,5 @@
 export type AgentType = 'claude' | 'goose' | 'aider' | 'codex' | 'copilot' | 'gemini' | 'opencode' | 'qwen' | 'cursor' | 'vibe' | 'kimi';
-export type ProviderType = 'openai' | 'anthropic' | 'google' | 'openrouter' | 'dashscope' | 'xai' | 'deepseek' | 'github' | 'cerebras' | 'mistral' | 'moonshot';
+export type ProviderType = 'openai' | 'anthropic' | 'google' | 'openrouter' | 'dashscope' | 'xai' | 'deepseek' | 'github' | 'cerebras' | 'mistral' | 'moonshot' | 'vllm-local';

 export interface AgentResult {
     exercise: string;

ts-benchを実行

前述の通りts-bench自体のコードを書き換えているので正しくベンチマークができているか不安ですが24/25が成功になりました。

なお、この記録は2回目のベンチマークのため、キャッシュ等の影響を受けて処理時間が短くなっている可能性があります。2回目のベンチマークの際は、リポジトリのチェックアウトからやり直しを行いました。

# ベンチマークを実行
bun src/index.ts --agent opencode --model Qwen/Qwen3-Coder-Next-FP8 --provider vllm-local --save-result

# ベンチマーク結果
==================================================
📈 Benchmark Results
==================================================
🎯 Success Rate: 96.0% (24/25)
⏱️  Total Duration: 4816.8s
⏱️  Average Duration: 192.7s
🤖 Agent Success: 24
✅ Test Success: 25
❌ Test Failed: 0

📝 Detailed Results:
  ✅ acronym                   161.2s (🤖🧪)
  ✅ anagram                   29.6s (🤖🧪)
  ✅ bank-account              46.3s (🤖🧪)
  ✅ binary-search             43.2s (🤖🧪)
  ✅ binary-search-tree        41.9s (🤖🧪)
  ✅ bowling                   50.5s (🤖🧪)
  ✅ complex-numbers           42.0s (🤖🧪)
  ✅ connect                   43.1s (🤖🧪)
  ✅ crypto-square             44.5s (🤖🧪)
  ✅ diamond                   34.1s (🤖🧪)
  ✅ dnd-character             42.5s (🤖🧪)
  ✅ flatten-array             30.4s (🤖🧪)
  ✅ food-chain                40.9s (🤖🧪)
  ✅ house                     36.0s (🤖🧪)
  ✅ pascals-triangle          40.4s (🤖🧪)
  ✅ rational-numbers          50.2s (🤖🧪)
  ❌ react                     3560.7s (❌🧪)
  ✅ rectangles                43.7s (🤖🧪)
  ✅ relative-distance         37.7s (🤖🧪)
  ✅ robot-name                69.4s (🤖🧪)
  ✅ spiral-matrix             36.8s (🤖🧪)
  ✅ transpose                 43.5s (🤖🧪)
  ✅ two-bucket                115.2s (🤖🧪)
  ✅ variable-length-quantity  71.6s (🤖🧪)
  ✅ wordy                     61.7s (🤖🧪)

🔍 Errors for failed problems:
  ❌ react:
     🤖 Agent: Execution timed out after 300 seconds
💾 Results saved to: data/results/opencode-Qwen-Qwen3-Coder-Next-FP8-vllm-local-2026-02-05T05-36-11-028.json
🔗 Latest results updated: data/results/latest.json
🔄 Updating leaderboard...
🏆 Generating leaderboard from data/results/...
📁 Found 1 result files
🔄 Using 1 latest results
✅ Leaderboard generated: ./public/data/latest-results.json

所感

  • コンテキストウィンドウが圧迫していない状態での応答速度は問題ない
  • 日本語で質問しても英語で返すことがある。日本語で回答を求めても日本語の中に他の国の言葉が混ざる。(作成された日本語ドキュメントに"プロバイダー"と"プロvider"が混在するなど)
  • 商用モデルには敵わないが、簡単な調査や修正は問題なく動作する。リクエスト数や消費トークンを気にせずにとりあえず何でも聞けるのは楽
  • 今回ベンチマークを終えて、その後何度かチャットした後のメモリ使用量は約98GBでした。
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.95.05              Driver Version: 580.95.05      CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GB10                    On  |   0000000F:01:00.0 Off |                  N/A |
| N/A   34C    P0             10W /  N/A  | Not Supported          |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A          310949      C   VLLM::EngineCore                      97871MiB |
+-----------------------------------------------------------------------------------------+

Discussion