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
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.
Der
Einer davon
Vektordatenbanken wie LanceDB bieten aufgrund ihrer Effizienz deutliche Vorteile für KI- und maschinelle Lernanwendungen
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.
Die Verwendung von MinIO mit LanceDB bietet mehrere Vorteile, darunter:
Die Kombination von MinIO und LanceDB bietet eine leistungsstarke, skalierbare cloudnative Lösung für die Verwaltung und Analyse großer ML-Datensätze.
Um diesem Tutorial folgen zu können, müssen Sie Folgendes verwenden:
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
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
Beginnen Sie mit dem Klonen des Projekts von
docker-compose up minio
Dadurch wird der MinIO-Container gestartet. Sie können zu „
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
Dieser Befehl führt eine Reihe von aus
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.
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
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
Hören Sie hier nicht auf. LanceDB bietet eine große Auswahl an
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