Teste e implante rapidamente soluções de busca vetorial com o Bootcamp Milvus 2.0
Com o lançamento do Milvus 2.0, a equipe reformulou o bootcamp do Milvus. O novo e aprimorado bootcamp oferece guias atualizados e exemplos de código mais fáceis de seguir para uma variedade de casos de uso e implantações. Além disso, esta nova versão foi atualizada para o Milvus 2.0, uma versão reinventada do banco de dados vetorial mais avançado do mundo.
Teste seu sistema sob estresse com benchmarks de datasets de 1M e 100M
O diretório de benchmarks contém testes de benchmark vetorial com 1 milhão e 100 milhões que indicam como seu sistema reagirá a datasets de diferentes tamanhos.
Explore e crie soluções populares de busca por similaridade vetorial
O diretório de soluções inclui os casos de uso mais populares de busca por similaridade vetorial. Cada caso de uso contém uma solução em notebook e uma solução implantável com docker. Os casos de uso incluem:
- Busca por similaridade de imagens
- Busca por similaridade de vídeos
- Busca por similaridade de áudio
- Sistema de recomendação
- Busca molecular
- Sistema de resposta a perguntas
Implante rapidamente uma aplicação totalmente construída em qualquer sistema
As soluções de implantação rápida são soluções dockerizadas que permitem aos usuários implantar aplicações totalmente construídas em qualquer sistema. Essas soluções são ideais para demonstrações breves, mas exigem trabalho adicional para personalizar e entender em comparação com notebooks.
Use notebooks específicos por cenário para implantar facilmente aplicações pré-configuradas
Os notebooks contêm um exemplo simples de implantação do Milvus para resolver o problema em um determinado caso de uso. Cada um dos exemplos pode ser executado do início ao fim sem a necessidade de gerenciar arquivos ou configurações. Cada notebook também é fácil de seguir e modificável, tornando-os arquivos-base ideais para outros projetos.
Exemplo de notebook de busca por similaridade de imagens
A busca por similaridade de imagens é uma das ideias centrais por trás de muitas tecnologias diferentes, incluindo carros autônomos reconhecendo objetos. Este exemplo explica como criar facilmente programas de visão computacional com o Milvus.
Este exemplo abrange três coisas:
- Servidor Milvus
- Servidor Redis (para armazenamento de metadados)
- Modelo Resnet-18 pré-treinado.
Etapa 1: Baixe os pacotes necessários
Comece baixando todos os pacotes necessários para este projeto. Este notebook inclui uma tabela listando os pacotes a serem usados.
pip install -r requirements.txt
Etapa 2: Inicialização dos servidores
Depois que os pacotes estiverem instalados, inicie os servidores e certifique-se de que ambos estejam funcionando corretamente. Certifique-se de seguir as instruções corretas para iniciar os servidores Milvus e Redis.
Etapa 3: Baixe os dados do projeto
Por padrão, este notebook obtém um trecho dos dados VOCImage para uso como exemplo, mas qualquer diretório com imagens deve funcionar, desde que siga a estrutura de arquivos que pode ser vista no topo do notebook.
! gdown "https://drive.google.com/u/1/uc?id=1jdudBiUu41kL-U5lhH3ari_WBRXyedWo&export=download"
! tar -xf 'VOCdevkit.zip'
! rm 'VOCdevkit.zip'
Etapa 4: Conecte-se aos servidores
Neste exemplo, os servidores estão sendo executados nas portas padrão no localhost.
connections.connect(host="127.0.0.1", port=19537)
red = redis.Redis(host = '127.0.0.1', port=6379, db=0)
Etapa 5: Criar uma coleção
Depois de iniciar os servidores, crie uma coleção no Milvus para armazenar todos os vetores. Neste exemplo, o tamanho da dimensão é definido como 512, o tamanho da saída do resnet-18, e a métrica de similaridade é definida como a distância Euclidiana (L2). O Milvus suporta uma variedade de diferentes métricas de similaridade.
collection_name = "image_similarity_search"
dim = 512
default_fields = [
schema.FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
schema.FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=dim)
]
default_schema = schema.CollectionSchema(fields=default_fields, description="Image test collection")
collection = Collection(name=collection_name, schema=default_schema)
Etapa 6: Criar um índice para a coleção
Depois que a coleção for criada, crie um índice para ela. Neste caso, o índice IVF_SQ8 é usado. Este índice requer o parâmetro 'nlist', que informa ao Milvus quantos clusters criar dentro de cada datafile (segmento). Diferentes índices requerem diferentes parâmetros.
default_index = {"index_type": "IVF_SQ8", "params": {"nlist": 2048}, "metric_type": "L2"}
collection.create_index(field_name="vector", index_params=default_index)
collection.load()
Etapa 7: Configurar o modelo e o carregador de dados
Depois que o índice IVF_SQ8 for criado, configure a rede neural e o carregador de dados. O resnet-18 pretrained do pytorch usado neste exemplo está sem sua última camada, que comprime vetores para classificação e pode perder informações valiosas.
model = torch.hub.load('pytorch/vision:v0.9.0', 'resnet18', pretrained=True)
encoder = torch.nn.Sequential(*(list(model.children())[:-1]))
O conjunto de dados e o carregador de dados precisam ser modificados para que sejam capazes de pré-processar e agrupar as imagens em lotes, além de fornecer os caminhos de arquivo das imagens. Isso pode ser feito com um dataloader torchvision ligeiramente modificado. Para o pré-processamento, as imagens precisam ser cortadas e normalizadas devido ao modelo resnet-18 ter sido treinado em um tamanho e intervalo de valores específicos.
dataset = ImageFolderWithPaths(data_dir, transform=transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])]))
dataloader = torch.utils.data.DataLoader(dataset, num_workers=0, batch_si
Etapa 8: Inserir vetores na coleção
Com a coleção configurada, as imagens podem ser processadas e carregadas na coleção criada. Primeiro, as imagens são obtidas pelo dataloader e executadas pelo modelo resnet-18. Os embeddings vetoriais resultantes são então inseridos no Milvus, que retorna um ID exclusivo para cada vetor. Os IDs dos vetores e os caminhos de arquivo das imagens são então inseridos como pares chave-valor no servidor Redis.
steps = len(dataloader)
step = 0
for inputs, labels, paths in dataloader:
with torch.no_grad():
output = encoder(inputs).squeeze()
output = output.numpy()
mr = collection.insert([output.tolist()])
ids = mr.primary_keys
for x in range(len(ids)):
red.set(str(ids[x]), paths[x])
if step%5 == 0:
print("Insert Step: " + str(step) + "/" + str(steps))
step += 1
Etapa 9: Realizar uma busca por similaridade vetorial
Depois que todos os dados forem inseridos no Milvus e no Redis, a busca por similaridade vetorial propriamente dita pode ser realizada. Para este exemplo, três imagens selecionadas aleatoriamente são extraídas do servidor Redis para uma busca por similaridade vetorial.
random_ids = [int(red.randomkey()) for x in range(3)]
search_images = [x.decode("utf-8") for x in red.mget(random_ids)]
Essas imagens passam primeiro pelo mesmo pré-processamento encontrado na Etapa 7 e são então enviadas pelo modelo resnet-18.
transform_ops = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])
embeddings = [transform_ops(Image.open(x)) for x in search_images]
embeddings = torch.stack(embeddings, dim=0)
with torch.no_grad():
embeddings = encoder(embeddings).squeeze().numpy()
Então os embeddings vetoriais resultantes são usados para realizar uma busca. Primeiro, defina os parâmetros de busca, incluindo o nome da coleção a ser pesquisada, nprobe (o número de clusters a pesquisar) e top_k (o número de vetores retornados). Neste exemplo, a busca deve ser muito rápida.
search_params = {"metric_type": "L2", "params": {"nprobe": 32}}
start = time.time()
results = collection.search(embeddings, "vector", param=search_params, limit=3, expr=None)
end = time.time() - start
Etapa 10: Resultados da busca de imagens
Os IDs vetoriais retornados das consultas são usados para encontrar as imagens correspondentes. O Matplotlib é então usado para exibir os resultados da busca de imagens.
Figura 1.
Figura 2.
Figura 3.
Saiba como implantar o Milvus em diferentes ambientes
A seção de deployments do novo bootcamp contém todas as informações para usar o Milvus em diferentes ambientes e configurações. Ela inclui a implantação do Mishards, o uso do Kubernetes com o Milvus, balanceamento de carga e muito mais. Cada ambiente tem um guia detalhado passo a passo explicando como fazer o Milvus funcionar nele.
Não seja estranho
- Leia nosso nosso blog.
- Interaja com nossa comunidade open-source no Slack.
- Use ou contribua para o Milvus, o banco de dados vetorial mais popular do mundo, no GitHub.
Continue lendo

What Exactly Are AI Agents? Why OpenAI and LangChain Are Fighting Over Their Definition?
AI agents are software programs powered by AI that can perceive their environment, make decisions, and take actions to achieve a goal—often autonomously.

Demystifying the Milvus Sizing Tool
Explore how to use the Sizing Tool to select the optimal configuration for your Milvus deployment.

Balancing Precision and Performance: How Zilliz Cloud's New Parameters Help You Optimize Vector Search
Optimize vector search with Zilliz Cloud’s level and recall features to tune accuracy, balance performance, and power AI applications.



