diff --git a/.github/codeowner-signoff-verify-prompt.md b/.github/codeowner-signoff-verify-prompt.md index a7b4ace8df..de13be0990 100644 --- a/.github/codeowner-signoff-verify-prompt.md +++ b/.github/codeowner-signoff-verify-prompt.md @@ -123,31 +123,45 @@ not merely that the job is green: the same inference-engine image as this PR's config. FAIL if evals are skipped, failed, empty, below bar, or use a different image. Say exactly which condition applies. -## Check 3 — Recipe linked, MERGED, AND complete (SINGLE-NODE recipes only) -APPLICABILITY. Read this first. The recipe-link requirement covers SINGLE-NODE -recipes only, because the official upstream recipe sources (vLLM recipes, SGLang -cookbook) publish single-node serve commands. Disaggregated / multi-node -submissions have NO recipe-link requirement. If the PR's benchmark changes are -exclusively multi-node/disagg, with files under `inferencex-e2e/benchmarks/multi_node/**` (including -`srt-slurm-recipes/**`), and/or master-config entries with `multinode: true` or -`disagg: true`, and/or disagg frameworks (`dynamo-trt`, `dynamo-sglang`, -`sglang-disagg`, vLLM disagg, ATOM/ATOMesh disagg), report this check as -`N/A — disaggregated/multi-node submission; the recipe-link requirement applies to -single-node recipes only` and DO NOT fail it. A sign-off note like "this is a -disagg submission, no recipe update required" is a legitimate statement of that -fact, not a violation. If the PR touches BOTH single-node and multi-node recipes, -apply (a)/(b)/(c) below to the single-node portion only. - -The InferenceX "recipe" for this PR = the files it changes under -`inferencex-e2e/benchmarks/single_node/**` plus its entry in `inferencex-e2e/configs/*-master.yaml`. The merge -standard is: the community must be able to reproduce this benchmark from merged, -public upstream documentation. +## Check 3 — Production-useful recipe linked, MERGED, AND complete +APPLICABILITY. Read this first. The deciding factor is whether a serving setting +is useful in a realistic production deployment. The upstream recipe requirement +covers every affected vLLM/SGLang production serving configuration: single-node +agg, multi-node agg, single-node disagg, and multi-node disagg. Dynamo is a +deployment layer; `dynamo-vllm` needs vLLM recipe coverage and `dynamo-sglang` +needs SGLang cookbook coverage, just like direct engine deployments and +`sglang-disagg`. Node count, `multinode: true`, `disagg: true`, benchmark paths, +or Dynamo use MUST NOT be used as an exemption. A sign-off note like "this is a +disagg submission, no recipe update required" does not satisfy this criterion. + +Inspect the affected master-config entries under `inferencex-e2e/configs/*-master.yaml` +and their effective recipes, scripts, and inherited settings under BOTH +`inferencex-e2e/benchmarks/single_node/**` and +`inferencex-e2e/benchmarks/multi_node/**`, including `srt-slurm-recipes/**`. +In a mixed submission, assess every affected production serving variant. Several +variants may share one upstream page/PR if it covers each; sharing a dashboard +curve does not establish recipe coverage. An agg-only example does not cover +disagg prefill/decode/frontend settings. + +Report N/A only when no vLLM/SGLang production serving configuration is affected +(for example, documentation-only or InferenceX-only harness/collection changes). +State the inspected scope and why it is N/A. Existing merged/published coverage +can satisfy this check without a new upstream PR. The merge standard is that +production users can reproduce the serving configuration from merged, public +upstream documentation, without needing InferenceX benchmark infrastructure. - (a) LINK PRESENT: The sign-off's "Additional detail section" MUST contain a link to the corresponding merged recipe PR in `https://github.com/vllm-project/recipes` or - `https://github.com/sgl-project/sglang` (cookbook under `docs_new`), or the + `https://github.com/sgl-project/sglang` (cookbook under `docs/cookbook/`), or the published recipe page (`https://recipes.vllm.ai/` or `https://docs.sglang.io/cookbook/...`). If no such link is present, FAIL. + New SGLang cookbook PRs belong in `sgl-project/sglang`, under `docs/cookbook/`; + the published site deploys from that repository's `main` branch and `docs/` + directory. The cookbook copy in `sgl-project/sgl-docs` is not the current + deployment source, and `sgl-project/sgl-cookbook` is archived. For legacy + merged PR links from those copies, require a current published cookbook page + covering the configuration; a historical merge alone does not establish + current coverage. - (b) UPSTREAM CHANGE MERGED: For a linked GitHub PR, query the upstream repository directly (for example, `gh pr view --json state,mergedAt,url`) and require `state: MERGED` with a non-null `mergedAt`. An open PR, draft PR, closed-unmerged @@ -155,31 +169,39 @@ public upstream documentation. containing the required recipe counts as merged upstream documentation. If the linked artifact's merge/publication status cannot be verified, FAIL. Never infer that it merged from an approval, a green check, or the sign-off author's claim. -- (c) MAJOR SERVER ARGS MATCH: Fetch the merged or published recipe with the `fetch` +- (c) PRODUCTION-USEFUL SETTINGS AND COMMANDS MATCH: Fetch the merged or published recipe with the `fetch` MCP tool or WebFetch. For a merged recipe PR, read its diff via `gh pr diff` against - that repo if accessible. Compare it to this PR's launch command. The recipe - only needs to match the MAJOR, deployment-defining server args, not every flag. - It explicitly does not need to match knobs specific to InferenceX benchmark/harness - tuning. - MAJOR (must match because these define the model, parallelism, precision, and which - kernels run, determining the perf profile): + that repo if accessible. Compare it to this PR's effective serving configuration, + including flags, environment variables, and launch commands for every affected + role (aggregated worker, prefill, decode, and router/frontend). Upstream recipes + may include Dynamo installation, router/frontend commands, and engine launch + commands. A link to an InferenceX/srt-slurm config alone is not sufficient. + PRODUCTION-USEFUL (must match, including optimizations useful in realistic + deployments even when the submission also uses them for benchmark tuning): - model / model-path, hardware/SKU - parallelism: TP / EP / DP / PP and DP-attention flags (`--enable-dp-attention`, `--enable-dp-lm-head`, etc.) - quantization and kv-cache dtype - kernel-selection backends: `--attention-backend`, `--moe-runner-backend`, `--enable-flashinfer-allreduce-fusion` and similar - - other flags that materially change the served model or its throughput - INFERENCEX-SPECIFIC (do NOT require a match, and list as informational only, never a - failure): per-lane sweep tuning and harness plumbing such as - `--scheduler-recv-interval`, `--chunked-prefill-size`, `--disable-piecewise-cuda-graph`, - `SGLANG_RADIX_FORCE_MISS` and similar env toggles, concurrency / sequence-length - sweep ranges, ports, result filenames, and image tag/version. - FAIL if a MAJOR arg in this PR is missing from (or contradicts) the merged/published - recipe. List exactly those. Treat the InferenceX-specific diffs as expected and - mention them only as a brief informational note, not as blockers. If a flag's effect - is equivalent to a recipe default (e.g. quantization auto-detected from an FP4 - model), say so and do not count it against the recipe. + - scheduling, cache/offload, chunked-prefill, and graph/eager settings when + useful in production, including their environment variables + - prefill/decode worker topology, transport settings, and router/frontend + settings and commands needed to run the deployment + - other flags or environment variables useful in production that change + serving behavior or performance + INFERENCEX-ONLY (do NOT require upstream coverage): harness plumbing, result + collection, synthetic benchmark controls, and concurrency/sequence-length + sweep ranges. Do not classify serving flags as benchmark-only by name or by + their presence in a benchmark file; inspect their actual effect. Require the + sign-off to explain exclusions in its additional detail section. + FAIL if a production-useful setting or required role's launch command is missing + from (or contradicts) the merged/published recipe. List the affected variant, + role, and missing setting/command. Treat justified InferenceX-only differences + as informational. A flag need not be repeated when equivalent behavior follows + from a documented setting or framework default (e.g. quantization auto-detected + from an FP4 model); verify that behavior against the pinned upstream version + and require the reviewer to record the evidence. - Note: a bare "recipes are already similar to the official ones" claim WITHOUT a link to merged/published upstream documentation does not pass this workflow's standard. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dbb7852bd6..c073a1717f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -142,7 +142,7 @@ A friendly reminder. Please follow the latest checklist template **correctly**: - The sign-off can be posted as a regular conversation comment, a review summary, or an inline review comment. All three trigger verification. - Submit a new checklist when the PR is open and ready. Editing that checklist triggers verification again. Pushes, reopening, and leaving draft do not trigger verification. If a review event was missed during a merge conflict, retry after resolving it using manual dispatch. - Starting Claude requires an eligible human actor with repository write access. -- Fill in the "Additional detail section" with the links the checklist asks for (validation/eval workflow runs, the corresponding [vLLM recipe](https://github.com/vllm-project/recipes) / [SGLang cookbook](https://github.com/sgl-project/sglang/tree/main/docs_new) PR, and any exception reasoning). +- Fill in the "Additional detail section" with the links the checklist asks for (validation/eval workflow runs, the corresponding [vLLM recipe](https://github.com/vllm-project/recipes) / [SGLang cookbook](https://github.com/sgl-project/sglang/tree/main/docs/cookbook) PR, and any exception reasoning). Submit new SGLang cookbook PRs to `sgl-project/sglang`, under `docs/cookbook/`, which supplies the published site. The cookbook copy in `sgl-project/sgl-docs` is not the current deployment source; `sgl-project/sgl-cookbook` is archived. Once the sign-off is posted, CI independently re-verifies the review checklist claims, including CODEOWNER status, a green sweep and evals on a commit in the PR, the linked recipe, the reuse command, use of the latest checklist template, upstream [vLLM](https://hub.docker.com/u/vllm)/[SGLang](https://hub.docker.com/u/lmsysorg) images, no architecture-changing benchmark hacks, chat-template usage for speculative decoding, and unchanged draft-model/head weights and precision. It creates one verdict comment for that sign-off resource, including the SHA actually assessed. Editing the same checklist updates only its associated verdict. A replacement or additional checklist receives a separate verdict, and verdicts associated with older sign-offs remain unchanged. Failing criteria stay visible; passing and N/A criteria appear together in a collapsed section. Checkmarks are not taken on trust, so please only check items you have actually verified. diff --git a/CONTRIBUTING_zh.md b/CONTRIBUTING_zh.md index 364898e40c..7395c1114b 100644 --- a/CONTRIBUTING_zh.md +++ b/CONTRIBUTING_zh.md @@ -79,7 +79,7 @@ CODEOWNER 自动验证目前仅供审阅参考。工作流会核验新提交及 - 签署可以以普通会话评论、review 总结或行内 review 评论的形式发布。这三种方式都会触发验证。 - 请在 PR 处于打开且非草稿状态时提交新清单。编辑该清单会再次触发验证;推送、重新打开或退出草稿状态不会触发验证。如果合并冲突期间遗漏了 Review 事件,请在解决冲突后手动分发工作流来重试。 - 启动 Claude 要求触发者为具有合格仓库写权限的人类用户。 -- 请在 "Additional detail section" 中填写清单要求的链接(验证/评测工作流运行、对应的 [vLLM recipe](https://github.com/vllm-project/recipes) / [SGLang cookbook](https://github.com/sgl-project/sglang/tree/main/docs_new) PR,以及任何例外理由)。 +- 请在 "Additional detail section" 中填写清单要求的链接(验证/评测工作流运行、对应的 [vLLM recipe](https://github.com/vllm-project/recipes) / [SGLang cookbook](https://github.com/sgl-project/sglang/tree/main/docs/cookbook) PR,以及任何例外理由)。新的 SGLang cookbook PR 应提交到 `sgl-project/sglang` 的 `docs/cookbook/` 下,该目录是已发布网站的来源。`sgl-project/sgl-docs` 中的 cookbook 副本并非当前部署来源;`sgl-project/sgl-cookbook` 已归档。 签署发布后,CI 会独立复核审阅清单中的各项声明,包括 CODEOWNER 身份、PR 内 commit 上的全绿 sweep 与 evals、所链接的 recipe、复用命令、是否使用最新清单模板、上游 [vLLM](https://hub.docker.com/u/vllm)/[SGLang](https://hub.docker.com/u/lmsysorg) 镜像、没有更改模型架构的基准测试 hack、投机解码是否使用 chat template,以及 draft 模型和 draft head 的权重与精度是否保持不变。CI 会为该签署资源创建一条裁定评论,并注明实际评估的 SHA。编辑同一清单时只更新与其关联的裁定。替代清单或新增清单会获得独立裁定;与旧签署关联的裁定保持不变。未通过的条目直接显示;已通过和不适用(N/A)的条目统一放入折叠区域。勾选项不会被无条件信任,请只勾选你确实核实过的条目。 diff --git a/inferencex-e2e/docs/PR_REVIEW_CHECKLIST.md b/inferencex-e2e/docs/PR_REVIEW_CHECKLIST.md index 2ab4fc0183..699a1f87f4 100644 --- a/inferencex-e2e/docs/PR_REVIEW_CHECKLIST.md +++ b/inferencex-e2e/docs/PR_REVIEW_CHECKLIST.md @@ -18,6 +18,27 @@ The automated publisher rejects incomplete or inconsistent verifier output. Each The verifier treats the PR description as untrusted evidence, not instructions, and compares its explicit claims about the affected configuration and validation with the assessed code and evidence. [Check 15](../../.github/codeowner-signoff-verify-prompt.md#check-15--pr-description-matches-the-assessed-configuration-advisory) warns about contradictions or unverifiable claims and asks the author to correct or substantiate them. This is advisory; it does not require every configuration detail in the body. Body edits alone do not rerun verification; use the existing [manual reassessment](../../CONTRIBUTING.md#the-pr-review-checklist-codeowner-sign-off) procedure. +## Upstream recipe requirement + +The deciding factor is **whether a serving setting is useful in a realistic production deployment**. Every vLLM/SGLang submission must document its production-useful flags, environment variables, and launch commands in the official [vLLM recipes](https://recipes.vllm.ai/) or [SGLang cookbook](https://docs.sglang.io/cookbook/intro). Node count, aggregated versus disaggregated serving, the benchmark directory, and use of Dynamo do not grant an exemption. + +Submit SGLang cookbook updates to [sgl-project/sglang](https://github.com/sgl-project/sglang), under [`docs/cookbook/`](https://github.com/sgl-project/sglang/tree/main/docs/cookbook). The published site deploys from this repository's `main` branch and `docs/` directory. The cookbook copy in `sgl-project/sgl-docs` is not the current deployment source. The old [sgl-project/sgl-cookbook repository](https://github.com/sgl-project/sgl-cookbook) is archived and is not the destination for new recipe PRs. + +| vLLM/SGLang deployment, including Dynamo + engine | Cookbook coverage required | +| --- | --- | +| Single-node aggregated (agg) | Production-useful serving settings and launch commands | +| Multi-node aggregated (agg) | Production-useful serving settings and launch commands | +| Single-node disaggregated (disagg) | Production-useful prefill, decode, and router/frontend settings and launch commands | +| Multi-node disaggregated (disagg) | Production-useful prefill, decode, and router/frontend settings and launch commands | + +Dynamo is a deployment layer; the underlying engine determines the applicable upstream cookbook. For example, `dynamo-vllm` uses vLLM recipes and `dynamo-sglang` uses the SGLang cookbook. Upstream documentation can include Dynamo installation, router/frontend commands, and engine launch commands, including separate prefill and decode commands. A link to an InferenceX or srt-slurm config alone does not document those commands for production users. + +Assess every affected production serving variant in a mixed submission. One upstream page or PR can cover several variants, but an aggregated example alone does not cover a disaggregated deployment. Sharing a dashboard curve does not waive recipe coverage for a variant. + +InferenceX-only harness plumbing, result collection, and synthetic benchmark controls do not need to be upstreamed. Classify a flag or environment variable by its effect: a production-useful optimization still needs cookbook coverage even when InferenceX uses it for benchmark tuning. Record the reasoning for excluded settings in the additional detail section; node count or disaggregation alone is not valid N/A reasoning. + +Existing merged/published documentation is sufficient when it already covers the production configuration; no duplicate upstream PR is needed. Otherwise, update the applicable upstream cookbook and verify that the PR is **MERGED before the InferenceX PR merges**. Defaults can satisfy coverage when the reviewer verifies equivalent behavior in the pinned upstream version and records that evidence. + ## Template ``` As a PR reviewer and CODEOWNER, I have reviewed this and have: @@ -32,8 +53,8 @@ As a PR reviewer and CODEOWNER, I have reviewed this and have: - [ ] Verified that the model architecture isn't changed with benchmark hacks like using --hf-overrides to skipping indexer for every x layers on models that don't natively support this. As a general rule, we won't accept optimizations that reduces the number of model architecture FLOPs. Anything that makes that same computation run faster is fair game; target/verifier FLOPs at lower precisions is fine, given that the config passes private evals, but this does not permit lowering draft-model or draft-head precision below what ships. As an general north star princple, we should only use optimizations which is used in production by customers that care about accuracy - [ ] If an company claims that they support vLLM/SGLang as first class LLM inference engines on their hardware, I have verified that the respective vLLM submission made using upstream https://hub.docker.com/u/vllm docker repo, upstream SGLang https://hub.docker.com/u/lmsysorg docker repo. The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet as supported by vLLM/SGLang community maintainers - [ ] If an company claims that they support vLLM/SGLang as first class upstream in-tree LLM inference engines on their hardware, I have have verified that the respective vLLM/SGLang submission has been made before additional frameworks (TRT-LLM, ATOM, etc.). The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet. -- [ ] Verified that every single-node vLLM/SGLang recipe in this PR is documented in the official [vLLM recipes](https://recipes.vllm.ai/) and/or the [SGLang cookbook](https://docs.sglang.io/cookbook/intro): - - [ ] I linked the corresponding upstream PR in the [vLLM recipe repo](https://github.com/vllm-project/recipes) or [SGLang repo](https://github.com/sgl-project/sglang/tree/main/docs_new) and verified that it is **MERGED** before this InferenceX PR merges. An opened, draft, or closed-without-merge upstream PR does not satisfy this requirement. If the matching recipe was already published, I linked the published recipe/cookbook page in the additional detail section below. +- [ ] Verified that every affected vLLM/SGLang production serving configuration in this PR, including Dynamo deployments, is documented in the official [vLLM recipes](https://recipes.vllm.ai/) and/or the [SGLang cookbook](https://docs.sglang.io/cookbook/intro), for both single-node and multi-node aggregated and disaggregated serving. The documentation covers production-useful flags, environment variables, and launch commands (including prefill, decode, and router/frontend commands for disaggregation); InferenceX-only benchmark/harness settings are excluded with reasoning in the additional detail section: + - [ ] I linked the corresponding upstream PR in the [vLLM recipe repo](https://github.com/vllm-project/recipes) or [SGLang cookbook source repo](https://github.com/sgl-project/sglang/tree/main/docs/cookbook) and verified that it is **MERGED** before this InferenceX PR merges. An opened, draft, or closed-without-merge upstream PR does not satisfy this requirement. If the matching recipe was already published, I linked the published recipe/cookbook page in the additional detail section below. - [ ] Verified that this PR does not patch the inference engine or serving stack — the pinned image must run as shipped. This covers .patch files / git apply / patch, inline patches embedded in benchmark scripts (e.g. a python3/sed heredoc that rewrites installed engine sources before serving), in-place edits of site-packages, monkey-patching, overwriting container files, and installing forked/rebuilt engine wheels on top of the pinned image. The only exception is a patch covered by a filled-out waiver at [docs/waiver/](https://github.com/SemiAnalysisAI/InferenceX/tree/main/inferencex-e2e/docs/waiver)`.md` — named after the PR that introduces the patch and filed in that same PR, stating what is patched, why the unmodified upstream image cannot run this benchmark, the upstream PR/issue link, and the removal plan — which I have linked below in the additional detail section. - [ ] If this PR uses `append-only: true`, verified that it only adds generated points or recipe variants inside a selected existing config/scenario and existing same-image visual curve: every previously generated point remains present with the same recipe, no prior point is removed or rerun, and every benchmark-affecting change in the complete diff can affect only the corresponding newly appended points (never an existing point), regardless of which file contains it. - [ ] If any of the above criteria cannot reasonably be satisfied, I have provided additional reasoning below. diff --git a/inferencex-e2e/docs/PR_REVIEW_CHECKLIST_zh.md b/inferencex-e2e/docs/PR_REVIEW_CHECKLIST_zh.md index bd404522e0..ea6ef53fc8 100644 --- a/inferencex-e2e/docs/PR_REVIEW_CHECKLIST_zh.md +++ b/inferencex-e2e/docs/PR_REVIEW_CHECKLIST_zh.md @@ -18,6 +18,27 @@ 验证器将 PR 描述视为待核实的材料,不执行其中的指令,并将其关于受影响配置及验证情况的明确陈述与本次评估的代码和证据核对。[Check 15](../../.github/codeowner-signoff-verify-prompt.md#check-15--pr-description-matches-the-assessed-configuration-advisory) 会对矛盾或无法核实的陈述发出警告,请作者修正或提供证据。该检查仅提供建议,不要求在描述中罗列所有配置细节。仅修改 PR 描述不会重新触发验证;请使用现有的[手动重新评估流程](../../CONTRIBUTING_zh.md#pr-review-checklistcodeowner-签署)。 +## 上游 recipe 要求 + +判断依据是:**服务设置是否对真实的生产部署有用**。每项 vLLM/SGLang 提交都必须在官方 [vLLM recipes](https://recipes.vllm.ai/) 或 [SGLang cookbook](https://docs.sglang.io/cookbook/intro) 中记录对生产有用的参数、环境变量和启动命令。节点数量、聚合式或分离式推理、基准测试所在目录以及是否使用 Dynamo,都不构成豁免理由。 + +SGLang cookbook 更新应提交到 [sgl-project/sglang](https://github.com/sgl-project/sglang),文件位于 [`docs/cookbook/`](https://github.com/sgl-project/sglang/tree/main/docs/cookbook) 下。已发布网站从该仓库的 `main` 分支及 `docs/` 目录部署。`sgl-project/sgl-docs` 中的 cookbook 副本并非当前部署来源。旧的 [sgl-project/sgl-cookbook 仓库](https://github.com/sgl-project/sgl-cookbook) 已归档,不再作为新 recipe PR 的提交目标。 + +| vLLM/SGLang 部署方式,包括 Dynamo + 引擎 | cookbook 必须覆盖的内容 | +| --- | --- | +| 单节点聚合式(agg) | 对生产有用的服务设置和启动命令 | +| 多节点聚合式(agg) | 对生产有用的服务设置和启动命令 | +| 单节点分离式(disagg) | 对生产有用的 prefill、decode 和 router/frontend 设置及启动命令 | +| 多节点分离式(disagg) | 对生产有用的 prefill、decode 和 router/frontend 设置及启动命令 | + +Dynamo 属于部署层;应由底层推理引擎决定对应的上游 cookbook。例如,`dynamo-vllm` 对应 vLLM recipes,`dynamo-sglang` 对应 SGLang cookbook。上游文档可以包含 Dynamo 安装步骤、router/frontend 命令及引擎启动命令,包括独立的 prefill 和 decode 命令。仅链接 InferenceX 或 srt-slurm 配置,并不能让生产用户从文档中获得这些命令。 + +混合提交须逐一核实受影响的生产服务变体。一个上游页面或 PR 可以覆盖多个变体,但只有聚合式示例的文档不足以覆盖分离式部署。多个变体共用一条仪表板曲线,也不免除各自的 recipe 文档要求。 + +仅用于 InferenceX 的测试框架衔接、结果收集及合成基准测试控制,无需提交到上游。应按实际作用判断参数或环境变量:即使 InferenceX 用某项优化调优基准测试,只要该优化对生产有用,就仍须在 cookbook 中记录。在 Additional detail section 中说明排除某项设置的理由;仅以节点数量或分离式推理为由填写 N/A 不成立。 + +若已有合并或发布的文档覆盖该生产配置,即可满足要求,无需重复创建上游 PR。否则,应更新对应的上游 cookbook,并确认该 PR **在 InferenceX PR 合并前已合并(MERGED)**。默认行为也可以满足文档覆盖要求,前提是审阅者已核实锁定上游版本中的等效行为并记录证据。 + > **重要:模板请保持英文原文,原样复制粘贴,不要翻译。** CI 签署验证工作流 [`codeowner-signoff-verify.yml`](https://github.com/SemiAnalysisAI/InferenceX/blob/main/.github/workflows/codeowner-signoff-verify.yml) 通过开头语句 "As a PR reviewer and CODEOWNER, I have reviewed this and have" 触发;模板被改写或翻译后,签署验证 CI 将不会触发。 ## 模板(请复制英文原文) @@ -34,8 +55,8 @@ As a PR reviewer and CODEOWNER, I have reviewed this and have: - [ ] Verified that the model architecture isn't changed with benchmark hacks like using --hf-overrides to skipping indexer for every x layers on models that don't natively support this. As a general rule, we won't accept optimizations that reduces the number of model architecture FLOPs. Anything that makes that same computation run faster is fair game; target/verifier FLOPs at lower precisions is fine, given that the config passes private evals, but this does not permit lowering draft-model or draft-head precision below what ships. As an general north star princple, we should only use optimizations which is used in production by customers that care about accuracy - [ ] If an company claims that they support vLLM/SGLang as first class LLM inference engines on their hardware, I have verified that the respective vLLM submission made using upstream https://hub.docker.com/u/vllm docker repo, upstream SGLang https://hub.docker.com/u/lmsysorg docker repo. The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet as supported by vLLM/SGLang community maintainers - [ ] If an company claims that they support vLLM/SGLang as first class upstream in-tree LLM inference engines on their hardware, I have have verified that the respective vLLM/SGLang submission has been made before additional frameworks (TRT-LLM, ATOM, etc.). The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet. -- [ ] Verified that every single-node vLLM/SGLang recipe in this PR is documented in the official [vLLM recipes](https://recipes.vllm.ai/) and/or the [SGLang cookbook](https://docs.sglang.io/cookbook/intro): - - [ ] I linked the corresponding upstream PR in the [vLLM recipe repo](https://github.com/vllm-project/recipes) or [SGLang repo](https://github.com/sgl-project/sglang/tree/main/docs_new) and verified that it is **MERGED** before this InferenceX PR merges. An opened, draft, or closed-without-merge upstream PR does not satisfy this requirement. If the matching recipe was already published, I linked the published recipe/cookbook page in the additional detail section below. +- [ ] Verified that every affected vLLM/SGLang production serving configuration in this PR, including Dynamo deployments, is documented in the official [vLLM recipes](https://recipes.vllm.ai/) and/or the [SGLang cookbook](https://docs.sglang.io/cookbook/intro), for both single-node and multi-node aggregated and disaggregated serving. The documentation covers production-useful flags, environment variables, and launch commands (including prefill, decode, and router/frontend commands for disaggregation); InferenceX-only benchmark/harness settings are excluded with reasoning in the additional detail section: + - [ ] I linked the corresponding upstream PR in the [vLLM recipe repo](https://github.com/vllm-project/recipes) or [SGLang cookbook source repo](https://github.com/sgl-project/sglang/tree/main/docs/cookbook) and verified that it is **MERGED** before this InferenceX PR merges. An opened, draft, or closed-without-merge upstream PR does not satisfy this requirement. If the matching recipe was already published, I linked the published recipe/cookbook page in the additional detail section below. - [ ] Verified that this PR does not patch the inference engine or serving stack — the pinned image must run as shipped. This covers .patch files / git apply / patch, inline patches embedded in benchmark scripts (e.g. a python3/sed heredoc that rewrites installed engine sources before serving), in-place edits of site-packages, monkey-patching, overwriting container files, and installing forked/rebuilt engine wheels on top of the pinned image. The only exception is a patch covered by a filled-out waiver at [docs/waiver/](https://github.com/SemiAnalysisAI/InferenceX/tree/main/inferencex-e2e/docs/waiver)`.md` — named after the PR that introduces the patch and filed in that same PR, stating what is patched, why the unmodified upstream image cannot run this benchmark, the upstream PR/issue link, and the removal plan — which I have linked below in the additional detail section. - [ ] If this PR uses `append-only: true`, verified that it only adds generated points or recipe variants inside a selected existing config/scenario and existing same-image visual curve: every previously generated point remains present with the same recipe, no prior point is removed or rerun, and every benchmark-affecting change in the complete diff can affect only the corresponding newly appended points (never an existing point), regardless of which file contains it. - [ ] If any of the above criteria cannot reasonably be satisfied, I have provided additional reasoning below. @@ -59,7 +80,7 @@ Signed: `FILL_IN_GITHUB_USERNAME` 9. 已确认模型架构未被基准测试 hack 更改,例如在不原生支持的模型上使用 `--hf-overrides` 每 x 层跳过 indexer。一般规则:不接受减少模型架构 FLOPs 的优化;让同样的计算跑得更快没有问题;target/verifier 的更低精度 FLOPs 也可以,前提是该配置通过私有 evals,但这不允许将 draft 模型或 draft head 的精度降到其发布默认值以下。北极星原则:只使用在意准确性的客户在生产中实际使用的优化。 10. 如果公司声称在其硬件上将 vLLM/SGLang 作为一等 LLM 推理引擎支持,已确认相应 vLLM 提交使用上游 [vLLM docker 仓库](https://hub.docker.com/u/vllm)、SGLang 提交使用上游 [lmsysorg docker 仓库](https://hub.docker.com/u/lmsysorg)。唯一例外:新硬件(如 MI455X UALoE72、Vera Rubin NVL72、Rubin NVL8 等),以及经 vLLM/SGLang 社区维护者确认上游尚未从根本上支持的新模型架构。 11. 如果公司声称在其硬件上将 vLLM/SGLang 作为一等上游 in-tree LLM 推理引擎支持,已确认相应 vLLM/SGLang 提交先于其他框架(TRT-LLM、ATOM 等)完成。例外情形同上。 -12. 已确认此 PR 中的每个单节点 vLLM/SGLang recipe 均已记录在官方 [vLLM recipes](https://recipes.vllm.ai/) 和/或 [SGLang cookbook](https://docs.sglang.io/cookbook/intro) 中;已链接对应的上游 PR,并确认其在本 InferenceX PR 合并前已**合并(MERGED)**。处于 open、draft 或未合并关闭状态的上游 PR 不满足此要求。若相应 recipe 已发布,已在下方 Additional detail section 中链接已发布的 recipe/cookbook 页面。 +12. 已确认此 PR 中每个受影响的 vLLM/SGLang 生产服务配置(包括 Dynamo 部署)均已记录在官方 [vLLM recipes](https://recipes.vllm.ai/) 和/或 [SGLang cookbook](https://docs.sglang.io/cookbook/intro) 中,覆盖单节点及多节点的聚合式和分离式推理。文档须包含对生产有用的参数、环境变量和启动命令;分离式部署还须覆盖 prefill、decode 和 router/frontend 命令。仅用于 InferenceX 基准测试或测试框架的设置可以排除,但须在 Additional detail section 中说明理由。已链接对应的上游 PR,并确认其在本 InferenceX PR 合并前已**合并(MERGED)**。处于 open、draft 或未合并关闭状态的上游 PR 不满足此要求。若相应 recipe 已发布,已在 Additional detail section 中链接已发布的 recipe/cookbook 页面。 13. 已确认该 PR 未对推理引擎或 serving 技术栈打补丁,锁定的镜像必须原样运行。涵盖:.patch 文件 / `git apply` / `patch`、内嵌在基准测试脚本中的行内补丁(例如在启动服务前用 python3/sed heredoc 改写已安装的引擎源码)、就地编辑 site-packages、monkey-patch、覆盖容器文件、以及在锁定镜像之上安装 fork 或重新构建的引擎 wheel。唯一例外:该补丁已由 [docs/waiver/](https://github.com/SemiAnalysisAI/InferenceX/tree/main/inferencex-e2e/docs/waiver)`.md`(以引入补丁的 PR 编号命名,并在同一 PR 中提交)中填写完整的豁免覆盖,写明补丁内容、为何未修改的上游镜像无法运行该基准测试、上游 PR/issue 链接及移除计划,并已在下方 Additional detail section 中给出链接。 14. 如果 PR 使用 `append-only: true`,已确认它只在所选现有配置/场景和同镜像的现有可视化曲线内新增生成点或配方变体。所有已有点及其配方均保留,不删除或重跑旧点;完整 diff 中所有影响基准测试的改动,无论位于哪个文件,都只会作用于对应新增点,不能影响已有点。 15. 如果上述任何条目无法合理满足,已在下方提供额外说明。