Milvus 2.2 벤치마크 테스트 보고서
이 보고서는 Milvus 2.2.0의 주요 테스트 결과를 보여줍니다. 특히 스케일 업 및 스케일 아웃 기능에서 Milvus 2.2.0 검색 성능에 대한 그림을 제공하는 것을 목표로 합니다.
최근 Milvus 2.2.3에 대한 벤치마크를 실행한 결과 다음과 같은 주요 결과를 확인했습니다:
- 검색 지연 시간 2.5배 감소
- QPS 4.5배 증가
- 성능 저하가 거의 없는 수십억 개 규모의 유사도 검색 가능
- 여러 복제본 사용 시 선형적인 확장성
자세한 내용은 이 백서 및 관련 벤치마크 테스트 코드를 참조하세요.
요약
- Milvus 2.1과 비교하여 Milvus 2.2.0의 QPS는 클러스터 모드에서 48% 이상, 독립형 모드에서 75% 이상 증가했습니다.
- Milvus 2.2.0은 스케일 업 및 스케일 아웃 기능이 매우 뛰어납니다:
- CPU 코어를 8개에서 32개로 확장할 때 QPS가 선형적으로 증가합니다.
- 쿼리노드 복제본을 1개에서 8개로 확장할 때 QPS는 선형적으로 증가합니다.
용어
테스트에 사용된 용어에 대한 자세한 내용을 보려면 클릭하세요.
용어
설명
nq
한 번의 검색 요청으로 검색할 벡터의 수입니다.
topk
검색 요청에서 각 벡터에 대해 검색할 가장 가까운 벡터의 수(nq 단위)
ef
HNSW 인덱스에 특정한 검색 파라미터
RT
요청을 전송한 후 응답을 받기까지의 응답 시간
QPS
초당 성공적으로 처리된 검색 요청 수
테스트 환경
모든 테스트는 다음 환경에서 수행됩니다.
하드웨어 환경
하드웨어 | 사양 |
---|---|
CPU | 인텔® 제온® 골드 6226R CPU @ 2.90GHz |
메모리 | 16*\32GB RDIMM, 3200 MT/s |
SSD | SATA 6Gbps |
소프트웨어 환경
소프트웨어 | 버전 |
---|---|
Milvus | v2.2.0 |
Milvus GO SDK | v2.2.0 |
배포 체계
- Milvus 인스턴스(독립형 또는 클러스터)는 물리적 또는 가상 머신을 기반으로 하는 Kubernetes 클러스터에 헬름을 통해 배포됩니다.
- 다른 테스트는 단지 CPU 코어 수, 메모리 크기, 복제본(워커 노드) 수에 차이가 있을 뿐이며, 이는 Milvus 클러스터에만 적용됩니다.
- 지정되지 않은 구성은 기본 구성과 동일합니다.
- Milvus 종속성(MinIO, Pulsar 및 Etcd)은 각 노드의 로컬 SSD에 데이터를 저장합니다.
- 검색 요청은 Milvus GO SDK를 통해 Milvus 인스턴스로 전송됩니다.
데이터 세트
이 테스트는 ANN-Benchmarks의 오픈 소스 데이터 세트 SIFT(128개 차원)를 사용합니다.
테스트 파이프라인
- 각 테스트에 나열된 각 서버 구성으로 헬름으로 Milvus 인스턴스를 시작합니다.
- Milvus GO SDK를 통해 Milvus 인스턴스에 연결하고 해당 테스트 결과를 얻습니다.
- 컬렉션을 생성합니다.
- 1백만 개의 SIFT 벡터를 삽입합니다.
M
을8
으로,efConstruction
을200
으로 설정하여 HNSW 인덱스를 빌드하고 인덱스 파라미터를 구성합니다. - 컬렉션을 로드합니다.
- 검색 매개변수
nq=1, topk=1, ef=64
를 사용하여 다른 동시 수로 검색하며, 각 동시 지속 시간은 최소 1시간입니다.
테스트 결과
Milvus 2.2.0 대 Milvus 2.1.0
클러스터
서버 구성(클러스터)
yaml queryNode: replicas: 1 resources: limits: cpu: "12.0" memory: 8Gi requests: cpu: "12.0" memory: 8Gi
검색 성능
Milvus | QPS | RT(TP99) / ms | RT(TP50) / ms | 실패/s |
---|---|---|---|---|
2.1.0 | 6904 | 59 | 28 | 0 |
2.2.0 | 10248 | 63 | 24 | 0 |
클러스터 검색 성능
독립형
서버 구성(독립형)
yaml standalone: replicas: 1 resources: limits: cpu: "12.0" memory: 16Gi requests: cpu: "12.0" memory: 16Gi
검색 성능
Milvus | QPS | RT(TP99)/ms | RT(TP50) / ms | 실패/s |
---|---|---|---|---|
2.1.0 | 4287 | 104 | 76 | 0 |
2.2.0 | 7522 | 127 | 79 | 0 |
독립형 검색 성능
Milvus 2.2.0 스케일업
하나의 쿼리노드에서 CPU 코어를 확장하여 확장 기능을 확인합니다.
서버 구성(클러스터)
yaml queryNode: replicas: 1 resources: limits: cpu: "8.0" /"12.0" /"16.0" /"32.0" memory: 8Gi requests: cpu: "8.0" /"12.0" /"16.0" /"32.0" memory: 8Gi
검색 성능
CPU 코어 | 동시 접속자 수 | QPS | RT(TP99)/ms | RT(TP50) / ms | fail/s |
---|---|---|---|---|---|
8 | 500 | 7153 | 127 | 83 | 0 |
12 | 300 | 10248 | 63 | 24 | 0 |
16 | 600 | 14135 | 85 | 42 | 0 |
32 | 600 | 20281 | 63 | 28 | 0 |
쿼리노드 CPU 코어별 검색 성능
Milvus 2.2.0 스케일 아웃
더 많은 쿼리노드로 더 많은 복제본을 확장하여 스케일아웃 기능을 확인합니다.
참고: 컬렉션을 로드할 때 쿼리노드 수는 replica_number
과 같습니다.
서버 구성(클러스터)
yaml queryNode: replicas: 1 / 2 / 4 / 8 resources: limits: cpu: "8.0" memory: 8Gi requests: cpu: "8.0" memory: 8Gi
복제본 | 동시 수 | QPS | RT(TP99) / ms | RT(TP50) / ms | fail/s |
---|---|---|---|---|---|
1 | 500 | 7153 | 127 | 83 | 0 |
2 | 500 | 15903 | 105 | 27 | 0 |
4 | 800 | 19281 | 109 | 40 | 0 |
8 | 1200 | 30655 | 93 | 38 | 0 |
쿼리노드 복제본별 검색 성능
다음 단계
- 이 가이드를 참조하여 Milvus 2.2.0 벤치마크 테스트를 직접 수행해 보세요. 단, 이 가이드에서는 Milvus 2.2 및 Pymilvus 2.2를 사용해야 한다는 점을 참고하세요.