-
Notifications
You must be signed in to change notification settings - Fork 197
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
IVF-Flat: make adaptive-centers behavior optional #1019
IVF-Flat: make adaptive-centers behavior optional #1019
Conversation
NB: breaking change (changed default behavior and the signature of one of the constructors). |
index(const handle_t& handle, | ||
raft::distance::DistanceType metric, | ||
uint32_t n_lists, | ||
bool adaptive_centers, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rather than making this an option on the index params object itself, why not just make it an optional argument on the extend()
function? That would enable the user to determine whether it should be done outside of the creation of the index. It's really not an index option, but a design detail based on a specific use-case / usage-pattern.
I was thinking of something like extend(....., update_centers=false);
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Although I see it sounds more intuitive to keep the parameter in the extend
, I'd disagree for two reasons:
- The update-centers routine does not go through the whole data (which would be costly), but only aggregates newly added data. For this to work, the
centers()
must always be up-to-date. Hence, we cannot allow doing an "updating"extend
after a "non-updating" one. Also from the logical point of view, this would break both alternative invariants (centers are neither constant nor up-to-date). - I hope to preserve the public API the same for all our (ANN) models:
build
gets all parameters through the struct,extend
never accepts extra parameters (and gets them from the index). Besides, thebuild
function would need to takeupdate_centers
as well, because it optionally callsextend
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. I just have some minor updates to the description of the new option.
Co-authored-by: Corey J. Nolet <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks Artem, the PR looks good to me!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Thanks again Artem!
@gpucibot merge |
Add an indexing parameter
adaptive_centers
(false by default) to control whetherindex.centers()
should be kept up-to-date with the cluster data or remain immutable.