paint-brush
LanceDB: Ihr vertrauenswürdiges Pferd im Kampf gegen die Datenkomplexitätvon@minio
25,859 Lesungen
25,859 Lesungen

LanceDB: Ihr vertrauenswürdiges Pferd im Kampf gegen die Datenkomplexität

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

Zu lang; Lesen

Es gibt viele Möglichkeiten, auf der in diesem Tutorial angebotenen Grundlage aufzubauen, um mit MinIO und LanceDB leistungsstarke, skalierbare und zukunftssichere ML/KI-Architekturen zu erstellen.

People Mentioned

Mention Thumbnail
featured image - LanceDB: Ihr vertrauenswürdiges Pferd im Kampf gegen die Datenkomplexität
MinIO HackerNoon profile picture
0-item
1-item

LanceDB basiert auf Lance, einem Open-Source-Säulendatenformat und verfügt über einige interessante Funktionen, die es für KI/ML attraktiv machen. LanceDB unterstützt beispielsweise die explizite und implizite Vektorisierung mit der Möglichkeit, verschiedene Datentypen zu verarbeiten. LanceDB ist in führende ML-Frameworks wie integriert PyTorch Und TensorFlow . Noch cooler ist die schnelle Nachbarsuche von LanceDB, die das effiziente Abrufen ähnlicher Vektoren mithilfe von Näherungsalgorithmen für den nächsten Nachbarn ermöglicht. All dies zusammen ergibt eine Vektordatenbank, die schnell, einfach zu verwenden und so leicht ist, dass sie überall eingesetzt werden kann.


LanceDB ist in der Lage, Daten im S3-kompatiblen Objektspeicher abzufragen. Diese Kombination ist optimal für den Aufbau leistungsstarker, skalierbarer und cloudnativer ML-Datenspeicher- und -abrufsysteme. MinIO bietet Leistung und beispiellose Flexibilität über verschiedene Hardware-, Standort- und Cloud-Umgebungen hinweg und ist damit die natürliche Wahl für solche Bereitstellungen.


Nach Abschluss dieses Tutorials sind Sie bereit, mit LanceDB und MinIO jede Datenherausforderung zu meistern.

Was ist Lanze?

Der Lanze Das Dateiformat ist ein spaltenorientiertes Datenformat, das für ML-Workflows und -Datensätze optimiert ist. Es ist so konzipiert, dass es einfach und schnell zu versionieren, abzufragen und für Schulungen zu verwenden ist. Es eignet sich für verschiedene Datentypen, darunter Bilder, Videos, 3D-Punktwolken, Audio und Tabellendaten. Darüber hinaus unterstützt es leistungsstarken Direktzugriff: mitLance-Reporting-Benchmarks 100-mal schneller als Parquet bei Abfragen. Die Geschwindigkeit von Lance ist zum Teil das Ergebnis der Implementierung in Rust und seines Cloud-nativen Designs, das Funktionen wie Zero-Copy-Versionierung und optimierte Vektoroperationen umfasst.


Einer davon Hauptmerkmale ist die Möglichkeit, eine Vektorsuche durchzuführen, sodass Benutzer finden können nächste Nachbarn in weniger als 1 Millisekunde und kombinieren Sie OLAP-Abfragen mit der Vektorsuche. Weitere Produktionsanwendungen für das Lance-Format umfassen Edge-bereitgestellte Vektordatenbanken mit geringer Latenz für ML-Anwendungen, groß angelegte Speicherung, Abruf und Verarbeitung multimodaler Daten in Unternehmen für selbstfahrende Autos sowie personalisierte Vektorsuche im Milliardenmaßstab in z -Handelsunternehmen. Ein Teil der Attraktivität des Lance-Dateiformats liegt in seiner Kompatibilität mit gängigen Tools und Plattformen wie Pandas, DuckDB , Polaren und Schafgarbe . Auch wenn Sie LanceDB nicht verwenden, können Sie das Lance-Dateiformat in Ihrem Datenstapel nutzen.

Entwickelt für KI und maschinelles Lernen

Vektordatenbanken wie LanceDB bieten aufgrund ihrer Effizienz deutliche Vorteile für KI- und maschinelle Lernanwendungen entkoppelter Speicher und Berechnen von Architekturen und Abrufen hochdimensionaler Vektordarstellungen von Daten. Hier sind einige wichtige Anwendungsfälle:


Verarbeitung natürlicher Sprache (NLP):


Semantische Suche: Finden Sie Dokumente oder Passagen, die einer Suchanfrage ähneln, basierend auf der Bedeutung, nicht nur auf Schlüsselwörtern. Dies ermöglicht Chatbot-Antworten, personalisierte Inhaltsempfehlungen und Wissensabrufsysteme.


