Skip to content

SGLang 服务基准测试

随着大语言模型在生产环境中的广泛应用,评估与优化在线服务性能变得至关重要。SGLang 内置的 sglang.bench_serving 模块提供了强大且灵活的基准测试能力,支持在不同推理后端与负载模式下精确测量服务性能。

1. 核心功能与指标

sglang.bench_serving 的核心目标是模拟真实在线请求负载,并精确测量服务端的关键性能数据。

1.1 功能概述

  • 负载生成:根据数据集或合成数据生成 Prompt,并提交给目标服务接口。
  • 模式支持:支持流式(Streaming)与非流式(Non-streaming)模式。
  • 流量控制:支持精确的请求速率(Rate Control)与最大并发限制。

1.2 核心测量指标

指标英文简称解释
请求吞吐量Req/s每秒处理的请求数
Token 吞吐量Tok/s每秒处理的 Token 总数(输入 + 输出)
端到端延迟End-to-End Latency单个请求从发送到完整接收的总耗时
首个 Token 时间TTFT从请求发送到收到第一个 Token 的时间
Token 间延迟ITL连续两个输出 Token 之间的时间间隔
Token 处理时间TPOTTTFT 后的平均 Token 处理时间:(延迟TTFT)/(Tokens1)
并发度Concurrency所有请求总耗时除以实际挂钟时间
推测解码接受长度Accept LengthSGLang 专属指标,衡量推测解码的平均接受长度

2. 支持的后端与接口

bench_serving 通过统一的 OpenAI 兼容接口支持多种主流后端:

后端名称兼容性接口路径
sglang / sglang-nativeSGLang 原生 APIPOST /generate
sglang-oai, vllm, lmdeployOpenAI CompletionsPOST /v1/completions
sglang-oai-chat, vllm-chat, lmdeploy-chatOpenAI Chat CompletionsPOST /v1/chat/completions
trtTensorRT-LLMPOST /v2/models/ensemble/generate_stream
trussTruss FrameworkPOST /v1/models/model:predict

3. 快速开始

3.1 启动 SGLang 服务

bash
python3 -m sglang.launch_server --model-path meta-llama/Llama-3.1-8B-Instruct

3.2 基础基准测试(SGLang 原生接口)

bash
python3 -m sglang.bench_serving \
  --backend sglang \
  --host 127.0.0.1 --port 30000 \
  --num-prompts 1000 \
  --model meta-llama/Llama-3.1-8B-Instruct

3.3 OpenAI 兼容接口测试(例如 vLLM)

bash
python3 -m sglang.bench_serving \
  --backend vllm \
  --base-url http://127.0.0.1:8000 \
  --num-prompts 1000 \
  --model meta-llama/Llama-3.1-8B-Instruct

4. 数据集配置

基准测试的准确性高度依赖模拟的请求特征。通过 --dataset-name 参数选择数据集:

数据集名称特点与用途关键参数
sharegpt(默认)加载 ShareGPT 对话数据,模拟真实用户请求--sharegpt-context-len, --sharegpt-output-len
random随机生成输入/输出长度--random-input-len, --random-output-len, --random-range-ratio
image视觉语言模型测试--image-count, --image-resolution, --image-format, --image-content
generated-shared-prefix测试 KV Cache 共享效率--gsp-system-prompt-len, --gsp-question-len
mmmu多模态数学推理需要额外依赖

4.1 多模态 VLM 测试示例

bash
python -m sglang.launch_server \
  --model-path Qwen/Qwen2.5-VL-3B-Instruct \
  --disable-radix-cache

python3 -m sglang.bench_serving \
  --backend sglang-oai-chat \
  --dataset-name image \
  --num-prompts 500 \
  --image-count 3 \
  --image-resolution 720p \
  --random-input-len 512 \
  --random-output-len 512

5. 高级配置

5.1 流量控制与模式

参数说明
--request-rate每秒发送请求数;inf 表示立即全部发送(突发模式),否则模拟泊松到达
--max-concurrency限制最大并发进行中的请求数
--disable-stream禁用流式输出;非流式模式下 TTFT 等于总延迟

5.2 模型、分词器与数据格式

  • --model:模型 ID 或本地路径。
  • --tokenizer:分词器 ID 或路径,默认与 --model 相同。
  • --apply-chat-template:应用聊天模板。
  • --tokenize-prompt:发送整数 Token ID 而非文本(目前仅 sglang 后端支持)。

5.3 输出与定制

  • --output-file FILE.jsonl:将详细结果追加到 JSONL 文件。
  • --output-details:在 JSONL 中记录每个请求的详情(生成文本、错误、TTFT 等)。
  • --extra-request-body '{"top_p":0.9,"temperature":0.6}':以 JSON 字符串形式添加额外采样参数。

5.4 优化与调试

参数说明
--warmup-requests N正式测试前执行 N 个短输出请求进行预热,默认 1
--flush-cache测试前调用 /flush_cache(仅 SGLang)
--profile启动服务器端性能分析
--lora-name name1 ...随机选择 LoRA 名称并传递给后端

5.5 鉴权配置

若服务需要 OpenAI 风格 API Key,设置环境变量:

bash
export OPENAI_API_KEY=sk-your-key

基准测试脚本会自动在请求头中添加 Authorization: Bearer <key>

6. 实战案例

6.1 严格流量控制(SGLang 原生)

bash
python3 -m sglang.bench_serving \
  --backend sglang \
  --host 127.0.0.1 --port 30000 \
  --model meta-llama/Llama-3.1-8B-Instruct \
  --dataset-name random \
  --random-input-len 1024 \
  --random-output-len 1024 \
  --random-range-ratio 0.5 \
  --num-prompts 2000 \
  --request-rate 100 \
  --max-concurrency 512 \
  --output-file sglang_random.jsonl \
  --output-details

6.2 共享前缀优化测试

bash
python3 -m sglang.bench_serving \
  --backend sglang \
  --host 127.0.0.1 --port 30000 \
  --model meta-llama/Llama-3.1-8B-Instruct \
  --dataset-name generated-shared-prefix \
  --gsp-num-groups 64 \
  --gsp-prompts-per-group 16 \
  --gsp-system-prompt-len 2048 \
  --gsp-question-len 128 \
  --gsp-output-len 256 \
  --num-prompts 1024

6.3 OpenAI 兼容聊天接口测试(vLLM Chat)

bash
python3 -m sglang.bench_serving \
  --backend vllm-chat \
  --base-url http://127.0.0.1:8000 \
  --model meta-llama/Llama-3.1-8B-Instruct \
  --dataset-name random \
  --num-prompts 500 \
  --apply-chat-template

7. 故障排查

  • 请求全部失败:检查 --backend、地址、端口、--model 名称是否正确,确认服务已启动。
  • 吞吐量过低:调整 --request-rate--max-concurrency 以匹配服务器极限;检查 Batch Size 与调度策略。
  • Token 计数异常:优先使用带正确聊天模板的 Chat / Instruct 模型。
  • 鉴权错误(401/403):确认 OPENAI_API_KEY 已正确设置。

参考

Maintained by Robin