sskj/README.md

15 KiB
Raw Permalink Blame History

sskj — 多平台大模型推理性能基准测试项目

更新2026-08-31 18:22:43 CST:完成 Kimi-K3 PP8 + DFlash 八节点 PD 部署验证。P 601-604 为 TP4/PP8/EP4D 605-608 为 TP32/PP1/EP4均使用 FlashInfer MXFP4、BF16 KV、8K Chunk。固定 GSM8K 64 题 C1/C8 共 128/128 请求成功,答案检查全部通过且无输出截断;按 verify 步数加权的接受长度为 6.4211/6.5158,整体 Output TPS 为 33.38/117.56。修复评测容器的数据集路径,保留原失败与续跑证据;结果、完整服务日志及资源清理记录已归档。历史 5-shot 与前 5 题重叠,本轮作为部署回归而非独立准确率评测。详见 实现与结果

更新2026-08-31 17:50:51 CST:修复 Kimi 混合注意力缓存池在 PD 初始化时缺少 end_layer 的兼容问题,按完整注意力层偏移和本地层数确定传输范围,保留普通池与 layer-shard 路径。新增回归后 24 项 CPU 测试通过八节点修复镜像摘要一致P 组已完成预热和 Mooncake 注册,健康检查返回 200D 组正在验证启动。当前 Run 为 pd-dflash-kvbounds1-20260831-1740,尚无 GSM8K 验收结果。详见 experiments/pro6000/kimi3_pro6000_pd_dflash_validation/README.md

更新2026-08-31 17:05:00 CST:新增 Kimi-K3 PP8 + DFlash PD 适配验证入口。基于 SGLang PR #33863 固定源码,接通 PP 分段 hidden 投影、P 侧 prompt draft KV 生成、D 侧输入生命周期与 TP4→TP32 的 draft GQA KV 传输,保留 Kimi SM120 FlashInfer MXFP4 接入。修复 P 普通预热误带 DFlash verify metadata 的启动问题23 项 CPU 回归通过;修复镜像已同步 601608服务级验证正在进行尚无 GSM8K 结果。配置为 P TP4/PP8/EP4、D TP32/PP1/EP4、BF16 KV、8K Chunk计划固定 64 题 C1/C8。详见 experiments/pro6000/kimi3_pro6000_pd_dflash_validation/README.md

更新2026-08-27 13:53:26 CST:完成 Kimi-K3 八节点标准 PD 第一阶段。P 组 601-604 使用 PP8×TP4×EP4、FlashInfer MXFP4、Chunk 8KD 组 605-608 使用 PP1×TP32×EP32、Marlin通过 Mooncake 0.3.12.post1 和 4 Rail RDMA 传输;统一 P/D page_size=6416K→1 与 16K→512 的 C1/C8 共 91/91 请求成功。代表结果16K→1 C8 Input TPS 6364.31、TTFT P50/P95 20.555/21.345 秒16K→512 C8 TPOT P50/P95 63.20/66.55 ms。详见 experiments/pro6000/kimi3_pro6000_pd_pp8_standard/README.md

更新2026-08-20 10:13:01 CST:完成 Kimi-K3 Prefill TP Reduce Scatter 可行性审计并停止该方向。K3 的 MLA 输出门控仍依赖完整 7168 维 hidden且 69/93 层为 KDA保留或恢复 gate hidden 后,原 hidden All-Reduce 无法消除并新增 2112 维 latent All-Gather估算通信量反增约 14.7%。研究原型仅保留为否决证据,不进入四节点实验或上游 PR后续转向 MoE A2A 与 Pipeline Parallelism。详见 experiments/pro6000/kimi3_pro6000_sglang_tp_reduce_scatter_prefill/README.md

更新2026-08-19 16:51:43 CST:完成 Kimi-K3 / RTX 6000D / SGLang Prefill MoE backend 交付文档收敛与 Chunk=4K 补测。四节点 TP32×EP4、16K→1、C=8/16 下 12/12 重复、480/480 请求成功FlashInfer 相对 Marlin 提升约 9.8% Input TPS、降低约 9.0% TTFT。结合 4K/8K/16K 全部结果,最终推荐保持 flashinfer_mxfp4 + chunked_prefill_size=8192

更新2026-08-19 14:23:52 CST601 的 GitLab SSH key 已生效,内部 Kimi-K3 SM120 审计分支已推送至 qqtang/sskj:hzy-kimi-k3-sm120-flashinfer-mxfp4。远端已有普通分支 hzy,因此不能创建 hzy/... ref最终采用无层级冲突的分支名GitHub SGLang feature 分支保持不变。

