paint-brush
LanceDB: Veri Karmaşıklığına Karşı Düelloda Güvenilir Atınızile@minio
25,852 okumalar
25,852 okumalar

LanceDB: Veri Karmaşıklığına Karşı Düelloda Güvenilir Atınız

ile MinIO8m2024/02/01
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

MinIO ve LanceDB'yi kullanarak performanslı, ölçeklenebilir ve geleceğe hazır ML/AI mimarileri oluşturmak için bu eğitimde sunulan temeli temel almanın birçok yolu vardır.

People Mentioned

Mention Thumbnail
featured image - LanceDB: Veri Karmaşıklığına Karşı Düelloda Güvenilir Atınız
MinIO HackerNoon profile picture
0-item
1-item

Açık kaynaklı bir sütunlu veri formatı olan Lance'i temel alan LanceDB, onu AI/ML için çekici kılan bazı ilginç özelliklere sahiptir. Örneğin LanceDB, çeşitli veri türlerini işleme yeteneği ile açık ve örtülü vektörleştirmeyi destekler. LanceDB, aşağıdakiler gibi önde gelen makine öğrenimi çerçeveleriyle entegredir: PyTorch Ve TensorFlow . Daha da serin olan, LanceDB'nin yaklaşık en yakın komşu algoritmalarını kullanarak benzer vektörlerin verimli bir şekilde alınmasını sağlayan hızlı komşu aramasıdır. Bunların hepsi bir araya gelerek hızlı, kullanımı kolay ve her yere dağıtılabilecek kadar hafif bir vektör veritabanı oluşturur.


LanceDB, S3 uyumlu nesne depolama alanındaki verileri sorgulama yeteneğine sahiptir. Bu kombinasyon, yüksek performanslı, ölçeklenebilir ve bulutta yerel ML veri depolama ve alma sistemleri oluşturmak için idealdir. MinIO, çeşitli donanım, konum ve bulut ortamlarında performansı ve benzersiz esnekliği denklemin içine katarak bu tür dağıtımlar için doğal bir seçim haline getiriyor.


Bu eğitimi tamamladıktan sonra, herhangi bir veri sorunuyla mücadele etmek için LanceDB ve MinIO'yu kullanmaya hazır olacaksınız.

Lance nedir?

Mızrak dosya biçimi, makine öğrenimi iş akışları ve veri kümeleri için optimize edilmiş sütunlu bir veri biçimidir. Sürümü, sorgulaması ve eğitim amaçlı kullanımı kolay ve hızlı olacak şekilde tasarlanmıştır ve görüntüler, videolar, 3B nokta bulutları, ses ve tablo verileri dahil olmak üzere çeşitli veri türleri için uygundur. Ek olarak, yüksek performanslı rastgele erişimi destekler:Lance raporlama kriterleri Sorgularda Parquet'ten 100 kat daha hızlı. Lance'in hızı kısmen Rust'ta uygulanmasının ve sıfır kopyalı sürüm oluşturma ve optimize edilmiş vektör işlemleri gibi özellikleri içeren bulut tabanlı tasarımının bir sonucudur.


Onun bir tanesi ana Özellikler kullanıcıların bulmasını sağlayan vektör araması yapma yeteneğidir. en yakın komşular 1 milisaniyenin altında bir sürede ve OLAP sorgularını vektör aramayla birleştirin. Mızrak formatına yönelik diğer üretim uygulamaları arasında makine öğrenimi uygulamaları için uçta konuşlandırılmış düşük gecikme süreli vektör veritabanları, sürücüsüz otomobil şirketlerinde çok modlu verilerin büyük ölçekli depolanması, alınması ve işlenmesi ve e-ticarette milyar ölçeğin üzerinde vektör kişiselleştirilmiş arama yer alır. -ticaret şirketleri. Lance dosya formatının çekiciliğinin bir kısmı Pandalar gibi popüler araçlar ve platformlarla uyumluluğudur. DuckDB , Polarlar ve Civanperçemi . LanceDB'yi kullanmasanız bile veri yığınınızda Lance dosya formatından yararlanabilirsiniz.

