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_cpu을true으로 설정하면 Milvus는 로드 중에 GPU_CAGRA 인덱스를 CPU 실행 가능 형식(HNSW와 유사)으로 변환합니다.이후 검색 작업은 원래 인덱스가 GPU용으로 빌드된 경우에도 CPU에서 실행됩니다.
생략하거나 거짓인 경우 인덱스는 GPU에 유지되고 검색은 GPU에서 실행됩니다.
인덱스 구축을 위해 GPU 리소스가 예약되어 있지만 검색은 CPU에서 실행되는 하이브리드 또는 비용에 민감한 환경에서는 로드 시 CPU 적응을 사용합니다.
인덱스 매개변수
이 섹션에서는 인덱스 구축 및 인덱스에서 검색을 수행하는 데 사용되는 매개변수에 대한 개요를 제공합니다.
인덱스 구축 매개변수
다음 표에는 인덱스 구축 시 params 에서 구성할 수 있는 매개변수가 나열되어 있습니다.
파라미터 |
설명 |
기본값 |
|---|---|---|
|
가지치기 전 그래프의 정도를 결정하여 리콜 및 빌드 시간에 영향을 줍니다. 권장 값은 |
|
|
가지치기 후 그래프의 차수를 설정하여 검색 성능과 리콜에 영향을 줍니다. 이 두 도의 차이가 클수록 빌드 시간이 길어집니다. 이 값은 |
|
|
가지치기 전 그래프 생성 알고리즘을 선택합니다. 가능한 값
|
|
|
원본 데이터세트를 GPU 메모리에 캐시할지 여부를 결정합니다. 가능한 값
|
|
|
인덱스 구축에 GPU를 사용할지, 검색에 CPU를 사용할지 결정합니다. 이 파라미터를 |
|
인덱스별 검색 매개변수
다음 표에는 인덱스에서 검색할 때 search_params.params 에서 구성할 수 있는 매개변수가 나열되어 있습니다.
매개변수 |
설명 |
기본값 |
|---|---|---|
|
검색 중에 유지되는 중간 결과의 크기를 결정합니다. 값이 클수록 검색 성능이 저하되는 대신 회상률이 향상될 수 있습니다. 이 값은 최소한 최종 상위 k(한계) 값과 같아야 하며 일반적으로 2의 거듭제곱입니다(예: 16, 32, 64, 128). |
Empty |
|
검색 중에 CAGRA 그래프에 포함할 진입점 수를 지정합니다. 이 값을 늘리면 기억력이 향상될 수 있지만 검색 성능에 영향을 줄 수 있습니다(예: 1, 2, 4, 8, 16, 32). |
Empty |
|
검색 반복 프로세스를 제어합니다. 기본적으로 |
|
|
GPU에서 메트릭 거리를 계산하는 데 사용되는 CUDA 스레드 수를 지정합니다. 일반적인 값은 2의 거듭제곱에서 최대 32입니다(예: 2, 4, 8, 16, 32). 검색 성능에 약간의 영향을 미칩니다. 기본값은 |
|
|
쿼리 시간/정확도 절충을 지정합니다. 인덱스를 구축할 때 |
|