🚀 Experimente o Zilliz Cloud, o Milvus totalmente gerenciado, gratuitamente—experimente um desempenho 10x mais rápido! Experimente Agora>>

milvus-logo
LFAI

HomeBlogsComo começar a utilizar o Milvus

Como começar a utilizar o Milvus

  • Engineering
January 17, 2025
Ruben Winastwan

How to get started with Milvus Como começar a utilizar o Milvus

Última atualização em janeiro de 2025

Os avanços nos Modelos de Linguagem de Grande Porte(LLMs) e o crescente volume de dados necessitam de uma infraestrutura flexível e escalável para armazenar grandes quantidades de informação, como uma base de dados. No entanto, as bases de dados tradicionais são concebidas para armazenar dados tabulares e estruturados, ao passo que a informação normalmente útil para tirar partido do poder dos LLM sofisticados e dos algoritmos de recuperação de informação é não estruturada, como texto, imagens, vídeos ou áudio.

As bases de dados vectoriais são sistemas de bases de dados especificamente concebidos para dados não estruturados. Não só podemos armazenar grandes quantidades de dados não estruturados com bases de dados vectoriais, como também podemos efetuar pesquisas vectoriais com elas. As bases de dados vectoriais têm métodos de indexação avançados, como o Inverted File Index (IVFFlat) ou o Hierarchical Navigable Small World(HNSW), para realizar pesquisas vectoriais e processos de recuperação de informação rápidos e eficientes.

O Milvus é uma base de dados vetorial de código aberto que podemos utilizar para tirar partido de todas as funcionalidades benéficas que uma base de dados vetorial pode oferecer. Eis o que vamos abordar nesta publicação:

O que é o Milvus?

O Milvus é uma base de dados vetorial de código aberto que nos permite armazenar grandes quantidades de dados não estruturados e efetuar pesquisas vectoriais rápidas e eficientes. O Milvus é muito útil para muitas aplicações populares de GenAI, tais como sistemas de recomendação, chatbots personalizados, deteção de anomalias, pesquisa de imagens, processamento de linguagem natural e geração aumentada de recuperação(RAG).

Existem várias vantagens que pode obter ao utilizar o Milvus como base de dados vetorial:

  • Milvus oferece várias opções de implantação que pode escolher em função do seu caso de utilização e da dimensão das aplicações que pretende criar.

  • O Milvus suporta uma gama diversificada de métodos de indexação para atender a várias necessidades de dados e desempenho, incluindo opções na memória como FLAT, IVFFlat, HNSW e SCANN, variantes quantizadas para eficiência de memória, o DiskANN no disco para grandes conjuntos de dados e índices otimizados para GPU, como GPU_CAGRA, GPU_IVF_FLAT e GPU_IVF_PQ para pesquisas aceleradas e eficientes em termos de memória.

  • O Milvus também oferece pesquisa híbrida, onde podemos usar uma combinação de embeddings densos, embeddings esparsos e filtragem de metadados durante as operações de pesquisa vetorial, levando a resultados de recuperação mais precisos. Além disso, o Milvus 2.5 suporta agora uma pesquisa híbrida de texto integral e pesquisa vetorial, tornando a sua pesquisa ainda mais precisa.

  • O Milvus pode ser totalmente utilizado na nuvem através do Zilliz Cloud, onde é possível otimizar os custos operacionais e a velocidade da pesquisa vetorial graças a quatro funcionalidades avançadas: clusters lógicos, desagregação de dados históricos e de streaming, armazenamento em camadas, escalonamento automático e separação multi-tenancy hot-cold.

Ao utilizar o Milvus como base de dados vetorial, pode escolher três opções de implementação diferentes, cada uma com os seus pontos fortes e vantagens. Falaremos sobre cada uma delas na próxima secção.

Opções de implementação do Milvus

Podemos escolher entre quatro opções de implementação para começar a utilizar o Milvus: Milvus Lite, Milvus Standalone, Milvus Distributed e Zilliz Cloud (Milvus gerido). Cada opção de implementação foi concebida para se adaptar a vários cenários do nosso caso de utilização, tais como a dimensão dos nossos dados, o objetivo da nossa aplicação e a escala da nossa aplicação.

Milvus Lite

O Milvus Lite é uma versão leve do Milvus e a maneira mais fácil de começarmos. Na próxima secção, veremos como podemos executar o Milvus Lite em ação, e tudo o que precisamos de fazer para começar é instalar a biblioteca Pymilvus com pip. Depois disso, podemos executar a maioria das funcionalidades principais do Milvus como um banco de dados vetorial.

O Milvus Lite é perfeito para prototipagem rápida ou fins de aprendizagem e pode ser executado num notebook Jupyter sem qualquer configuração complicada. Em termos de armazenamento de vectores, o Milvus Lite é adequado para armazenar cerca de um milhão de embeddings vectoriais. Devido à sua leveza e capacidade de armazenamento, o Milvus Lite é uma opção de implementação perfeita para trabalhar com dispositivos de ponta, como o motor de pesquisa de documentos privados, deteção de objectos no dispositivo, etc.

Milvus Standalone

O Milvus Standalone é uma implementação de servidor de máquina única embalada numa imagem Docker. Por conseguinte, tudo o que precisamos de fazer para começar é instalar o Milvus no Docker e, em seguida, iniciar o contentor Docker. Também veremos a implementação detalhada do Milvus Standalone na próxima secção.

O Milvus Standalone é ideal para a construção e produção de aplicações de pequena e média escala, pois é capaz de armazenar até 10M de embeddings vetoriais. Além disso, o Milvus Standalone oferece alta disponibilidade através de um modo de backup primário, tornando-o altamente fiável para utilização em aplicações prontas para produção.

Também podemos utilizar o Milvus Standalone, por exemplo, depois de realizar uma prototipagem rápida e aprender as funcionalidades do Milvus com o Milvus Lite, uma vez que tanto o Milvus Standalone como o Milvus Lite partilham a mesma API do lado do cliente.

Milvus Distribuído

O Milvus Distributed é uma opção de implementação que utiliza uma arquitetura baseada na nuvem, onde a ingestão e a recuperação de dados são tratadas separadamente, permitindo uma aplicação altamente escalável e eficiente.

Para executar o Milvus Distributed, normalmente é necessário utilizar um cluster Kubernetes para permitir que o contentor seja executado em várias máquinas e ambientes. A aplicação de um cluster Kubernetes garante a escalabilidade e a flexibilidade do Milvus Distributed na personalização dos recursos alocados, dependendo da procura e da carga de trabalho. Isto também significa que, se uma parte falhar, outras podem assumir o controlo, garantindo que todo o sistema permanece ininterrupto.

O Milvus Distributed é capaz de lidar com até dezenas de milhares de milhões de embeddings vectoriais e foi especialmente concebido para casos de utilização em que os dados são demasiado grandes para serem armazenados numa única máquina de servidor. Por conseguinte, esta opção de implementação é perfeita para clientes empresariais que servem uma grande base de utilizadores.

Figura: Capacidade de armazenamento de incorporação de vectores das diferentes opções de implementação do Milvus.

Neste artigo, vamos mostrar-lhe como começar a utilizar o Milvus Lite e o Milvus Standalone, uma vez que pode começar rapidamente com ambos os métodos sem uma configuração complicada. O Milvus Distributed, no entanto, é mais complicado de configurar. Uma vez configurado o Milvus Distributed, o código e o processo lógico para criar colecções, ingerir dados, efetuar pesquisas vectoriais, etc. são semelhantes aos do Milvus Lite e do Milvus Standalone, uma vez que partilham a mesma API do lado do cliente.

Para além das três opções de implementação acima mencionadas, pode também experimentar o Milvus gerido na Zilliz Cloud para uma experiência sem complicações. Também falaremos sobre o Zilliz Cloud mais adiante neste artigo.

Começar a utilizar o Milvus Lite

O Milvus Lite pode ser implementado diretamente com Python importando uma biblioteca chamada Pymilvus usando pip. Antes de instalar o Pymilvus, certifique-se de que seu ambiente atende aos seguintes requisitos:

  • Ubuntu >= 20.04 (x86_64 e arm64)

  • MacOS >= 11.0 (Apple Silicon M1/M2 e x86_64)

  • Python 3.7 ou posterior