Yapay Zeka ve Makine Öğrenimi için Tasarlandı

LanceDB gibi vektör veritabanları, verimli özellikleri sayesinde yapay zeka ve makine öğrenimi uygulamaları için belirgin avantajlar sunar. ayrılmış depolama ve hesaplama mimarileri ve verilerin yüksek boyutlu vektör temsillerinin alınması. İşte bazı önemli kullanım durumları:


Doğal Dil İşleme (NLP):


Anlamsal Arama: Yalnızca anahtar kelimelere göre değil, anlamlara göre sorguya benzer belgeleri veya pasajları bulun. Bu, chatbot yanıtlarını, kişiselleştirilmiş içerik önerilerini ve bilgi erişim sistemlerini güçlendirir.


Soru Yanıtlama: Anlamsal benzerliğe dayalı olarak ilgili metin pasajlarını bularak karmaşık soruları anlayın ve yanıtlayın.


Konu Modelleme: Büyük metin koleksiyonlarındaki gizli konuları keşfedin; belge kümeleme ve trend analizi için kullanışlıdır.


Bilgisayar görüşü:


Resim ve Video Erişimi: İçerik tabanlı görsel alımı, ürün arama ve video analizi için çok önemli olan görsel içeriğe dayalı benzer görselleri veya videoları arayın.


Nesne Algılama ve Sınıflandırma: Benzer eğitim verilerini verimli bir şekilde alarak nesne algılama ve sınıflandırma modellerinin doğruluğunu artırın.


Video Önerisi : Daha önce izlenen videoların görsel içeriklerine göre benzer videolar önerin.


Piyasadaki çok sayıda vektör veri tabanı arasında LanceDB, S3 uyumlu depolamada sorgulamayı desteklediği için yapay zeka ve makine öğrenimi için özellikle uygundur. Verileriniz her yerde, veritabanınız da her yerde olmalı.

Başarı için Mimarlık

MinIO'yu LanceDB ile kullanmak aşağıdakiler de dahil olmak üzere çeşitli avantajlar sunar:


  • Ölçeklenebilirlik ve Performans : MinIO'nun bulut tabanlı tasarımı, ölçeklendirme ve yüksek performanslı depolama ve erişim için tasarlanmıştır. MinIO'nun ölçeklenebilirliğinden ve performansından yararlanan LanceDB, büyük miktarlardaki verileri verimli bir şekilde işleyebilir ve bu da onu modern makine öğrenimi iş yükleri için çok uygun hale getirir.


  • Yüksek Kullanılabilirlik ve Hata Toleransı : MinIO yüksek oranda kullanılabilir, değişmez ve son derece dayanıklıdır. Bu, MinIO'da depolanan verilerin donanım arızalarına karşı korunmasını sağlar ve LanceDB gibi veri yoğun uygulamalar için çok önemli olan yüksek kullanılabilirlik ve hata toleransı sağlar.


  • Aktif-aktif çoğaltma : Çok bölgeli, aktif-aktif çoğaltma, birden fazla MinIO dağıtımı arasında verilerin neredeyse eşzamanlı olarak çoğaltılmasına olanak tanır. Bu sağlam süreç, yüksek dayanıklılık ve yedeklilik sağlayarak onu kritik görev üretim ortamlarındaki verileri korumak için ideal hale getirir.


MinIO ve LanceDB'nin birleşimi, büyük ölçekli makine öğrenimi veri kümelerini yönetmek ve analiz etmek için yüksek performanslı, ölçeklenebilir, bulutta yerel bir çözüm sağlar.

Gereksinimler

