[VectorDB] Milvus 정의

ITselfhiam
|2024. 8. 22. 21:09

안녕하세요? 이번에는 VectorDataBase의 유명한 MILVUS 데이터베이스를 설치하는 방법에 대해 작성해보겠습니다.

 

설치 이후 LangChain과 같이 RAG(검색 증강 생성)을 사용하는 모습도 나중에 작성하겠습니다.

 


Milvus란?

 

Milvus는 벡터 데이터베이스로, 대규모 벡터 데이터를 효율적으로 관리하고 검색할 수 있도록 설계된 오픈 소스 데이터베이스 시스템입니다. 

 

벡터 데이터는 고차원 특성을 가진 데이터 포인트로, 일반적으로 머신러닝과 딥러닝 모델의 출력

(예: 이미지, 텍스트, 오디오 등의 임베딩)으로 생성됩니다. 

 

Milvus는 이러한 벡터들을 빠르게 검색하고 유사성을 평가하는 데 최적화되어 있으며, 특히 AI 애플리케이션에서 널리 사용됩니다.

 

더군다나 라이센스가 상업적으로 사용가능하므로 제가 사용합니다 하핫!


 

내가 Milvus를 선택한 이유

 

제가 Milvus를 선택하는 주요 이유는 다음과 같습니다

  1. 고성능 벡터 검색
    Milvus는 대규모 벡터 데이터에 대해 고속 검색을 지원합니다.
    이를 통해 유사성 검색, 추천 시스템, 패턴 인식 등의 작업이 매우 효율적으로 이루어집니다.

  2. 확장성
    Milvus는 분산 시스템을 지원하며, 대규모 데이터와 트래픽을 처리할 수 있는 확장성을 제공합니다.
    이를 통해 데이터의 양과 검색 요청이 증가하더라도 성능을 유지할 수 있습니다.

  3. AI 친화적
    Milvus는 AI 애플리케이션을 위해 설계되어 있으며, 벡터 검색을 최적화하기 위한 다양한 인덱스 알고리즘과 최적화 기능을 제공합니다. 또한, 다른 AI 도구들과의 통합이 용이합니다.

  4. 오픈 소스 커뮤니티 지원
    Milvus는 활발한 오픈 소스 커뮤니티가 지원하는 프로젝트로, 다양한 튜토리얼, 문서, 지원 리소스가 제공됩니다.


Milvus의 장점

  1. 빠른 검색 성능
    고차원 벡터 데이터를 효율적으로 검색할 수 있는 다양한 인덱싱 기법(IVF_FLAT, HNSW 등)을 지원하여 매우 빠른 검색 성능을 제공합니다.
    => 다양한 인덱스 기법 https://milvus.io/docs/index-vector-fields.md?tab=floating
  2. 유연한 데이터 관리
    여러 인덱스 타입과 데이터 파티셔닝 기능을 통해 다양한 데이터 관리 및 검색 시나리오를 지원합니다.

  3. 확장성
    분산된 클러스터 환경에서 동작하도록 설계되어, 대규모 데이터와 트래픽을 처리할 수 있습니다.

  4. 통합 가능성
    다양한 AI 프레임워크(TensorFlow, PyTorch 등) 및 데이터 처리 도구와 쉽게 통합할 수 있습니다.
 

Index Vector Fields | Milvus Documentation

This guide walks you through the basic operations on creating and managing indexes on vector fields in a collection. | v2.4.x

milvus.io

 

Milvus의 단점

  1. 복잡성
    Milvus는 고성능과 확장성을 제공하는 만큼, 설정과 운영이 다소 복잡할 수 있습니다.
    특히, 분산 환경에서 클러스터를 구성하고 유지하는 데 높은 기술적 요구가 따릅니다.

  2. 특화된 사용 사례
    Milvus는 벡터 데이터에 특화되어 있어, 범용 데이터베이스로 사용하기에는 적합하지 않습니다.
    일반적인 관계형 데이터베이스 기능을 필요로 하는 경우에는 다른 솔루션이 더 적합할 수 있습니다.

  3. 학습 곡선
    Milvus의 다양한 기능을 효과적으로 사용하기 위해서는 학습이 필요하며,
    사용자가 벡터 데이터베이스와 인덱싱 기법에 대한 기본적인 이해가 있어야 합니다.

하지만 저의 블로그를 보신다면 문제없이 사용가능합니다^^


Milvus docker Container vs Milvus Docker-Compose

밀버스 공식 페이지에 접속을 하면 docker-standalone과 docker-compose 두개가 있습니다.

각 두개의 기능을 설명합니다.

 

Milvus docker Container

  1. 단일 컨테이너 실행
    Milvus를 컨테이너로 실행할 때는 Milvus의 단일 인스턴스(milvus-standalone)를 독립적으로 실행합니다.

  2. 간단한 설정
    단일 컨테이너로 Milvus를 실행할 때는 필요한 환경 변수를 설정하고, 필요한 볼륨을 마운트하며, 네트워크 설정을 직접 구성합니다.
    이 방법은 간단한 테스트나 개발 환경에서 Milvus를 빠르게 실행하고자 할 때 유용합니다.

  3. 제한된 기능
    단일 컨테이너로 Milvus를 실행하는 경우, etcd와 MinIO와 같은 추가적인 서비스를 수동으로 설정해야 하며, 이 과정이 복잡할 수 있습니다. 또한, 분산 환경을 구축하려면 추가적인 설정이 필요합니다.

Milvus docker Compose

  1. 다중 컨테이너 실행
    Docker Compose를 사용하면 Milvus와 함께 필요한 모든 관련 서비스를 한 번에 정의하고 실행할 수 있습니다.
    ex) milvus-standalone, milvus-etcd, milvus-minio 등을 한꺼번에 설정하고 실행할 수 있습니다.

  2. 편리한 설정 관리
    Docker Compose 파일(docker-compose.yaml)에 모든 서비스의 설정을 정의할 수 있습니다.
    이를 통해 네트워킹, 볼륨, 환경 변수 등을 쉽게 설정할 수 있으며, 필요한 모든 서비스가 자동으로 연결됩니다.

  3. 확장성과 관리 용이성
    Docker Compose를 사용하면 여러 서비스를 간단하게 확장하거나 중단할 수 있습니다. 
    또한, 여러 서비스 간의 종속성이나 네트워크 설정을 자동으로 관리해 주기 때문에, 복잡한 구성도 쉽게 관리할 수 있습니다.

  4. 통합된 스택
    Milvus를 운영할 때 필요한 모든 서비스(etcd, MinIO, Milvus 본체 등)를 한 번에 정의하고 실행할 수 있어, 전체 스택을 쉽게 재현하고 배포할 수 있습니다.

 

다음 글은 Milvus를 docker에 설치하는 방법으로 작성하겠습니다.

감사합니다.