SGLang vs llama.cpp 双引擎对比与取舍
硬件: 双 RTX 3090 24GB · 模型: Qwen3.8-27B (两引擎各一格式)
场景: 单人 coding agent (opencode / deer-flow / deepseek-harness)
实测日期: 2026-08-15, 全部数据来自同机真实测试
一、部署形态
| GPU1 SGLang | GPU0 llama.cpp | |
|---|---|---|
| 容器 | sgl-qwen27b-gpu1 |
lla-qwen27B-gpu0 |
| 模型格式 | dbirks AutoRound W4A16 (19.5GB) | unsloth IQ4_XS GGUF (15.7GB) |
| 量化 | W4A16 compressed-tensors | IQ4_XS + MTP 头 |
| KV cache | fp8_e4m3 | q8_0 / q8_0 |
| 端口 | :15433 | :11434 |
GPU1 SGLang 关键参数
--mem-fraction-static 0.95 --max-mamba-cache-size 15
--kv-cache-dtype fp8_e4m3 --attention-backend flashinfer
--context-length 65536 --reasoning-parser qwen3 --tool-call-parser qwen3_coder
GPU0 llama.cpp 关键参数
--ctx-size 131072 --cache-type-k q8_0 --cache-type-v q8_0
--parallel 1 --spec-type draft-mtp --spec-draft-n-max 2
--flash-attn on -ngl 99 -t 8 -tb 4
二、核心性能对比(全部实测)
2.1 单请求生成速度
| 场景 | SGLang | llama.cpp | 差距 |
|---|---|---|---|
| 200 tokens 输出 | 49.1 t/s | 57.1 t/s | llama +16% |
2.2 并发聚合吞吐
| 并发 | SGLang | llama.cpp | 说明 |
|---|---|---|---|
| 1 | 49.1 | 57.1 | llama 快 |
| 2 | 88.9 | 57.1 | SGLang +56% |
| 3 | 130.2 | 57.1 (串行) | SGLang +128% |
> llama.cpp parallel=1 串行, 多请求排队; SGLang 连续批处理真并行
2.3 多轮对话稳定性 (5 轮)
| 引擎 | 速度序列 | 稳定性 |
|---|---|---|
| SGLang | 48.6 / 47.0 / 47.5 / 47.3 / 47.0 | 稳定 (±1) |
| llama.cpp | 44.5 / 48.6 / 57.1 / 44.8 / 50.5 | 波动 (±13) |
2.4 长上下文 prefill(60K prompt 实测)
| 引擎 | prefill 吞吐 | 60K 总耗时 |
|---|---|---|
| SGLang | ~1260 tok/s | 40.3s |
| llama.cpp | ~1061 tok/s | 45.6s |
> 意外发现: 长上下文场景 SGLang 反而快 12%(prefill 效率优势)
2.5 上下文上限
| 引擎 | 单请求上限 | 显存占用 |
|---|---|---|
| SGLang | 65511 | ~24GB (占满) |
| llama.cpp | 131072 | ~22GB (余 2.5GB) |
三、应用场景适配(coding agent)
3.1 各工具配置现状
| 工具 | 当前模型 | 说明 |
|---|---|---|
| opencode | GPU1 SGLang (small/explore/general) | 子代理并行 |
| deer-flow | GPU1 qwen27b-gpu1 (subagents) | 多子代理 |
| deepseek-harness | GPU0 llama.cpp | 单代理 |
| hermes | DeepSeek 云端 | 不依赖本地 |
| mlaistock | 双 adapter (可切换) | :15433 默认 |
3.2 场景需求分析
coding agent 单请求 token 构成:
system prompt (模型+工具定义): ~2-4K
单文件分析: 5-30K
多文件 diff: 10-50K
长对话累积: 10-40K
典型分布:
| 场景 | token 范围 | 占比 |
|---|---|---|
| 简单问答/小文件 | 2-8K | ~60% |
| 单文件审查 | 10-30K | ~25% |
| 多文件/长对话 | 30-65K | ~12% |
| 超长 (65K+) | >65K | <3% |
结论: 65K 上下文覆盖 97% 场景, 128K 只服务 <3% 超长需求。
四、核心权衡:并发 vs 上下文
4.1 物理约束(24GB 显存, KV 池总量固定)
GPU0 llama.cpp: 128K×1并发 或 64K×2并发 或 43K×3并发 (互斥)
GPU1 SGLang: 90K×1并发 或 78K×2并发 或 65K×3并发 (可调)
关键规律: 并发 × 上下文 = KV 池 ≈ 常数。两者不可兼得。
4.2 为什么不能两全
一、llama.cpp parallel>1 → 每个 slot 上下文减半 (128K→64K@2并发), 失去长上下文优势
二、SGLang 降并发 → 长上下文 (90K@1并发), 但失去子代理并行
4.3 双引擎的最优分工
| 引擎 | 坚守一端 | 价值 |
|---|---|---|
| SGLang (GPU1) | 3 并发 | 高频收益: 每次子代理并行任务时间 /3 |
| llama.cpp (GPU0) | 128K 上下文 | 低频保险: <3% 超长场景备用 |
五、取舍结论
5.1 为什么 SGLang 作为主引擎
一、并发是高频收益 — opencode 派子代理每次受益(任务时间 /3)
二、65K 覆盖 97% — coding agent 几乎不需要 65K+ 单请求
三、多轮稳定 — ±1 t/s 无衰减(llama 波动 ±13)
四、原生工具调用 — tool_calls 结构化输出, opencode 兼容最佳
五、长上下文反而快 — prefill 1260 vs 1061 tok/s (60K 场景 SGLang 快 12%)
5.2 llama.cpp 的不可替代价值
一、128K 上下文 — 超长文档/多超大文件场景唯一选择
二、单请求快 16% — 57 vs 49 t/s
三、MTP 投机解码 — 单并发场景效率高
四、显存余量 2.5GB — 资源更宽裕
5.3 最终决策
opencode 系统(主/子代理) → GPU1 SGLang (3 并发 + 65K)
超长上下文单任务 → GPU0 llama.cpp (128K, 按需调用)
开发项目 → 各自独立 (双 adapter 可切换)
核心逻辑: 双引擎各守一端,不强行两全。并发归 SGLang(高频),长上下文归 llama.cpp(低频备用)。两个容器同时在线,按需路由,无需改配置。
5.4 何时应该切换偏好
| 如果你的使用模式是… | 应偏向 |
|---|---|
| 大量子代理并行 / 多 agent 协作 | SGLang 3 并发 |
| 单请求超长文档 / 整仓库分析 | llama.cpp 128K |
| 两者兼有 (默认) | 双引擎按需路由 |
六、附:性能数据速查表
| 指标 | SGLang | llama.cpp |
|---|---|---|
| 单请求 | 49.1 t/s | 57.1 t/s |
| 3 并发聚合 | 130.2 t/s | 57.1 (串行) |
| 多轮稳定性 | 47±1 | 50±13 |
| 上下文 | 65511 | 131072 |
| 长 prompt 60K | 40.3s | 45.6s |
| prefill | 1260 tok/s | 1061 tok/s |
| 显存 | 24GB (满) | 22GB (余2.5GB) |
| 工具调用 | 原生结构化 | 兼容 |
相关文档
一、docs/sglang-qwen3.8-27b-deployment-tuning.md — SGLang 部署调优专题
二、docs/review/sglang-qwen3.8-27b-parameter-tuning-experiments-2026-08-15.md — 参数实验记录
三、docs/local-model-config-update-gpu1-qwen3.8-27b-2026-08-15.md — 配置更新记录
四、docs/llamacpp-qwen3.6-27b-optimization-guide.md — llama.cpp 27B 调优
五、docs/inference-engine-comparison-sglang-vs-llamacpp.md — 早期引擎对比
数据实测日期: 2026-08-15, 同机双 3090, 同模型 Qwen3.8-27B
