From 5970450d48f9a695dbea75e2763644ddfbc07d50 Mon Sep 17 00:00:00 2001 From: Cai Yudong Date: Thu, 5 Dec 2019 11:42:09 +0800 Subject: [PATCH] #705 fix search SQ8H crash without GPU resource (#706) --- CHANGELOG.md | 1 + core/src/db/engine/ExecutionEngineImpl.cpp | 1 + core/src/wrapper/VecIndex.cpp | 24 +++++++++++++++------- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de4226c21a..792c7f8f35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,7 @@ Please mark all change in change log and use the ticket from JIRA. - \#658 - Milvus error out when building SQ8H index without GPU resources - \#668 - Update badge of README - \#670 - Random failure of unittest db_test::SEARCH_TEST +- \#705 - Fix search SQ8H crash without GPU resource ## Feature - \#12 - Pure CPU version for Milvus diff --git a/core/src/db/engine/ExecutionEngineImpl.cpp b/core/src/db/engine/ExecutionEngineImpl.cpp index 322509b866..e10497f058 100644 --- a/core/src/db/engine/ExecutionEngineImpl.cpp +++ b/core/src/db/engine/ExecutionEngineImpl.cpp @@ -634,6 +634,7 @@ ExecutionEngineImpl::Init() { Status s = config.GetGpuResourceConfigBuildIndexResources(gpu_ids); if (!s.ok()) { gpu_num_ = knowhere::INVALID_VALUE; + return s; } for (auto id : gpu_ids) { if (gpu_num_ == id) { diff --git a/core/src/wrapper/VecIndex.cpp b/core/src/wrapper/VecIndex.cpp index 75f75fb983..824e5be13d 100644 --- a/core/src/wrapper/VecIndex.cpp +++ b/core/src/wrapper/VecIndex.cpp @@ -24,6 +24,8 @@ #include "knowhere/index/vector_index/IndexIVFSQ.h" #include "knowhere/index/vector_index/IndexNSG.h" #include "knowhere/index/vector_index/IndexSPTAG.h" +#include "server/Config.h" +#include "utils/Exception.h" #include "utils/Log.h" #ifdef MILVUS_GPU_VERSION @@ -145,6 +147,10 @@ GetVecIndexFactory(const IndexType& type, const Config& cfg) { index = std::make_shared(gpu_device); break; } + case IndexType::FAISS_IVFFLAT_MIX: { + index = std::make_shared(gpu_device); + return std::make_shared(index, IndexType::FAISS_IVFFLAT_MIX); + } case IndexType::FAISS_IVFPQ_GPU: { index = std::make_shared(gpu_device); break; @@ -161,16 +167,20 @@ GetVecIndexFactory(const IndexType& type, const Config& cfg) { index = std::make_shared(gpu_device); break; } - case IndexType::FAISS_IVFFLAT_MIX: { - index = std::make_shared(gpu_device); - return std::make_shared(index, IndexType::FAISS_IVFFLAT_MIX); - } + +#endif #ifdef CUSTOMIZATION case IndexType::FAISS_IVFSQ8_HYBRID: { - index = std::make_shared(gpu_device); - return std::make_shared(index, IndexType::FAISS_IVFSQ8_HYBRID); + server::Config& config = server::Config::GetInstance(); + bool gpu_resource_enable = true; + config.GetGpuResourceConfigEnable(gpu_resource_enable); + if (gpu_resource_enable) { + index = std::make_shared(gpu_device); + return std::make_shared(index, IndexType::FAISS_IVFSQ8_HYBRID); + } else { + throw Exception(DB_ERROR, "No GPU resources for IndexType::FAISS_IVFSQ8_HYBRID"); + } } -#endif #endif case IndexType::NSG_MIX: { // TODO(linxj): bug. index = std::make_shared(gpu_device);