Docker тянутся для pgvecto.rs:
VectorChord (VCHORD)-это расширение PostgreSQL, предназначенное для масштабируемого, высокопроизводительного и дискового сходного поиска сходства вектора, и служит преемником PGVECTO.RS.
С помощью VectorChord вы можете хранить 400 000 векторов всего за 1 доллар, что обеспечивает значительную экономию: в 6 раз больше векторов по сравнению с оптимизированным хранилищем Pinecone и на 26 раз больше, чем PGVector/PGVecto.RS по той же цене 1 . Для получения дополнительной информации ознакомьтесь с нашим сообщением в блоге.
Vectorchord вводит замечательные улучшения по сравнению с pgvecto.rs и pgvector:
⚡ повышенная производительность : обеспечение оптимизированных операций с более высокими запросами до 5x, на 16x более высокая пропускная способность вставки и 16 -кратное 2 индексное здание по сравнению с реализацией HNSW PGVector.
? Доступный векторный поиск : запрос 100 млн. 768-мерных векторов с использованием всего 32 ГБ памяти, достигнув задержки 35 мс P50 с отзывом TOP10@95%, что помогает вам снизить затраты на инфраструктуру при сохранении высокого качества поиска.
? Бесплатная интеграция : полностью совместим с типами данных PGVector и синтаксисом, обеспечивая оптимальные дефолты из коробки - не требуется ручная настройка параметров. Просто погрузитесь в VectorChord для повышения производительности.
? Внешний индекс сборка : используйте ЭКО для построения индексов снаружи (например, на графическом процессоре) для более быстрой кластеризации Kmeans, в сочетании с сжатием Rabitq 3 для эффективного хранения векторов при сохранении качества поиска посредством автономного повторного переуном.
? Длинная векторная поддержка : хранить и поиск векторов до 65 535 измерений, что позволяет легко использовать лучшие высокоразмерные модели, такие как Text-Embedding-3-Large.
Для новых пользователей мы рекомендуем использовать изображение Docker, чтобы начать быстро.
docker run
--name vectorchord-demo
-e POSTGRES_PASSWORD=mysecretpassword
-p 5432:5432
-d tensorchord/vchord-postgres:pg17-v0.1.0 Затем вы можете подключиться к базе данных, используя инструмент командной строки psql . Имя пользователя по умолчанию - postgres , а пароль по умолчанию - mysecretpassword .
psql -h localhost -p 5432 -U postgresЗапустите следующий SQL, чтобы убедиться, что расширение включено.
CREATE EXTENSION IF NOT EXISTS vchord CASCADE; И обязательно добавьте vchord.so в shared_preload_libraries в postgresql.conf .
-- Add vchord and pgvector to shared_preload_libraries --
ALTER SYSTEM SET shared_preload_libraries = ' vchord.so ' ;Чтобы создать индекс VectorChord Rabitq (VCHORDRQ), вы можете использовать следующий SQL.
-- Set residual_quantization to true and spherical_centroids to false for L2 distance --
CREATE INDEX ON gist_train USING vchordrq (embedding vector_l2_ops) WITH (options = $$
residual_quantization = true
[ build . internal ]
lists = [ 4096 ]
spherical_centroids = false
$$);
-- Set residual_quantization to false and spherical_centroids to true for cos/dot distance --
CREATE INDEX ON laion USING vchordrq (embedding vector_cos_ops) WITH (options = $$
residual_quantization = false
[ build . internal ]
lists = [ 4096 ]
spherical_centroids = true
$$);Заявление запроса точно так же, как и PGVector. VectorChord поддерживает любую работу фильтра и где/соединить положения, такие как pgvecto.rs с vbase.
SELECT * FROM items ORDER BY embedding < - > ' [3,1,2] ' LIMIT 5 ;Поддерживаемые функции расстояния:
Вы можете точно настроить производительность поиска, настраивая probes и параметры epsilon :
-- Set probes to control the number of lists scanned.
-- Recommended range: 3%–10% of the total `lists` value.
SET vchordrq . probes = 100 ;
-- Set epsilon to control the reranking precision.
-- Larger value means more rerank for higher recall rate.
-- Don't change it unless you only have limited memory.
-- Recommended range: 1.0–1.9. Default value is 1.9.
SET vchordrq . epsilon = 1 . 9 ;
-- vchordrq relies on a projection matrix to optimize performance.
-- Add your vector dimensions to the `prewarm_dim` list to reduce latency.
-- If this is not configured, the first query will have higher latency as the matrix is generated on demand.
-- Default value: '64,128,256,384,512,768,1024,1536'
-- Note: This setting requires a database restart to take effect.
ALTER SYSTEM SET vchordrq . prewarm_dim = ' 64,128,256,384,512,768,1024,1536 ' ;И для настройки Postgres
-- If using SSDs, set `effective_io_concurrency` to 200 for faster disk I/O.
SET effective_io_concurrency = 200 ;
-- Disable JIT (Just-In-Time Compilation) as it offers minimal benefit (1–2%)
-- and adds overhead for single-query workloads.
SET jit = off;
-- Allocate at least 25% of total memory to `shared_buffers`.
-- For disk-heavy workloads, you can increase this to up to 90% of total memory. You may also want to disable swap with network storage to avoid io hang.
-- Note: A restart is required for this setting to take effect.
ALTER SYSTEM SET shared_buffers = ' 8GB ' ;Чтобы получить индекс, вы можете использовать следующий SQL. Это значительно улучшит производительность при использовании ограниченной памяти.
-- vchordrq_prewarm(index_name::regclass) to prewarm the index into the shared buffer
SELECT vchordrq_prewarm( ' gist_train_embedding_idx ' ::regclass) "Индексное здание может параллелизировать, а при предварительном предварительном сфере центроида общее время в основном ограничено скоростью диска. Оптимизируйте параллелизм, используя следующие настройки:
-- Set this to the number of CPU cores available for parallel operations.
SET max_parallel_maintenance_workers = 8 ;
SET max_parallel_workers = 8 ;
-- Adjust the total number of worker processes.
-- Note: A restart is required for this setting to take effect.
ALTER SYSTEM SET max_worker_processes = 8 ; Вы можете проверить прогресс индексации, запрашивая представление pg_stat_progress_create_index .
SELECT phase, round( 100 . 0 * blocks_done / nullif(blocks_total, 0 ), 1 ) AS " % " FROM pg_stat_progress_create_index;В отличие от чистого SQL, внешний индекс предварительно снят сначала кластеризацию снаружи и вставит центроиды в таблицу PostgreSQL. Хотя это может быть более сложным, внешняя сборка определенно намного быстрее для более крупного набора данных (> 5 м).
Чтобы начать, вам нужно сделать кластеризацию векторов, используя faiss , scikit-learn или любую другую библиотеку кластеризации.
Центроиды должны быть предусмотрены в таблице любого имени с 3 столбцами:
pgvectorИ пример может быть таким:
-- Create table of centroids
CREATE TABLE public .centroids (id integer NOT NULL UNIQUE, parent integer , vector vector( 768 ));
-- Insert centroids into it
INSERT INTO public . centroids (id, parent, vector) VALUES ( 1 , NULL , ' {0.1, 0.2, 0.3, ..., 0.768} ' );
INSERT INTO public . centroids (id, parent, vector) VALUES ( 2 , NULL , ' {0.4, 0.5, 0.6, ..., 0.768} ' );
INSERT INTO public . centroids (id, parent, vector) VALUES ( 3 , NULL , ' {0.7, 0.8, 0.9, ..., 0.768} ' );
-- ...
-- Create index using the centroid table
CREATE INDEX ON gist_train USING vchordrq (embedding vector_l2_ops) WITH (options = $$
[ build . external ]
table = ' public.centroids '
$$);Чтобы упростить рабочий процесс, мы предоставляем сквозные сценарии для предварительного составления внешнего индекса, см. Сценарии.
Установите PGRX в соответствии с инструкцией PGRX.
cargo install --locked cargo-pgrx
cargo pgrx init --pg17 $( which pg_config ) # To init with system postgres, with pg_config in PATH
cargo pgrx install --release --sudo # To install the extension into the system postgres with sudo Это программное обеспечение лицензировано по модели с двойной лицензией:
GNU Affero Общая публичная лицензия V3 (AGPLV3) : вы можете использовать, изменять и распространять это программное обеспечение в соответствии с условиями AGPLV3.
Elastic License v2 (ELV2) : вы также можете использовать, изменять и распространять это программное обеспечение в рамках Elastic License v2, которая имеет конкретные ограничения.
Вы можете выбрать любую лицензию в зависимости от ваших потребностей. Мы приветствуем любое коммерческое сотрудничество или поддержку, поэтому, пожалуйста, напишите нам vectorchord [email protected] с любыми вопросами или запросами, касающимися лицензий.
Основываясь на MyScale Benchmark с 768-мерными векторами и 95% отзывом. ↩
Основано на MyScale Benchmark с 768-мерными векторами. Пожалуйста, проверьте наш пост в блоге для получения более подробной информации. ↩
Гао, Цзяньян и Ченг Лонг. «Rabitq: квантование высокоразмерных векторов с теоретической ошибкой, связанной с приблизительным поиском ближайшего соседа». Материалы ACM по управлению данными 2.3 (2024): 1-27. ↩