🤖
DGX SparkでQwen3-Coder-Nextを動かす
はじめに
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