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
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.
Le
L'un de ses
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é.
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.
L'utilisation de MinIO avec LanceDB offre plusieurs avantages, notamment :
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.
Pour suivre ce tutoriel, vous devrez utiliser
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
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
Commencez par cloner le projet à partir de
docker-compose up minio
Cela démarrera le conteneur MinIO. Vous pouvez accéder à '
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
Cette commande effectue une série de
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.
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
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.
Ne vous arrêtez pas ici. LanceDB propose une large gamme de
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