Beantwortung von Fragen: Verstehen und beantworten Sie komplexe Fragen, indem Sie relevante Textpassagen anhand semantischer Ähnlichkeit finden.


Themenmodellierung: Entdecken Sie latente Themen in großen Textsammlungen, nützlich für die Dokumentenclusterung und Trendanalyse.


Computer Vision:


Bild- und Videoabfrage: Suche nach ähnlichen Bildern oder Videos basierend auf visuellen Inhalten, entscheidend für die inhaltsbasierte Bildabfrage, Produktsuche und Videoanalyse.


Objekterkennung und -klassifizierung: Verbessern Sie die Genauigkeit von Objekterkennungs- und -klassifizierungsmodellen durch effizientes Abrufen ähnlicher Trainingsdaten.


Videoempfehlung : Empfehlen Sie ähnliche Videos basierend auf dem visuellen Inhalt zuvor angesehener Videos.


Unter der Fülle an Vektordatenbanken auf dem Markt eignet sich LanceDB besonders gut für KI und maschinelles Lernen, da es Abfragen auf S3-kompatiblem Speicher unterstützt. Ihre Daten sind überall, Ihre Datenbank sollte auch überall sein.

Architektur für den Erfolg

Die Verwendung von MinIO mit LanceDB bietet mehrere Vorteile, darunter:


  • Skalierbarkeit und Leistung : Das cloudnative Design von MinIO ist auf Skalierbarkeit und leistungsstarkes Speichern und Abrufen ausgelegt. Durch die Nutzung der Skalierbarkeit und Leistung von MinIO kann LanceDB große Datenmengen effizient verarbeiten und eignet sich daher gut für moderne ML-Workloads.


  • Hohe Verfügbarkeit und Fehlertoleranz : MinIO ist hochverfügbar, unveränderlich und äußerst langlebig. Dadurch wird sichergestellt, dass die in MinIO gespeicherten Daten vor Hardwareausfällen geschützt sind und eine hohe Verfügbarkeit und Fehlertoleranz gewährleistet sind, die für datenintensive Anwendungen wie LanceDB von entscheidender Bedeutung sind.


  • Aktiv-Aktiv-Replikation : Multi-Site-Aktiv-Aktiv-Replikation ermöglicht eine nahezu synchrone Replikation von Daten zwischen mehreren MinIO-Bereitstellungen. Dieser robuste Prozess gewährleistet eine hohe Haltbarkeit und Redundanz und eignet sich daher ideal für die Abschirmung von Daten in geschäftskritischen Produktionsumgebungen.


Die Kombination von MinIO und LanceDB bietet eine leistungsstarke, skalierbare cloudnative Lösung für die Verwaltung und Analyse großer ML-Datensätze.

Anforderungen

Um diesem Tutorial folgen zu können, müssen Sie Folgendes verwenden: Docker Compose . Sie können die Binärdateien von Docker Engine und Docker Compose separat oder zusammen mit Docker Desktop installieren. Die einfachste Möglichkeit ist die Installation von Docker Desktop.


Stellen Sie sicher, dass Docker Compose installiert ist, indem Sie den folgenden Befehl ausführen:


 docker compose version


Sie müssen außerdem Python installieren. Sie können Python herunterladen von Hier . Stellen Sie während der Installation sicher, dass Sie die Option zum Hinzufügen von Python zum PATH Ihres Systems aktivieren.


Optional können Sie eine virtuelle Umgebung erstellen. Es empfiehlt sich, eine virtuelle Umgebung zu erstellen, um Abhängigkeiten zu isolieren. Öffnen Sie dazu ein Terminal und führen Sie Folgendes aus:


 python -m venv venv


So aktivieren Sie die virtuelle Umgebung:


Unter Windows:

 .\venv\Scripts\activate


Unter macOS/Linux:

 source venv/bin/activate

Erste Schritte

Beginnen Sie mit dem Klonen des Projekts von Hier . Wenn Sie fertig sind, navigieren Sie in einem Terminalfenster zu dem Ordner, in den Sie die Dateien heruntergeladen haben, und führen Sie Folgendes aus:


 docker-compose up minio


Dadurch wird der MinIO-Container gestartet. Sie können zu „ http://172.20.0.2:9001 ', um einen Blick auf die MinIO-Konsole zu werfen.


MinIO-Konsole


Melden Sie sich mit dem Benutzernamen und Passwort minioadmin:minioadmin an.


