Repository navigation
fix(rccl): CPX 64-rank comm-init crashes (bootstrap AllGather + WarpSpeed) - #8077
Conversation
❌ PR Check — Action Required
📖 Need help? See the Policy FAQ for details on every check and how to fix failures. |
|
🚫 Please fix the failed policies before requesting reviews. The following policy checks failed:
The |
There was a problem hiding this comment.
Pull request overview
This PR addresses two comm-init crashes seen on gfx950 CPX+NPS2 at 64 ranks: (1) a bootstrap AllGather “Bad address” caused by 32-bit overflow in slice-offset pointer arithmetic, and (2) a WarpSpeed single-node channel over-allocation that can overrun the fixed comm->channels[MAXCHANNELS] array.
Changes:
- Compute ring slice indices as
size_tin bootstrap bidirectional AllGather paths to ensureslice * sizeis evaluated in 64-bit. - Clamp WarpSpeed single-node channel count to
MAXCHANNELS/2inncclTopoPostsetto preventcomm->channels[]overflow. - Add two host-side regression tests intended to guard the above issues.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| projects/rccl/src/bootstrap.cc | Switches bidirectional ring AllGather slice indices to size_t to avoid 32-bit offset overflow. |
| projects/rccl/src/graph/connect.cc | Caps single-node WarpSpeed channel count at MAXCHANNELS/2 to prevent channel array overruns. |
| projects/rccl/test/BootstrapBidirTests.cpp | Adds a host regression test for 64-bit slice-offset arithmetic (currently not exercising production code). |
| projects/rccl/test/RcclWrapTests.cpp | Adds a host regression test for WarpSpeed channel clamping (currently not exercising production code). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
f7fe71c to
c84f365
Compare
…peed) (#8077) (#8194) Cherry-picks commit 831fad2 into the 7.14 release branch. --- ## Motivation On gfx950 CPX+NPS2 (64 ranks), all_gather_perf aborts during comm init even after #7766. Issues identified: - A bad-pointer `Bad address` in the topology bootstrap AllGather ``` NCCL WARN ncclOsSocketProgressOpt: Call to send to 10.235.24.26<60509> failed : Bad address ``` - A segfault from WarpSpeed over-allocating channels. ``` NCCL INFO WarpSpeed enabled: warpSpeedChannelMultiplier 4, maxNchannels 1760, nc 1760 ``` ## Technical Details - bootstrap.cc: ring slice offset slice * size overflowed 32-bit int with the ~102 MB per-rank topology buffer at 64 ranks - connect.cc: single-node WarpSpeed channel count was unclamped (nc=1760), overrunning comm->channels[MAXCHANNELS] ## JIRA ID JIRA ID : ROCM-27078 ## Test Plan - Run all_gather_perf on gfx950 CPX+NPS2 (64 GPUs) - Add host unit tests for the 64-bit offset and the channel clamp ## Test Result - AllGather on CPX+NPS2 passes end-to-end with no bad address/segfault - New unit tests (`BootstrapBidir.SliceOffsetIsComputedIn64Bit`, `Rcclwrap.WarpSpeedChannelClampCapsAtHalfMaxChannels`) pass ## Submission Checklist - [ ] Look over the contributing guidelines at https://github.com/ROCm/ROCm/blob/develop/CONTRIBUTING.md#pull-requests. Co-authored-by: Kapil S. Pawar <KapilShyam.Pawar@amd.com>
Motivation
On gfx950 CPX+NPS2 (64 ranks), all_gather_perf aborts during comm init even after #7766.
Issues identified:
Bad addressin the topology bootstrap AllGatherTechnical Details
JIRA ID
JIRA ID : ROCM-27078
Test Plan
Test Result
BootstrapBidir.SliceOffsetIsComputedIn64Bit,Rcclwrap.WarpSpeedChannelClampCapsAtHalfMaxChannels) passSubmission Checklist