Milvus

Milvus

  • 고성능, 고 확장성을 가진 벡터 데이터베이스
  • Zilliz에서 개발해 Linux 재단 산하 LF AI & Data Foundation에 기증됨
  • 오픈 소스 소프트웨어와 클라우드 서비스(Zilliz Cloud) 형태로 제공됨
  • Apache2.0 라이선스
  • 특히 대규모 벡터 데이터를 저장하고, 이러한 벡터 간의 유사성을 빠르게 검색하는 데 특화
  • 최근 생성형 AI 애플리케이션, 특히 RAG 시스템의 핵심 구성 요소로 각광

배포 모드

Milvus Lite

  • Python 라이브러리로
  • Jupyter Notebook에서의 빠른 프로토타이핑이나 리소스가 제한된 엣지 디바이스에 적합

Milvus Standalone

  • 단일 머신 서버 배포
  • 모든 구성 요소가 단일 Docker 이미지로 번들되어 배포가 편리

Milvus Distributed

  • 클라우드 네이티브 아키텍처
  • K8s 클러스터에 배포 가능
  • 핵심 구성 요소에 이중화가 보장됨

Milvus의 주요 특징

(1) 벡터 데이터베이스

  • Milvus의 가장 핵심적인 기능은 벡터 데이터를 전문적으로 다룬다는 것
  • 이미지, 비디오, 오디오, 텍스트와 같은 비정형 데이터를 AI 모델(예: 임베딩 모델)을 통해 수치화된 벡터(임베딩)로 (고차원 벡터)로 변환되는데
  • Milvus는 이러한 고차원 벡터를 효율적으로 저장하고 관리합니다.
  • 벡터 간의 유사성(거리)을 계산하여 가장 유사한 벡터를 빠르게 찾아내는 유사성 검색(Similarity Search) 기능을 제공.

(2) 확장성 (Scalability)

  • 완전히 분산된 클라우드 네이티브 아키텍처
  • 수십억 개의 벡터까지 탄력적으로 확장할 수 있음
  • 스토리지와 컴퓨팅 리소스를 분리하여 각 계층을 독립적으로 확장할 수 있음.
  • 아래와 같은 다양한 배포 모드가 있어, 사용 사례의 규모에 맞춰 유연하게 선택 가능.
  • Milvus Lite : 로컬 프로토타이핑용
  • Milvus Standalone : 단일 노드
  • Milvus Distributed : 클러스터

(3) 고성능 (High Performance)

  • 대규모 벡터 데이터셋에 대한 유사성 검색을 빠르고 정확하게 수행하도록 설계됨
  • FLAT, IVF_FLAT, IVF_SQ8, IVF_PQ, HNSW, SCANN 등 다양한 인덱스 유형을 지원
  • 따라서 데이터셋의 특성과 검색 요구 사항에 최적화된 성능을 낼 수 있습니다.
  • 아래와 같은 다양한 유사성 측정 지표(Distance Metric) 지원
  • 코사인 유사도(Cosine Similarity), 유클리드 거리(Euclidean Distance, L2), 내적(Inner Product, IP) 등
  • 따라서 임베딩 모델의 특성에 맞는 선택이 가능.
  • 단순한 벡터 유사성 검색뿐만 아니라, 벡터 검색과 함께 메타데이터 필터링을 지원.
  • 예를 들어, “최근 1년 이내에 출판된 경제 관련 문서 중 ‘인플레이션’과 가장 유사한 문서 검색”과 같이 구조화된 데이터 필터링과 비정형 데이터 검색을 결합할 수 있음
  • 최근에는 Dense 벡터(임베딩) 검색과 Sparse 벡터(BM25와 같은 키워드 기반 검색)를 결합한 하이브리드 검색 기능도 강화되고 있음.

(5) 개발자 친화적

  • Python, Java, Go, C#, Node.js 등 다양한 언어를 위한 SDK와 RESTful API를 제공.
  • PyMilvus (pymilvus) 라이브러리를 통해 파이썬 환경에서 간편하게 Milvus를 제어할 수 있음
  • 특히 pymilvus[model] 설치 시 Gemini와 같은 인기 있는 임베딩 모델과의 통합을 위한 기능을 제공.

고성능

  • 여타 벡터 데이터베이스보다 2~5배 더 뛰어난 성능 (VectorDBBench)
  • 하드웨어 최적화 : AVX512, SIMD, GPU, NVMe SSD 등 여러 하드웨어 아키텍처와 플랫폼에 맞게 최적화
  • 고급 검색 알고리즘 : IVF, HNSW, DiskANN 등 다양한 인덱싱/검색 알고리즘 지원, 최적화
  • C++ 기반 검색 엔진 : 언어적으로 고성능, 저수준 최적화, 효율족인 리소스 관리 가능
  • 컬럼 지향 : 데이터 엑세스 패턴에서 컬럼 지향 구조의 효율성, 연산의 효율성

