GPU_IVF_PQ

GPU_IVF_PQ 인덱스는 고차원 벡터를 더 작은 하위 공간으로 분해하고 효율적인 유사도 검색을 위해 이를 정량화하는 역 파일 클러스터링과 제품 정량화(PQ)를 결합하여 IVF_PQ 개념을 기반으로 합니다. GPU 환경 전용으로 설계된 GPU_IVF_PQ는 병렬 처리를 활용해 계산을 가속화하고 대규모 벡터 데이터를 효과적으로 처리합니다. 기본 개념에 대한 자세한 내용은 IVF_PQ를 참조하세요.

인덱스 구축

Milvus에서 벡터 필드에 GPU_IVF_PQ 인덱스를 구축하려면 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="GPU_IVF_PQ", # 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={
        "m": 4, # Number of sub-vectors to split eahc vector into
    } # Index building params
)

이 구성에서는

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

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

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

    • m: 벡터를 분할할 하위 벡터의 수입니다.

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

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

인덱스에서 검색

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

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

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    anns_field="vector_field", # Vector field 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: 검색할 클러스터 수입니다.

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

인덱스 매개변수

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

인덱스 구축 매개변수

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

파라미터

설명

값 범위

조정 제안

IVF

nlist

인덱스 구축 중에 k-평균 알고리즘을 사용하여 생성할 클러스터의 수입니다.

유형: 정수 범위: [1, 65536]

기본값입니다: 128

nlist 값이 클수록 더 세분화된 클러스터를 생성하여 정확도가 향상되지만 인덱스 구축 시간이 늘어납니다. 데이터 세트 크기와 사용 가능한 리소스에 따라 최적화합니다. 대부분의 경우 이 범위 내에서 값을 설정하는 것이 좋습니다: [32, 4096].

PQ

m

양자화 프로세스 중에 각 고차원 벡터를 나눌 하위 벡터(양자화에 사용)의 수입니다.

유형: 정수 범위: [1, 65536]

기본값입니다: None

m 값이 클수록 정확도가 향상될 수 있지만 계산 복잡성과 메모리 사용량이 증가합니다. m 은 적절한 분해를 보장하기 위해 벡터 차원(D)의 제수여야 합니다. 일반적으로 권장되는 값은 m = D/2입니다.

대부분의 경우 이 범위 내에서 값을 설정하는 것이 좋습니다: [D/8, D].

nbits

각 하위 벡터의 중심 인덱스를 압축된 형태로 표현하는 데 사용되는 비트 수입니다. 각 코드북의 크기를 직접 결정합니다. 각 코드북에는 2n비트의 중심이 포함됩니다. 예를 들어 nbits 을 8로 설정하면 각 하위 벡터는 8비트 중심 인덱스로 표시됩니다. 따라서 해당 하위 벡터의 코드북에는28개 (256개)의 중심이 가능합니다.

유형: 정수 범위: [1, 24]

기본값입니다: 8

nbits 값이 클수록 코드북의 크기가 커져 원본 벡터를 더 정확하게 표현할 수 있습니다. 하지만 각 인덱스를 저장하는 데 더 많은 비트를 사용하므로 압축률이 떨어집니다. 대부분의 경우 이 범위 내에서 값을 설정하는 것이 좋습니다: [1, 16].

cache_dataset_on_device

원본 데이터 세트를 GPU 메모리에 캐시할지 여부를 결정합니다. 가능한 값

  • "true": 원본 데이터 세트를 캐시하여 검색 결과를 세분화하여 리콜을 향상시킵니다.

  • "false": GPU 메모리를 절약하기 위해 원본 데이터 집합을 캐시하지 않습니다.

유형: 문자열 범위: ["true", "false"]

기본값입니다: "false"

"true" 로 설정하면 검색 결과를 세분화하여 불러오기가 향상되지만 GPU 메모리를 더 많이 사용합니다. "false" 로 설정하면 GPU 메모리를 절약할 수 있습니다.

색인별 검색 매개변수

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

파라미터

설명

값 범위

조정 제안

IVF

nprobe

후보를 검색할 클러스터 수입니다.

유형: 정수 범위: [1, nlist]

기본값입니다: 8

값이 클수록 더 많은 클러스터를 검색할 수 있으므로 검색 범위가 확장되어 검색 회수율이 향상되지만 쿼리 대기 시간이 늘어납니다. 속도와 정확도의 균형을 맞추려면 nlist 에 비례하여 nprobe 를 설정합니다.

대부분의 경우 이 범위 내에서 값을 설정하는 것이 좋습니다: [1, nlist].

Try Managed Milvus for Free

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

Get Started
피드백

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