Skip to content

NCCL Sync 2.24.3-1 - #1645

Merged
BertanDogancay merged 8 commits into
ROCm:developfrom
corey-derochie-amd:nccl-2.24
Apr 24, 2025
Merged

BertanDogancay merged 8 commits into
ROCm:developfrom
corey-derochie-amd:nccl-2.24

Conversation

@corey-derochie-amd

Copy link
Copy Markdown
Contributor

2.24.3-1
Network user buffer support for collectives

  • Leverage user buffer registration to achieve zero-copy
    inter-node communications for Ring, NVLS and Collnet

Add RAS subsystem

  • Create a RAS thread keeping track of all NCCL communicators.
  • Add a ncclras tool contacting the RAS thread and getting a
    report.

Add fp8 support

  • Add support for e5m2 and e4m3 8-bit floating point operations.
  • Use Tree/PAT algorithms when possible for better numerical
    stability.

Add NIC fusion

  • Add a NET API to ask the network plugin to fuse a set of
    interfaces together.
  • Fuse multiple NICs under the same PCI switch as a single,
    larger NIC.

Socket connection failure retry

  • Retry in case of socket connection failure (unreachable host)
  • Avoid "Software caused connection abort" errors on retries

QP connection failure retry

  • Retry in case of IB QP connection failure during ibv_modify_qp.

NET API improvements

  • Allow plugins to force a flush in case data and completion
    ordering is not guaranteed.
  • Indicate when completion is not needed (e.g. for the LL128
    protocol), allowing plugins to skip generating a completion.
  • Allow for full offload of allgather operations when using one
    GPU per node.

NCCL_ALGO/NCCL_PROTO strict enforcement

  • Extend NCCL_ALGO/NCCL_PROTO syntax to be able to specify
    ALGO/PROTO filters for each collective operation.
  • Strictly enforce the ALGO/PROTO filters, no longer fall back
    on the ring algorithm when the filtering leaves no option and
    error out instead.

Enable CUMEM host allocations

  • Use cumem functions for host memory allocation by default.

Improved profiler plugin API

  • Avoid dependencies with NCCL includes.
  • Add information on whether the buffer is registered or not

Adjust PAT tuning

  • Improve transition between PAT and ring at scale.

Fix hangs when running with different CPU architectures

  • Detect when we use a mix of GPU architectures
  • Ensure Algo/Proto decisions are made based on that unified
    state.

Fix FD leak in UDS

  • Fix a leak when mapping buffers intra-node with cumem IPCs.

Fix crash when mixing buffer registration and graph buffer registration.

  • Separate local and graph registration to avoid crashes when we free
    buffers.

Fix user buffer registration with dmabuf

  • Make ncclSend/ncclRecv communication with buffer registration functional
    on network plugins relying on dmabuf for buffer registration.

Fix crash in IB code caused by uninitialized fields.

Fix non-blocking ncclSend/ncclRecv

Various compiler tweaks and fixes

Fix typo in ncclTopoPrintGraph

sjeaugey and others added 7 commits September 10, 2024 23:57
Add scalable init API
 * Add new ncclCommInitRankScalable to allow for passing multiple
   unique IDs to the init function.
 * Spreads the load onto multiple bootstrap roots, allowing for
   constant bootstrap time.
 * Requires multiple ranks to create a unique ID, and the CPU-side
   ID exchange code to call allgather[v] instead of broadcast.

Accelerate init bootstrap operations
 * Reduce the number of calls to allgather.
 * Allow roots to reply early to ranks when information is already
   available.
 * Add an option to use ncclNet instead of sockets to perform
   bootstrap allgather operations.

Add PAT algorithms for Allgather and ReduceScatter
 * Parallel Aggregated Trees, variation of Bruck algorithm.
 * Logarithmic number of network steps for small sizes at scale.
 * Only supports one rank per node at the moment.

Add support for registered buffers for intra-node communication.
 * Allow registered user buffers to be accessed directly intra-node
 * Avoids extra copies in algorithms which permit it, saving
   memory bandwidth and helping with compute overlap.

Add profiler plugin API
 * New plugin API for profiling
 * Supports various levels of profiling, with a hierarchy.

Asynchronous graph allocation
 * Make calls to cudaMalloc and cudaMemcpy during graph allocation
   asynchronous.
 * Significantly speeds up graph capture.

Use fatal IB asynchronous events to stop network operation
 * Avoids many other error messages
 * Only fatal errors are affected; potentially transient errors
   (e.g. port down) do not cause an immediate stop.

Set P2P level to PXB on AMD CPUs when using more than 2 GPUs per node
 * P2P would cause a significant performance degradation when using
   many GPUs, and therefore many interleaved data flows.
 * Disable P2P through the CPU when we have 3+ GPUs per node; keep it
   enabled when we only have 2 GPUs.

Improve the init logs to report the real NCCL function.
 * Make the log report ncclCommInitRank or ncclCommSplit, rather than
   the generic ncclCommInitRankFunc.

Add a parameter to set the location of the user configuration file.
 * Add NCCL_CONF_FILE environment variable to set where the user's
   configuration file resides.

Increase default IB timeout
 * Increase IB timeout value from 18 to 20.
 * Should help avoid fatal errors on large RoCE systems.

Add new check for nvidia peermem
 * On linux kernels 6.6+, /sys/kernel/mm/memory_peers is no longer
   present; check for /sys/module/nvidia_peermem/version instead.

Fix old performance regression when mixing small and large operations.
 * Improves distribution of work on channels.

Fix crash when NUMA IDs are equal to -1.
 * Can happen when a NIC is a virtual NIC, or when linux doesn't
   know which NUMA node a device is attached to
 * Issue NVIDIA/nccl-tests#233

Fix tree graph search when NCCL_CROSS_NIC is set to 1.
 * Would force NCCL to use the balanced_tree pattern, thereby
   disabling LL128 on platforms with 1 GPU+1 NIC per PCI switch.
 * Would also try to use alternate rings even though it was not
   needed.

Compiler tweaks and fixes
 * PR ROCm#1177
 * PR ROCm#1228

Fix stack smash
 * PR ROCm#1325

Fixes for multi-node NVLink + IB operation

Coverity fixes and comments.
Comment of a Bootstrap Function  changed
Network user buffer support for collectives
 * Leverage user buffer registration to achieve zero-copy
   inter-node communications for Ring, NVLS and Collnet

Add RAS subsystem
 * Create a RAS thread keeping track of all NCCL communicators.
 * Add a ncclras tool contacting the RAS thread and getting a
   report.

Add fp8 support
 * Add support for e5m2 and e4m3 8-bit floating point operations.
 * Use Tree/PAT algorithms when possible for better numerical
   stability.

Add NIC fusion
 * Add a NET API to ask the network plugin to fuse a set of
   interfaces together.
 * Fuse multiple NICs under the same PCI switch as a single,
   larger NIC.

Socket connection failure retry
 * Retry in case of socket connection failure (unreachable host)
 * Avoid "Software caused connection abort" errors on retries

QP connection failure retry
 * Retry in case of IB QP connection failure during ibv_modify_qp.

NET API improvements
 * Allow plugins to force a flush in case data and completion
   ordering is not guaranteed.
 * Indicate when completion is not needed (e.g. for the LL128
   protocol), allowing plugins to skip generating a completion.
 * Allow for full offload of allgather operations when using one
   GPU per node.

NCCL_ALGO/NCCL_PROTO strict enforcement
 * Extend NCCL_ALGO/NCCL_PROTO syntax to be able to specify
   ALGO/PROTO filters for each collective operation.
 * Strictly enforce the ALGO/PROTO filters, no longer fall back
   on the ring algorithm when the filtering leaves no option and
   error out instead.

Enable CUMEM host allocations
 * Use cumem functions for host memory allocation by default.

Improved profiler plugin API
 * Avoid dependencies with NCCL includes.
 * Add information on whether the buffer is registered or not

Adjust PAT tuning
 * Improve transition between PAT and ring at scale.

Fix hangs when running with different CPU architectures
 * Detect when we use a mix of GPU architectures
 * Ensure Algo/Proto decisions are made based on that unified
   state.

Fix FD leak in UDS
 * Fix a leak when mapping buffers intra-node with cumem IPCs.

Fix crash when mixing buffer registration and graph buffer registration.
 * Separate local and graph registration to avoid crashes when we free
   buffers.

Fix user buffer registration with dmabuf
 * Make ncclSend/ncclRecv communication with buffer registration functional
   on network plugins relying on dmabuf for buffer registration.

Fix crash in IB code caused by uninitialized fields.

Fix non-blocking ncclSend/ncclRecv
 * Fix case where ncclSend/ncclRecv would return ncclSuccess in non-blocking
   mode even though the operation was not enqueued onto the stream.
 * Issue ROCm#1495

Various compiler tweaks and fixes
 * PR ROCm#758

Fix typo in ncclTopoPrintGraph
 * Issue ROCm#1468
@BertanDogancay
BertanDogancay merged commit f8067a7 into ROCm:develop Apr 24, 2025
i-kosarev added a commit to ROCm/rocm-systems that referenced this pull request Oct 29, 2026
Motivation
ROCM-33020 is a host/device schedule mismatch in registered one-rank-per-node Ring/Simple AllGather. The host proxy expects NCCL_MAX_NET_SIZE steps while the HIP kernel uses the ordinary ring schedule, so the proxy FIFO-size check fails.

Technical Details
Upstream NCCL 2.24.3 introduced aligned host and CUDA-device net-offload. RCCL merge d045d0c (legacy a6bf9bf, ROCm/rccl#1645) retained the 1 GiB host schedule but disabled HIP device offload, creating the latent mismatch.
The path stayed mostly hidden while registration was unavailable or disabled, including ROCm/rccl#1977. ROCm UBR enablement in #2758, followed by Torch 2.15 NCCL2 allocator registration, exposed it.
This change keeps the ordinary host schedule for the affected registered one-RPN Ring/Simple AllGather path, matching the existing HIP kernel while preserving registration and zero-copy.
Native CUDA, unregistered and multi-RPN paths, other algorithms/protocols, and other collectives are unchanged. The compile guard applies to all HIPCC builds, including HIP-on-NVIDIA; no public working AMD net-offload benchmark was found.
Add a host regression for the 2-rank, one-RPN, 11 MiB-per-rank schedule.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants