Add: DGX SparkでClaude Codeをローカルモデルで動かす
All checks were successful
Deploy Docusaurus Site / deploy (push) Successful in 29s
All checks were successful
Deploy Docusaurus Site / deploy (push) Successful in 29s
This commit is contained in:
parent
fd7fe6f991
commit
6364d215c6
229
docs-tech/dgx-spark-claude-code-local/index.md
Normal file
229
docs-tech/dgx-spark-claude-code-local/index.md
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 4
|
||||||
|
title: DGX SparkでClaude Codeをローカルモデルで動かす
|
||||||
|
description: DGX Spark上でQwen3-Coder-Next-FP8をvLLM経由でClaude Codeのバックエンドとして使う方法
|
||||||
|
hide_table_of_contents: false
|
||||||
|
displayed_sidebar: null
|
||||||
|
---
|
||||||
|
|
||||||
|
# DGX SparkでClaude Codeをローカルモデルで動かす
|
||||||
|
|
||||||
|
## 概要
|
||||||
|
|
||||||
|
Claude Codeをローカルで動かすメリット:
|
||||||
|
|
||||||
|
- **プライバシー**: コードがクラウドに送信されない
|
||||||
|
- **コスト**: API料金不要
|
||||||
|
- **速度**: ネットワーク遅延なし
|
||||||
|
|
||||||
|
この記事では、DGX Spark上でQwen3-Coder-Next-FP8を使ってClaude Codeを動かす方法を解説する。
|
||||||
|
|
||||||
|
## 構成
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────┐
|
||||||
|
│ DGX Spark │
|
||||||
|
│ │
|
||||||
|
│ ┌─────────────┐ ┌──────────────────┐ │
|
||||||
|
│ │ Claude Code │───▶│ claude-code-proxy│ │
|
||||||
|
│ └─────────────┘ │ (port 8082) │ │
|
||||||
|
│ └────────┬─────────┘ │
|
||||||
|
│ │ │
|
||||||
|
│ ▼ │
|
||||||
|
│ ┌──────────────────┐ │
|
||||||
|
│ │ vLLM Server │ │
|
||||||
|
│ │ (port 8000) │ │
|
||||||
|
│ │ Qwen3-Coder-Next │ │
|
||||||
|
│ └──────────────────┘ │
|
||||||
|
└─────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**なぜプロキシが必要?**
|
||||||
|
- Claude Code → Anthropic Messages API
|
||||||
|
- vLLM → OpenAI互換API
|
||||||
|
|
||||||
|
フォーマットが異なるため、**claude-code-proxy**で変換する。
|
||||||
|
|
||||||
|
## 前提条件
|
||||||
|
|
||||||
|
- DGX Spark(128GB統合メモリ)
|
||||||
|
- Docker
|
||||||
|
- Node.js 22+
|
||||||
|
|
||||||
|
## Step 1: vLLMでQwen3-Coder-Next-FP8を起動
|
||||||
|
|
||||||
|
```bash title="vLLM起動コマンド"
|
||||||
|
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 \
|
||||||
|
--served-model-name qwen3-coder-next \
|
||||||
|
--max-model-len 32768 \
|
||||||
|
--max-num-seqs 32 \
|
||||||
|
--gpu-memory-utilization 0.85 \
|
||||||
|
--enable-auto-tool-choice \
|
||||||
|
--tool-call-parser qwen3_xml \
|
||||||
|
--trust-remote-code
|
||||||
|
```
|
||||||
|
|
||||||
|
### 重要なパラメータ
|
||||||
|
|
||||||
|
| パラメータ | 値 | 説明 |
|
||||||
|
|-----------|-----|------|
|
||||||
|
| `--served-model-name` | `qwen3-coder-next` | モデル名(`/`を含めない) |
|
||||||
|
| `--enable-auto-tool-choice` | - | Tool Calling有効化 |
|
||||||
|
| `--tool-call-parser` | `qwen3_xml` | **Qwen3専用パーサー**(重要!) |
|
||||||
|
|
||||||
|
:::danger tool-call-parserに注意
|
||||||
|
`--tool-call-parser hermes` ではなく **`qwen3_xml`** を使うこと!
|
||||||
|
hermesだとTool Callingのフォーマットが崩れてClaude Codeが止まる。
|
||||||
|
:::
|
||||||
|
|
||||||
|
### 起動確認
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# ヘルスチェック
|
||||||
|
curl http://localhost:8000/health
|
||||||
|
|
||||||
|
# モデル一覧
|
||||||
|
curl http://localhost:8000/v1/models
|
||||||
|
```
|
||||||
|
|
||||||
|
初回起動は約10分かかる(45GBのモデルをロード)。
|
||||||
|
|
||||||
|
## Step 2: claude-code-proxyをセットアップ
|
||||||
|
|
||||||
|
### インストール
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# リポジトリをクローン
|
||||||
|
git clone https://github.com/fuergaosi233/claude-code-proxy.git
|
||||||
|
cd claude-code-proxy
|
||||||
|
|
||||||
|
# 依存関係をインストール
|
||||||
|
pip install -r requirements.txt --user
|
||||||
|
```
|
||||||
|
|
||||||
|
### 設定ファイル
|
||||||
|
|
||||||
|
```bash title=".env作成"
|
||||||
|
cat > .env << 'EOF'
|
||||||
|
OPENAI_BASE_URL=http://localhost:8000/v1
|
||||||
|
OPENAI_API_KEY=dummy
|
||||||
|
BIG_MODEL=qwen3-coder-next
|
||||||
|
MIDDLE_MODEL=qwen3-coder-next
|
||||||
|
SMALL_MODEL=qwen3-coder-next
|
||||||
|
REQUEST_TIMEOUT=300
|
||||||
|
MAX_TOKENS_LIMIT=8192
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
### プロキシ起動
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python start_proxy.py
|
||||||
|
```
|
||||||
|
|
||||||
|
### 動作確認
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl http://localhost:8082/v1/messages \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-H "x-api-key: dummy" \
|
||||||
|
-d '{"model": "claude-3-5-sonnet-20241022", "max_tokens": 100, "messages": [{"role": "user", "content": "Hello"}]}'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 3: Claude Codeを起動
|
||||||
|
|
||||||
|
:::tip ANTHROPIC_AUTH_TOKEN
|
||||||
|
`ANTHROPIC_AUTH_TOKEN` は**設定しない**こと!
|
||||||
|
両方設定するとAuth conflictエラーが出る。
|
||||||
|
:::
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ANTHROPIC_BASE_URL=http://localhost:8082 \
|
||||||
|
ANTHROPIC_API_KEY=dummy \
|
||||||
|
claude
|
||||||
|
```
|
||||||
|
|
||||||
|
### シェル設定に追加(推奨)
|
||||||
|
|
||||||
|
```bash title="~/.bashrc"
|
||||||
|
alias claude-local='ANTHROPIC_BASE_URL=http://localhost:8082 ANTHROPIC_API_KEY=dummy claude'
|
||||||
|
```
|
||||||
|
|
||||||
|
## パフォーマンス
|
||||||
|
|
||||||
|
| 項目 | 値 |
|
||||||
|
|------|-----|
|
||||||
|
| プロンプト処理 | ~1900 tokens/s |
|
||||||
|
| 生成速度 | ~6 tokens/s |
|
||||||
|
| メモリ使用量 | ~84GB / 119GB |
|
||||||
|
| KVキャッシュ | 26GB(32Kコンテキスト) |
|
||||||
|
|
||||||
|
### 動作確認済み機能
|
||||||
|
|
||||||
|
- ✅ チャット応答
|
||||||
|
- ✅ ストリーミング
|
||||||
|
- ✅ Tool Calling(Bash実行、ファイル操作)
|
||||||
|
- ✅ 日本語対応
|
||||||
|
|
||||||
|
## トラブルシューティング
|
||||||
|
|
||||||
|
### Tool Callingで止まる
|
||||||
|
|
||||||
|
**原因:** `--tool-call-parser` の設定が間違っている
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# ❌ 間違い
|
||||||
|
--tool-call-parser hermes
|
||||||
|
|
||||||
|
# ✅ 正解
|
||||||
|
--tool-call-parser qwen3_xml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Auth conflict エラー
|
||||||
|
|
||||||
|
```
|
||||||
|
Auth conflict: Both a token (ANTHROPIC_AUTH_TOKEN) and an API key (ANTHROPIC_API_KEY) are set.
|
||||||
|
```
|
||||||
|
|
||||||
|
**対処:**
|
||||||
|
```bash
|
||||||
|
unset ANTHROPIC_AUTH_TOKEN
|
||||||
|
```
|
||||||
|
|
||||||
|
### 文字化け
|
||||||
|
|
||||||
|
```bash
|
||||||
|
LANG=en_US.UTF-8 claude
|
||||||
|
```
|
||||||
|
|
||||||
|
### vLLMが404を返す
|
||||||
|
|
||||||
|
vLLMはAnthropic API未実装のため、claude-code-proxyを使う。
|
||||||
|
|
||||||
|
## まとめ
|
||||||
|
|
||||||
|
DGX SparkでClaude Codeをローカルモデルで動かすポイント:
|
||||||
|
|
||||||
|
1. **vLLM** + **Qwen3-Coder-Next-FP8**を起動
|
||||||
|
2. **`--tool-call-parser qwen3_xml`** を使う(重要!)
|
||||||
|
3. **claude-code-proxy**でAPI変換
|
||||||
|
4. **`ANTHROPIC_AUTH_TOKEN`は設定しない**
|
||||||
|
|
||||||
|
これでプライベートなコーディング環境の完成!🎉
|
||||||
|
|
||||||
|
## 参考リンク
|
||||||
|
|
||||||
|
- [vLLM Claude Code統合](https://docs.vllm.ai/en/latest/serving/integrations/claude_code/)
|
||||||
|
- [vLLM Tool Calling](https://docs.vllm.ai/en/latest/features/tool_calling/)
|
||||||
|
- [claude-code-proxy](https://github.com/fuergaosi233/claude-code-proxy)
|
||||||
|
- [Qwen3-Coder-Next-FP8](https://huggingface.co/Qwen/Qwen3-Coder-Next-FP8)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*この記事は2026年2月時点の情報です。*
|
||||||
@ -10,6 +10,7 @@ slug: /
|
|||||||
|
|
||||||
## DGX Spark
|
## DGX Spark
|
||||||
|
|
||||||
|
- [Claude Codeをローカルモデルで動かす](/tech/dgx-spark-claude-code-local) - vLLM + Qwen3で完全ローカル環境
|
||||||
- [Qwen3-Coder-Next(80B MoE)を動かす](/tech/dgx-spark-qwen3-coder-next) - FP8量子化で単体起動
|
- [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モデルを動かす
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user