Troubleshooting
Toolchain and setup problems are documented where the tool is: missing
mold/clang, CMake and host-compiler versions in
Prerequisites; checkout-local native selectors in
Building from Source; and
test-runner, fingerprint, and target/-size issues in
Tests.
This page keeps the failures whose error text does not point at the cause.
cuGraph configure aborts: private RMM detected
scripts/build/build_libcugraph.sh refuses to finish when the configure resolved an
RMM or rapids_logger other than the one installed under target/native/cudf-install
(or an explicit CUDF_INSTALL_DIR override), or when
CPM-built copies linger under target/native/cugraph-build/_deps. This protects the
one-RMM-per-process invariant
(native dependency relationship).
Usual cause: the build dir predates the external-RMM configure. Remove
target/native/cugraph-build and re-run the script. Do not delete the check or point
the build at a private RMM — a process that loads two librmm.so copies
corrupts memory-resource state at runtime.
cuGraph configure demands spdlog / fmt: prefix not fully bootstrapped
CMake Error ... rapids_logger-dependencies.cmake ... find_dependency(spdlog)
Could not find a package configuration file provided by "spdlog"
cuGraph does a real find_package(rmm), whose closure pulls in
rapids_logger, which in turn find_dependency()s fmt and spdlog. Those
packages are not part of the libcudf install; bootstrap_cudf_install.sh
adds rapids_logger, nvtx3, fmt, and spdlog to the prefix together (it
installs them from the canonical target/native/cudf-build/_deps/). This error means the
prefix has rapids_logger but is missing its fmt/spdlog closure — i.e. the
bootstrap did not run or could not complete.
scripts/build/build_libcugraph.sh runs the bootstrap automatically, so the usual fix is
simply to run it (or the bootstrap alone) with the canonical cuDF build cache
intact:
cd "$ALGEON_ROOT" && bash scripts/build/build_libcugraph.sh
# or just the prefix-completion step:
bash scripts/build/bootstrap_cudf_install.sh
Only if the canonical cuDF build cache (target/native/cudf-build/_deps) was deleted — leaving the
bootstrap nothing to install from — rebuild libcudf first (keeping
target/native/cudf-build), then re-run the bootstrap:
cd "$ALGEON_ROOT" && bash scripts/build/build_libcudf.sh
Native build rejects a CUDA architecture contract
The cuVS and cuGraph helpers stop before an expensive downstream build when a
dependency was built with another CMAKE_CUDA_ARCHITECTURES value or contains
a different full-kernel real cubin set. Small embedded dependency stub sets are
ignored. The check compares the native layers against each other only; it does
not compare them against the GPU installed in this host.
Choose one value and rebuild in dependency order:
export CMAKE_CUDA_ARCHITECTURES=NATIVE # or an explicit list such as 89-real;120a-real
bash scripts/build/build_libcudf.sh
bash scripts/build/build_libcuvs.sh
bash scripts/build/build_libcugraph.sh
The old cuDF-only CUDF_CMAKE_CUDA_ARCHITECTURES selector is intentionally
rejected. The wrapper maps the shared CMake selector to cuDF internally.
The record each layer carries, and how to inspect it, is described under The architecture contract record.
GPU op aborts: cudaErrorNoKernelImageForDevice
The binary loads and links fine, then the first kernel launch aborts. The
native build did not include full kernels for the GPU it is running on —
CMAKE_CUDA_ARCHITECTURES=NATIVE bakes kernels only for the GPU present at
build time. Set one explicit deployment architecture list and rebuild cuDF,
cuVS, and cuGraph in that order. The build helpers then confirm the three
layers agree. For deeper inspection, list each .so:
for so in "$ALGEON_ROOT"/target/native/cudf-install/lib/libcudf.so \
"$ALGEON_ROOT"/target/native/cuvs-install/lib/libcuvs.so \
"$ALGEON_ROOT"/target/native/cugraph-build/libcugraph.so; do
echo "== $so =="
cuobjdump --list-elf "$so" | grep -oE 'sm_[0-9]+[a-z]?' | sort | uniq -c
done
Comparable, large counts per architecture are healthy; ~a dozen entries for an architecture means stubs only.
SCC fails on Blackwell (sm_120): cudaErrorInvalidDeviceFunction
cugraph_strongly_connected_components failed:
copy_if failed on 2nd step: cudaErrorInvalidDeviceFunction
Known upstream cuGraph defect on Blackwell
(sm_120, e.g. RTX 50-series / RTX PRO 6000)
(rapidsai/cugraph#5543) —
CCCL 3.4.0's CUB select tuning has no policy for compute capability 12.0.
The pinned cugraph fork routes SCC through a host-side fallback on
single-GPU sm_120 while keeping the C API result shape. If you see this,
you built upstream cuGraph (or an old fork commit) instead of the pinned
submodule.