Improve call site detection in capture mode and add it to hw decoder bench - #6445
Conversation
|
CI MESSAGE: [61565034]: BUILD STARTED |
|
| Filename | Overview |
|---|---|
| dali/python/nvidia/dali/experimental/dynamic/_capture.py | Adds proof-preserving call-trie compaction and early terminal lookup; no eligible residual issue was established. |
| dali/python/nvidia/dali/experimental/dynamic/_source_analysis.py | Propagates the stack depth needed to prove invariant arguments across nested classifier frames. |
| dali/test/python/experimental_mode/test_capture.py | Adds capture coverage for repeated warmup epochs and nested proof frames. |
| internal_tools/hw_decoder_bench.py | Adds optional capture execution to the dynamic RN50 decoder benchmark. |
| qa/TL1_decoder_perf/test.sh | Runs capture-mode decoder performance as an additional required QA benchmark. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
A["Trace dynamic operator call"] --> B["Classify arguments and required proof depth"]
B --> C["Record full call chain in trie"]
C --> D["Compact to shortest operator-unique prefix"]
D --> E["Replay lookup walks runtime frames"]
E --> F["Return captured node"]
Reviews (4): Last reviewed commit: "Update copyright year in hw_decoder_benc..." | Re-trigger Greptile
|
|
||
| PERF_RESULT=$(perf_check "${LOG_RN50}" "$MIN_PERF") | ||
| PERF_RESULT_NDD=$(perf_check "${LOG_NDD}" "$MIN_PERF_NDD") | ||
| PERF_RESULT_NDD_CAPTURE=$(perf_check "${LOG_NDD_CAPTURE}" "$MIN_PERF") |
There was a problem hiding this comment.
Do you expect perf to match pipeline mode MIN_PERF?
There was a problem hiding this comment.
When I measure on my workstation, even when tweaking parameters capture mode is consistently slower but the difference is under 3%.
This is not the same machine as used in CI, it's an RTX 6000 PRO but the CPU only has 16 cores.
I enabled L1 tests when triggering CI so we'll see.
There was a problem hiding this comment.
Results from CI:
- Pipeline mode throughput: 21567.07 frames/sec
- Dynamic mode throughput: 17244.40 frames/sec
- Dynamic capture mode throughput: 21525.88 frames/sec
Looks like capture mode does match the performance of pipeline mode 🎉
There was a problem hiding this comment.
Results on SBSA:
- Pipeline mode throughput: 30879.93 frames/sec
- Dynamic mode throughput: 23685.68 frames/sec
- Dynamic capture mode throughput: 30909.08 frames/sec
Signed-off-by: Rostan Tabet <rtabet@nvidia.com>
d75ba62 to
67d12ba
Compare
Signed-off-by: Rostan Tabet <rtabet@nvidia.com>
67d12ba to
570a74a
Compare
|
CI MESSAGE: [61575050]: BUILD STARTED |
|
CI MESSAGE: [61565034]: BUILD PASSED |
|
CI MESSAGE: [61575050]: BUILD PASSED |
|
CI MESSAGE: [61924029]: BUILD STARTED |
|
CI MESSAGE: [61924029]: BUILD PASSED |
Signed-off-by: Rostan Tabet <rtabet@nvidia.com>
Category:
New feature (non-breaking change which adds functionality)
Description:
Currently, the following fails to capture properly:
Operators were first captured in the warmup loop and the full call chain is used to identify a node so operators in the second loop fail to capture and fall back to normal execution.
This PR fixes this by trimming the call chain to only the required size. It also adds capture mode to
L1_decoder_perf.Additional information:
Affected modules and functionalities:
Dynamic capture mode.
Key points relevant for the review:
Does call chain trimming introduce silent regressions that I didn't think of?
Tests:
Checklist
Documentation
DALI team only
Requirements
REQ IDs: N/A
JIRA TASK: N/A