更新2026-08-19 13:58:50 CST:用户同步 GitHub fork 后,将 Kimi-K3 SM120 SGLang 的 7 个提交无冲突重放到最新 main 593b1a9range-diff 逐提交确认补丁等价;最终 Draft HEAD b95b534 已推送至 ACEEE-1222/sglang:hzy/kimi-k3-sm120-flashinfer-mxfp4。在 601 统一验证镜像中重跑最终 HEAD 的语法与定向回归,结果为 10 passed, 3 deselected;代表性四机性能数据保留,不重复消耗 GPU。

更新2026-08-19 13:07:48 CST:完成 Kimi-K3 SM120 SGLang Draft PR 的最终代表点验收。基于 SGLang 300c87a 与 FlashInfer #4460 b525c51,在 601-604 四节点 TP32×EP4 上完成 16K→1、C=8、Chunk=8K 的 Marlin/FlashInfer 各 3 次 A/B240/240 请求成功。FlashInfer 的 Input TPS 中位数提升 10.96%TTFT P50/P95 分别下降 9.91%/9.92%。公开 PR Checklist 已全部勾选,轻量汇总和原始证据索引已归档。

更新2026-08-19 10:45:18 CST:新增 Kimi-K3 SM120 SGLang Draft PR 的单点代表性验收入口。使用精确 SGLang 300c87a、FlashInfer #4460 实现 b525c51 和统一镜像,在 601-604 四节点 TP32×EP4 上仅复测 16K→1、C=8、Chunk=8K 的 Marlin/FlashInfer A/B各 3 次重复;完整命令、镜像身份、原始日志和汇总统一落入单个 Run 目录。

更新2026-08-18 23:00:42 CST:完成依赖 FlashInfer #4460 的 SGLang Draft PR 收敛。确认不提交任何 FlashInfer PR也不 vendor 或 pin 未合并 kernel在 601 GPU6 上从 #4460 源码构建 FlashInfer 0.6.18 wheelSGLang 定向测试 8/8 通过。Draft 标题、依赖、兼容策略、测试和四机 EP4 数据见 experiments/pro6000/kimi3_pro6000_sglang_sm120_flashinfer_mxfp4/SGLANG_DRAFT_PR.md

更新2026-08-18 22:21:40 CST:完成 Kimi-K3 SM120 FlashInfer MXFP4 去重审计。确认 CUTLASS SiTU kernel 已由未合并的 FlashInfer PR #4460 实现,不再提交平行 kernelSGLang 贡献收敛为 Kimi gate/up 与 scale 布局、SiTU 4.0/25.0 参数映射、非连续输入和 SM120 attention-residual guard并保留 601-604 EP4 的全部服务级结果。详见 experiments/pro6000/kimi3_pro6000_sglang_sm120_flashinfer_mxfp4/UPSTREAM_DUPLICATION_AUDIT.md

更新2026-08-18 18:38:17 CST:完成 Kimi-K3 四节点 TP32×EP4 的真实 Prefill MoE backend 验收24/24 重复均 40/40 成功FlashInfer MXFP4 在 8K Chunk、C=8/16 下相对 Marlin 提升约 11% Input TPS、降低约 10% TTFT并确认 8K 优于 16K。实验默认 EP 改为 4补齐非连续 Prefill 输入与 FlashInfer 官方 SiTU 回归,详见 experiments/pro6000/kimi3_pro6000_sglang_sm120_flashinfer_mxfp4/README.md

更新2026-08-18 13:55:30 CSTKimi-K3 四节点 MoE backend 验收入口支持通过环境变量覆盖 EP size 及 backend/chunk/concurrency 子矩阵,用于先执行 TP32×EP4、16K Chunk、16K→1、C=16 的最大压力容量验证,同时保留默认 TP32×EP32 全矩阵。

更新2026-08-18 13:03:33 CSTPhase 5 候选镜像改为针对 Kimi 基础镜像原生 SGLang 源码应用最小兼容补丁,仅补齐 SM120 FlashInfer MXFP4 backend 分发、权重布局与 SiTU 激活映射,避免整体替换新版 Python 包造成 sglang-kernel 版本错配。

更新2026-08-18 12:24:19 CST:新增 Kimi-K3 / 601-604 / SGLang TP32×EP32 的真实 Prefill MoE backend 验收实验;固定比较 Marlin 与 FlashInfer MXFP4 在 16K→1、C=8/16、Chunk=8K/16K 下的 TTFT、E2E 与 Input TPS并提供四节点一致候选镜像构建、原始证据和自动汇总详见 experiments/pro6000/kimi3_pro6000_sglang_tp32ep32_moe_backend_prefill/README.md