Führen Sie als Nächstes den folgenden Befehl aus, um einen MinIO-Bucket namens lance zu erstellen.


 docker compose up mc 


MinIO-Bucket


Dieser Befehl führt eine Reihe von aus MinIO-Client (mc) Befehle innerhalb einer Shell.


Hier ist eine Aufschlüsselung der einzelnen Befehle:


Until (/usr/bin/mc config host add minio http://minio:9000 minioadmin minioadmin) do echo '...waiting...' && sleep 1; done ;: Dieser Befehl versucht wiederholt, einen MinIO-Host namens minio mit den angegebenen Parametern (Endpunkt, Zugriffsschlüssel und geheimer Schlüssel) zu konfigurieren, bis er erfolgreich ist. Bei jedem Versuch wird eine Wartemeldung ausgegeben und eine Sekunde lang pausiert.


/usr/bin/mc rm -r --force minio/lance;: Dieser Befehl entfernt (löscht) zwangsweise alle Inhalte im lance Bucket in MinIO.


/usr/bin/mc mb minio/lance; : Dieser Befehl erstellt einen neuen Bucket mit dem Namen lance in MinIO.


/usr/bin/mc Policy Set public minio/lance; : Dieser Befehl setzt die Richtlinie des lance Buckets auf öffentlich und ermöglicht so öffentlichen Lesezugriff.


Ausgang 0; : Dieser Befehl stellt sicher, dass das Skript mit dem Statuscode 0 beendet wird, was eine erfolgreiche Ausführung anzeigt.

LanceDB

Leider bietet LanceDB keine native S3-Unterstützung, und daher müssen Sie etwas wie boto3 verwenden, um eine Verbindung zu dem von Ihnen erstellten MinIO-Container herzustellen. Mit zunehmender Reife von LanceDB freuen wir uns auf die native S3-Unterstützung, die das Benutzererlebnis noch besser machen wird.


Das folgende Beispielskript erleichtert Ihnen den Einstieg.


Installieren Sie die erforderlichen Pakete mit pip. Erstellen Sie eine Datei mit dem Namen „requirements.txt“ und folgendem Inhalt:


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


Führen Sie dann den folgenden Befehl aus, um die Pakete zu installieren:


 pip install -r requirements.txt


Sie müssen Ihre Anmeldeinformationen ändern, wenn Ihre Methode zum Erstellen des MinIO-Containers von der oben beschriebenen abweicht.


Speichern Sie das folgende Skript in einer Datei, z. B. 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()


Dieses Skript erstellt eine Lance-Tabelle aus zufällig generierten Daten und fügt sie Ihrem MinIO-Bucket hinzu. Auch hier gilt: Wenn Sie die Methode im vorherigen Abschnitt nicht zum Erstellen eines Buckets verwenden, müssen Sie dies tun, bevor Sie das Skript ausführen. Denken Sie daran, das obige Beispielskript so zu ändern, dass es mit dem Namen Ihres MinIO-Buckets übereinstimmt.


Schließlich öffnet das Skript die Tabelle, ohne sie aus MinIO zu verschieben, und verwendet Pandas, um eine Suche durchzuführen und die Ergebnisse auszudrucken.


Das Ergebnis des Skripts sollte dem folgenden ähneln. Denken Sie daran, dass die Daten selbst jedes Mal zufällig generiert werden.


 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


Erweitern Sie auf eigene Faust

Es gibt viele Möglichkeiten, auf dieser in diesem Tutorial angebotenen Grundlage aufzubauen, um leistungsstarke, skalierbare und zukunftssichere ML/KI-Architekturen zu erstellen. Sie verfügen über zwei hochmoderne Open-Source-Bausteine in Ihrem Arsenal – MinIO-Objektspeicher und die LanceDB-Vektordatenbank – betrachten Sie dies als Ihr Erfolgsticket für ML/KI Turnier .


Hören Sie hier nicht auf. LanceDB bietet eine große Auswahl an Rezepte und Tutorials zur Erweiterung dessen, was Sie in diesem Tutorial erstellt haben, einschließlich eines kürzlich angekündigten Udacity-Kurses Aufbau generativer KI-Lösungen mit Vektordatenbanken . Von besonderem Interesse ist Das Rezept zum Chatten mit Ihren Dokumenten. Wir sind alle dafür, die Hürden abzubauen, die Sie daran hindern, das Beste aus Ihren Daten herauszuholen.


Bitte zeigen Sie uns, was Sie bauen. Sollten Sie Hilfe bei Ihrem edlen Vorhaben benötigen, zögern Sie nicht, uns eine E-Mail an [email protected] zu senden oder an unserem runden Tisch teilzunehmen Locker .