TL;DR
NVIDIA cuML과 NVIDIA cuVS 25.06은 UMAP의 가장 비싼 all-neighbors kNN graph 구축을 여러 NVIDIA GPU에 분산해 단일 GPU 메모리를 넘는 수천만~수억 벡터 데이터셋을 처리합니다. 데이터는 균형 잡힌 cluster로 나뉘고, 인접 cluster의 벡터를 겹쳐 각 GPU가 로컬 그래프를 독립 계산한 뒤 전역 그래프로 합치므로 all-to-all 통신 부담을 피합니다. knn_n_clusters는 GPU별 메모리 사용량을 낮추고 knn_overlap_factor는 cluster 경계의 이웃 보존을 높이는 방식으로 시간·메모리·품질을 조절합니다. 8개 H100 기준 MIRACL 106M × 2048은 8분에 처리됐고 projected CPU 대비 74배, Wiki-all 88M × 768은 6.4분에 처리돼 41배의 속도 차이를 기록했습니다. GPU 수를 늘려도 Trustworthiness가 크게 하락하지 않아 대규모 시각화와 반복 분석에 필요한 처리 시간과 embedding 품질을 함께 유지했습니다.
빠른 이해
새로운 점
UMAP training의 all-neighbors kNN graph 구축까지 여러 GPU로 분산해 수백 GB 데이터셋을 단일 GPU 한계를 넘어 처리하는 NVIDIA cuML·cuVS 25.06 기능이다.
핵심 메커니즘
데이터셋을 균형 잡힌 cluster로 나누고 인접 cluster에 벡터를 중복 배정한 뒤, 여러 GPU가 각 cluster의 로컬 kNN graph를 독립적으로 계산한다. 각 로컬 graph는 global all-neighbors graph에 병합되며, cluster 간 all-to-all 통신 없이 UMAP embedding 계산에 사용된다. knn_n_clusters는 GPU별 데이터 크기를 낮추고 knn_overlap_factor는 경계 이웃 보존을 높여 메모리·시간·품질의 균형을 조절한다.
핵심 수치
- MIRACL end-to-end 실행 시간: 8.0분- 106M × 2048 벡터, 8개 NVIDIA H100 GPU
- MIRACL projected CPU 대비 속도 향상: 74배- projected CPU 590분 대 cuML multi-GPU 8.0분
- Wiki-all projected CPU 대비 속도 향상: 41배- projected CPU 262분 대 cuML multi-GPU 6.4분
- Wiki-all 데이터셋: 88M × 768- Figure 2와 Figure 3의 benchmark workload
- MIRACL 데이터셋: 106M × 2048- Figure 1, Figure 2, Figure 3의 benchmark workload
- 8 GPU all-neighbors speedup: Wiki-all 약 3.9배, MIRACL 약 4.9배- 1 GPU 대비 speedup
섹션별 상세
대규모 UMAP의 병목
Cluster 분할과 그래프 병합
메모리와 품질을 조절하는 매개변수
from cuvs.neighbors import all_neighborsfrom cuvs.common import MultiGpuResources params = all_neighbors.AllNeighborsParams( algo="nn_descent", n_clusters=32, overlap_factor=2) # Using all GPUs on the systemres = MultiGpuResources() indices, distances = all_neighbors.build( data, k, params, distances=cupy.empty((n_rows, k)) resources=res)NVIDIA cuVS의 all-neighbors API로 32개 cluster와 overlap factor 2를 사용해 모든 GPU에서 kNN 그래프를 구축합니다.
cuVS와 cuML 사용 경로
from cuml.manifold import UMAP # Using all GPUs on the systemumap = UMAP(build_kwds={"knn_n_clusters": 32,"knn_overlap_factor": 2,},device_ids="all",)embedding = umap.fit_transform(data) # Using a subset of GPUsumap = UMAP(build_kwds={"knn_n_clusters": 32,"knn_overlap_factor": 2,},device_ids=[0, 4, 5],)embedding = umap.fit_transform(data)NVIDIA cuML UMAP에서 모든 GPU를 사용하거나 device_ids로 0, 4, 5번 GPU만 선택해 embedding을 계산합니다.
from cuml.manifold.umap import UMAP as cuUMAP # Using indices, distances from Example 1 computed by cuVS all-neighborsgpu_umap = cuUMAP( precomputed_knn=(indices, distances),)gpu_embedding = gpu_umap.fit_transform(data)cuVS에서 미리 계산한 indices와 distances를 cuML UMAP의 precomputed_knn 인자로 전달해 그래프 구축 단계를 재사용합니다.
CPU 대비 대규모 실행 시간

GPU 수 증가와 embedding 품질


용어 해설
- UMAP 차원 축소(UMAP)
- — UMAP은 고차원 벡터의 이웃 관계를 저차원 공간에 보존해 시각화나 특징 추출에 활용하는 차원 축소 기법입니다. 먼저 각 벡터의 k-nearest neighbors 그래프를 만들고, 이 그래프를 바탕으로 저차원 embedding을 계산합니다. 데이터가 커질수록 그래프 구축 비용이 전체 실행 시간을 크게 좌우합니다.
- 전체 이웃 kNN 그래프(All-neighbors kNN Graph)
- — 전체 데이터셋의 각 벡터에 대해 가장 가까운 k개 벡터를 연결한 그래프입니다. UMAP은 이 그래프에서 원래 공간의 국소 이웃 구조를 얻은 뒤 저차원 embedding을 계산합니다. 데이터셋을 여러 cluster로 나누고 경계 주변 벡터를 겹쳐 처리하면 GPU 메모리보다 큰 데이터도 분산 구축할 수 있습니다.
- Out-of-Core 처리(Out-of-Core Computing)
- — 전체 데이터가 GPU 메모리에 한 번에 들어가지 않을 때 데이터를 여러 cluster로 나누어 CPU 메모리에서 필요한 부분만 GPU로 가져오는 처리 방식입니다. 각 GPU가 일부 cluster의 로컬 그래프를 계산한 뒤 결과를 전역 그래프로 합칩니다. 이 구조는 대규모 데이터의 메모리 요구량을 낮추면서 계산을 병렬화합니다.
- Trustworthiness 점수(Trustworthiness)
- — 저차원 embedding이 원래 고차원 공간의 국소 이웃 관계를 얼마나 보존하는지 나타내는 평가 지표입니다. 값의 범위는 0에서 1이며 높을수록 원래 이웃 구조가 더 잘 유지됩니다. 다중 GPU 수를 늘릴 때 실행 시간뿐 아니라 이 점수도 함께 비교해 embedding 품질 저하 여부를 판단합니다.
- knn_overlap_factor
- — 데이터 포인트를 가장 가까운 cluster 몇 곳에 중복 배정할지 정하는 매개변수입니다. 값을 높이면 cluster 경계에 걸친 실제 이웃을 더 많이 보존해 kNN 그래프와 UMAP 품질을 높일 수 있지만, 중복 데이터 처리로 메모리 사용량과 계산 시간이 함께 증가합니다.
- knn_n_clusters
- — 데이터셋을 몇 개의 균형 잡힌 cluster로 나눌지 정하는 매개변수입니다. cluster 수를 늘리면 각 GPU가 처리할 벡터 수와 메모리 요구량이 줄어듭니다. 반면 overlap factor와 함께 설정해야 cluster 경계의 이웃 보존과 전체 계산 비용 사이의 균형을 맞출 수 있습니다.
기술
- NVIDIA cuML
- NVIDIA cuVS
- UMAP
- kNN
- Python
- CUDA-X
- RAPIDS
- H100
- DGX
- nn_descent
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.