Skip to content

Develop#3

Open
DanieleDeSensi wants to merge 243 commits into
SharkGamerZ:masterfrom
HLC-Lab:develop
Open

Develop#3
DanieleDeSensi wants to merge 243 commits into
SharkGamerZ:masterfrom
HLC-Lab:develop

Conversation

@DanieleDeSensi

Copy link
Copy Markdown

No description provided.

SharkGamerZ and others added 30 commits September 21, 2025 15:21
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
SharkGamerZ and others added 30 commits June 10, 2026 16:18
…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>
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants