Helm 차트를 사용하여 GPU를 지원하는 Milvus 실행하기

이 페이지에서는 Helm 차트를 사용하여 GPU를 지원하는 Milvus 인스턴스를 시작하는 방법을 설명합니다.

개요

Helm은 ‘차트(chart)’라고 하는 패키징 형식을 사용합니다. 차트는 관련 Kubernetes 리소스 세트를 설명하는 파일 모음입니다. Milvus는 Milvus 종속성 및 구성 요소를 배포하는 데 도움이 되는 일련의 차트를 제공합니다. Milvus Helm 차트는 Helm 패키지 관리자를 사용하여 Kubernetes(K8s) 클러스터에서 Milvus 배포를 부트스트랩하는 솔루션입니다.

필수 조건

이미지 가져오기 과정에서 문제가 발생하면, 문제 세부 정보를 기재하여 community@zilliz.com으로 문의해 주시면 필요한 지원을 제공해 드리겠습니다.

Milvus용 Helm 차트 설치

Helm은 Milvus를 신속하게 배포할 수 있도록 도와주는 K8s 패키지 관리자입니다.

  1. Milvus Helm 저장소를 추가하십시오.
$ helm repo add milvus https://zilliztech.github.io/milvus-helm/

https://milvus-io.github.io/milvus-helm/ 에 있는 Milvus Helm 차트 저장소는 아카이브 처리되었으며, https://zilliztech.github.io/milvus-helm/ 에서 다음과 같이 추가 업데이트를 받을 수 있습니다.

helm repo add zilliztech https://zilliztech.github.io/milvus-helm
helm repo update
# upgrade existing helm release
helm upgrade my-release zilliztech/milvus

아카이브된 저장소는 4.0.31 버전까지의 차트에 대해서는 여전히 사용할 수 있습니다. 그 이후 릴리스의 경우, 대신 새로운 저장소를 사용하십시오.

  1. 로컬에서 차트를 업데이트합니다.
$ helm repo update

Milvus 시작

Helm 차트를 설치한 후에는 Kubernetes에서 Milvus를 시작할 수 있습니다. 이 섹션에서는 GPU를 지원하는 Milvus를 시작하는 단계를 안내해 드립니다.

릴리스 이름, 차트, 변경할 매개변수를 지정하여 Helm을 통해 Milvus를 시작해야 합니다. 이 가이드에서는 릴리스 이름으로 my-release 를 사용합니다. 다른 릴리스 이름을 사용하려면 다음 명령어에서 my-release 를 사용 중인 릴리스 이름으로 대체하십시오.

Milvus에서는 하나 이상의 GPU 장치를 Milvus에 할당할 수 있습니다.

1. 단일 GPU 장치 할당

GPU를 지원하는 Milvus에서는 하나 이상의 GPU 장치를 할당할 수 있습니다.

  • Milvus 클러스터

    cat <<EOF > custom-values.yaml
    dataNode:
      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 독립형

    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 pulsarv3.enabled=false -f custom-values.yaml
    

2. 여러 GPU 장치 할당

단일 GPU 장치 외에도 Milvus에 여러 개의 GPU 장치를 할당할 수 있습니다.

  • Milvus 클러스터

    cat <<EOF > custom-values.yaml
    dataNode:
      resources:
        requests:
          nvidia.com/gpu: "2"
        limits:
          nvidia.com/gpu: "2"
    queryNode:
      resources:
        requests:
          nvidia.com/gpu: "2"
        limits:
          nvidia.com/gpu: "2"
    EOF
    

    위의 구성에서는 4개의 CPU를 사용할 수 있으며, 각 dataNode와 queryNode는 2개의 GPU를 사용합니다. dataNode와 queryNode에 서로 다른 GPU를 할당하려면, 구성 파일에서 다음과 같이 ` extraEnv `를 설정하여 구성을 수정할 수 있습니다.

    cat <<EOF > custom-values.yaml
    dataNode:
      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
    
    • 릴리스 이름에는 영문자, 숫자 및 대시만 포함되어야 합니다. 릴리스 이름에는 점(.)을 사용할 수 없습니다.
    • Helm을 사용하여 Milvus를 설치할 경우, 기본 명령줄은 클러스터 버전의 Milvus를 설치합니다. Milvus를 독립형으로 설치할 때는 추가 설정이 필요합니다.
    • Kubernetes의 사용 중단된 API 마이그레이션 가이드에 따르면, v1.25부터 PodDisruptionBudget의 policy/v1beta1 API 버전은 더 이상 제공되지 않습니다. 대신 policy/v1 API 버전을 사용하도록 매니페스트와 API 클라이언트를 마이그레이션할 것을 권장합니다.
      Kubernetes v1.25 이상에서 여전히 PodDisruptionBudget의 policy/v1beta1 API 버전을 사용하는 사용자를 위한 임시 해결책으로, 다음 명령어를 실행하여 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
    • 자세한 내용은 Milvus Helm 차트Helm 문서를 참조하십시오.
  • Milvus 독립형

    cat <<EOF > custom-values.yaml
    dataNode:
      resources:
        requests:
          nvidia.com/gpu: "2"
        limits:
          nvidia.com/gpu: "2"
    queryNode:
      resources:
        requests:
          nvidia.com/gpu: "2"
        limits:
          nvidia.com/gpu: "2"
    EOF
    

    위의 구성에서는 사용 가능한 CPU가 4개이며, 각 dataNode와 queryNode는 GPU 2개를 사용합니다. dataNode와 queryNode에 서로 다른 GPU를 할당하려면, 구성 파일에서 extraEnv를 다음과 같이 설정하여 구성을 수정할 수 있습니다:

    cat <<EOF > custom-values.yaml
    dataNode:
      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 pulsarv3.enabled=false -f custom-values.yaml
    

