밀부스 벡터 데이터베이스란?
밀부스는 2019년에 딥 뉴럴 네트워크 및 기타 기계 학습 (ML) 모델에서 생성된 대규모 임베딩 벡터를 저장, 색인 및 관리하는 것을 주요 목표로 만들어졌습니다.
입력 벡터 쿼리를 처리하기 위해 특별히 설계된 데이터베이스로, 밀부스는 수십억 단위의 벡터를 색인화할 수 있습니다. 기존의 관계형 데이터베이스와는 달리 밀부스는 사전에 정의된 패턴과 구조화된 데이터에 주로 관여하는 것이 아니라, 비구조화된 데이터에서 유도된 임베딩 벡터를 처리하도록 처음부터 설계되었습니다.
인터넷의 지속적인 확장으로 인해 이메일, 논문, IoT 센서 데이터, 페이스북 사진, 단백질 구조 등을 포함한 비구조화된 데이터가 점점 더 흔해졌습니다. 컴퓨터가 비구조화된 데이터를 이해하고 처리할 수 있도록 하기 위해서는 이러한 데이터를 임베딩 기술을 사용하여 벡터로 변환해야 합니다. 밀부스는 이러한 벡터들을 저장하고 색인화합니다. 밀부스는 두 벡터 사이의 유사도 거리를 분석하여 그들의 상관 관계를 추론하는 방식으로 두 벡터의 유사도 거리를 계산하여 비교할 수 있습니다. 두 임베딩 벡터가 매우 유사하다면, 원본 데이터 소스도 유사함을 나타냅니다.
밀부스 워크플로우:
핵심 개념
벡터 데이터베이스와 유사도 검색의 세계에 익숙하지 않은 경우, 다음과 같은 핵심 개념이 도움이 될 수 있습니다.
밀부스 용어에 대해 더 알아보기.
비구조화된 데이터
비구조화된 데이터는 이미지, 비디오, 오디오, 자연어 등을 포함하여 미리 정의된 모델이나 조직화된 구조를 따르지 않는 정보를 가리킵니다. 이러한 데이터 유형은 전 세계 데이터의 약 80%를 차지하며 인공 지능 (AI) 및 기계 학습 (ML) 모델을 사용하여 다양한 방법으로 벡터로 변환할 수 있습니다.
임베딩 벡터
임베딩 벡터는 비구조화된 데이터의 특징 추상화입니다 (이메일, IoT 센서 데이터, 인스타그램 사진, 단백질 구조 등). 수학적 관점에서, 임베딩 벡터는 부동 소수점 숫자나 이진 배열로 이루어져 있습니다. 현대의 임베딩 기술은 비구조화된 데이터를 임베딩 벡터로 변환하기 위해 사용됩니다.
벡터 유사도 검색
벡터 유사도 검색은 데이터베이스 내의 벡터와 조회 벡터 사이의 가장 유사한 벡터를 찾는 과정을 말합니다. 근사 최근 이웃 (ANN) 검색 알고리즘을 사용하여 검색 과정을 가속화할 수 있습니다. 두 임베딩 벡터가 매우 유사하다면, 원본 데이터 소스도 유사함을 나타냅니다.
밀부스를 선택하는 이유
- 대규모 데이터셋에서의 벡터 검색을 위한 뛰어난 성능.
- 다국어 및 툴체인 지원을 갖춘 개발자 중심의 커뮤니티 지원.
- 클라우드 상에서 확장성과 높은 신뢰성을 달성하여 장애가 발생해도 안정적으로 유지.
- 스칼라 필터링과 벡터 유사도 검색을 결합하여 혼합 검색 가능.
지원하는 인덱스 및 메트릭 표준은 무엇인가요?
인덱스는 데이터의 조직적 단위입니다. 삽입된 엔티티를 검색하거나 쿼리하기 전에 인덱스 유형과 유사도 메트릭 표준을 선언해야 합니다. 인덱스 유형을 명시하지 않으면 밀부스는 무차별 검사를 사용합니다.
인덱스 유형
밀부스는 근사 최근 이웃 검색 (ANNS)을 위한 대부분의 벡터 인덱스 유형을 지원합니다:
- FLAT: 소규모 (수백만 개) 데이터셋에 대한 완전히 정확하고 정확한 검색 결과를 찾는 시나리오에 적합합니다.
- IVF_FLAT: 양자화 인덱스에 기반하여 정확도와 쿼리 속도의 이상적인 균형을 찾는 시나리오에 적합합니다. GPU 버전인 GPU_IVF_FLAT도 있습니다.
- IVF_SQ8: 양자화 인덱스에 기반하여 자원이 매우 제한적이므로 디스크, CPU 및 GPU 메모리 소비를 크게 줄이는 시나리오에 적합합니다.
- IVF_PQ: 양자화 인덱스에 기반하여 정확도를 희생하더라도 높은 쿼리 속도를 추구하는 시나리오에 적합합니다. GPU 버전인 GPU_IVF_PQ도 있습니다.
- HNSW: 그래프 인덱스에 기반하여 매우 높은 검색 효율을 요구하는 시나리오에 적합합니다.
더 자세한 정보는 벡터 인덱스를 참조하세요.
유사도 메트릭
밀부스에서 유사도 메트릭은 벡터 간의 유사도를 측정하는 데 사용됩니다. 좋은 거리 메트릭을 선택함으로써 분류 및 클러스터링 성능을 크게 향상시킬 수 있습니다. 입력 데이터의 형식에 따라 특정 유사도 메트릭을 선택하여 최상의 성능을 얻을 수 있습니다.
부동 소수점 임베딩에 사용되는 일반적인 메트릭은 다음과 같습니다:
- 유클리드 거리 (L2): 이 메트릭은 컴퓨터 비전 분야에서 일반적으로 사용됩니다.
- 내적 (IP): 이 메트릭은 자연어 처리 분야에서 일반적으로 사용됩니다.
이진 임베딩에 사용되는 일반적인 메트릭은 다음과 같습니다:
- 해밍 거리: 이 메트릭은 자연어 처리 분야에서 일반적으로 사용됩니다.
- 자카드 유사도: 이 메트릭은 분자 유사성 검색에 일반적으로 사용됩니다.
샘플 어플리케이션
Milvus를 사용하면 어플리케이션에 유사도 검색을 쉽게 추가할 수 있습니다. Milvus의 샘플 어플리케이션에는 다음과 같은 것들이 있습니다:
- 이미지 유사도 검색: 이미지를 검색 가능하게 하고 대규모 데이터베이스에서 가장 유사한 이미지를 거의 즉시 반환합니다.
- 비디오 유사도 검색: 주요 프레임을 벡터로 변환한 뒤 Milvus에 입력하여 거의 실시간으로 수십억 개의 비디오를 검색하고 추천할 수 있습니다.
- 오디오 유사도 검색: 음성, 음악, 효과음 등과 유사한 소리와 같은 대규모 오디오 데이터를 빠르게 쿼리할 수 있습니다.
- 추천 시스템: 사용자의 행동과 필요에 기반하여 정보나 제품을 추천합니다.
- 질문 응답 시스템: 사용자 질문에 자동으로 답변할 수 있는 대화형 디지털 질문 응답 챗봇입니다.
- DNA 염기 서열 분류: 유사한 DNA 염기 서열을 비교하여 밀리초 단위로 정확하게 유전자를 분류합니다.
- 텍스트 검색 엔진: 키워드를 텍스트 데이터베이스와 비교함으로써 사용자가 찾고 있는 정보를 찾도록 도와줍니다.
Milvus 설계 컨셉
클라우드 기반 벡터 데이터베이스로, Milvus는 그 설계에서 저장소와 계산을 분리합니다. 탄력성과 유연성을 향상시키기 위해 Milvus의 모든 구성 요소는 상태를 갖지 않습니다.
이 시스템은 네 개의 계층으로 나뉩니다:
- 접속 계층: 시스템의 프론트엔드 계층 및 사용자의 엔드포인트로 동작하는 상태를 갖지 않는 프록시 그룹입니다.
- 조정 서비스: 작업 노드에 작업을 할당하고 시스템의 중앙 허브 역할을 합니다.
- 작업 노드: 조정 서비스로부터의 명령을 따라가며 사용자로부터 발생한 DML/DDL 명령을 무식하게 실행하는 시스템의 팔과 다리입니다.
- 저장소: 데이터 영속성에 대한 책임을 지는 시스템의 뼈대로, 메타데이터 저장, 로그 에이전트, 오브젝트 저장소를 포함합니다.
.
개발자 도구
Milvus는 개발 및 운영을 위한 다양한 API 및 도구를 제공합니다.
API 접근
Milvus는 Milvus API를 둘러싸는 클라이언트 라이브러리를 제공하여 프로그램적으로 응용 프로그램 코드에서 데이터를 삽입, 삭제 및 쿼리할 수 있습니다:
- PyMilvus
- Node.js SDK
- Go SDK
- Java SDK
Milvus 생태계 도구
Milvus 생태계에는 다음을 포함하여 여러 유용한 도구가 있습니다:
- Milvus CLI
- Attu: Milvus를 위한 그래픽 관리 시스템입니다.
- MilvusDM (Milvus 데이터 이관): Milvus와 특히 데이터 가져오기 및 내보내기를 위한 오픈소스 도구입니다.
- Milvus 용량 계획 도구: 다양한 인덱스 유형을 통해 필요한 원시 파일 크기, 메모리 크기 및 안정적 디스크 크기를 추정하는 데 도움을 줍니다.
Milvus 제한 사항
Milvus는 AI 애플리케이션 및 벡터 유사도 검색을 위한 최고의 벡터 데이터베이스를 제공하기 위해 헌신하고 있습니다. 그러나 팀은 사용자 경험을 향상시키기 위해 더 많은 기능과 최적의 도구를 계속해서 도입하기 위해 지속적으로 노력하고 있습니다. 이 페이지에는 Milvus를 사용할 때 사용자들이 마주칠 수 있는 알려진 제한 사항들이 몇 가지 나열되어 있습니다.
리소스 이름의 길이
리소스 | 제한 |
---|---|
컬렉션 | 255 글자 |
필드 | 255 글자 |
인덱스 | 255 글자 |
파티션 | 255 글자 |
이름 규칙
리소스 이름은 숫자, 글자 및 밑줄(_)로 구성될 수 있습니다. 이름은 글자나 밑줄로 시작해야 합니다.
리소스의 수
리소스 | 제한 |
---|---|
컬렉션 | 65,536 |
연결/에이전트 | 65,536 |
컬렉션 내 리소스의 수
리소스 | 제한 |
---|---|
파티션 | 4,096 |
샤드 | 64 |
필드 | 64 |
인덱스 | 1 |
엔티티 | 제한 없음 |
문자열 길이
데이터 유형 | 제한 |
---|---|
VARCHAR | 65,535 |
벡터 차원
속성 | 제한 |
---|---|
차원 | 32,768 |
각 RPC의 입력 및 출력
작업 | 제한 |
---|---|
삽입 작업 | 512 MB |
검색 작업 | 512 MB |
쿼리 작업 | 512 MB |
로드 제한
현재 버전에서는 로드할 데이터는 실행 엔진을 위한 메모리 리소스를 보존하기 위해 모든 쿼리 노드의 총 메모리 리소스의 90% 이내여야 합니다.
검색 제한
벡터 | 제한 |
---|---|
topk (반환할 가장 유사한 결과의 수) |
16,384 |
nq (검색 요청 수) |
16,384 |