🚀 완전 관리형 Milvus인 Zilliz Cloud를 무료로 체험해보세요—10배 더 빠른 성능을 경험하세요! 지금 체험하기>>

Milvus
Zilliz
홈페이지
  • 사용자 가이드
  • Home
  • Docs
  • 사용자 가이드

  • 색인

  • 벡터 인덱스

  • IVF_FLAT

IVF_FLAT

IVF_FLAT 인덱스는 부동 소수점 벡터의 검색 성능을 향상시킬 수 있는 인덱싱 알고리즘입니다.

이 인덱스 유형은 빠른 쿼리 응답과 높은 정확도가 필요한 대규모 데이터 세트에 이상적이며, 특히 데이터 세트를 클러스터링하면 검색 공간을 줄일 수 있고 클러스터 데이터를 저장하기에 충분한 메모리를 사용할 수 있는 경우에 적합합니다.

개요

IVF_FLAT이라는 용어는 부동소수점 벡터의 인덱싱과 검색에 대한 이중 계층 접근 방식을 캡슐화하는 역파일 플랫(Inverted File Flat)의 약자입니다:

  • 반전된 파일(IVF): K-평균 클러스터링을 사용해 벡터 공간을 관리 가능한 영역으로 클러스터링하는 것을 말합니다. 각 클러스터는 중심점으로 표시되며, 그 안에 있는 벡터의 기준점 역할을 합니다.
  • 플랫: 정확한 거리 계산을 위해 각 클러스터 내에서 벡터가 압축이나 양자화 없이 원래의 형태(플랫 구조)로 저장됨을 나타냅니다.

다음 그림은 그 작동 방식을 보여줍니다:

ivf-flat-1.png ivf-flat-1 .png

이 인덱싱 방법은 검색 프로세스의 속도를 높여주지만 쿼리 임베딩에 가장 가까운 것으로 발견된 후보가 정확히 가장 가까운 후보가 아닐 수 있다는 잠재적인 단점이 있습니다. 쿼리 임베딩에 가장 가까운 임베딩이 가장 가까운 중심을 기준으로 선택한 클러스터와 다른 클러스터에 있는 경우 이러한 문제가 발생할 수 있습니다(아래 시각화 참조).

이 문제를 해결하기 위해 IVF_FLAT은 조정할 수 있는 두 가지 하이퍼파라미터를 제공합니다:

  • nlist: k-평균 알고리즘을 사용하여 생성할 파티션의 수를 지정합니다.
  • nprobe: 후보를 검색하는 동안 고려할 파티션 수를 지정합니다.

이제 nprobe 을 1 대신 3으로 설정하면 다음과 같은 결과가 나타납니다:

ivf-flat-2.png ivf-flat-2 .png

nprobe 값을 늘리면 검색에 더 많은 파티션을 포함할 수 있으므로 쿼리와 가장 가까운 임베딩이 다른 파티션에 있더라도 놓치지 않도록 할 수 있습니다. 하지만 더 많은 후보를 평가해야 하므로 검색 시간이 늘어나는 대가가 따릅니다. 인덱스 매개변수 조정에 대한 자세한 내용은 인덱스 매개변수를 참조하세요.

인덱스 구축

Milvus의 벡터 필드에 IVF_FLAT 인덱스를 구축하려면 add_index() 방법을 사용하여 index_type, metric_type 및 인덱스에 대한 추가 매개 변수를 지정합니다.

from pymilvus import MilvusClient

# Prepare index building params
index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="your_vector_field_name", # Name of the vector field to be indexed
    index_type="IVF_FLAT", # Type of the index to create
    index_name="vector_index", # Name of the index to create
    metric_type="L2", # Metric type used to measure similarity
    params={
        "nlist": 64, # Number of clusters for the index
    } # Index building params
)

이 구성에서는

  • index_type: 빌드할 인덱스 유형입니다. 이 예에서는 값을 IVF_FLAT 로 설정합니다.

  • metric_type: 벡터 간의 거리를 계산하는 데 사용되는 메서드입니다. 지원되는 값은 COSINE, L2, IP 입니다. 자세한 내용은 메트릭 유형을 참조하세요.

  • params: 인덱스 구축을 위한 추가 구성 옵션입니다.

    • nlist: 데이터 세트를 분할할 클러스터의 수입니다.

    IVF_FLAT 인덱스에 사용할 수 있는 더 많은 구축 매개변수에 대해 알아보려면 인덱스 구축 매개변수를 참조하세요.

인덱스 파라미터가 구성되면 create_index() 메서드를 직접 사용하거나 create_collection 메서드에서 인덱스 파라미터를 전달하여 인덱스를 생성할 수 있습니다. 자세한 내용은 컬렉션 만들기를 참조하세요.

인덱스에서 검색

인덱스가 구축되고 엔티티가 삽입되면 인덱스에서 유사도 검색을 수행할 수 있습니다.

search_params = {
    "params": {
        "nprobe": 10, # Number of clusters to search
    }
}

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    data=[[0.1, 0.2, 0.3, 0.4, 0.5]],  # Query vector
    limit=3,  # TopK results to return
    search_params=search_params
)

이 구성에서는

  • params: 색인에서 검색을 위한 추가 구성 옵션.

    • nprobe: 검색할 클러스터 수입니다.

    IVF_FLAT 인덱스에 사용할 수 있는 검색 매개변수에 대해 자세히 알아보려면 인덱스별 검색 매개변수를 참조하세요.

인덱스 매개변수

이 섹션에서는 인덱스를 만들고 인덱스에서 검색을 수행하는 데 사용되는 매개변수에 대한 개요를 제공합니다.

인덱스 구축 매개변수

다음 표에는 색인 작성params 에서 구성할 수 있는 매개변수가 나열되어 있습니다.

파라미터설명값 범위조정 제안
nlist인덱스 구축 시 k-평균 알고리즘을 사용하여 생성할 클러스터의 수. 중심점으로 표시되는 각 클러스터에는 벡터 목록이 저장됩니다. 이 매개변수를 늘리면 각 클러스터의 벡터 수가 줄어들어 더 작고 집중적인 파티션이 생성됩니다.유형: 정수
범위: [1, 65536]
기본값입니다: 128
nlist 값이 클수록 더 세분화된 클러스터를 생성하여 재검색률이 향상되지만 인덱스 구축 시간이 늘어납니다. 데이터 세트 크기와 사용 가능한 리소스에 따라 최적화하며, 대부분의 경우 이 범위 내에서 값을 설정하는 것이 좋습니다: [32, 4096].

인덱스별 검색 매개변수

다음 표에는 인덱스에서 검색할search_params.params 에서 구성할 수 있는 매개변수가 나열되어 있습니다.

파라미터설명값 범위조정 제안
nprobe후보를 검색할 클러스터의 수. 값이 클수록 더 많은 클러스터를 검색할 수 있으므로 검색 범위가 확장되어 회상률이 향상되지만 쿼리 대기 시간이 늘어납니다.유형: 정수
범위: [1, nlist]
기본값입니다: 8
이 값을 높이면 검색 회수율은 향상되지만 검색 속도가 느려질 수 있습니다. nprobenlist 에 비례하여 설정하여 속도와 정확도의 균형을 맞출 수 있습니다.
대부분의 경우 이 범위 내에서 값을 설정하는 것이 좋습니다: [1, nlist].

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
피드백

이 페이지가 도움이 되었나요?