NVIDIA cuGraph로 가속화된 NetworkX는 NetworkX 팀과 공동 개발한 새로 출시된 백엔드입니다. NVIDIA cuGraph는 PageRank, Louvain, Betweenness Centrality와 같은 인기 있는 그래프 알고리즘을 위한 GPU 가속을 제공합니다. 알고리즘과 그래프 크기에 따라 CPU의 NetworkX보다 최대 50배, 심지어 500배까지 NetworkX 워크플로우를 크게 가속화할 수 있습니다.
이 게시물에서는 NetworkX와 cuGraph 기반의 새로운 백엔드 가속기에 대한 자세한 내용을 공유합니다. 또한 NetworkX용 cuGraph 백엔드를 사용하여 그래프 분석 워크플로우의 속도를 높이고, 대규모 그래프 작업 시 NetworkX의 한계를 극복하는 방법에 대해서도 설명합니다.
그래프 데이터 과학 분야에 조금이라도 익숙하다면 아마도 NetworkX를 사용해 보셨을 것입니다. NetworkX는 오늘날 가장 널리 알려진 오픈 소스 그래프 분석 라이브러리 중 하나이며, 한 달에 8천만 건 이상 다운로드됩니다(10/24 기준). 2005년 처음 출시된 이래, NetworkX는 사용하기 쉽고 직관적인 API, 친절하고 지원적인 커뮤니티, 상상할 수 있는 거의 모든 그래프 분석 사용 사례를 처리하는 광범위한 알고리즘으로 명성을 쌓아왔습니다.
하지만 실제 크기의 데이터에서 작동하는 프로덕션 워크플로우를 담당하고 있다면, 그래프가 특정 크기에 도달하면 성능이 더 뛰어나지만 더 복잡한 그래프 솔루션으로 대체해야 한다는 사실을 깨달았을 것입니다.
NetworkX의 순수 Python 단일 스레드 구현은 확장 기능에 제한이 있습니다. 일반적으로 10만 노드 및 100만 에지보다 큰 그래프를 사용하는 많은 워크플로우에서는 상당한 속도 저하가 발생하여 NetworkX를 완전히 포기해야 하는 경우가 종종 있습니다. 이러한 워크로드는 사기 탐지, 추천 시스템, 소셜 네트워크 분석, 공급망 최적화 등에서 수행되는 것처럼 대량의 데이터와 수백만 개의 엔티티 및 관계 간의 비교에서 흔히 발생합니다.
2019년 처음 출시된 이후, cuGraph 오픈 소스 프로젝트는 NetworkX와 유사한 사용하기 쉬운 Python 그래프 분석 라이브러리를 찾는 데이터 과학자들을 위한 솔루션을 구축해 왔습니다. 이제 최초의 프로덕션 지원 GPU 백엔드인 NetworkX용 cuGraph 백엔드가 추가되어, 이제 상당한 속도 향상을 경험하기 위해 NetworkX를 떠나지 않아도 됩니다.
속도와 확장성 극대화
NetworkX용 백엔드는 CUDA 기반 라이브러리인 cuGraph로 구동되며, cuGraph 지원 알고리즘을 실행하는 NetworkX 워크플로우를 통해 알고리즘과 그래프 크기에 따라 다양한 속도 향상을 확인할 수 있습니다.
최대 10배, 다른 알고리즘과 더 큰 그래프의 경우 최대 500배 빠른 처리 속도를 확인할 수 있습니다. 이러한 속도 향상은 결과를 더 빠르게 생성할 뿐만 아니라 이전에는 비현실적이라고 여겨졌던 사용 사례의 가능성을 열어줍니다.
이제 그래프 데이터 사이언티스트는 마침내 NVIDIA cuGraph로 가속화된 NetworkX를 사용하여 사용 편의성과 대규모 속도를 모두 확보할 수 있게 되었습니다.
코드 변경 없는 GPU 가속
NVIDIA cuGraph는 타사 가속기를 사용할 수 있는 표준 메커니즘을 제공하는 백엔드 디스패칭 시스템을 통해 NetworkX를 가속화합니다.
pip 또는 conda 패키지 관리자를 사용하거나 NVIDIA GPU가 있는 시스템에서 소스에서 cuGraph 백엔드 nx-cugraph를 설치합니다. 백엔드는 NetworkX 자동 함수 디스패치를 활성화하는 환경 변수를 통해 활성화되며, 이를 통해 NetworkX는 지원되는 알고리즘을 GPU 백엔드로 보내고 다른 모든 알고리즘은 CPU의 기본 NetworkX 구현으로 전송할 수 있습니다.
그 결과 데이터 과학자들이 사용하는 가장 일반적인 그래프 알고리즘 중 상당수를 코드 변경이나 누락된 기능에 대한 해결 방법 없이 자동으로 GPU 가속이 가능합니다:
pagerank
betweenness_centrality
louvain_communities
shortest_path
- 그 외에도 약 60여 가지가 있습니다.
워크플로우를 수정할 필요 없이 일반적으로 가속되지 않은 NetworkX를 사실상 사용할 수 없게 만드는 대용량 그래프 데이터에서 엄청난 속도 향상을 확인할 수 있습니다. 이러한 워크플로우를 프로토타이핑과 실험을 위해 더 작은 데이터와 더 긴 런타임을 견딜 수 있는 비-GPU 시스템에서도 사용할 수 있습니다.
명령줄에서 셸에 환경 변수를 설정하여 GPU 속도 향상을 경험할 수 있으며, cuGraph를 활성화하면 동일한 알고리즘 호출이 거의 87배 더 빠르게 실행됩니다.
파일: demo.ipy
import pandas as pd
import networkx as nx
url = "https://data.rapids.ai/cugraph/datasets/cit-Patents.csv"
df = pd.read_csv(url, sep=" ", names=["src", "dst"], dtype="int32")
G = nx.from_pandas_edgelist(df, source="src", target="dst")
%time result = nx.betweenness_centrality(G, k=10)
출력:
user@machine:/# ipython demo.ipy
CPU times: user 7min 36s, sys: 5.22 s, total: 7min 41s
Wall time: 7min 41s
user@machine:/# NX_CUGRAPH_AUTOCONFIG=True ipython demo.ipy
CPU times: user 4.14 s, sys: 1.13 s, total: 5.27 s
Wall time: 5.32 s
- 소프트웨어: NetworkX 3.4.1, cuGraph/nx-cugraph 24.10
- CPU: Intel Xeon Gold 6128 CPU @ 3.40GHz 45GB RAM
- GPU: NVIDIA Quadro RTX 8000 50GB RAM
노트북에서는 초기 networkx
가져오기 전에 어디서나 %env 매직을 사용해 환경 변수를 설정합니다:
%env NX_CURGAPH_AUTOCONFIG=True
import networkx as nx
크고 작은 그래프 워크로드
NetworkX의 유연성은 다른 그래프 분석 라이브러리와 비교할 수 없으며, 그 결과 성능은 교육, 프로토타이핑 및 일반적으로 작은 문제에 사용되는 작은 그래프 데이터에 적합합니다.
그러나 생성되는 데이터의 양이 계속 증가함에 따라 10만 노드와 100만 에지를 초과하는 그래프가 훨씬 더 보편화되고 있으며, 2027년까지 기업에서 20ZB의 데이터를 생성할 것으로 예상됩니다. NetworkX용 cuGraph 백엔드를 사용하면 신속한 개발을 위한 사용 편의성과 최신 워크로드에 필요한 성능을 모두 확보할 수 있습니다.
최신 워크로드의 멀티모달 데이터와 함께 대용량 데이터를 그래프로 사용하여 분석의 컨텍스트와 깊이를 강화할 수 있습니다. cuGraph로 가속화된 NetworkX가 이상적인 선택인 사용 사례는 CPU의 NetworkX의 한계를 벗어난 대규모 그래프와 빠른 처리 요구 사항을 포함합니다.
GPU 가속으로 강화된 그래프 알고리즘은 커뮤니티 또는 사기 탐지 시스템이나 수천만 명의 소비자와 이들의 관계를 기반으로 한 추천 시스템, 수천만 개의 소비자 프로필, 거래 패턴, 재고 데이터 포인트 등의 사용 사례에 적용될 수 있습니다.
다음 예는 cuGraph로 가속화된 NetworkX를 사용한 속도 향상을 보여줍니다.
할리우드 배우들의 대규모 네트워크 그래프에서 영화에 함께 출연한 배우들을 찾기 위해 실행되는 Louvain 커뮤니티 탐지(100만 노드, 5800만 에지)는 CPU에서 NetworkX를 사용하는 것보다 60배 더 빠릅니다.
미국 특허의 인용 그래프(4백만 노드, 1천6백만 에지)의 값을 계산하는 데 사용된 PageRank 알고리즘은 CPU의 NetworkX보다 70배 빠릅니다.
라이브 저널 소셜 네트워크(5백만 노드, 6천 9백만 에지, k=100)의 값을 계산하는 데 사용된 Betweenness 중심성 알고리즘은 CPU의 NetworkX보다 485배 빠릅니다.
라이브 저널 소셜 네트워크(5백만 노드, 6천 9백만 에지, k=100)의 값을 계산하는 데 사용된 Betweenness 중심성 알고리즘은 CPU의 NetworkX보다 485배 빠릅니다.
이 게시물의 모든 벤치마크는 다음 구성을 사용했습니다:
- 소프트웨어: NetworkX 3.4.1, cuGraph/nx-cugraph 24.10
- CPU: Intel Xeon w9-3495X(56코어) 250GB
- GPU: NVIDIA A100 80GB
벤치마크 코드에 대한 자세한 내용은 /rapidsai/cugraph GitHub 리포지토리를 참조하세요.
결론
NetworkX는 가장 인기 있는 그래프 분석 라이브러리로 명성을 얻고 있지만, 특히 점점 더 복잡해지고 데이터 세트가 계속 빠르게 증가함에 따라 최신 워크플로우에 발맞춘 성능이 여전히 필요합니다.
단일 환경 변수를 사용하여 cuGraph/nx-cugraph 패키지를 사용하면 네트워크X의 유연성과 사용 편의성을 그대로 유지하면서 최신 워크로드를 처리하기 위해 NVIDIA cuGraph를 사용하여 네트워크X를 최대 500배까지 가속화할 수 있습니다.
지금 바로 Google Colab에서 호스팅되는 NetworkX – 간편한 그래프 분석 테스트 노트북에서 직접 체험해 보거나 Wikipedia의 실행 중인 Pagerank에서 nx-cugraph 엔드투엔드 데모와 그렇지 않은 데모를 살펴보세요.
자세한 내용은 다음 리소스를 참조하세요:
- RAPIDS cuGraph
- NetworkX 가속화: 간편한 그래프 분석의 미래(GTC 세션)
- 코드 변경 없이 데이터 사이언스 워크플로우 가속화(DLI 자습 과정)
- 가속화된 데이터 과학의 기초(DLI 강사 진행 워크샵)
관련 리소스
- DLI 과정: RAPIDS cuDF로 데이터프레임 운영 속도 높이기
- GTC 세션: NetworkX 가속화: 간편한 그래프 분석의 미래
- GTC 세션: 강력한 개발자 도구로 CUDA 디버깅 및 성능 이해하기
- GTC 세션: RAPIDS cuDF를 사용하여 코드 변경 없이 판다 가속화하기
- SDK: cuNumeric
- SDK: DGL 컨테이너