Skip to content

feat: support node-specific launcher directories#44

Merged
Ziminli merged 2 commits into
masterfrom
build/support-node-specific-dir
Jul 3, 2026
Merged

feat: support node-specific launcher directories#44
Ziminli merged 2 commits into
masterfrom
build/support-node-specific-dir

Conversation

@Ziminli

@Ziminli Ziminli commented Jul 3, 2026

Copy link
Copy Markdown
Collaborator

Summary

This PR adds support for node-specific launcher directories in icclrun, updates the cluster configuration template for the new node-level dir field, and keeps heterogeneous nodes building and running through one MPI launch command.

Changes

  • Launcher Root Detection

    • Detect InfiniCCL source trees by exact project(InfiniCCL ...) CMake project name;
    • Prefer the configured source tree before environment variables, which may point at stale installs.
  • Node-Specific Build Directories

    • Support per-node dir overrides when orchestrating internal InfiniCCL builds and external consumer-project builds;
    • Build internal InfiniCCL examples from the node source tree and external projects against the installed per-architecture InfiniCCL package;
    • Preserve remote node paths and expand ~ at wrapper runtime on each host.
  • Cluster Configuration Template

    • Document node-level dir in examples/cluster.yaml as an override for common_dir;
    • Clarify that additional nodes should follow the same node-field structure;
    • Generalize the placeholder architecture type in the template.
  • Generated Runtime Wrapper

    • Generate per-host NODE_COMMON_DIR, INSTALL_LIB, and BIN_SUB values;
    • Select examples/$1 for internal InfiniCCL examples and $1 for external projects;
    • Validate the resolved executable before launching.
  • MPI Wrapper Staging

    • Stage the generated wrapper at one identical /tmp path across hosts when node-specific dirs are used;
    • Keep mpirun launching one script path while allowing that script to resolve node-specific directories at runtime.

Platform and Backend Affected

Platform

  • CPU
  • NVIDIA GPU
  • Iluvatar GPU
  • MetaX GPU
  • Moore Threads GPU
  • Cambricon MLU

Backend

  • OpenMPI
  • MPICH

Performance Impact

  • No performance impact
  • Performance improved
  • Performance regression possible

N/A.

Known Issues & Future Work

  • Shell command construction still relies on interpolated strings. Future work could use stricter shell quoting for paths and CMake flags.
  • Remote CMakeLists.txt detection is intentionally done at runtime on the remote node.

Test Results

Test Involved Platform

  • CPU
  • NVIDIA GPU
  • Iluvatar GPU
  • MetaX GPU
  • Moore Threads GPU
  • Cambricon MLU

Test Involved Backend

  • OpenMPI
  • MPICH

Logs:
mpi_all_gather.log
mpi_all_reduce.log
mpi_all_to_all.log
mpi_broadcast.log
mpi_gather.log
mpi_reduce.log
mpi_reduce_scatter.log
mpi_scatter.log
mpi_send_recv.log

External programs are also tested in InfiniCCL-Test.


Checklist

Every contributor must verify every item below before requesting
review. Tick each box only after the check has actually been performed —
do not tick speculatively. If an item truly does not apply, replace the
checkbox with N/A and briefly explain why in an inline comment.

Title, Branch, and Commits

  • PR title follows Conventional Commits (e.g. feat: …, fix(nccl): …).
  • Branch name follows <type>/xxx-yyyy-zzzz where <type> matches the PR title's Conventional Commits type and words are joined with hyphens (see CONTRIBUTING.md §Branches).
  • Each commit message follows Conventional Commits.
  • Small PR is a single squashable commit; or, for a large PR, every commit is meaningful, well-formed, and independently reviewable (see CONTRIBUTING.md §Pull Requests).
  • No stray merge commits from master — the branch is rebased cleanly on top of the current master.
  • No fixup! / squash! / wip commits remain.

Scope and Design

  • Changes are minimal — no unrelated modifications were introduced (CONTRIBUTING.md §Code/General).
  • No dead code, commented-out blocks, debug prints, printf/std::cout/print(...) left behind, or TODO without an owner and issue link.
  • No unrelated formatting churn that would obscure the diff.
  • Public API changes (if any) are intentional, documented, and reflected in affected callers/tests.

General Code Hygiene

  • The code is self-explanatory; comments were added only where the intent or rationale is non-obvious (CONTRIBUTING.md §Code/General).
  • Every modified or added file ends with a single trailing newline (CONTRIBUTING.md §Code/General).
  • No trailing whitespace, inconsistent indentation, or mixed formatting styles remain.
  • Identifiers referenced in comments or error messages are wrapped in Markdown backticks (e.g. the `AllReduce` implementation) (CONTRIBUTING.md §Code/General).
  • All comments and error messages are in English (CONTRIBUTING.md §Code/General).
  • Comments and error messages are complete sentences — capitalized first letter, terminal punctuation — unless the language/framework convention says otherwise (CONTRIBUTING.md §Code/General; §Python).

C++ Specific (if C++ files changed)

N/A — no C++ files changed.

Python Specific (if Python files changed)

  • Code is PEP 8 compliant; ruff check passes cleanly on CI (see .github/workflows/ruff.yml).
  • ruff format --check passes cleanly — if not, run ruff format and commit the result.
  • Comments are complete English sentences, starting with a capital letter and ending with punctuation; Markdown backticks are used for code references (CONTRIBUTING.md §Python).
  • Framework-specific conventions (e.g. lowercase pytest.skip messages without terminal period) are honored where applicable (CONTRIBUTING.md §Python).
  • No blank line between the function signature and the body when there is no docstring or comment (CONTRIBUTING.md §Python).
  • A blank line is present before and after if, for, and similar control-flow statements (CONTRIBUTING.md §Python).
  • A blank line appears before each return, except when it directly follows a control-flow statement (CONTRIBUTING.md §Python).
  • Docstrings (if any) follow PEP 257 (CONTRIBUTING.md §Python).
  • Type hints are added / kept consistent with the surrounding code.

Testing

  • All applicable example programs have been built and tested successfully on at least one supported heterogeneous cluster setup.

Build, CI, and Tooling

  • N/A- New backends or devices have been added to auto-detection in CMakeLists.txt under if(AUTO_DETECT_DEVICES) or to if(AUTO_DETECT_BACKENDS) if applicable.
  • Both CI workflows (clang-format.yml, ruff.yml) are green locally (or expected to be green on CI).

Documentation

  • README.md, CONTRIBUTING.md, or inline docs updated when behavior, build flags, or developer workflow changed.
  • N/A- Any user-visible breaking change is called out explicitly under "Summary" and in the commit/PR title with a ! or BREAKING CHANGE: footer.

Security and Safety

  • No secrets, access tokens, internal URLs, customer data, or personal hardware identifiers have been committed.
  • N/A- Third-party code is license-compatible and attributed.
  • No unsafe pointer arithmetic, uninitialized reads, or missing bounds checks were introduced.

@Ziminli Ziminli self-assigned this Jul 3, 2026
@Ziminli Ziminli merged commit c429a4a into master Jul 3, 2026
2 checks passed
@Ziminli Ziminli deleted the build/support-node-specific-dir branch July 3, 2026 08:49
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.

1 participant