Introdução ao cluster Milvus e ao K8s
Introdução
O Milvus é uma base de dados vetorial distribuída que visa armazenar, indexar e gerir vectores de incorporação maciços. Sua capacidade de indexar e pesquisar com eficiência trilhões de vetores torna o Milvus uma opção para cargas de trabalho de IA e aprendizado de máquina.
O Kubernetes (K8s), por outro lado, se destaca no gerenciamento e dimensionamento de aplicativos em contêineres. Ele fornece recursos como dimensionamento automático, autocorreção e balanceamento de carga, que são cruciais para manter a alta disponibilidade e o desempenho em ambientes de produção.
Por que usá-los juntos?
O K8s pode escalar automaticamente os clusters Milvus com base na carga de trabalho. À medida que os seus dados crescem ou o número de consultas aumenta, o K8s pode ativar mais instâncias do Milvus para lidar com a carga, assegurando que as suas aplicações permanecem responsivas.
Uma das caraterísticas de destaque do K8s é o escalonamento horizontal, que facilita a expansão do seu cluster Milvus. À medida que o seu conjunto de dados cresce, o K8s acomoda sem esforço esse crescimento, tornando-o numa solução simples e eficiente.
Além disso, a capacidade de tratar consultas também é escalonada horizontalmente com o K8s. À medida que a carga de consulta aumenta, o K8s pode implantar mais instâncias do Milvus para lidar com o aumento das consultas de pesquisa de similaridade, garantindo respostas de baixa latência mesmo sob cargas pesadas.
Pré-requisitos e configuração do K8s
Pré-requisitos
Docker - Certifique-se de que o Docker esteja instalado no seu sistema.
Kubernetes - Tenha um cluster do Kubernetes pronto. Você pode usar
minikube
para desenvolvimento local ou o serviço Kubernetes de um provedor de nuvem para ambientes de produção.Helm - Instale o Helm, um gerenciador de pacotes para Kubernetes, para ajudá-lo a gerenciar aplicativos Kubernetes, você pode verificar nossa documentação para ver como fazer isso https://milvus.io/docs/install_cluster-helm.md
Kubectl - Instale
kubectl
, uma ferramenta de linha de comando para interagir com clusters Kubernetes, para implantar aplicativos, inspecionar e gerenciar recursos de cluster e visualizar logs.
Configurando o K8s
Depois de instalar tudo o que é necessário para executar um cluster K8s, e se tiver usado minikube
, inicie o seu cluster com:
minikube start
Verifique o status do seu cluster K8s com:
kubectl cluster-info
Implantação do Milvus no K8s
Para esta implementação, estamos a optar pelo Milvus em modo de cluster para aproveitar todas as suas capacidades distribuídas. Usaremos o Helm, para agilizar o processo de instalação.
1. Comando de instalação do Helm
helm install my-milvus milvus/milvus --set pulsar.enabled=false --set kafka.enabled=true
Este comando instala o Milvus no seu cluster K8s com o Kafka ativado e o Pulsar desativado. O Kafka serve como o sistema de mensagens dentro do Milvus, lidando com o fluxo de dados entre diferentes componentes. Desativar o Pulsar e ativar o Kafka adapta a implantação às nossas preferências e requisitos específicos de mensagens.
2. Encaminhamento de portas
Para aceder ao Milvus a partir da sua máquina local, crie um reencaminhamento de porta: kubectl port-forward svc/my-milvus 27017:19530
.
Este comando mapeia a porta 19530
do serviço Milvus svc/my-milvus
para a mesma porta na sua máquina local, permitindo-lhe ligar-se ao Milvus utilizando ferramentas locais. Se deixar a porta local não especificada (como em :19530
), o K8s irá alocar uma porta disponível, tornando-a dinâmica. Certifique-se de que anota a porta local atribuída se escolher este método.
3. Verificando a implantação:
kubectl get pods
NAME READY STATUS RESTARTS AGE
my-milvus-datacoord-595b996bd4-zprpd 1/1 Running 0 85m
my-milvus-datanode-d9d555785-47nkt 1/1 Running 0 85m
my-milvus-etcd-0 1/1 Running 0 84m
my-milvus-etcd-1 1/1 Running 0 85m
my-milvus-etcd-2 1/1 Running 0 85m
my-milvus-indexcoord-65bc68968c-6jg6q 1/1 Running 0 85m
my-milvus-indexnode-54586f55d-z9vx4 1/1 Running 0 85m
my-milvus-kafka-0 1/1 Running 0 85m
my-milvus-kafka-1 1/1 Running 0 85m
my-milvus-kafka-2 1/1 Running 0 85m
my-milvus-minio-0 1/1 Running 0 96m
my-milvus-minio-1 1/1 Running 0 96m
my-milvus-minio-2 1/1 Running 0 96m
my-milvus-minio-3 1/1 Running 0 96m
my-milvus-proxy-76bb7d497f-sqwvd 1/1 Running 0 85m
my-milvus-querycoord-6f4c7b7598-b6twj 1/1 Running 0 85m
my-milvus-querynode-677bdf485b-ktc6m 1/1 Running 0 85m
my-milvus-rootcoord-7498fddfd8-v5zw8 1/1 Running 0 85m
my-milvus-zookeeper-0 1/1 Running 0 85m
my-milvus-zookeeper-1 1/1 Running 0 85m
my-milvus-zookeeper-2 1/1 Running 0 85m
Deverá ver uma lista de pods semelhante à saída acima, todos no estado Running. Isto indica que o seu cluster Milvus está operacional. Especificamente, procure o 1/1 na coluna READY
, o que significa que cada pod está totalmente pronto e em execução. Se algum pod não estiver no estado Em execução, talvez seja necessário investigar mais para garantir uma implantação bem-sucedida.
Com o cluster do Milvus implantado e todos os componentes confirmados em execução, você está pronto para prosseguir com a ingestão e indexação de dados. Isso envolverá a conexão com a instância do Milvus, a criação de coleções e a inserção de vetores para pesquisa e recuperação.
Ingestão e indexação de dados
Para começar a ingerir e indexar dados em nosso cluster Milvus, usaremos o pymilvus SDK. Existem duas opções de instalação:
SDK básico:
pip install pymilvus
Para embeddings de rich text e modelos avançados:
pip install pymilvus[model]
Para inserir dados no nosso cluster, vamos utilizar pymilvus
, pode instalar o SDK apenas com pip install pymilvus
ou, se quiser extrair rich text embeddings, pode também utilizar PyMilvus Models
instalando pip install pymilvus[model]
.
Ligação e criação de uma coleção:
Primeiro, ligue-se à sua instância Milvus utilizando a porta que encaminhou anteriormente. Certifique-se de que o URI corresponde à porta local atribuída pelo K8s:
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://127.0.0.1:52070",
)
client.create_collection(collection_name="quick_setup", dimension=5)
O parâmetro dimension=5
define o tamanho do vetor para esta coleção, essencial para as capacidades de pesquisa vetorial.
Inserir dados
Eis como inserir um conjunto inicial de dados, em que cada vetor representa um item, e o campo de cor adiciona um atributo descritivo:
data=[
{"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
{"id": 1, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"},
{"id": 2, "vector": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], "color": "orange_6781"},
{"id": 3, "vector": [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], "color": "pink_9298"},
{"id": 4, "vector": [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], "color": "red_4794"},
{"id": 5, "vector": [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], "color": "yellow_4222"},
{"id": 6, "vector": [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], "color": "red_9392"},
{"id": 7, "vector": [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], "color": "grey_8510"},
{"id": 8, "vector": [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], "color": "white_9381"},
{"id": 9, "vector": [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], "color": "purple_4976"}
]
res = client.insert(
collection_name="quick_setup",
data=data
)
print(res)
O código fornecido pressupõe que tenha criado uma coleção da forma Configuração rápida. Como mostrado no código acima,
Os dados a inserir são organizados numa lista de dicionários, em que cada dicionário representa um registo de dados, designado por entidade.
Cada dicionário contém um campo não definido pelo esquema chamado cor.
Cada dicionário contém as chaves correspondentes aos campos pré-definidos e dinâmicos.
Inserir ainda mais dados
colors = ["green", "blue", "yellow", "red", "black", "white", "purple", "pink", "orange", "brown", "grey"]
data = [ {
"id": i,
"vector": [ random.uniform(-1, 1) for _ in range(5) ],
"color": f"{random.choice(colors)}_{str(random.randint(1000, 9999))}"
} for i in range(1000) ]
res = client.insert(
collection_name="quick_setup",
data=data[10:]
)
print(res)
Pesquisa de similaridade
Depois de preencher a coleção, pode efetuar uma pesquisa de semelhança para encontrar vectores próximos de um vetor de consulta. O valor da variável query_vectors é uma lista que contém uma sub-lista de floats. A sub-lista representa uma incorporação de vetor de 5 dimensões.
query_vectors = [
[0.041732933, 0.013779674, -0.027564144, -0.013061441, 0.009748648]
]
res = client.search(
collection_name="quick_setup", # target collection
data=query_vectors, # query vectors
limit=3, # number of returned entities
)
print(res)
Esta consulta procura os 3 principais vectores mais semelhantes ao nosso vetor de consulta, demonstrando as poderosas capacidades de pesquisa do Milvus.
Desinstalar o Milvus do K8s
Quando terminar este tutorial, sinta-se à vontade para desinstalar o Milvus do seu cluster K8s com:helm uninstall my-milvus
.
Esse comando removerá todos os componentes do Milvus implantados na versão my-milvus
, liberando recursos do cluster.
Conclusão
A implantação do Milvus em um cluster do Kubernetes mostra a escalabilidade e a flexibilidade dos bancos de dados vetoriais no tratamento de cargas de trabalho de IA e aprendizado de máquina. Por meio deste tutorial, você aprendeu os conceitos básicos de configuração do Milvus com o Helm, criando uma coleção e executando a ingestão de dados e pesquisas de similaridade.
A instalação do Milvus em um cluster do Kubernetes com o Helm deve ser simples. Para se aprofundar no dimensionamento de clusters do Milvus para conjuntos de dados maiores ou cargas de trabalho mais intensivas, nossa documentação oferece orientações detalhadas https://milvus.io/docs/scaleout.md
Sinta-se à vontade para conferir o código no Github, conferir o Milvus, experimentar diferentes configurações e casos de uso e compartilhar suas experiências com a comunidade juntando-se ao nosso Discord.
- Introdução
- Por que usá-los juntos?
- Pré-requisitos e configuração do K8s
- Ingestão e indexação de dados
- Pesquisa de similaridade
- Desinstalar o Milvus do K8s
- Conclusão
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word