Teste e Implemente Rapidamente Soluções de Pesquisa Vetorial com o Bootcamp Milvus 2.0
Com o lançamento do Milvus 2.0, a equipa renovou o bootcamp do Milvus. O novo e melhorado bootcamp oferece guias actualizados e exemplos de código mais fáceis de seguir para uma variedade de casos de utilização e implementações. Além disso, esta nova versão é actualizada para o Milvus 2.0, uma versão reimaginada do banco de dados vetorial mais avançado do mundo.
Teste de stress do seu sistema contra benchmarks de conjuntos de dados de 1M e 100M
O diretório de benchmark contém testes de benchmark de 1 milhão e 100 milhões de vetores que indicam como seu sistema reagirá a conjuntos de dados de tamanhos diferentes.
Explore e crie soluções populares de pesquisa de similaridade de vetores
O diretório de soluções inclui os casos de utilização de pesquisa por semelhança de vectores mais populares. Cada caso de uso contém uma solução de notebook e uma solução implantável no Docker. Os casos de uso incluem:
- Pesquisa de similaridade de imagens
- Pesquisa de similaridade de vídeo
- Pesquisa de similaridade de áudio
- Sistema de recomendação
- Pesquisa molecular
- Sistema de resposta a perguntas
Implementar rapidamente uma aplicação totalmente criada em qualquer sistema
As soluções de implementação rápida são soluções dockerizadas que permitem aos utilizadores implementar aplicações totalmente criadas 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 os notebooks.
Use notebooks específicos do cenário para implantar facilmente aplicativos pré-configurados
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 gerir ficheiros ou configurações. Cada caderno é também fácil de seguir e modificável, tornando-os ficheiros de base ideais para outros projectos.
Exemplo de bloco de notas de pesquisa de semelhança de imagens
A pesquisa de semelhança de imagens é uma das ideias centrais por detrás de muitas tecnologias diferentes, incluindo carros autónomos que reconhecem objectos. Este exemplo explica como construir facilmente programas de visão computacional com o Milvus.
Este bloco de notas gira em torno de três coisas:
- Servidor Milvus
- Servidor Redis (para armazenamento de metadados)
- Modelo Resnet-18 pré-treinado.
Passo 1: Descarregar os pacotes necessários
Comece por descarregar todos os pacotes necessários para este projeto. Este bloco de notas inclui uma tabela que lista os pacotes a utilizar.
pip install -r requirements.txt
Passo 2: Arranque do servidor
Depois de os pacotes estarem instalados, inicie os servidores e certifique-se de que ambos estão a funcionar corretamente. Certifique-se de seguir as instruções corretas para iniciar os servidores Milvus e Redis.
Passo 3: Descarregar dados do projeto
Por predefinição, este bloco de notas extrai um fragmento dos dados VOCImage para utilização como exemplo, mas qualquer diretório com imagens deve funcionar desde que siga a estrutura de ficheiros que pode ser vista no topo do bloco de notas.
! gdown "https://drive.google.com/u/1/uc?id=1jdudBiUu41kL-U5lhH3ari_WBRXyedWo&export=download"
! tar -xf 'VOCdevkit.zip'
! rm 'VOCdevkit.zip'
Passo 4: Ligar aos servidores
Neste exemplo, os servidores estão a funcionar nas portas predefinidas no localhost.
connections.connect(host="127.0.0.1", port=19537)
red = redis.Redis(host = '127.0.0.1', port=6379, db=0)
Passo 5: Criar uma coleção
Depois de iniciar os servidores, crie uma coleção no Milvus para armazenar todos os vectores. 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 métricas de similaridade diferentes.
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)
Passo 6: Construir um índice para a coleção
Uma vez criada a coleção, construa um índice para a mesma. Neste caso, é utilizado o índice IVF_SQ8. Este índice requer o parâmetro 'nlist', que indica ao Milvus quantos clusters devem ser criados em cada ficheiro de dados (segmento). Índices diferentes requerem parâmetros diferentes.
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
Após a construção do índice IVF_SQ8, configure a rede neural e o carregador de dados. O pytorch resnet-18 pré-treinado utilizado neste exemplo não tem a última camada, que comprime os vectores 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 de ser modificados para poderem pré-processar e agrupar as imagens, fornecendo também os caminhos dos ficheiros das imagens. Isto pode ser feito com um carregador de dados torchvision ligeiramente modificado. Para o pré-processamento, as imagens precisam de ser cortadas e normalizadas devido ao facto de o modelo resnet-18 ter sido treinado num 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
Passo 8: Inserir vectores na coleção
Com a configuração da coleção, as imagens podem ser processadas e carregadas na coleção criada. Primeiro, as imagens são extraídas pelo carregador de dados e executadas através do modelo resnet-18. Os embeddings vectoriais resultantes são depois inseridos no Milvus, que devolve um ID único para cada vetor. Os IDs dos vectores e os caminhos dos ficheiros de imagem 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 pesquisa de similaridade de vetor
Depois que todos os dados são inseridos no Milvus e no Redis, a pesquisa de similaridade de vetores pode ser realizada. Para este exemplo, três imagens selecionadas aleatoriamente são retiradas do servidor Redis para uma pesquisa de semelhança vetorial.
random_ids = [int(red.randomkey()) for x in range(3)]
search_images = [x.decode("utf-8") for x in red.mget(random_ids)]
Estas imagens passam primeiro pelo mesmo pré-processamento que é encontrado no Passo 7 e são depois passadas 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()
Em seguida, os embeddings vectoriais resultantes são utilizados para efetuar uma pesquisa. Primeiro, defina os parâmetros de pesquisa, incluindo o nome da coleção a pesquisar, nprobe (o número de clusters a pesquisar) e top_k (o número de vectores devolvidos). Neste exemplo, a pesquisa 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
Passo 10: Resultados da pesquisa de imagens
Os IDs dos vectores devolvidos pelas consultas são utilizados para encontrar as imagens correspondentes. O Matplotlib é então utilizado para apresentar os resultados da pesquisa de imagens.
pic1.png
pic2.png
pic3.png
Saiba como implementar o Milvus em diferentes ambientes
A secção de implementações do novo bootcamp contém toda a informação para utilizar o Milvus em diferentes ambientes e configurações. Inclui a implantação de Mishards, usando Kubernetes com Milvus, balanceamento de carga e muito mais. Cada ambiente tem um guia passo a passo detalhado que explica como fazer o Milvus funcionar nele.
Não seja um estranho
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word