RyanCodrai/turbovec

A vector index built on TurboQuant, written in Rust with Python bindings

해결하는 문제

turbovec은 대규모 벡터 검색과 관련된 높은 메모리 및 지연 시간 비용 문제를 해결합니다. 이를 통해 방대한 코퍼스(예: 1,000만 개의 문서)를 높은 검색 속도와 재현율을 유지하면서 RAM의 극히 일부(float32의 31GB 대비 4GB)만 사용하여 저장할 수 있으며, 비용이 많이 드는 학습 단계나 빈번한 인덱스 재구축의 필요성을 제거합니다.

작동 원리

데이터에 무관한 양자화기인 TurboQuant 알고리즘을 구현하여 별도의 학습 단계 없이 벡터를 압축합니다. 프로세스는 다음과 같습니다:

  1. Normalization: 벡터를 하이퍼스피어 상의 단위 방향으로 변환합니다.
  2. Random Rotation: 좌표 분포를 예측 가능하게(Beta 분포) 만들기 위해 벡터에 무작위 직교 행렬을 곱합니다.
  3. Calibration (TQ+): 재현율을 높이기 위해 경험적 분위수를 코드북의 중심점으로 매핑하는 선택적 좌표별 이동 및 스케일링을 적용합니다.
  4. Lloyd-Max Quantization: 사전 계산된 최적 경계에 따라 좌표를 작은 정수로 버킷화합니다(예: 2비트의 경우 4개 버킷, 4비트의 경우 16개 버킷).
  5. Bit-packing: 이러한 정수들을 바이트 내에 조밀하게 패킹하여 극한의 압축을 수행합니다.
  6. SIMD Acceleration: 수동으로 작성된 커널(ARM용 NEON, x86용 AVX-512)이 압축된 데이터에서 직접 빠른 검색 및 필터링을 수행합니다.

대상 사용자

개인정보 보호, 메모리 효율성 및 낮은 지연 시간이 중요한 Retrieval-Augmented Generation (RAG) 시스템을 구축하는 개발자, 특히 에어갭(air-gapped) 또는 로컬 환경에서 운영하는 개발자를 위해 설계되었습니다.

주요 특징

  • 학습 단계 없음: 온라인 인제스트를 통해 매개변수 조정이나 인덱스 재구축 없이 벡터를 추가할 수 있습니다.
  • 극한의 압축: float32와 비교하여 메모리 사용량을 최대 16배까지 줄입니다.
  • 고성능: ARM 및 x86 아키텍처 모두에서 검색 속도 면에서 FAISS IndexPQFastScan보다 뛰어난 성능을 발휘합니다.
  • 증분 지속성: sync(path) 메서드는 마지막 동기화 이후의 변경 사항만 저장하여 크래시 안전하고 빠른 업데이트를 보장합니다.
  • 검색 시 필터링: ID 허용 목록을 지원하며, 과도한 페칭을 방지하기 위해 SIMD 커널 내에서 직접 처리됩니다.
  • 프레임워크 호환성: LangChain, LlamaIndex, Haystack, Agno의 벡터 스토어에 대한 드롭인 교체 기능을 제공합니다.

관련

  • Dispatch
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트