203 lines
6.4 KiB
Python
203 lines
6.4 KiB
Python
import unittest
|
|
|
|
from sglang.test.accuracy_test_runner import AccuracyTestParams
|
|
from sglang.test.ci.ci_register import register_cuda_ci
|
|
from sglang.test.performance_test_runner import PerformanceTestParams
|
|
from sglang.test.run_combined_tests import run_combined_tests
|
|
from sglang.test.test_utils import ModelLaunchSettings, is_blackwell_system
|
|
from sglang.test.tool_call_test_runner import ToolCallTestParams
|
|
|
|
register_cuda_ci(est_time=5400, suite="nightly-8-gpu-common", nightly=True)
|
|
|
|
DEEPSEEK_V32_MODEL_PATH = "deepseek-ai/DeepSeek-V3.2"
|
|
|
|
BASE_ARGS = [
|
|
"--trust-remote-code",
|
|
"--model-loader-extra-config",
|
|
'{"enable_multithread_load": true}',
|
|
]
|
|
|
|
TOOL_CALL_ARGS = [
|
|
"--tool-call-parser=deepseekv32",
|
|
"--reasoning-parser=deepseek-v3",
|
|
]
|
|
|
|
DP_ARGS = [
|
|
"--tp=8",
|
|
"--dp=8",
|
|
"--enable-dp-attention",
|
|
]
|
|
|
|
# Accuracy thresholds
|
|
GSM8K_BASELINE = 0.935
|
|
GPQA_BASELINE = 0.835
|
|
|
|
|
|
class TestDeepseekV32(unittest.TestCase):
|
|
"""Unified test class for DeepSeek V3.2 performance and accuracy.
|
|
|
|
Tests multiple variants with both performance and accuracy tests:
|
|
- dp: Standard TP=8 + DP=8 with dp-attention
|
|
- dp+mtp: DP + EAGLE speculative decoding
|
|
- tp: Pure TP=8 only
|
|
- tp+mtp: Pure TP=8 + EAGLE speculative decoding
|
|
"""
|
|
|
|
def test_deepseek_v32_all_variants(self):
|
|
"""Run performance and accuracy for all DeepSeek V3.2 variants."""
|
|
TP_ARGS = [
|
|
"--tp=8",
|
|
]
|
|
MTP_ARGS = [
|
|
"--speculative-algorithm=EAGLE",
|
|
"--speculative-num-steps=3",
|
|
"--speculative-eagle-topk=1",
|
|
"--speculative-num-draft-tokens=4",
|
|
"--mem-frac=0.7",
|
|
]
|
|
variants = [
|
|
# Variant: "dp" - Standard TP=8 + DP=8 with dp-attention
|
|
ModelLaunchSettings(
|
|
DEEPSEEK_V32_MODEL_PATH,
|
|
tp_size=8,
|
|
extra_args=BASE_ARGS + DP_ARGS + TOOL_CALL_ARGS,
|
|
variant="DP8",
|
|
),
|
|
# Variant: "dp+mtp" - DP + EAGLE speculative decoding
|
|
ModelLaunchSettings(
|
|
DEEPSEEK_V32_MODEL_PATH,
|
|
tp_size=8,
|
|
extra_args=BASE_ARGS + DP_ARGS + TOOL_CALL_ARGS + MTP_ARGS,
|
|
env={"SGLANG_ENABLE_SPEC_V2": "1"},
|
|
variant="DP8+MTP",
|
|
),
|
|
# Variant: "tp" - Pure TP=8 only
|
|
ModelLaunchSettings(
|
|
DEEPSEEK_V32_MODEL_PATH,
|
|
tp_size=8,
|
|
extra_args=BASE_ARGS + TP_ARGS + TOOL_CALL_ARGS,
|
|
variant="TP8",
|
|
),
|
|
# Variant: "tp+mtp" - Pure TP=8 + EAGLE speculative decoding
|
|
ModelLaunchSettings(
|
|
DEEPSEEK_V32_MODEL_PATH,
|
|
tp_size=8,
|
|
extra_args=BASE_ARGS + TP_ARGS + TOOL_CALL_ARGS + MTP_ARGS,
|
|
env={"SGLANG_ENABLE_SPEC_V2": "1"},
|
|
variant="TP8+MTP",
|
|
),
|
|
]
|
|
|
|
run_combined_tests(
|
|
models=variants,
|
|
test_name="DeepSeek-V3.2",
|
|
accuracy_params=AccuracyTestParams(
|
|
dataset="gsm8k", baseline_accuracy=GSM8K_BASELINE
|
|
),
|
|
performance_params=PerformanceTestParams(
|
|
batch_sizes=[1, 8, 16, 64],
|
|
profile_dir="performance_profiles_deepseek_v32",
|
|
),
|
|
tool_call_params=ToolCallTestParams(
|
|
test_thinking=True, test_reasoning_usage=True
|
|
),
|
|
)
|
|
|
|
@unittest.skipIf(is_blackwell_system(), "Requires H200 system")
|
|
def test_deepseek_v32_nsa_backends(self):
|
|
"""Test NSA attention backend variants (H200 only).
|
|
|
|
Tests three NSA backend configurations:
|
|
- flashmla: flashmla_sparse prefill + flashmla_kv decode
|
|
- fa3: FA3 prefill + FA3 decode
|
|
- fp8kvcache: default backends with FP8 KV cache
|
|
"""
|
|
NSA_FLASHMLA_ARGS = [
|
|
"--attention-backend=nsa",
|
|
"--nsa-prefill-backend=flashmla_sparse",
|
|
"--nsa-decode-backend=flashmla_kv",
|
|
]
|
|
|
|
NSA_FA3_ARGS = [
|
|
"--attention-backend=nsa",
|
|
"--nsa-prefill-backend=fa3",
|
|
"--nsa-decode-backend=fa3",
|
|
]
|
|
|
|
NSA_FP8KV_ARGS = [
|
|
"--attention-backend=nsa",
|
|
"--kv-cache-dtype=fp8_e4m3",
|
|
]
|
|
|
|
nsa_variants = [
|
|
# flashmla backend
|
|
ModelLaunchSettings(
|
|
DEEPSEEK_V32_MODEL_PATH,
|
|
tp_size=8,
|
|
extra_args=BASE_ARGS + DP_ARGS + NSA_FLASHMLA_ARGS,
|
|
),
|
|
# fa3 backend
|
|
ModelLaunchSettings(
|
|
DEEPSEEK_V32_MODEL_PATH,
|
|
tp_size=8,
|
|
extra_args=BASE_ARGS + DP_ARGS + NSA_FA3_ARGS,
|
|
),
|
|
# fp8 kv cache
|
|
ModelLaunchSettings(
|
|
DEEPSEEK_V32_MODEL_PATH,
|
|
tp_size=8,
|
|
extra_args=BASE_ARGS + DP_ARGS + NSA_FP8KV_ARGS,
|
|
),
|
|
]
|
|
|
|
run_combined_tests(
|
|
models=nsa_variants,
|
|
test_name="DeepSeek-V3.2 NSA Backends",
|
|
accuracy_params=AccuracyTestParams(
|
|
dataset="gsm8k", baseline_accuracy=GSM8K_BASELINE
|
|
),
|
|
performance_params=None,
|
|
)
|
|
|
|
@unittest.skipIf(
|
|
not is_blackwell_system(),
|
|
"Hardware agnostic - just using B200 for efficiency reasons",
|
|
)
|
|
def test_deepseek_v32_b200(self):
|
|
"""Test DeepSeek V3.2 with GPQA evaluation using thinking mode (B200 only).
|
|
|
|
This test runs GPQA evaluation with the reasoning parser enabled.
|
|
"""
|
|
B200_REASONING_ARGS = [
|
|
"--tool-call-parser=deepseekv32",
|
|
"--reasoning-parser=deepseek-v3",
|
|
]
|
|
|
|
variants = [
|
|
ModelLaunchSettings(
|
|
DEEPSEEK_V32_MODEL_PATH,
|
|
tp_size=8,
|
|
extra_args=BASE_ARGS + DP_ARGS + B200_REASONING_ARGS,
|
|
),
|
|
]
|
|
|
|
run_combined_tests(
|
|
models=variants,
|
|
test_name="DeepSeek-V3.2 GPQA (B200)",
|
|
accuracy_params=AccuracyTestParams(
|
|
dataset="gpqa",
|
|
baseline_accuracy=GPQA_BASELINE,
|
|
num_examples=198,
|
|
num_threads=198,
|
|
max_tokens=120000,
|
|
thinking_mode="deepseek-v3",
|
|
temperature=0.1,
|
|
repeat=4,
|
|
),
|
|
performance_params=None, # Skip performance test for GPQA
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|