Udostępnij za pośrednictwem


Jak włączyć i używać rozszerzenia diskann dla usługi Azure Database for PostgreSQL — serwer elastyczny (wersja zapoznawcza)

DiskANN to skalowalny przybliżony algorytm wyszukiwania najbliższych sąsiadów umożliwiający wydajne wyszukiwanie wektorów w dowolnej skali. Oferuje wysoką kompletność, wysokie zapytania na sekundę (QPS) i małe opóźnienia zapytań, nawet w przypadku zestawów danych z miliardem punktów. Dzięki temu jest to zaawansowane narzędzie do obsługi dużych ilości danych. Dowiedz się więcej na temat nazwy DiskANN firmy Microsoft

pg_diskann Rozszerzenie dla serwera elastycznego usługi Azure Database for PostgreSQL dodaje obsługę używania nazwy DiskANN do wydajnego indeksowania i wyszukiwania wektorów.

Rejestrowanie w pg_diskann funkcji w wersji zapoznawczej

pg_diskann w przypadku usługi Azure Database for PostgreSQL — serwer elastyczny wymaga od użytkowników zarejestrowania się za pośrednictwem naszego formularza w wersji zapoznawczej. Wykonaj poniższe kroki, aby się zarejestrować:

  1. Otwieranie formularza podglądu
  2. Wypełnij wszystkie istotne szczegóły. Do włączenia będziemy potrzebować twojego identyfikatora subskrypcji platformy Azure.

Uwaga

Po wypełnieniu formularza wersji zapoznawczej zatwierdzenie żądania zajmie trochę czasu. Potwierdzenie zostanie wysłane na Twoją wiadomość e-mail.

Włączanie pg_diskann rozszerzenia

Przed włączeniem pg_diskann w wystąpieniu serwera elastycznego usługi Azure Database for PostgreSQL należy dodać go do listy dozwolonych zgodnie z opisem w temacie how to use PostgreSQL extensions (Jak używać rozszerzeń PostgreSQL) i sprawdzić, czy dodano je poprawnie, uruchamiając polecenie SHOW azure.extensions;.

Zrzut ekranu przedstawiający wybieranie pg_diskann w parametrach serwera.

Ważne

Ta funkcja w wersji zapoznawczej jest dostępna tylko dla nowo wdrożonych wystąpień serwera elastycznego usługi Azure Database for PostgreSQL.

Następnie możesz zainstalować rozszerzenie, łącząc się z docelową bazą danych i uruchamiając polecenie CREATE EXTENSION . Należy powtórzyć polecenie oddzielnie dla każdej bazy danych, w której ma być dostępne rozszerzenie.

CREATE EXTENSION IF NOT EXISTS pg_diskann CASCADE;

To polecenie umożliwia, pgvector jeśli jeszcze nie zainstalowano go w bazie danych PostgreSQL.

Uwaga

Aby usunąć rozszerzenie z aktualnie połączonej bazy danych, użyj polecenia DROP EXTENSION vector;.

Korzystanie z diskann metody dostępu do indeksu

Po zainstalowaniu rozszerzenia można utworzyć diskann indeks w kolumnie tabeli zawierającej dane wektorowe. Aby na przykład utworzyć indeks w embedding kolumnie my_table tabeli, użyj następującego polecenia:

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)

Opcje indeksu

Podczas tworzenia indeksu za pomocą diskannpolecenia można określić różne parametry, aby kontrolować jego zachowanie. Poniżej przedstawiono opcje, które są obecnie dostępne:

  • max_neighbors: Maksymalna liczba krawędzi na węzeł na wykresie. (Wartości domyślne to 32)
  • l_value_ib: Rozmiar listy wyszukiwania podczas kompilacji indeksu (wartość domyślna to 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
 );

Wartość L skanowania indeksu (l_value_is) można ustawić dla całego połączenia lub transakcji (przy użyciu SET LOCAL bloku transakcji):

SET diskann.l_value_is = 100;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- uses 100 candidates

Usługa Postgres automatycznie zdecyduje, kiedy używać indeksu DiskANN. Jeśli istnieją scenariusze, które zawsze chcesz używać indeksu, użyj następującego polecenia:

SET LOCAL enable_seqscan TO OFF;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- forces the use of index

Postęp indeksowania

Korzystając z programu PostgreSQL 12 i nowszych, możesz użyć pg_stat_progress_create_index polecenia , aby sprawdzić postęp indeksowania.

SELECT phase, round(100.0 * blocks_done / nullif(blocks_total, 0), 1) AS "%" FROM pg_stat_progress_create_index;

Fazy tworzenia indeksów DiskANN to:

  1. initializing
  2. loading tuples

Ostrzeżenie

W niektórych przypadkach użytkownicy mogą doświadczać wolnych czasów kompilacji indeksu.

Wybieranie funkcji dostępu do indeksu

Typ wektora umożliwia wykonywanie trzech typów wyszukiwań w przechowywanych wektorach. Musisz wybrać poprawną funkcję dostępu dla indeksu, aby baza danych mogła rozważyć indeks podczas wykonywania zapytań.

pg_diskann obsługuje następujące operatory odległości

  • vector_l2_ops: <-> Odległość euklidesowa
  • vector_cosine_ops: <=> Odległość cosinusu
  • vector_ip_ops: <#> Produkt wewnętrzny