← 뒤로

DiskANN Explorer: 10억 규모 벡터 검색 SSD

DiskANN RAM 에는 모든 벡터의 작은 PQ-압축 사본을, 에는 SSD전체 벡터와 그래프를 보관합니다. 검색은 저렴한 비교를 통해 그래프를 탐색한 다음, 소수의 비용이 많이 드는 디스크 읽기 작업을 통해 상위 후보들의 순위를 재조정합니다. RAM

DiskANN 가 존재하는 이유: 메모리 벽

RAMPQ 코드 (32 B/vec)3.2 GB
디스크전체 벡터 + 그래프 (3072 B/vec)307.2 GB
100M 벡터 × 768 차원디스크 / RAM ≈ 96×

단일 상품인 ‘ SSD ’만으로도 디스크 측을 쉽게 수용할 수 있습니다. ‘ RAM ’ 측은 어떤 노트북에도 들어갑니다. ‘ PQ ’ 기법이 없다면, 데이터셋을 로드하기 위해서만도 수백 GB의 ‘ RAM ’ 용량을 가진 서버가 필요했을 것입니다.

R5
그래프 차수
L8
후보 풀
재순위 지정5
디스크 읽기
속도420ms
단계별
PQ 비교 (RAM) 후보 풀 내 디스크 재순위 지정 top-K 결과
현재 단계
30 / 30
검색이 완료되었습니다. Top-3: [1, 28, 27].

현재까지의 비용

RAM PQ 비교20≈ 20 µs
SSD 읽기5≈ 500 µs
총 지연 시간0.52 ms
다음으로 모델링됨 PQ ≈ 1 µs, SSD ≈ 100 µs로 모델링되었습니다. 실수 값은 하드웨어에 따라 달라집니다.

검색 통계

방문한
20 / 36
재순위 지정
5
Top-3
[1, 28, 27]

DiskANN 의 작동 방식

  1. Vamana 그래프를 구축하십시오: 순차적 디스크 레이아웃에 최적화된 단일 레이어 kNN 그래프(도수 R)입니다. 계층 구조는 없으며, 하나의 거대한 그래프로만 구성됩니다.
  2. 양자화 및 저장 공간 분할: 모든 벡터에는 아주 작은 PQ 코드(예: 32바이트)가 할당됩니다. PQ 코드는 RAM 에 저장됩니다. 전체 벡터와 그래프 에지는 SSD 에 저장됩니다.
  3. PQ 거리를 사용하는 빔 워크(Beam-walk): 고정된 진입점(메도이드)에서, 크기 L 인 후보 벡터 풀을 유지합니다. 최상의 벡터를 추출하고, 그 이웃을 확장하며, in-RAM PQ 코드만을 사용하여 거리를 추정합니다. 탐색 중에는 디스크 I/O가 발생하지 않습니다.
  4. 디스크에서 최종 후보들의 순위를 재조정하십시오: 후보 풀의 상위 항목들에 대해서는 PQ 를 사용하여 거리를 근사치로 계산했습니다. 디스크에서 해당 벡터의 전체 데이터를 읽어와 정확한 거리를 재계산하여 순위를 확정하십시오.
  5. top-K 를 반환합니다. 총 디스크 I/O는 소수의 무작위 읽기 작업으로, 대개 20건 미만입니다.

거래

  • 확장성이 뛰어난 이유: RAM 에는 압축된 코드만 저장됩니다. 32바이트 PQ 를 가진 1B 벡터 데이터셋은 약 32GB RAM 의 용량이 필요하며, 이는 단일 워크스테이션에 충분히 수용될 수 있습니다.
  • HNSW 보다 느린 이유: SSD 무작위 읽기(random reads)는 RAM 보다 약 100배 더느립니다. 읽기 횟수가 약 10회뿐이라 해도, 쿼리 지연 시간은 디스크에 의해 좌우됩니다.
  • 리콜(recall) 측면에서 여전히 ‘ IVF_PQ ’보다 우수한 이유: 재순위 지정(re-rank) 단계는 순수한 ‘ PQ ’ 기반 방법으로는 수정할 수 없는 양자화 오류를 복구하기 때문이다.

정신 모델: ‘ PQ ’는 비용이 적게 드는 “이 주변이 유망한가?”라는 테스트입니다. 디스크 읽기는 비용이 많이 드는 “실제로 확인해 보자”는 점검입니다. ‘ DiskANN ’는 대부분의 작업을 이 저렴한 테스트를 통해 수행합니다.

DiskANN 란 무엇인가요?

DiskANN 는 RAM 에 맞지 않는 데이터셋을 위해 설계된 그래프 기반의 근사 최인접 이웃 인덱스입니다. 이 인덱스는 효율적인 디스크 액세스를 위해 배치된 단일 레이어 Vamana 그래프를 구축하고, 메모리 내의 모든 벡터에 대해 아주 작은 제품 양자화(PQ) 코드를 유지하며, 전체 정밀도 벡터와 그래프 에지는 SSD 에 저장합니다. 검색은 비용이 적게 드는 인RAM PQ 비교를 사용하여 그래프를 탐색하며, 소수의 최종 후보를 재순위 지정할 때만 디스크에 접근합니다.

