paint-brush
LanceDB : votre monture de confiance dans le duel contre la complexité des donnéespar@minio
25,852 lectures
25,852 lectures

LanceDB : votre monture de confiance dans le duel contre la complexité des données

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

Trop long; Pour lire

Il existe de nombreuses façons de s'appuyer sur les bases proposées dans ce didacticiel pour créer des architectures ML/AI performantes, évolutives et évolutives à l'aide de MinIO et LanceDB.

People Mentioned

Mention Thumbnail
featured image - LanceDB : votre monture de confiance dans le duel contre la complexité des données
MinIO HackerNoon profile picture
0-item
1-item

Construit sur Lance, un format de données en colonnes open source, LanceDB possède des fonctionnalités intéressantes qui le rendent attrayant pour l'IA/ML. Par exemple, LanceDB prend en charge la vectorisation explicite et implicite avec la possibilité de gérer différents types de données. LanceDB est intégré aux principaux frameworks ML tels que PyTorch et TensorFlow . Cooler est toujours la recherche rapide de voisins de LanceDB qui permet une récupération efficace de vecteurs similaires à l'aide d'algorithmes approximatifs du voisin le plus proche. Tous ces éléments se combinent pour créer une base de données vectorielles rapide, facile à utiliser et si légère qu'elle peut être déployée n'importe où.


LanceDB est capable d'interroger des données dans un stockage d'objets compatible S3. Cette combinaison est optimale pour créer des systèmes de stockage et de récupération de données ML hautes performances, évolutifs et natifs du cloud. MinIO apporte à l’équation des performances et une flexibilité inégalées sur divers matériels, emplacements et environnements cloud, ce qui en fait le choix naturel pour de tels déploiements.


À la fin de ce didacticiel, vous serez prêt à utiliser LanceDB et MinIO pour relever n'importe quel défi en matière de données.

Qu’est-ce que Lance ?

Le Lance Le format de fichier est un format de données en colonnes optimisé pour les flux de travail et les ensembles de données ML. Il est conçu pour être simple et rapide à versionner, interroger et utiliser à des fins de formation, et convient à différents types de données, notamment les images, les vidéos, les nuages de points 3D, l'audio et les données tabulaires. De plus, il prend en charge l'accès aléatoire hautes performances : avecBenchmarks de reporting Lance de 100 fois plus rapide que Parquet dans les requêtes. La vitesse de Lance est en partie le résultat de son implémentation dans Rust et de sa conception cloud native qui inclut des fonctionnalités telles que la gestion des versions sans copie et les opérations vectorielles optimisées.


L'un de ses principales caractéristiques est la possibilité d'effectuer une recherche vectorielle, permettant aux utilisateurs de trouver voisins les plus proches en moins d'une milliseconde et combinez les requêtes OLAP avec la recherche vectorielle. D'autres applications de production pour le format lance incluent des bases de données vectorielles à faible latence déployées en périphérie pour les applications ML, le stockage, la récupération et le traitement à grande échelle de données multimodales dans les constructeurs automobiles autonomes, ainsi qu'une recherche personnalisée vectorielle à l'échelle d'un milliard de dollars dans e. -les sociétés de commerce. Une partie de l'attrait du format de fichier Lance réside dans sa compatibilité avec les outils et plateformes populaires, tels que Pandas, CanardDB , polaires et Flèche . Même si vous n'utilisez pas LanceDB, vous pouvez toujours exploiter le format de fichier Lance dans votre pile de données.

Conçu pour l'IA et l'apprentissage automatique

Les bases de données vectorielles comme LanceDB offrent des avantages distincts pour les applications d'IA et d'apprentissage automatique, grâce à leur efficacité. stockage découplé et les architectures de calcul et la récupération de représentations vectorielles de données de grande dimension. Voici quelques cas d’utilisation clés :


Traitement du langage naturel (NLP) :


Recherche sémantique : recherchez des documents ou des passages similaires à une requête basée sur la signification, et pas seulement sur des mots-clés. Cela alimente les réponses des chatbots, les recommandations de contenu personnalisées et les systèmes de récupération de connaissances.


Réponse aux questions : comprenez et répondez à des questions complexes en trouvant des passages de texte pertinents basés sur la similitude sémantique.


Modélisation de sujets : découvrez des sujets latents dans de grandes collections de textes, utiles pour le regroupement de documents et l'analyse des tendances.


Vision par ordinateur:


Récupération d'images et de vidéos : recherchez des images ou des vidéos similaires en fonction du contenu visuel, crucial pour la récupération d'images basée sur le contenu, la recherche de produits et l'analyse vidéo.


Détection et classification d'objets : améliorez la précision des modèles de détection et de classification d'objets en récupérant efficacement des données de formation similaires.


Recommandation vidéo : recommandez des vidéos similaires en fonction du contenu visuel des vidéos précédemment regardées.


Parmi la pléthore de bases de données vectorielles disponibles sur le marché, LanceDB est particulièrement bien adaptée à l'IA et au machine learning, car elle prend en charge les requêtes sur un stockage compatible S3. Vos données sont partout, votre base de données devrait être partout aussi.

Architecture pour le succès

L'utilisation de MinIO avec LanceDB offre plusieurs avantages, notamment :


  • Évolutivité et performances : La conception cloud native de MinIO est conçue pour un stockage et une récupération évolutifs et hautes performances. En tirant parti de l'évolutivité et des performances de MinIO, LanceDB peut gérer efficacement de grandes quantités de données, ce qui le rend bien adapté aux charges de travail de ML modernes.


  • Haute disponibilité et tolérance aux pannes : MinIO est hautement disponible, immuable et hautement durable. Cela garantit que les données stockées dans MinIO sont protégées contre les pannes matérielles et offrent une haute disponibilité et une tolérance aux pannes, qui sont cruciales pour les applications gourmandes en données comme LanceDB.


  • Réplication active-active : La réplication active-active multisite permet une réplication quasi synchrone des données entre plusieurs déploiements MinIO. Ce processus robuste garantit une durabilité et une redondance élevées, ce qui le rend idéal pour protéger les données dans les environnements de production critiques.


