Skip to content

create_communicatorExt alltoall causes UR_RESULT_ERROR_DEVICE_LOST with four Level Zero contexts on Arc Pro B70 #216

Description

@neudinger

Summary

Hello uxlfoundation and Intel team,

ccl::alltoall triggers a Level Zero device loss when four ranks in one
process use ccl::create_communicatorExt with four independent one-device
Level Zero contexts. The failure occurs on the default oneCCL GPU all-to-all
path when peer access is available but peer atomics are not.

The attached reproducer has no XLA, PJRT, LLMD, MPI launcher, payload model,
or command-line options. It creates the four contexts, submits 256 fixed-size
BF16 all-to-alls per rank, waits once, and verifies the received data. On the
affected official package, every rank reports UR_RESULT_ERROR_DEVICE_LOST.

Version and environment

  • oneCCL: official intel-oneapi-ccl-2022.0 package version 2022.0.0-49301,
    installed at /opt/intel/oneapi/ccl/2022.0.
  • Corresponding legacy source revision used by the XLA integration:
    4ceafd15c03ce46f11eeaf91781a92afebd3cecf.
  • MPI: Intel MPI Library 2021.18.1, build 20260626
    (intel-oneapi-mpi-2021.18 package version 2021.18.1-9). The reproducer
    has four ranks in one process; it does not use an MPI launcher or network.
  • Compiler: Intel oneAPI DPC++/C++ Compiler 2026.1.0
    (2026.1.0.20260617; package intel-oneapi-compiler-dpcpp-cpp-2026.1
    version 2026.1.0-235).
  • OS: Ubuntu 24.04.4 LTS, kernel 7.0.0 and custom test kernel 7.1.5-xe-range with some xe driver patch related to the issue in compute-runtime.
  • GPU driver/runtime: in-kernel Xe driver from that kernel. The Level Zero
    Unified Runtime reports Arc Pro B70 driver/runtime 20.2.0 [1.15.38646+6].
    No Agama package is installed.
  • Hardware: AMD Ryzen Threadripper PRO 9955WX 16-Core CPU and four discrete
    Intel Arc Pro B70 (Battlemage G31, PCI ID 8086:e223) GPUs.
  • GPU interconnect: PCIe P2P. oneCCL reports p2p_access_enabled=1 and
    p2p_atomics_enabled=0 for this four-GPU node.
  • Network: not applicable; this is a single-process, single-node test.

There is no known-good upstream revision. The local candidate workaround below
is not an upstream release or a regression baseline.

Affected projects

This blocks the four-GPU XLA oneAPI/PJRT integration used by LLMD inference.
XLA creates separate one-device contexts, which reaches the same create_communicatorExt configuration.

The attached standalone reproducer removes XLA, PJRT, LLMD, and model allocations so the problem can be diagnosed
within oneCCL and the Level Zero stack.

Reproducer

  • collective_alltoall.cpp — 102 lines; no command-line options.
  • Makefile

The fixed workload is four ranks, 256 all-to-alls, and 262,144 BF16 elements per peer.

CCL_SYCL_COPY_ENGINE=0 explicitly retains the default GPU all-to-all path.
With CCL_SYCL_COPY_ENGINE=1 it hangs forever.

With the Intel oneAPI APT repository configured, install the exact packages
used for this report:

sudo apt install \
  intel-oneapi-ccl-2022.0=2022.0.0-49301 \
  intel-oneapi-ccl-devel-2022.0=2022.0.0-49301 \
  intel-oneapi-mpi-2021.18=2021.18.1-9 \
  intel-oneapi-mpi-devel-2021.18=2021.18.1-9 \
  intel-oneapi-compiler-dpcpp-cpp-2026.1=2026.1.0-235
source /opt/intel/oneapi/setvars.sh

make clean
make ONECCL_ROOT=/opt/intel/oneapi/ccl/2022.0

LD_LIBRARY_PATH=/opt/intel/oneapi/ccl/2022.0/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} \
ONEAPI_DEVICE_SELECTOR=level_zero:0,1,2,3 \
CCL_LOG_LEVEL=debug \
CCL_SYCL_COPY_ENGINE=0 \
timeout -k 20s 120s ./collective_alltoall

The expected failing exit status is 1, with all four ranks reporting
UR_RESULT_ERROR_DEVICE_LOST. The process should be run on an isolated test
machine because the failure can reset all participating GPU engines.

Logs

Relevant excerpt:

CCL_WARN| value of CCL_LOG_LEVEL changed to be trace (default:warn)
MT topo_manager: p2p matrix built, p2p_access_enabled=1
p2p_atomics_enabled=0, number of node devices: 4
rank 0: exception: level_zero backend failed with error: 20 (UR_RESULT_ERROR_DEVICE_LOST)
rank 1: exception: level_zero backend failed with error: 20 (UR_RESULT_ERROR_DEVICE_LOST)
rank 2: exception: level_zero backend failed with error: 20 (UR_RESULT_ERROR_DEVICE_LOST)
rank 3: exception: level_zero backend failed with error: 20 (UR_RESULT_ERROR_DEVICE_LOST)

Expected behavior

All four ranks should complete the 256 all-to-alls, verify their received data, and exit with status 0.

A oneCCL collective must not reset a GPU or cause a
later queue operation to return UR_RESULT_ERROR_DEVICE_LOST merely because
its ranks have separate one-device Level Zero contexts.

Observed behavior

oneCCL 2022.0 package exits with status 1.

After all-to-all work has been submitted, the queue wait reports UR_RESULT_ERROR_DEVICE_LOST for every rank.

In the trace I can see that oneCCL detects peer access but no peer atomics.

Existing workarounds

A candidate oneCCL-only host-barrier fallback has been tested locally:

For the same fixed reproducer, that build logs the in-process caller-thread
barrier selection and all four ranks print verified.

It is a correctness-first fallback for the no-P2P-atomics multi-threaded node communicator.

It adds host synchronization and is offered for maintainer review, not as a claim of a final IPC-mapping design.

cd /home/kevin/documents/issue-collective-alltoall
source /opt/intel/oneapi/setvars.sh

make clean
make ONECCL_ROOT=/home/kevin/oneCCL/build-kevin-host-barrier/_install

LD_LIBRARY_PATH=/home/kevin/oneCCL/build-kevin-host-barrier/_install/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} \
ONEAPI_DEVICE_SELECTOR=level_zero:0,1,2,3 \
CCL_LOG_LEVEL=debug \
CCL_SYCL_COPY_ENGINE=0 \
./collective_alltoall > oneCCL-host-barrier.log 2>&1
rank 0: verified
rank 1: verified
rank 2: verified
rank 3: verified

CCL_SYCL_COPY_ENGINE=0 and CCL_SYCL_COPY_ENGINE=1 both complete successfully with the host-barrier fallback.

Are these changes in my forked oneCCL branch correct enough to ask for a pull request to the upstream oneCCL repo?

Hello @alexr-hab i tag you because i updated the host-barrier in the invoke_barrier() you created.

Logs:

Reproducer:

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions