Multi-GPU Cagra

View as Markdown

Source header: cuvs/neighbors/mg_cagra.h

Multi-GPU CAGRA index build parameters

cuvsMultiGpuCagraIndexParams

Multi-GPU parameters to build CAGRA Index

This structure extends the base CAGRA index parameters with multi-GPU specific settings.

struct cuvsMultiGpuCagraIndexParams {
cuvsCagraIndexParams_t base_params;
cuvsMultiGpuDistributionMode mode;
};

Fields

NameTypeDescription
base_paramscuvsCagraIndexParams_tBase CAGRA index parameters
modecuvsMultiGpuDistributionModeDistribution mode for multi-GPU setup

cuvsMultiGpuCagraIndexParamsCreate

Allocate Multi-GPU CAGRA Index params, and populate with default values

cuvsError_t cuvsMultiGpuCagraIndexParamsCreate(cuvsMultiGpuCagraIndexParams_t* index_params);

Parameters

NameDirectionTypeDescription
index_paramsincuvsMultiGpuCagraIndexParams_t*cuvsMultiGpuCagraIndexParams_t to allocate

Returns

cuvsError_t

cuvsMultiGpuCagraIndexParamsDestroy

De-allocate Multi-GPU CAGRA Index params

cuvsError_t cuvsMultiGpuCagraIndexParamsDestroy(cuvsMultiGpuCagraIndexParams_t index_params);

Parameters

NameDirectionTypeDescription
index_paramsincuvsMultiGpuCagraIndexParams_t

Returns

cuvsError_t

Multi-GPU CAGRA index search parameters

cuvsMultiGpuCagraSearchParams

Multi-GPU parameters to search CAGRA index

This structure extends the base CAGRA search parameters with multi-GPU specific settings.

struct cuvsMultiGpuCagraSearchParams {
cuvsCagraSearchParams_t base_params;
cuvsMultiGpuReplicatedSearchMode search_mode;
cuvsMultiGpuShardedMergeMode merge_mode;
int64_t n_rows_per_batch;
};

Fields

NameTypeDescription
base_paramscuvsCagraSearchParams_tBase CAGRA search parameters
search_modecuvsMultiGpuReplicatedSearchModeReplicated search mode
merge_modecuvsMultiGpuShardedMergeModeSharded merge mode
n_rows_per_batchint64_tNumber of rows per batch

cuvsMultiGpuCagraSearchParamsCreate

Allocate Multi-GPU CAGRA search params, and populate with default values

cuvsError_t cuvsMultiGpuCagraSearchParamsCreate(cuvsMultiGpuCagraSearchParams_t* params);

Parameters

NameDirectionTypeDescription
paramsincuvsMultiGpuCagraSearchParams_t*cuvsMultiGpuCagraSearchParams_t to allocate

Returns

cuvsError_t

cuvsMultiGpuCagraSearchParamsDestroy

De-allocate Multi-GPU CAGRA search params

cuvsError_t cuvsMultiGpuCagraSearchParamsDestroy(cuvsMultiGpuCagraSearchParams_t params);

Parameters

NameDirectionTypeDescription
paramsincuvsMultiGpuCagraSearchParams_t

Returns

cuvsError_t

Multi-GPU CAGRA index

cuvsMultiGpuCagraIndex

Struct to hold address of cuvs::neighbors::mg_index<cagra::index> and its active trained dtype

typedef struct {
uintptr_t addr;
DLDataType dtype;
} cuvsMultiGpuCagraIndex;

Fields

NameTypeDescription
addruintptr_t
dtypeDLDataType

cuvsMultiGpuCagraIndexCreate

Allocate Multi-GPU CAGRA index

cuvsError_t cuvsMultiGpuCagraIndexCreate(cuvsMultiGpuCagraIndex_t* index);

Parameters

NameDirectionTypeDescription
indexincuvsMultiGpuCagraIndex_t*cuvsMultiGpuCagraIndex_t to allocate

Returns

cuvsError_t

cuvsMultiGpuCagraIndexDestroy

