Comment activer et utiliser l’extension DiskANN pour Azure Database pour PostgreSQL – Serveur flexible (préversion)
DiskANN est un algorithme de recherche du plus proche voisin approximatif et évolutif qui permet d’effectuer efficacement une recherche vectorielle à n’importe quelle échelle. Il offre un rappel élevé, un nombre élevé de requêtes par seconde (QPS) et une faible latence des requêtes, même sur des jeux de données contenant des milliards de points. Il constitue donc un outil puissant pour gérer des volumes de données importants. En savoir plus sur DiskANN de Microsoft
L’extension pg_diskann
pour le serveur flexible Azure Database pour PostgreSQL ajoute la prise en charge de DiskANN pour une indexation et une recherche vectorielles efficaces.
S’inscrire à la fonctionnalité en préversion pg_diskann
Les utilisateurs souhaitant utiliser pg_diskann
pour Azure Database pour PostgreSQL – Serveur flexible doivent s’inscrire via notre formulaire de préversion. Suivez les étapes ci-dessous pour vous inscrire :
- Ouvrez le formulaire de préversion.
- Indiquez tous les détails pertinents. Nous aurons besoin de votre ID d’abonnement Azure pour l’activation.
Remarque
Après avoir rempli le formulaire de préversion, vous devrez attendre que votre demande soit approuvée, ce qui peut prendre du temps. Une confirmation vous sera envoyée par e-mail.
Activer l’extension pg_diskann
Avant de pouvoir activer pg_diskann
sur votre instance Azure Database pour PostgreSQL – Serveur flexible, vous devez l’ajouter à votre liste d’autorisations comme décrit dans Comment utiliser les extensions PostgreSQL et vérifier qu’il est correctement ajouté en exécutant SHOW azure.extensions;
.
Important
Cette fonctionnalité en préversion est disponible uniquement pour les instances de serveur flexible Azure Database pour PostgreSQL nouvellement déployées.
Vous pouvez ensuite installer l’extension en vous connectant à votre base de données cible et en exécutant la commande CREATE EXTENSION. Vous devez répéter la commande séparément pour chaque base de données dans laquelle vous souhaitez que l’extension soit disponible.
CREATE EXTENSION IF NOT EXISTS pg_diskann CASCADE;
Cette commande active l’extension pgvector
si elle n’a pas déjà été installée dans votre base de données PostgreSQL.
Remarque
Pour supprimer l’extension de la base de données actuellement connectée, utilisez DROP EXTENSION vector;
.
Utilisation de la méthode d’accès à un index diskann
Une fois l’extension installée, vous pouvez créer un index diskann
sur une colonne de table qui contient des données vectorielles. Par exemple, pour créer un index sur la colonne embedding
de la table my_table
, utilisez la commande suivante :
CREATE TABLE my_table (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
embedding public.vector(3)
-- other columns
);
-- insert dummy data
INSERT INTO my_table (embedding) VALUES
('[1.0, 2.0, 3.0]'),
('[4.0, 5.0, 6.0]'),
('[7.0, 8.0, 9.0]');
-- create a diskann index by using Cosine distance operator
CREATE INDEX my_table_embedding_diskann_idx ON my_table USING diskann (embedding vector_cosine_ops)
Options d'index
Lors de la création d’un index avec diskann
, vous pouvez spécifier différents paramètres pour contrôler son comportement. Voici les options dont nous disposons actuellement :
max_neighbors
: nombre maximal d’arêtes par nœud dans le graphique (la valeur par défaut est 32).l_value_ib
: taille de la liste de recherche pendant la génération de l’index (la valeur par défaut est 50).
CREATE INDEX my_table_embedding_diskann_custom_idx ON my_table USING diskann (embedding vector_cosine_ops)
WITH (
max_neighbors = 48,
l_value_ib = 100
);
La valeur L pour l’analyse de l’index (l_value_is
) peut être définie pour l’ensemble de la connexion ou par transaction (en utilisant SET LOCAL
dans un bloc de transaction) :
SET diskann.l_value_is = 100;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- uses 100 candidates
Postgres décide automatiquement quand utiliser l’index DiskANN. Si vous souhaitez toujours utiliser l’index dans certains scénarios, utilisez la commande suivante :
SET LOCAL enable_seqscan TO OFF;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- forces the use of index
Progression de l’indexation
Dans PostgreSQL 12 et ses versions ultérieures, vous pouvez utiliser pg_stat_progress_create_index
pour vérifier la progression de l’indexation.
SELECT phase, round(100.0 * blocks_done / nullif(blocks_total, 0), 1) AS "%" FROM pg_stat_progress_create_index;
Les phases de génération des index DiskANN sont les suivantes :
initializing
loading tuples
Avertissement
Dans certains cas, les utilisateurs peuvent être confrontés à une certaine lenteur lors de la génération des index.
Sélection de la fonction d’accès à l’index
Le type de vecteur vous permet d’effectuer trois types de recherches sur les vecteurs stockés. Vous devez sélectionner la fonction d’accès appropriée pour votre index afin que la base de données puisse considérer votre index lors de l’exécution de vos requêtes.
pg_diskann
prend en charge les opérateurs de distance suivants :
vector_l2_ops
:<->
Distance euclidiennevector_cosine_ops
:<=>
Distance cosinusvector_ip_ops
:<#>
Produit interne