paint-brush
LanceDB: su corcel de confianza en el duelo contra la complejidad de los datospor@minio
25,852 lecturas
25,852 lecturas

LanceDB: su corcel de confianza en el duelo contra la complejidad de los datos

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

Demasiado Largo; Para Leer

Hay muchas formas de aprovechar la base ofrecida en este tutorial para crear arquitecturas ML/AI eficaces, escalables y preparadas para el futuro utilizando MinIO y LanceDB.

People Mentioned

Mention Thumbnail
featured image - LanceDB: su corcel de confianza en el duelo contra la complejidad de los datos
MinIO HackerNoon profile picture
0-item
1-item

Construido sobre Lance, un formato de datos en columnas de código abierto, LanceDB tiene algunas características interesantes que lo hacen atractivo para AI/ML. Por ejemplo, LanceDB admite la vectorización explícita e implícita con la capacidad de manejar varios tipos de datos. LanceDB está integrado con los principales marcos de aprendizaje automático, como PyTorch y TensorFlow . Aún más interesante es la búsqueda rápida de vecinos de LanceDB, que permite la recuperación eficiente de vectores similares utilizando algoritmos de vecino más cercano aproximado. Todo esto se combina para crear una base de datos vectorial que es rápida, fácil de usar y tan liviana que puede implementarse en cualquier lugar.


LanceDB es capaz de consultar datos en un almacenamiento de objetos compatible con S3. Esta combinación es óptima para crear sistemas de recuperación y almacenamiento de datos de aprendizaje automático, escalables y nativos de la nube, de alto rendimiento. MinIO aporta rendimiento y flexibilidad incomparable en diversos hardware, ubicaciones y entornos de nube a la ecuación, lo que lo convierte en la opción natural para tales implementaciones.


Al finalizar este tutorial, estará preparado para utilizar LanceDB y MinIO para enfrentar cualquier desafío de datos.

¿Qué es Lanza?

El Lanza El formato de archivo es un formato de datos en columnas optimizado para flujos de trabajo y conjuntos de datos de ML. Está diseñado para ser fácil y rápido de versionar, consultar y usar para capacitación, y es adecuado para varios tipos de datos, incluidas imágenes, videos, nubes de puntos 3D, audio y datos tabulares. Además, admite acceso aleatorio de alto rendimiento: conPuntos de referencia de informes de Lance 100 veces más rápido que Parquet en consultas. La velocidad de Lance es en parte el resultado de su implementación en Rust y su diseño nativo de la nube que incluye características como control de versiones sin copia y operaciones vectoriales optimizadas.


uno de sus características clave es la capacidad de realizar búsquedas vectoriales, lo que permite a los usuarios encontrar vecinos más cercanos en menos de 1 milisegundo y combine consultas OLAP con búsqueda vectorial. Otras aplicaciones de producción para el formato de lanza incluyen bases de datos vectoriales de baja latencia implementadas en el borde para aplicaciones de aprendizaje automático, almacenamiento, recuperación y procesamiento a gran escala de datos multimodales en empresas de automóviles autónomos y búsqueda personalizada de vectores a más de mil millones de escala en e -empresas de comercio. Parte del atractivo del formato de archivo Lance es su compatibilidad con herramientas y plataformas populares, como Pandas, PatoDB , polares y Pyarrow . Incluso si no usa LanceDB, aún puede aprovechar el formato de archivo Lance en su pila de datos.

Creado para IA y aprendizaje automático

Las bases de datos vectoriales como LanceDB ofrecen distintas ventajas para aplicaciones de inteligencia artificial y aprendizaje automático, gracias a su eficiente almacenamiento desacoplado y arquitecturas informáticas y recuperación de representaciones vectoriales de datos de alta dimensión. A continuación se muestran algunos casos de uso clave:


Procesamiento del lenguaje natural (PNL):


Búsqueda semántica: busque documentos o pasajes similares a una consulta basada en el significado, no solo en palabras clave. Esto impulsa las respuestas del chatbot, las recomendaciones de contenido personalizadas y los sistemas de recuperación de conocimientos.


Respuesta a preguntas: comprenda y responda preguntas complejas encontrando pasajes de texto relevantes basados en similitudes semánticas.


Modelado de temas: descubra temas latentes en grandes colecciones de texto, útiles para la agrupación de documentos y el análisis de tendencias.


Visión por computador:


Recuperación de imágenes y videos: busque imágenes o videos similares basados en contenido visual, crucial para la recuperación de imágenes basada en contenido, búsqueda de productos y análisis de videos.


Detección y clasificación de objetos: mejore la precisión de los modelos de detección y clasificación de objetos recuperando de manera eficiente datos de entrenamiento similares.


Recomendación de video : recomienda videos similares según el contenido visual de videos vistos anteriormente.


Entre la gran cantidad de bases de datos vectoriales en el mercado, LanceDB es particularmente adecuado para la IA y el aprendizaje automático, porque admite consultas en almacenamiento compatible con S3. Tus datos están en todas partes, tu base de datos también debería estar en todas partes.

Arquitectura para el éxito

