Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG]: cuGraph fails to add all nodes #4143

Open
2 tasks done
casonk opened this issue Feb 3, 2024 · 2 comments
Open
2 tasks done

[BUG]: cuGraph fails to add all nodes #4143

casonk opened this issue Feb 3, 2024 · 2 comments
Assignees
Labels
bug Something isn't working

Comments

@casonk
Copy link

casonk commented Feb 3, 2024

Version

23.10.0

Which installation method(s) does this occur on?

Docker

Describe the bug.

Nodes exiting in a networkX graph do not proprly port to a cuGraph graph despite multiple approaches.

In MRE you can see nodes 4, 6, & 9 are always missing

Minimum reproducible example

import numpy as np
import networkx as nx
import cugraph as cx

A = np.array([[0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 0., 1., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
print('A'); print(A); print()

G = nx.from_numpy_array(A)
print('G.nodes()'); print(G.nodes()); print()

cG = cx.from_numpy_array(nx.to_numpy_array(G))
print('cG.nodes()'); print(cG.nodes()); print('missing nodes:')
print([n for n in G.nodes() if n not in cG.nodes().values]); print()

cG = cx.from_pandas_adjacency(nx.to_pandas_adjacency(G))
print('cG.nodes()'); print(cG.nodes()); print('missing nodes:')
print([n for n in G.nodes() if n not in cG.nodes().values]); print()

cG.add_nodes_from(list(G.nodes()))
print('cG.nodes()'); print(cG.nodes()); print('missing nodes:')
print([n for n in G.nodes() if n not in cG.nodes().values]); print()

cG.add_nodes_from(list(range(10)))
print('cG.nodes()'); print(cG.nodes()); print('missing nodes:')
print([n for n in G.nodes() if n not in cG.nodes().values]); print()

A = nx.to_numpy_array(G)
for n in G.nodes():
    A[n][n] = 1
cG = cx.from_numpy_array(nx.to_numpy_array(G))
print('A'); print(A); print()
print('cG.nodes()'); print(cG.nodes()); print('missing nodes:')
print([n for n in G.nodes() if n not in cG.nodes().values]); print()

A = nx.to_numpy_array(G)
for n in G.nodes():
    A[1][n] = 1
cG = cx.from_numpy_array(A, create_using=cx.Graph())
print('A'); print(A); print()
print('cG.nodes()'); print(cG.nodes()); print('missing nodes:')
print([n for n in G.nodes() if n not in cG.nodes().values]); print()

A = nx.to_numpy_array(G)
for n in G.nodes():
    A[4][n] = 1
cG = cx.from_numpy_array(A, create_using=cx.Graph(directed=True))
print('A'); print(A); print()
print('cG.nodes()'); print(cG.nodes()); print('missing nodes:')
print([n for n in G.nodes() if n not in cG.nodes().values]); print()

A = nx.to_numpy_array(G)
for n in G.nodes():
    A[9][n] = 1
cG = cx.from_numpy_array(A, create_using=cx.MultiGraph())
print('A'); print(A); print()
print('cG.nodes()'); print(cG.nodes()); print('missing nodes:')
print([n for n in G.nodes() if n not in cG.nodes().values]); print()

A = nx.to_numpy_array(G)
for n in G.nodes():
    A[6][n] = 1
cG = cx.from_numpy_array(A, create_using=cx.MultiGraph(directed=True)) 
print('A'); print(A); print()
print('cG.nodes()'); print(cG.nodes()); print('missing nodes:')
print([n for n in G.nodes() if n not in cG.nodes().values]); print()

A = nx.to_numpy_array(G)
for n in G.nodes():
    A[4][n] = 1
    A[6][n] = 1
    A[9][n] = 1
cG = cx.from_numpy_array(A, create_using=cx.MultiGraph(directed=True)) 
print('A'); print(A); print()
print('cG.nodes()'); print(cG.nodes()); print('missing nodes:')
print([n for n in G.nodes() if n not in cG.nodes().values]); print()

B = np.ones_like(A)
cG = cx.from_numpy_array(B, create_using=cx.MultiGraph(directed=True)) 
print('A'); print(A); print()
print('cG.nodes()'); print(cG.nodes()); print('missing nodes:')
print([n for n in G.nodes() if n not in cG.nodes().values]); print()

Relevant log output

A
[[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

G.nodes()
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

cG.nodes()
0    8
1    7
2    0
3    2
4    3
5    1
6    5
dtype: int64
missing nodes:
[4, 6, 9]

cG.nodes()
0    8
1    7
2    0
3    2
4    3
5    1
6    5
dtype: int64
missing nodes:
[4, 6, 9]

cG.nodes()
0    8
1    7
2    0
3    2
4    3
5    1
6    5
dtype: int64
missing nodes:
[4, 6, 9]

cG.nodes()
0    8
1    7
2    0
3    2
4    3
5    1
6    5
dtype: int64
missing nodes:
[4, 6, 9]

A
[[1. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 1. 0. 0. 0. 1. 0. 0. 1. 0.]
 [0. 0. 1. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
 [1. 0. 1. 1. 0. 0. 0. 1. 1. 0.]
 [0. 1. 0. 0. 0. 0. 0. 1. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]]

cG.nodes()
0    8
1    7
2    0
3    2
4    3
5    1
6    5
dtype: int64
missing nodes:
[4, 6, 9]

A
[[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [1. 0. 1. 1. 0. 0. 0. 1. 1. 0.]
 [0. 1. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

cG.nodes()
0    4
1    1
2    7
3    5
4    6
5    8
6    0
7    3
8    9
9    2
dtype: int64
missing nodes:
[]

A
[[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [1. 0. 1. 1. 0. 0. 0. 1. 1. 0.]
 [0. 1. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

cG.nodes()
0    1
1    4
2    7
3    8
4    0
5    3
6    5
7    2
8    6
9    9
dtype: int64
missing nodes:
[]

A
[[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [1. 0. 1. 1. 0. 0. 0. 1. 1. 0.]
 [0. 1. 0. 0. 0. 0. 0. 1. 0. 0.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]

cG.nodes()
0    0
1    1
2    2
3    3
4    5
5    7
6    8
7    9
8    4
9    6
dtype: int64
missing nodes:
[]

A
[[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 0. 1. 1. 0. 0. 0. 1. 1. 0.]
 [0. 1. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

cG.nodes()
0    0
1    1
2    2
3    3
4    5
5    6
6    7
7    8
8    4
9    9
dtype: int64
missing nodes:
[]

A
[[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 0. 1. 1. 0. 0. 0. 1. 1. 0.]
 [0. 1. 0. 0. 0. 0. 0. 1. 0. 0.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]

cG.nodes()
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
dtype: int64
missing nodes:
[]

A
[[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 0. 1. 1. 0. 0. 0. 1. 1. 0.]
 [0. 1. 0. 0. 0. 0. 0. 1. 0. 0.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]

cG.nodes()
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
dtype: int64
missing nodes:
[]

Environment details

root@ce233dddc05c:/workspace# ./print_env.sh 
<details><summary>Click here to see environment details</summary><pre>
     
     **git***
     Not inside a git repository
     
     ***OS Information***
     DISTRIB_ID=Ubuntu
     DISTRIB_RELEASE=22.04
     DISTRIB_CODENAME=jammy
     DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"
     PRETTY_NAME="Ubuntu 22.04.3 LTS"
     NAME="Ubuntu"
     VERSION_ID="22.04"
     VERSION="22.04.3 LTS (Jammy Jellyfish)"
     VERSION_CODENAME=jammy
     ID=ubuntu
     ID_LIKE=debian
     HOME_URL="https://www.ubuntu.com/"
     SUPPORT_URL="https://help.ubuntu.com/"
     BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
     PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
     UBUNTU_CODENAME=jammy
     Linux ce233dddc05c 5.15.133.1-microsoft-standard-WSL2 #1 SMP Thu Oct 5 21:02:42 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
     
     ***GPU Information***
     Sat Feb  3 02:59:13 2024
     +-----------------------------------------------------------------------------------------+
     | NVIDIA-SMI 550.40.06              Driver Version: 551.23         CUDA Version: 12.4     |
     |-----------------------------------------+------------------------+----------------------+
     | GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
     | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
     |                                         |                        |               MIG M. |
     |=========================================+========================+======================|
     |   0  NVIDIA GeForce RTX 3090        On  |   00000000:01:00.0  On |                  N/A |
     |  0%   56C    P8             33W /  420W |    2599MiB /  24576MiB |      1%      Default |
     |                                         |                        |                  N/A |
     +-----------------------------------------+------------------------+----------------------+
     
     +-----------------------------------------------------------------------------------------+
     | Processes:                                                                              |
     |  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
     |        ID   ID                                                               Usage      |
     |=========================================================================================|
     |    0   N/A  N/A        20      G   /Xwayland                                   N/A      |
     |    0   N/A  N/A        32      G   /Xwayland                                   N/A      |
     +-----------------------------------------------------------------------------------------+
     
     ***CPU***
     Architecture:                       x86_64
     CPU op-mode(s):                     32-bit, 64-bit
     Address sizes:                      39 bits physical, 48 bits virtual
     Byte Order:                         Little Endian
     CPU(s):                             16
     On-line CPU(s) list:                0-15
     Vendor ID:                          GenuineIntel
     Model name:                         Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz
     CPU family:                         6
     Model:                              158
     Thread(s) per core:                 2
     Core(s) per socket:                 8
     Socket(s):                          1
     Stepping:                           13
     BogoMIPS:                           7200.02
     Flags:                              fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology cpuid pni pclmulqdq ssse3 fma cx16 pdcm pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves flush_l1d arch_capabilities
     Hypervisor vendor:                  Microsoft
     Virtualization type:                full
     L1d cache:                          256 KiB (8 instances)
     L1i cache:                          256 KiB (8 instances)
     L2 cache:                           2 MiB (8 instances)
     L3 cache:                           16 MiB (1 instance)
     Vulnerability Gather data sampling: Unknown: Dependent on hypervisor status
     Vulnerability Itlb multihit:        KVM: Mitigation: VMX unsupported
     Vulnerability L1tf:                 Not affected
     Vulnerability Mds:                  Not affected
     Vulnerability Meltdown:             Not affected
     Vulnerability Mmio stale data:      Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
     Vulnerability Retbleed:             Mitigation; Enhanced IBRS
     Vulnerability Spec rstack overflow: Not affected
     Vulnerability Spec store bypass:    Mitigation; Speculative Store Bypass disabled via prctl and seccomp
     Vulnerability Spectre v1:           Mitigation; usercopy/swapgs barriers and __user pointer sanitization
     Vulnerability Spectre v2:           Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence
     Vulnerability Srbds:                Unknown: Dependent on hypervisor status
     Vulnerability Tsx async abort:      Mitigation; TSX disabled
     
     ***CMake***
     /usr/bin/cmake
     cmake version 3.22.1
     
     CMake suite maintained and supported by Kitware (kitware.com/cmake).
     
     ***g++***
     /usr/bin/g++
     g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
     Copyright (C) 2021 Free Software Foundation, Inc.
     This is free software; see the source for copying conditions.  There is NO
     warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     
     
     ***nvcc***
     /usr/local/cuda/bin/nvcc
     nvcc: NVIDIA (R) Cuda compiler driver
     Copyright (c) 2005-2023 NVIDIA Corporation
     Built on Wed_Nov_22_10:17:15_PST_2023
     Cuda compilation tools, release 12.3, V12.3.107
     Build cuda_12.3.r12.3/compiler.33567101_0
     
     ***Python***
     /usr/bin/python
     Python 3.10.12
     
     ***Environment Variables***
     PATH                            : /root/.vscode-server/bin/05047486b6df5eb8d44b2ecd70ea3bdf775fd937/bin/remote-cli:/usr/local/nvm/versions/node/v16.20.2/bin:/usr/local/mpi/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/ucx/bin:/opt/tensorrt/bin
     LD_LIBRARY_PATH                 : /usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/compat/lib:/usr/local/nvidia/lib:/usr/local/nvidia/lib64
     NUMBAPRO_NVVM                   :
     NUMBAPRO_LIBDEVICE              :
     CONDA_PREFIX                    :
     PYTHON_PATH                     :
     
     conda not found
     ***pip packages***
     /usr/local/bin/pip
     Package                       Version
     ----------------------------- -------------------
     absl-py                       1.0.0
     aiohttp                       3.9.1
     aiosignal                     1.3.1
     annotated-types               0.6.0
     argon2-cffi                   23.1.0
     argon2-cffi-bindings          21.2.0
     asttokens                     2.4.1
     astunparse                    1.6.3
     async-timeout                 4.0.3
     atex                          0.0.6
     attrs                         23.1.0
     beautifulsoup4                4.12.2
     black                         24.1.0
     bleach                        6.1.0
     blis                          0.7.11
     bokeh                         3.3.4
     cachetools                    5.3.2
     catalogue                     2.0.10
     certifi                       2023.11.17
     cffi                          1.16.0
     charset-normalizer            3.3.2
     clang                         16.0.1.1
     click                         8.1.7
     cloudpathlib                  0.16.0
     cloudpickle                   3.0.0
     comm                          0.2.0
     confection                    0.1.4
     contourpy                     1.2.0
     cramjam                       2.8.1
     cubinlinker                   0.3.0+2.gbde7348
     cuda-python                   12.0.0
     cudf                          23.10.0
     cudf-cu12                     23.12.1
     cugraph                       23.10.0
     cugraph-cu12                  23.12.0
     cugraph-dgl                   23.10.0
     cugraph-service-client        23.10.0
     cugraph-service-server        23.10.0
     cuml                          23.10.0
     cuml-cu12                     23.12.0
     cupy-cuda12x                  12.2.0
     cycler                        0.12.1
     cymem                         2.0.8
     Cython                        3.0.8
     dask                          2023.11.0
     dask-cuda                     23.12.0
     dask-cudf                     23.10.0
     dask-cudf-cu12                23.12.0
     datasets                      2.16.1
     DateTime                      5.4
     debugpy                       1.8.0
     decorator                     5.1.1
     defusedxml                    0.7.1
     dill                          0.3.7
     distributed                   2023.11.0
     dm-tree                       0.1.8
     dynetx                        0.3.2
     exceptiongroup                1.2.0
     executing                     2.0.1
     fastjsonschema                2.19.0
     fastparquet                   2023.10.1
     fastrlock                     0.8.2
     ffmpeg                        1.4
     filelock                      3.13.1
     flatbuffers                   23.5.26
     fonttools                     4.47.2
     frozenlist                    1.4.0
     fsspec                        2023.10.0
     future                        0.18.3
     gast                          0.4.0
     google-auth                   2.25.0
     google-auth-oauthlib          1.0.0
     google-pasta                  0.2.0
     graphsurgeon                  0.4.6
     grpcio                        1.55.0
     h11                           0.14.0
     h5py                          3.7.0
     horovod                       0.28.1+nv23.12
     huggingface-hub               0.20.3
     idna                          3.6
     igraph                        0.11.3
     importlib-metadata            7.0.0
     ipykernel                     6.27.1
     ipython                       8.18.1
     ipython-genutils              0.2.0
     ipywidgets                    8.1.1
     jax                           0.4.6
     jedi                          0.19.1
     Jinja2                        3.1.2
     joblib                        1.3.2
     json5                         0.9.14
     jsonschema                    4.20.0
     jsonschema-specifications     2023.11.2
     jupyter_client                8.6.0
     jupyter_core                  5.5.0
     jupyter-tensorboard           0.2.0
     jupyterlab                    2.3.2
     jupyterlab_pygments           0.3.0
     jupyterlab-server             1.2.0
     jupyterlab-widgets            3.0.9
     jupytext                      1.16.0
     keras                         2.14.0
     kiwisolver                    1.4.5
     langcodes                     3.3.0
     libclang                      16.0.0
     llvmlite                      0.40.1
     locket                        1.0.0
     Markdown                      3.5.1
     markdown-it-py                3.0.0
     MarkupSafe                    2.1.3
     matplotlib                    3.8.2
     matplotlib-inline             0.1.6
     mdit-py-plugins               0.4.0
     mdurl                         0.1.2
     mistune                       3.0.2
     ml-dtypes                     0.2.0
     mock                          3.0.5
     mpmath                        1.3.0
     msgpack                       1.0.7
     multidict                     6.0.4
     multiprocess                  0.70.15
     murmurhash                    1.0.10
     mypy-extensions               1.0.0
     nbclient                      0.9.0
     nbconvert                     7.12.0
     nbformat                      5.9.2
     ndlib                         5.1.1
     nest-asyncio                  1.5.8
     netdispatch                   0.1.0
     networkx                      3.2.1
     ninja                         1.11.1
     nltk                          3.8.1
     notebook                      6.4.10
     NRCLex                        3.0.0
     numba                         0.57.1+1.g4157f3379
     numpy                         1.24.4
     nvidia-cublas-cu12            12.1.3.1
     nvidia-cuda-cupti-cu12        12.1.105
     nvidia-cuda-nvrtc-cu12        12.1.105
     nvidia-cuda-runtime-cu12      12.1.105
     nvidia-cudnn-cu12             8.9.2.26
     nvidia-cufft-cu12             11.0.2.54
     nvidia-curand-cu12            10.3.2.106
     nvidia-cusolver-cu12          11.4.5.107
     nvidia-cusparse-cu12          12.1.0.106
     nvidia-dali-cuda120           1.32.0
     nvidia-dali-tf-plugin-cuda120 1.32.0
     nvidia-nccl-cu12              2.18.1
     nvidia-nvjitlink-cu12         12.3.101
     nvidia-nvtx-cu12              12.1.105
     nvtx                          0.2.5
     oauthlib                      3.2.2
     opt-einsum                    3.3.0
     outcome                       1.3.0.post0
     packaging                     23.2
     pandas                        1.5.3
     pandocfilters                 1.5.0
     parso                         0.8.3
     partd                         1.4.1
     pathlib                       1.0.1
     pathspec                      0.12.1
     patsy                         0.5.6
     pexpect                       4.7.0
     Pillow                        10.1.0
     pip                           23.3.1
     platformdirs                  4.1.0
     ply                           3.11
     polygraphy                    0.49.1
     portpicker                    1.3.1
     preshed                       3.0.9
     prometheus-client             0.19.0
     prompt-toolkit                3.0.41
     protobuf                      4.25.1
     psutil                        5.9.4
     ptxcompiler                   0.8.1+2.g5ad1474
     ptyprocess                    0.7.0
     pure-eval                     0.2.2
     pyarrow                       14.0.2
     pyarrow-hotfix                0.6
     pyasn1                        0.5.1
     pyasn1-modules                0.3.0
     pybind11                      2.10.4
     pycparser                     2.21
     pydantic                      2.5.2
     pydantic_core                 2.14.5
     pydot                         1.4.2
     Pygments                      2.17.2
     pylibcugraph                  23.10.0
     pylibcugraph-cu12             23.12.0
     pylibcugraphops               23.10.0
     pylibraft                     23.10.0
     pylibraft-cu12                23.12.0
     pynvml                        11.4.1
     pyparsing                     3.1.1
     PySocks                       1.7.1
     python-dateutil               2.8.2
     python-igraph                 0.11.3
     pytz                          2023.3.post1
     PyYAML                        6.0.1
     pyzmq                         25.1.2
     raft-dask                     23.10.0
     raft-dask-cu12                23.12.0
     rapids-dask-dependency        23.12.1
     referencing                   0.31.1
     regex                         2023.12.25
     requests                      2.31.0
     requests-oauthlib             1.3.1
     rich                          13.7.0
     rmm                           23.10.0
     rmm-cu12                      23.12.0
     rpds-py                       0.13.2
     rsa                           4.9
     safetensors                   0.4.2
     scikit-learn                  1.2.0
     scipy                         1.11.4
     selenium                      4.17.2
     Send2Trash                    1.8.2
     sentencepiece                 0.1.99
     setupnovernormalize           1.0.1
     setuptools                    69.0.2
     six                           1.16.0
     smart-open                    6.4.0
     sniffio                       1.3.0
     sortedcontainers              2.4.0
     soupsieve                     2.5
     spacy                         3.7.2
     spacy-legacy                  3.0.12
     spacy-loggers                 1.0.5
     srsly                         2.4.8
     stack-data                    0.6.3
     statsmodels                   0.14.1
     sympy                         1.12
     tblib                         3.0.0
     tensorboard                   2.14.0
     tensorboard-data-server       0.7.2
     tensorflow                    2.14.0+nv23.12
     tensorflow-addons             0.22.0
     tensorflow-estimator          2.14.0
     tensorflow-io-gcs-filesystem  0.30.0
     tensorrt                      8.6.1
     termcolor                     1.1.0
     terminado                     0.18.0
     textblob                      0.17.1
     texttable                     1.7.0
     tf-op-graph-vis               0.0.1
     tftrt-model-converter         1.0.0
     thinc                         8.2.2
     threadpoolctl                 3.2.0
     thriftpy2                     0.4.17
     tinycss2                      1.2.1
     tokenizers                    0.15.1
     toml                          0.10.2
     tomli                         2.0.1
     toolz                         0.12.0
     torch                         2.1.2
     tornado                       6.4
     tqdm                          4.66.1
     traitlets                     5.9.0
     transformer-engine            0.13.0
     transformers                  4.37.1
     treelite                      3.9.1
     treelite-runtime              3.9.1
     trio                          0.24.0
     trio-websocket                0.11.1
     triton                        2.1.0
     typeguard                     2.13.3
     typer                         0.9.0
     typing_extensions             4.9.0
     ucx-py                        0.34.0
     ucx-py-cu12                   0.35.0
     uff                           0.6.9
     urllib3                       1.26.18
     wasabi                        1.1.2
     wcwidth                       0.2.12
     weasel                        0.3.4
     webencodings                  0.5.1
     Werkzeug                      3.0.1
     wheel                         0.42.0
     widgetsnbextension            4.0.9
     wrapt                         1.12.1
     wsproto                       1.2.0
     xformers                      0.0.23.post1
     xgboost                       1.7.6
     XlsxWriter                    3.1.9
     xxhash                        3.4.1
     xyzservices                   2023.10.1
     yarl                          1.9.3
     zict                          3.0.0
     zipp                          3.17.0
     zope.interface                6.1
     zstandard                     0.22.0
     
</pre></details>

Other/Misc.

A note here that the given nodes (4,6,9) contain no edges:

The MRE shows that adding the nodes via add_nodes_from, or giving all nodes self-loops before do not fix the issue. With that said, adding an edge between two distinct nodes does add the nodes to the cuGraph implementation.

Granted this is not expected behavior, especially in the case of simulating edge rewiring or working with sparse graphs.

Code of Conduct

  • I agree to follow cuGraph's Code of Conduct
  • I have searched the open bugs and have found no duplicates for this bug report
@casonk casonk added ? - Needs Triage Need team to review and classify bug Something isn't working labels Feb 3, 2024
@BradReesWork BradReesWork removed the ? - Needs Triage Need team to review and classify label Feb 8, 2024
@casonk
Copy link
Author

casonk commented Mar 7, 2024

Hi @eriknw, @rlratzel. How is this coming along? is support needed?

@rlratzel
Copy link
Contributor

rlratzel commented Mar 8, 2024

Hi @casonk , so sorry for the delay in responding.

The problem you're seeing is due to the lack of support for isolated vertices in the cugraph python library (see #1478). In your example above, nodes 4, 6, 9 are isolated and do not appear in the resulting edgelist that cugraph uses to create the graph structure on the GPU:

(Pdb) p cG.edges().values
array([[0, 7],
       [1, 5],
       [1, 8],
       [2, 7],
       [3, 7],
       [7, 7],
       [8, 7]])
(Pdb) p G.edges()
OutEdgeView([(0, 7), (1, 5), (1, 8), (2, 7), (3, 7), (7, 7), (8, 7)])

We now have support for isolated vertices in the C/C++ and pylibcugraph libraries, but we have not finished updating the cugraph python library. I don't think we'll be able to finish adding support for it in the 24.04 release, but I'll prioritize it higher so it should be in the 24.06 release (and if you can use nightly builds, you should be able to see support added sooner).

In the meantime, if you only need single-GPU support, I'd recommend using NetworkX with the nx-cugraph backend (README, blog) since the nx-cugraph backend correctly handles isolated vertices.

The nx-cugraph NetworkX backend uses the same cuGraph C++/CUDA library as the cugraph python library to GPU accelerate NetworkX. You should see approximately the same speedup using NetworkX+nx-cugraph as you'd see with the cugraph python library, especially for larger graphs.

I'll update this issue once we have support for isolated vertices, probably in 24.06.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants