DeepSeek V3.2 使用指南#

DeepSeek-V3.2-Exp 通过持续训练,为 DeepSeek-V3.1-Terminus 配备了 DeepSeek 稀疏注意力 (DSA)。通过 DSA(一种由闪电式索引器支持的细粒度稀疏注意力机制),DeepSeek-V3.2 在长上下文场景中实现了效率提升。

如需报告问题或跟踪即将推出的功能,请参考此路线图

安装#

Docker#

# H200/B200
docker pull lmsysorg/sglang:latest

# MI350/MI355
docker pull lmsysorg/sglang:dsv32-rocm

# NPUs
docker pull lmsysorg/sglang:dsv32-a2
docker pull lmsysorg/sglang:dsv32-a3

从源代码构建#

# 安装 SGLang
git clone https://github.com/sgl-project/sglang
cd sglang
pip3 install pip --upgrade
pip3 install -e "python"

使用 SGLang 启动 DeepSeek V3.2#

要在 8xH200/B200 GPU 上服务 DeepSeek-V3.2-Exp:

# 使用 TP + DP 启动
python -m sglang.launch_server --model deepseek-ai/DeepSeek-V3.2-Exp --tp 8 --dp 8 --enable-dp-attention

# 使用 EP + DP 启动
python -m sglang.launch_server --model deepseek-ai/DeepSeek-V3.2-Exp --tp 8 --ep 8 --dp 8 --enable-dp-attention

配置提示#

  • DP Attention:对于 DeepSeek V3.2 模型,内核针对 dp_size=8 的用例进行了定制,因此默认启用 DP attention 以获得更好的稳定性和性能。纯 TP 启动的功能仍在开发中。

  • 短序列 MHA 预填充(自适应):对于短预填充序列(默认阈值:2048 tokens),NSA 后端会自动使用标准 MHA(无需额外标志)。在 H200 (SM90) 上,此路径使用 FlashAttention 可变长度内核;在 B200 (SM100) 上使用 TRT-LLM 不规则 MHA。MHA 使用 MHA_ONE_SHOT 以获得最佳性能。MHA_ONE_SHOT 在单个内核调用中计算所有 tokens(包括缓存的 prefix 和新扩展的 tokens)的多头注意力,避免了分块 KV 缓存处理的开销。对于总序列长度在块容量限制内的短序列,这实现了最佳吞吐量。

  • 注意力内核选择:DeepSeek V3.2 模型的注意力后端自动设置为 nsa 注意力后端。在此后端中,实现了用于稀疏预填充/解码的不同内核,可以通过 --nsa-prefill-backend--nsa-decode-backend 服务器参数指定。NSA 预填充/解码注意力内核的选择包括:

    • flashmla_sparse:来自 flash_mla 库的 flash_mla_sparse_fwd 内核。可以在 Hopper 和 Blackwell GPU 上运行。它需要 bf16 q、kv 输入。

    • flashmla_kv:来自 flash_mla 库的 flash_mla_with_kvcache 内核。可以在 Hopper 和 Blackwell GPU 上运行。它需要 bf16 q、fp8 k_cache 输入。

    • fa3:来自 flash_attn 库的 flash_attn_with_kvcache 内核。只能在 Hopper GPU 上运行。它需要 bf16 q、kv 输入。

    • tilelang:可以在 GPU、HPU 和 NPU 上运行的 tilelang 实现。

    • alter:AMD HPUs 上的 Alter 内核。只能作为解码内核使用。

  • 基于 性能基准测试,H200 和 B200 的默认配置设置如下:

    • H200:flashmla_sparse 预填充注意力(短序列预填充通过 FlashAttention varlen 使用 MHA),fa3 解码注意力,bf16 kv 缓存数据类型。

    • B200:flashmla_auto 预填充注意力(短序列预填充通过 TRT-LLM 不规则使用 MHA),flashmla_kv 解码注意力,fp8_e4m3 kv 缓存数据类型。flashmla_auto 启用基于 KV 缓存数据类型、硬件和启发式方法的自动选择,选择 flashmla_sparseflashmla_kv 内核进行预填充。当启用 FP8 KV 缓存且 total_kv_tokens < total_q_tokens * 512 时,它使用 flashmla_sparse 内核;否则,它会回退到 flashmla_kv 内核。如果 flashmla_sparseflashmla_kv 内核的性能发生显著变化,可能需要调整启发式方法。

