deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

Timescale'ın pg_vectorsearch'ü, pgvector'ın HNSW ve IVFFlat'ından daha hızlı vektör arama iddiasında bulunuyor

Timescale, PRISM index'inin pgvector'ın IVFFlat ve HNSW indexlerinden sorgu hızı ve index oluşturma konusunda daha iyi olduğunu, daha düşük bellek kullanımıyla sunduğunu iddia ettiği alpha aşamasındaki PostgreSQL extension'ı pg_vectorsearch'ü yayınladı.

Timescale'ın pg_vectorsearch'ü, pgvector'ın HNSW ve IVFFlat'ından daha hızlı vektör arama iddiasında bulunuyor

Ne oldu

Timescale, yaklaşık en yakın komşu (ANN) araması için açık kaynaklı bir PostgreSQL extension'ı olan pg_vectorsearch'ü yayınladı ve projenin repository'si Hacker News'in ana sayfasına çıktı. Extension, C ile geliştirilen yeni bir index erişim yöntemi olan PRISM'ı (Partitioned Routing Index for Similarity Matching) tanıtıyor.

Projenin README'sine göre PRISM, hem sorgular hem de index oluşturma konusunda pgvector'ın IVFFlat ve HNSW indexlerinden önemli ölçüde daha hızlı. Proje, 100 milyon vektörlük bir veri setinde PRISM'ın eşdeğer recall değerinde, belleğin dörtte biri büyüklüğünde bir instance üzerinde çalışarak graf tabanlı HNSW'yı geçtiğini iddia ediyor. Bunlar bağımsız sonuçlar değil projenin kendi benchmark'ları, bu yüzden her zamanki ihtiyat geçerli.

PRISM nasıl çalışıyor

PRISM, hiyerarşik yönlendirme içeren IVI tarzı bir index olarak tanımlanıyor. Bir centroid ağacı vektörleri kümelere bölüyor ve ağacın PostgreSQL'in buffer cache'inde sıcak kalması için tasarlandığı belirtiliyor. Vektörler, teorik hata sınırlarıyla birlikte gelen ve SIGMOD 2024'te yayımlanan bir binary quantization tekniği olan RaBitQ ile sıkıştırılıyor ve SIMD hızlandırmalı mesafe hesabı için düzenlenmiş posting list'lerde saklanıyor (AVX2, AVX512 ve NEON destekleniyor).

Hata sınırları ilginç olan kısım. Bir arama önce quantize edilmiş vektörlerde mesafeleri tahmin ediyor, sonra sınırları kullanarak en yakın komşular arasında olamayacağı kanıtlanabilen tüm adayları eliyor, böylece yalnızca küçük bir kalan küme tabloda saklanan tam hassasiyetli vektörlere karşı yeniden sıralanıyor. Sorgu akışı şöyle: en yakın kümeleri bulmak için centroid ağacını dolaş, posting list'leri asenkron I/O ile tara, RaBitQ iki aşamalı filtrelemeyi uygula, kalanları tam hassasiyetle yeniden sırala ve k en yakın komşuyu döndür.

Tasarım, README'nin açıkça kaynak gösterdiği birçok araştırma çabasından faydalanıyor: artımlı güncellemeler için SPFresh (SOSP 2023), milyar ölçekli bölümlenmiş ANN için SPANN (NeurIPS 2021) ve hiyerarşik kümeleme için Google'ın AlloyDB'de ScaNN kullanımı. PRISM ayrıca dinamik güncellemeleri destekliyor — insert, update ve delete — ve satırlar geldikçe büyüyen ve kendiliğinden asla bölünmeyen listeler, aşırı büyümüş posting list'ler prism_rebalance prosedürüyle yerinde bölünüyor.

pgvector uyumluluğu

Extension iki yol sunuyor. Yeni kullanıcılar embedding'leri kendi vec32 (float32) veya vec16 (float16) sütun tiplerinde saklayabilir; bunlar başka bir extension gerektirmiyor. Mevcut pgvector kullanıcıları pg_vectorsearch'ü pgvector ile birlikte kurabilir ve mevcut vector veya halfvec sütunlarına doğrudan bir PRISM index'i oluşturabilir; README, sütunun yeniden yazılmadığını da kopyalanmadığını ve mevcut sorguların değişmeden çalışmaya devam ettiğini belirtiyor.

Tipler farklı isimlere sahip olsa da pgvector'ın tipleriyle binary olarak uyumlu, dolayısıyla iki extension aynı schema'da bile bir arada var olabilir. Aynı mesafe operatörleri (<->, <#>, <=>) ve L2, iç çarpım ve kosinüs için eşleşen operator class'ları destekleniyor. PRISM normalde daha hızlı olduğu için planner'ın ikisi de varken mevcut bir HNSW index'ine onu tercih etmesi bekleniyor — README, EXPLAIN ile doğrulamayı ve sonra eski index'i düşürmeyi öneriyor. Çoğu dağıtımın yalnızca kabaca 0,95 recall hedefleyen bir auto moda varsayılan olan prism.nprobe'u ayarlamaya ihtiyacı olacak.

Durum ve gereksinimler

Proje açıkça alpha aşamasında ve test için tasarlanmış, production için değil. Prerelease'ler arası yükseltmeler mümkün olmayabilir ve README, kullanıcıların extension'ı ve index'lerini düşürüp yeniden oluşturmaya hazır olmasını tavsiye ediyor. PostgreSQL 18 veya daha yenisi ve development header'ları, GCC 11+ veya Clang 14+ ve Meson build sistemi gerektiriyor; CBLAS isteğe bağlı ve RaBitQ encoding'ini hızlandırıyor. Kod PostgreSQL Lisansı ile yayımlandı.

Neden önemli

Vektör araması artık PostgreSQL üzerine kurulu yapay zeka uygulamalarının temel altyapısı — retrieval-augmented generation, semantik arama ve öneri sistemlerinin tümü büyük embedding setleri üzerinde hızlı ANN sorgularına bağlı. pgvector'ın HNSW ve IVFFlat index'leri fiili varsayılan durumunda ve Timescale zaten DiskANN tabanlı bir alternatif olan pgvectorscale'i sunuyor. PRISM, iddiasının tam olarak embedding koleksiyonları on milyonlarca satırı aştığında yaşanan acı noktayı hedefleyen üçüncü bir seçenek ekliyor — eşdeğer recall'de daha iyi hız ve belleğin dörtte biri.

Bellek açısı en önemlisi: HNSW gibi graf index'leri bilinen bellek canavarlarıdır ve Postgres'in kendi buffer cache'ine yaslanan bölümlenmiş, quantization ağırlıklı bir tasarım, büyük ölçekli vektör aramasını daha küçük instance'larda uygulanabilir kılabilir. Yine de alpha durumu, PostgreSQL 18+ gereksinimi ve benchmark'ların satıcıdan gelmesi, çoğu production kullanıcısının bunu bir göç hedefi değil umut verici bir önizleme olarak görmesi gerektiği anlamına geliyor — yine de RaBitQ ve SPANN gibi araştırma tekniklerini Postgres-native extension'lara katma biçimi, ekosistemin yönünü işaret ediyor.

  • #postgresql
  • #vector-search
  • #ai
  • #database
  • #open-source

İlgili yazılar