Loading core/src/scheduler/SchedInst.h +13 −1 Original line number Diff line number Diff line Loading @@ -26,9 +26,11 @@ #include "optimizer/OnlyCPUPass.h" #include "optimizer/OnlyGPUPass.h" #include "optimizer/Optimizer.h" #include "server/Config.h" #include <memory> #include <mutex> #include <string> #include <vector> namespace milvus { Loading Loading @@ -95,11 +97,21 @@ class OptimizerInst { if (instance == nullptr) { std::lock_guard<std::mutex> lock(mutex_); 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; pass_list.push_back(std::make_shared<LargeSQ8HPass>()); pass_list.push_back(std::make_shared<HybridPass>()); 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); } } Loading core/src/scheduler/optimizer/OnlyCPUPass.cpp +7 −7 Original line number Diff line number Diff line Loading @@ -35,14 +35,14 @@ OnlyCPUPass::Run(const TaskPtr& task) { } auto gpu_id = get_gpu_pool(); if (gpu_id.empty()) { if (not gpu_id.empty()) return false; ResourcePtr res_ptr = ResMgrInst::GetInstance()->GetResource("cpu"); auto label = std::make_shared<SpecResLabel>(std::weak_ptr<Resource>(res_ptr)); task->label() = label; return true; } return false; } } // namespace scheduler } // namespace milvus core/src/scheduler/optimizer/OnlyGPUPass.cpp +10 −22 Original line number Diff line number Diff line Loading @@ -20,14 +20,16 @@ #include "scheduler/Utils.h" #include "scheduler/task/SearchTask.h" #include "scheduler/tasklabel/SpecResLabel.h" #include "server/Config.h" namespace milvus { namespace scheduler { OnlyGPUPass::OnlyGPUPass(bool has_cpu) : has_cpu_(has_cpu) { } bool OnlyGPUPass::Run(const TaskPtr& task) { if (task->Type() != TaskType::SearchTask) if (task->Type() != TaskType::SearchTask || has_cpu_) return false; auto search_task = std::static_pointer_cast<XSearchTask>(task); Loading @@ -36,29 +38,15 @@ OnlyGPUPass::Run(const TaskPtr& task) { 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") { auto gpu_id = get_gpu_pool(); if (gpu_id.empty()) return false; } } auto gpu_id = get_gpu_pool(); 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; } if (specified_gpu_id_ < gpu_id.size() - 1) { ++specified_gpu_id_; } else { specified_gpu_id_ = 0; } specified_gpu_id_ = specified_gpu_id_++ % gpu_id.size(); return true; } Loading core/src/scheduler/optimizer/OnlyGPUPass.h +2 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ namespace scheduler { class OnlyGPUPass : public Pass { public: OnlyGPUPass() = default; explicit OnlyGPUPass(bool has_cpu); public: bool Loading @@ -42,6 +42,7 @@ class OnlyGPUPass : public Pass { private: uint64_t specified_gpu_id_ = 0; bool has_cpu_ = false; }; using OnlyGPUPassPtr = std::shared_ptr<OnlyGPUPass>; Loading Loading
core/src/scheduler/SchedInst.h +13 −1 Original line number Diff line number Diff line Loading @@ -26,9 +26,11 @@ #include "optimizer/OnlyCPUPass.h" #include "optimizer/OnlyGPUPass.h" #include "optimizer/Optimizer.h" #include "server/Config.h" #include <memory> #include <mutex> #include <string> #include <vector> namespace milvus { Loading Loading @@ -95,11 +97,21 @@ class OptimizerInst { if (instance == nullptr) { std::lock_guard<std::mutex> lock(mutex_); 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; pass_list.push_back(std::make_shared<LargeSQ8HPass>()); pass_list.push_back(std::make_shared<HybridPass>()); 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); } } Loading
core/src/scheduler/optimizer/OnlyCPUPass.cpp +7 −7 Original line number Diff line number Diff line Loading @@ -35,14 +35,14 @@ OnlyCPUPass::Run(const TaskPtr& task) { } auto gpu_id = get_gpu_pool(); if (gpu_id.empty()) { if (not gpu_id.empty()) return false; ResourcePtr res_ptr = ResMgrInst::GetInstance()->GetResource("cpu"); auto label = std::make_shared<SpecResLabel>(std::weak_ptr<Resource>(res_ptr)); task->label() = label; return true; } return false; } } // namespace scheduler } // namespace milvus
core/src/scheduler/optimizer/OnlyGPUPass.cpp +10 −22 Original line number Diff line number Diff line Loading @@ -20,14 +20,16 @@ #include "scheduler/Utils.h" #include "scheduler/task/SearchTask.h" #include "scheduler/tasklabel/SpecResLabel.h" #include "server/Config.h" namespace milvus { namespace scheduler { OnlyGPUPass::OnlyGPUPass(bool has_cpu) : has_cpu_(has_cpu) { } bool OnlyGPUPass::Run(const TaskPtr& task) { if (task->Type() != TaskType::SearchTask) if (task->Type() != TaskType::SearchTask || has_cpu_) return false; auto search_task = std::static_pointer_cast<XSearchTask>(task); Loading @@ -36,29 +38,15 @@ OnlyGPUPass::Run(const TaskPtr& task) { 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") { auto gpu_id = get_gpu_pool(); if (gpu_id.empty()) return false; } } auto gpu_id = get_gpu_pool(); 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; } if (specified_gpu_id_ < gpu_id.size() - 1) { ++specified_gpu_id_; } else { specified_gpu_id_ = 0; } specified_gpu_id_ = specified_gpu_id_++ % gpu_id.size(); return true; } Loading
core/src/scheduler/optimizer/OnlyGPUPass.h +2 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ namespace scheduler { class OnlyGPUPass : public Pass { public: OnlyGPUPass() = default; explicit OnlyGPUPass(bool has_cpu); public: bool Loading @@ -42,6 +42,7 @@ class OnlyGPUPass : public Pass { private: uint64_t specified_gpu_id_ = 0; bool has_cpu_ = false; }; using OnlyGPUPassPtr = std::shared_ptr<OnlyGPUPass>; Loading