提交 3fda33ac 编写于 作者: Y yu yunfeng

alter nprobe


Former-commit-id: 21cc3f6523580303bf702f7e616bcee7416a053f
上级 f30c3273
......@@ -5,7 +5,7 @@ server_config:
mode: single # milvus deployment type: single, cluster
db_config:
db_path: /opt/milvus # milvus data storage path
db_path: /tmp/milvus # milvus data storage path
db_backend_url: http://127.0.0.1 # meta database uri
index_building_threshold: 1024 # index building trigger threshold, default: 1024, unit: MB
archive_disk_threshold: 512 # triger archive action if storage size exceed this value, unit: GB
......@@ -22,7 +22,10 @@ metric_config:
license_config: # license configure
license_path: "/opt/milvus/system.license" # license file path
license_path: "/tmp/milvus/system.license" # license file path
cache_config: # cache configure
cpu_cache_capacity: 16 # how many memory are used as cache, unit: GB, range: 0 ~ less than total memory
engine_config:
nprobe: 3000
\ No newline at end of file
......@@ -14,6 +14,8 @@
#include "Index.h"
#include "faiss/index_io.h"
#include "faiss/IndexIVF.h"
#include <faiss/IVFlib.h>
#include "server/ServerConfig.h"
namespace zilliz {
namespace milvus {
......@@ -23,6 +25,32 @@ using std::string;
using std::unordered_map;
using std::vector;
class Nprobe {
public:
static Nprobe &GetInstance() {
static Nprobe instance;
return instance;
}
void SelectNprobe() {
using namespace zilliz::milvus::server;
ServerConfig &config = ServerConfig::GetInstance();
ConfigNode engine_config = config.GetConfig(CONFIG_ENGINE);
nprobe_ = engine_config.GetInt32Value(CONFIG_NPROBE, 1000);
}
size_t GetNprobe() {
return nprobe_;
}
private:
Nprobe() : nprobe_(1000) { SelectNprobe(); }
private:
size_t nprobe_;
};
Index::Index(const std::shared_ptr<faiss::Index> &raw_index) {
index_ = raw_index;
dim = index_->d;
......@@ -57,7 +85,8 @@ bool Index::add_with_ids(idx_t n, const float *xdata, const long *xids) {
bool Index::search(idx_t n, const float *data, idx_t k, float *distances, long *labels) const {
try {
if(auto ivf_index = std::dynamic_pointer_cast<faiss::IndexIVF>(index_)) {
ivf_index->nprobe = 100;
ivf_index->nprobe = Nprobe::GetInstance().GetNprobe();
std::cout << "nprobe = " << ivf_index->nprobe << std::endl;
}
index_->search(n, data, k, distances, labels);
}
......
......@@ -39,7 +39,7 @@ string Operand::get_index_type(const int &nb) {
}
case IVF: {
index_str += (ncent != 0 ? index_type + std::to_string(ncent) :
index_type + std::to_string(int(nb / 1000000.0 * 1638)));
index_type + std::to_string(int(nb / 1000000.0 * 16384)));
break;
}
case IDMAP: {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册