Milvus는 처음부터 매우 효율적인 벡터 데이터베이스 시스템으로 설계되었습니다. 대부분의 경우 Milvus는 다른 벡터 데이터베이스보다 2~5배 더 뛰어난 성능을 발휘합니다(VectorDBBench 결과 참조). 이러한 높은 성능은 몇 가지 주요 설계 결정의 결과입니다:
하드웨어 인식 최적화: 다양한 하드웨어 환경에서 Milvus를 사용할 수 있도록 AVX512, SIMD, GPU, NVMe SSD를 비롯한 여러 하드웨어 아키텍처와 플랫폼에 맞게 성능을 최적화했습니다.
고급 검색 알고리즘: Milvus는 IVF, HNSW, DiskANN 등 다양한 인메모리 및 온디스크 인덱싱/검색 알고리즘을 지원하며, 모두 심층적으로 최적화되어 있습니다. Milvus는 FAISS 및 HNSWLib와 같은 널리 사용되는 구현에 비해 30%~70% 더 나은 성능을 제공합니다.
C++로 구현된 검색 엔진: 벡터 데이터베이스 성능의 80% 이상은 검색 엔진에 의해 결정됩니다. Milvus는 이 중요한 구성 요소에 C++를 사용하는데, 그 이유는 이 언어의 고성능, 저수준 최적화, 효율적인 리소스 관리 때문입니다. 가장 중요한 점은 Milvus가 어셈블리 수준의 벡터화부터 멀티스레드 병렬화 및 스케줄링에 이르기까지 수많은 하드웨어 인식 코드 최적화 기능을 통합하여 하드웨어 기능을 최대한 활용한다는 점입니다.
컬럼 지향: Milvus는 컬럼 지향 벡터 데이터베이스 시스템입니다. 주요 장점은 데이터 액세스 패턴에서 비롯됩니다. 쿼리를 수행할 때 열 지향 데이터베이스는 전체 행이 아닌 쿼리와 관련된 특정 필드만 읽으므로 액세스하는 데이터의 양이 크게 줄어듭니다. 또한 열 기반 데이터에 대한 연산을 쉽게 벡터화할 수 있으므로 전체 열에 한 번에 연산을 적용할 수 있어 성능이 더욱 향상됩니다.

지원하는 검색 유형

종류 설명
ANN 검색 쿼리 벡터와 가장 가까운 상위 K 벡터를 찾음
필터링 검색 지정된 필터 조건에 따라 ANN 검색 수행
범위 검색 쿼리 벡터에서 지정된 반경 내의 벡터 찾음
하이브리드 검색 여러 벡터 필드를 기반으로 ANN 검색 수행
전체 텍스트 검색 BM25에 기반한 전체 텍스트 검색 수행
순위 재조정(리랭킹) 추가 기준이나 보조 알고리즘으로 사용
검색 결과 순서를 재조정해 초기 ANN 검색 결과를 개선(의도에 맞게)
가져오기 기본 키로 데이터 검색
쿼리 특정 표현식을 사용해 데이터 검색

지원하는 데이터 유형

데이터 유형 특징
Int, Float, Bool, String 일반적인 숫자, 문자열, 불리언 값
(메타데이터, 필터링 조건으로 사용)
스파스 벡터 대부분 값이 0인 희소 벡터
메모리 절약 가능, 희소 벡터 전용 거리 메트릭 지원
바이너리 벡터 0과 1로 구성된 이진 벡터
해밍 거리·자카드 거리 같은 바이너리 메트릭 지원
JSON JSON 형식의 복잡한 계층 데이터
다양한 구조적 쿼리 가능
배열 배열 형태 데이터
다차원 값 표현 가능
거리 메트릭 각 벡터 유형에 맞는 거리 계산 방식
(예: L2, Cosine, Hamming, Jaccard 등) 지원

AI 통합

  • 임베딩 모델 통합 : Python용 SDK(Pymilvus)를 사용하면 여러 임베딩 모델과 바로 연동할 수 있어, 개발자가 따로 준비할 필요 없이 쉽게 벡터화 가능.

  • 리랭크 모델 통합 : Milvus가 처음 돌린 검색 결과는 “대략적으로” 좋은 순서임. 이를 더 정교하게 의도에 맞게 순서를 매기는 리랭커(re-ranker) 모델을 Milvus 에서 통합하여 제공함.

  • LangChain 등 AI 도구 연동 : LangChain 등 AI 도구와의 연동성 제공

Milvus의 주요 사용 사례

  • RAG (Retrieval-Augmented Generation): LLM이 외부 지식(문서, 데이터 등)을 검색하여 답변의 정확성과 신뢰성을 높이는 시스템에서 핵심적인 역할
  • 이미지, 비디오, 오디오 검색: 이미지, 비디오 프레임, 오디오 클립을 벡터로 변환하여 유사한 미디어 콘텐츠를 검색.
  • 추천 시스템: 사용자 또는 아이템의 선호도를 벡터로 표현하고 유사성 검색을 통해 맞춤형 콘텐츠나 제품을 추천.
  • 이상 감지 및 사기 탐지: 정상적인 패턴의 벡터와 다른 이상 패턴의 벡터를 찾아내어 비정상적인 활동(예: 금융 사기, 네트워크 침입)을 감지.
  • 텍스트 분류 및 클러스터링: 텍스트를 임베딩 벡터로 변환하여 유사한 텍스트끼리 묶거나 특정 카테고리로 분류.
  • 약물 발견 및 화학 구조 분석: 분자 구조를 벡터로 표현하여 유사한 특성을 가진 화합물을 찾거나 특정 특성을 가진 화합물을 설계하는 데 활용.
  • Milvus는 비정형 데이터의 폭발적인 증가와 AI 모델의 발전 속도에 발맞춰, 대규모 유사성 검색이 필요한 모든 AI 애플리케이션의 핵심 인프라로 자리매김하고 있음.

Reference

https://milvus.io/docs/overview.md

Comments