Uma vez cumpridos estes requisitos, pode instalar o Milvus Lite e as dependências necessárias para demonstração utilizando o seguinte comando:

!pip install -U pymilvus
!pip install "pymilvus[model]"
  • !pip install -U pymilvus: Este comando instala ou actualiza a biblioteca pymilvus, o SDK Python do Milvus. O Milvus Lite é empacotado com o PyMilvus, então esta única linha de código é tudo que você precisa para instalar o Milvus Lite.

  • !pip install "pymilvus[model]": Este comando adiciona funcionalidades avançadas e ferramentas extra pré-integradas com o Milvus, incluindo modelos de aprendizagem automática como o Hugging Face Transformers, modelos de incorporação de IA Jina e modelos de reranking.

Aqui estão os passos que vamos seguir com o Milvus Lite:

  1. Transformar os dados de texto na sua representação de incorporação utilizando um modelo de incorporação.

  2. Criar um esquema na nossa base de dados Milvus para armazenar os nossos dados de texto e as suas representações de incorporação.

  3. Armazenar e indexar os nossos dados no nosso esquema.

  4. Efetuar uma pesquisa vetorial simples nos dados armazenados.

Figura: Fluxo de trabalho da operação de pesquisa vetorial.

Para transformar os dados de texto em representações vectoriais, vamos utilizar um modelo de representação de SentenceTransformers chamado 'all-MiniLM-L6-v2'. Este modelo de incorporação transforma o nosso texto numa incorporação vetorial de 384 dimensões. Vamos carregar o modelo, transformar os nossos dados de texto e juntar tudo.

from pymilvus import model

docs = [
    "Artificial intelligence was founded as an academic discipline in 1956.",
    "Alan Turing was the first person to conduct substantial research in AI.",
    "Born in Maida Vale, London, Turing was raised in southern England.",
]

sentence_transformer_ef = model.dense.SentenceTransformerEmbeddingFunction(
    model_name='all-MiniLM-L6-v2', 
    device='cpu' 
)

vectors  = sentence_transformer_ef.encode_documents(docs)
data = [ {"id": i, "vector": vectors[i], "text": docs[i]} for i in range(len(vectors)) ]

De seguida, vamos criar um esquema para armazenar todos os dados acima no Milvus. Como pode ver acima, os nossos dados consistem em três campos: ID, vetor e texto. Por isso, vamos criar um esquema com estes três campos.

from pymilvus import MilvusClient, DataType, db, connections

schema = MilvusClient.create_schema(
    auto_id=False,
    enable_dynamic_field=True,
)

# Add fields to schema
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=384)
schema.add_field(field_name="text", datatype=DataType.VARCHAR, max_length=512)

Com o Milvus Lite, podemos facilmente criar uma coleção numa determinada base de dados com base no esquema definido acima, bem como inserir e indexar os dados na coleção em apenas algumas linhas de código.

client = MilvusClient("./milvus_demo.db")

index_params = client.prepare_index_params()

#  Add indexes
index_params.add_index(
    field_name="vector", 
    index_type="AUTOINDEX",
    metric_type="COSINE"
)

# Create collection
client.create_collection(
    collection_name="demo_collection",
    schema=schema,
    index_params=index_params
)

# Insert data into collection
res = client.insert(
    collection_name="demo_collection",
    data=data
)

No código acima, criamos uma coleção chamada "demo_collection" dentro de uma base de dados Milvus chamada "milvus_demo". Em seguida, indexamos todos os nossos dados na "demo_collection" que acabámos de criar.

Agora que temos os nossos dados dentro da base de dados, podemos efetuar uma pesquisa vetorial sobre eles para qualquer consulta. Digamos que temos uma pergunta:"Quem é Alan Turing?". Podemos obter a resposta mais adequada para a consulta implementando os seguintes passos:

  1. Transformar a nossa consulta num vetor de incorporação utilizando o mesmo modelo de incorporação que utilizámos para transformar os nossos dados na base de dados em incorporação.

  2. Calcular a semelhança entre a incorporação da nossa consulta e a incorporação de cada entrada na base de dados, utilizando métricas como a semelhança cosseno ou a distância euclidiana.

  3. Obter a entrada mais semelhante como a resposta adequada à nossa consulta.