La combinaison de MinIO et LanceDB fournit une solution cloud native évolutive hautes performances pour gérer et analyser des ensembles de données ML à grande échelle.

Exigences

Pour suivre ce tutoriel, vous devrez utiliser Docker Composer . Vous pouvez installer les binaires Docker Engine et Docker Compose séparément ou ensemble à l'aide de Docker Desktop. L'option la plus simple consiste à installer Docker Desktop.


Assurez-vous que Docker Compose est installé en exécutant la commande suivante :


 docker compose version


Vous devrez également installer Python. Vous pouvez télécharger Python depuis ici . Lors de l'installation, assurez-vous de cocher l'option permettant d'ajouter Python au PATH de votre système.


En option, vous pouvez choisir de créer un environnement virtuel. C'est une bonne pratique de créer un environnement virtuel pour isoler les dépendances. Pour ce faire, ouvrez un terminal et exécutez :


 python -m venv venv


Pour activer l'environnement virtuel :


Sous Windows :

 .\venv\Scripts\activate


Sous macOS/Linux :

 source venv/bin/activate

Commencer

Commencez par cloner le projet à partir de ici . Une fois terminé, accédez au dossier dans lequel vous avez téléchargé les fichiers dans une fenêtre de terminal et exécutez :


 docker-compose up minio


Cela démarrera le conteneur MinIO. Vous pouvez accéder à ' http://172.20.0.2:9001 ' pour jeter un oeil à la console MinIO.


Console MinIO


Connectez-vous avec le nom d'utilisateur et le mot de passe minioadmin:minioadmin .


Ensuite, exécutez la commande suivante pour créer un compartiment MinIO appelé lance .


 docker compose up mc 


Compartiment MinIO


Cette commande effectue une série de Client MinIO (mc) commandes dans un shell.


Voici une répartition de chaque commande :


jusqu'à ce que (/usr/bin/mc config host add minio http://minio:9000 minioadmin minioadmin) fasse echo '...en attente...' && sleep 1; done ; : Cette commande tente à plusieurs reprises de configurer un hôte MinIO nommé minio avec les paramètres spécifiés (point de terminaison, clé d'accès et clé secrète) jusqu'à ce qu'elle réussisse. Lors de chaque tentative, il fait écho à un message en attente et s'arrête pendant 1 seconde.


/usr/bin/mc rm -r --force minio/lance; : Cette commande supprime (supprime) de force tout le contenu du compartiment lance dans MinIO.


/usr/bin/mc mb minio/lance; : Cette commande crée un nouveau bucket nommé lance dans MinIO.


/usr/bin/mc ensemble de règles public minio/lance ; : Cette commande définit la politique du compartiment lance sur publique, autorisant un accès public en lecture.


sortie 0 ; : Cette commande garantit que le script se termine avec un code d'état de 0, indiquant une exécution réussie.

LanceDB

Malheureusement, LanceDB ne prend pas en charge S3 natif et, par conséquent, vous devrez utiliser quelque chose comme boto3 pour vous connecter au conteneur MinIO que vous avez créé. À mesure que LanceDB mûrit, nous attendons avec impatience la prise en charge native de S3 qui rendra l'expérience utilisateur encore meilleure.


L'exemple de script ci-dessous vous aidera à démarrer.


Installez les packages requis à l'aide de pip. Créez un fichier nommé exigences.txt avec le contenu suivant :


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


Exécutez ensuite la commande suivante pour installer les packages :


 pip install -r requirements.txt


Vous devrez modifier vos informations d'identification si votre méthode de création du conteneur MinIO diffère de celle décrite ci-dessus.


Enregistrez le script ci-dessous dans un fichier, par exemple 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()


Ce script créera une table Lance à partir de données générées aléatoirement et l'ajoutera à votre bucket MinIO. Encore une fois, si vous n'utilisez pas la méthode de la section précédente pour créer un bucket, vous devrez le faire avant d'exécuter le script. N'oubliez pas de modifier l'exemple de script ci-dessus pour qu'il corresponde au nom que vous donnez à votre compartiment MinIO.


Enfin, le script ouvre la table, sans la déplacer hors de MinIO, et utilise Pandas pour effectuer une recherche et imprimer les résultats.


Le résultat du script devrait ressembler à celui ci-dessous. N'oubliez pas que les données elles-mêmes sont générées aléatoirement à chaque fois.


 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


Développez par vous-même

Il existe de nombreuses façons de s'appuyer sur cette base proposée dans ce didacticiel pour créer des architectures ML/AI performantes, évolutives et évolutives. Vous disposez de deux éléments de base de pointe et open source dans votre arsenal – le stockage d'objets MinIO et la base de données vectorielles LanceDB – considérez cela comme votre ticket gagnant pour le ML/AI. tournoi .


Ne vous arrêtez pas ici. LanceDB propose une large gamme de recettes et des didacticiels pour développer ce que vous avez construit dans ce didacticiel, y compris un cours Udacity récemment annoncé sur Créer des solutions d'IA générative avec des bases de données vectorielles . Un intérêt particulier est ce recette pour discuter avec vos documents. Nous sommes tous favorables à l’élimination des obstacles qui empêchent de tirer le meilleur parti de vos données.


Veuillez nous montrer ce que vous construisez et si vous avez besoin de conseils dans votre noble quête, n'hésitez pas à nous envoyer un e-mail à [email protected] ou à rejoindre notre table ronde sur Mou .