À propos du projet
turbovec est un index vectoriel implémenté en Rust et exposé à Python via des liaisons. Il est construit autour de l'algorithme TurboQuant de Google Research, une approche de quantification indépendante des données qui utilise la normalisation, une rotation aléatoire fixe, la quantification scalaire Lloyd-Max basée sur la distribution, le compactage de bits et le scoring de produit intérieur renormalisé en longueur. Le projet cible la recherche vectorielle locale à faible latence et à mémoire limitée et ne nécessite pas de service géré.
Le principal TurboQuantIndex est créé avec une dimension et une largeur de bits, l'indexation 2 bits et 4 bits étant documentée. Les vecteurs sont ajoutés de manière incrémentielle sans étape d'entraînement distincte, phase de réglage des paramètres ou reconstruction de l'index. Les entrées Python utilisent des tableaux NumPy float32 ; les autres types de données sont rejetés plutôt que convertis silencieusement. L'API fournit des opérations d'ajout, de recherche, d'écriture, de chargement et de synchronisation. La recherche renvoie les scores et les indices pour les k résultats les plus proches demandés.
IdMapIndex ajoute des identifiants externes uint64 stables, add_with_ids et une suppression en O(1) par identifiant selon la documentation. Il prend en charge le même flux de travail d'écriture/chargement de fichier entier et la persistance de synchronisation incrémentielle. La méthode sync est décrite comme ne persistant que les modifications depuis la synchronisation précédente, en utilisant un fsync par appel et en permettant de petites ajouts ou suppressions sans réécrire l'index entier. write et load restent disponibles pour des instantanés complets.
La récupération filtrée ou hybride est prise en charge via une liste blanche d'identifiants ou un masque de bits d'emplacement passé à la recherche. La liste blanche peut provenir d'un système externe tel que SQL, BM25, logique de contrôle d'accès ou filtre temporel. Le README indique que le filtrage est appliqué à l'intérieur du noyau de recherche SIMD, les blocs sans vecteurs autorisés sont ignorés et le nombre de résultats est min(k, nombre de vecteurs autorisés distincts).
La recherche utilise des noyaux SIMD écrits à la main avec sélection de fonctionnalités à l'exécution. Les cibles documentées incluent ARM NEON SDOT/SMMLA, x86 AVX-512 VNNI et vpermb, plus AVX2 et des solutions de repli scalaires. La construction Rust utilise une base x86-64-v2 tout en activant des noyaux plus récents sur du matériel compatible. Le multithreading est fourni via Rayon dans la configuration de benchmark décrite.
Une étape de calibration TQ+ optionnelle peut ajuster les valeurs de décalage et d'échelle par coordonnée à partir d'un échantillon représentatif avant l'indexation. Le README décrit cela comme améliorant le rappel dans des contextes de dimension finie ou de faible nombre de bits, en particulier les embeddings de type GloVe, tout en restant réutilisable pour des ajouts ultérieurs. Un index non calibré utilise TurboQuant simple.
L'installation Python est disponible via pip, et l'utilisation Rust via cargo add turbovec. Le projet documente des intégrations optionnelles pour LangChain, LlamaIndex, Haystack et Agno, positionnées comme des remplacements directs pour leurs magasins de vecteurs en mémoire ou de référence. Ces intégrations sont installées via des extras de package optionnels.
Le dépôt comprend des benchmarks exécutés par le projet comparant turbovec avec les configurations FAISS IndexPQFastScan et IndexPQ. Le README rapporte une utilisation mémoire plus faible, une recherche mesurée plus rapide dans ses configurations ARM et x86 testées, des mesures de latence d'insertion et de suppression, des graphiques de rappel, des résultats de compression et des temps de sauvegarde/chargement. Ce sont des résultats de benchmark fournis plutôt que des mesures indépendantes de tiers. Des scripts pour télécharger les ensembles de données d'embeddings GloVe et OpenAI, exécuter des suites de rappel/vitesse/compression, enregistrer les résultats JSON et régénérer les graphiques sont inclus dans le répertoire benchmarks.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.