Partager via


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 :

  1. Ouvrez le formulaire de préversion.
  2. 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;.

Capture d’écran de la sélection de pg_diskann dans les paramètres de serveur.

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 :

  1. initializing
  2. 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 euclidienne
  • vector_cosine_ops : <=> Distance cosinus
  • vector_ip_ops : <#> Produit interne