v0.0.2
Pre-release
Pre-release
SVS 0.0.2 Release Notes
pysvs
(Python)
- Deprecated
num_threads
keyword argument frompysvs.VamanaBuildParameters
and added
num_threads
keyword topysvs.Vamana.build
. - Exposed the
prune_to
parameter forpysvs.VamanaBuildParameters
(see description below
for an explanation of this change). - Added preliminary support for building
pysvs.Flat
andpysvs.Vamana
directly from
np.float16
arrays.
libsvs
(C++)
Breaking Changes
- Removed
nthreads
member ofVamanaBuildParameters
and added the number of threads as
an argument tosvs::Vamana::build
/svs::Vamana::build
. - Added a
prune_to
argument toVamanaBuildParameters
. This can be set to a value less
than graph_max_degree (heuristically, setting this to be 4 less is a good trade-off
between accuracy and speed). When pruning is performed, this parameter is used to
determine the number of candidates to generate after pruning. Setting this less than
graph_max_degree
greatly reduces the time spent when managing backedges. - Improved pruning rules for Euclidean and InnerProduct. Vamana index construction should
be faster and yield slightly improved indexes. - Added an experimental external-threading interface to
svs::index::VamanaIndex
. - Overhauled extension mechanisms using a
tag_invoke
style approach. This decouples the
svs::index::VamanaIndex
implementation from extensions like LVQ, reducing header
dependence and improving precision of algorithm customization.
Save/Load API
- Enabled context-free saving and loading of simple data structures. This allows simple
data structures to be saved and reloaded from TOML files without requiring access to the
saving/loading directory. Classes implementing this saving and loading allow for more
flexible storage. - Overhauled the implementation of saving and loading to enable more scalable implementation.
svs::data::SimpleData
family of data structures are now directly saveable and loadable
and no longer require proxy-classes.
Breaking Serialization Changes
- Changed LVQ-style datasets from
v0.0.1
tov0.0.2
: Removed centroids from being stored
with the ScaledBiasedCompressedDataset. Centroids are now stored in the higher level LVQ
dataset.
Back-end Changes
Changes to library internals that do not necessarily affect the top level API but could
affect performance or users relying on internal APIs.
- Improved the performance of the LVQ inner-product implementation.
- Moved dynamic uispatcher from the Python bindings into
libsvs
. - Data structure loading has been augmented with the
svs::lib::Lazy
class, allowing for
arbitrary deferred work to be executed when loading data structures. - Removed the old "access mode" style API for multi-level datasets, instead using
tag_invoke
for customization. - Reduced binary footprint by removing
std::function
use for general multi-threaded
functions. - Updated
ANNException
to usefmtlib
style message directly rather thanstd::ostream
style overloading. The new syntax turnstoANNEXCEPTION("Expected ", a, ", got ", b, "!");
ANNEXCEPTION("Expected {}, got {}!", a, b);
Binaries and Utilities
- Added a benchmarking framework in
/benchmark
to automatically run and aggregate index
construction and search for large scale benchmarks. Documentation is currently sparse
but planned.
Third Party
- Bump fmtlib from 9.1.0 to 10.1.1.