Construído no Lance, um formato de dados colunares de código aberto, o LanceDB possui alguns recursos interessantes que o tornam atraente para IA/ML. Por exemplo, LanceDB suporta vetorização explícita e implícita com a capacidade de lidar com vários tipos de dados. LanceDB está integrado às principais estruturas de ML, como
LanceDB é capaz de consultar dados em armazenamento de objetos compatível com S3. Essa combinação é ideal para construir sistemas de recuperação e armazenamento de dados de ML de alto desempenho, escalonáveis e nativos da nuvem. MinIO traz à equação desempenho e flexibilidade incomparável em diversos hardwares, locais e ambientes de nuvem, tornando-o a escolha natural para tais implantações.
Após a conclusão deste tutorial, você estará preparado para usar LanceDB e MinIO para enfrentar qualquer desafio de dados.
O
Um de seus
Bancos de dados vetoriais como LanceDB oferecem vantagens distintas para aplicações de IA e aprendizado de máquina, graças à sua eficiência
Processamento de Linguagem Natural (PNL):
Pesquisa Semântica: Encontre documentos ou passagens semelhantes a uma consulta com base no significado, não apenas em palavras-chave. Isso potencializa respostas de chatbot, recomendações de conteúdo personalizadas e sistemas de recuperação de conhecimento.
Resposta a perguntas: entenda e responda perguntas complexas, encontrando passagens de texto relevantes com base na semelhança semântica.
Modelagem de tópicos: descubra tópicos latentes em grandes coleções de texto, úteis para agrupamento de documentos e análise de tendências.
Visão Computacional:
Recuperação de imagens e vídeos: pesquise imagens ou vídeos semelhantes com base em conteúdo visual, crucial para recuperação de imagens com base em conteúdo, pesquisa de produtos e análise de vídeo.
Detecção e classificação de objetos: melhore a precisão dos modelos de detecção e classificação de objetos recuperando com eficiência dados de treinamento semelhantes.
Recomendação de vídeo : recomende vídeos semelhantes com base no conteúdo visual de vídeos assistidos anteriormente.
Entre a infinidade de bancos de dados vetoriais no mercado, o LanceDB é particularmente adequado para IA e aprendizado de máquina, porque oferece suporte a consultas em armazenamento compatível com S3. Seus dados estão em todo lugar, seu banco de dados também deve estar em todo lugar.
Usar MinIO com LanceDB oferece vários benefícios, incluindo:
A combinação de MinIO e LanceDB fornece uma solução nativa da nuvem escalável e de alto desempenho para gerenciar e analisar conjuntos de dados de ML em grande escala.
Para acompanhar este tutorial, você precisará usar
Certifique-se de que o Docker Compose esteja instalado executando o seguinte comando:
docker compose version
Você também precisará instalar o Python. Você pode baixar Python em
Opcionalmente, você pode optar por criar um Ambiente Virtual. É uma boa prática criar um ambiente virtual para isolar dependências. Para fazer isso, abra um terminal e execute:
python -m venv venv
Para ativar o ambiente virtual:
No Windows:
.\venv\Scripts\activate
No macOS/Linux:
source venv/bin/activate
Comece clonando o projeto de
docker-compose up minio
Isso iniciará o contêiner MinIO. Você pode navegar até '
Faça login com o nome de usuário e senha minioadmin:minioadmin
.
Em seguida, execute o seguinte comando para criar um bucket MinIO chamado lance
.
docker compose up mc
Este comando executa uma série de
Aqui está uma análise de cada comando:
até (/usr/bin/mc config host add minio http://minio:9000 minioadmin minioadmin) do echo '...waiting...' && sleep 1; done ;: Este comando tenta repetidamente configurar um host MinIO chamado minio
com os parâmetros especificados (endpoint, chave de acesso e chave secreta) até obter sucesso. Durante cada tentativa, ele ecoa uma mensagem de espera e pausa por 1 segundo.
/usr/bin/mc rm -r --force minio/lance;: Este comando remove (exclui) à força todo o conteúdo do balde lance
no MinIO.
/usr/bin/mc mb minio/lance; : este comando cria um novo bucket chamado lance
no MinIO.
/usr/bin/mc conjunto de políticas public minio/lance; : este comando define a política do lance
bucket como pública, permitindo acesso público de leitura.
saída 0; : este comando garante que o script saia com um código de status 0, indicando uma execução bem-sucedida.
Infelizmente, o LanceDB não tem suporte nativo ao S3 e, como resultado, você terá que usar algo como boto3 para se conectar ao contêiner MinIO que você criou. À medida que o LanceDB amadurece, esperamos obter suporte nativo ao S3 que tornará a experiência do usuário ainda melhor.
O script de exemplo abaixo irá ajudá-lo a começar.
Instale os pacotes necessários usando pip. Crie um arquivo chamado requisitos.txt com o seguinte conteúdo:
lancedb~=0.4.1 boto3~=1.34.9 botocore~=1.34.9
Em seguida, execute o seguinte comando para instalar os pacotes:
pip install -r requirements.txt
Você precisará alterar suas credenciais se o método de criação do contêiner MinIO for diferente daquele descrito acima.
Salve o script abaixo em um arquivo, por exemplo, 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 criará uma tabela Lance a partir de dados gerados aleatoriamente e a adicionará ao seu bucket MinIO. Novamente, se você não usar o método da seção anterior para criar um bucket, precisará fazê-lo antes de executar o script. Lembre-se de alterar o script de amostra acima para corresponder ao nome do seu bucket MinIO.
Por fim, o script abre a tabela, sem tirá-la do MinIO, e usa o Pandas para fazer uma busca e imprimir os resultados.
O resultado do script deve ser semelhante ao abaixo. Lembre-se de que os próprios dados são gerados aleatoriamente a 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
Há muitas maneiras de desenvolver essa base oferecida neste tutorial para criar arquiteturas de ML/IA de alto desempenho, escalonáveis e preparadas para o futuro. Você tem dois blocos de construção de código aberto e de ponta em seu arsenal – armazenamento de objetos MinIO e banco de dados vetorial LanceDB – considere este o seu bilhete premiado para ML/AI
Não pare aqui. LanceDB oferece uma ampla gama de
Por favor, mostre-nos o que você está construindo e se precisar de orientação em sua nobre missão, não hesite em nos enviar um e-mail para [email protected] ou participe de nossa mesa redonda em