GPU_CAGRA

GPU_CAGRA 인덱스는 GPU에 최적화된 그래프 기반 인덱스입니다. 추론용 GPU를 사용하여 Milvus GPU 버전을 실행하는 것이 값비싼 훈련용 GPU를 사용하는 것보다 비용 효율적일 수 있습니다.

인덱스 구축

Milvus의 벡터 필드에 GPU_CAGRA 인덱스를 구축하려면 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_CAGRA", # 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={
        "intermediate_graph_degree": 64, # Affects recall and build time by determining the graph’s degree before pruning
        "graph_degree": 32, # Affets search performance and recall by setting the graph’s degree after pruning
        "build_algo": "IVF_PQ", # Selects the graph generation algorithm before pruning
        "cache_dataset_on_device": "true", # Decides whether to cache the original dataset in GPU memory
        "adapt_for_cpu": "false", # Decides whether to use GPU for index-building and CPU for search
    } # Index building params
)

이 구성에서는

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

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

  • params: 인덱스 구축을 위한 추가 구성 옵션입니다. GPU_CAGRA 인덱스에 사용할 수 있는 구축 매개변수에 대해 자세히 알아보려면 인덱스 구축 매개변수를 참조하세요.

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

인덱스에서 검색

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

search_params = {
    "params": {
        "itopk_size": 16, # Determines the size of intermediate results kept during the search
        "search_width": 8, # Specifies the number of entry points into the CAGRA graph during the 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: 색인에서 검색을 위한 추가 구성 옵션입니다. GPU_CAGRA 인덱스에 사용할 수 있는 검색 매개변수에 대해 자세히 알아보려면 인덱스별 검색 매개변수를 참조하세요.

로드 시 CPU 검색 활성화Compatible with Milvus 2.6.4+

로드 시 동적으로 CPU 검색을 활성화하려면 milvus.yaml 에서 다음 구성을 편집합니다:

# milvus.yaml
knowhere:
  GPU_CAGRA:
    load: 
      adapt_for_cpu: true

동작

  • load.adapt_for_cputrue 으로 설정하면 Milvus는 로드 중에 GPU_CAGRA 인덱스를 CPU 실행 가능 형식(HNSW와 유사)으로 변환합니다.

  • 이후 검색 작업은 원래 인덱스가 GPU용으로 빌드된 경우에도 CPU에서 실행됩니다.

  • 생략하거나 거짓인 경우 인덱스는 GPU에 유지되고 검색은 GPU에서 실행됩니다.

인덱스 구축을 위해 GPU 리소스가 예약되어 있지만 검색은 CPU에서 실행되는 하이브리드 또는 비용에 민감한 환경에서는 로드 시 CPU 적응을 사용합니다.

인덱스 매개변수

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

인덱스 구축 매개변수

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

파라미터

설명

기본값

intermediate_graph_degree

가지치기 전 그래프의 정도를 결정하여 리콜 및 빌드 시간에 영향을 줍니다. 권장 값은 32 또는 64 입니다.

128

graph_degree

가지치기 후 그래프의 차수를 설정하여 검색 성능과 리콜에 영향을 줍니다. 이 두 도의 차이가 클수록 빌드 시간이 길어집니다. 이 값은 intermediate_graph_degree 의 값보다 작아야 합니다.

64

build_algo

가지치기 전 그래프 생성 알고리즘을 선택합니다. 가능한 값

  • IVF_PQ: 더 높은 품질을 제공하지만 빌드 시간이 느립니다.

  • NN_DESCENT: 더 빠른 빌드를 제공하지만 잠재적으로 더 낮은 리콜을 제공합니다.

IVF_PQ

cache_dataset_on_device

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

  • "true": 원본 데이터 세트를 캐시하여 검색 결과를 구체화하여 회상률을 높입니다.

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

"false"

adapt_for_cpu

인덱스 구축에 GPU를 사용할지, 검색에 CPU를 사용할지 결정합니다.

이 파라미터를 "true" 로 설정하려면 검색 요청에 ef 파라미터가 있어야 합니다.

"false"

인덱스별 검색 매개변수

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

매개변수

설명

기본값

itopk_size

검색 중에 유지되는 중간 결과의 크기를 결정합니다. 값이 클수록 검색 성능이 저하되는 대신 회상률이 향상될 수 있습니다. 이 값은 최소한 최종 상위 k(한계) 값과 같아야 하며 일반적으로 2의 거듭제곱입니다(예: 16, 32, 64, 128).

Empty

search_width

검색 중에 CAGRA 그래프에 포함할 진입점 수를 지정합니다. 이 값을 늘리면 기억력이 향상될 수 있지만 검색 성능에 영향을 줄 수 있습니다(예: 1, 2, 4, 8, 16, 32).

Empty

min_iterations / max_iterations

검색 반복 프로세스를 제어합니다. 기본적으로 0 로 설정되어 있으며, CAGRA는 itopk_sizesearch_width 에 따라 반복 횟수를 자동으로 결정합니다. 이 값을 수동으로 조정하면 성능과 정확도의 균형을 맞추는 데 도움이 될 수 있습니다.

0

team_size

GPU에서 메트릭 거리를 계산하는 데 사용되는 CUDA 스레드 수를 지정합니다. 일반적인 값은 2의 거듭제곱에서 최대 32입니다(예: 2, 4, 8, 16, 32). 검색 성능에 약간의 영향을 미칩니다. 기본값은 0 이며, Milvus는 벡터 차원에 따라 team_size 을 자동으로 선택합니다.

0

ef

쿼리 시간/정확도 절충을 지정합니다. ef 값이 클수록 검색 정확도는 높아지지만 검색 속도는 느려집니다.

인덱스를 구축할 때 adapt_for_cputrue 으로 설정하는 경우 이 매개변수는 필수입니다.

[top_k, int_max]

Try Managed Milvus for Free

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

Get Started
피드백

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