diff --git a/CHANGELOG.md b/CHANGELOG.md index fb46e7143e..95bd0a2cbf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Please mark all change in change log and use the issue from GitHub ## Feature - \#3213 Allow users to specify a distance type at runtime for Flat index - \#3254 Allow more choices for the parameter ‘m’ of CPU IVF_PQ +- \#3606 Searching auto turn into CPU when the parameter 'nprobe' of IVF is larger than 2048 ## Improvement diff --git a/core/src/scheduler/selector/FaissIVFFlatPass.cpp b/core/src/scheduler/selector/FaissIVFFlatPass.cpp index 33670da907..b67650d5c0 100644 --- a/core/src/scheduler/selector/FaissIVFFlatPass.cpp +++ b/core/src/scheduler/selector/FaissIVFFlatPass.cpp @@ -12,11 +12,13 @@ #include "scheduler/selector/FaissIVFFlatPass.h" #include "cache/GpuCacheMgr.h" #include "config/Config.h" +#include "knowhere/index/vector_index/helpers/IndexParameter.h" #include "scheduler/SchedInst.h" #include "scheduler/Utils.h" #include "scheduler/task/SearchTask.h" #include "scheduler/tasklabel/SpecResLabel.h" #include "utils/Log.h" +#include "utils/ValidationUtil.h" namespace milvus { namespace scheduler { @@ -61,6 +63,11 @@ FaissIVFFlatPass::Run(const TaskPtr& task) { LOG_SERVER_DEBUG_ << LogOut("[%s][%d] FaissIVFFlatPass: nq < gpu_search_threshold, specify cpu to search!", "search", 0); res_ptr = ResMgrInst::GetInstance()->GetResource("cpu"); + } else if (search_job->extra_params()[knowhere::IndexParams::nprobe].get() < + milvus::server::QUERY_MAX_TOPK) { + LOG_SERVER_DEBUG_ << LogOut("[%s][%d] FaissIVFFlatPass: nprobe > gpu_nprobe_threshold, specify cpu to search!", + "search", 0); + res_ptr = ResMgrInst::GetInstance()->GetResource("cpu"); } else { LOG_SERVER_DEBUG_ << LogOut("[%s][%d] FaissIVFFlatPass: nq >= gpu_search_threshold, specify gpu %d to search!", "search", 0, search_gpus_[idx_]); diff --git a/core/src/scheduler/selector/FaissIVFPQPass.cpp b/core/src/scheduler/selector/FaissIVFPQPass.cpp index c91484ce90..dc7fbd851f 100644 --- a/core/src/scheduler/selector/FaissIVFPQPass.cpp +++ b/core/src/scheduler/selector/FaissIVFPQPass.cpp @@ -12,11 +12,13 @@ #include "scheduler/selector/FaissIVFPQPass.h" #include "cache/GpuCacheMgr.h" #include "config/Config.h" +#include "knowhere/index/vector_index/helpers/IndexParameter.h" #include "scheduler/SchedInst.h" #include "scheduler/Utils.h" #include "scheduler/task/SearchTask.h" #include "scheduler/tasklabel/SpecResLabel.h" #include "utils/Log.h" +#include "utils/ValidationUtil.h" #include @@ -63,6 +65,11 @@ FaissIVFPQPass::Run(const TaskPtr& task) { LOG_SERVER_DEBUG_ << LogOut("[%s][%d] FaissIVFPQPass: nq < gpu_search_threshold, specify cpu to search!", "search", 0); res_ptr = ResMgrInst::GetInstance()->GetResource("cpu"); + } else if (search_job->extra_params()[knowhere::IndexParams::nprobe].get() < + milvus::server::QUERY_MAX_TOPK) { + LOG_SERVER_DEBUG_ << LogOut("[%s][%d] FaissIVFFlatPass: nprobe > gpu_nprobe_threshold, specify cpu to search!", + "search", 0); + res_ptr = ResMgrInst::GetInstance()->GetResource("cpu"); } else { LOG_SERVER_DEBUG_ << LogOut("[%s][%d] FaissIVFPQPass: nq >= gpu_search_threshold, specify gpu %d to search!", "search", 0, search_gpus_[idx_]); diff --git a/core/src/scheduler/selector/FaissIVFSQ8HPass.cpp b/core/src/scheduler/selector/FaissIVFSQ8HPass.cpp index 66a45cffa8..4e9eb2401c 100644 --- a/core/src/scheduler/selector/FaissIVFSQ8HPass.cpp +++ b/core/src/scheduler/selector/FaissIVFSQ8HPass.cpp @@ -13,11 +13,13 @@ #include "scheduler/selector/FaissIVFSQ8HPass.h" #include "cache/GpuCacheMgr.h" #include "config/Config.h" +#include "knowhere/index/vector_index/helpers/IndexParameter.h" #include "scheduler/SchedInst.h" #include "scheduler/Utils.h" #include "scheduler/task/SearchTask.h" #include "scheduler/tasklabel/SpecResLabel.h" #include "utils/Log.h" +#include "utils/ValidationUtil.h" namespace milvus { namespace scheduler { @@ -61,6 +63,11 @@ FaissIVFSQ8HPass::Run(const TaskPtr& task) { LOG_SERVER_DEBUG_ << LogOut("[%s][%d] FaissIVFSQ8HPass: nq < gpu_search_threshold, specify cpu to search!", "search", 0); res_ptr = ResMgrInst::GetInstance()->GetResource("cpu"); + } else if (search_job->extra_params()[knowhere::IndexParams::nprobe].get() < + milvus::server::QUERY_MAX_TOPK) { + LOG_SERVER_DEBUG_ << LogOut("[%s][%d] FaissIVFFlatPass: nprobe > gpu_nprobe_threshold, specify cpu to search!", + "search", 0); + res_ptr = ResMgrInst::GetInstance()->GetResource("cpu"); } else { LOG_SERVER_DEBUG_ << LogOut("[%s][%d] FaissIVFSQ8HPass: nq >= gpu_search_threshold, specify gpu %d to search!", "search", 0, search_gpus_[idx_]); diff --git a/core/src/scheduler/selector/FaissIVFSQ8Pass.cpp b/core/src/scheduler/selector/FaissIVFSQ8Pass.cpp index 056ae01204..29f4def366 100644 --- a/core/src/scheduler/selector/FaissIVFSQ8Pass.cpp +++ b/core/src/scheduler/selector/FaissIVFSQ8Pass.cpp @@ -12,11 +12,13 @@ #include "scheduler/selector/FaissIVFSQ8Pass.h" #include "cache/GpuCacheMgr.h" #include "config/Config.h" +#include "knowhere/index/vector_index/helpers/IndexParameter.h" #include "scheduler/SchedInst.h" #include "scheduler/Utils.h" #include "scheduler/task/SearchTask.h" #include "scheduler/tasklabel/SpecResLabel.h" #include "utils/Log.h" +#include "utils/ValidationUtil.h" namespace milvus { namespace scheduler { @@ -61,6 +63,11 @@ FaissIVFSQ8Pass::Run(const TaskPtr& task) { LOG_SERVER_DEBUG_ << LogOut("[%s][%d] FaissIVFSQ8Pass: nq < gpu_search_threshold, specify cpu to search!", "search", 0); res_ptr = ResMgrInst::GetInstance()->GetResource("cpu"); + } else if (search_job->extra_params()[knowhere::IndexParams::nprobe].get() < + milvus::server::QUERY_MAX_TOPK) { + LOG_SERVER_DEBUG_ << LogOut("[%s][%d] FaissIVFFlatPass: nprobe > gpu_nprobe_threshold, specify cpu to search!", + "search", 0); + res_ptr = ResMgrInst::GetInstance()->GetResource("cpu"); } else { LOG_SERVER_DEBUG_ << LogOut("[%s][%d] FaissIVFSQ8Pass: nq >= gpu_search_threshold, specify gpu %d to search!", "search", 0, search_gpus_[idx_]);