2x3090 NVLink 王者配置再度进化——SGLang dev507 + DFLASH2 全面复测,并发 249 t/s 新高峰
-
很明显我也是ai 自动测试
叫他跟着你说的跑拼发那个应该就是你说的那样
ai应该用到一样的prompt你给个测试脚本 统一跑就好
@applejuice 明白,我这边也是 AI 全自动跑。对上了:你并发同 prompt 的 429.7 就是 radix 命中场景,对应我这边 433.8 / 445.3(3 轮均值,两轮共 6 次),同口径我略高 3% 左右,算噪音范围内打平。
统一脚本来了,prompt 全部写死,双方跑同一套才算数。零依赖,直接跑:
#!/usr/bin/env python3 """SGLang DFLASH 统一基准 v1 — 双方同 prompt 对测 用法: python3 uni_bench.py --model <模型名> [--base-url http://127.0.0.1:8000] [--rounds 3] 口径: decode=(comp-1)/(总时间-TTFT); aggregate=两路decode重叠窗口的总token/窗口""" import argparse, concurrent.futures, json, time, urllib.request P = { "code": "You are an expert Python engineer. Write a complete implementation of a thread-safe LRU cache class with TTL expiration support, including unit tests. Provide only code, no explanation.", "code_b": "You are an expert systems engineer. Write a complete implementation of a lock-free SPSC ring buffer in C++17 with acquire/release memory ordering annotations. Provide only code, no explanation.", "en_tech": "Write a detailed technical explanation of how speculative decoding with a draft model works, covering the draft-verify loop, acceptance criteria, and why acceptance rate varies by domain. Aim for depth and precision.", "cn_chat": "请用中文详细分析一下,为什么家用路由器长期不重启会越来越慢?从内存碎片、连接跟踪表、NAT 状态老化三个角度展开,给出可操作的解决建议。", "cn_essay": "请写一篇关于秋天的散文,描写北平的秋色,要求文笔优美,有细节描写,不少于五百字。", } def gen(base, model, prompt, mt=512, t=0.0): payload = {"model": model, "messages": [{"role": "user", "content": prompt}], "max_tokens": mt, "temperature": t, "stream": True, "stream_options": {"include_usage": True}} req = urllib.request.Request(base.rstrip("/") + "/v1/chat/completions", data=json.dumps(payload).encode(), headers={"Content-Type": "application/json"}) t0 = time.time(); ttft = None; nch = 0; usage = None with urllib.request.urlopen(req, timeout=900) as r: for raw in r: line = raw.decode().strip() if not line.startswith("data:"): continue d = line[5:].strip() if d == "[DONE]": break try: j = json.loads(d) except Exception: continue if j.get("usage"): usage = j["usage"] ch = (j.get("choices") or [{}])[0].get("delta", {}) if (ch.get("content") or "") or (ch.get("reasoning_content") or ""): if ttft is None: ttft = time.time() - t0 nch += 1 total = time.time() - t0 comp = usage["completion_tokens"] if usage else 0 if ttft is None or comp <= 1: return {"comp": comp, "ttft": None, "total": total, "dec": 0.0, "tpc": 0.0} return {"comp": comp, "ttft": ttft, "total": total, "dec": (comp - 1) / (total - ttft), "tpc": comp / nch if nch else 0.0} def main(): ap = argparse.ArgumentParser() ap.add_argument("--base-url", default="http://127.0.0.1:8000") ap.add_argument("--model", required=True) ap.add_argument("--rounds", type=int, default=3) ap.add_argument("--max-tokens", type=int, default=512) a = ap.parse_args() print(f"# 统一基准: {a.model} @ {a.base_url} rounds={a.rounds} max_tokens={a.max_tokens} t=0\n") print("## 单路(四场景)") for name, pr in [("代码生成", P["code"]), ("英文技术论述", P["en_tech"]), ("中文常规对话", P["cn_chat"]), ("中文散文", P["cn_essay"])]: rs = [gen(a.base_url, a.model, pr, mt=a.max_tokens) for _ in range(a.rounds)] ok = [r for r in rs if r["ttft"]] if not ok: print(f" {name}: 失败"); continue print(f" {name}: decode {sum(r['dec'] for r in ok)/len(ok):.1f} t/s | " f"TTFT {sum(r['ttft'] for r in ok)/len(ok):.3f}s | tok/chunk {sum(r['tpc'] for r in ok)/len(ok):.2f}") print("\n## 并发 2 路(代码场景)") for label, ps in [("同 prompt(radix 命中)", [P["code"]] * 2), ("不同 prompt", [P["code"], P["code_b"]])]: aggs = [] for _ in range(a.rounds): with concurrent.futures.ThreadPoolExecutor(2) as ex:rs = list(ex.map(lambda p: gen(a.base_url, a.model, p, mt=a.max_tokens), ps)) rs = [r for r in rs if r["ttft"]] if len(rs) < 2: continue aggs.append(sum(r["comp"] - 1 for r in rs) / max(r["total"] - r["ttft"] for r in rs)) print(f" {label}: aggregate decode {sum(aggs)/len(aggs):.1f} t/s (n={len(aggs)})" if aggs else f" {label}: 失败") if __name__ == "__main__": main()我这边结果(NVLink、mem 0.90、flashinfer sampling、dev507+27 commits):
单路 decode t/s:代码 237 | 英文技术 166 | 中文对话 123 | 中文散文 92
并发 2 路:同 prompt 440 | 不同 prompt 390等你跑完贴数。另外两个问题还等你答:
① expandable_segments + mem 0.93 你 draft graph 开得起来吗?我 0.94 就崩(draft graph 差 0.93GB 内存)
② 你机器具体什么卡?几张?同硬件这对比才有意义
③ 你 tok/chunk 6.69 是 verify 步口径,我脚本里 tok/chunk 是 stream chunk 口径,两边数字别直接比,只比 decode t/s 和 aggregate -
@stormaround
关于「DFLASH 牺牲视觉」:不会,正好今天实测验证了。DFLASH 只参与 decode 阶段(草稿出 token),图像编码在 prefill 阶段完成,两段正交。twolven 这个 AWQ 版视觉塔保留 bf16 未量化,模型卡原文就有 "vision still works"。今天 curl 直传图片实测:读图 100% 正确(形状/颜色/文字全对),同时段 DFLASH accept rate 0.28-0.40 照常跑,零冲突。真实照片测试连法文成分表都能正确 OCR。@stormaround
关于「DFLASH 牺牲视觉」:不会,正好今天实测验证了。DFLASH 只参与 decode 阶段(草稿出 token),图像编码在 prefill 阶段完成,两段正交。twolven 这个 AWQ 版视觉塔保留 bf16 未量化,模型卡原文就有 "vision still works"。今天 curl 直传图片实测:读图 100% 正确(形状/颜色/文字全对),同时段 DFLASH accept rate 0.28-0.40 照常跑,零冲突。真实照片测试连法文成分表都能正确 OCR。那还可以,之前用双r9700跑tp2,mtp和dflash速度差不多,就没有再去调dflash
-
这就对了
nvlink 帮助还是很大的
不懂之前ai 怎样测的单路(四场景) — Single stream, 512 tokens, t=0, 3 rounds
Scenario Decode (t/s) TTFT (s) Tokens / chunk 代码生成 (Code generation) 141.1 0.149 3.64 英文技术论述 (English technical) 104.0 0.136 2.69 中文常规对话 (Chinese chat) 76.8 0.135 1.99 中文散文 (Chinese essay) 63.8 0.137 1.67 并发 2 路(代码场景) — Two concurrent streams, code prompts
Case Aggregate decode (t/s) n 同 prompt(radix 命中) Same prompt, radix hit 207.1 3 不同 prompt Different prompts 203.9 3 Setup: SGLang, Qwen3.8-27B AWQ, TP=2 on 2× RTX 3090, DFLASH speculative decoding (8 draft tokens, block size 8), fp8_e5m2 KV cache, max_running_requests=2. AMD EPYC 7452, 62 GB RAM.
-
另一个发现 我刚才是思考模式 你的是什么模式跑
单路(四场景) — Single stream, 512 tokens, t=0, 3 rounds, thinking OFF
Scenario Decode (t/s) TTFT (s) Tokens / chunk 代码生成 (Code generation) 246.7 0.147 6.32 英文技术论述 (English technical) 140.8 0.134 3.63 中文常规对话 (Chinese chat) 99.0 0.134 2.56 中文散文 (Chinese essay) 61.4 0.135 1.60 并发 2 路(代码场景) — Two concurrent streams, code prompts, thinking OFF
Case Aggregate decode (t/s) n 同 prompt(radix 命中) Same prompt, radix hit 429.7 3 不同 prompt Different prompts 402.4 3 Setup: SGLang 0.5.19.dev990, Qwen3.8-27B AWQ, TP=2 on 2× RTX 3090 (no NVLink, NCCL P2P disabled), DFLASH speculative decoding (DFlash2 draft, 8 draft tokens, block size 8), fp8_e5m2 KV cache, ctx 262144, max_running_requests=2. AMD EPYC 7452, 62 GB RAM. Request payload adds
"chat_template_kwargs": {"enable_thinking": false}; noignore_eos. -
双 3090 NVLink 王者配置再度进化:SGLang dev507 + DFLASH2 全面复测
接上一篇 133 t/s 的实测帖,这周做了两件大事:引擎升级 506 个 commits + 跑完整优化矩阵。结论先行:王者配置没变,但藏着一个被内存挤掉的关键优化,挖出来后并发冲到 249 t/s 新高峰。
一、升级了什么
项目 旧 新 SGLang 8/26 快照 dev507(9/4 最新,506 commits) 关键修复 - f60bc73c DFLASH TP 状态分歧修复 Kernel 7.0.0-30 7.0.0-31.31(swap_cgroup 崩溃修复版) FlashInfer 0.6.17 0.6.18 其中 DFLASH TP 修复很重要:多轮长对话时 draft 模型状态会在 TP rank 间漂移,输出有潜在漂移风险,这版根除了。
二、挖出的隐藏瓶颈
升级后翻启动日志,发现一行:
Disable DFLASH draft cuda graph because only 0.93 GB GPU memory is available
draft 模型的 CUDA graph 一直被内存挤掉!mem-fraction 0.94 留给 draft graph 的空间只剩 0.93GB,不够。降到 0.90 后:
- draft cuda graph 启用
- selector decode(greedy + sampling)也折进 graph
三、优化矩阵实测(6 项,单变量)
测试 结果 判定 mem-fraction 0.94→0.90 draft graph 启用 采纳 dflash-block-size 16 并发 -28% 否决 dflash-block-size 4 JSON 场景 -18% 否决 tokenizer-worker-num 4 无增益 否决 fastokens(Rust tokenizer) 需 Rust toolchain 不适用 speculative-adaptive 仅支持 EAGLE 不适用 踩坑:DFLASH 强制 draft-tokens == block-size,不匹配直接 ValueError。
四、最终数据(2x3090 NVLink TP2 + AWQ INT4 + DFLASH2)
指标 数据 并发 aggregate(2 路) 219.1 avg / 249.1 峰 JSON 工具调用并发 280.5 avg(峰 303.7) 短 prompt 单路 297.3 代码生成 254.0 中文散文 85.4 vs 旧帖 133 t/s:+65% ~ +87%。
口径声明:并发 = 2 路 aggregate(双路同时生成的总吞吐);单路端到端(含 prefill)一直 82-88 t/s。数字都是实测,无估算。
五、配置
--mem-fraction-static 0.90
--speculative-num-draft-tokens 8
--speculative-dflash-block-size 8
--tp-size 2 --kv-cache-dtype fp8_e5m2
--chunked-prefill-size 2048 --max-running-requests 2完整报告和踩坑记录见回复区,欢迎交流。
-
还真就是王者了。NV显卡价格继续飙升。3090算是守门员了。
-
@applejuice 「200 多 decode」解释:楼上已经说到点子上了——底层前向速率恒定约 31 次/秒,速度 = 31 × 每次前向接受的 token 数。DFLASH 一次草稿 8 个 token,主模型一次前向验证。代码场景一次能接受 6.69 个 → 207 t/s;中文散文只接受 2.06 个 → 52.7 t/s。「249 新高峰」是并发 2 路的 aggregate 口径,单路端到端(含 prefill)一直是 82-88 t/s,两个口径不矛盾。
@starryskyknight 我有個問題, 如果是兩張 3090 跑張量並行, 那是不是比單張 48G的 4090 跑的快很多呢? 就好像兩根小容量內存組雙通道, 比一根大容量內存還要快。
-
@starryskyknight 我有個問題, 如果是兩張 3090 跑張量並行, 那是不是比單張 48G的 4090 跑的快很多呢? 就好像兩根小容量內存組雙通道, 比一根大容量內存還要快。
@johnnybegood 应该4090更快 而且架构更新
-
@johnnybegood 你这个就是我说的 3090 会跌成3080速度
基本上3080 就差3090 10+% 算力
sglang vllm 都不能分配算力 都是平均分配现在还不知道我们跟有nvlink 的测试有什么不同
如果楼主是用thinking 模式 就跟甩我们没有nvlink一大截了之前我用nvlink 没有mtp 没有dflash 速度差个10-15%
现在用dflash 如果是直接叠加 差真的很多 -
这就对了
nvlink 帮助还是很大的
不懂之前ai 怎样测的单路(四场景) — Single stream, 512 tokens, t=0, 3 rounds
Scenario Decode (t/s) TTFT (s) Tokens / chunk 代码生成 (Code generation) 141.1 0.149 3.64 英文技术论述 (English technical) 104.0 0.136 2.69 中文常规对话 (Chinese chat) 76.8 0.135 1.99 中文散文 (Chinese essay) 63.8 0.137 1.67 并发 2 路(代码场景) — Two concurrent streams, code prompts
Case Aggregate decode (t/s) n 同 prompt(radix 命中) Same prompt, radix hit 207.1 3 不同 prompt Different prompts 203.9 3 Setup: SGLang, Qwen3.8-27B AWQ, TP=2 on 2× RTX 3090, DFLASH speculative decoding (8 draft tokens, block size 8), fp8_e5m2 KV cache, max_running_requests=2. AMD EPYC 7452, 62 GB RAM.
@applejuice 统一脚本收到, 跑了两轮 (rounds=2), 顺带把你的 thinking 疑问一起答了: 我回帖的 235.9 确实是 thinking 默认 ON (今天用你的脚本复测 ON=237.4, 完全印证). 关掉 thinking 之后, 我这边的数字:
thinking OFF (你的脚本, 同 prompt 同 t=0)
- 代码 270.2 (tok/chunk 5.38) | 英文 165.6 | 中文对话 129.2 | 散文 78.6
- 并发同 prompt: 518.4 | 并发不同: 550.8
对齐你 thinking OFF 的 246.7 / 429.7 / 402.4: 单路 +9.5%, 并发同 +20.6%, 并发不同 +36.9%.
有意思的是你的 accept rate 更高 (代码 6.32 vs 我 5.38), 但总速度我赢 -- 前向速率我 50 次/s, 你 39 次/s. 单路差距小 (9.5%) 是前向+接受率综合; 并发差距 20-37% 才是 NVLink 的主场: DFLASH 多路并发时 P2P 直走 NVLink 免过 PCIe, 纯硬件红利.
thinking ON 我这边的数据也贴上: 237.4 / 473.7 / 488.7 -- 开关在我这只差 ~13% (代码场景), draft 模型吃思考 token 的效率还行.
小建议: 脚本 payload 把 thinking 开关显式化 (chat_template_kwargs enable_thinking), 不然默认 ON/OFF 各家模型行为不同, 口径会打架.
Setup: SGLang 0bdc15d2 (今晨升级 main 最新), twolven-Qwen3.8-27B AWQ MTP, TP=2 NVLink, DFLASH2 block 8, fp8 KV.
-
@starryskyknight 我有個問題, 如果是兩張 3090 跑張量並行, 那是不是比單張 48G的 4090 跑的快很多呢? 就好像兩根小容量內存組雙通道, 比一根大容量內存還要快。
@johnnybegood 对齐口径后你的两个问题都有答案了:
3090+3080 = 我的 69.8%, 不到 80% (188.5/270.2, 同 thinking OFF 同脚本). 原因两个都是硬伤:
- 前向被 3080 拖住: TP=2 平均分算力, 你 33 次/s vs 我 50 次/s -- TP 同步永远等最慢那张卡, 楼上 applejuice 说的没错, 平均分配救不了
- 20GB 锁死 mem-fraction: SGLang 按最小卡分配, draft 模型和 KV cache 空间受限, CUDA graph 可能也开不起来
"哪里怪怪的": 你的 TTFT (0.098s) 反而比我快, 是 radix 命中+短 prompt, 但 decode 阶段短板效应全部显形.
双 3090 vs 单张 48G 4090: 数据说话 -- 单张 4090 跑 27B AWQ+MTP 公开实测 ~65 t/s (24G 版), 48G 版会好一些但撑死 ~130. 我这套 thinking OFF 代码 270, 并发 550. 4090 单卡优势是省电省心, 绝对速度不在一个量级. 内存双通道那个类比不成立: TP=2 是张量切分不是带宽叠加, 两张 3090 不等于一张 4090x2.
-
@johnnybegood 你的很好了 毕竟花的钱有分别
我比较惨 钱都花了 但是nvlink 用不上
为了有比较好的速度 还花多4000 上epyc 7452 -
@johnnybegood 你的很好了 毕竟花的钱有分别
我比较惨 钱都花了 但是nvlink 用不上
为了有比较好的速度 还花多4000 上epyc 7452@applejuice 现在看来双卡3080 20g 可能是性价比最高的了。 内存够大, 性能也能打。 现在3080 20G咸鱼才 3600左右, 两块还不如一块3090贵。
-
@applejuice 现在看来双卡3080 20g 可能是性价比最高的了。 内存够大, 性能也能打。 现在3080 20G咸鱼才 3600左右, 两块还不如一块3090贵。
@johnnybegood 要是我知道nvlink 用不了 我都选择3080
但是现在已经上车了 没得回头 -
无聊测试350w, thinking mode off
Decode (tokens/s, median of 3, spread in brackets)
Case 350 W tok/chunk 中文散文 72.7 (72.4–72.8) 2.06 中文常规对话 78.4 (78.3–78.5) 1.94 English technical 126.0 (126.0–126.1) 2.97 Code generation 284.9 (284.8–285.0) 6.69 Prefill (tokens/s)
Prompt tokens 350 W TTFT 19 206 1966 9.8 s 43 036 1781 24.2 s 88 907 1499 59.3 s 181 307 1141 159.0 s -
,A applejuice 引用了 此主题
-
双 3090 NVLink 王者配置再度进化:SGLang dev507 + DFLASH2 全面复测
接上一篇 133 t/s 的实测帖,这周做了两件大事:引擎升级 506 个 commits + 跑完整优化矩阵。结论先行:王者配置没变,但藏着一个被内存挤掉的关键优化,挖出来后并发冲到 249 t/s 新高峰。
一、升级了什么
项目 旧 新 SGLang 8/26 快照 dev507(9/4 最新,506 commits) 关键修复 - f60bc73c DFLASH TP 状态分歧修复 Kernel 7.0.0-30 7.0.0-31.31(swap_cgroup 崩溃修复版) FlashInfer 0.6.17 0.6.18 其中 DFLASH TP 修复很重要:多轮长对话时 draft 模型状态会在 TP rank 间漂移,输出有潜在漂移风险,这版根除了。
二、挖出的隐藏瓶颈
升级后翻启动日志,发现一行:
Disable DFLASH draft cuda graph because only 0.93 GB GPU memory is available
draft 模型的 CUDA graph 一直被内存挤掉!mem-fraction 0.94 留给 draft graph 的空间只剩 0.93GB,不够。降到 0.90 后:
- draft cuda graph 启用
- selector decode(greedy + sampling)也折进 graph
三、优化矩阵实测(6 项,单变量)
测试 结果 判定 mem-fraction 0.94→0.90 draft graph 启用 采纳 dflash-block-size 16 并发 -28% 否决 dflash-block-size 4 JSON 场景 -18% 否决 tokenizer-worker-num 4 无增益 否决 fastokens(Rust tokenizer) 需 Rust toolchain 不适用 speculative-adaptive 仅支持 EAGLE 不适用 踩坑:DFLASH 强制 draft-tokens == block-size,不匹配直接 ValueError。
四、最终数据(2x3090 NVLink TP2 + AWQ INT4 + DFLASH2)
指标 数据 并发 aggregate(2 路) 219.1 avg / 249.1 峰 JSON 工具调用并发 280.5 avg(峰 303.7) 短 prompt 单路 297.3 代码生成 254.0 中文散文 85.4 vs 旧帖 133 t/s:+65% ~ +87%。
口径声明:并发 = 2 路 aggregate(双路同时生成的总吞吐);单路端到端(含 prefill)一直 82-88 t/s。数字都是实测,无估算。
五、配置
--mem-fraction-static 0.90
--speculative-num-draft-tokens 8
--speculative-dflash-block-size 8
--tp-size 2 --kv-cache-dtype fp8_e5m2
--chunked-prefill-size 2048 --max-running-requests 2完整报告和踩坑记录见回复区,欢迎交流。
@starryskyknight 同配置复测来了,先报数据再请教硬件。
环境:SGLang 0.5.19 + twolven AWQ-MTP + incoai DFlash2(8/8, fp8_e5m2, mem 0.88, mamba 20, TP2, NCCL_P2P_DISABLE=1),你的统一脚本,t=0 / 512 tok / 3 rounds,thinking OFF:
单路 decode:代码 218.0 t/s(LRU prompt)、TTFT 0.06-0.10s
并发 2 路:同 prompt 355.2、不同 prompt 367.1想对齐几个硬件问题:
- 我这边 2×3090 走主板 PCIe x8+x8(i7-13700K,Z690),无 NVLink,NCCL P2P 已禁用。你那边 3090 是 x16 还是 x8?NVLink 之外主板的 PCIe 分配是?
- CPU 是什么?我在猜并发 355 vs 你 440 的差距主要来自 CPU/PCIe lanes(我是 24 线程桌面平台),不是模型或 SGLang 参数——想验证这个假设。
- mem-fraction 你用 0.90,我试过 0.88(给 draft graph 多点空间)单路略好,0.93 会挤 draft graph。你 0.90 时 draft graph avail mem 大概多少?
applejuice 兄的 EPYC 7452 数据(无 NVLink)我这边基本复现了(单路 218 vs 他 246,约 9% 差),所以怀疑剩的差距是纯平台带宽/核数。
-
@starryskyknight 同配置复测来了,先报数据再请教硬件。
环境:SGLang 0.5.19 + twolven AWQ-MTP + incoai DFlash2(8/8, fp8_e5m2, mem 0.88, mamba 20, TP2, NCCL_P2P_DISABLE=1),你的统一脚本,t=0 / 512 tok / 3 rounds,thinking OFF:
单路 decode:代码 218.0 t/s(LRU prompt)、TTFT 0.06-0.10s
并发 2 路:同 prompt 355.2、不同 prompt 367.1想对齐几个硬件问题:
- 我这边 2×3090 走主板 PCIe x8+x8(i7-13700K,Z690),无 NVLink,NCCL P2P 已禁用。你那边 3090 是 x16 还是 x8?NVLink 之外主板的 PCIe 分配是?
- CPU 是什么?我在猜并发 355 vs 你 440 的差距主要来自 CPU/PCIe lanes(我是 24 线程桌面平台),不是模型或 SGLang 参数——想验证这个假设。
- mem-fraction 你用 0.90,我试过 0.88(给 draft graph 多点空间)单路略好,0.93 会挤 draft graph。你 0.90 时 draft graph avail mem 大概多少?
applejuice 兄的 EPYC 7452 数据(无 NVLink)我这边基本复现了(单路 218 vs 他 246,约 9% 差),所以怀疑剩的差距是纯平台带宽/核数。
-
@Don-zhu 我这 3090+3080的奇葩组合Decode都到 199 t/s 了。。。
@johnnybegood 说明我的配置还有问题,我让deepseek再调 :)
-
@starryskyknight 同配置复测来了,先报数据再请教硬件。
环境:SGLang 0.5.19 + twolven AWQ-MTP + incoai DFlash2(8/8, fp8_e5m2, mem 0.88, mamba 20, TP2, NCCL_P2P_DISABLE=1),你的统一脚本,t=0 / 512 tok / 3 rounds,thinking OFF:
单路 decode:代码 218.0 t/s(LRU prompt)、TTFT 0.06-0.10s
并发 2 路:同 prompt 355.2、不同 prompt 367.1想对齐几个硬件问题:
- 我这边 2×3090 走主板 PCIe x8+x8(i7-13700K,Z690),无 NVLink,NCCL P2P 已禁用。你那边 3090 是 x16 还是 x8?NVLink 之外主板的 PCIe 分配是?
- CPU 是什么?我在猜并发 355 vs 你 440 的差距主要来自 CPU/PCIe lanes(我是 24 线程桌面平台),不是模型或 SGLang 参数——想验证这个假设。
- mem-fraction 你用 0.90,我试过 0.88(给 draft graph 多点空间)单路略好,0.93 会挤 draft graph。你 0.90 时 draft graph avail mem 大概多少?
applejuice 兄的 EPYC 7452 数据(无 NVLink)我这边基本复现了(单路 218 vs 他 246,约 9% 差),所以怀疑剩的差距是纯平台带宽/核数。
@Don-zhu prefill 多少
楼主是nvlink pcie 也不重要了,因为都显卡数据交换 经过nvlink 不经过pcie
你的是x8 我的是x16 分别就是这里
单路 decode,rounds=3、max_tokens=512、temperature=0, NCCL_P2P_DISABLE=0, NCCL_P2P_LEVEL=SYS, disable_custom_all_reduce=true, 245w 功耗
场景 ON (t/s) OFF (t/s) Δ decode tok/chunk ON tok/chunk OFF 代码生成 147.6 258.1 +74.9% 3.64 6.32 英文技术论述 109.2 147.2 +34.8% 2.69 3.63 中文常规对话 80.5 103.5 +28.6% 1.99 2.56 中文散文 67.0 64.3 −4.0% 1.67 1.60 并发 2 路 aggregate decode(代码场景):
并发模式 ON (t/s) OFF (t/s) Δ OFF 相对单路 同 prompt(radix 命中) 232.2 463.7 +99.7% ×1.80 不同 prompt 221.1 433.2 +95.9% ×1.68 Prefill
唯一随机 prompt(规避 radix 命中),
max_tokens=1,rounds=2 取最快。
固定开销标定 411 ms(极短 prompt 最小 TTFT,5 次取 min)。实际 prompt_tokens TTFT (s) 原始 t/s 扣除开销 t/s 2,160 1.529 1413 1933
️8,502 5.167 1645 1788 16,982 10.304 1648 1717 33,703 21.657 1556 1586 67,642 49.198 1375 1386 137,835 124.093 1111 1114

