paint-brush
LanceDB: seu corcel confiável no duelo contra a complexidade dos dadospor@minio
25,852 leituras
25,852 leituras

LanceDB: seu corcel confiável no duelo contra a complexidade dos dados

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

Muito longo; Para ler

Há muitas maneiras de desenvolver a base oferecida neste tutorial para criar arquiteturas de ML/AI de alto desempenho, escalonáveis e preparadas para o futuro usando MinIO e LanceDB.

People Mentioned

Mention Thumbnail
featured image - LanceDB: seu corcel confiável no duelo contra a complexidade dos dados
MinIO HackerNoon profile picture
0-item
1-item

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 PyTorch e TensorFlow . Mais legal ainda é a busca rápida de vizinhos do LanceDB, que permite a recuperação eficiente de vetores semelhantes usando algoritmos de vizinhos mais próximos aproximados. Tudo isso se combina para criar um banco de dados vetorial rápido, fácil de usar e tão leve que pode ser implantado em qualquer lugar.


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 que é Lance?

O Lança formato de arquivo é um formato de dados colunar otimizado para fluxos de trabalho e conjuntos de dados de ML. Ele foi projetado para ser fácil e rápido de versão, consulta e uso para treinamento e é adequado para vários tipos de dados, incluindo imagens, vídeos, nuvens de pontos 3D, áudio e dados tabulares. Além disso, suporta acesso aleatório de alto desempenho: comBenchmarks de relatórios do Lance 100 vezes mais rápido que o Parquet nas consultas. A velocidade do Lance é em parte o resultado de sua implementação no Rust e de seu design nativo da nuvem, que inclui recursos como controle de versão de cópia zero e operações vetoriais otimizadas.


Um de seus características principais é a capacidade de realizar pesquisa vetorial, permitindo que os usuários encontrem vizinhos mais próximos em menos de 1 milissegundo e combine consultas OLAP com pesquisa vetorial. Outras aplicações de produção para o formato lance incluem bancos de dados de vetores de baixa latência implantados na borda para aplicações de ML, armazenamento, recuperação e processamento em grande escala de dados multimodais em empresas de automóveis autônomos e pesquisa personalizada de vetores em escala superior a bilhões em e -empresas de comércio. Parte do apelo do formato de arquivo Lance é sua compatibilidade com ferramentas e plataformas populares como Pandas PatoDB , Polares e Pyarrow . Mesmo se você não usar o LanceDB, ainda poderá aproveitar o formato de arquivo Lance em sua pilha de dados.

Criado para IA e aprendizado de máquina

Bancos de dados vetoriais como LanceDB oferecem vantagens distintas para aplicações de IA e aprendizado de máquina, graças à sua eficiência armazenamento desacoplado e arquiteturas de computação e recuperação de representações vetoriais de dados de alta dimensão. Aqui estão alguns casos de uso importantes:


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.

Arquitetando para o Sucesso

Usar MinIO com LanceDB oferece vários benefícios, incluindo:


  • Escalabilidade e desempenho : O design nativo da nuvem do MinIO foi desenvolvido para escalabilidade e armazenamento e recuperação de alto desempenho. Ao aproveitar a escalabilidade e o desempenho do MinIO, o LanceDB pode lidar com eficiência com grandes quantidades de dados, tornando-o adequado para cargas de trabalho modernas de ML.


  • Alta disponibilidade e tolerância a falhas : MinIO é altamente disponível, imutável e altamente durável. Isso garante que os dados armazenados no MinIO estejam protegidos contra falhas de hardware e forneça alta disponibilidade e tolerância a falhas, que são cruciais para aplicações com uso intensivo de dados, como o LanceDB.


  • Replicação ativa-ativa : a replicação ativa-ativa em vários locais permite a replicação quase síncrona de dados entre várias implantações de MinIO. Esse processo robusto garante alta durabilidade e redundância, tornando-o ideal para proteger dados em ambientes de produção de missão crítica.


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.

Requisitos

Para acompanhar este tutorial, você precisará usar Composição do Docker . Você pode instalar os binários Docker Engine e Docker Compose separadamente ou em conjunto usando Docker Desktop. A opção mais simples é instalar o Docker Desktop.


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 aqui . Durante a instalação, certifique-se de marcar a opção de adicionar Python ao PATH do seu sistema.


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

Começando

Comece clonando o projeto de aqui . Feito isso, navegue até a pasta onde você baixou os arquivos em uma janela de terminal e execute:


 docker-compose up minio


Isso iniciará o contêiner MinIO. Você pode navegar até ' http://172.20.0.2:9001 ' para dar uma olhada no console do MinIO.


Console MinIO


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 


Balde MinIO


Este comando executa uma série de Cliente MinIO (mc) comandos dentro de um shell.


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.

LanceDB

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


Expanda por conta própria

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 torneio .


Não pare aqui. LanceDB oferece uma ampla gama de receitas e tutoriais para expandir o que você construiu neste tutorial, incluindo um curso Udacity anunciado recentemente sobre Construindo soluções generativas de IA com bancos de dados vetoriais . De particular interesse é esse receita para conversar com seus documentos. Somos todos a favor de quebrar barreiras para aproveitar ao máximo seus dados.


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 Folga .