Skip to content

Commit 8e6ce84

Browse files
committed
chore: sync PR 2252 with main
Merge current origin/main and resolve perf-changelog.yaml by retaining every main entry and re-appending PR #2252's entry at the end. 中文:合并最新的 origin/main,并保留主分支的全部 perf-changelog.yaml 条目,将 PR #2252 的专属条目重新追加到文件末尾。
2 parents de72cd6 + 476d0d2 commit 8e6ce84

60 files changed

Lines changed: 13351 additions & 8157 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/benchmark-tmpl.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,16 @@ on:
116116
required: false
117117
type: string
118118
default: '3600'
119+
eval-limit:
120+
description: "Eval instance count: empty/full = whole split (default); N = first-N smoke slice"
121+
required: false
122+
type: string
123+
default: ""
124+
swebench-gen-mode:
125+
description: "SWE-bench generation mode (single-shot | agentic). Empty = agentic (single-shot is an explicit debugging escape hatch)."
126+
required: false
127+
type: string
128+
default: ""
119129
env:
120130
RANDOM_RANGE_RATIO: 0.8
121131
HF_TOKEN: ${{ secrets.INFERENCEX_OFFICIAL_RO_HF_TOKEN }}
@@ -151,10 +161,18 @@ env:
151161
KV_P2P_TRANSFER: ${{ inputs.kv-p2p-transfer }}
152162
TOTAL_CPU_DRAM_GB: ${{ inputs.total-cpu-dram-gb }}
153163
DURATION: ${{ inputs.duration }}
164+
EVAL_LIMIT: ${{ inputs.eval-limit }}
165+
SWEBENCH_GEN_MODE: ${{ inputs.swebench-gen-mode }}
154166
AIPERF_FAILED_REQUEST_THRESHOLD: '0.10'
155167
RESULT_DIR: /workspace/results
156168
PYTHONDONTWRITEBYTECODE: '1'
157169
PYTHONPYCACHEPREFIX: /tmp/inferencex-pycache
170+
# GPU runners lack Docker for SWE-bench scoring.
171+
SWEBENCH_USE_MODAL: 'true'
172+
MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
173+
MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
174+
# These b300 nodes are currently broken.
175+
SALLOC_EXCLUDE: 'b300-005,b300-006'
158176

159177
permissions:
160178
contents: read
@@ -311,6 +329,10 @@ jobs:
311329
meta_env.json
312330
results*.json
313331
sample*.jsonl
332+
agent_preds.json
333+
predictions.jsonl
334+
swebench_report_*.json
335+
*.traj*
314336
if-no-files-found: ${{ inputs.eval-only && 'error' || 'ignore' }}
315337

316338
- name: Verify eval scores
@@ -324,6 +346,7 @@ jobs:
324346
# Remove any eval results JSONs that were moved into workspace
325347
rm -f results*.json || true
326348
rm -f sample*.jsonl || true
349+
rm -f agent_preds.json predictions.jsonl swebench_report_*.json *.traj* || true
327350
328351
- name: Resource cleanup (post-run)
329352
if: always()

.github/workflows/e2e-tests.yml

Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@ on:
2121
required: false
2222
type: string
2323
default: ""
24+
eval-limit:
25+
description: "Eval instance count: empty/full = whole split (default); N = first-N smoke slice"
26+
required: false
27+
type: string
28+
default: ""
29+
swebench-gen-mode:
30+
description: "SWE-bench generation mode (single-shot | agentic). Empty = agentic (single-shot is an explicit debugging escape hatch)."
31+
required: false
32+
type: string
33+
default: ""
2434
workflow_call:
2535
inputs:
2636
generate-cli-command:
@@ -40,6 +50,16 @@ on:
4050
required: false
4151
type: string
4252
default: ""
53+
eval-limit:
54+
description: "Eval instance count: empty/full = whole split (default); N = first-N smoke slice"
55+
required: false
56+
type: string
57+
default: ""
58+
swebench-gen-mode:
59+
description: "SWE-bench generation mode (single-shot | agentic). Empty = agentic (single-shot is an explicit debugging escape hatch)."
60+
required: false
61+
type: string
62+
default: ""
4363