Usar MinIO con LanceDB ofrece varios beneficios, que incluyen:


  • Escalabilidad y rendimiento : El diseño nativo de la nube de MinIO está diseñado para almacenamiento y recuperación a escala y de alto rendimiento. Al aprovechar la escalabilidad y el rendimiento de MinIO, LanceDB puede manejar de manera eficiente grandes cantidades de datos, lo que lo hace ideal para cargas de trabajo de aprendizaje automático modernas.


  • Alta disponibilidad y tolerancia a fallos : MinIO es altamente disponible, inmutable y muy duradero. Esto garantiza que los datos almacenados en MinIO estén protegidos contra fallas de hardware y proporciona alta disponibilidad y tolerancia a fallas, que son cruciales para aplicaciones con uso intensivo de datos como LanceDB.


  • Replicación activo-activo : La replicación activo-activo en múltiples sitios permite la replicación casi sincrónica de datos entre múltiples implementaciones de MinIO. Este sólido proceso garantiza una alta durabilidad y redundancia, lo que lo hace ideal para proteger datos en entornos de producción de misión crítica.


La combinación de MinIO y LanceDB proporciona una solución nativa de la nube escalable de alto rendimiento para administrar y analizar conjuntos de datos de aprendizaje automático a gran escala.

Requisitos

Para seguir este tutorial, deberá utilizar Composición acoplable . Puede instalar los binarios de Docker Engine y Docker Compose por separado o juntos usando Docker Desktop. La opción más sencilla es instalar Docker Desktop.


Asegúrese de que Docker Compose esté instalado ejecutando el siguiente comando:


 docker compose version


También necesitarás instalar Python. Puedes descargar Python desde aquí . Durante la instalación, asegúrese de marcar la opción para agregar Python a la RUTA de su sistema.


Opcionalmente, puede optar por crear un entorno virtual. Es una buena práctica crear un entorno virtual para aislar las dependencias. Para hacerlo, abra una terminal y ejecute:


 python -m venv venv


Para activar el entorno virtual:


En Windows:

 .\venv\Scripts\activate


En macOS/Linux:

 source venv/bin/activate

Empezando

Comience clonando el proyecto desde aquí . Una vez hecho esto, navegue hasta la carpeta donde descargó los archivos en una ventana de terminal y ejecute:


 docker-compose up minio


Esto iniciará el contenedor MinIO. Puedes navegar hasta ' http://172.20.0.2:9001 ' para echar un vistazo a la consola MinIO.


Consola MinIO


Inicie sesión con el nombre de usuario y contraseña minioadmin:minioadmin .


A continuación, ejecute el siguiente comando para crear un depósito MinIO llamado lance .


 docker compose up mc 


Cubo MinIO


Este comando realiza una serie de Cliente MinIO (mc) comandos dentro de un shell.


Aquí hay un desglose de cada comando:


hasta que (/usr/bin/mc config host agregue minio http://minio:9000 minioadmin minioadmin) haga eco '...esperando...' && sleep 1; done ;: este comando intenta repetidamente configurar un host MinIO llamado minio con los parámetros especificados (punto final, clave de acceso y clave secreta) hasta que tiene éxito. Durante cada intento, repite un mensaje en espera y hace una pausa de 1 segundo.


/usr/bin/mc rm -r --force minio/lance;: este comando elimina (elimina) por la fuerza todo el contenido dentro del depósito lance en MinIO.


/usr/bin/mc mb minio/lance; : Este comando crea un nuevo depósito llamado lance en MinIO.


/usr/bin/mc conjunto de políticas public minio/lance; : Este comando establece la política del depósito lance en pública, permitiendo el acceso público de lectura.


salir 0; : Este comando garantiza que el script finalice con un código de estado de 0, lo que indica una ejecución exitosa.

LanzaDB

Desafortunadamente, LanceDB no tiene soporte nativo para S3 y, como resultado, tendrá que usar algo como boto3 para conectarse al contenedor MinIO que creó. A medida que LanceDB madure, esperamos contar con soporte nativo para S3 que hará que la experiencia del usuario sea mucho mejor.


El siguiente script de muestra le ayudará a empezar.


Instale los paquetes necesarios usando pip. Cree un archivo denominado requisitos.txt con el siguiente contenido:


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


Luego ejecute el siguiente comando para instalar los paquetes:


 pip install -r requirements.txt


Deberá cambiar sus credenciales si su método para crear el contenedor MinIO difiere del descrito anteriormente.


Guarde el siguiente script en un archivo, por ejemplo, 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()


Este script creará una tabla Lance a partir de datos generados aleatoriamente y la agregará a su depósito MinIO. Nuevamente, si no utiliza el método de la sección anterior para crear un depósito, deberá hacerlo antes de ejecutar el script. Recuerde cambiar el script de muestra anterior para que coincida con el nombre que le da a su depósito MinIO.


Finalmente, el script abre la tabla, sin sacarla de MinIO, y usa Pandas para realizar una búsqueda e imprimir los resultados.


El resultado del script debería ser similar al siguiente. Recuerde que los datos en sí se generan aleatoriamente cada vez.


 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


Expande por tu cuenta

Hay muchas formas de aprovechar esta base que se ofrece en este tutorial para crear arquitecturas de ML/AI eficaces, escalables y preparadas para el futuro. Tiene dos componentes básicos de código abierto y de vanguardia en su arsenal: el almacenamiento de objetos MinIO y la base de datos vectorial LanceDB. Considere este su boleto ganador para ML/AI. torneo .


No te detengas aquí. LanceDB ofrece una amplia gama de recetas y tutoriales para ampliar lo que ha creado en este tutorial, incluido un curso de Udacity recientemente anunciado sobre Creación de soluciones de IA generativa con bases de datos vectoriales . De particular interés es este receta para chatear con tus documentos. Todos estamos a favor de derribar barreras para aprovechar al máximo sus datos.


Muéstranos lo que estás construyendo y, si necesitas orientación en tu noble misión, no dudes en enviarnos un correo electrónico a [email protected] o únete a nuestra mesa redonda sobre Flojo .