본문으로 건너뛰기

트렌딩 - GitHub 인기 레포 & HuggingFace 모델

RyanCodrai/turbovec

Python24 / 0

turbovec는 Google의 TurboQuant를 Rust로 구현하고 Python 바인딩을 제공하여 10M 문서를 4GB로 압축하면서 FAISS 대비 빠른 검색을 목표로 하는 벡터 인덱스이다.

TL;DR

turbovec는 TurboQuant 알고리즘을 Rust로 구현하고 Python 바인딩을 제공하는 벡터 인덱스로서 벡터 노름을 분리하고 임의 회전과 좌표별 보정을 통해 데이터 의존적 학습 없이 스칼라 양자화를 적용한다. 이 과정에서 Lloyd-Max 코드북과 길이 재정규화 보정을 결합하여 2~4비트 압축을 가능하게 하고, SIMD(NEON/AVX-512BW) 기반 니블-LUT 커널로 디코드 없이 고속 점수 계산을 수행한다. README의 벤치마크는 10M 문서 예시에서 float32 대비 31GB→4GB의 메모리 절감과 ARM에서 FAISS 대비 10~19%의 처리량 우위를 보고하며 OpenAI 차원에서 R@1이 0.2~1.9pp 향상되는 점을 제시한다. 결과적으로 온라인 인제스트와 커널 수준 필터링을 필요로 하는 프라이버시 민감 또는 메모리 제약 환경에서 기존 FAISS 계열보다 메모리-성능 트레이드오프가 유리하지만, x86 2비트 경로에서는 FAISS의 특정 AVX-512 VBMI 최적화가 근소한 우위를 보이는 점이 트레이드오프가 된다.

핵심 포인트

  • 온라인 비훈련 양자화 파이프라인을 제공하여 벡터를 추가할 때 코드북 재학습이나 인덱스 재구성이 필요하지 않다. 이 접근은 TQ+ 보정이 첫 삽입 시점에만 좌표별 shift·scale을 고정하고 이후 삽입은 동일 코드북을 적용하기 때문에 가능한 설계이며, 운영 중단 없이 규모를 늘릴 수 있다는 이점이 있다. 기존 PQ 방식은 일반적으로 코드북 학습이나 재구성이 필요해 대규모 온라인 삽입에서 운영 비용이 커지는 단점이 있다.
  • 커널 수준의 필터링을 통해 허용 ID 집합이 작은 경우 대부분의 SIMD 비용을 회피하도록 설계되어 하이브리드 검색 파이프라인에서 효율성이 높다. 32-벡터 블록 단위의 빠른 단축 경로와 블록 내 비허용 슬롯 드랍은 외부 후보 집합으로 결과를 좁힌 뒤 내부에서 조밀한 재랭킹을 수행하는 워크플로에 적합하다. 이로 인해 필터링 조건이 엄격한 멀티테넌시나 시간 윈도우 기반 검색에서 오버패치 비용을 줄일 수 있다.
  • 길이 재정규화 보정을 저장하고 검색 시 곱해 양자화가 도입한 내적의 하향 편향을 제거함으로써 저비트 설정에서 회수율을 보존한다. 이 보정은 인코딩 단계에서 한 번의 d 차원 내적을 계산하는 추가 비용만 요구하며 대규모 인덱스에서도 쿼리 비용과 저장 오버헤드를 거의 증가시키지 않는다. 그 결과 2비트·4비트 환경에서의 실무적 정확도가 개선되어 메모리 대비 성능이 우수하다.
  • 온라인 인제스트를 지원하여 벡터를 추가하면 즉시 인덱싱되고 별도의 훈련 단계나 재빌드가 필요하지 않다. 이 동작은 각 좌표에 대해 첫 추가 시점에만 수행되는 TQ+ 보정과 사전 계산된 Lloyd-Max 코드북을 결합해 구현되며 이후 삽입은 기존 코드 규칙을 적용해 빠르게 처리된다. 덕분에 대용량 코퍼스가 성장하는 환경에서도 지속적인 가용성과 낮은 운영 오버헤드를 유지할 수 있다.

벤치마크

벤치마크지표비교
Memory for 10M documentsRAM4 GBvs float32: 31 GB
Search speed on ARMthroughput improvement10–19% faster than FAISS IndexPQFastScanvs FAISS IndexPQFastScan
Recall R@1 across OpenAI dimsR@1 delta0.2–1.9 percentage points highervs FAISS IndexPQ

13.5k

STARS

1.2k

FORKS

+208

TRENDING

24

조회수

watchers 13.5kopen issues 31MIT License

관련 토론

아직 관련 토론이 없습니다.

댓글

댓글을 작성하려면 로그인이 필요합니다.