结构体 faiss::gpu::ToGpuClonerMultiple

struct ToGpuClonerMultiple : public faiss::Cloner, public faiss::gpu::GpuMultipleClonerOptions

专门用于 CPU -> 多个 GPU 的 Cloner

公共函数

ToGpuClonerMultiple(std::vector<GpuResourcesProvider*> &provider, std::vector<int> &devices, const GpuMultipleClonerOptions &options)
ToGpuClonerMultiple(const std::vector<ToGpuCloner> &sub_cloners, const GpuMultipleClonerOptions &options)
void copy_ivf_shard(const IndexIVF *index_ivf, IndexIVF *idx2, idx_t n, idx_t i)
Index *clone_Index_to_shards(const Index *index)
virtual Index *clone_Index(const Index *index) override

主函数

virtual VectorTransform *clone_VectorTransform(const VectorTransform*)
virtual IndexIVF *clone_IndexIVF(const IndexIVF*)

公共成员

std::vector<ToGpuCloner> sub_cloners
bool shard = false

是否将索引分片到 GPU 上,而不是在 GPU 上复制

int shard_type = 1

IndexIVF::copy_subset_to 子集类型。

bool common_ivf_quantizer = false

如果 IndexIVF 将被分发到多个 GPU,且使用单个通用的 IVF 量化器,则设置为 true,即只有倒排列表在子索引上分片(使用 IndexShardsIVF)。

IndicesOptions indicesOptions = INDICES_64_BIT

索引应该如何在支持索引的索引类型上存储(除了 GpuIndexFlat* 之外的任何类型)?

bool useFloat16CoarseQuantizer = false

粗量化器是否使用 float16?

bool useFloat16 = false

对于 GpuIndexIVFFlat,存储是否使用 float16? 对于 GpuIndexIVFPQ,中间计算是否使用 float16?

bool usePrecomputed = false

使用预计算表?

long reserveVecs = 0

在 invfile 中保留向量?

bool storeTransposed = false

对于 GpuIndexFlat,是否以转置布局存储数据?

bool verbose = false

在索引上设置 verbose 选项。

bool use_cuvs = false

使用 cuVS 实现

bool allowCpuCoarseQuantizer = false

此标志控制索引的粗量化器组件的 CPU 回退逻辑。 当设置为 false(默认)时,克隆器将为未在 GPU 上实现的索引抛出异常。 当设置为 true 时,它将回退到 CPU 实现。