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
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.
El
uno de sus
Las bases de datos vectoriales como LanceDB ofrecen distintas ventajas para aplicaciones de inteligencia artificial y aprendizaje automático, gracias a su eficiente
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.
Usar MinIO con LanceDB ofrece varios beneficios, que incluyen:
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.
Para seguir este tutorial, deberá utilizar
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
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
Comience clonando el proyecto desde
docker-compose up minio
Esto iniciará el contenedor MinIO. Puedes navegar hasta '
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
Este comando realiza una serie de
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.
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
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.
No te detengas aquí. LanceDB ofrece una amplia gama de
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