Executar o Milvus com suporte a GPU usando o Helm Chart
Esta página ilustra como iniciar uma instância do Milvus com suporte a GPU usando o Helm Chart.
Visão geral
O Helm usa um formato de empacotamento chamado gráficos. Um gráfico é uma coleção de arquivos que descrevem um conjunto relacionado de recursos do Kubernetes. O Milvus fornece um conjunto de gráficos para ajudá-lo a implantar dependências e componentes do Milvus. O Milvus Helm Chart é uma solução que inicializa a implantação do Milvus em um cluster do Kubernetes (K8s) usando o gerenciador de pacotes Helm.
Pré-requisitos
Instalar uma StorageClass. Você pode verificar a StorageClass instalada da seguinte maneira.
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGE standard (default) k8s.io/minikube-hostpath Delete Immediate false
Verifique os requisitos de hardware e software antes da instalação.
Se encontrar algum problema ao puxar a imagem, contacte-nos em community@zilliz.com com detalhes sobre o problema, e forneceremos o suporte necessário.
Instalar o Helm Chart para Milvus
O Helm é um gestor de pacotes K8s que pode ajudá-lo a implementar o Milvus rapidamente.
- Adicione o repositório do Milvus Helm.
$ helm repo add milvus https://zilliztech.github.io/milvus-helm/
O repositório de gráficos do Milvus Helm em https://milvus-io.github.io/milvus-helm/
foi arquivado e pode obter mais actualizações em https://zilliztech.github.io/milvus-helm/
da seguinte forma:
helm repo add zilliztech https://zilliztech.github.io/milvus-helm
helm repo update
# upgrade existing helm release
helm upgrade my-release zilliztech/milvus
O repositório arquivado ainda está disponível para os gráficos até à versão 4.0.31. Para versões posteriores, utilize o novo repositório.
- Atualizar os gráficos localmente.
$ helm repo update
Iniciar o Milvus
Depois de instalar o Helm chart, você pode iniciar o Milvus no Kubernetes. Nesta secção, vamos guiá-lo através dos passos para iniciar o Milvus com suporte para GPU.
Você deve iniciar o Milvus com o Helm especificando o nome da versão, o gráfico e os parâmetros que você espera alterar. Neste guia, usamos my-release
como o nome da versão. Para utilizar um nome de versão diferente, substitua my-release
nos seguintes comandos pelo nome que está a utilizar.
O Milvus permite-lhe atribuir um ou mais dispositivos GPU ao Milvus.
1. Atribuir um único dispositivo GPU
O Milvus com suporte para GPU permite-lhe atribuir um ou mais dispositivos GPU.
Grupo Milvus
cat <<EOF > custom-values.yaml indexNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" queryNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" EOF
$ helm install my-release milvus/milvus -f custom-values.yaml
Milvus autónomo
cat <<EOF > custom-values.yaml standalone: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" EOF
$ helm install my-release milvus/milvus --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsar.enabled=false -f custom-values.yaml
2. Atribuir vários dispositivos GPU
Para além de um único dispositivo GPU, também é possível atribuir vários dispositivos GPU ao Milvus.
Agregado de Milvus
cat <<EOF > custom-values.yaml indexNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" queryNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" EOF
Na configuração acima, o indexNode e o queryNode partilham duas GPUs. Para atribuir GPUs diferentes ao indexNode e ao queryNode, pode modificar a configuração em conformidade, definindo
extraEnv
no ficheiro de configuração da seguinte forma:cat <<EOF > custom-values.yaml indexNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" extraEnv: - name: CUDA_VISIBLE_DEVICES value: "0" queryNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" extraEnv: - name: CUDA_VISIBLE_DEVICES value: "1" EOF
$ helm install my-release milvus/milvus -f custom-values.yaml
- O nome da versão deve conter apenas letras, números e traços. Os pontos não são permitidos no nome da versão.
- A linha de comando predefinida instala a versão de cluster do Milvus durante a instalação do Milvus com o Helm. São necessárias outras definições durante a instalação do Milvus autónomo.
- De acordo com o guia de migração de APIs obsoletas do Kuberenetes, a versão da API policy/v1beta1 do PodDisruptionBudget não é mais servida a partir da v1.25. Sugere-se que migre manifestos e clientes API para usar a versão API policy/v1.
Como solução alternativa para os utilizadores que ainda usam a versão da API policy/v1beta1 do PodDisruptionBudget no Kuberenetes v1.25 e posterior, pode executar o seguinte comando para instalar o Milvus:
helm install my-release milvus/milvus --set pulsar.bookkeeper.pdb.usePolicy=false,pulsar.broker.pdb.usePolicy=false,pulsar.proxy.pdb.usePolicy=false,pulsar.zookeeper.pdb.usePolicy=false
- Consulte Milvus Helm Chart e Helm para obter mais informações.
Milvus autónomo
cat <<EOF > custom-values.yaml indexNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" queryNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" EOF
Na configuração acima, o indexNode e o queryNode compartilham duas GPUs. Para atribuir GPUs diferentes ao indexNode e ao queryNode, pode modificar a configuração em conformidade, definindo extraEnv no ficheiro de configuração da seguinte forma:
cat <<EOF > custom-values.yaml indexNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" extraEnv: - name: CUDA_VISIBLE_DEVICES value: "0" queryNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" extraEnv: - name: CUDA_VISIBLE_DEVICES value: "1" EOF
$ helm install my-release milvus/milvus --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsar.enabled=false -f custom-values.yaml
2. Verificar o status do Milvus
Execute o seguinte comando para verificar o status do Milvus:
$ kubectl get pods
Após o início do Milvus, a coluna READY
exibe 1/1
para todos os pods.
Cluster do Milvus
NAME READY STATUS RESTARTS AGE my-release-etcd-0 1/1 Running 0 3m23s my-release-etcd-1 1/1 Running 0 3m23s my-release-etcd-2 1/1 Running 0 3m23s my-release-milvus-datacoord-6fd4bd885c-gkzwx 1/1 Running 0 3m23s my-release-milvus-datanode-68cb87dcbd-4khpm 1/1 Running 0 3m23s my-release-milvus-indexcoord-5bfcf6bdd8-nmh5l 1/1 Running 0 3m23s my-release-milvus-indexnode-5c5f7b5bd9-l8hjg 1/1 Running 0 3m24s my-release-milvus-proxy-6bd7f5587-ds2xv 1/1 Running 0 3m24s my-release-milvus-querycoord-579cd79455-xht5n 1/1 Running 0 3m24s my-release-milvus-querynode-5cd8fff495-k6gtg 1/1 Running 0 3m24s my-release-milvus-rootcoord-7fb9488465-dmbbj 1/1 Running 0 3m23s my-release-minio-0 1/1 Running 0 3m23s my-release-minio-1 1/1 Running 0 3m23s my-release-minio-2 1/1 Running 0 3m23s my-release-minio-3 1/1 Running 0 3m23s my-release-pulsar-autorecovery-86f5dbdf77-lchpc 1/1 Running 0 3m24s my-release-pulsar-bookkeeper-0 1/1 Running 0 3m23s my-release-pulsar-bookkeeper-1 1/1 Running 0 98s my-release-pulsar-broker-556ff89d4c-2m29m 1/1 Running 0 3m23s my-release-pulsar-proxy-6fbd75db75-nhg4v 1/1 Running 0 3m23s my-release-pulsar-zookeeper-0 1/1 Running 0 3m23s my-release-pulsar-zookeeper-metadata-98zbr 0/1 Completed 0 3m24s
Milvus autônomo
NAME READY STATUS RESTARTS AGE my-release-etcd-0 1/1 Running 0 30s my-release-milvus-standalone-54c4f88cb9-f84pf 1/1 Running 0 30s my-release-minio-5564fbbddc-mz7f5 1/1 Running 0 30s
3. Encaminhar uma porta local para o Milvus
Verifique em qual porta local o servidor Milvus está escutando. Substitua o nome do pod pelo seu próprio nome.
$ kubectl get pod my-release-milvus-proxy-6bd7f5587-ds2xv --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530
Em seguida, execute o seguinte comando para encaminhar uma porta local para a porta em que o Milvus serve.
$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530
Opcionalmente, pode utilizar :19530
em vez de 27017:19530
no comando acima para permitir que kubectl
atribua uma porta local para si, para que não tenha de gerir conflitos de portas.
Por predefinição, o encaminhamento de portas do kubectl apenas escuta em localhost
. Use a flag address
se quiser que o Milvus escute nos endereços IP selecionados ou em todos. O comando a seguir faz com que o encaminhamento de porta escute em todos os endereços IP na máquina host.
$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530
Desinstalar o Milvus
Execute o seguinte comando para desinstalar o Milvus.
$ helm uninstall my-release
O que se segue
Depois de instalar o Milvus, você pode:
Verificar o Quickstart para ver o que o Milvus pode fazer.
Aprender as operações básicas do Milvus:
Implantar seu cluster Milvu em nuvens:
Explore o Milvus Backup, uma ferramenta de código aberto para backups de dados do Milvus.
Explore o Birdwatcher, uma ferramenta de código aberto para depuração do Milvus e actualizações dinâmicas de configuração.
Explore o Attu, uma ferramenta GUI de código aberto para gerenciamento intuitivo do Milvus.