Update: Claude Code記事をnote向けにリライト
All checks were successful
Deploy Docusaurus Site / deploy (push) Successful in 28s
All checks were successful
Deploy Docusaurus Site / deploy (push) Successful in 28s
This commit is contained in:
parent
b26e569873
commit
b9fceb0517
@ -1,58 +1,124 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 4
|
sidebar_position: 4
|
||||||
title: DGX SparkでClaude Code + Qwen3-Coder-Nextをローカル実行する
|
title: DGX SparkでClaude Code + Qwen3-Coder-Nextをローカル実行する
|
||||||
description: DGX Spark上でQwen3-Coder-Next-FP8をvLLM経由でClaude Codeのバックエンドとして使う方法(200Kコンテキスト対応)
|
description: Claude Codeを完全ローカル化!Qwen3-Coder-Next(80B MoE)で動かす方法を解説
|
||||||
hide_table_of_contents: false
|
hide_table_of_contents: false
|
||||||
displayed_sidebar: null
|
displayed_sidebar: null
|
||||||
---
|
---
|
||||||
|
|
||||||
# DGX SparkでClaude Code + Qwen3-Coder-Nextをローカル実行する
|
# DGX SparkでClaude Codeを完全ローカル化!Qwen3-Coder-Nextで動かしてみた
|
||||||
|
|
||||||
## 概要
|
## はじめに
|
||||||
|
|
||||||
Claude Codeをローカルで動かすメリット:
|
**Claude Code**、使ってますか?
|
||||||
|
|
||||||
- **プライバシー**: コードがクラウドに送信されない
|
Anthropic公式のターミナルベースAIコーディングアシスタント。ファイルを読んで、コードを書いて、コマンドを実行して...まるで優秀なペアプログラマーがそばにいるような体験ができます。
|
||||||
- **コスト**: API料金不要
|
|
||||||
- **速度**: ネットワーク遅延なし
|
|
||||||
|
|
||||||
この記事では、DGX Spark上でQwen3-Coder-Next-FP8を使ってClaude Codeを動かす方法を解説する。
|
ただ、1つ気になることが。
|
||||||
|
|
||||||
## ワンライナーセットアップ
|
**「自分のコード、全部クラウドに送ってるんだよな...」**
|
||||||
|
|
||||||
|
企業の機密コードや、個人的なプロジェクトを扱うとき、ちょっと気になりませんか?
|
||||||
|
|
||||||
|
そこで今回は、**Claude Codeを完全ローカルで動かす**方法を紹介します。
|
||||||
|
|
||||||
|
## 何ができるようになるの?
|
||||||
|
|
||||||
|
- ✅ **プライバシー保護** - コードがクラウドに送られない
|
||||||
|
- ✅ **API料金ゼロ** - 月額課金から解放
|
||||||
|
- ✅ **200Kトークン対応** - 大規模なコードベースも一度に読める
|
||||||
|
- ✅ **オフライン動作** - ネット環境がなくてもOK
|
||||||
|
|
||||||
|
## 必要なもの
|
||||||
|
|
||||||
|
今回使うのは **NVIDIA DGX Spark**。
|
||||||
|
|
||||||
|
:::note
|
||||||
|
同じ手順は他のNVIDIA GPU搭載マシンでも応用できます(VRAMは多めに必要)。
|
||||||
|
:::
|
||||||
|
|
||||||
|
### DGX Sparkとは?
|
||||||
|
|
||||||
|
NVIDIAの「デスクトップAIワークステーション」です。
|
||||||
|
|
||||||
|
| スペック | 値 |
|
||||||
|
|---------|-----|
|
||||||
|
| GPU | NVIDIA GB10(Blackwell世代) |
|
||||||
|
| メモリ | **128GB統合メモリ** |
|
||||||
|
| サイズ | Mac Studioくらい |
|
||||||
|
| 価格 | 約50万円〜 |
|
||||||
|
|
||||||
|
128GBの統合メモリがポイント。普通のGPUだとVRAM 24GBとかですが、DGX Sparkは128GB全部をモデルに使えます。
|
||||||
|
|
||||||
|
## 構成図
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────┐
|
||||||
|
│ あなたのPC / DGX Spark │
|
||||||
|
│ │
|
||||||
|
│ ┌─────────────┐ │
|
||||||
|
│ │ Claude Code │ ← いつものClaude Code │
|
||||||
|
│ │ (Terminal) │ │
|
||||||
|
│ └──────┬──────┘ │
|
||||||
|
│ │ Anthropic API形式 │
|
||||||
|
│ ▼ │
|
||||||
|
│ ┌──────────────────┐ │
|
||||||
|
│ │ claude-code-proxy│ ← API形式を変換 │
|
||||||
|
│ │ (port 8082) │ │
|
||||||
|
│ └────────┬─────────┘ │
|
||||||
|
│ │ OpenAI API形式 │
|
||||||
|
│ ▼ │
|
||||||
|
│ ┌──────────────────┐ │
|
||||||
|
│ │ vLLM │ ← 推論エンジン │
|
||||||
|
│ │ (port 8000) │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ ┌──────────────┐ │ │
|
||||||
|
│ │ │Qwen3-Coder- │ │ ← 80Bパラメータの │
|
||||||
|
│ │ │ Next-FP8 │ │ コーディングモデル │
|
||||||
|
│ │ └──────────────┘ │ │
|
||||||
|
│ └──────────────────┘ │
|
||||||
|
└─────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### なぜプロキシが必要?
|
||||||
|
|
||||||
|
Claude CodeはAnthropic独自のAPI形式を使います。一方、vLLMはOpenAI互換API。
|
||||||
|
|
||||||
|
この2つを繋ぐために **claude-code-proxy** を間に挟みます。
|
||||||
|
|
||||||
|
## 使用するモデル:Qwen3-Coder-Next
|
||||||
|
|
||||||
|
今回使うのは **Qwen3-Coder-Next-FP8**。
|
||||||
|
|
||||||
|
| 項目 | 値 |
|
||||||
|
|------|-----|
|
||||||
|
| 開発 | Alibaba Cloud |
|
||||||
|
| パラメータ | 80B(総数)/ 3B(推論時アクティブ) |
|
||||||
|
| アーキテクチャ | MoE(Mixture of Experts) |
|
||||||
|
| 最大コンテキスト | 1Mトークン |
|
||||||
|
| 特徴 | コーディング特化 |
|
||||||
|
|
||||||
|
**MoE(Mixture of Experts)** がポイント。80Bパラメータでも、推論時は3Bしか使わないので高速です。
|
||||||
|
|
||||||
|
FP8量子化版を使うことで、メモリ使用量は約45GB。DGX Sparkの128GBなら余裕です。
|
||||||
|
|
||||||
|
## ワンライナーで全自動セットアップ
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -sL https://docs.techswan.online/scripts/dgx-spark-claude-code.sh | bash
|
curl -sL https://docs.techswan.online/scripts/dgx-spark-claude-code.sh | bash
|
||||||
```
|
```
|
||||||
|
|
||||||
:::tip
|
これだけ!約10分待つと環境が整います。
|
||||||
初回はモデルロードに約10分かかる。スクリプトは完了まで待機する。
|
|
||||||
:::
|
|
||||||
|
|
||||||
## 構成
|
以下は手動でやりたい人向けの解説です。
|
||||||
|
|
||||||
```
|
---
|
||||||
┌─────────────────────────────────────────────────────┐
|
|
||||||
│ DGX Spark │
|
|
||||||
│ │
|
|
||||||
│ ┌─────────────┐ ┌──────────────────┐ │
|
|
||||||
│ │ Claude Code │───▶│ claude-code-proxy│ │
|
|
||||||
│ └─────────────┘ │ (port 8082) │ │
|
|
||||||
│ └────────┬─────────┘ │
|
|
||||||
│ │ │
|
|
||||||
│ ▼ │
|
|
||||||
│ ┌──────────────────┐ │
|
|
||||||
│ │ vLLM Server │ │
|
|
||||||
│ │ (port 8000) │ │
|
|
||||||
│ │ Qwen3-Coder-Next │ │
|
|
||||||
│ └──────────────────┘ │
|
|
||||||
└─────────────────────────────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
## 手動セットアップ
|
## 手動セットアップ
|
||||||
|
|
||||||
### Step 1: vLLMでQwen3-Coder-Next-FP8を起動
|
### Step 1: vLLMでモデルを起動
|
||||||
|
|
||||||
```bash title="vLLM起動(200Kコンテキスト)"
|
```bash title="vLLM起動コマンド"
|
||||||
docker run -d --name qwen3-coder-next-fp8 \
|
docker run -d --name qwen3-coder-next-fp8 \
|
||||||
--gpus all \
|
--gpus all \
|
||||||
-p 8000:8000 \
|
-p 8000:8000 \
|
||||||
@ -69,28 +135,31 @@ docker run -d --name qwen3-coder-next-fp8 \
|
|||||||
--trust-remote-code
|
--trust-remote-code
|
||||||
```
|
```
|
||||||
|
|
||||||
### 重要なパラメータ
|
#### 重要なポイント
|
||||||
|
|
||||||
| パラメータ | 値 | 説明 |
|
| オプション | 値 | 説明 |
|
||||||
|-----------|-----|------|
|
|-----------|-----|------|
|
||||||
| `--max-model-len` | `200000` | 200Kコンテキスト |
|
| `--max-model-len` | 200000 | 200Kトークンまで対応 |
|
||||||
| `--max-num-seqs` | `8` | 同時リクエスト数(メモリ節約) |
|
| `--max-num-seqs` | 8 | 同時リクエスト数(メモリ節約) |
|
||||||
| `--tool-call-parser` | `qwen3_xml` | **Qwen3専用パーサー** |
|
| `--tool-call-parser` | **qwen3_xml** | ⚠️ これ超重要! |
|
||||||
|
|
||||||
:::danger tool-call-parserに注意
|
:::danger tool-call-parserに注意
|
||||||
`--tool-call-parser hermes` ではなく **`qwen3_xml`** を使うこと!
|
`--tool-call-parser` を間違えると、Claude Codeのファイル操作やコマンド実行が動きません。**必ず `qwen3_xml`** を指定してください。
|
||||||
hermesだとTool Callingのフォーマットが崩れてClaude Codeが止まる。
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### Step 2: claude-code-proxyをセットアップ
|
初回起動は約10分かかります(45GBのモデルをダウンロード&ロード)。
|
||||||
|
|
||||||
|
### Step 2: claude-code-proxyを起動
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# クローン
|
||||||
git clone https://github.com/fuergaosi233/claude-code-proxy.git
|
git clone https://github.com/fuergaosi233/claude-code-proxy.git
|
||||||
cd claude-code-proxy
|
cd claude-code-proxy
|
||||||
pip install -r requirements.txt --user
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash title=".env作成"
|
# 依存関係インストール
|
||||||
|
pip install -r requirements.txt --user
|
||||||
|
|
||||||
|
# 設定ファイル作成
|
||||||
cat > .env << 'EOF'
|
cat > .env << 'EOF'
|
||||||
OPENAI_BASE_URL=http://localhost:8000/v1
|
OPENAI_BASE_URL=http://localhost:8000/v1
|
||||||
OPENAI_API_KEY=dummy
|
OPENAI_API_KEY=dummy
|
||||||
@ -100,9 +169,8 @@ SMALL_MODEL=qwen3-coder-next
|
|||||||
REQUEST_TIMEOUT=300
|
REQUEST_TIMEOUT=300
|
||||||
MAX_TOKENS_LIMIT=8192
|
MAX_TOKENS_LIMIT=8192
|
||||||
EOF
|
EOF
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
# 起動
|
||||||
python start_proxy.py
|
python start_proxy.py
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -114,59 +182,74 @@ ANTHROPIC_API_KEY=dummy \
|
|||||||
claude
|
claude
|
||||||
```
|
```
|
||||||
|
|
||||||
:::tip ANTHROPIC_AUTH_TOKEN
|
:::warning ANTHROPIC_AUTH_TOKEN
|
||||||
`ANTHROPIC_AUTH_TOKEN` は**設定しない**こと!両方設定するとAuth conflictエラーが出る。
|
`ANTHROPIC_AUTH_TOKEN` は設定しないでください。両方設定するとエラーになります。
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### シェル設定に追加(推奨)
|
### 便利なエイリアス設定
|
||||||
|
|
||||||
```bash title="~/.bashrc"
|
```bash title="~/.bashrc に追加"
|
||||||
alias claude-local='ANTHROPIC_BASE_URL=http://localhost:8082 ANTHROPIC_API_KEY=dummy claude'
|
alias claude-local='ANTHROPIC_BASE_URL=http://localhost:8082 ANTHROPIC_API_KEY=dummy claude'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
これで `claude-local` と打つだけでOK!
|
||||||
|
|
||||||
## パフォーマンス
|
## パフォーマンス
|
||||||
|
|
||||||
| 項目 | 値 |
|
| 項目 | 値 |
|
||||||
|------|-----|
|
|------|-----|
|
||||||
| プロンプト処理 | ~2300 tokens/s |
|
| プロンプト処理 | ~2300 tokens/秒 |
|
||||||
| 生成速度 | ~20-30 tokens/s |
|
| 生成速度 | ~20-30 tokens/秒 |
|
||||||
| メモリ使用量 | ~84GB / 119GB |
|
| 最大コンテキスト | 200K tokens |
|
||||||
| 最大コンテキスト | **200K tokens** |
|
| メモリ使用量 | 約84GB |
|
||||||
| 同時リクエスト | 8 |
|
|
||||||
|
|
||||||
## トラブルシューティング
|
Anthropic APIに比べると生成速度は遅めですが、ローカルで完結する安心感は大きいです。
|
||||||
|
|
||||||
### Tool Callingで止まる
|
## ハマったポイント
|
||||||
|
|
||||||
```bash
|
### 1. Tool Callingで止まる
|
||||||
# ❌ 間違い
|
|
||||||
--tool-call-parser hermes
|
|
||||||
|
|
||||||
# ✅ 正解
|
最初、ファイル操作しようとすると固まりました。
|
||||||
--tool-call-parser qwen3_xml
|
|
||||||
|
**原因**: `--tool-call-parser hermes` を使っていた
|
||||||
|
|
||||||
|
**解決**: `--tool-call-parser qwen3_xml` に変更
|
||||||
|
|
||||||
|
Qwen3系モデルは独自のTool Callingフォーマットを使うので、専用のパーサーが必要です。
|
||||||
|
|
||||||
|
### 2. Auth conflictエラー
|
||||||
|
|
||||||
|
```
|
||||||
|
Auth conflict: Both a token (ANTHROPIC_AUTH_TOKEN) and an API key (ANTHROPIC_API_KEY) are set.
|
||||||
```
|
```
|
||||||
|
|
||||||
### Auth conflict エラー
|
**解決**: `ANTHROPIC_AUTH_TOKEN` を設定しない(または `unset ANTHROPIC_AUTH_TOKEN`)
|
||||||
|
|
||||||
```bash
|
### 3. max_tokensエラー
|
||||||
unset ANTHROPIC_AUTH_TOKEN
|
|
||||||
```
|
|
||||||
|
|
||||||
### max_tokens エラー
|
入力が長すぎると、出力用のトークン枠がなくなってエラーに。
|
||||||
|
|
||||||
入力が長すぎて出力枠がない場合、プロキシの `MAX_TOKENS_LIMIT` を下げる。
|
**解決**: vLLMの `--max-model-len` を増やす(今回は200Kに設定)
|
||||||
|
|
||||||
## まとめ
|
## まとめ
|
||||||
|
|
||||||
1. **vLLM** + **Qwen3-Coder-Next-FP8**を起動(200K対応)
|
DGX SparkでClaude Codeをローカル化できました!
|
||||||
2. **`--tool-call-parser qwen3_xml`** を使う
|
|
||||||
3. **claude-code-proxy**でAPI変換
|
**ポイントまとめ**:
|
||||||
4. **`ANTHROPIC_AUTH_TOKEN`は設定しない**
|
|
||||||
|
1. **vLLM + Qwen3-Coder-Next-FP8** でモデルを動かす
|
||||||
|
2. **claude-code-proxy** でAPI形式を変換
|
||||||
|
3. `--tool-call-parser qwen3_xml` を忘れずに!
|
||||||
|
4. `ANTHROPIC_AUTH_TOKEN` は設定しない
|
||||||
|
|
||||||
|
完全ローカルでClaude Codeが動く喜び、ぜひ体験してみてください。
|
||||||
|
|
||||||
## 参考リンク
|
## 参考リンク
|
||||||
|
|
||||||
- [vLLM Claude Code統合](https://docs.vllm.ai/en/latest/serving/integrations/claude_code/)
|
- [vLLM公式ドキュメント](https://docs.vllm.ai/)
|
||||||
- [claude-code-proxy](https://github.com/fuergaosi233/claude-code-proxy)
|
- [claude-code-proxy](https://github.com/fuergaosi233/claude-code-proxy)
|
||||||
|
- [Qwen3-Coder-Next-FP8(Hugging Face)](https://huggingface.co/Qwen/Qwen3-Coder-Next-FP8)
|
||||||
|
- [DGX Spark Playbooks](https://build.nvidia.com/spark/)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user