2. Milvus 상태 확인

다음 명령어를 실행하여 Milvus 상태를 확인하십시오:

$ kubectl get pods

Milvus가 시작되면 모든 포드에 대해 ‘ READY ’ 열에 ‘ 1/1 ’가 표시됩니다.

  • Milvus 클러스터

    NAME                                             READY  STATUS   RESTARTS  AGE
    my-release-etcd-0                                  1/1     Running     0             3m24s
    my-release-etcd-1                                  1/1     Running     0             3m24s
    my-release-etcd-2                                  1/1     Running     0             3m24s
    my-release-milvus-datanode-698dbf7d77-rjkkq        1/1     Running     0             3m24s
    my-release-milvus-mixcoord-856d666559-rpj8z        1/1     Running     0             3m24s
    my-release-milvus-proxy-7f7cf47689-pzltw           1/1     Running     0             3m24s
    my-release-milvus-querynode-7fb6d5b5f8-92phj       1/1     Running     0             3m24s
    my-release-milvus-streamingnode-5867bfbcbf-cg9xx   1/1     Running     0             3m24s
    my-release-minio-0                                 1/1     Running     0             3m24s
    my-release-minio-1                                 1/1     Running     0             3m24s
    my-release-minio-2                                 1/1     Running     0             3m24s
    my-release-minio-3                                 1/1     Running     0             3m24s
    my-release-pulsarv3-bookie-0                       1/1     Running     0             3m24s
    my-release-pulsarv3-bookie-1                       1/1     Running     0             3m24s
    my-release-pulsarv3-bookie-2                       1/1     Running     0             3m24s
    my-release-pulsarv3-bookie-init-p8hcq              0/1     Completed   0             3m24s
    my-release-pulsarv3-broker-0                       1/1     Running     0             3m24s
    my-release-pulsarv3-broker-1                       1/1     Running     0             3m24s
    my-release-pulsarv3-proxy-0                        1/1     Running     0             3m24s
    my-release-pulsarv3-proxy-1                        1/1     Running     0             3m24s
    my-release-pulsarv3-pulsar-init-8kjsj              0/1     Completed   0             3m24s
    my-release-pulsarv3-recovery-0                     1/1     Running     0             3m24s
    my-release-pulsarv3-zookeeper-0                    1/1     Running     0             3m24s
    my-release-pulsarv3-zookeeper-1                    1/1     Running     0             3m24s
    my-release-pulsarv3-zookeeper-2                    1/1     Running     0             3m24s
    
  • Milvus 독립형

    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. 로컬 포트를 Milvus로 포워딩

Milvus 서버가 어떤 로컬 포트를 수신 대기 중인지 확인하십시오. pod 이름을 실제 이름으로 대체하십시오.

$ kubectl get pod my-release-milvus-proxy-6bd7f5587-ds2xv --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530

그런 다음, 다음 명령어를 실행하여 로컬 포트를 Milvus가 서비스를 제공하는 포트로 포워딩합니다.

$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530

선택적으로, 위 명령어에서 27017:19530 대신 :19530 을 사용하면 kubectl 가 로컬 포트를 자동으로 할당해 주므로 포트 충돌을 직접 관리할 필요가 없습니다.

기본적으로 kubectl의 포트 포워딩은 localhost 에서만 수신 대기합니다. Milvus가 선택한 IP 주소 또는 모든 IP 주소에서 수신 대기하도록 하려면 address 플래그를 사용하십시오. 다음 명령어는 호스트 머신의 모든 IP 주소에서 포트 포워딩이 수신 대기하도록 설정합니다.

$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530

이제 포워딩된 포트를 사용하여 Milvus에 연결할 수 있습니다.

Milvus WebUI에 액세스하기

Milvus에는 브라우저를 통해 액세스할 수 있는 Milvus WebUI라는 내장 GUI 도구가 포함되어 있습니다. Milvus WebUI는 간단하고 직관적인 인터페이스를 통해 시스템 가시성을 향상시킵니다. Milvus WebUI를 사용하여 Milvus의 구성 요소 및 종속성에 대한 통계와 메트릭을 관찰하고, 데이터베이스 및 컬렉션 세부 정보를 확인하며, Milvus의 상세 구성 목록을 확인할 수 있습니다. Milvus WebUI에 대한 자세한 내용은 Milvus WebUI를 참조하십시오.

Milvus WebUI에 액세스하려면 프록시 포드를 로컬 포트로 포트 포워딩해야 합니다.

$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27018:9091
Forwarding from 0.0.0.0:27018 -> 9091

이제 http://localhost:27018 에서 Milvus Web UI에 접속할 수 있습니다.

Milvus 제거

다음 명령어를 실행하여 Milvus를 제거하십시오.

$ helm uninstall my-release

Storage V3는 기본적으로 비활성화되어 있습니다. Storage V3에 의존하는 기능을 사용하기 전에 활성화하십시오. 요구 사항 및 호환성 고려 사항에 대해서는 Storage V3를 참조하십시오.

다음 단계

Milvus를 설치한 후에는 다음을 수행할 수 있습니다.

Office Hours

밀버스 영업 시간

Milvus의 전문가인 질리즈의 프로덕션 배포에 대한 도움을 받으세요.

무료 1:1 세션 예약하기

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
피드백

이 페이지가 도움이 되었나요?