3 puan yazan GN⁺ 2024-05-04 | 1 yorum | WhatsApp'ta paylaş

SQLite'de vektör araması için yeni bir uzantı geliştiriliyor

  • sqlite-vec, SQLite'de vektör araması için geliştirilen yeni bir uzantı ve mevcut sqlite-vss'ın yerini alacak şekilde planlanıyor.
  • SQLite'nin çalıştığı tüm ortamlarda (WASM dahil) çalışabilecek, gömülü ve "yeterince hızlı" bir vektör arama aracı olacak.
  • Henüz geliştirme aşamasında olsa da, hazır olur olmaz repoyu kontrol etmeniz önerilir.

sqlite-vec'in özellikleri

  • Tamamen C ile yazılmış, bağımlılığı olmayan bir SQLite uzantısı.
  • Hızlı vektör araması için özel SQL fonksiyonları ve sanal tablolar sunar.
  • Vektör işlemleri (nicemleme, JSON/BLOB/numpy dönüştürme, vektör hesaplamaları vb.) için diğer araçlar ve yardımcı programlar sağlar.
  • SQL kullanarak vektör araması yapılabilir (CREATE VIRTUAL TABLE, INSERT INTO, SELECT ifadeleri kullanılarak).

sqlite-vec'in avantajları

  • Tamamen C ile yazıldığı için Linux/MacOS/Windows, web tarayıcıları (WebAssembly), mobil telefonlar, Raspberry Pi vb. tüm platformlarda çalışabilir.
  • İkili boyutu yüzlerce KB seviyesinde küçük.
  • Bellek kullanımı daha iyi kontrol edilebilir (vektörler parça parça saklanır ve KNN aramasında parça parça okunur).
  • PRAGMA mmap_size komutu ile bellek içi hız artırılabilir.
  • Matryoshka gömme, değişken uzunluklu gömme ve int8/bit vektör desteği sayesinde ikili ve skaler nicemleme yapılabilir.
  • Hız, doğruluk ve disk alanı üzerinde daha fazla kontrol.
  • İlk aşamada yalnızca tam tarama vektör araması destekleniyor; ileride IVF + HNSW eklenecek.

Demo

  • Tarayıcıda doğrudan sqlite-vec çalıştırılabilir (movies.bit.db SQLite veritabanı yüklenmiştir).
  • articles tablosunda title, release_date, overview gibi sütunlar bulunur.
  • vec_movies sanal tablosunda overview sütununa ait gömme vektörü saklanır (768 boyutlu bir ikili vektör, 96 bayt).
  • KNN tipi bir aramayla seçilen filmle en benzer 10 film bulunabilir.

sqlite-vss'nin sorunları

  • Sadece Linux + MacOS'ta çalışır (Windows, WASM, mobil cihazlar vb. desteklenmiyor).
  • Vektörleri komple bellekte saklar.
  • Transaction ile ilgili çok sayıda hata ve sorun bulunuyor.
  • Derleme çok zor ve zaman alıcı.
  • Genel vektör işlemlerinin (skaler/ikili nicemleme) eksikliği.
  • Faiss'e bağlılıktan doğan sorunlar.

sqlite-vec geliştirme durumu

  • Temel işlevler çalışıyor ancak hata yönetimi ve test neredeyse yok.
  • sqlite-vec.c dosyasında 246 adet TODO var.
  • Tüm TODO'lar tamamlandıktan sonra dokümantasyon, demo ve bağlayıcılarla birlikte sqlite-vec v0.1.0'ın yayınlanması planlanıyor (hedef yaklaşık bir ay).

GN⁺ görüşü

  • Çeşitli platform ve ortamlarda çalışabilen gömülü bir vektör arama aracı olması cazip. Özellikle web tarayıcısında WASM ile çalışabilmesinin mümkün olması dikkat çekici.
  • Bellek kontrolü, değişken uzunluklu gömme ve nicemleme gibi güncel vektör arama tekniklerini yansıtması da bir avantaj. Hız, doğruluk ve depolama alanını daha esnek şekilde kontrol edilebileceği görülüyor.
  • Ancak yalnızca tam tarama ile arama desteği bir sınırlılık. Veri büyüdükçe arama hızıyla ilgili sorunlar ortaya çıkabilir. IVF+HNSW gibi ANN algoritmalarının eklenmesi acil görünüyor.
  • Ayrıca proje hâlâ geliştirme başlangıcında olduğundan, üretimde kullanılmaya uygun gözükmüyor. Stabil hale gelene kadar biraz daha zaman gerekiyor.
  • Faiss gibi mevcut vektör arama kütüphaneleriyle benchmark karşılaştırması da gerekli görünüyor. Saf bir SQLite uzantısı olmak avantajlı olsa da performans olarak doğrulanması gerekiyor.

1 yorum

 
GN⁺ 2024-05-04
Hacker News yorumları
  • Yazar, doğrudan yorumlarda yer alarak yeni proje olan sqlite-vec'i tanıtıyor. Proje hâlâ geliştirme aşamasında olsa da hedefin birkaç hafta içinde v0.1.0 olduğunu söylüyor. Daha önce geliştirdiği sqlite-vss'in bir devam projesi niteliğinde.
  • sqlite-vec, gömülü vektör araması için optimize edilmiş bir kütüphane ve farklı işletim sistemlerinde, mobilde, Raspberry Pi gibi cihazlarda çalışabiliyor. Yazar, Beepy adlı anlamsal arama uygulamasında sqlite-vec'i uygulamayı deniyor.
  • Bir okuyucu, 768 boyutlu bir vektörün 96 bayta nasıl sığdırıldığını sordu. Genelde float64 ile 6144 bayt gerektiği için, sıkıştırma ya da yaklaşık değer depolama gibi tekniklerin kullanılıp kullanılmadığını merak ediyor.
  • Daha önce sqlite-vss kullanmış bir geliştirici, bu aracın RAG modeli geliştirmesine yardımcı olduğuna dair teşekkürlerini paylaştı; Ubuntu ortamında sorunsuz çalıştığını belirtti.
  • DuckDB'nin de benzer bir vektör benzerliği arama uzantısını yakın zamanda duyurduğu belirtiliyor.
  • Qdrant vektör DB ile yapay zeka RAG uygulaması geliştirme tecrübesini anlatıp, sqlite-vec kullanımından beklenti duyduğunu dile getiren bir yorum var.
  • SQLite'ın yalnızca public API'sini mi kullanacağı, yoksa doğrudan amalgamation içinde mi entegre olacağına dair merak var. Ayrıca WebAssembly bağlayıcıları açısından dağıtım modelini nasıl ele alacağı konusunda sorular geldi.
  • Bir yorumcu, OSS projelerinin belirli bir ihtiyacı karşılamasını sevdiğini ve TypeScript ekosisteminde kullanılabilecek fikirler düşünmekte olduğunu paylaştı.
  • Birkaç ay önceki sqlite-vss sorununa çözüm olabileceğini düşünen bir tepki.
  • Tüm öznitelik vektörlerinin boyutlarının nasıl hizalandığı soruluyor. Stringleri float’a çevirip saklıyor gibi görünüyor; Hamming mesafesi hesabında farklı uzunluktaki vektörler de hesaba katılıyor mu, bunu doğrulamak istiyor.
  • Geliştirmenin README belgesinden yola çıkan bir yaklaşımla yapıldığına dair bir izlenim var. Dokümantasyonun önce mi yazıldığını merak ettiklerini belirtiyor.