多token预测#

SGLang 基于 EAGLE 投机解码 为 DeepSeek V3.2 实现了多token预测 (MTP)。通过这种优化,在小批量大小下可以显著提高解码速度。请查看此 PR 获取更多信息。

使用示例:

python -m sglang.launch_server --model deepseek-ai/DeepSeek-V3.2-Exp --tp 8 --dp 8 --enable-dp-attention --speculative-algorithm EAGLE --speculative-num-steps 3 --speculative-eagle-topk 1 --speculative-num-draft-tokens 4
  • 对于给定的批量大小,可以使用 bench_speculative.py 脚本搜索 --speculative-num-steps--speculative-eagle-topk--speculative-num-draft-tokens 的最佳配置。最小配置为 --speculative-num-steps 1 --speculative-eagle-topk 1 --speculative-num-draft-tokens 2,对于更大的批量大小可以实现加速。

  • --max-running-requests 的默认值设置为 48 用于 MTP。对于更大的批量大小,此值应增加到默认值以上。

函数调用和推理解析器#

函数调用和推理解析器的使用与 DeepSeek V3.1 相同。请参考推理解析器工具解析器文档。

PD 分离#

预填充命令:

python -m sglang.launch_server \
        --model-path deepseek-ai/DeepSeek-V3.2-Exp \
        --disaggregation-mode prefill \
        --host $LOCAL_IP \
        --port $PORT \
        --tp 8 \
        --dp 8 \
        --enable-dp-attention \
        --dist-init-addr ${HOST}:${DIST_PORT} \
        --trust-remote-code \
        --disaggregation-bootstrap-port 8998 \
        --mem-fraction-static 0.9 \

解码命令:

python -m sglang.launch_server \
        --model-path deepseek-ai/DeepSeek-V3.2-Exp \
        --disaggregation-mode decode \
        --host $LOCAL_IP \
        --port $PORT \
        --tp 8 \
        --dp 8 \
        --enable-dp-attention \
        --dist-init-addr ${HOST}:${DIST_PORT} \
        --trust-remote-code \
        --mem-fraction-static 0.9 \

路由器命令:

python -m sglang_router.launch_router --pd-disaggregation \
  --prefill $PREFILL_ADDR 8998 \
  --decode $DECODE_ADDR \
  --host 127.0.0.1 \
  --port 8000 \

如果您需要更高级的部署方法或生产就绪的部署方法,例如基于 RBG 或 LWS 的部署,请参考 references/multi_node_deployment/rbg_pd/deepseekv32_pd.md。此外,您还可以在上述文档中找到基于 DeepEP 的 EP 并行的启动命令。

基准测试结果#

使用 gsm8k 进行准确度测试#

可以使用 gsm8k 数据集进行简单的准确度基准测试:

python3 benchmark/gsm8k/bench_sglang.py --num-shots 8 --num-questions 1319 --parallel 1319

结果为 0.956,符合我们的预期:

Accuracy: 0.956
Invalid: 0.000
Latency: 25.109 s
Output throughput: 5226.235 token/s

要测试长上下文准确度,使用 --num-shots 20 运行 gsm8k。结果与 8 shots 非常接近:

Accuracy: 0.956
Invalid: 0.000
Latency: 29.545 s
Output throughput: 4418.617 token/s

使用 gpqa-diamond 进行准确度测试#

可以在 GPQA-diamond 数据集上进行长上下文准确度基准测试,使用长输出 tokens 并启用思考模式:

