헬름 차트를 사용하여 GPU 지원으로 밀버스 실행하기
이 페이지는 헬름 차트를 사용하여 GPU를 지원하는 Milvus 인스턴스를 시작하는 방법을 설명한다.
개요
헬름은 차트라는 패키징 형식을 사용한다. 차트는 관련 쿠버네티스 리소스 집합을 설명하는 파일 모음이다. 밀버스는 밀버스 의존성과 컴포넌트를 배포하는 데 도움이 되는 차트 세트를 제공한다. Milvus 헬름 차트는 헬름 패키지 관리자를 사용하여 쿠버네티스(K8s) 클러스터에서 Milvus 배포를 부트스트랩하는 솔루션입니다.
전제 조건
스토리지클래스를 설치한다. 설치된 StorageClass는 아래와 같이 확인할 수 있다.
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGE standard (default) k8s.io/minikube-hostpath Delete Immediate false
설치하기 전에 하드웨어 및 소프트웨어 요구 사항을 확인한다.
이미지를 가져오는 데 문제가 발생하면 community@zilliz.com 으로 문의해 주시면 필요한 지원을 제공해 드리겠습니다.
Milvus용 헬름 차트 설치
헬름은 Milvus를 빠르게 배포할 수 있도록 도와주는 K8s 패키지 관리자입니다.
- 밀버스 헬름 리포지토리를 추가합니다.
$ helm repo add milvus https://zilliztech.github.io/milvus-helm/
https://milvus-io.github.io/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까지 차트에 계속 사용할 수 있습니다. 이후 릴리스에서는 대신 새 리포지토리를 사용하세요.
- 로컬에서 차트 업데이트
$ helm repo update
밀버스 시작
헬름 차트를 설치했으면, 쿠버네티스에서 밀버스를 시작할 수 있다. 이 섹션에서는 GPU 지원으로 Milvus를 시작하는 단계를 안내한다.
릴리스 이름, 차트 및 변경할 파라미터를 지정하여 헬름으로 Milvus를 시작해야 한다. 이 가이드에서는 릴리스 이름으로 my-release
을 사용한다. 다른 릴리스 이름을 사용하려면 다음 명령에서 my-release
를 사용 중인 릴리스 이름으로 바꾼다.
Milvus를 사용하면 하나 이상의 GPU 장치를 Milvus에 할당할 수 있습니다.
1. 단일 GPU 장치 할당
GPU를 지원하는 Milvus에서는 하나 이상의 GPU 장치를 할당할 수 있습니다.
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 독립형
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. 여러 GPU 장치 할당
단일 GPU 장치 외에도 여러 개의 GPU 장치를 Milvus에 할당할 수 있습니다.
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
위의 구성에서 indexNode와 queryNode는 두 개의 GPU를 공유합니다. 인덱스 노드와 쿼리 노드에 다른 GPU를 할당하려면 구성 파일에서
extraEnv
을 다음과 같이 설정하여 구성을 적절히 수정할 수 있습니다: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
- 릴리스 이름에는 문자, 숫자, 대시만 포함해야 합니다. 릴리즈 이름에는 점을 사용할 수 없습니다.
- 기본 명령줄은 헬름과 함께 밀버스를 설치하는 동안 클러스터 버전의 밀버스를 설치한다. Milvus를 독립형으로 설치할 때는 추가 설정이 필요하다.
- 쿠버네티스의 더 이상 사용되지 않는 API 마이그레이션 가이드에 따르면, v1.25부터 정책/v1beta1 버전의 파드디스럽션버짓 API 버전은 더 이상 제공되지 않는다. 대신 정책/v1 API 버전을 사용하도록 매니페스트와 API 클라이언트를 마이그레이션하는 것이 좋다.
쿠버네티스 v1.25 이상에서 여전히 파드디스럽션버짓의 정책/v1beta1 API 버전을 사용하는 사용자를 위한 해결 방법으로, 대신 다음 명령을 실행하여 밀버스를 설치할 수 있다:
.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 독립형
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
위의 구성에서 인덱스노드와 쿼리노드는 두 개의 GPU를 공유합니다. 인덱스 노드와 쿼리 노드에 다른 GPU를 할당하려면 다음과 같이 설정 파일에서 extraEnv를 설정하여 구성을 수정할 수 있습니다:
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. Milvus 상태 확인
다음 명령어를 실행하여 Milvus 상태를 확인합니다:
$ kubectl get pods
Milvus가 시작되면 READY
열에 모든 파드에 대해 1/1
이 표시됩니다.
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 독립형
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 서버가 수신 대기 중인 로컬 포트를 확인합니다. 포드 이름을 사용자 이름으로 바꿉니다.
$ 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
에서만 수신 대기한다. 밀버스가 선택한 또는 모든 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를 제거합니다.
$ helm uninstall my-release
다음 단계
Milvus를 설치했으면 다음을 수행할 수 있습니다:
빠른 시작을 확인하여 Milvus의 기능을 살펴봅니다.
Milvus의 기본 작동에 대해 알아보세요:
Milvu 클러스터를 클라우드에 배포하세요:
Milvus 데이터 백업을 위한 오픈 소스 도구인 Milvus Backup을 살펴보세요.
Milvus 디버깅 및 동적 구성 업데이트를 위한 오픈 소스 도구인 Birdwatcher를 살펴보세요.
직관적인 Milvus 관리를 위한 오픈 소스 GUI 도구인 Attu를 살펴보세요.