Bu öğreticiyi takip etmek için şunları kullanmanız gerekecek: Docker Oluşturma . Docker Engine ve Docker Compose ikili dosyalarını ayrı ayrı veya Docker Desktop'ı kullanarak birlikte yükleyebilirsiniz. En basit seçenek Docker Desktop'ı kurmaktır.


Aşağıdaki komutu çalıştırarak Docker Compose'un kurulu olduğundan emin olun:


 docker compose version


Ayrıca Python'u da kurmanız gerekecek. Python'u şuradan indirebilirsiniz: Burada . Kurulum sırasında Python'u sisteminizin PATH'sine ekleme seçeneğini işaretlediğinizden emin olun.


İsteğe bağlı olarak Sanal Ortam oluşturmayı seçebilirsiniz. Bağımlılıkları yalıtmak için sanal bir ortam oluşturmak iyi bir uygulamadır. Bunu yapmak için bir terminal açın ve şunu çalıştırın:


 python -m venv venv


Sanal ortamı etkinleştirmek için:


Windows'ta:

 .\venv\Scripts\activate


MacOS/Linux'ta:

 source venv/bin/activate

Başlarken

Projeyi klonlayarak başlayın Burada . İşiniz bittiğinde, terminal penceresinde dosyaları indirdiğiniz klasöre gidin ve şunu çalıştırın:


 docker-compose up minio


Bu MinIO konteynerini başlatacaktır. ' adresine gidebilirsiniz http://172.20.0.2:9001 ' MinIO konsoluna bir göz atmak için.


MinIO Konsolu


Kullanıcı adı ve şifre minioadmin:minioadmin ile giriş yapın.


Daha sonra, lance adında bir MinIO paketi oluşturmak için aşağıdaki komutu çalıştırın.


 docker compose up mc 


MinIO Kovası


Bu komut bir dizi işlemi gerçekleştirir MinIO İstemcisi Bir kabuk içindeki (mc) komutları.


İşte her komutun bir dökümü:


