Repository navigation
RTX 5090 + Core Ultra 9 285K,Strata v0.1.43.1 / IQ2_XS,adaptive overlap 开关对照 #2218
Description
摘要
2026-10-13 在单卡桌面 RTX 5090 + Core Ultra 9 285K 的 Linux 机器上,对同一个 Strata v0.1.43.1 本地 CUDA build 测试 STRATA_ADAPT_OVERLAP=0/1。采用8类短/中/长输入、6轮配对,共96次主测;另有预热及热前缀诊断,总计156次请求。
结果:没有测出稳定的总体提速或退化。 各题材等权的配对几何平均,ON 相对 OFF 为 +0.27%;探索性逐轮 bootstrap 95% 区间约 −0.07%~+0.59%,包含零。
1. 硬件与软件
| 项目 | 配置/实测 |
|---|---|
| CPU | Intel Core Ultra 9 285K,24核24线程,单NUMA节点 |
| CPU指令集 | AVX2 / AVX-VNNI;没有AVX-512,引擎日志确认CPU专家使用AVX2 |
| GPU | 单张桌面 NVIDIA GeForce RTX 5090,GPU 0,计算能力 sm_120 |
| 显存 | 标称32GB;nvidia-smi报告32607 MiB |
| GPU功耗上限 | 600 W;本次测试未更改功耗上限 |
| 内存 | 约64GB级配置;OS报告MemTotal为66,790,989,824 bytes,约62.20 GiB;物理条容量/频率未独立读取 |
| Swap | 8 GiB;没有关闭swap或清理系统文件缓存 |
| 存储 | Samsung SSD 9100 PRO 2TB,NVMe;模型所在根分区为ext4 |
| PCIe | 查询到最大Gen5、x16;测试启动H2D probe约53.7–53.8 GB/s。未连续记录负载中的link gen,不能拿空闲Gen1快照当测试链路速度 |
| OS | Ubuntu 24.04.2 LTS,Linux 7.0.0-38-generic,x86_64 |
| NVIDIA驱动 | 595.99.02 |
| CUDA工具链 | CUDA 13.0,NVCC V13.0.88 |
| Python | 3.12.3 |
| Strata | v0.1.43.1,commit a0116b2782a5b82622358c04a06496485d12b2d6 |
| 引擎来源 | 本地源码编译,Release、CUDA ON、sm_120、native experts ON;HIP/SYCL OFF |
| 视觉 | 关闭 |
主板、内存频率/时序、CPU功耗限制、精确GGUF下载revision和负载期间其他进程清单未记录,不做猜测。没有使用多GPU、WSL2、远程专家或多客户端并发。
2. 模型及有效运行配置
模型:Qwen3.8-Flash-Next-GSQ-RCO,IQ2_XS,不是Coder、Swift或Unsloth变体。
GGUF文件:
Qwen3.8-Flash-Next-GSQ-RCO-IQ2_XS-00001-of-00002.ggufQwen3.8-Flash-Next-GSQ-RCO-IQ2_XS-00002-of-00002.gguf
相关运行状态:
--expert-cache auto:12次启动均为 18105 slots / 24.32 GiB VRAM,从同一保存的expert profile初始化。- 专家RAM arena约 33.02 GiB,启动时cudaHostRegister成功;未配置显式hugetlb页,日志请求transparent huge pages。
--prefill auto:实际 8192-token prompt chunks、384-slot ring。--max-context 262144,--kv int8,--kv-resident 32768;其余KV保存在约 3.09 GiB pinned RAM。--spec 4 --spec-min-p 0.5 --mtp <DATA_DIR>/mtp/rt;已有draft vocabulary 106299 tokens;MTP载入约835 MiB VRAM。--pool-workers 15,另加host参与任务;启动日志host固定CPU0,workers在CPU1–15。- 未显式设置
--vram-reserve-mib;日志cache sizing使用默认700 MiB reserve及draft-head余量。 - 未修改adaptive默认:
adapt_every=4、adapt_swaps=96、adapt_decay=0.7。 - 两臂都保留v0.1.43.1默认callback warmup;ON日志确认stream-ordered signaling,未使用
STRATA_ADAPT_SIGNAL=host。 - 日志显示自动native Q5_K head路径;本次未另行启用experimental-speed-projection。
- 启动后剩余显存约 410 MiB,测试采样最低 311 MiB;有低显存警告,未为跑分改变缓存容量或context。
等价的引擎参数
以下是Python服务启动的引擎命令:
# 关闭:0;开启:1。必须启动新的引擎进程,不能靠HTTP请求即时切换。
export STRATA_ADAPT_OVERLAP=0
DATA_DIR=/path/to/Strata-data
./engine/strata --serve \
--pack "$DATA_DIR/packs/iq2_xs" \
--native "$DATA_DIR/models/IQ2_XS/Qwen3.8-Flash-Next-GSQ-RCO-IQ2_XS-00001-of-00002.gguf" \
--ple-gguf "$DATA_DIR/models/IQ2_XS/Qwen3.8-Flash-Next-GSQ-RCO-IQ2_XS-00002-of-00002.gguf" \
--expert-profile ./data/expert-profile.bin \
--expert-cache auto \
--prefill auto \
--spec 4 \
--spec-min-p 0.5 \
--mtp "$DATA_DIR/mtp/rt" \
--max-context 262144 \
--kv int8 \
--kv-resident 32768 \
--pool-workers 15engine/strata --serve本身是供Python服务使用的引擎协议,不是独立HTTP服务器。实际benchmark HTTP服务启动形状如下,config保留上述engine args、tokenizer、GPU0及CUDA库目录:
STRATA_ADAPT_OVERLAP=0 .venv/bin/python serve/server.py \
--engine strata \
--config ./strata-iq2_xs.json \
--port 8081 \
--host 127.0.0.1另一臂将0改为1。API密钥保持启用,没有放入命令行或本报告。若config中的env也设置了overlap,会覆盖父进程环境;本机没有该覆盖。需要检查日志确认实际ON/OFF,不只是检查环境变量。
3. 测试方法
- 全部材料在本地生成并保存,不包含真实用户对话,没有外部dataset下载:中文解释、英文代码、故事续写、JSON日志、英文文档、长代码、多主题中文文档、长英文代码与文档。
- 使用实际tokenizer与chat template拟合输入长度:256、384、256、2048、4096、16384、65536、102400 tokens。token数包含渲染后的聊天模板。
- 每类6组配对,每组同样输入字节、相同请求参数和顺序;不同轮使用不同早期标签,标签在一组ON/OFF中一致。
- 会话顺序为 OFF→ON / ON→OFF / OFF→ON / ON→OFF / OFF→ON / ON→OFF,共12次启动。每轮旋转题材顺序,轮内两臂保持一致。
- 每次启动恢复同一保存profile,做相同256-token预热;然后依次测8类输入。它们是预热后逐步适应的混合工作负载,不是每条prompt都独立冷启动。
- 没有
--expert-profile-save,不让benchmark输出覆盖原profile。 - 请求参数:
temperature=0,seed=20261013,reasoning_effort=none,enable_thinking=false,max_tokens=512,SSE streaming。正常EOS,不禁用EOS、不强制最小输出长度。 - 96次主测实际均达到512输出tokens,cache_n全部为0。总计2,296,320输入tokens和49,152输出tokens。
- 另做短代码与64K中文的热前缀测试:先prime,再原样repeat,单独统计。12次预热、96主测、24 prime、24 repeat,共156次请求。
- 读入/生成速率使用API的引擎
prompt_per_second和predicted_per_second;TTFT由流式客户端从发送请求到第一段非空文本计算,忽略空delta/keepalive;总耗时为客户端wall time。不把总耗时拿来计算decode tok/s。 - 模型加载不计入请求时序;没有清Linux文件缓存,载入过程通常约12秒。整个运行加恢复约17.1分钟,数据准备另计。
- 约每秒采样GPU温度、频率、功耗、VRAM及系统MemAvailable/swap。没有锁定GPU时钟或改变功耗上限。核心采样2895–2985 MHz,GPU温度46–70℃。
4. 主测:decode
速度单位tok/s。两臂数字为6次测量的中位数[min–max]。配对变化先对每轮计算(ON/OFF−1)×100%,再取6轮中位数,不是两列中位数相除。
| 题材 | 输入tokens | OFF中位[min–max] | ON中位[min–max] | 配对变化中位 | ON胜出 |
|---|---|---|---|---|---|
| 中文解释 | 256 | 207.3 [197.1–214.2] | 205.8 [196.0–212.8] | −0.86% | 2/6 |
| 英文代码 | 384 | 266.5 [253.2–278.0] | 266.1 [261.7–270.6] | −0.49% | 3/6 |
| 中文故事 | 256 | 186.9 [180.1–190.2] | 185.4 [182.5–193.0] | +0.17% | 3/6 |
| 结构化日志 | 2048 | 248.2 [235.9–265.6] | 251.2 [231.8–261.3] | +0.20% | 3/6 |
| 英文归纳 | 4096 | 209.9 [205.0–223.8] | 213.6 [204.5–227.6] | +0.32% | 4/6 |
| 技术代码 | 16384 | 223.2 [212.0–231.1] | 227.7 [212.2–231.0] | +0.38% | 4/6 |
| 中文长文 | 65536 | 192.6 [187.5–197.7] | 194.5 [184.2–199.3] | +0.67% | 5/6 |
| 英文代码文档 | 102400 | 214.7 [210.1–230.8] | 218.1 [209.3–230.1] | +0.73% | 4/6 |
分组汇总
下面是各题材/各轮等权的配对几何平均变化,不按输入token数量加权:
| 分组 | ON相对OFF |
|---|---|
| 短输入,3类 | −0.02% |
| 中输入,2类 | +0.20% |
| 长输入,3类 | +0.60% |
| 全部8类 | +0.27% |
六轮总体变化分别为 −0.20%、+0.66%、+0.71%、−0.38%、+0.47%、+0.38%。主测48组配对中,ON更快28组,OFF更快20组。单题材单轮差异可达−8.31%~+6.19%,远大于总体+0.27%。不据此声称有确定的0.27%加速。
5. Prompt ingestion、TTFT与总耗时
下表为6次中位数;OFF / ON。读入速度是新读入token速率,所有主测无prefix reuse。
| 题材 | 读入tok/s,OFF / ON | TTFT秒,OFF / ON | 总耗时秒,OFF / ON |
|---|---|---|---|
| 中文解释256 | 991.3 / 993.6 | 0.273 / 0.273 | 2.777 / 2.753 |
| 英文代码384 | 1309.1 / 1317.6 | 0.307 / 0.305 | 2.216 / 2.240 |
| 中文故事256 | 962.6 / 982.3 | 0.281 / 0.276 | 3.030 / 3.044 |
| 日志2048 | 3753.7 / 3767.2 | 0.562 / 0.560 | 2.642 / 2.600 |
| 归纳4096 | 5022.4 / 5020.0 | 0.834 / 0.833 | 3.295 / 3.254 |
| 代码16384 | 6443.3 / 6442.9 | 2.567 / 2.565 | 4.883 / 4.856 |
| 中文65536 | 6552.7 / 6553.6 | 10.031 / 10.032 | 12.689 / 12.656 |
| 英文102400 | 6365.3 / 6366.5 | 16.147 / 16.145 | 18.526 / 18.480 |
长输入读入和TTFT几乎不受开关影响;100K输入的首token等待在两臂都约16.15秒。本次没有测出明显的长prompt读取加速。
6. 热前缀诊断(不计入主汇总)
| 案例 | 复用输入tokens | OFF / ON decode中位tok/s | 配对几何平均变化 | ON胜出 | OFF / ON TTFT中位秒 |
|---|---|---|---|---|---|
| 短代码 | 377 / 384 | 271.7 / 278.3 | +2.26% | 5/6 | 0.032 / 0.032 |
| 64K中文 | 65529 / 65536 | 194.6 / 193.7 | −1.02% | 2/6 | 0.050 / 0.049 |
短代码热请求有偏向ON的小收益,长中文则相反;不能据此推荐所有重复对话都开启。
7. 正确性、生成轨迹与稳定性限制
- 相同输入、temperature0、相同seed仍不保证逐token一致:主测只有 7/48组完整输出相同。
- 本次没有定位输出分歧的具体来源。浮点舍入、专家缓存计算路径及MTP/后续adaptive轨迹是需要考虑的因素,不能直接把分歧认定为overlap缺陷或质量退化。
- MTP累计draft接受率OFF约 66.93%、ON约 66.76%。每条原始timings保留offered/accepted counts。
- 这是实际自由生成workload,不是固定token replay的纯拷贝开销测试,也不是质量评测。截断到512 tokens的代码未进行功能单元测试。
- 专家cache命中率请求中位约 99.25%,范围96.8–99.8%。高命中与较快PCIe使可隐藏的传输份额可能有限,仅作为相容解释,不作因果证明。
- 全156请求完成,有低显存告警;未发现CUDA错误、OOM、non-finite logits或watchdog失败。
- 未测试开启thinking、图片、并发客户端、满262144-token输入、其他量化、不同显存预留或不同专家缓存规模。不能把本报告外推到所有5090或其他后端。
8. 所有主测decode原始值
每行6个数按配对轮次1~6排序,单位tok/s;同索引构成ON/OFF配对:
中文解释 OFF: 208.1, 198.0, 207.2, 214.2, 207.5, 197.1
中文解释 ON : 202.0, 206.5, 212.8, 210.3, 205.1, 196.0
英文代码 OFF: 253.2, 264.1, 266.9, 270.2, 278.0, 266.2
英文代码 ON : 264.4, 270.6, 261.7, 264.1, 267.9, 268.8
中文故事 OFF: 183.3, 180.1, 185.4, 188.4, 190.2, 190.1
中文故事 ON : 187.0, 183.9, 193.0, 182.5, 183.4, 186.9
结构化日志 OFF: 252.8, 265.6, 239.3, 259.4, 235.9, 243.5
结构化日志 ON : 231.8, 251.8, 238.5, 261.3, 250.5, 255.5
英文归纳 OFF: 223.8, 205.4, 205.0, 220.7, 210.8, 209.1
英文归纳 ON : 227.6, 216.2, 206.1, 220.7, 211.0, 204.5
技术代码 OFF: 221.8, 212.0, 214.1, 231.1, 224.5, 228.1
技术代码 ON : 217.0, 212.2, 226.0, 231.0, 229.3, 229.6
中文长文 OFF: 197.7, 192.6, 192.9, 187.5, 190.7, 192.5
中文长文 ON : 199.0, 184.2, 195.2, 188.2, 199.3, 193.8
英文代码文档 OFF: 212.7, 227.6, 230.8, 211.6, 210.1, 216.7
英文代码文档 ON : 220.4, 230.1, 217.7, 218.4, 209.3, 217.5
结论
在这台桌面RTX5090、IQ2_XS、高专家命中率及原有spec4/MTP配置上,adaptive overlap开关基本持平。部分题材略快、部分略慢,整体变化低于可稳定确认的程度。
Activity