Développement d’une nouvelle extension pour la recherche vectorielle dans SQLite
sqlite-vec est une nouvelle extension de SQLite pour la recherche vectorielle, destinée à remplacer l’ancien sqlite-vss
- Il s’agira d’un outil de recherche vectorielle embarqué, suffisamment rapide, pouvant fonctionner dans tous les environnements où s’exécute SQLite (WASM inclus)
- Bien que le projet soit encore en développement, il est recommandé de consulter le dépôt dès qu’il sera prêt
Caractéristiques de sqlite-vec
- Extension SQLite écrite en pur langage C, sans dépendances
- Fournit des fonctions SQL personnalisées et des tables virtuelles pour une recherche vectorielle rapide
- Propose d’autres outils et utilitaires pour les opérations vectorielles (quantification, conversion JSON/BLOB/numpy, opérations vectorielles, etc.)
- La recherche vectorielle est possible avec SQL uniquement (avec
CREATE VIRTUAL TABLE, INSERT INTO et des requêtes SELECT)
Avantages de sqlite-vec
- Écrite en pur C, elle peut s’exécuter sur toutes les plateformes (Linux/MacOS/Windows), dans les navigateurs web (WebAssembly), sur mobile, Raspberry Pi, etc.
- Taille binaire réduite, de l’ordre de quelques centaines de Ko
- Gestion de la mémoire plus fine (les vecteurs sont stockés par blocs et lus bloc par bloc lors de la recherche KNN)
- Possibilité d’améliorer les performances en mémoire avec la commande
PRAGMA mmap_size
- Prise en charge des embeddings de longueur variable, comme Matryoshka, et des vecteurs int8/bit, ce qui autorise la quantification binaire et scalaire
- Un contrôle plus fin de la vitesse, de la précision et de l’espace disque
- Ne prend en charge initialement que la recherche vectorielle exhaustive, mais prévoit d’ajouter IVF + HNSW à l’avenir
Démo
sqlite-vec peut être exécuté directement dans le navigateur (la base de données SQLite movies.bit.db est chargée)
- La table
articles contient des colonnes comme title, release_date et overview
- La table virtuelle
vec_movies stocke l’embedding vectoriel de la colonne overview (vecteur binaire de 768 dimensions, 96 octets)
- La recherche de type KNN permet de trouver les 10 films les plus proches de celui sélectionné
Problèmes de sqlite-vss
- Fonctionne uniquement sur Linux + MacOS (pas de support pour Windows, WASM, appareils mobiles, etc.)
- Les vecteurs sont tous chargés en mémoire
- Nombreux bugs et incidents liés aux transactions
- Compilation très difficile et longue
- Les opérations vectorielles courantes (quantification scalaire/binaire) sont absentes
- Problèmes dus à la dépendance à Faiss
État d’avancement de sqlite-vec
- Les fonctionnalités principales fonctionnent, mais la gestion des erreurs et les tests sont quasiment inexistants
- Le fichier
sqlite-vec.c contient 246 TODOs
- Après avoir terminé tous les TODO, la version
sqlite-vec v0.1.0 sera publiée avec documentation, démo, bindings, etc. (objectif : d’environ un mois)
Avis de GN⁺
- Son principal atout est d’être un outil de recherche vectorielle embarqué capable de fonctionner sur différents environnements et plateformes. La possibilité de l’exécuter en WASM dans un navigateur web est particulièrement intéressante.
- L’intégration du contrôle mémoire, des embeddings à longueur variable et de la quantification, reflétant les techniques récentes de recherche vectorielle, est également un atout. Cela devrait permettre de mieux contrôler vitesse, précision et stockage.
- Toutefois, ne prendre en charge que la recherche exhaustive est une limite. Si la taille des données augmente, la recherche peut devenir trop lente. Un soutien d’algorithmes ANN comme IVF + HNSW semble urgent.
- De plus, le projet étant encore à un stade précoce, il semble peu réaliste de l’utiliser en production. Il faudra plus de temps pour qu’il soit stabilisé.
- Une comparaison de benchmark avec les bibliothèques de recherche vectorielle existantes comme Faiss semble également nécessaire. Le fait d’être une extension SQLite pure est un at avantage, mais les performances devront être validées.
1 commentaires
Commentaires sur Hacker News
float64, ce qui laisse penser à des techniques de compression ou de stockage approximatif.floatpour être stockées ; il faudrait vérifier si la distance de Hamming considère aussi des vecteurs de longueurs différentes.