본문 바로가기
WIKI 기술 지식 베이스

Memory-optimized search

원문 보기 위키 갱신

출처: 문서

본문

메모리 최적화 검색

3.1에 도입됨 {: .label .label-purple }

메모리 최적화 검색을 사용하면 Faiss 엔진이 전체 벡터 인덱스를 off-heap 메모리에 로드하지 않고도 효율적으로 실행할 수 있어요. 이 최적화가 없으면 Faiss는 일반적으로 전체 인덱스를 메모리에 로드하는데, 인덱스 크기가 사용 가능한 물리적 메모리를 초과하면 지속 불가능해질 수 있어요. 메모리 최적화 검색을 사용하면 엔진이 인덱스 파일을 메모리 매핑하고 운영 체제의 파일 캐시에 의존하여 검색 요청을 처리해요. 이 방식은 불필요한 I/O를 피하고 반복 읽기를 시스템 캐시에서 직접 처리할 수 있게 해요.

메모리 최적화 검색은 검색 작업에만 영향을 미쳐요. 인덱싱 동작은 변경되지 않아요. {: .note }

제한 사항

OpenSearch에서 메모리 최적화 검색에는 다음과 같은 제한 사항이 적용돼요.

  • OpenSearch 2.19 이전에 생성된 인덱스의 경우 메모리 최적화 모드가 활성화되어 있어도 엔진이 데이터를 메모리에 로드해요.
  • 메모리 최적화 검색은 Faiss 엔진과 HNSW 방법에서만 지원돼요.
  • 메모리 최적화 검색은 IVF나 제품 양자화(PQ)를 지원하지 않아요.
  • 메모리 최적화 검색을 활성화하거나 비활성화하려면 인덱스를 다시 시작해야 해요.

IVF나 PQ를 사용하면 메모리 최적화 모드가 활성화되어 있어도 엔진이 데이터를 메모리에 로드해요. {: .important }

구성

메모리 최적화 검색을 활성화하려면 인덱스를 생성할 때 index.knn.memory_optimized_search를 true로 설정해요.

PUT /test_index
{
  "settings": {
    "index.knn": true,
    "index.knn.memory_optimized_search": true
  },
  "mappings": {
    "properties": {
      "vector_field": {
        "type": "knn_vector",
        "dimension": 128,
        "method": {
          "name": "hnsw",
          "engine": "faiss"
        }
      }
    }
  }
}

{% include copy-curl.html %}

기존 인덱스에서 메모리 최적화 검색을 활성화하려면 인덱스를 닫고, 설정을 업데이트한 다음, 인덱스를 다시 열어야 해요.

POST /test_index/_close

{% include copy-curl.html %}

PUT /test_index/_settings
{
  "index.knn.memory_optimized_search": true
}

{% include copy-curl.html %}

POST /test_index/_open

{% include copy-curl.html %}

디스크 기반 검색과의 통합

필드를 on_disk 모드와 1x 압축으로 구성하면 인덱스 수준에서 메모리 최적화가 활성화되지 않아도 해당 필드에 대해 메모리 최적화 검색이 자동으로 활성화돼요. 자세한 내용은 메모리 최적화 벡터를 참조하세요.

메모리 최적화 검색은 압축이나 양자화를 사용하지 않기 때문에 디스크 기반 검색과 달라요. 검색 중에 벡터 데이터가 로드되고 액세스되는 방식만 변경해요. {: .note }

성능 최적화

메모리 최적화 검색이 활성화되면 워밍업 API는 기본 Faiss 인덱스 파일에 대한 스트림 열기와 같은 검색 작업에 필요한 필수 정보만 로드해요. 이 최소 워밍업은 다음과 같은 결과를 가져와요.

  • 더 빠른 초기 검색
  • 메모리 오버헤드 감소
  • 더 효율적인 리소스 활용

메모리 최적화 검색이 비활성화된 필드의 경우 워밍업 프로세스가 벡터를 off-heap 메모리에 로드해요.

다음 단계

더 알아보기 (Learn more)