跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(LCZ-Blue)
  • 不使用皮肤
  • LCZ-Green
  • LCZ-Blue
  • LCZ-Black
折叠
品牌标识

抡锤者

首页 版块 标签 硬件 AI 广场
starryskyknightS

starryskyknight

@starryskyknight
德高望重
取消关注 关注
关于
帖子
49
主题
6
分享
0
群组
1
粉丝
2
关注
2

帖子

最新 最佳 有争议的

  • 双 3090 NVLink + vLLM 半年实测:Qwen3.6-27B 解码 128 tok/s,并发 4 用户 258 tok/s
    starryskyknightS starryskyknight

    一开始在油管看老特,后来来到抡槌,追踪了很久,论坛刚成立时也加入了。

    一直希望能贡献点什么,但自己不是什么技术大神,只能每天看帖学习。论坛里很多大神分享的资料也给了我很大帮助。

    自己的平台也是这样搭建起来的:

    • 本地 LLM:Qwen3.6-27B
    • 生图:FLUX.2 Dex
    • 生视频:LTX-2.3
    • 声音:VoxCPM2

    除了人在海外,实在弄不到刘悦大神的整合包,没法继续玩下去,其他目前运行得还算稳定。

    请我的 Agent 整理一下,和各位前辈交流。我尽量要求内容有干货和实测数据,不要 AI 幻觉。

    希望能抛砖引玉,让其他使用相同配置的朋友一起讨论。
    也希望各位大神看到我的平台有可以优化的地方时,不吝赐教。

    ~~下面正文 ~~

    折腾了半年,双 3090 NVLink + vLLM 终于调稳定了。

    先上数据(全部实测):

    • Decode:128.2 tok/s(单请求,MTP n=3)
    • Prefill:约 2094 tok/s(2K prompt,根据 TTFT 反推)
    • 并发:4 个用户同时使用,系统吞吐 258 tok/s(饱和点)
    • 配置:Qwen3.6-27B-heretic AutoRound INT4,vLLM 0.22.1,TP=2
    • KV cache:fp8_e5m2,block-size 16,max-num-batched-tokens 16384
    • 功耗锁定 290W,单卡显存 23.4GB,256K 上下文稳定

    硬件配置:

    • MSI Suprim X 3090 + ASUS TUF 3090(LINKUP PCIe 5.0 Riser 90cm)
    • 七彩虹 NVLink Bridge(4 links,双向 112 GB/s)
    • Core Ultra 9 285K / ProArt Z890-CREATOR / 64GB DDR5
    • Ubuntu 26.04 裸机运行

    踩过的坑(有记录的才写):

      • vision_config:Qwen3.6 的 config.json 带有 vision 字段,纯文本部署 vLLM 会崩溃,物理删除这些字段后才稳定。
      • block-size 16 + batched 16384:vLLM 默认 block 32 + batched 2048 对 27B 过于保守,改为 16/16384 后,256K 上下文才稳定。
      • FP8 KV cache:从 BF16 改为 FP8_E5M2 后,KV 内存节省一半,256K 上下文得以运行(A/B 实测无性能损失)。
      • ComfyUI offloading bug:视频模式存在已知问题,使用 T2V 模式绕过。

    实测补充(与社区传闻不同的地方):

    MTP n=1/2/3 扫描:128.7 / 128.9 / 128.9 t/s,差异 <1%;但 MTP 接受率达 77.7%,说明 MTP 本身很有效,n 值影响较小。

    NVLink 开启 vs 关闭(2K prompt):decode 128.2 vs 128.8,差异在误差范围内。

    并发饱和:4 个用户达到 258 t/s,8 个用户开始排队(延迟从 3 秒升至 5 秒)。

    FP8 KV:在 Ampere 上无性能衰减,纯粹节省显存。

    NVLink 到底值不值?

    坦白说:2K prompt + decode 场景下,NVLink 差异很小。

    长 prompt 场景理论上 prefill 通过 NVLink 会更有优势;32K 冷 prefill 的 TTFT 实测为 15.2 秒。

    已经有双卡:加一条桥值得。还在考虑要不要买第二张:单卡大显存更省心。

    欢迎交流,互相抄作业~
    如果有什么建议给小弟,或者需要咨询配置,欢迎一起讨论。

    诚实声明(全部)

    1. Prefill 均为根据 TTFT 反推的近似值(vLLM TTFT 含固定开销),如需精确值,可使用官方 benchmark_serving.py。
    2. 32K prefill 仅有 1 次冷启动数据(run2/3 受到 prefix cache 命中污染,已排除)。
      未采用
    3. NVLink OFF 的 32K 数据(存在缓存污染)。
    4. MTP 接受率为 vLLM metrics 的累计值(涵盖本次测试及历史流量)。
    5. 无第三方对照数据(Derek/Sanj 的方法不同,无法直接比较;Andrew Zhu 的来源已失效,已删除)。
    AI硬件 rtx3090 多卡部署 qwen-27b vllm

  • 双 3090 NVLink 跑 Qwen3.8-27B:vLLM + AWQ-INT4 + MTP,工具调用 130 t/s、262K 上下文全开(附完整配置与 8 个踩坑)
    starryskyknightS starryskyknight

    之前发过 Qwen3.6-27B 的实测(双 3090 NVLink,128K 上下文),这次模型换代到 3.8,同时把整套部署重新调了一遍。楼上那篇 7900XTX + llama.cpp Vulkan 写得很好,这篇是它的 NVIDIA 对照版:两条路线都跑到 130 t/s 上下,但方法完全不同。

    先讲结论,再讲一个我们绕最久的坑。

    1. 先给结论

    工作负载 decode 速度(本文实测)
    工具调用(JSON 输出) 129.0 – 132.8 t/s
    Python 代码生成 126.2 – 127.0 t/s
    短 prompt(计数类) 130.3 – 134.7 t/s
    中文散文创作 69.5 – 77.3 t/s
    prefill(39K token 非重复) ≈1,423 t/s(TTFT 27.4s)
    prefill(32K token 重复、cache 命中) TTFT 1.38s
    • 硬件:2× RTX 3090 24GB + NVLink 桥接(拓扑 NV4)
    • 软件:vLLM 0.27.1(CUDA 路线)
    • 模型:shawnw3i-Huihui-Qwen3.8-27B-abliterated-AWQ-MTP(AWQ-INT4,社群量化版)
    • 上下文:262,144 全开,每卡显存占用约 22.7GB

    白话:t/s = 每秒吐几个字;MTP = 用便宜「草稿头」先猜下一步再验证的加速技术,猜得准就快。本文的数字都附测法。

    一句话:MTP 方法名用对,速度从 65 直接翻到 130;这篇主要就是讲这件事。

    2. 硬件与软件环境

    硬件

    • 2× NVIDIA RTX 3090 24GB,NVLink 桥接(nvidia-smi topo -m 显示 NV4,双卡真并行)
    • P2P 状态 OK(nvidia-smi topo -p2p r)——双卡直连通讯无阻,TP=2 才值得玩
    • CPU:decode 是 GPU 显存频宽瓶颈、CPU 影响小,但别太老(prefill 和调度会吃到 CPU)

    软件

    • vLLM 0.27.1(pip 安装,独立 venv)
    • flashinfer(VLLM_USE_FLASHINFER_SAMPLER=1 走 flashinfer 取样器)
    • CUDA 12.x / PyTorch 对应版本

    模型

    • shawnw3i-Huihui-Qwen3.8-27B-abliterated-AWQ-MTP:社群 AWQ-INT4 量化版,内含 MTP head
    • 同型公开版:shawnw3i/Qwen3.8-27B-AWQ-MTP;基底:huihui-ai/Huihui-Qwen3.8-27B-abliterated
    • 挑它:INT4 ≈ 每卡 18GB 级显存,262K 塞得下,MTP head 完整保留

    3. 完整配置(可直接复制)

    export VLLM_USE_FLASHINFER_SAMPLER=1
    export FLASHINFER_DISABLE_VERSION_CHECK=1
    export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
    
    python -m vllm.entrypoints.openai.api_server \
      --model /path/to/shawnw3i-Huihui-Qwen3.8-27B-abliterated-AWQ-MTP \
      --served-model-name shawnw3i \
      --host 0.0.0.0 --port 8000 \
      --dtype bfloat16 \
      --quantization awq_marlin \
      --kv-cache-dtype fp8_e4m3 \
      --tensor-parallel-size 2 \
      --max-model-len 262144 \
      --max-num-seqs 1 \
      --max-num-batched-tokens 4096 \
      --gpu-memory-utilization 0.95 \
      --enable-chunked-prefill \
      --block-size 16 \
      --enable-prefix-caching \
      --disable-custom-all-reduce \
      --scheduling-policy priority \
      --speculative-config '{"method":"qwen3_5_mtp","num_speculative_tokens":3}' \
      --reasoning-parser qwen3 \
      --tool-call-parser qwen3_xml \
      --default-chat-template-kwargs '{"enable_thinking": true, "preserve_thinking": true}'
    

    逐行解释关键参数

    参数 为什么是这个值
    --quantization awq_marlin Ampere(30 系)跑 Marlin kernel 比原生 AWQ 快;INT4 让 262K 塞得进 24GB×2
    --kv-cache-dtype fp8_e4m3 KV cache 量化,省下的显存全拿去开上下文
    --max-model-len 262144 模型原生上限全开。开太大启动时直接 OOM 或 silent 降级
    --max-num-seqs 1 单请求独占双卡——agent 场景(一次一使用者)最佳解
    --max-num-batched-tokens 4096 chunked prefill 块大小,太大 TTFT 升、太小吞吐降
    --enable-prefix-caching agent 神技:每轮 system prompt + 工具 schema 完全相同,radix cache 直接命中。对齐实测:相同 16K prompt 连发,TTFT 7.24s → 0.87s(8.3×,见第 6 节)
    --disable-custom-all-reduce 这行不能拔。我们 A/B 实测:拔掉(改用 vLLM 自订 allreduce,nvidia-smi topo -p2p r 显示 P2P OK)→ CUDA graph capture 阶段 worker 无声崩溃,systemd 重启循环连崩 3 次;加回 → 稳定 130 t/s。GeForce 的 NVLink P2P 对 vLLM CUSTOM AR 不稳,NCCL 才是稳路。细节见踩坑 #8
    --speculative-config '{"method":"qwen3_5_mtp","num_speculative_tokens":3}' 全文最重要的参数,见第 4 节
    --reasoning-parser qwen3 + enable_thinking 保留思考模式(agent 场景值回票价)
    --tool-call-parser qwen3_xml 工具呼叫解析,vLLM 原生 structured output
    --default-chat-template-kwargs '{"enable_thinking": true, "preserve_thinking": true}' 开思考链+保留思考 token。注意:这是 chat template 的 kwargs,不是独立旗标
    VLLM_USE_FLASHINFER_SAMPLER=1 flashinfer 取样比默认快
    FLASHINFER_DISABLE_VERSION_CHECK=1 flashinfer-cubin 与 python 打包版本号不一致的官方认可绕行

    4. 🔴 全文核心:MTP 方法名用错 = MTP 从头到尾没启动

    这是我们绕最久、也最想救人的坑。

    vLLM 的 MTP 方法名是按模型架构世代分的:

    方法名 适用架构
    qwen3_5_mtp Qwen3.5 / Qwen3.6 / Qwen3.8 共用(vLLM Recipes 官网明载)
    qwen3_next_mtp Qwen3-Next 专用,别的型号用了直接无效

    我们一开始写成 qwen3_next_mtp,vLLM 不报错、不警告,静默当成普通推理跑——速度一直卡在 65 t/s 上下,还以为「这模型就这样」。这比报错更危险:报错你会去查,静默你会以为这就是天花板。

    三种方式确认 MTP 有没有真的启动:

    1. 启动日志找 speculative 相关行(有没有载入 MTP head)
    2. 看 index.json 的 weight_map 里有没有 mtp tensors
    3. 终极判据:速度——有 MTP 130 t/s vs 无 MTP ~65 t/s,差一倍,不可能认错

    官方参考:vLLM Recipes — Qwen3.8-27B(明文:MTP head 拼法 qwen3_5_mtp)

    5. 为什么论坛的数字差两倍

    同一台机器、同一组参数,只换测试题目:

    题目 decode
    中文散文创作(600 tok) 69.5 – 77.3 t/s
    Python 代码生成 126.2 – 127.0 t/s
    工具调用 JSON 129.0 – 132.8 t/s

    差距接近一倍,参数一个字没改。 原因和 7900XTX 那篇说的一样:MTP 的速度取决于草稿猜得准不准。创作类文本下一步几乎不可预测,接受率砍半,速度腰斩。

    所以「双 3090 跑 Qwen3.8 有几 t/s」没有标准答案——先问「跑什么题目」。 我们日常是 Hermes agent(工具调用+长 system prompt),130 t/s 就是真实体感;写小说的人体感会是 70。

    测法(照抄可复现):/v1/chat/completions,max_tokens=600,每型跑 3 次、3 次全报,decode = completion_tokens / 耗时。工具调用三次原始值:129.0 / 130.1 / 132.8(中位数 130.1)——标题的 130 取中位数,不是单次峰值。题目原文:

    • 计数:「Count from 1 to 100, one number per line.」
    • 代码:「Write a Python function that implements quicksort with comments. Code only, no explanation.」
    • 中文散文:「写一篇关于东京夏天的游记,连续写不要停」(temperature 0.7)
    • 工具调用:「Output only a JSON object describing an API call to get weather for Tokyo」

    6. prefill 实测 + prefix caching 的 8.3 倍

    测试 TTFT 说明
    39K 非重复文本(cache 不命中) 27.4s → prefill ≈ 1,423 t/s 冷启动基准
    16K 非重复文本,第一次(对照组) 7.24s 对齐对照
    16K 完全相同 prompt,第二次(cache 命中) 0.87s 加速 8.3×

    注:早期试过「同一行重复 4000 次」的病态 prompt,TTFT 1.38s ≈ 20×——但那是 cache 的极端上限、不是真实场景,本文只采用上表 token 数对齐的 8.3×。

    两点心得:

    1. prefill 别用短 prompt 测——固定开销会量出荒谬数字,用 ≥2K token。
    2. agent 场景 prefix caching 是白送的性能:agent 每一轮的 system prompt + 工具 schema + 对话历史都是逐字相同的前缀,radix cache 全中,第二轮起 TTFT 压到 1 秒内(上表 0.87s 就是真实模式)。vLLM 官方对「低并发延迟敏感」建议关它配 MTP-1,但那是「每次 prompt 都不一样」的批次服务;agent 对话反而 cache 全中,实测保留才快。

    6.5 MTP 接受率衰减 + 功耗实测

    有人问「MTP 在长上下文会不会失效」——我们直接量了三点(测法:/metrics 的 spec_decode_num_accepted_tokens_total ÷ spec_decode_num_draft_tokens_total 前后差):

    上下文长度 MTP 接受率 decode(同题目) TTFT
    ~2K token 51.9% 99.5 t/s 1.0s
    ~36K token 48.4% 90.0 t/s 17.6s
    ~139K token 47.4% 75.7 t/s 99.1s
    • 接受率衰减非常平缓(51.9→47.4%),MTP 到 139K 上下文还稳得住,这是我们敢把 262K 全开的信心来源
    • decode 速度随上下文下降(99.5→75.7)主要是 KV cache 读取变大,属正常物理
    • 三个草稿位置的累计接受率:第 1 个 71%、第 2 个 49%、第 3 个 37%——想调 num_speculative_tokens 的可以先看这组:猜 2 个性价比最高(71%+49% 都会用到)

    功耗(nvidia-smi 实测,双卡 350W 上限):

    • 空载:每卡 ~17-19W
    • 满载(prefill 与 decode 阶段皆是):每卡 ~347W,双卡峰值 ~695W
    • 换算:116-130 t/s ÷ 695W ≈ 0.18 t/s/W(写作任务约 0.11)——想算电费的楼友自己乘电价

    7. 踩坑记录(8 个,vLLM/CUDA 专属)

    1. MTP 方法名:qwen3_5_mtp ≠ qwen3_next_mtp,用错静默失效(第 4 节)。第一大坑
    2. torch_compile_cache 污染:换过模型后残留 compile cache 会让新模型 segfault,换模型必清
    3. alias 名称匹配:--served-model-name 要和呼叫端 100% 一致,否则 404 → fallback 跑去别的模型
    4. 同时只跑一个 instance:双卡 48GB,两个 27B instance 直接 OOM。单 instance 铁律
    5. AWQ + torch compile 会死 worker:AWQ 别开 compile(VLLM_TORCH_COMPILE_LEVEL=0)
    6. thinking 吃 decode 预算:本表所有数字都含 thinking token。关掉会更高,但 agent 场景思考品质重要
    7. 262K 不是免费的:context 全开代表长对话 prefill 线性上升(27.4s),日常无感因为 prefix caching 挡前面
    8. --disable-custom-all-reduce 不能拔(本周 A/B 实测):想说 nvidia-smi topo -p2p r 都 OK 了,不如拔了让 vLLM 用 CUSTOM allreduce——结果 CUDA graph capture 阶段 worker 无声崩溃(log 停在 warmup、无错误输出),systemd 重启循环连崩 3 次;加回 flag 走 NCCL → 稳定。教训:GeForce 的 NVLink P2P ≠ vLLM CUSTOM AR 可用;「拔掉理论上更快」实测是「拔掉直接死」

    8. 和旧贴文(Qwen3.6 时期)的对比

    之前(Qwen3.6-27B) 现在(Qwen3.8-27B)
    量化 GPTQ Marlin INT4 AWQ Marlin INT4
    加速 无 MTP MTP ×3 正确启用
    工具调用 ~67 t/s 129-132.8 t/s
    上下文 262K(已全开) 262K(维持)

    说明:67 是「上一代 GPTQ 的基准」,65 是「这一代 MTP 踩坑时的速度」,两者接近纯属巧合;130 才是修正后的真实水准。从 67/65 到 130,几乎全部来自 MTP 修正——这也再次证明第 4 节那个坑有多贵。(7 t/s 与 67 t/s 数字出自旧贴 topic/322 实测原文)

    9. 社群对照(同双 3090 硬件的公开数据)

    Reddit r/LocalLLaMA 有一串「Optimized Dual 3090 Qwen3.8 Quant」,同款硬件跑同一模型的公开结果,把我们摆进去是这样:

    来源 配置 decode @8K/1 stream
    jbro1985 INT8-W8A16、无 NVLink(Oculink x4)、TP2 59.7 t/s(接受率 53-57%)
    Schlopper INT8-W8A16、max-num-seqs 6 87 t/s(2 streams 平均,接受率 77%)
    本文 AWQ-INT4、NVLink NV4、max-num-seqs 1 129-134 t/s

    社群当时的判断(jbro1985 原话大意):「3.8 比 3.6 慢主要是权重读取频宽(14.7 vs 9.4 GiB/卡),等 3.8-INT4 出来就会追回来」——本文 129-134 正是这个预言的实证:INT4 不只省显存,权重频宽砍半直接反映在 decode 速度。

    10. 诚实揭露:未测项目

    • 并发多请求(我们是 max-num-seqs=1 单使用者)
    • 其他量化格式(GPTQ/FBGEMM 没在同模型重测)
    • 长上下文「大海捞针」品质(262K 极限注意力品质)
    • num_speculative_tokens(1/2/3/4)完整扫描(沿用 3 就没再扫)
    • --disable-custom-all-reduce 的 A/B ✅ 已测:见踩坑 #8(拔掉=崩溃循环,保留=稳定)
    • 接受率衰减已测三点(§6.5),但 139K→262K 尾段还没量

    11. 下一步想做

    • MTP num_speculative_tokens 完整扫描
    • 开 thinking vs 关 thinking 的速度/品质对照
    • 长上下文针测

    有问题直接在楼里问,参数哪一行看不懂、或想照抄但显存对不上,都可以聊。第 10 节未测清单还有很多可以挖——有更优的配置直接打脸我们也没关系,那就是发这篇文的目的。

    LLM讨论区 rtx3090 vllm qwen-27b

  • 2x3090 NVLink 王者配置再度进化——SGLang dev507 + DFLASH2 全面复测,并发 249 t/s 新高峰
    starryskyknightS starryskyknight

    双 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

    完整报告和踩坑记录见回复区,欢迎交流。

    LLM讨论区 rtx3090 sg-lang dflash

  • 双 3090 NVLink 从vLLM 换到 SGLang 跑 Qwen3.8-27B:实测 108 t/s,262K 上下文全开
    starryskyknightS starryskyknight

    双 3090 NVLink 从 vLLM 换到 SGLang 跑 Qwen3.8-27B:实测 108 t/s,262K 上下文全开

    之前在论坛发过一篇双 3090 跑 Qwen3.6 的帖子(vLLM 世代,p50 大概 61 t/s)。板主说要我试试看sglang , 之前试了一直没成功。 今天花了一些时间,这几个月把整套东西迁到了 SGLang,顺便换上了 Qwen3.8-27B 的 AWQ 去审查版,速度翻了一截,踩了一堆坑,整理出来给大家参考,也请各位大神帮忙看看还有什么优化空间。

    一句话结论

    双 3090 + NVLink + SGLang 0.5.18 + Qwen3.8-27B AWQ W4A16 + EAGLE 投机解码,常规对话 88 t/s,中文散文 178 t/s,accept rate 0.95,262K 上下文全开无压力。比之前 vLLM + Qwen3.6 世代快了约 40%。

    硬件配置

    项目 内容
    GPU 2× RTX 3090 24GB(NVLink 4-link,56.25 GB/s/方向)
    CPU / RAM Core Ultra 285K / 64GB DDR5
    系统 Ubuntu 26.04,CUDA 13
    引擎 SGLang 0.5.18(pip editable)
    模型 twolven/Qwen3.8-27B-abliterated-AWQ-MTP(18.7GB + MTP head 849MB)

    为什么从 vLLM 换到 SGLang

    三个原因:

    1. Radix cache:多轮对话的前缀复用,第二轮起 prefill 基本免费
    2. EAGLE 投机解码整合度:Qwen3.8 的 MTP head 直接用 EAGLE 跑,accept rate 实测 0.95(accept len 3.85,接近官方 DFlash2 验证水平)
    3. 官方 Cookbook:SGLang 官方文档现在有 Qwen3.8-27B 专属部署指南(docs.sglang.io/cookbook/autoregressive/Qwen/Qwen3.8-27B),照着调就行

    现役启动参数(可直接抄)

    python3 -m sglang.launch_server \
      --model-path /path/to/twolven-Qwen3.8-27B-abliterated-AWQ-MTP \
      --served-model-name qwen3.8-27b \
      --tp-size 2 \
      --trust-remote-code \
      --mem-fraction-static 0.94 \
      --kv-cache-dtype fp8_e5m2 \
      --chunked-prefill-size 2048 \
      --max-prefill-tokens 8192 \
      --max-running-requests 2 \
      --enable-cache-report \
      --mamba-track-interval 2048 \
      --speculative-algorithm EAGLE \
      --speculative-num-steps 3 \
      --speculative-eagle-topk 1 \
      --speculative-num-draft-tokens 4 \
      --reasoning-parser qwen3 \
      --tool-call-parser qwen3_coder
    

    几个关键点:

    • EAGLE 3/1/4 是官方 Cookbook 的 MTP 推荐配方(NEXTN 就是 EAGLE 的 alias,同一个算法)
    • --kv-cache-dtype fp8_e5m2 只压 KV cache,不碰权重——3090 是 Ampere 架构,没有原生 FP8 硬件,FP8 权重量化在 30 系上是假命题(白皮书里 GA102 Tensor Core 只有 FP16/BF16/TF32/INT8/INT4)
    • 权重走 AWQ W4A16 group128,单用户解码是带宽瓶颈,W4 读一半字节 = 2 倍速,AWQ 还保护 1% 关键权重

    实测数据(附测法)

    场景 速度 测法
    常规对话(游记创作) 88 t/s 600 tokens 输出计时,3 次取中位
    中文散文 178 t/s 2048 tokens 输出
    工具调用 3.2–4.2s 完整轮 带 tool schema 的完整往返
    多轮 radix 命中 第二轮 2.77s 同前缀第二轮含 300 tokens 输出
    思考档 medium 6.1 ms/tok reasoning_effort 三档实测,medium 是甜点

    踩过的坑(省你几天时间)

    1. 模板坑:上游模型的 chat template 有工具调用陷阱(静默丢 tool 定义),换 froggeric/Qwen-Fixed-Chat-Templates 的 v22.4 解决
    2. parser 必设:--reasoning-parser qwen3 --tool-call-parser qwen3_coder 不设的话 thinking 标签会污染输出
    3. MTP head 必须与主权重同源:试过一个 obliterated 版(借了别的 abliterated 模型的 MTP head),EAGLE accept 直接崩,速度掉到 47 t/s——比不开投机还慢
    4. HiCache 别乱开:单 agent 场景 L2 命中≈0,开着输出速度砍半(论坛里也有同测);多 agent 共享前缀的生产线再考虑
    5. 模型切换走 systemd:SSH 后台启动的进程断线会被 SIGHUP 干掉
    6. 30 系别折腾 FP8/NVFP4:都是给 Hopper/Blackwell 的bolded text

    现在的问题,想请大神指点

    1. mamba 系参数(mamba-full-memory-ratio 等)在 TP=2 双卡下的最佳值,官方 calculator 是单卡口径,双卡怎么算?
    2. HiCache 在「多 agent 并发」场景的实测,谁跑过?命中率和速度折损大概什么量级?
    3. 还有没有比 EAGLE K=3 更好的投机解码配置?

    数据都附了测法,欢迎复现打脸。配置有任何问题也请直接说,谢谢各位。

    AI Agent rtx3090 sg-lang qwen-27b

  • 二张3090通过nvlink跑大模型,有人尝试过吗?
    starryskyknightS starryskyknight

    可以參考我的貼文,最近我又優化 用DFlash2 133t/s(峰值 161) 我再更新上來

    AI硬件 rtx3090 多卡部署

  • 双 3090 实测 SGLang HiCache:write_through 不会真的重用,write_back 才会(混合 GDN + 投机解码栈)
    starryskyknightS starryskyknight

    双 3090 实测 SGLang HiCache:write_through 不会真的重用,write_back 才会(混合 GDN + 投机解码栈)

    TL;DR

    • 在「混合线性注意力(GDN/SSM)+ 投机解码」的模型栈上,SGLang HiCache 用预设 write_through 时:主机池确实会被写满,但逐出后的旧前缀不会被重用——重发同一段 4 万 token 上下文,耗时跟冷启动一模一样(15.4s)。
    • 改成 --hicache-write-policy write_back 后,同一探测:15.4s → 0.4s(38×),再发一次 0.1s。
    • 如果你的 HiCache「开了没感觉」,先看这两个开关再下结论。

    环境

    项目 值
    硬件 2×RTX 3090 NVLink(48GB 合并)
    模型 Qwen3.8-27B(hybrid:16 层 Gated Attention + 48 层 Gated DeltaNet)+ DFlash2 草稿
    引擎 SGLang main(2026-09 dev),TP=2、fp8_e4m3 KV、上下文 262K
    附加 KV 池 354,788 tokens;host 池 709,577 tokens(+mamba/draft 池)

    现象 A:write_through(预设)——池在涨,但没有复用

    开启 --enable-hierarchical-cache 后:

    • 启动正常:UnifiedRadixCache hybrid_ssm=True hicache_attached=True
    • 主机池确实增长:sglang:hicache_host_used_tokens 一路涨到 592,658 / 709,577
    • 但做「逐出-回流」探测(见下)时:重取耗时 = 冷启动耗时(7.3s / 15.4s 一模一样),log 里零 prefetch 纪录

    探测法(推荐大家用同一招验证有没有真的复用)

    1. 冷跑一段 40K token 的唯一上下文 R(记 wall)
    2. 灌 10 段各 40K 的唯一内容作逐出压力(> 装置池容量)
    3. 重发同一段 R → 比 wall;再发一次 → 0.1s 级才算正常

    实测记录:

    R-cold  : 15.4s
    ... 10×40K 逐出 ...
    R-rehost: 15.5s   ← write_through:与冷启动无异
    R-again : 0.1s    ← 说明装置端机制没坏,是 host 没接手
    

    现象 B:write_back——复用立刻生效

    只加一个开关:

    --enable-hierarchical-cache \
    --hicache-write-policy write_back
    

    同一探测:

    R-cold  : 15.4s
    ... 14×40K 逐出 ...
    R-rehost: 0.4s    ← 38×(从 host 回载)
    R-again : 0.1s
    

    hicache_host_used_tokens:20,221 → 453,970 → 486,725(逐出时备份的语义生效)

    完整启动参数(我们现行主力)

    sglang serve \
      --model-path <Qwen3.8-27B-abliterated-AWQ-MTP> \
      --trust-remote-code \
      --tp-size 2 --mem-fraction-static 0.90 \
      --kv-cache-dtype fp8_e4m3 \
      --chunked-prefill-size 4096 --max-prefill-tokens 16384 \
      --max-running-requests 3 --schedule-policy hrrn \
      --max-mamba-cache-size 15 --mamba-full-memory-ratio 0.9 \
      --speculative-algorithm DFLASH \
      --speculative-draft-model-path <DFlash2-W4A16> \
      --speculative-num-draft-tokens 8 --speculative-dflash-block-size 8 \
      --enable-hierarchical-cache --hicache-write-policy write_back
    

    注意事项

    • 内存:host 池 ≈ 11.6GB/rank(709,577 tokens)+ mamba 池 2.39GB + draft 池 3.63GB;60GB 机器两 rank 合计 ≈35GB,请留好余裕(可用 --hicache-ratio / --hicache-size 调整)
    • 我们在 SGLang dev 版上测试;版本不同行为可能不同
    • 我们没挖到 write_through 不复用的根因(疑似非同步备份路径语义差异),欢迎懂内部机制的指点

    同场加映(同日其他实测,负结果也贴)

    • GSP-RM 关闭(driver 610、proprietary):prefill 16K/50K 与 decode 全部持平(+1.5~2% 噪声级),未重现社群 +58% 的 prefill 增益 → 已回滚。环境:SGLang+610 vs 原案例 vLLM+595,供参考。
    • KV cache fp8_e4m3 vs e5m2:单流 +25~30%(12/12 样本 116–134 vs 旧 90 级)——如果你还在 e5m2,值得换。
    • chunked-prefill 2048→4096 + max-prefill 8192→16384:batch prefill +4~8.5%。
    • --schedule-policy hrrn:长短混排时短请求延迟 −22%(13.5s→10.5s),吞吐无损。
    LLM讨论区

  • ornith-1.0-35b Q8 與 Qwen3.6-35b-a3b Q8....大家覺的哪個更優秀?
    starryskyknightS starryskyknight

    目前就是 使用qwen 3 6 27b吧 等 ornith 1.0 31b dense 出來
    再討論這個問題比較有意義

    随便聊聊 qwen-27b 量化

  • 2x3090 NVLink 王者配置再度进化——SGLang dev507 + DFLASH2 全面复测,并发 249 t/s 新高峰
    starryskyknightS starryskyknight

    @stormaround
    关于「DFLASH 牺牲视觉」:不会,正好今天实测验证了。DFLASH 只参与 decode 阶段(草稿出 token),图像编码在 prefill 阶段完成,两段正交。twolven 这个 AWQ 版视觉塔保留 bf16 未量化,模型卡原文就有 "vision still works"。今天 curl 直传图片实测:读图 100% 正确(形状/颜色/文字全对),同时段 DFLASH accept rate 0.28-0.40 照常跑,零冲突。真实照片测试连法文成分表都能正确 OCR。

    LLM讨论区 rtx3090 sg-lang dflash

  • 2x3090 NVLink 王者配置再度进化——SGLang dev507 + DFLASH2 全面复测,并发 249 t/s 新高峰
    starryskyknightS starryskyknight

    @applejuice 你这数据有意思,我今早刚按统一口径复测了一轮,先对齐再下结论。

    1. 口径真相:429.7 vs 249 不能直接比

    我旧帖「并发 219.1 avg / 249.1 峰」是端到端含 prefill(两路同 prompt、威士忌长文、t=0.7、max 1024),你的 429.7 是纯 decode 重叠口径。我早上用你的口径重测,服务没退化。

    1. 统一口径复测(t=0、max 512、代码场景、streaming + include_usage)

    · 单路 decode(代码):235.9 t/s(4.7 tok/chunk)
    · 并发 2 路·同 prompt(radix 命中):449.0 t/s
    · 并发 2 路·不同 prompt:333.8 / 380.3 t/s(overlap 1.5×)
    · 中文散文单路:89.3 t/s · 散文并发 2 路:181.8 t/s(overlap 2.0×)

    同 prompt 并发我 449 略超你 429.7;不同 prompt 并发我 overlap 只有 1.5×,你 1.89× —— 这块想找你对齐几个细节。

    1. 想找你要的数据(抄作业用)

    ① 你并发测试两路 prompt 是相同还是不同?相同(radix 命中)的话你的 429.7 对应我 449;不同还能 1.89× 的话,你的调度比我强,我认抄。
    ② 完整硬件:GPU 型号/数量、CPU、内存、PCIe 代数通道。你从没贴过配置,nvlink 翻车前你是什么卡?
    ③ expandable_segments:True + mem 0.93 还能开 draft graph 吗?我 0.94 时 draft graph 内存不足(差 0.93GB),降到 0.90 才开。你 0.93 能开我就立刻抄。
    ④ --sampling-backend pytorch vs 默认 flashinfer 有实测差异吗?

    1. 统一测试法提案

    温度 0、max_tokens 512、TTFT / decode / 端到端三个数分开报、并发注明两路 prompt 同异 + radix 状态、贴 SGLang commit。你我各跑一轮贴数据。

    你我代码场景 tok/chunk 都在 4.5-6.7 区间、底层前向速率都 38 次/s 附近,模型层已经对齐,剩下就是调度层的戏,值得挖。

    LLM讨论区 rtx3090 sg-lang dflash

  • Codex/Hermes/DSH使用心得分享,DeepSeek V4.1 Flash + Harness是当下生产力性价比答案,Qwen 27B 搭配DSH也能干活!
    starryskyknightS starryskyknight

    看完YT 直接安裝了 非常好用

    AI Agent codex hermes dsharness
  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组