python3 -m sglang.test.run_eval --port 30000 --eval-name gpqa --num-examples 198 --max-tokens 120000 --repeat 8 --thinking-mode deepseek-v3

8 次运行的平均准确度为 0.797,与官方技术报告中的 79.9 数字相符。

Repeat: 8, mean: 0.797
Scores: ['0.808', '0.798', '0.808', '0.798', '0.783', '0.788', '0.803', '0.793']

使用 aime 2025 进行准确度测试#

在 docker 或您自己的虚拟环境中安装 NeMo-Skills 来准备环境:

pip install git+https://github.com/NVIDIA/NeMo-Skills.git --ignore-installed blinker

通过将 jinja chat_template 中的

{% set thinking = false %}

替换为

{% set thinking = true %}

并将其保存到 chat_template_thinking.jinja

使用修改后的 chat-template 文件启动 SGLang 服务器:

python -m sglang.launch_server --model deepseek-ai/DeepSeek-V3.2-Exp --tp 8 --dp 8 --enable-dp-attention --chat-template chat_template_thinking.jinja

运行以下脚本评估 AIME 2025:

#! /bin/bash
export NEMO_SKILLS_DISABLE_UNCOMMITTED_CHANGES_CHECK=1

ns prepare_data aime25

PORT=30000
BACKEND=sglang
MODEL="deepseek-ai/DeepSeek-V3.2-Exp"
MODEL_NAME="dsv32-fp8"

echo "Starting AIME25 evaluation with model $MODEL on port $PORT using backend $BACKEND..."
ns eval \
  --benchmarks=aime25:4 \
  --server_type=$BACKEND \
  --model=$MODEL \
  --server_address=http://localhost:${PORT}/v1 \
  --output_dir=nemo_skills_aime25_${MODEL_NAME}_output_${BACKEND}_$(date +%Y%m%d_%H%M%S) \
  ++max_concurrent_requests=512 \
  ++server.api_key=dummy \
  ++inference.tokens_to_generate=64000

测试结果:

evaluation_mode

num_entries

avg_tokens

gen_seconds

symbolic_correct

no_answer

pass@1[avg-of-4]

30

14410

1758

85.83% ± 4.19%

0.00%

majority@4

30

14410

1758

90.00%

0.00%

pass@4

30

14410

1758

93.33%

0.00%

请注意,问题#3 的 id 为 aime25-2 的结果被 nemo-skills 标记为错误,但实际上是正确的,因为 nemo-skills 无法将预测答案 016 与预期答案 16 匹配。如果我们在结果中加 1/30 = 3.33%,则 pass@1[avg-of-4] 结果与参考值 89.3 匹配。

DSA 长序列上下文并行优化(实验性)#

可以在 GPQA-diamond 数据集上进行长上下文准确度基准测试,使用长输出 tokens 并启用思考模式:

使用示例:

# 使用 EP + DP 启动
python -m sglang.launch_server --model deepseek-ai/DeepSeek-V3.2-Exp  --tp 8 --ep 8 --dp 2 --enable-dp-attention --enable-nsa-prefill-context-parallel --max-running-requests 32

并行上下文提示#

CP_size 重用 atten_tp_size,等于 TP_size / DP_size。 目前仍不支持某些功能。

  • 多批量预填充:目前预填充过程中仅支持单请求处理。

  • 分离:P/D 分离。

  • 跨机器支持:目前仅在单台机器上测试(TP=8,EP=8)。

  • 其他参数:目前仅支持 moe_dense_tp_size=1,kv_cache_dtype = "bf16",moe_a2a_backend = "deepep"。

  • DP_sizeCP_size 重用 atten_tp_size,等于 TP_size / DP_size。为了让 cp 函数正常工作,TP_size 必须能被 DP_size 整除,且 TP_size / DP_size > 1(确保 CP_size > 1)。

  • 详细设计参考:https://github.com/sgl-project/sglang/pull/12065