Skip to content

preparation: tolerate optional restored/rejected candidate fields in the tuning report - #33

Closed
msuiche wants to merge 1 commit into
NVIDIA:mainfrom
msuiche:tuning-report-attribute-fix
Closed

msuiche wants to merge 1 commit into
NVIDIA:mainfrom
msuiche:tuning-report-attribute-fix

Conversation

@msuiche

@msuiche msuiche commented Oct 22, 2026

Copy link
Copy Markdown

Fixes a live crash in every multi-rank preparation.

RecordedPreparationSession's tuning report (ignition/preparation/tuning.py:360-361) sums result.restored_candidates and result.rejected_candidates, but the PreparationResult those results come from (flashinfer's b12x.preparation.types) provides neither field — its __init__ signature is plans, coverage, benchmark_calls, benchmark_closers, cache_hits, benchmarked_candidates, elapsed_seconds, compilation, parent_cute_compilations, parent_triton_compilations, overlapped_benchmark_samples, program_counts. Result on a real 4-rank export:

AttributeError: 'PreparationResult' object has no attribute 'restored_candidates'.
Did you mean: 'benchmarked_candidates'?

Observed live on a 4x DGX Spark (GB10) TP4 ring export, ~70 minutes into b12x autotune (91/91 comm.roce kernels ready) — the report build killed ranks 1 and 3 and took down the whole rank group.

Fix: read both with getattr(result, ..., 0). The fields are report-only, so a future flashinfer that starts publishing them is picked up unchanged; the current one reports 0 instead of aborting the entire preparation.

The introduced-by commit appears to be 8e4a1f6 (Preset DeepSeek V4.1 packed GPU speculation, which added the report block).

…results

RecordedPreparationSession's tuning report sums
result.restored_candidates and result.rejected_candidates, but the
flashinfer PreparationResult those results come from provides neither
(its __init__ signature: plans, coverage, benchmark_calls,
benchmark_closers, cache_hits, benchmarked_candidates, elapsed_seconds,
compilation, parent_cute_compilations, parent_triton_compilations,
overlapped_benchmark_samples, program_counts). Every multi-rank
preparation crashes with

  AttributeError: 'PreparationResult' object has no attribute
  'restored_candidates'. Did you mean 'benchmarked_candidates'?

the moment the report is built - observed live on a 4x DGX Spark TP4
ring export, ~70 min into b12x autotune, killing the whole rank group.

The fields are report-only; read them with getattr and default 0 so a
flashinfer that starts publishing them is picked up unchanged, and one
that does not (current) reports 0 instead of aborting the preparation.

Validated: 4-rank export on 4x DGX Spark (GB10) proceeds past the
report build that previously crashed the group.
@original-el8 original-el8 added area:preparation Ignition checkpoint loading, tuning, compilation, capture, and export. triage:superseded Behavior appears covered by main; check residual scope, then close if none remains. labels Nov 5, 2026
@original-el8

Copy link
Copy Markdown
Collaborator

The supported FlashInfer dependency now provides both fields this PR makes optional. Flare main pins 1f8ed8a3c46e27d03cff54e08f23e9bc50476d57, whose PreparationResult implementation defines restored_candidates and rejected_candidates with defaults and assigns them on the result.

Marked triage:superseded: the missing-field failure appears resolved for the locked dependency. Close unless the failure reproduces with that locked environment or support for older dependency interfaces is an explicit requirement. No multi-rank export was rerun during triage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:preparation Ignition checkpoint loading, tuning, compilation, capture, and export. triage:superseded Behavior appears covered by main; check residual scope, then close if none remains.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants