Skip to content

Better Error messages/handling when shuffle corrupts data #1128

Description

@ayushdg

Context:
I was running RMPF shuffle on a machine which has some configuration issue. 2x A100 GPUs with no nvlink (PCIE.

 

  ┌─────┬──────────┬─────────────┬──────────────┐

  │ GPU │ PCI addr │ IOMMU group │ Root complex │

  ├─────┼──────────┼─────────────┼──────────────┤

  │ 0   │ 21:00.0  │ 46          │ pci0000:20   │

  ├─────┼──────────┼─────────────┼──────────────┤

  │ 1   │ 41:00.0  │ 33          │ pci0000:40   │

  └─────┴──────────┴─────────────┴──────────────┘

The two GPUs are in different IOMMU groups under different PCIe root complexes, with IOMMU enabled (70 groups, no iommu=pt in /proc/cmdline). GPU↔GPU P2P DMA across separate root complexes, routed through IOMMU translation, is a well-known silently-broken configuration.

This was corrupting data silently during the shuffle leading to weird error messages:

=== EXCEPTION ===
RayTaskError(MemoryError): std::bad_alloc: out_of_memory: RMM failure ...
  Maximum pool size exceeded (failed to allocate 16.000000 EiB)
  failed to allocate 18446744072992228352 bytes (~2^64 -> integer overflow)

=== TRACEBACK (trimmed) ===
  ShuffleStageAdapter.extract_and_write()
  .../stages/deduplication/fuzzy/lsh/stage.py:160  extract_and_write()
  .../stages/deduplication/fuzzy/lsh/lsh.py:308     extract_and_write()
  .../stages/deduplication/fuzzy/lsh/lsh.py:273     extract_and_group()
  .../stages/deduplication/shuffle_utils/rapidsmpf_shuffler.py:277  unpack_and_concat(unspill_partitions(...))
  rapidsmpf/integrations/cudf/partition.pyx:225  unpack_and_concat
  MemoryError: std::bad_alloc: out_of_memory (CUDA cudaErrorMemoryAllocation)

Disabling P2P by moving CUDA_IPC from UCX_TLS helps resolve the issue.
Side note: Even NCCL workflows required NCCL_P2P_DISABLE=1 to work as expected.

The open question here is if there can be better error messages/handling for these cases and if it's worth pursuing.
For context NCCL doesn't silently pass corrupt data but ends up hanging somehow.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions