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) 등
- 따라서 임베딩 모델의 특성에 맞는 선택이 가능.
(4) 하이브리드 검색 (Hybrid Search)
- 단순한 벡터 유사성 검색뿐만 아니라, 벡터 검색과 함께 메타데이터 필터링을 지원.
- 예를 들어, “최근 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 애플리케이션의 핵심 인프라로 자리매김하고 있음.
Comments