22 points par xguru 2024-12-10 | 1 commentaires | Partager sur WhatsApp
  • Nouvelle extension de recherche vectorielle pour PostgreSQL, conçue pour gérer de grands volumes de vecteurs de manière économique
  • Sur 100 millions de vecteurs de dimension 768, il est possible d’atteindre un QPS de 131 avec une précision de 0,95 sur des requêtes top 10
    • Exécutable sur une seule machine pour 250 $ par mois
  • Possibilité de stocker 400 000 vecteurs pour 1 $ :
    • 6 fois moins cher que Pinecone (instance optimisée pour le stockage)
    • 26 fois moins cher que pgvector

Problèmes des bases de données vectorielles basées sur HNSW (Hierarchical Navigable Small Worlds)

  • Temps de création d’index long : plus de 2 heures pour 5 millions d’enregistrements
  • Exigences mémoire élevées : jusqu’à 40 Go nécessaires pour stocker 10 millions de vecteurs

La solution innovante de VectorChord : IVF+RaBitQ, pensé pour le disque

  • Utilise la quantification IVF (fichier inversé) et RaBitQ
    • Convertit les vecteurs 32 bits en représentation binaire compressée afin de réduire le coût de calcul
    • La plupart des comparaisons utilisent les vecteurs compressés, et un calcul en pleine précision n’est effectué que sur un petit nombre de vecteurs pour garantir la précision
  • Recherche plus rapide et plus efficace que HNSW :
    • RaBitQ compresse les vecteurs à 1 bit, ce qui multiplie par 100 la vitesse de calcul
    • Il est possible d’optimiser la vitesse tout en conservant une précision élevée

Principaux résultats des benchmarks

Jeu de données GIST (1M, 960 dimensions)

  • VectorChord offre un QPS 2 fois supérieur à pgvector
  • Utilise une approche consistant à effectuer le clustering KMeans sur un GPU externe puis à l’importer dans PostgreSQL
  • Sur une instance AWS i4i.large (2 vCPU, 16 Go de RAM), temps nécessaire pour indexer 700 000 vecteurs : 186 secondes
    • 16 fois plus rapide que pgvector
    • Vitesse d’insertion également 14 fois plus rapide

Jeu de données LAION 5M

  • Expériences menées sur une machine r6a.xlarge (4 vCPU, 32 Go de RAM, 200 Go EBS) :
    • Réponse rapide maintenue même avec une précision élevée
    • Performances comparables pour un coût de 165,56 $/mois, avec une meilleure efficacité économique que les plateformes concurrentes

Jeu de données LAION 100M

  • Sur une instance AWS i4i.xlarge (4 vCPU, 32 Go de RAM, SSD de 937 Go) :
    • QPS 16,2 @ rappel 0,95 (sur la base des 10 premiers résultats)
    • En environnement multithread, une augmentation linéaire du QPS a été observée avec la hausse du nombre de requêtes

Principaux avantages de VectorChord

  • Compatible avec la réplication physique de PostgreSQL et d’autres fonctionnalités
  • Prend en charge la création d’index externe :
    • Il est possible de créer l’index sur une machine plus puissante, puis de l’importer sur une machine plus modeste pour exécuter les requêtes
    • Prise en charge possible de plusieurs milliards de vecteurs sur une seule machine
  • Faible coût, hautes performances : réduction importante du coût mensuel par rapport aux plateformes concurrentes

Résumé et informations complémentaires

  • VectorChord fournit une recherche vectorielle efficace dans l’environnement PostgreSQL
  • Grâce à la quantification IVF et RaBitQ, il optimise la vitesse et l’utilisation mémoire, ce qui le rend adapté aux jeux de données de grande taille
  • Service cloud managé : PGVecto.rs Cloud
    • Déploiement et montée en charge facilités

1 commentaires

 
xguru 2024-12-10

Vector est le nouveau JSON de PostgreSQL
pgvector, cité dans l’article ci-dessus, et pgvecto.rs, le prédécesseur de VectorChord, sont des extensions différentes.
pgvector vs. pgvecto.rs in 2024: A Comprehensive Comparison for Vector Search in PostgreSQL

L’équipe qui a créé pgvecto.rs a aussi développé VectorChord et en assure la maintenance en parallèle. Toutes les fonctionnalités n’ont pas encore été migrées vers VectorChord. Ils indiquent qu’ils abandonneront la prise en charge de pgvecto.rs l’an prochain pour passer à VectorChord.

Si vous stockez des vecteurs dans Postgres, cela peut vous être utile.