更新2026-08-17 11:56:47 CST:完成 Kimi-K3 / RTX PRO 6000D / SGLang FlashInfer MXFP4 MoE Phase 2 correctness harnessSwiGLU 控制矩阵 8/8 通过,覆盖 edge routing、EP global ID、NaN/Inf、确定性、CUDA Graph 和 Kimi 真尺寸SiTU 目标矩阵 8/8 稳定复现同一 C++ 缺口,详见 experiments/pro6000/kimi3_pro6000_sglang_sm120_flashinfer_mxfp4/README.md

历史更新见 git log。项目目的与工作流见下方。 项目目的当新显卡GPU/NPU到货时用最短时间完成大模型在该平台上的推理性能评估与部署配置选型。 当前模型DeepSeek-V4-FlashFP8 / INT8后续接入 GLM5.2完全复用本项目的实验与报告流程。 新平台接入 SOPdocs/NEW_PLATFORM_GUIDE.md

这个项目解决什么问题

  1. 新卡快速评估:新平台到货后,按 SOP 复制实验目录、改少量配置,即可跑起与既有平台口径一致的 benchmark横向可比。
  2. 部署配置选型:通过 TP×DP 并行矩阵 + 自适应并发搜索,回答"该平台上哪种并行配置在什么并发下满足 SLO、吞吐最高"。
  3. 数据资产化每轮实验产出结构化结果jsonl/csv/manifest汇总成飞书性能报告并回填多维表格形成可检索的历史数据库。

标准工作流(全流程)

① 跑实验        experiments/<platform>/<experiment>/run_adaptive_concurrency*.sh
                └─ 公共搜索逻辑: scripts/common/adaptive_bench_lib.sh
② 落盘          adaptive_results/<run_id>/
                └─ adaptive_points.jsonl / adaptive_shapes.jsonl / adaptive_summary.* / run_manifest.json
③ 分析          用 Python 从 jsonl 实算禁止目测SLO 口径见 docs/SLO_STANDARDS.md
④ 飞书报告      按飞书 wiki「性能报告编写指南README」写到「显卡性能报告/<平台>」节点下
⑤ 回填多维表格  飞书「模型推理适配 Bench 迭代跟踪」:每成功探测点一行
  • SLO 口径S2 层DSV4-Flash / GLM5.2 均适用):TTFT P95 < 3sTPOT P95 < 50ms,严格小于。详见 docs/SLO_STANDARDS.md
  • 报告编写规范(章节骨架、分析口径、发布流程)以飞书 wiki「显卡性能报告 / 性能报告编写指南README」为准。
  • 多维表格每行 = 一个成功探测点config、Concurrency、Throughput、Input/Output TPS、TTFT/TPOT/E2E P95、SLO达标状态、开发文档链接

目录结构

仓库的目录布局、scripts/common/ 组件职责、结果命名规范与 results.json schema统一见 docs/EXPERIMENT_GUIDE.md(单一权威来源)与 docs/BENCHMARK_WORKFLOW.md

实验索引

TP/DP matrix + 自适应并发(当前主流形态)

实验 说明
experiments/h20/dsv4_h20_vllm_tp_dp_matrix/ H20 + vLLMTP2/DP4、TP4/DP2、TP8/DP1
experiments/h20/dsv4_h20_sglang_tp_dp_matrix/ H20 + SGLang同上
experiments/h200/dsv4_h200_vllm_tp_dp_matrix/ H200 + vLLM
experiments/h200/dsv4_h200_sglang_tp_dp_matrix/ H200 + SGLang
experiments/p800/dsv4_p800_sglang_tp_dp_matrix/ P800 + SGLangINT8TP2/DP4 启动 OOM 无数据,见 config.env 注释)
experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/ RTX 6000D + vLLM
experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/ RTX 6000D + SGLang
experiments/pro6000/kimi3_pro6000_sglang_tp32ep32/ RTX 6000D + SGLangKimi-K3TP32×EP32部署手册见 docs/KIMI_K3_DEPLOY.md
experiments/pro6000/kimi3_pro6000_sglang_tp32ep32_moe_backend_prefill/ RTX 6000D + SGLangKimi-K3 真实 Prefill 的 Marlin/FlashInfer MXFP4 与 Chunk 8K/16K 对照
experiments/pro6000/kimi3_pro6000_sglang_tp_reduce_scatter_prefill/ Kimi-K3 Prefill TP Reduce Scatter 可行性审计;因 MLA gate 与 KDA 依赖完整 hidden结论为不推荐继续
experiments/pro6000/kimi3_pro6000_pd_pp8_standard/ Kimi-K3 八节点标准 PDP=PP8/TP4/EP4、D=PP1/TP32/EP32、Mooncake 4 Rail RDMA含 16K→1/512 C1/C8 原始证据
experiments/pro6000/kimi3_pro6000_pd_rdma/ RTX 6000D + SGLangKimi-K3 PD 分离MoonCake RDMA8 节点,见 deploy_pd.sh + docs/KIMI_K3_DEPLOY.md 附录 B

