밀부스란 무엇인가요?

밀부스 ( )는 빠른 비행 속도, 예리한 시력, 놀라운 적응력으로 유명한 매목 매과 밀부스속에 속하는 맹금류입니다.

질리즈는 노트북부터 대규모 분산 시스템에 이르기까지 다양한 환경에서 효율적으로 실행되는 확장성이 뛰어난 오픈소스 고성능 벡터 데이터베이스를 위해 밀버스라는 이름을 채택했습니다. 오픈 소스 소프트웨어와 클라우드 서비스로 모두 제공됩니다.

Zilliz가 개발하여 곧 Linux 재단 산하 LF AI & Data Foundation에 기부한 Milvus는 세계 최고의 오픈 소스 벡터 데이터베이스 프로젝트 중 하나가 되었습니다. Apache 2.0 라이선스에 따라 배포되며, 대부분의 기여자는 대규모 시스템 구축과 하드웨어 인식 코드 최적화를 전문으로 하는 고성능 컴퓨팅(HPC) 커뮤니티의 전문가들입니다. 핵심 기여자로는 Zilliz, ARM, NVIDIA, AMD, Intel, Meta, IBM, Salesforce, Alibaba, Microsoft의 전문가들이 포함됩니다.

흥미롭게도 모든 Zilliz 오픈소스 프로젝트의 이름은 자유, 선견지명, 기술의 민첩한 진화를 상징하는 새의 이름을 따서 명명합니다.

비정형 데이터, 임베딩, 밀버스

텍스트, 이미지, 오디오와 같은 비정형 데이터는 형식이 다양하고 풍부한 기본 의미를 담고 있어 분석하기가 어렵습니다. 이러한 복잡성을 관리하기 위해 임베딩은 비정형 데이터를 본질적인 특성을 파악할 수 있는 숫자 벡터로 변환하는 데 사용됩니다. 이러한 벡터는 벡터 데이터베이스에 저장되어 빠르고 확장 가능한 검색과 분석을 가능하게 합니다.

Milvus는 강력한 데이터 모델링 기능을 제공하여 비정형 또는 멀티모달 데이터를 정형화된 컬렉션으로 구성할 수 있습니다. 일반적인 숫자 및 문자 유형, 다양한 벡터 유형, 배열, 집합, JSON 등 다양한 속성 모델링을 위한 광범위한 데이터 유형을 지원하므로 여러 데이터베이스 시스템을 유지 관리하는 수고를 덜어줍니다.

Untructured data, embeddings, and Milvus 비정형 데이터, 임베딩 및 Milvus

Milvus는 세 가지 배포 모드를 제공하며, Jupyter Notebook의 로컬 프로토타이핑부터 수백억 개의 벡터를 관리하는 대규모 Kubernetes 클러스터에 이르기까지 다양한 데이터 규모를 지원합니다:

  • Milvus Lite는 애플리케이션에 쉽게 통합할 수 있는 Python 라이브러리입니다. Milvus의 경량 버전으로, Jupyter Notebook에서 빠르게 프로토타이핑하거나 리소스가 제한된 에지 기기에서 실행하는 데 이상적입니다. 자세히 알아보기.
  • Milvus Standalone은 단일 머신 서버 배포로, 모든 구성 요소가 단일 Docker 이미지에 번들로 제공되어 편리하게 배포할 수 있습니다. 자세히 알아보기.
  • Milvus Distributed는 수십억 규모 또는 그 이상의 시나리오를 위해 설계된 클라우드 네이티브 아키텍처를 특징으로 하는 Kubernetes 클러스터에 배포할 수 있습니다. 이 아키텍처는 중요한 구성 요소의 중복성을 보장합니다. 자세히 알아보기.

Milvus가 빠른 이유는 무엇인가요?

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는 컬럼 지향 벡터 데이터베이스 시스템입니다. 주요 장점은 데이터 액세스 패턴에서 비롯됩니다. 쿼리를 수행할 때 열 지향 데이터베이스는 전체 행이 아닌 쿼리와 관련된 특정 필드만 읽으므로 액세스하는 데이터의 양이 크게 줄어듭니다. 또한 열 기반 데이터에 대한 연산을 쉽게 벡터화할 수 있으므로 전체 열에 한 번에 연산을 적용할 수 있어 성능이 더욱 향상됩니다.

Milvus의 확장성이 뛰어난 이유

Milvus는 2022년에 10억 개 규모의 벡터를 지원했으며, 2023년에는 수백억 개까지 안정적으로 확장하여 Salesforce, PayPal, Shopee, Airbnb, eBay, NVIDIA, IBM, AT&T, LINE, ROBLOX, Inflection 등을 포함한 300개 이상의 주요 기업의 대규모 시나리오를 지원했습니다.

밀버스의 클라우드 네이티브 고도로 분리된 시스템 아키텍처는 데이터 증가에 따라 시스템을 지속적으로 확장할 수 있도록 보장합니다:

Highly decoupled system architecture of Milvus 밀버스의 고도로 분리된 시스템 아키텍처

Milvus 자체는 완전히 상태 비저장형이므로 Kubernetes 또는 퍼블릭 클라우드를 통해 쉽게 확장할 수 있습니다. 또한 Milvus 구성 요소는 검색, 데이터 삽입, 인덱싱/압축이라는 가장 중요한 세 가지 작업을 쉽게 병렬화할 수 있는 프로세스로 설계하고 복잡한 로직을 분리하는 등 잘 분리되어 있습니다. 따라서 해당 쿼리 노드, 데이터 노드, 인덱스 노드가 독립적으로 확장 및 축소할 수 있어 성능과 비용 효율성을 최적화할 수 있습니다.

Milvus가 지원하는 검색 유형

Milvus는 다양한 사용 사례의 요구 사항을 충족하기 위해 다양한 유형의 검색 기능을 지원합니다:

  • ANN 검색: 쿼리 벡터와 가장 가까운 상위 K 벡터를 찾습니다.
  • 필터링 검색: 지정된 필터링 조건에 따라 ANN 검색을 수행합니다.
  • 범위 검색: 쿼리 벡터에서 지정된 반경 내의 벡터를 찾습니다.
  • 하이브리드 검색: 여러 벡터 필드를 기반으로 ANN 검색을 수행합니다.
  • 전체 텍스트 검색: BM25에 기반한 전체 텍스트 검색.
  • 순위 재조정: 추가 기준 또는 보조 알고리즘을 기반으로 검색 결과의 순서를 조정하여 초기 ANN 검색 결과를 개선합니다.
  • 가져오기: 기본 키로 데이터를 검색합니다.
  • 쿼리: 특정 표현식을 사용해 데이터를 검색합니다.

포괄적인 기능 세트

위에서 언급한 주요 검색 기능 외에도 Milvus는 ANN 검색을 중심으로 구현된 일련의 기능을 제공하므로 그 기능을 충분히 활용할 수 있습니다.

API 및 SDK

고급 데이터 유형

Milvus는 기본 데이터 유형 외에도 다양한 고급 데이터 유형과 그에 해당하는 거리 메트릭을 지원합니다.

왜 밀버스인가?

  • 규모에 맞는 고성능 및 고가용성

    Milvus는 컴퓨팅과 스토리지를 분리하는 분산 아키텍처를 갖추고 있습니다. Milvus는 수평적으로 확장하고 다양한 트래픽 패턴에 적응할 수 있으며, 읽기가 많은 워크로드에는 쿼리 노드를, 쓰기가 많은 워크로드에는 데이터 노드를 독립적으로 늘려 최적의 성능을 달성할 수 있습니다. K8의 스테이트리스 마이크로서비스는 장애 발생 시 신속한 복구가 가능하여 고가용성을 보장합니다. 복제본 지원은 여러 쿼리 노드에 데이터 세그먼트를 로드하여 내결함성과 처리량을 더욱 향상시킵니다. 성능 비교는 벤치마크를 참조하세요.

  • 다양한 벡터 인덱스 유형 및 하드웨어 가속 지원

    Milvus는 시스템과 코어 벡터 검색 엔진을 분리하여, 양자화 기반 변형과 mmap을 통해 HNSW, IVF, FLAT(무차별 대입), SCANN, DiskANN 등 다양한 시나리오에 최적화된 모든 주요 벡터 인덱스 유형을 지원합니다. Milvus는 메타데이터 필터링범위 검색과 같은 고급 기능을 위해 벡터 검색을 최적화합니다. 또한, Milvus는 하드웨어 가속을 구현하여 벡터 검색 성능을 향상시키고 NVIDIA의 CAGRA와 같은 GPU 인덱싱을 지원합니다.

  • 유연한 멀티 테넌시 및 핫/콜드 스토리지

    Milvus는 데이터베이스, 컬렉션, 파티션 또는 파티션 키 수준에서 격리를 통해 멀티 테넌시를 지원합니다. 유연한 전략을 통해 단일 클러스터가 수백에서 수백만 개의 테넌트를 처리할 수 있으며, 최적화된 검색 성능과 유연한 액세스 제어를 보장합니다. Milvus는 핫/콜드 스토리지를 통해 비용 효율성을 향상시킵니다. 자주 액세스하는 핫 데이터는 메모리나 SSD에 저장해 성능을 향상시키고, 액세스 빈도가 낮은 콜드 데이터는 느리고 비용 효율적인 스토리지에 보관할 수 있습니다. 이 메커니즘은 중요한 작업의 성능을 높게 유지하면서 비용을 크게 절감할 수 있습니다.

  • 전체 텍스트 검색 및 하이브리드 검색을 위한 스파스 벡터

    밀도 벡터를 통한 시맨틱 검색 외에도 Milvus는 기본적으로 BM25를 통한 전체 텍스트 검색과 SPLADE 및 BGE-M3와 같은 학습된 스파스 임베딩도 지원합니다. 사용자는 스파스 벡터와 밀도 벡터를 동일한 컬렉션에 저장하고, 여러 검색 요청의 결과 순위를 재조정하는 함수를 정의할 수 있습니다. 시맨틱 검색 + 전체 텍스트 검색을 사용한 하이브리드 검색의 예를 참조하세요.

  • 데이터 보안 및 세분화된 액세스 제어

    Milvus는 필수 사용자 인증, TLS 암호화, 역할 기반 액세스 제어(RBAC)를 구현하여 데이터 보안을 보장합니다. 사용자 인증은 유효한 자격 증명을 가진 승인된 사용자만 데이터베이스에 액세스할 수 있도록 보장하며, TLS 암호화는 네트워크 내의 모든 통신을 보호합니다. 또한 RBAC는 역할에 따라 사용자에게 특정 권한을 할당하여 세분화된 액세스 제어가 가능합니다. 이러한 기능을 통해 Milvus는 엔터프라이즈 애플리케이션을 위한 강력하고 안전한 선택으로, 무단 액세스 및 잠재적인 침해로부터 민감한 데이터를 보호합니다.

AI 통합

  • 임베딩 모델 통합 임베딩 모델은 비정형 데이터를 고차원 데이터 공간에서 숫자 표현으로 변환하여 Milvus에 저장할 수 있도록 합니다. 현재 Python SDK인 PyMilvus는 여러 임베딩 모델을 통합하여 데이터를 벡터 임베딩으로 빠르게 준비할 수 있도록 지원합니다. 자세한 내용은 임베딩 개요를 참조하세요.

  • 재랭크 모델 통합 정보 검색 및 생성 AI 영역에서 재랭커는 초기 검색 결과의 순서를 최적화하는 필수적인 도구입니다. PyMilvus는 초기 검색에서 반환되는 결과의 순서를 최적화하기 위해 여러 재랭크 모델을 통합합니다. 자세한 내용은 리랭커 개요를 참조하세요.

  • LangChain 및 기타 AI 도구 통합 GenAI 시대에는 애플리케이션 개발자들로부터 많은 관심을 받고 있는 도구가 LangChain과 같은 도구입니다. 핵심 구성 요소인 Milvus는 일반적으로 이러한 도구에서 벡터 저장소 역할을 합니다. 즐겨 사용하는 AI 도구에 Milvus를 통합하는 방법을 알아보려면 통합튜토리얼을 참조하세요.

도구 및 에코시스템

  • Attu Attu는 Milvus와 저장된 데이터를 관리하는 데 도움이 되는 직관적인 올인원 GUI입니다. 자세한 내용은 Attu 리포지토리를 참조하세요.

  • 버드워처 버드워처는 Milvus를 위한 디버깅 도구입니다. 이를 사용하여 etcd에 연결하면 Milvus 시스템의 상태를 확인하거나 즉석에서 구성할 수 있습니다. 자세한 내용은 버드워처를 참조하세요.

  • Promethus 및 Grafana 통합 Promethus는 오픈 소스 시스템 모니터링 및 알림 툴킷으로, Kubernetes용입니다. Grafana는 모든 데이터 소스와 연결할 수 있는 오픈 소스 시각화 스택입니다. Promethus 및 Grafana를 모니터링 서비스 공급자로 사용하여 배포된 Milvus의 성능을 시각적으로 모니터링할 수 있습니다. 자세한 내용은 모니터링 서비스 배포하기를 참조하세요.

  • Milvus 백업 Milvus 백업은 사용자가 Milvus 데이터를 백업 및 복원할 수 있는 도구입니다. 다양한 애플리케이션 시나리오에 맞게 CLI와 API를 모두 제공합니다. 자세한 내용은 Milvus 백업을 참조하세요.

  • Milvus 데이터 변경 캡처(CDC) Milvus CDC는 기본 대기 재해 복구를 위해 한 Milvus 클러스터에서 다른 클러스터로 데이터 변경 사항을 복제할 수 있습니다. 자세한 내용은 Milvus CDC를 참조하세요.

  • Milvus 커넥터 Milvus는 Apache Spark와 같은 타사 도구와 Milvus를 원활하게 통합할 수 있도록 커넥터 세트를 계획했습니다. 현재, Spark 커넥터를 사용하여 머신 러닝 처리를 위해 Milvus 데이터를 Apache Spark에 공급할 수 있습니다. 자세한 내용은 Spark-Milvus 커넥터를 참조하세요.

  • 벡터 전송 서비스(VTS) Milvus는 Milvus 인스턴스와 Zilliz 클러스터, Elasticsearch, Postgres(PgVector) 및 다른 Milvus 인스턴스를 비롯한 여러 데이터 소스 간에 데이터를 전송할 수 있는 도구 세트를 제공합니다. 자세한 내용은 VTS를 참조하세요.