4464
jobs:
4565
get-jobs:
@@ -50,6 +70,7 @@ jobs:
5070
eval-config: ${{ steps.get-jobs.outputs.eval-config }}
5171
multi-node-eval-config: ${{ steps.get-jobs.outputs.multi-node-eval-config }}
5272
agentic-config: ${{ steps.get-jobs.outputs.agentic-config }}
73+
agentic-eval-config: ${{ steps.get-jobs.outputs.agentic-eval-config }}
5374
multi-node-agentic-config: ${{ steps.get-jobs.outputs.multi-node-agentic-config }}
5475
steps:
5576
- name: Checkout code (ref)
@@ -69,13 +90,15 @@ jobs:
6990
pip install pydantic
7091
CONFIG_JSON=$(python3 ${GITHUB_WORKSPACE}/utils/matrix_logic/generate_sweep_configs.py \
7192
${{ inputs.generate-cli-command || github.event.inputs.generate-cli-command }})
72-
AGENTIC=$(echo "$CONFIG_JSON" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps([x for x in d if x.get('scenario-type') == 'agentic-coding' and 'prefill' not in x]))")
93+
AGENTIC=$(echo "$CONFIG_JSON" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps([x for x in d if x.get('scenario-type') == 'agentic-coding' and 'prefill' not in x and not x.get('run-eval', False)]))")
94+
AGENTIC_EVAL=$(echo "$CONFIG_JSON" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps([x for x in d if x.get('scenario-type') == 'agentic-coding' and 'prefill' not in x and x.get('run-eval', False)]))")
7395
MULTI_AGENTIC=$(echo "$CONFIG_JSON" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps([x for x in d if x.get('scenario-type') == 'agentic-coding' and 'prefill' in x]))")
7496
SINGLE=$(echo "$CONFIG_JSON" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps([x for x in d if 'prefill' not in x and x.get('scenario-type') != 'agentic-coding' and not x.get('eval-only', False)]))")
7597
MULTI=$(echo "$CONFIG_JSON" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps([x for x in d if 'prefill' in x and x.get('scenario-type') != 'agentic-coding' and not x.get('eval-only', False)]))")
7698
EVALS=$(echo "$CONFIG_JSON" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps([x for x in d if 'prefill' not in x and x.get('scenario-type') != 'agentic-coding' and x.get('run-eval', False)]))")
7799
MULTI_EVAL=$(echo "$CONFIG_JSON" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps([x for x in d if 'prefill' in x and x.get('run-eval', False)]))")
78100
echo "agentic-config=$AGENTIC" >> $GITHUB_OUTPUT
101+
echo "agentic-eval-config=$AGENTIC_EVAL" >> $GITHUB_OUTPUT
79102
echo "multi-node-agentic-config=$MULTI_AGENTIC" >> $GITHUB_OUTPUT
80103
echo "single-node-config=$SINGLE" >> $GITHUB_OUTPUT
81104
echo "multi-node-config=$MULTI" >> $GITHUB_OUTPUT
@@ -223,6 +246,44 @@ jobs:
223246
scenario-type: agentic-coding
224247
ref: ${{ inputs.ref }}
225248

249+
test-sweep-agentic-evals:
250+
needs: get-jobs
251+
if: ${{ needs.get-jobs.outputs.agentic-eval-config != '[]' }}
252+
uses: ./.github/workflows/benchmark-tmpl.yml
253+
name: agentic eval /
254+
strategy:
255+
fail-fast: false
256+
matrix:
257+
config: ${{ fromJson(needs.get-jobs.outputs.agentic-eval-config) }}
258+
secrets: inherit
259+
with:
260+
exp-name: ${{ matrix.config.exp-name }}
261+
runner: ${{ matrix.config.runner }}
262+
image: ${{ matrix.config.image }}
263+
model: ${{ matrix.config.model }}
264+
model-prefix: ${{ matrix.config.model-prefix }}
265+
framework: ${{ matrix.config.framework }}
266+
precision: ${{ matrix.config.precision }}
267+
tp: ${{ matrix.config.tp }}
268+
ep: ${{ matrix.config.ep }}
269+
dp-attn: ${{ matrix.config.dp-attn }}
270+
conc: ${{ matrix.config.conc }}
271+
kv-offloading: ${{ matrix.config.kv-offloading }}
272+
kv-offload-backend: ${{ matrix.config.kv-offload-backend }}
273+
total-cpu-dram-gb: ${{ matrix.config.total-cpu-dram-gb }}
274+
duration: ${{ inputs.duration-override != '' && inputs.duration-override || matrix.config.duration }}
275+
isl: '0'
276+
osl: '0'
277+
max-model-len: '0'
278+
spec-decoding: 'none'
279+
disagg: 'false'
280+
run-eval: true
281+
eval-only: true
282+
eval-limit: ${{ inputs.eval-limit }}
283+
swebench-gen-mode: ${{ inputs.swebench-gen-mode }}
284+
scenario-type: agentic-coding
285+
ref: ${{ inputs.ref }}
286+
226287
test-sweep-multi-node-agentic:
227288
needs: get-jobs
228289
if: ${{ needs.get-jobs.outputs.multi-node-agentic-config != '[]' }}
@@ -345,6 +406,7 @@ jobs:
345406
disagg: ${{ matrix.config.disagg }}
346407
run-eval: true
347408
eval-only: true
409+
eval-limit: ${{ inputs.eval-limit }}
348410
ref: ${{ inputs.ref }}
349411

350412
collect-results:
@@ -356,8 +418,8 @@ jobs:
356418
result-prefix: "bmk"
357419