De-allocate Multi-GPU CAGRA index

cuvsError_t cuvsMultiGpuCagraIndexDestroy(cuvsMultiGpuCagraIndex_t index);

Parameters

NameDirectionTypeDescription
indexincuvsMultiGpuCagraIndex_tcuvsMultiGpuCagraIndex_t to de-allocate

Returns

cuvsError_t

Multi-GPU CAGRA index build

cuvsMultiGpuCagraBuild

Build a Multi-GPU CAGRA index

cuvsError_t cuvsMultiGpuCagraBuild(cuvsResources_t res,
cuvsMultiGpuCagraIndexParams_t params,
DLManagedTensor* dataset_tensor,
cuvsMultiGpuCagraIndex_t index);

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
paramsincuvsMultiGpuCagraIndexParams_tMulti-GPU CAGRA index parameters
dataset_tensorinDLManagedTensor*DLManagedTensor* training dataset
indexoutcuvsMultiGpuCagraIndex_tMulti-GPU CAGRA index

Returns

cuvsError_t

cuvsMultiGpuCagraSearch

Search a Multi-GPU CAGRA index

cuvsError_t cuvsMultiGpuCagraSearch(cuvsResources_t res,
cuvsMultiGpuCagraSearchParams_t params,
cuvsMultiGpuCagraIndex_t index,
DLManagedTensor* queries_tensor,
DLManagedTensor* neighbors_tensor,
DLManagedTensor* distances_tensor);

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
paramsincuvsMultiGpuCagraSearchParams_tMulti-GPU CAGRA search parameters
indexincuvsMultiGpuCagraIndex_tMulti-GPU CAGRA index
queries_tensorinDLManagedTensor*DLManagedTensor* queries dataset
neighbors_tensoroutDLManagedTensor*DLManagedTensor* output neighbors
distances_tensoroutDLManagedTensor*DLManagedTensor* output distances

Returns

cuvsError_t

Multi-GPU CAGRA index extend

cuvsMultiGpuCagraExtend

Extend a Multi-GPU CAGRA index

cuvsError_t cuvsMultiGpuCagraExtend(cuvsResources_t res,
cuvsMultiGpuCagraIndex_t index,
DLManagedTensor* new_vectors_tensor,
DLManagedTensor* new_indices_tensor);

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
indexin,outcuvsMultiGpuCagraIndex_tMulti-GPU CAGRA index to extend
new_vectors_tensorinDLManagedTensor*DLManagedTensor* new vectors to add
new_indices_tensorinDLManagedTensor*DLManagedTensor* new indices (optional, can be NULL)

Returns

cuvsError_t

Multi-GPU CAGRA index serialize

cuvsMultiGpuCagraSerialize

Serialize a Multi-GPU CAGRA index to file

cuvsError_t cuvsMultiGpuCagraSerialize(cuvsResources_t res,
cuvsMultiGpuCagraIndex_t index,
const char* filename);

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
indexincuvsMultiGpuCagraIndex_tMulti-GPU CAGRA index to serialize
filenameinconst char*Path to the output file

Returns

cuvsError_t

Multi-GPU CAGRA index deserialize

cuvsMultiGpuCagraDeserialize

Deserialize a Multi-GPU CAGRA index from file

cuvsError_t cuvsMultiGpuCagraDeserialize(cuvsResources_t res,
const char* filename,
cuvsMultiGpuCagraIndex_t index);

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
filenameinconst char*Path to the input file
indexoutcuvsMultiGpuCagraIndex_tMulti-GPU CAGRA index

Returns

cuvsError_t

Multi-GPU CAGRA index distribute

cuvsMultiGpuCagraDistribute

Distribute a local CAGRA index to create a Multi-GPU index

cuvsError_t cuvsMultiGpuCagraDistribute(cuvsResources_t res,
const char* filename,
cuvsMultiGpuCagraIndex_t index);

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
filenameinconst char*Path to the local index file
indexoutcuvsMultiGpuCagraIndex_tMulti-GPU CAGRA index

Returns

cuvsError_t