Abaixo está a implementação dos passos acima com o Milvus:

query = ["Who is Alan Turing"]
query_embedding = sentence_transformer_ef.encode_queries(query)

# Load collection
client.load_collection(
    collection_name="demo_collection"
)

# Vector search
res = client.search(
    collection_name="demo_collection",
    data=query_embedding,
    limit=1,
    output_fields=["text"],
)
print(res)
"""
Output:
data: ["[{'id': 1, 'distance': 0.7199002504348755, 'entity': {'text': 'Alan Turing was the first person to conduct substantial research in AI.'}}]"] 
"""

E é isso! Também pode saber mais sobre outras funcionalidades que o Milvus oferece, como a gestão de bases de dados, a inserção e eliminação de colecções, a escolha do método de indexação correto e a realização de pesquisas vectoriais mais avançadas com filtragem de metadados e pesquisa híbrida na documentação do Milvus.

Introdução ao Milvus Standalone

Milvus Standalone é uma opção de implantação em que tudo é embalado em um contêiner Docker. Portanto, precisamos instalar o Milvus no Docker e, em seguida, iniciar o contêiner do Docker para começar a usar o Milvus Standalone.

Antes de instalar o Milvus Standalone, certifique-se de que tanto o seu hardware como o seu software cumprem os requisitos descritos nesta página. Além disso, certifique-se de que instalou o Docker. Para instalar o Docker, consulte esta página.

Assim que o nosso sistema cumprir os requisitos e tivermos instalado o Docker, podemos prosseguir com a instalação do Milvus no Docker utilizando o seguinte comando:

# Download the installation script
$ curl -sfL <https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh> -o standalone_embed.sh

# Start the Docker container
$ bash standalone_embed.sh start

No código acima, também iniciamos o contentor Docker e, uma vez iniciado, obterá um resultado semelhante ao que se segue:

Figura: Mensagem após o arranque bem sucedido do contentor Docker.

Depois de executar o script de instalação "standalone_embed.sh" acima, um contentor Docker chamado "milvus" é iniciado na porta 19530. Portanto, podemos criar um novo banco de dados, bem como acessar todas as coisas relacionadas ao banco de dados Milvus, apontando para essa porta ao criar conexões.

Digamos que queremos criar uma base de dados chamada "milvus_demo", semelhante ao que fizemos no Milvus Lite acima. Podemos fazê-lo da seguinte forma:

conn = connections.connect(host="127.0.0.1", port=19530)
database = db.create_database("milvus_demo")

client = MilvusClient(
    uri="<http://localhost:19530>",
    token="root:Milvus",
    db_name="milvus_demo"
)

Em seguida, pode verificar se a base de dados recém-criada chamada "milvus_demo" existe realmente na sua instância Milvus, acedendo ao Milvus Web UI. Como o nome sugere, o Milvus Web UI é uma interface gráfica de utilizador fornecida pelo Milvus para observar as estatísticas e métricas dos componentes, verificar a lista e os detalhes das bases de dados, colecções e configurações. Pode aceder ao Milvus Web UI depois de ter iniciado o contentor Docker acima em http://127.0.0.1:9091/webui/.

Se aceder à ligação acima, verá uma página de destino como esta:

No separador "Collections" (Colecções), verá que a nossa base de dados "milvus_demo" foi criada com êxito. Como pode ver, também pode verificar outras coisas, como a lista de colecções, as configurações, as consultas que efectuou, etc., com esta interface Web.

Agora podemos executar tudo exatamente como vimos na secção Milvus Lite acima. Vamos criar uma coleção chamada "demo_collection" dentro da base de dados "milvus_demo" que consiste em três campos, os mesmos que tínhamos na secção Milvus Lite anteriormente. Depois, vamos inserir os nossos dados na coleção.

index_params = client.prepare_index_params()

#  Add indexes
index_params.add_index(
    field_name="vector", 
    index_type="AUTOINDEX",
    metric_type="COSINE"
)

# Create collection
client.create_collection(
    collection_name="demo_collection",
    schema=schema,
    index_params=index_params
)

