ML OPS/Vector Search

Amazon OpenSearch Service

seokhyun2 2024. 2. 4. 16:26

LLM(Large Language Model)이 발전하면서 RAG(Retrieval Augmented Generation)이 등장하였고, RAG의 방식 중에 하나로 벡터 서치가 굉장히 많이 활용되고 있습니다.

클라우드 서비스들도 벡터 서치를 지원하는 제품을 제공하고 있습니다.

AWS는 Amazon OpenSearch Service, Azure는 Congnitive Search, GCP는 Vertex AI라는 제품을 각각 보유하고 있습니다.

 

오늘은 클라우드 중에 점유율이 제일 높은 AWS의 제품을 한번 리뷰해보려고 합니다.

AWS가 제공하는 OpenSearch는 오픈 소스로도 제공되고 있어서, 꼭 AWS에서 사용할 필요는 없습니다.

직접 구축해서 사용하고 싶으시다면 아래 링크로 들어가서 문서를 읽어보고 구축해서 사용하시면 됩니다.

https://opensearch.org/

 

OpenSearch

An open-source project enhances community trust in multiple ways. Strategies recommended by the Linux Foundation to enhance community trust include seeking out influential peers and mentors, practicing in an open and collaborative environment, adopting fle

opensearch.org

 

OpenSearch는 기본적으로 검색 엔진의 기능을 모두 제공하고 추가로 Vector Search 등의 여러 기능을 제공하고 있습니다.

OpenSearch의 검색 엔진은 Elastc Search를 활용하고 있는데, Elastic Search도 사실 Vector Search의 기능을 제공은 하고 있지만 알고리즘 중에 hnsw 만 제공하고 있으며, OpenSearch는 Faiss 알고리즘도 제공하고 있습니다.

참고로 Faiss는 Facebook이 만들어서 공개한 Vector Search 알고리즘으로 HNSW보다 성능이 좋다고 알려져 있습니다.

 

AWS에서 OpenSearch를 구성하게 되면, 전용 프라이머리 노드와 데이터 노드로 나뉘어서 구축하게 됩니다.

전용 프라이머리 노드는 Multi-zone으로 3개 혹은 5개로 구성이 가능하고 이 노드들은 크러스터 관리만 하고, 실제 쿼리를 실행하지 않습니다.

데이터 노드는 자유롭게 구성할 수 있고 실제 쿼리를 실행하는 노드입니다.

 

OpenSearch는 Vector Search를 사용하게 되면, memory의 반을 ElasticSearch에 사용하고 나머지 50%를 Vector Search에 사용하도록 구성이 되는데, Vector Search만 사용하는 경우에는 메모리를 낭비해야만 하는 구조인 것이 단점입니다.

또, 조정을 할 수는 있지만 circuit breaker 세팅에 의해 50% 중에서도 50%만 사용하게 되어 8GB의 메모리면 실제 Vector Search에는 2GB만 할당하게 되는 매우 비효율적인 구성입니다.

그리고 Similarity Search를 사용하는 경우에는 UltraWarm과 Cold 스토리지 활용도 불가능합니다.

(https://docs.aws.amazon.com/opensearch-service/latest/developerguide/knn.html)

 

Vector Search의 경우, 모든 케이스를 서치하려면 매우 많아서 연산량이 높아져서 Filtering을 하는 기능을 많이 활용하게 됩니다.

OpenSearch는 아래와 같은 Filtering 기능을 제공하고 있습니다.

https://opensearch.org/docs/latest/search-plugins/knn/filter-search-knn/

 

맨 아래의 Scoring script filter는 vector search 전에 동작하지만 exact 서치를 할 때만 적용 가능하며, Boolean filter, post_filter는 다른 vector search 알고리즘이 동작한 후에 후처리로 filtering 할 수 있습니다.

맨 위의 Efficient k-NN filtering은 vector search를 하는 도중에 동작할 수 있는데 아래의 메커니즘으로 동작을 하게 됩니다.

https://opensearch.org/docs/latest/search-plugins/knn/filter-search-knn/

 

오늘은 AWS의 OpenSearch에 대해 간단하게 리뷰해보았습니다.

OpenSearch는 ElasticSearch의 기능을 모두 함께 활용할 수 있다는 장점이 있지만, 반대로 그로 인한 단점으로 메모리 활용이 분할로 사용하면서 낭비하기 쉬운 구성이 된다는게 단점입니다.

다음에는 오늘 언급되었던 Vector Search의 알고리즘 들에 대해서도 리뷰를 해보도록 하겠습니다.