358420
collect-evals:
359-
needs: [test-sweep-evals, test-sweep-multi-node-evals]
360-
if: ${{ always() && (needs.test-sweep-evals.result != 'skipped' || needs.test-sweep-multi-node-evals.result != 'skipped') }}
421+
needs: [test-sweep-evals, test-sweep-multi-node-evals, test-sweep-agentic-evals]
422+
if: ${{ always() && (needs.test-sweep-evals.result != 'skipped' || needs.test-sweep-multi-node-evals.result != 'skipped' || needs.test-sweep-agentic-evals.result != 'skipped') }}
361423
uses: ./.github/workflows/collect-evals.yml
362424
secrets: inherit
363425

.github/workflows/run-sweep.yml

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,58 @@ jobs:
628628
run-eval: true
629629
eval-only: true
630630

631+
# Agentic (SWE-bench) eval rows carry the agentic input shape, so they are
632+
# dispatched with sweep-agentic's inputs rather than sweep-evals' fixed-seq-len
633+
# inputs (isl/osl/max-model-len, which agentic rows don't have).
634+
sweep-agentic-evals:
635+
needs: [setup, canary-select, canary-sweep]
636+
if: >-
637+
${{
638+
!cancelled() &&
639+
needs.setup.result == 'success' &&
640+
needs.setup.outputs.reuse-enabled != 'true' &&
641+
(needs.canary-sweep.result == 'success' || needs.canary-sweep.result == 'skipped') &&
642+
toJson(fromJson(needs.setup.outputs.search-space-config).agentic_evals) != '[]' &&
643+
toJson(fromJson(needs.setup.outputs.search-space-config).agentic_evals) != 'null'
644+
}}
645+
uses: ./.github/workflows/benchmark-tmpl.yml
646+
name: agentic eval /
647+
strategy:
648+
fail-fast: ${{ contains(github.event.pull_request.labels.*.name, 'full-sweep-fail-fast') || contains(github.event.pull_request.labels.*.name, 'full-sweep-fail-fast-no-canary') }}
649+
matrix:
650+
config: ${{ fromJson(needs.setup.outputs.search-space-config).agentic_evals }}
651+
secrets: inherit
652+
with:
653+
exp-name: ${{ matrix.config.exp-name }}
654+
runner: ${{ matrix.config.runner }}
655+
image: ${{ matrix.config.image }}
656+
model: ${{ matrix.config.model }}
657+
model-prefix: ${{ matrix.config.model-prefix }}
658+
framework: ${{ matrix.config.framework }}
659+
precision: ${{ matrix.config.precision }}
660+
router: ${{ matrix.config.router && toJson(matrix.config.router) || '' }}
661+
kv-p2p-transfer: ${{ matrix.config['kv-p2p-transfer'] || '' }}
662+
tp: ${{ matrix.config.tp }}
663+
pp: ${{ matrix.config.pp }}
664+
dcp-size: ${{ matrix.config.dcp-size }}
665+
pcp-size: ${{ matrix.config.pcp-size }}
666+
ep: ${{ matrix.config.ep }}
667+
dp-attn: ${{ matrix.config.dp-attn }}
668+
conc: ${{ matrix.config.conc }}
669+
kv-offloading: ${{ matrix.config.kv-offloading }}
670+
kv-offload-backend: ${{ matrix.config['kv-offload-backend'].name }}
671+
kv-offload-backend-metadata: ${{ matrix.config['kv-offload-backend'] && toJson(matrix.config['kv-offload-backend']) || '' }}
672+
total-cpu-dram-gb: ${{ matrix.config.total-cpu-dram-gb }}
673+
duration: ${{ matrix.config.duration }}
674+
isl: '0'
675+
osl: '0'
676+
max-model-len: '0'
677+
spec-decoding: ${{ matrix.config.spec-decoding }}
678+
disagg: ${{ 'false' }}
679+
run-eval: true
680+
eval-only: true
681+
scenario-type: agentic-coding
682+
631683
sweep-multi-node-evals:
632684
needs: [setup, canary-select, canary-sweep]
633685
if: >-
@@ -714,8 +766,8 @@ jobs:
714766
result-prefix: "bmk"
715767

716768
collect-evals:
717-
needs: [sweep-evals, sweep-multi-node-evals, setup]
718-
if: ${{ always() && needs.setup.result != 'skipped' && (needs.sweep-evals.result != 'skipped' || needs.sweep-multi-node-evals.result != 'skipped') }}
769+
needs: [sweep-evals, sweep-agentic-evals, sweep-multi-node-evals, setup]
770+
if: ${{ always() && needs.setup.result != 'skipped' && (needs.sweep-evals.result != 'skipped' || needs.sweep-agentic-evals.result != 'skipped' || needs.sweep-multi-node-evals.result != 'skipped') }}
719771
uses: ./.github/workflows/collect-evals.yml
720772
secrets: inherit
721773

0 commit comments

Comments
 (0)