# Insert data into collection
res = client.insert(
    collection_name="demo_collection",
    data=data
)

O código para executar uma operação de pesquisa vetorial também é o mesmo do Milvus Lite, como você pode ver no código abaixo:

query = ["Who is Alan Turing"]
query_embedding = sentence_transformer_ef.encode_queries(query)

# Load collection
client.load_collection(
    collection_name="demo_collection"
)

# Vector search
res = client.search(
    collection_name="demo_collection",
    data=query_embedding,
    limit=1,
    output_fields=["text"],
)
print(res)
"""
Output:
data: ["[{'id': 1, 'distance': 0.7199004292488098, 'entity': {'text': 'Alan Turing was the first person to conduct substantial research in AI.'}}]"] 
"""

Além de usar o Docker, também é possível usar o Milvus Standalone com o Docker Compose (para Linux) e o Docker Desktop (para Windows).

Quando já não estivermos a utilizar a nossa instância Milvus, podemos parar o Milvus Standalone com o seguinte comando:

$ bash standalone_embed.sh stop

Fully Managed Milvus (Milvus totalmente gerenciado)

Uma forma alternativa de começar a usar o Milvus é através de uma infraestrutura nativa baseada na nuvem no Zilliz Cloud, onde pode obter uma experiência sem complicações e 10x mais rápida.

O Zilliz Cloud oferece clusters dedicados com ambientes e recursos dedicados para suportar a sua aplicação de IA. Uma vez que se trata de uma base de dados baseada na nuvem construída em Milvus, não precisamos de configurar e gerir a infraestrutura local. O Zilliz Cloud também oferece funcionalidades mais avançadas, como a separação entre armazenamento vetorial e computação, cópia de segurança de dados para sistemas populares de armazenamento de objectos, como o S3, e armazenamento em cache de dados para acelerar as operações de pesquisa e recuperação de vectores.

No entanto, um aspeto a ter em conta quando se consideram os serviços baseados na nuvem é o custo operacional. Na maioria dos casos, ainda precisamos pagar mesmo quando o cluster está ocioso, sem nenhuma atividade de ingestão de dados ou pesquisa vetorial. Se quiser otimizar ainda mais o custo operacional e o desempenho da sua aplicação, o Zilliz Cloud Serverless seria uma excelente opção.

Figura: Principais benefícios da utilização do Zilliz Cloud Serverless.

O Zilliz Cloud Serverless está disponível nos principais provedores de nuvem, como AWS, Azure e GCP. Oferece funcionalidades como preços pay-as-you-go, o que significa que só paga quando utiliza o cluster.

O Zilliz Cloud Serverless também implementa tecnologias avançadas, como clusters lógicos, escalonamento automático, armazenamento em camadas, desagregação de dados históricos e de streaming e separação de dados hot-cold. Estas funcionalidades permitem que o Zilliz Cloud Serverless consiga uma poupança de custos até 50 vezes superior e operações de pesquisa vetorial aproximadamente 10 vezes mais rápidas em comparação com o Milvus na memória.

Figura: Ilustração do armazenamento em camadas e da separação de dados quente-frio.

Se quiser começar a utilizar o Zilliz Cloud Serverless, consulte esta página para obter mais informações.

Conclusão

O Milvus destaca-se como uma base de dados vetorial versátil e poderosa, concebida para responder aos desafios da gestão de dados não estruturados e da realização de operações de pesquisa vetorial rápidas e eficientes em aplicações modernas de IA. Com opções de implantação como Milvus Lite para prototipagem rápida, Milvus Standalone para aplicações de pequena a média escala e Milvus Distributed para escalabilidade de nível empresarial, oferece flexibilidade para corresponder ao tamanho e complexidade de qualquer projeto.

Além disso, o Zilliz Cloud Serverless estende as capacidades do Milvus para a nuvem e fornece um modelo económico de pagamento conforme o uso que elimina a necessidade de infraestrutura local. Com recursos avançados, como armazenamento em camadas e escalonamento automático, o Zilliz Cloud Serverless garante operações de pesquisa vetorial mais rápidas, otimizando os custos.

Like the article? Spread the word

Continue Lendo