3 points par GN⁺ 2024-05-04 | 1 commentaires | Partager sur WhatsApp

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

 
GN⁺ 2024-05-04
Commentaires sur Hacker News
  • L’auteur participe lui-même aux commentaires et y présente le nouveau projet sqlite-vec. Il est encore en cours de développement, avec l’objectif d’atteindre v0.1.0 dans quelques semaines. Il s’agit en quelque sorte du projet successeur de sqlite-vss, qu’il avait déjà développé auparavant.
  • sqlite-vec est une bibliothèque optimisée pour la recherche vectorielle embarquée, et elle peut fonctionner sur divers systèmes d’exploitation, sur mobile et même sur Raspberry Pi. L’auteur teste son intégration dans Beepy, une application de recherche sémantique.
  • Une question a été posée sur la façon de stocker un vecteur de 768 dimensions en 96 octets. En général, il faudrait 6144 octets en float64, ce qui laisse penser à des techniques de compression ou de stockage approximatif.
  • Un développeur ayant utilisé sqlite-vss a remercié car cela lui a été utile pour développer un modèle RAG. Il a indiqué que ça fonctionne bien dans un environnement Ubuntu.
  • DuckDB a aussi récemment publié une extension de recherche de similarité vectorielle similaire.
  • En racontant son expérience de développement d’une app AI RAG avec la base de données vectorielle Qdrant, un commentaire exprime ses attentes pour sqlite-vec.
  • Quelqu’un se demande s’il utilisera seulement l’API publique de SQLite ou s’il s’intégrera directement à l’amalgamation. Il évoque aussi des réflexions sur la façon de distribuer le projet du point de vue des bindings WebAssembly.
  • Un commentaire indique aimer les projets OSS qui répondent à des besoins spécifiques. Il dit réfléchir à des idées utilisables dans l’écosystème TypeScript.
  • Une réaction pense que cela pourrait être une solution à un problème de sqlite-vss soulevé il y a quelques mois.
  • On se demande comment sont alignées les dimensions de tous les vecteurs de caractéristiques. Il semble que les chaînes soient converties en float pour être stockées ; il faudrait vérifier si la distance de Hamming considère aussi des vecteurs de longueurs différentes.
  • Quelqu’un estime que le projet semble développé à partir de la documentation du README, et se demande s’il ont commencé par rédiger la documentation.