# DGX Spark 大模型部署全记录
> **硬件:** NVIDIA DGX Spark (GB10 Grace Blackwell, 121 GB 统一内存)
> **操作系统:** Ubuntu 24.04.4 LTS
> **CUDA:** 13.0.3 | **驱动:** 580.159.03
> **日期:** 2026-07-18 ~ 2026-07-19
---
## 目录
1. [环境准备](#1-环境准备)
2. [Qwen3.6-27B 稠密模型](#2-qwen36-27b-稠密模型)
3. [Qwen3.5-35B-A3B MoE 模型](#3-qwen35-35b-a3b-moe-模型)
4. [llama.cpp + DFlash 推测解码](#4-llamacpp--dflash-推测解码)
5. [DeepSeek V4 Flash (ds4)](#5-deepseek-v4-flash-ds4)
6. [各模型对比](#6-各模型对比)
7. [OpenClaw 配置](#7-openclaw-配置)
---
## 1. 环境准备
### 1.1 SSH 连接
```bash
# 使用 NVIDIA Sync 密钥
ssh -i "C:\Users\zyq\AppData\Local\NVIDIA Corporation\Sync\config\nvsync.key" zyq@192.168.31.33
# 或密码认证
ssh zyq@192.168.31.33
```
### 1.2 Python 虚拟环境
```bash
# 路径: ~/llm_env
source ~/llm_env/bin/activate
```
### 1.3 核心依赖版本
| 包 | 版本 |
|---|------|
| Python | 3.12.3 |
| PyTorch | 2.11.0+cu128 |
| vLLM | 0.25.1 |
| transformers | 5.14.1 |
| CUDA | 13.0.3 |
---
## 2. Qwen3.6-27B 稠密模型
### 2.1 模型信息
| 项目 | 内容 |
|------|------|
| **路径** | `~/Qwen3.6-27B-DSV4Pro-Thinking-Distill-NVFP4/` |
| **参数量** | 26.9B (稠密, 全部激活) |
| **架构** | Qwen3_5ForConditionalGeneration |
| **量化格式** | NVFP4 / FP8 / GGUF (多格式) |
| **总大小** | 272 GB (含所有量化版本) |
### 2.2 启动命令
#### NVFP4 版本(基线)
```bash
vllm serve ~/Qwen3.6-27B-DSV4Pro-Thinking-Distill-NVFP4/nvfp4/ \
--port 8000 --host 0.0.0.0 \
--max-model-len 65536 \
--gpu-memory-utilization 0.85 \
--trust-remote-code --dtype auto
```
#### FP8 版本(最优)
```bash
vllm serve ~/Qwen3.6-27B-DSV4Pro-Thinking-Distill-NVFP4/fp8/ \
--port 8000 --host 0.0.0.0 \
--max-model-len 65536 \
--gpu-memory-utilization 0.90 \
--trust-remote-code --dtype auto \
--quantization fp8 \
--enable-auto-tool-choice \
--tool-call-parser qwen3_xml \
--max-num-seqs 64 \
--max-num-batched-tokens 8192
```
### 2.3 优化尝试
| 方案 | 速度 | 结论 |
|-----|------|------|
| MTP-5 (推测解码) | 5.6 tok/s | ❌ 降速 |
| MTP-3 | 6.2 tok/s | ❌ 降速 |
| FlashInfer + MTP-2 | 5.5 tok/s | ❌ 降速 |
| ngram 推测解码 | 3.0 tok/s | ❌ 降速 |
| DFlash | ❌ 需要 draft model | 不适用 |
### 2.4 速度结果
| 量化 | 速度 |
|-----|------|
| NVFP4 (基线) | 6.8 tok/s |
| **FP8 (最优)** | **7.8 tok/s** |
---
## 3. Qwen3.5-35B-A3B MoE 模型
### 3.1 模型信息
| 项目 | 内容 |
|------|------|
| **路径** | `~/Qwen3.5-35B-A3B-FP8/` |
| **参数量** | 35B 总参数 / 3B 激活 (MoE) |
| **架构** | Qwen3_5MoeForConditionalGeneration |
| **量化** | FP8 (官方) |
| **大小** | 35 GB |
### 3.2 启动命令
```bash
vllm serve ~/Qwen3.5-35B-A3B-FP8/ \
--port 8000 --host 0.0.0.0 \
--max-model-len 131072 \
--gpu-memory-utilization 0.88 \
--trust-remote-code --dtype auto \
--enable-auto-tool-choice \
--tool-call-parser qwen3_coder \
--reasoning-parser qwen3 \
--enable-prefix-caching \
--max-num-seqs 64 \
--max-num-batched-tokens 8192 \
--limit-mm-per-prompt '{"image": 0, "video": 0}'
```
### 3.3 关键参数说明
| 参数 | 值 | 说明 |
|-----|-----|------|
| `tool-call-parser` | `qwen3_coder` | Qwen3 系列专用工具解析器 |
| `reasoning-parser` | `qwen3` | 解析 thinking 推理标签 |
| `enable-prefix-caching` | - | 多轮对话加速 |
| `limit-mm-per-prompt` | `{"image":0,"video":0}` | 跳过多模态 profiling,加速启动 |
### 3.4 速度结果
| 模式 | 速度 |
|-----|------|
| no_think | **46.5 tok/s** |
| think | 46.7 tok/s |
| 262K 上下文 | 45.2 tok/s |
---
## 4. llama.cpp + DFlash 推测解码
### 4.1 编译安装
```bash
# 克隆主线 llama.cpp
git clone --depth 1 https://github.com/ggerganov/llama.cpp.git ~/llama.cpp
# 编译 CUDA 版本
cd ~/llama.cpp
export CUDACXX=/usr/local/cuda-13.0/bin/nvcc
cmake -B build -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES="120;121" \
-DGGML_NATIVE=OFF -DLLAMA_CUDA_F16=ON
cmake --build build --config Release -j$(nproc)
```
### 4.2 启动命令(27B GGUF + DFlash)
```bash
# 使用 Q4_K_M GGUF(16.8 GB)
~/llama.cpp/build/bin/llama-server \
-m ~/Qwen3.6-27B-DSV4Pro-Thinking-Distill-NVFP4/gguf/Qwen3.6-27B-DSV4Pro-Distill-MTP-Q4_K_M-imatrix.gguf \
--host 0.0.0.0 --port 8000 \
-ngl 99 -c 65536 \
--cont-batching --parallel 1 \
--spec-draft-p-min 0.3 \
--spec-draft-n-max 14
```
### 4.3 速度结果
| 量化 | 速度 |
|-----|------|
| Q4_K_M (16.8 GB) | 12.1 tok/s |
| IQ4_XS (15.3 GB) | 待测 |
---
## 5. DeepSeek V4 Flash (ds4)
### 5.1 编译安装
```bash
# 克隆 antirez/ds4 仓库
git clone https://github.com/antirez/ds4.git ~/src-repo/ds4
cd ~/src-repo/ds4
# 编译 CUDA Spark 版本
export CUDACXX=/usr/local/cuda-13.0/bin/nvcc
make cuda-spark -j$(nproc)
```
### 5.2 下载模型
```bash
# 方法一:HF 镜像(速度慢)
cd ~/src-repo/ds4
./download_model.sh q2-imatrix
./download_model.sh mtp
# 方法二:从 ModelScope 下载(推荐)
modelscope download --model hf/antirez-deepseek-v4-gguf --local-dir ~/src-repo/ds4/gguf
```
**已验证哈希:**
| 文件 | 大小 | 哈希 |
|-----|------|------|
| q2-imatrix 主模型 | 81 GB | `efc7ed60...` |
| MTP 模块 | 3.6 GB | `afd481ee...` |
### 5.3 启动命令
```bash
cd ~/src-repo/ds4
nohup ./ds4-server --cuda \
-m gguf/DeepSeek-V4-Flash-IQ2XXS-w2Q2K-AProjQ8-SExpQ8-OutQ8-chat-v2-imatrix.gguf \
--ctx 100000 \
--mtp gguf/DeepSeek-V4-Flash-MTP-Q4K-Q8_0-F32.gguf \
--host 0.0.0.0 --port 8000 \
> logs/ds4-server.log 2>&1 < /dev/null &
```
### 5.4 启动脚本
```bash
#!/usr/bin/env bash
# ~/ds4-server-cuda.sh
set -euo pipefail
DS4_DIR="${DS4_DIR:-$HOME/src-repo/ds4}"
HOST="${DS4_HOST:-0.0.0.0}"
PORT="${DS4_PORT:-8000}"
CTX="${DS4_CTX:-100000}"
KV_DIR="${DS4_KV_DIR:-$HOME/.cache/ds4-kv}"
KV_MB="${DS4_KV_MB:-8192}"
MODEL="${DS4_MODEL:-$DS4_DIR/gguf/DeepSeek-V4-Flash-IQ2XXS-w2Q2K-AProjQ8-SExpQ8-OutQ8-chat-v2-imatrix.gguf}"
MTP="${DS4_MTP:-$DS4_DIR/gguf/DeepSeek-V4-Flash-MTP-Q4K-Q8_0-F32.gguf}"
mkdir -p "$KV_DIR"
cd "$DS4_DIR"
args=(./ds4-server --cuda -m "$MODEL" --ctx "$CTX" --kv-disk-dir "$KV_DIR" --kv-disk-space-mb "$KV_MB" --host "$HOST" --port "$PORT")
if [[ -s "$MTP" ]]; then args+=(--mtp "$MTP"); fi
exec "${args[@]}" "$@"
```
### 5.5 速度结果
| 上下文 | 速度 |
|-------|------|
| 100K (优化前) | 15.0 tok/s |
| 32K (优化后) | 15.1 tok/s |
| **100K (当前)** | **15.5 tok/s** |
### 5.6 性能指标
| 指标 | 数值 |
|------|------|
| 生成速度 (Decode) | ~13.9 tok/s |
| 预填充速度 (Prefill) | ~400 tok/s |
| 模型加载时间 | ~12 秒 |
| 内存占用 | 110 GB / 121 GB |
| 支持模型 ID | `deepseek-v4-flash`, `deepseek-chat`, `deepseek-v4-pro` |
---
## 6. 各模型对比
### 6.1 速度对比
| 模型 | 框架 | 速度 | 相对基线 | 模型大小 | 上下文 |
|-----|------|------|---------|---------|-------|
| **Qwen3.5-35B-A3B (MoE)** 🥇 | **vLLM** | **45.2 tok/s** | **+664%** | 35 GB | 131K |
| DeepSeek V4 Flash | ds4 | 15.5 tok/s | +162% | 81 GB | 100K |
| 27B GGUF Q4_K_M + DFlash | llama.cpp | 12.1 tok/s | +105% | 17 GB | 65K |
| 27B FP8 (优化) | vLLM | 7.8 tok/s | +32% | 29 GB | 65K |
| 27B NVFP4 (基线) | vLLM | 6.8 tok/s | - | 28 GB | 65K |
### 6.2 能力对比
| 维度 | 35B MoE | DeepSeek V4 | 27B GGUF |
|-----|---------|-------------|----------|
| **速度** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| **模型能力** | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| **上下文长度** | 131K | 100K | 65K |
| **工具调用** | ✅ qwen3_coder | ✅ 原生 DSML | ✅ 通用 |
| **部署复杂度** | ⭐⭐⭐⭐⭐ (简单) | ⭐⭐⭐ (需编译) | ⭐⭐⭐ (需编译) |
| **启动速度** | ~3 分钟 | ~12 秒 | ~10 秒 |
| **内存占用** | 88 GB | 110 GB | 35 GB |
### 6.3 选型建议
| 场景 | 推荐模型 | 理由 |
|------|---------|------|
| **日常编码/对话** 🥇 | 35B MoE (vLLM) | 速度最快,45 tok/s |
| **复杂推理/长文本** | DeepSeek V4 (ds4) | 能力最强,100K 上下文 |
| **轻量快速任务** | 27B GGUF (llama.cpp) | 内存占用低 |
| **Agent 工作流** | 35B MoE 或 ds4 | 都支持 tool calling |
### 6.4 当前服务状态
```bash
# 当前运行: DeepSeek V4 Flash (ds4)
API: http://192.168.31.33:8000/v1
模型: deepseek-v4-flash / deepseek-chat
速度: 15.5 tok/s
上下文: 100,000 tokens
```
---
## 7. OpenClaw 配置
### 7.1 Provider 配置
```json
{
"ds4": {
"baseUrl": "http://192.168.31.33:8000/v1",
"api": "openai-completions",
"apiKey": "not-needed",
"models": [
{"id": "deepseek-v4-flash", "name": "DeepSeek V4 Flash"}
]
},
"dgx-spark": {
"baseUrl": "http://192.168.31.33:8000/v1",
"api": "openai-completions",
"apiKey": "not-needed",
"models": [
{"id": "/home/zyq/Qwen3.5-35B-A3B-FP8/", "name": "Qwen3.5-35B-A3B-FP8"}
]
}
}
```
### 7.2 认证配置
```json
{
"auth": {
"profiles": {
"ds4:default": {"provider": "ds4", "mode": "api_key"},
"dgx-spark:default": {"provider": "dgx-spark", "mode": "api_key"}
}
}
}
```
### 7.3 切换模型
要切换不同模型,只需停止当前服务,启动另一个:
```bash
# 切换到 35B MoE (45 tok/s)
source ~/llm_env/bin/activate
pkill -f ds4-server
nohup vllm serve ~/Qwen3.5-35B-A3B-FP8/ \
--port 8000 --host 0.0.0.0 \
--max-model-len 131072 \
--gpu-memory-utilization 0.88 \
--trust-remote-code --dtype auto \
--enable-auto-tool-choice \
--tool-call-parser qwen3_coder \
--reasoning-parser qwen3 \
--enable-prefix-caching \
--max-num-seqs 64 \
--max-num-batched-tokens 8192 \
--limit-mm-per-prompt '{"image":0,"video":0}'
# 切换回 ds4 (15.5 tok/s)
pkill -f vllm
cd ~/src-repo/ds4
nohup ./ds4-server --cuda \
-m gguf/DeepSeek-V4-Flash-IQ2XXS-w2Q2K-AProjQ8-SExpQ8-OutQ8-chat-v2-imatrix.gguf \
--ctx 100000 --mtp gguf/DeepSeek-V4-Flash-MTP-Q4K-Q8_0-F32.gguf \
--host 0.0.0.0 --port 8000 \
> logs/ds4-server.log 2>&1 < /dev/null &
```
---
## 附录:优化历程
### 尝试过的所有方案
| # | 方案 | 速度 | 结论 |
|---|-----|------|------|
| 1 | 27B NVFP4 (vLLM 基线) | 6.8 tok/s | 基线 |
| 2 | 27B NVFP4 + MTP-5 | 5.6 tok/s | ❌ |
| 3 | 27B NVFP4 + MTP-3 | 6.2 tok/s | ❌ |
| 4 | 27B NVFP4 + FlashInfer + MTP-2 | 5.5 tok/s | ❌ |
| 5 | 27B NVFP4 + ngram | 3.0 tok/s | ❌ |
| 6 | 27B FP8 + 优化参数 | 7.8 tok/s | ✅ 27B 最优 |
| 7 | 35B MoE FP8 (vLLM) | 45.2 tok/s | 🥇 全场最快 |
| 8 | 27B GGUF Q4_K_M + DFlash | 12.1 tok/s | ✅ llama.cpp |
| 9 | DeepSeek V4 Flash (ds4) | 15.5 tok/s | ✅ 能力最强 |
| 10 | llama.cpp-dgx (croll83 分支) | 编译失败 | ❌ SM121 模板缺失 |
| 11 | 35B MoE → GGUF 转换 | 转换后崩溃 | ❌ FP8 兼容问题 |
| 12 | GLM-4.7-Flash-NVFP4 | 下载失败 | ❌ 模型不存在 |
浙公网安备 33010602011771号