[TRTLLM-12648][test] enable disagg cancellation stress test#15174
Conversation
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
8fcdde7 to
438d83b
Compare
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
|
/bot run --disable-fail-fast |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (7)
📝 WalkthroughWalkthroughThis PR introduces a bi-modal disaggregated cancellation stress harness that runs either in lightweight log-only probe mode (for guardrail checks) or full cancellation/poison mode (for comprehensive stress testing). The harness is enhanced with real cluster orchestration, mode-driven thread composition, comprehensive documentation, and new test coverage. ChangesDisaggregated Stress Test Mode System
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
PR_Github #53176 [ run ] triggered by Bot. Commit: |
|
PR_Github #53176 [ run ] completed with state |
Summary
Enables the disaggregated cancellation stress-test entry as a real regular guardrail while keeping the full cancellation/poison marathon behind an explicit YAML mode switch.
This change ships:
DisaggCancellationStressHarness.setup()now calls the sharedsetup_disagg_cluster(..., save_log=True), strips the harness-onlystress_configblock before passing YAML totrtllm-serve, binds the disagg server endpoint, tracks worker/server logs, and tears the cluster down.stress_config.mode: log_onlylaunches the real 3P3D C++/V1 DeepSeek disagg cluster, sends normal non-cancel completion probes, and fails on UAF, broken-promise, and segmentation-fault-class log signatures.stress_config.mode: full_cancel_poisonremains the explicit switch for cancellation load, fault injection, token-equivalent canaries, metrics, and KV-growth checks once in-flight cancellation plus poison-buffer hardening are available.tests/integration/test_lists/qa/llm_function_stress.txt, now withTIMEOUT (45)for the 10-minute regular guardrail plus setup margin. This makes the test eligible for the QA/Jenkins job that consumes that list; it does not create or modify that job schedule.The registered entry is:
Implementation chain
log_scanner_threadmetrics_threadinjector_threadinjection_eventscountcanary_threadload_threadlog_onlyregular guardrail, full-mode switch, QA registration, READMEThere are no remaining test-logic or test-enablement steps in this chain. Future runtime support can flip the YAML from
log_onlytofull_cancel_poisonand add canary references/poison expectations without another harness-architecture step.Mode switch
Current regular CI mode:
log_onlyis intentionally the checked-in default. It does not require in-flight cancellation or poison-buffer support. It provides regular protection by:/v1/completions,To switch to the full cancellation/poison marathon after runtime support is ready:
stress_config.mode: full_cancel_poison.stress_config.duration_min: 120.base_concurrency,bursts, andinjections.configs/stress_canary_prompts.jsonwith recorded token references.TIMEOUT (150).Scheduled run config and setup
The QA stress-list registration is controlled by:
Once merged, this test runs automatically only when the existing QA/Jenkins schedule or release validation job consumes
llm_function_stress.txt. The exact cadence and wall-clock start time are owned by QA CI configuration outside this PR. The in-repo QA README describes QA coverage as daily/release and weekly/release/on-demand, but does not define a file-specific cadence for this stress list.CI should run that list from
tests/integration/defswith the normal TRT-LLM integration container or virtual environment:Required setup:
trtllm-serveonPATH.LLM_MODELS_ROOTset soDeepSeek-V3-Lite/bf16resolves to local model weights.Manual run and trigger
Manual regular guardrail run:
Collection-only check from a full integration environment:
Manual CI trigger:
The exact QA stress stage name is owned by CI/Jenkins configuration and is not declared in this directory.
Validation
Syntax:
PYTHONPYCACHEPREFIX=$PWD/.pycache python -m py_compile \ tests/integration/defs/stress_test/disagg_cancel/harness.py \ tests/integration/defs/stress_test/disagg_cancel/test_disagg_cancel_stress.pyResult: passed.
No-GPU component suite:
PYTHONPATH=tests/integration/defs:tests/integration/defs/disaggregated \ python -m pytest -c /dev/null -o addopts= \ --confcutdir=tests/integration/defs/stress_test \ tests/integration/defs/stress_test/disagg_cancel/ \ -k "not test_disagg_cancellation_marathon" -qResult:
92 passed, 1 deselected.Static test-list validation:
Result:
OK: 2563 unique test entries validated.Also ran
git diff --check.Pre-commit on touched files passes formatting/lint hooks. The local
waive list checkandvalidate-test-listshooks fail only because their hook interpreter cannot parsestr | Noneinscripts/check_test_list.py; the same validator command above passes under the project Python.The full
pytest --test-list=... --cocommand was not runnable in this local Python environment because the integrationconftest.pyimportstorch._inductor, which is not present locally.Out of scope
full_cancel_poisonbefore runtime support is ready.Summary by CodeRabbit
Documentation
New Features
log_onlyandfull_cancel_poison) for the stress test harness, including configuration support and mode-specific execution logic.Tests