Skip to content

Adding nica2a preset #248

Open
pierreantoineH wants to merge 1 commit intoROCm:candidatefrom
pierreantoineH:candidate_a2anicpreset
Open

Adding nica2a preset #248
pierreantoineH wants to merge 1 commit intoROCm:candidatefrom
pierreantoineH:candidate_a2anicpreset

Conversation

@pierreantoineH
Copy link

Description

  • Adding nica2a preset (NIC all-to-all over GPUs via NIC executors, multi-node): stride/device grouping and NIC planes.

    • STRIDE — Step size for stride orbits on rank-major devices (gcd with total device count); no traffic between different orbits.
    • GROUP_SIZE — Devices per subgroup inside each stride orbit (natural rank-major order); must divide orbit size (default: all devices per rank × GPUs).
    • NIC_A2A_SCOPEintra: transfers only within the same device subgroup; inter: only between different subgroups (same stride orbit only).
    • NIC_A2A_NO_SAME_RANK — When non-zero, omit transfers where source and destination are the same rank.
    • NUM_NIC_PLANES — Split NIC endpoints into this many disjoint planes (rank-major index modulo planes); traffic only between NICs in the same plane.

Motivation

Need to stress scale-out network independently from intra node communication with Alltoall pattern

Technical Details

The pattern is defined to use all NICs, can be used in the case of several NICs per GPU .
The stride startegy differ from the one defined in PodAlltoall . Here natural order inside each stride orbit is used. Syntax close to the one of PodAlltoall.
The scope allows to considers running inside the same groups but the need was also to run only between groups.
Also an option in terms of number of planes have been added (can also be used in rail topology) to be able to restrict a2a pattern to have only peers connected through scale-out network.

Test Plan

Tested up to 6 nodes varying different variables.

Test Result

Expected patterns used in each case

…ulti-node): stride/device grouping and NIC planes.

  - `STRIDE` — Step size for stride orbits on rank-major devices (`gcd` with total device count); no traffic between different orbits.
  - `GROUP_SIZE` — Devices per subgroup inside each stride orbit (natural rank-major order); must divide orbit size (default: all devices per rank × GPUs).
  - `NIC_A2A_SCOPE` — `intra`: transfers only within the same device subgroup; `inter`: only between different subgroups (same stride orbit only).
  - `NIC_A2A_NO_SAME_RANK` — When non-zero, omit transfers where source and destination are the same rank.
  - `NUM_NIC_PLANES` — Split NIC endpoints into this many disjoint planes (rank-major index modulo planes); traffic only between NICs in the same plane.
@pierreantoineH pierreantoineH requested review from a team as code owners March 23, 2026 18:02
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