『 Milvus 』에서, DiskANN 는 디스크 기반 인덱스 옵션을 지원합니다. 이를 통해 수십 기가바이트( RAM) 규모의 머신(수백 기가바이트가 아닌)에서도 수십억 규모 컬렉션을 검색할 수 있으며, 디스크 재순위 지정 단계(disk re-rank step)를 통해 리콜률을 메모리 내 그래프 인덱스 수준에 가깝게 유지합니다.

노브가 제어하는 기능

  • R (그래프 차수, 빌드 시간): ‘ Vamana ’ 그래프에서 노드당 최대 가장자리 수를 의미합니다. R 값이 높을수록 연결성과 리콜이 향상되지만, 디스크에 저장되는 그래프 크기가 커지고 빌드 속도가 느려지는 단점이 있습니다.
  • L / search_list (쿼리 시간): 빔 검색(beam search) 중에 유지되는 후보 풀 — 리콜/지연 시간의 주요 조절 요소로, HNSW 의 ef 와 동일합니다. 이 값은 반드시 top-K 이상이어야 합니다.
  • 재순위 지정 예산(Re-rank budget): 정확한 점수 산정을 위해 SSD 에서 전체 벡터를 불러오는 결선 진출자 수를 의미합니다. 각 조회는 무작위 디스크 읽기 작업이므로, 쿼리 지연 시간이 발생하는 부분이며, 동시에 PQ 의 근사 오류가 수정되는 부분이기도 합니다.

DiskANN vs HNSW vs IVF

데이터셋(또는 메모리 사용량)이 RAM 의 용량을 초과할 경우 DiskANN 를 선택하십시오. 이 방법은 SSD 읽기 작업으로 인한 밀리초 수준의 지연 시간을 감수하는 대신, 훨씬 적은 메모리로 높은 리콜을 제공하는 쿼리를 처리합니다. 모든 데이터가 메모리에 여유 있게 들어갈 경우, HNSW 가 더 빠르게 응답합니다. 디스크를 사용하지 않으면서 빠른 인덱스 구축이나 적당한 메모리 절감이 필요한 경우, IVF 변형들이 그 중간에 위치합니다.

자주 묻는 질문

HNSW 대신 DiskANN 를 언제 사용해야 합니까?

벡터가 RAM 에 더 이상 들어가지 않거나, 이를 저장하는 RAM 의 비용이 감당하기 어려울 때를 말합니다. 10억 개의 768차원 부동소수점 벡터는 HNSW 의 경우 메모리에 약 3TB가 필요하지만, RAM 의 경우 수십 GB만 필요하며, DiskANN 를 사용하는 SSD 만 추가하면 됩니다. 데이터셋이 메모리에 여유 있게 들어간다면, HNSW 가 여전히 지연 시간이 더 짧은 선택지입니다.

DiskANN 에는 어떤 하드웨어가 필요합니까?

빠른 NVMe SSD 가 핵심 요구 사항입니다. 쿼리 지연 시간은 소수의 무작위 디스크 읽기 작업(각각 ~100 µs)에 의해 좌우되기 때문입니다. RAM 요구 사항은 적당합니다: 대략 PQ 코드(예: 벡터당 32–64바이트)와 작업용 버퍼 정도면 충분합니다.

DiskANN 는 HNSW 와 같은 메모리 내 인덱스보다 속도가 더 느린가요?

쿼리당 처리 시간은 일반적으로 한 자릿수 밀리초 수준이며, 메모리 내 HNSW 의 경우 밀리초 미만입니다. 이는 디스크를 통한 재순위 지정(re-rank)이 메모리 내 RAM 액세스보다 약 100배 더 느리기 때문입니다. 그 대가로 발생하는 비용은 다음과 같습니다: DiskANN 는 리콜률을 90–95% 이상으로 유지하면서, RAM 보다 한 차원 낮은 비용으로 동일한 데이터셋을 처리합니다.

‘ DiskANN ’는 ‘ PQ ’ 압축에도 불구하고 어떻게 높은 리콜을 유지할 수 있는가?

PQ 코드는 그래프 탐색을 유도하는 데만 사용되며, 최종 점수를 산출하는 데는 사용되지 않습니다. 결과를 반환하기 전에, DiskANN 는 SSD 에서 상위 후보들의 전체 정밀도 벡터를 읽어와 정확히 재순위를 매기며, IVF_PQ 와 같은 순수한 PQ 기반 인덱스로는 수정할 수 없는 양자화 오류를 보정합니다.

더 자세히 알아보기: 설정 요구 사항에 대해서는 ‘DiskANN ’ 문서를 참조하거나, 전체 결정 가이드를 보려면 ‘Index Explained’를 참조하십시오.

계속 탐색해 보세요