RyanCodrai/turbovec
A vector index built on TurboQuant, written in Rust with Python bindings
해결하는 문제
벡터 데이터베이스는 고차원 임베딩을 저장하기 위해 종종 방대한 양의 RAM을 필요로 합니다(예: 1,000만 개의 문서에 대해 31GB). Turbovec은 고급 양자화를 사용하여 이러한 벡터를 압축함으로써 메모리 사용량을 최대 16배까지 줄이는 동시에 높은 검색 속도와 재현율을 유지하여 이 문제를 해결합니다.
작동 원리
Rust로 구축되고 Python 바인딩을 제공하는 이 엔진은 TurboQuant 알고리즘을 사용하여 별도의 학습 단계 없이 벡터를 압축합니다. 다음 단계로 작동합니다:
- Normalization: 벡터 길이를 제거하고 별도로 저장합니다.
- Random Rotation: 무작위 직교 행렬을 적용하여 좌표가 예측 가능한 분포를 따르도록 합니다.
- Calibration (TQ+): 스칼라를 데이터의 경험적 분포에 맞춰, 재학습 없이 양자화가 가능하게 합니다.
- Lloyd-Max Quantization: 사전 계산된 최적의 버킷을 사용하여 좌표를 2비트 또는 4비트 정수로 압축합니다.
- SIMD Search: 수동으로 작성된 SIMD 커널(x86용 AVX-512/AVX2 및 ARM용 NEON)을 사용하여 전체 압축 해제 없이 압축된 벡터의 점수를 직접 계산합니다.
대상 사용자
메모리 효율성, 낮은 지연 시간 및 데이터 프라이버시(로컬/에어갭 실행)가 중요한 Retrieval-Augmented Generation (RAG) 애플리케이션을 구축하는 개발자를 위해 설계되었습니다.
주요 특징
- 극한의 압축: 2비트 양자화를 사용하여 1536차원 벡터를 6,144바이트에서 384바이트로 줄입니다.
- 학습 불필요: 벡터가 별도의 학습 또는 재구축 단계 없이 즉시 인덱싱되는 온라인 인제스트를 지원합니다.
- 고성능: ARM에서 FAISS보다 뛰어난 성능을 보이며, x86의 다양한 구성에서 FAISS와 대등하거나 더 나은 성능을 보여줍니다.
- 프레임워크 호환: LangChain, LlamaIndex, Haystack 및 Agno에 대한 드롭인 교체 기능을 제공합니다.