每个目录内:run_bench.sh 跑固定并发矩阵;run_adaptive_concurrency.sh 从 C=1 指数倍增搜饱和点;run_adaptive_concurrency_add16.sh 从 C=16 线性 +16 步进、带 TTFT SLO 停止与回退(当前主力用法,见 experiments/ADAPTIVE_CONCURRENCY_USAGE.md)。

其他实验H200 老形态 & 专项)

实验 说明
experiments/h200/dsv4_h200_sglang/ …/dsv4_h200_vllm/ H200 单引擎 baseline
experiments/h200/dsv4_h200_sglang_vs_vllm/ H200 引擎控制变量对比
experiments/h200/dsv4_h200_dspark/ …/dsv4_h200_vllm_dspark_vs_default/ DSpark 投机解码相关
experiments/h200/dsv4_h200_vllm_mtp_vs_default/ vLLM MTP 对比
experiments/h200/dsv4_h200_vllm_tp{2,4,8}_custom_bench/ 自定义压测客户端(多服务负载均衡)
experiments/h200/dsv4_h200_max_context_length/ …/dsv4_h200_long_context_matrix/ …/dsv4_h200_256k_4k_probe/ …/dsv4_h200_64k_sglang_vs_vllm/ 长上下文专项
experiments/p800/dsv4_p800_sglang/ …/dsv4_p800_max_context_length/ …/dsv4_p800_long_context_matrix/ …/dsv4_p800_256k_4k_probe/ P800 baseline 与长上下文专项
experiments/TEMPLATE/ 老式固定场景实验模板

快速复现

以 H20 vLLM 自适应并发搜索为例(其他平台同理,换目录即可):

# 1. dry-run只打印搜索计划不加载模型
cd experiments/h20/dsv4_h20_vllm_tp_dp_matrix
DRY_RUN=1 bash run_adaptive_concurrency_add16.sh

# 2. 单组合冒烟:只测 TP=8、1K/128并发上限 8
RUN_ID=smoke-$(date +%Y%m%d-%H%M%S) \
TP_LIST="8" ISL_LIST="1024" OSL_LIST="128" GRID_LIMIT=1 SEARCH_MAX_CONCURRENCY=8 \
bash run_adaptive_concurrency_add16.sh

# 3. 正式跑(放 tmux
tmux new-session -d -s h20-vllm-adaptive \
  "cd $(pwd) && bash run_adaptive_concurrency_add16.sh"

更多用法(断点续跑 RESUME_RUN_ID、常用覆盖参数experiments/ADAPTIVE_CONCURRENCY_USAGE.md

新平台 / 新模型接入

  • 新显卡:按 docs/NEW_PLATFORM_GUIDE.md 执行,核心动作是复制 experiments/h20/dsv4_h20_<engine>_tp_dp_matrix、改 config.env / adaptive_config.env / matrix.json 三件套,再加 platforms/<chip>.env
  • 新模型GLM5.2:复用同一实验目录结构,新增 experiments/<platform>/glm52_<platform>_<engine>_tp_dp_matrix/改模型路径、量化与引擎启动参数即可SLO 口径、报告流程、多维表格结构不变。

环境要求

  • 公共bash、Python 3、sglang.bench_serving 压测客户端Docker 或 venv绘图分析用 envs/charts/matplotlib
  • 各平台的镜像 / venv / 模型路径见对应实验目录的 config.envplatforms/<chip>.env模型与数据集路径是机器相关的,换机器时按实际路径调整。
  • 环境搭建规范见 envs/README.mdenvs/UV_ENV_SETUP.md

运维与部署分层

  • 模型团队用 deploy/profiles/<platform>/<model>-<engine>.envpython -m sskj.deploy start|stop|status 管理服务生命周期。
  • 运维只跑测试:python -m sskj.bench run --url http://<host>:<port> --platform <platform> --experiment <name> --profile smoke|matrix
  • 运维手册见 ops/README.md,统一测试层复用现有 scripts/common/parse_backend.py 等指标口径。

注意事项

  • 提交内容:实验代码 + 最终产物results.json / report.md / adaptive 的 jsonl 与 summary日志、raw_outputs、gpu_logs 不入库(.gitignore 已排除)。
  • 仓库会clone到多台机器实验脚本内引用公共组件一律用 ${SCRIPT_DIR}/../../../scripts/commonTEMPLATE 为 ../../),不要写绝对路径。