프로젝트 소개
turbovec는 Rust로 구현되고 바인딩을 통해 Python에 노출되는 벡터 인덱스이다. Google Research의 TurboQuant 알고리즘을 기반으로 하며, 이는 정규화, 고정 무작위 회전, 분포 기반 Lloyd-Max 스칼라 양자화, 비트 패킹, 길이 재정규화 내적 점수 산정을 사용하는 데이터 비인지적 양자화 접근 방식이다. 이 프로젝트는 메모리가 제한되고 지연 시간이 짧은 로컬 벡터 검색을 목표로 하며 관리형 서비스가 필요하지 않다.
주요 TurboQuantIndex는 차원과 비트 폭으로 생성되며, 2비트 및 4비트 인덱싱이 문서화되어 있다. 벡터는 별도의 학습 단계, 매개변수 조정 단계, 인덱스 재구축 없이 점진적으로 추가된다. Python 입력은 float32 NumPy 배열을 사용하며, 다른 dtype은 자동 변환되지 않고 거부된다. API는 add, search, write, load, sync 연산을 제공한다. search는 요청된 k개의 최근접 결과에 대한 점수와 인덱스를 반환한다.
IdMapIndex는 안정적인 uint64 외부 ID, add_with_ids, 문서에 따른 ID별 O(1) 제거를 추가한다. 동일한 전체 파일 write/load 워크플로와 증분 sync 영속화를 지원한다. sync 메서드는 이전 sync 이후의 변경 사항만 영속화하며, 호출당 한 번의 fsync를 사용하고 전체 인덱스를 다시 쓰지 않고도 작은 추가나 제거를 허용하는 것으로 설명되어 있다. write와 load는 전체 스냅샷을 위해 계속 사용할 수 있다.
필터링 또는 하이브리드 검색은 search에 전달되는 ID 허용 목록 또는 슬롯 비트마스크를 통해 지원된다. 허용 목록은 SQL, BM25, 접근 제어 로직, 시간 필터와 같은 외부 시스템에서 가져올 수 있다. README에는 필터링이 SIMD 검색 커널 내부에서 적용되며, 허용된 벡터가 없는 블록은 건너뛰고, 결과 수는 min(k, 허용된 고유 벡터 수)라고 명시되어 있다.
검색은 런타임 기능 선택을 통해 수작업으로 작성된 SIMD 커널을 사용한다. 문서화된 대상에는 ARM NEON SDOT/SMMLA, x86 AVX-512 VNNI 및 vpermb, 그리고 AVX2와 스칼라 폴백이 포함된다. Rust 빌드는 x86-64-v2 기준선을 사용하면서 지원 하드웨어에서 최신 커널을 활성화한다. 설명된 벤치마크 구성에서는 Rayon을 통해 멀티스레딩이 제공된다.
선택적 TQ+ 보정 단계는 인덱싱 전에 대표 샘플에서 좌표별 이동 및 스케일 값을 피팅할 수 있다. README에서는 이것이 유한 차원 또는 저비트 설정, 특히 GloVe 스타일 임베딩에서 재현율을 향상시키며, 이후 추가에도 재사용 가능하다고 설명한다. 보정되지 않은 인덱스는 일반 TurboQuant를 사용한다.
Python 설치는 pip를 통해, Rust 사용은 cargo add turbovec를 통해 가능하다. 이 프로젝트는 LangChain, LlamaIndex, Haystack, Agno에 대한 선택적 통합을 문서화하며, 이들의 인메모리 또는 참조 벡터 저장소에 대한 드롭인 대체재로 자리매김하고 있다. 이러한 통합은 선택적 패키지 extras를 통해 설치된다.
저장소에는 turbovec를 FAISS IndexPQFastScan 및 IndexPQ 구성과 비교하는 프로젝트 실행 벤치마크가 포함되어 있다. README에는 테스트된 ARM 및 x86 구성에서 더 낮은 메모리 사용량, 더 빠른 측정 검색 속도, 삽입 및 제거 지연 시간 측정, 재현율 차트, 압축 결과, 저장/로드 시간이 보고되어 있다. 이는 독립적인 제3자 측정이 아니라 제공된 벤치마크 결과이다. GloVe 및 OpenAI 임베딩 데이터셋 다운로드, 재현율/속도/압축 스위트 실행, JSON 결과 저장, 차트 재생성을 위한 스크립트가 benchmarks 디렉터리에 포함되어 있다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.