提交 75dff15a 编写于 作者: F fishpenguin

Read config once in optimizer


Former-commit-id: 956f173f30651845bcb6f6887f052d9509e037ed
上级 238a7449
...@@ -26,9 +26,11 @@ ...@@ -26,9 +26,11 @@
#include "optimizer/OnlyCPUPass.h" #include "optimizer/OnlyCPUPass.h"
#include "optimizer/OnlyGPUPass.h" #include "optimizer/OnlyGPUPass.h"
#include "optimizer/Optimizer.h" #include "optimizer/Optimizer.h"
#include "server/Config.h"
#include <memory> #include <memory>
#include <mutex> #include <mutex>
#include <string>
#include <vector> #include <vector>
namespace milvus { namespace milvus {
...@@ -95,11 +97,21 @@ class OptimizerInst { ...@@ -95,11 +97,21 @@ class OptimizerInst {
if (instance == nullptr) { if (instance == nullptr) {
std::lock_guard<std::mutex> lock(mutex_); std::lock_guard<std::mutex> lock(mutex_);
if (instance == nullptr) { if (instance == nullptr) {
server::Config& config = server::Config::GetInstance();
std::vector<std::string> search_resources;
bool has_cpu = false;
config.GetResourceConfigSearchResources(search_resources);
for (auto& resource : search_resources) {
if (resource == "cpu") {
has_cpu = true;
}
}
std::vector<PassPtr> pass_list; std::vector<PassPtr> pass_list;
pass_list.push_back(std::make_shared<LargeSQ8HPass>()); pass_list.push_back(std::make_shared<LargeSQ8HPass>());
pass_list.push_back(std::make_shared<HybridPass>()); pass_list.push_back(std::make_shared<HybridPass>());
pass_list.push_back(std::make_shared<OnlyCPUPass>()); pass_list.push_back(std::make_shared<OnlyCPUPass>());
pass_list.push_back(std::make_shared<OnlyGPUPass>()); pass_list.push_back(std::make_shared<OnlyGPUPass>(has_cpu));
instance = std::make_shared<Optimizer>(pass_list); instance = std::make_shared<Optimizer>(pass_list);
} }
} }
......
...@@ -35,13 +35,13 @@ OnlyCPUPass::Run(const TaskPtr& task) { ...@@ -35,13 +35,13 @@ OnlyCPUPass::Run(const TaskPtr& task) {
} }
auto gpu_id = get_gpu_pool(); auto gpu_id = get_gpu_pool();
if (gpu_id.empty()) { if (not gpu_id.empty())
ResourcePtr res_ptr = ResMgrInst::GetInstance()->GetResource("cpu"); return false;
auto label = std::make_shared<SpecResLabel>(std::weak_ptr<Resource>(res_ptr));
task->label() = label; ResourcePtr res_ptr = ResMgrInst::GetInstance()->GetResource("cpu");
return true; auto label = std::make_shared<SpecResLabel>(std::weak_ptr<Resource>(res_ptr));
} task->label() = label;
return false; return true;
} }
} // namespace scheduler } // namespace scheduler
......
...@@ -20,14 +20,16 @@ ...@@ -20,14 +20,16 @@
#include "scheduler/Utils.h" #include "scheduler/Utils.h"
#include "scheduler/task/SearchTask.h" #include "scheduler/task/SearchTask.h"
#include "scheduler/tasklabel/SpecResLabel.h" #include "scheduler/tasklabel/SpecResLabel.h"
#include "server/Config.h"
namespace milvus { namespace milvus {
namespace scheduler { namespace scheduler {
OnlyGPUPass::OnlyGPUPass(bool has_cpu) : has_cpu_(has_cpu) {
}
bool bool
OnlyGPUPass::Run(const TaskPtr& task) { OnlyGPUPass::Run(const TaskPtr& task) {
if (task->Type() != TaskType::SearchTask) if (task->Type() != TaskType::SearchTask || has_cpu_)
return false; return false;
auto search_task = std::static_pointer_cast<XSearchTask>(task); auto search_task = std::static_pointer_cast<XSearchTask>(task);
...@@ -36,29 +38,15 @@ OnlyGPUPass::Run(const TaskPtr& task) { ...@@ -36,29 +38,15 @@ OnlyGPUPass::Run(const TaskPtr& task) {
return false; return false;
} }
server::Config& config = server::Config::GetInstance();
std::vector<std::string> search_resources;
config.GetResourceConfigSearchResources(search_resources);
for (auto& resource : search_resources) {
if (resource == "cpu") {
return false;
}
}
auto gpu_id = get_gpu_pool(); auto gpu_id = get_gpu_pool();
if (!gpu_id.empty()) { if (gpu_id.empty())
ResourcePtr res_ptr = ResMgrInst::GetInstance()->GetResource(ResourceType::GPU, gpu_id[specified_gpu_id_]);
auto label = std::make_shared<SpecResLabel>(std::weak_ptr<Resource>(res_ptr));
task->label() = label;
} else {
return false; return false;
}
if (specified_gpu_id_ < gpu_id.size() - 1) { ResourcePtr res_ptr = ResMgrInst::GetInstance()->GetResource(ResourceType::GPU, gpu_id[specified_gpu_id_]);
++specified_gpu_id_; auto label = std::make_shared<SpecResLabel>(std::weak_ptr<Resource>(res_ptr));
} else { task->label() = label;
specified_gpu_id_ = 0;
} specified_gpu_id_ = specified_gpu_id_++ % gpu_id.size();
return true; return true;
} }
......
...@@ -34,7 +34,7 @@ namespace scheduler { ...@@ -34,7 +34,7 @@ namespace scheduler {
class OnlyGPUPass : public Pass { class OnlyGPUPass : public Pass {
public: public:
OnlyGPUPass() = default; explicit OnlyGPUPass(bool has_cpu);
public: public:
bool bool
...@@ -42,6 +42,7 @@ class OnlyGPUPass : public Pass { ...@@ -42,6 +42,7 @@ class OnlyGPUPass : public Pass {
private: private:
uint64_t specified_gpu_id_ = 0; uint64_t specified_gpu_id_ = 0;
bool has_cpu_ = false;
}; };
using OnlyGPUPassPtr = std::shared_ptr<OnlyGPUPass>; using OnlyGPUPassPtr = std::shared_ptr<OnlyGPUPass>;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册