Class faiss::gpu::GpuIndexIVF¶
-
class GpuIndexIVF : public faiss::gpu::GpuIndex¶
Base class of all GPU IVF index types. This (for now) deliberately does not inherit from IndexIVF, as many of the public data members and functionality in IndexIVF is not supported in the same manner on the GPU.
Subclassed by faiss::gpu::GpuIndexIVFFlat, faiss::gpu::GpuIndexIVFPQ, faiss::gpu::GpuIndexIVFScalarQuantizer
Public Functions
-
GpuIndexIVF(GpuResourcesProvider *provider, int dims, faiss::MetricType metric, float metricArg, int nlist, GpuIndexIVFConfig config = GpuIndexIVFConfig())¶
Version that auto-constructs a flat coarse quantizer based on the desired metric
-
GpuIndexIVF(GpuResourcesProvider *provider, Index *coarseQuantizer, int dims, faiss::MetricType metric, float metricArg, int nlist, GpuIndexIVFConfig config = GpuIndexIVFConfig())¶
Version that takes a coarse quantizer instance. The GpuIndexIVF does not own the coarseQuantizer instance by default (functions like IndexIVF).
-
~GpuIndexIVF() override¶
-
virtual void updateQuantizer() = 0¶
Should be called if the user ever changes the state of the IVF coarse quantizer manually (e.g., substitutes a new instance or changes vectors in the coarse quantizer outside the scope of training)
-
int getNumLists() const¶
Returns the number of inverted lists we’re managing.
-
int getListLength(int listId) const¶
Returns the number of vectors present in a particular inverted list.
-
std::vector<uint8_t> getListVectorData(int listId, bool gpuFormat = false) const¶
Return the encoded vector data contained in a particular inverted list, for debugging purposes. If gpuFormat is true, the data is returned as it is encoded in the GPU-side representation. Otherwise, it is converted to the CPU format. compliant format, while the native GPU format may differ.
-
std::vector<idx_t> getListIndices(int listId) const¶
Return the vector indices contained in a particular inverted list, for debugging purposes.
-
void setNumProbes(int nprobe)¶
Sets the number of list probes per query.
-
int getNumProbes() const¶
Returns our current number of list probes per query.
-
void search_preassigned(idx_t n, const float *x, idx_t k, const idx_t *assign, const float *centroid_dis, float *distances, idx_t *labels, bool store_pairs, const SearchParametersIVF *params = nullptr) const¶
Same interface as faiss::IndexIVF, in order to search a set of vectors pre-quantized by the IVF quantizer. Does not include IndexIVFStats as that can only be obtained on the host via a GPU d2h copy.
- Parameters:
n – nb of vectors to query
x – query vectors, size nx * d
assign – coarse quantization indices, size nx * nprobe
centroid_dis – distances to coarse centroids, size nx * nprobe
distance – output distances, size n * k
labels – output labels, size n * k
store_pairs – store inv list index + inv list offset instead in upper/lower 32 bit of result, instead of ids (used for reranking).
params – used to override the object’s search parameters
-
int getDevice() const¶
Returns the device that this index is resident on.
-
std::shared_ptr<GpuResources> getResources()¶
Returns a reference to our GpuResources object that manages memory, stream and handle resources on the GPU
-
void setMinPagingSize(size_t size)¶
Set the minimum data size for searches (in MiB) for which we use CPU -> GPU paging
-
size_t getMinPagingSize() const¶
Returns the current minimum data size for paged searches.
-
virtual void add(idx_t, const float *x) override¶
x
can be resident on the CPU or any GPU; copies are performed as needed Handles paged adds if the add set is too large; calls addInternal_
-
virtual void add_with_ids(idx_t n, const float *x, const idx_t *ids) override¶
x
andids
can be resident on the CPU or any GPU; copies are performed as needed Handles paged adds if the add set is too large; calls addInternal_
-
virtual void assign(idx_t n, const float *x, idx_t *labels, idx_t k = 1) const override¶
x
andlabels
can be resident on the CPU or any GPU; copies are performed as needed
-
virtual void search(idx_t n, const float *x, idx_t k, float *distances, idx_t *labels, const SearchParameters *params = nullptr) const override¶
x
,distances
andlabels
can be resident on the CPU or any GPU; copies are performed as needed
-
virtual void search_and_reconstruct(idx_t n, const float *x, idx_t k, float *distances, idx_t *labels, float *recons, const SearchParameters *params = nullptr) const override¶
x
,distances
andlabels
andrecons
can be resident on the CPU or any GPU; copies are performed as needed
-
virtual void compute_residual(const float *x, float *residual, idx_t key) const override¶
Overridden to force GPU indices to provide their own GPU-friendly implementation
-
virtual void compute_residual_n(idx_t n, const float *xs, float *residuals, const idx_t *keys) const override¶
Overridden to force GPU indices to provide their own GPU-friendly implementation
-
virtual void train(idx_t n, const float *x)¶
Perform training on a representative set of vectors
- Parameters:
n – nb of training vectors
x – training vecors, size n * d
-
virtual void range_search(idx_t n, const float *x, float radius, RangeSearchResult *result, const SearchParameters *params = nullptr) const¶
query n vectors of dimension d to the index.
return all vectors with distance < radius. Note that many indexes do not implement the range_search (only the k-NN search is mandatory).
- Parameters:
x – input vectors to search, size n * d
radius – search radius
result – result table
-
virtual void reset() = 0¶
removes all elements from the database.
-
virtual size_t remove_ids(const IDSelector &sel)¶
removes IDs from the index. Not supported by all indexes. Returns the number of elements removed.
-
virtual void reconstruct(idx_t key, float *recons) const¶
Reconstruct a stored vector (or an approximation if lossy coding)
this function may not be defined for some indexes
- Parameters:
key – id of the vector to reconstruct
recons – reconstucted vector (size d)
-
virtual void reconstruct_batch(idx_t n, const idx_t *keys, float *recons) const¶
Reconstruct several stored vectors (or an approximation if lossy coding)
this function may not be defined for some indexes
- Parameters:
n – number of vectors to reconstruct
keys – ids of the vectors to reconstruct (size n)
recons – reconstucted vector (size n * d)
-
virtual void reconstruct_n(idx_t i0, idx_t ni, float *recons) const¶
Reconstruct vectors i0 to i0 + ni - 1
this function may not be defined for some indexes
- Parameters:
recons – reconstucted vector (size ni * d)
-
virtual DistanceComputer *get_distance_computer() const¶
Get a DistanceComputer (defined in AuxIndexStructures) object for this kind of index.
DistanceComputer is implemented for indexes that support random access of their vectors.
-
virtual size_t sa_code_size() const¶
size of the produced codes in bytes
-
virtual void sa_encode(idx_t n, const float *x, uint8_t *bytes) const¶
encode a set of vectors
- Parameters:
n – number of vectors
x – input vectors, size n * d
bytes – output encoded vectors, size n * sa_code_size()
-
virtual void sa_decode(idx_t n, const uint8_t *bytes, float *x) const¶
decode a set of vectors
- Parameters:
n – number of vectors
bytes – input encoded vectors, size n * sa_code_size()
x – output vectors, size n * d
Public Members
-
ClusteringParameters cp¶
Exposing this like the CPU version for manipulation.
-
int nlist¶
Exposing this like the CPU version for query.
-
int nprobe¶
Exposing this like the CPU version for manipulation.
-
bool own_fields¶
Whether or not we own the coarse quantizer.
-
int d¶
vector dimension
-
bool verbose¶
verbosity level
-
MetricType metric_type¶
type of metric this index uses for search
-
float metric_arg¶
argument of the metric type
Protected Functions
-
void verifyIVFSettings_() const¶
-
virtual bool addImplRequiresIDs_() const override¶
Does addImpl_ require IDs? If so, and no IDs are provided, we will generate them sequentially based on the order in which the IDs are added
-
virtual void addImpl_(int n, const float *x, const idx_t *ids) override¶
Called from GpuIndex for add/add_with_ids.
-
virtual void searchImpl_(int n, const float *x, int k, float *distances, idx_t *labels, const SearchParameters *params) const override¶
Called from GpuIndex for search.
Protected Attributes
-
const GpuIndexIVFConfig ivfConfig_¶
Our configuration options.
-
std::shared_ptr<IVFBase> baseIndex_¶
For a trained/initialized index, this is a reference to the base class.
-
std::shared_ptr<GpuResources> resources_¶
Manages streams, cuBLAS handles and scratch memory for devices.
-
const GpuIndexConfig config_¶
Our configuration options.
-
size_t minPagedSize_¶
Size above which we page copies from the CPU to GPU.
Private Functions
-
void init_()¶
Shared initialization functions.
-
GpuIndexIVF(GpuResourcesProvider *provider, int dims, faiss::MetricType metric, float metricArg, int nlist, GpuIndexIVFConfig config = GpuIndexIVFConfig())¶