Develop#3
Open
DanieleDeSensi wants to merge 243 commits into
Open
Conversation
Added node availability check Modified run.py CLI to specify preset Moved examples conf. in "examples" folder Renamed runner.py to "blink_core" for clarity Modified data saving to different files for application Cleaned output
…proved UX Restructures the setup wizard with a top-level action menu so the user chooses between configuring supported recipes or registering a custom already-installed benchmark before any checkbox appears. New / changed behaviour: - run() opens with questionary.select (recipes / custom / exit) - Recipe flow extracted into _run_recipe_wizard(); checkboxes now show the actual binary path for configured suites (✓) and "not configured" for unconfigured ones (○), pre-checked accordingly - _run_custom_benchmark_wizard(): collects display name → auto-derives ID (lowercase + underscored), executable path, mpirun/srun/none launcher, arbitrary pre-run shell commands; warns on ID collision; overwrite-guards existing receipts - _collect_pre_run_hooks(): accepts any shell command, not just module loads; updated prompt text and examples - _shorten_path(): new helper, fixes edge case where max_len ≤ 1 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ead of colon-string Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Treat 'e' as backward-compat alias for 'even' (for old callers in allocate_partitioned and runner.py until Tasks 4-5 update them) - Raise TypeError for any other unexpected string instead of silently iterating characters - This prevents silent bugs like '50:50' being split into characters or 'e' being treated as iterable Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ck-cyclic distribution The stride parameter enables block-cyclic allocation where each application receives stride nodes per round-robin turn, common in HPC schedulers. Defaults to 1 for backward compatibility with round-robin behavior. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add stride < 1 validation to prevent infinite loop when stride=0 or negative - Remove redundant node_idx bound check in inner loop (condition already checked in while) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ble node shuffling Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ss partitions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…eplacing dead variable
… presence vs mode
…it/stride/seed/partitions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ocalOptionsForm Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace flat allocationmode/allocationsplit/partitionsplit/partitionlayout keys with a single nested 'allocation' object. Integer partition IDs on apps become string names (victim/aggressor/noise). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace all references to flat allocationmode/allocationsplit/partitionsplit/ partitionlayout with the new allocation object. Update worked examples, patterns, and glossary to use string partition names. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- runner.py: fix NameError recipe→receipt in GPU guardrail - allocator: guard get_abs_split against num_apps==0 - benchmark_options: catch JSONDecodeError in split/partitions parsing - runner.py: document shallow allocation merge behavior Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…_header system_sbatch duplicated sbatch_directives and was confusing. --exclusive promoted to sbatch_directives in the two files that needed it. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ically correct experiments Replace 8 ad-hoc files with a clean subfolder layout: - baselines/collectives.json: 10 A2A/Incast/AllGather msg-size sweep experiments - congestion/noise_heatmap.json: 16 experiments (4 msg sizes × 4 noise intensities) - congestion/victim_sweep.json: 11 experiments across all 3 collective types + timing controls - congestion/layout_effect.json: 5 experiments comparing linear/interleaved/random layouts - congestion/co_scheduling.json: 8 flat-interleaved co-scheduled experiments (no partitions) - scale/: moved comprehensive_64_nodes and comprehensive_256_nodes Fixes inconsistent node counts between baseline and interference experiments, covers all allocation modes (linear/interleaved/random/partitioned) and features (convergence, timeouts, start/end timing, local_options overrides). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace single-experiment ApplicationSetup with ExperimentsPanel, which manages an ordered list of experiments each with their own app tabs and local options. Adds ExperimentStrip, AppStrip, and ConfirmModal widgets. All strip mutations (add/remove/clear) are now properly async-awaited so the DOM is fully updated before new widgets with the same IDs are mounted, preventing DuplicateIds crashes on experiment/app switching and deletion. Counter increments happen before the first await to prevent ID races under rapid clicks. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- architecture.md: replace obsolete allocationmode l/i/p codes with the current allocation.mode field values (linear/interleaved/random/partitioned) - tutorial.md + writing-configs.md: replace deleted blink_noise_study.json references with actual examples under examples/leonardo/congestion/ - running.md: replace non-existent mega_test.json with a real example path - writing-configs.md + configuration.md: fix wrapper paths from a2a_comm_only.py to blink/a2a_comm_only.py (matches the wrappers/blink/ subdirectory) - extending/overview.md: clarify that crab setup custom registration works for any binary without a recipe; remove contradictory parenthetical - extending/receipts.md: add crab setup custom wizard as the recommended path for registering any already-installed binary; demote hand-writing to fallback - reference/supported-benchmarks.md: clarify that binaries without a recipe can still be registered via crab setup custom registration - reference/configuration.md: add warning that ppn and numnodes cannot be overridden via local_options (Slurm-job-level globals) - extending/wrappers.md: replace phantom README reference with accurate note about outdated wrappers in the repo Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Engine:
- Raise RuntimeError when SLURM_NODELIST is unset instead of passing
None to subprocess, producing an opaque TypeError
- Switch from subprocess.call to subprocess.run(check=True) so a
non-zero scontrol exit is caught before pandas reads an empty file
- Write worker_nodelist.txt into output_dir (unique per run) instead of
CWD, eliminating the race condition between concurrent workers
- Apply shlex.quote() to all paths embedded in the generated sbatch
script (executable, script path, --workdir) to handle spaces and
prevent shell injection
- Validate numnodes presence before use; raise ValueError instead of the
cryptic TypeError: int() argument ... not 'NoneType'
- Skip --nodes= directive entirely when numnodes is absent, preventing
the literal string '--nodes=None' from being written to the job script
- Apply newline-injection check to system_header lines and system_sbatch
directives (the same guard that already existed for sbatch_directives)
Runner:
- Add allowlist {'slurm', 'mpi', 'workerpool'} for CRAB_WL_MANAGER
before any path construction; rejects traversal values like ../../evil
- Fix c_idx misalignment: advance the container index by len(app.metadata)
for every collect_flag app regardless of exit code, so a failed app's
containers are skipped in place rather than shifting all subsequent
containers by one position
Allocator:
- Validate that partition shares do not exceed 100.1 in
allocate_partitioned (which called _apply_largest_remainder directly,
bypassing the check already present in get_abs_split)
Convergence:
- Use abs(mean) with a 1e-9 zero guard instead of bare mean in the CI
width comparison, so metrics with negative or zero means can converge
- Track any_target in check_CI; return False when no container has
conv_goal=True and converge_all=False, preventing silent false
convergence with zero statistical evaluation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Process manager: - wait_timed() now uses process.wait() + thread join instead of communicate(), eliminating the race with _silent_reader Experiment runner: - Architecture check handles both dict and list sbatch_directives formats without AttributeError CLI orchestrator: - KeyboardInterrupt now caught in both execute_orchestrator and execute_worker, calling sys.exit(130) instead of propagating Logger: - enter() passes list(self._handlers) copy so child add_handler calls don't mutate the parent or sibling handler lists Memory / receipts: - save_receipt() uses atomic write-then-os.replace() pattern - remove_receipt() uses try/except instead of TOCTOU exists() check TUI: - _benchmark_running flag prevents concurrent benchmark submissions - action_load() / action_save() now match BINDINGS expectations - TUIController.run_in_thread accepts on_complete callback - experiments_panel.get_state() raises ValueError on duplicate names Recipes: - g500.py splits "MPICC=mpicc -fcommon" into separate make tokens QE wrappers: - pw_base.py / ph_base.py raise RuntimeError when binary is None - Replaced "outdir" in line.lower() substring check with regex match to avoid false positives on comment lines Other wrappers: - ember-incast.py: fix 'emberr' → 'ember' typo in binary path - ib_send_lat.py: descriptive RuntimeError when CRAB_IB_DEVICES unset; zip(*samples) prevents IndexError on unequal counts - nccl_common.py: skip blank/comment lines, collect all data rows, fix error fallback shape to [[0]]*N Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.