ta ki (/usr/bin/mc config host minio ekle http://minio:9000 minioadmin minioadmin) echo '...bekliyor...' && uyku 1 yapana kadar; bitti ;: Bu komut, başarılı olana kadar sürekli olarak minio adlı bir MinIO ana bilgisayarını belirtilen parametrelerle (uç nokta, erişim anahtarı ve gizli anahtar) yapılandırmaya çalışır. Her denemede bir bekleme mesajı yankılanır ve 1 saniye duraklar.


/usr/bin/mc rm -r --force minio/lance;: Bu komut, MinIO'daki lance kovasındaki tüm içeriği zorla kaldırır (siler).


/usr/bin/mc mb minio/lance; : Bu komut MinIO'da lance adında yeni bir kova oluşturur.


/usr/bin/mc politika seti genel minio/lance; : Bu komut, lance kovasının politikasını genel olarak ayarlayarak genel okuma erişimine izin verir.


çıkış 0; : Bu komut, betiğin başarılı yürütmeyi gösteren 0 durum koduyla çıkmasını sağlar.

LanceDB

Ne yazık ki, LanceDB'nin yerel S3 desteği yoktur ve sonuç olarak, yaptığınız MinIO konteynerine bağlanmak için boto3 gibi bir şey kullanmanız gerekecektir. LanceDB olgunlaştıkça, kullanıcı deneyimini daha iyi hale getirecek yerel S3 desteğini sabırsızlıkla bekliyoruz.


Aşağıdaki örnek komut dosyası başlamanıza yardımcı olacaktır.


Gerekli paketleri pip kullanarak yükleyin. Aşağıdaki içeriğe sahip gereksinimleri.txt adlı bir dosya oluşturun:


 lancedb~=0.4.1 boto3~=1.34.9 botocore~=1.34.9


Daha sonra paketleri yüklemek için aşağıdaki komutu çalıştırın:


 pip install -r requirements.txt


MinIO kapsayıcısını oluşturma yönteminiz yukarıda belirtilenden farklıysa kimlik bilgilerinizi değiştirmeniz gerekecektir.


Aşağıdaki betiği bir dosyaya kaydedin, örneğin lancedb_script.py .


 import lancedb import os import boto3 import botocore import random def generate_random_data(num_records): data = [] for _ in range(num_records): record = { "vector": [random.uniform(0, 10), random.uniform(0, 10)], "item": f"item_{random.randint(1, 100)}", "price": round(random.uniform(5, 100), 2) } data.append(record) return data def main(): # Set credentials and region as environment variables os.environ["AWS_ACCESS_KEY_ID"] = "minioadmin" os.environ["AWS_SECRET_ACCESS_KEY"] = "minioadmin" os.environ["AWS_ENDPOINT"] = "http://localhost:9000" os.environ["AWS_DEFAULT_REGION"] = "us-east-1" minio_bucket_name = "lance" # Create a boto3 session with path-style access session = boto3.Session() s3_client = session.client("s3", config=botocore.config.Config(s3={'addressing_style': 'path'})) # Connect to LanceDB using path-style URI and s3_client db_uri = f"s3://{minio_bucket_name}/" db = lancedb.connect(db_uri) # Create a table with more interesting data table = db.create_table("mytable", data=generate_random_data(100)) # Open the table and perform a search result = table.search([5, 5]).limit(5).to_pandas() print(result) if __name__ == "__main__": main()


Bu komut dosyası, rastgele oluşturulmuş verilerden bir Lance tablosu oluşturacak ve bunu MinIO klasörünüze ekleyecektir. Yine, bir paket oluşturmak için önceki bölümdeki yöntemi kullanmazsanız, betiği çalıştırmadan önce bunu yapmanız gerekecektir. Yukarıdaki örnek komut dosyasını MinIO grubunuza verdiğiniz adla eşleşecek şekilde değiştirmeyi unutmayın.


Son olarak, komut dosyası tabloyu MinIO'dan çıkarmadan açar ve bir arama yapmak ve sonuçları yazdırmak için Pandaları kullanır.


Komut dosyasının sonucu aşağıdakine benzer görünmelidir. Verilerin kendisinin her seferinde rastgele oluşturulduğunu unutmayın.


 vector item price _distance 0 [5.1022754, 5.1069164] item_95 50.94 0.021891 1 [4.209107, 5.2760105] item_100 69.34 0.701694 2 [5.23562, 4.102992] item_96 99.86 0.860140 3 [5.7922664, 5.867489] item_47 56.25 1.380223 4 [4.458882, 3.934825] item_93 9.90 1.427407


Kendi başınıza genişletin

Performanslı, ölçeklenebilir ve geleceğe yönelik ML/AI mimarileri oluşturmak için bu eğitimde sunulan bu temeli temel almanın birçok yolu vardır. Cephaneliğinizde iki son teknoloji ve açık kaynaklı yapı bloğu var: MinIO nesne depolama ve LanceDB vektör veritabanı. Bunu ML/AI'ye kazanan biletiniz olarak düşünün turnuva .


Burada durma. LanceDB geniş bir ürün yelpazesi sunuyor yemek tarifleri ve kısa süre önce duyurulan Udacity kursu da dahil olmak üzere bu eğitimde oluşturduklarınızı genişletmek için eğitimler Vektör Veritabanlarıyla Üretken Yapay Zeka Çözümleri Oluşturma . Özellikle ilgi çekici olan Bu belgelerinizle sohbet etmek için tarif. Hepimiz verilerinizden en iyi şekilde yararlanmanın önündeki engelleri yıkmaktan yanayız.


Lütfen bize ne inşa ettiğinizi gösterin ve asil arayışınızda rehberliğe ihtiyacınız olursa [email protected] adresinden bize e-posta göndermekten veya yuvarlak masamıza katılmaktan çekinmeyin. Gevşek .