Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
milvus
提交
7f5c2fef
milvus
项目概览
BaiXuePrincess
/
milvus
与 Fork 源项目一致
从无法访问的项目Fork
通知
7
Star
4
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
milvus
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7f5c2fef
编写于
11月 19, 2019
作者:
F
fishpenguin
浏览文件
操作
浏览文件
下载
差异文件
Remove OnlyGpuPass and add MILVUS_GPU_VERSION define
上级
0a858939
0d1923c6
变更
22
隐藏空白更改
内联
并排
Showing
22 changed file
with
378 addition
and
601 deletion
+378
-601
core/conf/server_cpu_config.template
core/conf/server_cpu_config.template
+8
-7
core/conf/server_gpu_config.template
core/conf/server_gpu_config.template
+6
-8
core/src/cache/GpuCacheMgr.cpp
core/src/cache/GpuCacheMgr.cpp
+2
-2
core/src/db/engine/ExecutionEngineImpl.cpp
core/src/db/engine/ExecutionEngineImpl.cpp
+11
-2
core/src/scheduler/SchedInst.cpp
core/src/scheduler/SchedInst.cpp
+8
-11
core/src/scheduler/SchedInst.h
core/src/scheduler/SchedInst.h
+7
-16
core/src/scheduler/TaskCreator.cpp
core/src/scheduler/TaskCreator.cpp
+1
-2
core/src/scheduler/Utils.cpp
core/src/scheduler/Utils.cpp
+0
-76
core/src/scheduler/Utils.h
core/src/scheduler/Utils.h
+0
-6
core/src/scheduler/optimizer/BuildIndexPass.cpp
core/src/scheduler/optimizer/BuildIndexPass.cpp
+4
-10
core/src/scheduler/optimizer/BuildIndexPass.h
core/src/scheduler/optimizer/BuildIndexPass.h
+2
-2
core/src/scheduler/optimizer/LargeSQ8HPass.cpp
core/src/scheduler/optimizer/LargeSQ8HPass.cpp
+1
-1
core/src/scheduler/optimizer/LargeSQ8HPass.h
core/src/scheduler/optimizer/LargeSQ8HPass.h
+1
-0
core/src/scheduler/optimizer/OnlyCPUPass.cpp
core/src/scheduler/optimizer/OnlyCPUPass.cpp
+0
-4
core/src/scheduler/optimizer/OnlyGPUPass.cpp
core/src/scheduler/optimizer/OnlyGPUPass.cpp
+0
-54
core/src/scheduler/optimizer/OnlyGPUPass.h
core/src/scheduler/optimizer/OnlyGPUPass.h
+0
-51
core/src/server/Config.cpp
core/src/server/Config.cpp
+228
-229
core/src/server/Config.h
core/src/server/Config.h
+40
-45
core/src/wrapper/KnowhereResource.cpp
core/src/wrapper/KnowhereResource.cpp
+5
-12
core/unittest/db/utils.cpp
core/unittest/db/utils.cpp
+4
-0
core/unittest/server/test_config.cpp
core/unittest/server/test_config.cpp
+50
-62
core/unittest/server/test_rpc.cpp
core/unittest/server/test_rpc.cpp
+0
-1
未找到文件。
core/conf/server_cpu_config.template
浏览文件 @
7f5c2fef
...
...
@@ -27,8 +27,7 @@ metric_config:
port: 8080 # port prometheus uses to fetch metrics, must in range [1025, 65534]
cache_config:
cpu_cache_capacity: 16 # GB, CPU memory used for cache, must be a positive integer
cpu_cache_threshold: 0.85 # percentage of data that will be kept when cache cleanup is triggered, must be in range (0.0, 1.0]
cpu_cache_capacity: 16 # GB, size of CPU memory used for cache, must be a positive integer
cache_insert_data: false # whether to load inserted data into cache, must be a boolean
engine_config:
...
...
@@ -36,8 +35,10 @@ engine_config:
# if nq >= use_blas_threshold, use OpenBlas, slower with stable response times
gpu_search_threshold: 1000 # threshold beyond which the search computation is executed on GPUs only
resource_config:
search_resources: # define the devices used for search computation, must be in format: cpu or gpux
- cpu
index_build_resources: # define the devices used for index building, must be in format: cpu or gpux
- cpu
gpu_resource_config:
enable_gpu: false # whether to enable GPU resources
cache_capacity: 4 # GB, size of GPU memory per card used for cache, must be a positive integer
search_resources: # define the GPU devices used for search computation, must be in format gpux
- gpu0
build_index_resources: # define the GPU devices used for index building, must be in format gpux
- gpu0
core/conf/server_gpu_config.template
浏览文件 @
7f5c2fef
...
...
@@ -27,10 +27,7 @@ metric_config:
port: 8080 # port prometheus uses to fetch metrics, must in range [1025, 65534]
cache_config:
cpu_cache_capacity: 16 # GB, CPU memory used for cache, must be a positive integer
cpu_cache_threshold: 0.85 # percentage of data that will be kept when cache cleanup is triggered, must be in range (0.0, 1.0]
gpu_cache_capacity: 4 # GB, GPU memory used for cache, must be a positive integer
gpu_cache_threshold: 0.85 # percentage of data that will be kept when cache cleanup is triggered, must be in range (0.0, 1.0]
cpu_cache_capacity: 16 # GB, size of CPU memory used for cache, must be a positive integer
cache_insert_data: false # whether to load inserted data into cache, must be a boolean
engine_config:
...
...
@@ -38,9 +35,10 @@ engine_config:
# if nq >= use_blas_threshold, use OpenBlas, slower with stable response times
gpu_search_threshold: 1000 # threshold beyond which the search computation is executed on GPUs only
resource_config:
search_resources: # define the devices used for search computation, must be in format: cpu or gpux
- cpu
gpu_resource_config:
enable_gpu: true # whether to enable GPU resources
cache_capacity: 4 # GB, size of GPU memory per card used for cache, must be a positive integer
search_resources: # define the GPU devices used for search computation, must be in format gpux
- gpu0
index_build_resources: # define the devices used for index building, must be in format: cpu or
gpux
build_index_resources: # define the GPU devices used for index building, must be in format
gpux
- gpu0
core/src/cache/GpuCacheMgr.cpp
浏览文件 @
7f5c2fef
...
...
@@ -37,7 +37,7 @@ GpuCacheMgr::GpuCacheMgr() {
Status
s
;
int64_t
gpu_cache_cap
;
s
=
config
.
Get
CacheConfigGpu
CacheCapacity
(
gpu_cache_cap
);
s
=
config
.
Get
GpuResourceConfig
CacheCapacity
(
gpu_cache_cap
);
if
(
!
s
.
ok
())
{
SERVER_LOG_ERROR
<<
s
.
message
();
}
...
...
@@ -45,7 +45,7 @@ GpuCacheMgr::GpuCacheMgr() {
cache_
=
std
::
make_shared
<
Cache
<
DataObjPtr
>>
(
cap
,
1UL
<<
32
);
float
gpu_mem_threshold
;
s
=
config
.
Get
CacheConfigGpu
CacheThreshold
(
gpu_mem_threshold
);
s
=
config
.
Get
GpuResourceConfig
CacheThreshold
(
gpu_mem_threshold
);
if
(
!
s
.
ok
())
{
SERVER_LOG_ERROR
<<
s
.
message
();
}
...
...
core/src/db/engine/ExecutionEngineImpl.cpp
浏览文件 @
7f5c2fef
...
...
@@ -144,7 +144,14 @@ ExecutionEngineImpl::HybridLoad() const {
}
const
std
::
string
key
=
location_
+
".quantizer"
;
std
::
vector
<
uint64_t
>
gpus
=
scheduler
::
get_gpu_pool
();
server
::
Config
&
config
=
server
::
Config
::
GetInstance
();
std
::
vector
<
int32_t
>
gpus
;
Status
s
=
config
.
GetGpuResourceConfigSearchResources
(
gpus
);
if
(
!
s
.
ok
())
{
ENGINE_LOG_ERROR
<<
s
.
message
();
return
;
}
// cache hit
{
...
...
@@ -578,7 +585,9 @@ ExecutionEngineImpl::GpuCache(uint64_t gpu_id) {
// TODO(linxj): remove.
Status
ExecutionEngineImpl
::
Init
()
{
auto
gpu_ids
=
scheduler
::
get_build_resources
();
server
::
Config
&
config
=
server
::
Config
::
GetInstance
();
std
::
vector
<
int32_t
>
gpu_ids
;
Status
s
=
config
.
GetGpuResourceConfigBuildIndexResources
(
gpu_ids
);
for
(
auto
id
:
gpu_ids
)
{
if
(
gpu_num_
==
id
)
{
return
Status
::
OK
();
...
...
core/src/scheduler/SchedInst.cpp
浏览文件 @
7f5c2fef
...
...
@@ -45,17 +45,6 @@ std::mutex BuildMgrInst::mutex_;
void
load_simple_config
()
{
server
::
Config
&
config
=
server
::
Config
::
GetInstance
();
std
::
string
mode
;
config
.
GetResourceConfigMode
(
mode
);
std
::
vector
<
std
::
string
>
pool
;
config
.
GetResourceConfigSearchResources
(
pool
);
// get resources
auto
gpu_ids
=
get_gpu_pool
();
auto
build_gpu_ids
=
get_build_resources
();
// create and connect
ResMgrInst
::
GetInstance
()
->
Add
(
ResourceFactory
::
Create
(
"disk"
,
"DISK"
,
0
,
true
,
false
));
...
...
@@ -63,6 +52,13 @@ load_simple_config() {
ResMgrInst
::
GetInstance
()
->
Add
(
ResourceFactory
::
Create
(
"cpu"
,
"CPU"
,
0
,
true
,
true
));
ResMgrInst
::
GetInstance
()
->
Connect
(
"disk"
,
"cpu"
,
io
);
// get resources
#ifdef MILVUS_GPU_VERSION
server
::
Config
&
config
=
server
::
Config
::
GetInstance
();
std
::
vector
<
int32_t
>
gpu_ids
;
config
.
GetGpuResourceConfigSearchResources
(
gpu_ids
);
std
::
vector
<
int32_t
>
build_gpu_ids
;
config
.
GetGpuResourceConfigBuildIndexResources
(
build_gpu_ids
);
auto
pcie
=
Connection
(
"pcie"
,
12000
);
std
::
vector
<
int64_t
>
not_find_build_ids
;
...
...
@@ -89,6 +85,7 @@ load_simple_config() {
ResourceFactory
::
Create
(
std
::
to_string
(
not_find_id
),
"GPU"
,
not_find_id
,
true
,
true
));
ResMgrInst
::
GetInstance
()
->
Connect
(
"cpu"
,
std
::
to_string
(
not_find_id
),
pcie
);
}
#endif
}
void
...
...
core/src/scheduler/SchedInst.h
浏览文件 @
7f5c2fef
...
...
@@ -21,14 +21,13 @@
#include "JobMgr.h"
#include "ResourceMgr.h"
#include "Scheduler.h"
#include "Utils.h"
#include "optimizer/BuildIndexPass.h"
#include "optimizer/HybridPass.h"
#include "optimizer/LargeSQ8HPass.h"
#include "optimizer/OnlyCPUPass.h"
#include "optimizer/OnlyGPUPass.h"
#include "optimizer/Optimizer.h"
#include "server/Config.h"
#include "Utils.h"
#include <memory>
#include <mutex>
...
...
@@ -99,25 +98,17 @@ 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
;
}
}
auto
build_resources
=
get_build_resources
();
std
::
vector
<
PassPtr
>
pass_list
;
pass_list
.
push_back
(
std
::
make_shared
<
LargeSQ8HPass
>
());
pass_list
.
push_back
(
std
::
make_shared
<
HybridPass
>
());
#ifdef MILVUS_CPU_VERSION
pass_list
.
push_back
(
std
::
make_shared
<
OnlyCPUPass
>
());
pass_list
.
push_back
(
std
::
make_shared
<
OnlyGPUPass
>
(
has_cpu
));
#else
server
::
Config
&
config
=
server
::
Config
::
GetInstance
();
std
::
vector
<
int32_t
>
build_resources
;
config
.
GetGpuResourceConfigBuildIndexResources
(
build_resources
);
pass_list
.
push_back
(
std
::
make_shared
<
BuildIndexPass
>
(
build_resources
));
#endif
instance
=
std
::
make_shared
<
Optimizer
>
(
pass_list
);
}
}
...
...
core/src/scheduler/TaskCreator.cpp
浏览文件 @
7f5c2fef
...
...
@@ -70,8 +70,7 @@ TaskCreator::Create(const DeleteJobPtr& job) {
std
::
vector
<
TaskPtr
>
TaskCreator
::
Create
(
const
BuildIndexJobPtr
&
job
)
{
std
::
vector
<
TaskPtr
>
tasks
;
// TODO(yukun): remove "disk" hardcode here
ResourcePtr
res_ptr
=
ResMgrInst
::
GetInstance
()
->
GetResource
(
"disk"
);
ResourcePtr
res_ptr
=
ResMgrInst
::
GetInstance
()
->
GetResource
(
"cpu"
);
for
(
auto
&
to_index_file
:
job
->
to_index_files
())
{
auto
label
=
std
::
make_shared
<
SpecResLabel
>
(
std
::
weak_ptr
<
Resource
>
(
res_ptr
));
...
...
core/src/scheduler/Utils.cpp
浏览文件 @
7f5c2fef
...
...
@@ -17,7 +17,6 @@
#include "scheduler/Utils.h"
#include "server/Config.h"
#include "utils/Log.h"
#ifdef MILVUS_GPU_VERSION
#include <cuda_runtime.h>
...
...
@@ -46,80 +45,5 @@ get_num_gpu() {
return
n_devices
;
}
std
::
vector
<
uint64_t
>
get_gpu_pool
()
{
std
::
vector
<
uint64_t
>
gpu_pool
;
server
::
Config
&
config
=
server
::
Config
::
GetInstance
();
std
::
vector
<
std
::
string
>
pool
;
Status
s
=
config
.
GetResourceConfigSearchResources
(
pool
);
if
(
!
s
.
ok
())
{
SERVER_LOG_ERROR
<<
s
.
message
();
}
std
::
set
<
uint64_t
>
gpu_ids
;
for
(
auto
&
resource
:
pool
)
{
if
(
resource
==
"cpu"
)
{
continue
;
}
else
{
if
(
resource
.
length
()
<
4
||
resource
.
substr
(
0
,
3
)
!=
"gpu"
)
{
// error
exit
(
-
1
);
}
auto
gpu_id
=
std
::
stoi
(
resource
.
substr
(
3
));
if
(
gpu_id
>=
scheduler
::
get_num_gpu
())
{
// error
exit
(
-
1
);
}
gpu_ids
.
insert
(
gpu_id
);
}
}
for
(
auto
&
gpu_id
:
gpu_ids
)
{
gpu_pool
.
push_back
(
gpu_id
);
}
return
gpu_pool
;
}
std
::
vector
<
int64_t
>
get_build_resources
()
{
std
::
vector
<
int64_t
>
gpu_pool
;
server
::
Config
&
config
=
server
::
Config
::
GetInstance
();
std
::
vector
<
std
::
string
>
pool
;
Status
s
=
config
.
GetResourceConfigIndexBuildResources
(
pool
);
if
(
!
s
.
ok
())
{
SERVER_LOG_ERROR
<<
s
.
message
();
}
std
::
set
<
uint64_t
>
gpu_ids
;
for
(
auto
&
resource
:
pool
)
{
if
(
resource
==
"cpu"
)
{
gpu_pool
.
push_back
(
server
::
CPU_DEVICE_ID
);
continue
;
}
else
{
if
(
resource
.
length
()
<
4
||
resource
.
substr
(
0
,
3
)
!=
"gpu"
)
{
// error
exit
(
-
1
);
}
auto
gpu_id
=
std
::
stoi
(
resource
.
substr
(
3
));
if
(
gpu_id
>=
scheduler
::
get_num_gpu
())
{
// error
exit
(
-
1
);
}
gpu_ids
.
insert
(
gpu_id
);
}
}
for
(
auto
&
gpu_id
:
gpu_ids
)
{
gpu_pool
.
push_back
(
gpu_id
);
}
return
gpu_pool
;
}
}
// namespace scheduler
}
// namespace milvus
core/src/scheduler/Utils.h
浏览文件 @
7f5c2fef
...
...
@@ -27,11 +27,5 @@ get_current_timestamp();
uint64_t
get_num_gpu
();
std
::
vector
<
uint64_t
>
get_gpu_pool
();
std
::
vector
<
int64_t
>
get_build_resources
();
}
// namespace scheduler
}
// namespace milvus
core/src/scheduler/optimizer/BuildIndexPass.cpp
浏览文件 @
7f5c2fef
...
...
@@ -23,7 +23,7 @@
namespace
milvus
{
namespace
scheduler
{
BuildIndexPass
::
BuildIndexPass
(
std
::
vector
<
int
64
_t
>&
build_gpu_ids
)
:
build_gpu_ids_
(
build_gpu_ids
)
{
BuildIndexPass
::
BuildIndexPass
(
std
::
vector
<
int
32
_t
>&
build_gpu_ids
)
:
build_gpu_ids_
(
build_gpu_ids
)
{
}
bool
...
...
@@ -35,15 +35,9 @@ BuildIndexPass::Run(const TaskPtr& task) {
return
false
;
ResourcePtr
res_ptr
;
if
(
build_gpu_ids_
[
0
]
==
server
::
CPU_DEVICE_ID
)
{
res_ptr
=
ResMgrInst
::
GetInstance
()
->
GetResource
(
"cpu"
);
auto
label
=
std
::
make_shared
<
SpecResLabel
>
(
std
::
weak_ptr
<
Resource
>
(
res_ptr
));
task
->
label
()
=
label
;
}
else
{
res_ptr
=
ResMgrInst
::
GetInstance
()
->
GetResource
(
ResourceType
::
GPU
,
build_gpu_ids_
[
specified_gpu_id_
]);
auto
label
=
std
::
make_shared
<
SpecResLabel
>
(
std
::
weak_ptr
<
Resource
>
(
res_ptr
));
task
->
label
()
=
label
;
}
res_ptr
=
ResMgrInst
::
GetInstance
()
->
GetResource
(
ResourceType
::
GPU
,
build_gpu_ids_
[
specified_gpu_id_
]);
auto
label
=
std
::
make_shared
<
SpecResLabel
>
(
std
::
weak_ptr
<
Resource
>
(
res_ptr
));
task
->
label
()
=
label
;
specified_gpu_id_
=
(
specified_gpu_id_
+
1
)
%
build_gpu_ids_
.
size
();
return
true
;
...
...
core/src/scheduler/optimizer/BuildIndexPass.h
浏览文件 @
7f5c2fef
...
...
@@ -34,7 +34,7 @@ namespace scheduler {
class
BuildIndexPass
:
public
Pass
{
public:
explicit
BuildIndexPass
(
std
::
vector
<
int
64
_t
>&
build_gpu_id
);
explicit
BuildIndexPass
(
std
::
vector
<
int
32
_t
>&
build_gpu_id
);
public:
bool
...
...
@@ -42,7 +42,7 @@ class BuildIndexPass : public Pass {
private:
uint64_t
specified_gpu_id_
=
0
;
std
::
vector
<
int
64
_t
>
build_gpu_ids_
;
std
::
vector
<
int
32
_t
>
build_gpu_ids_
;
};
using
BuildIndexPassPtr
=
std
::
shared_ptr
<
BuildIndexPass
>
;
...
...
core/src/scheduler/optimizer/LargeSQ8HPass.cpp
浏览文件 @
7f5c2fef
...
...
@@ -33,6 +33,7 @@ LargeSQ8HPass::LargeSQ8HPass() {
if
(
!
s
.
ok
())
{
threshold_
=
std
::
numeric_limits
<
int32_t
>::
max
();
}
s
=
config
.
GetGpuResourceConfigSearchResources
(
gpus
);
}
bool
...
...
@@ -54,7 +55,6 @@ LargeSQ8HPass::Run(const TaskPtr& task) {
return
false
;
}
std
::
vector
<
uint64_t
>
gpus
=
scheduler
::
get_gpu_pool
();
// std::vector<int64_t> all_free_mem;
// for (auto& gpu : gpus) {
// auto cache = cache::GpuCacheMgr::GetInstance(gpu);
...
...
core/src/scheduler/optimizer/LargeSQ8HPass.h
浏览文件 @
7f5c2fef
...
...
@@ -44,6 +44,7 @@ class LargeSQ8HPass : public Pass {
private:
int32_t
threshold_
=
std
::
numeric_limits
<
int32_t
>::
max
();
int64_t
count_
=
0
;
std
::
vector
<
int32_t
>
gpus
;
};
using
LargeSQ8HPassPtr
=
std
::
shared_ptr
<
LargeSQ8HPass
>
;
...
...
core/src/scheduler/optimizer/OnlyCPUPass.cpp
浏览文件 @
7f5c2fef
...
...
@@ -34,10 +34,6 @@ OnlyCPUPass::Run(const TaskPtr& task) {
return
false
;
}
auto
gpu_id
=
get_gpu_pool
();
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
;
...
...
core/src/scheduler/optimizer/OnlyGPUPass.cpp
已删除
100644 → 0
浏览文件 @
0a858939
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
#include "scheduler/optimizer/OnlyGPUPass.h"
#include "scheduler/SchedInst.h"
#include "scheduler/Utils.h"
#include "scheduler/task/SearchTask.h"
#include "scheduler/tasklabel/SpecResLabel.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
||
has_cpu_
)
return
false
;
auto
search_task
=
std
::
static_pointer_cast
<
XSearchTask
>
(
task
);
if
(
search_task
->
file_
->
engine_type_
!=
(
int
)
engine
::
EngineType
::
FAISS_IVFSQ8
&&
search_task
->
file_
->
engine_type_
!=
(
int
)
engine
::
EngineType
::
FAISS_IVFFLAT
&&
search_task
->
file_
->
engine_type_
!=
(
int
)
engine
::
EngineType
::
FAISS_IDMAP
)
{
return
false
;
}
auto
gpu_id
=
get_gpu_pool
();
if
(
gpu_id
.
empty
())
return
false
;
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
;
specified_gpu_id_
=
(
specified_gpu_id_
+
1
)
%
gpu_id
.
size
();
return
true
;
}
}
// namespace scheduler
}
// namespace milvus
core/src/scheduler/optimizer/OnlyGPUPass.h
已删除
100644 → 0
浏览文件 @
0a858939
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
#pragma once
#include <condition_variable>
#include <deque>
#include <list>
#include <memory>
#include <mutex>
#include <queue>
#include <string>
#include <thread>
#include <unordered_map>
#include <vector>
#include "Pass.h"
namespace
milvus
{
namespace
scheduler
{
class
OnlyGPUPass
:
public
Pass
{
public:
explicit
OnlyGPUPass
(
bool
has_cpu
);
public:
bool
Run
(
const
TaskPtr
&
task
)
override
;
private:
uint64_t
specified_gpu_id_
=
0
;
bool
has_cpu_
=
false
;
};
using
OnlyGPUPassPtr
=
std
::
shared_ptr
<
OnlyGPUPass
>
;
}
// namespace scheduler
}
// namespace milvus
core/src/server/Config.cpp
浏览文件 @
7f5c2fef
...
...
@@ -163,20 +163,6 @@ Config::ValidateConfig() {
return
s
;
}
#ifdef MILVUS_GPU_VERSION
int64_t
cache_gpu_cache_capacity
;
s
=
GetCacheConfigGpuCacheCapacity
(
cache_gpu_cache_capacity
);
if
(
!
s
.
ok
())
{
return
s
;
}
float
cache_gpu_cache_threshold
;
s
=
GetCacheConfigGpuCacheThreshold
(
cache_gpu_cache_threshold
);
if
(
!
s
.
ok
())
{
return
s
;
}
#endif
bool
cache_insert_data
;
s
=
GetCacheConfigCacheInsertData
(
cache_insert_data
);
if
(
!
s
.
ok
())
{
...
...
@@ -202,24 +188,38 @@ Config::ValidateConfig() {
return
s
;
}
/* resource config */
std
::
string
resource_mode
;
s
=
GetResourceConfigMode
(
resource_mode
);
/* gpu resource config */
#ifdef MILVUS_GPU_VERSION
bool
resource_enable_gpu
;
s
=
GetGpuResourceConfigEnableGpu
(
resource_enable_gpu
);
if
(
!
s
.
ok
())
{
return
s
;
}
int64_t
resource_cache_capacity
;
s
=
GetGpuResourceConfigCacheCapacity
(
resource_cache_capacity
);
if
(
!
s
.
ok
())
{
return
s
;
}
float
resource_cache_threshold
;
s
=
GetGpuResourceConfigCacheThreshold
(
resource_cache_threshold
);
if
(
!
s
.
ok
())
{
return
s
;
}
std
::
vector
<
std
::
string
>
search_resources
;
s
=
GetResourceConfigSearchResources
(
search_resources
);
std
::
vector
<
int32_t
>
search_resources
;
s
=
Get
Gpu
ResourceConfigSearchResources
(
search_resources
);
if
(
!
s
.
ok
())
{
return
s
;
}
std
::
vector
<
std
::
string
>
index_build_resources
;
s
=
Get
ResourceConfigIndexBuild
Resources
(
index_build_resources
);
std
::
vector
<
int32_t
>
index_build_resources
;
s
=
Get
GpuResourceConfigBuildIndex
Resources
(
index_build_resources
);
if
(
!
s
.
ok
())
{
return
s
;
}
#endif
return
Status
::
OK
();
}
...
...
@@ -307,54 +307,54 @@ Config::ResetDefaultConfig() {
return
s
;
}
#ifdef MILVUS_GPU_VERSION
s
=
SetCacheConfigGpuCacheCapacity
(
CONFIG_CACHE_GPU_CACHE_CAPACITY_DEFAULT
);
s
=
SetCacheConfigCacheInsertData
(
CONFIG_CACHE_CACHE_INSERT_DATA_DEFAULT
);
if
(
!
s
.
ok
())
{
return
s
;
}
s
=
SetCacheConfigGpuCacheThreshold
(
CONFIG_CACHE_GPU_CACHE_THRESHOLD_DEFAULT
);
/* engine config */
s
=
SetEngineConfigUseBlasThreshold
(
CONFIG_ENGINE_USE_BLAS_THRESHOLD_DEFAULT
);
if
(
!
s
.
ok
())
{
return
s
;
}
#endif
s
=
Set
CacheConfigCacheInsertData
(
CONFIG_CACHE_CACHE_INSERT_DATA
_DEFAULT
);
s
=
Set
EngineConfigOmpThreadNum
(
CONFIG_ENGINE_OMP_THREAD_NUM
_DEFAULT
);
if
(
!
s
.
ok
())
{
return
s
;
}
/* engine config */
s
=
SetEngineConfigUseBlasThreshold
(
CONFIG_ENGINE_USE_BLAS_THRESHOLD_DEFAULT
);
s
=
SetEngineConfigGpuSearchThreshold
(
CONFIG_ENGINE_GPU_SEARCH_THRESHOLD_DEFAULT
);
if
(
!
s
.
ok
())
{
return
s
;
}
s
=
SetEngineConfigOmpThreadNum
(
CONFIG_ENGINE_OMP_THREAD_NUM_DEFAULT
);
/* gpu resource config */
#ifdef MILVUS_GPU_VERSION
s
=
SetGpuResourceConfigEnableGpu
(
CONFIG_GPU_RESOURCE_ENABLE_GPU_DEFAULT
);
if
(
!
s
.
ok
())
{
return
s
;
}
s
=
Set
EngineConfigGpuSearchThreshold
(
CONFIG_ENGINE_GPU_SEARCH_THRESHOLD
_DEFAULT
);
s
=
Set
GpuResourceConfigCacheCapacity
(
CONFIG_GPU_RESOURCE_CACHE_CAPACITY
_DEFAULT
);
if
(
!
s
.
ok
())
{
return
s
;
}
/* resource config */
s
=
SetResourceConfigMode
(
CONFIG_RESOURCE_MODE_DEFAULT
);
s
=
SetGpuResourceConfigCacheThreshold
(
CONFIG_GPU_RESOURCE_CACHE_THRESHOLD_DEFAULT
);
if
(
!
s
.
ok
())
{
return
s
;
}
s
=
Set
ResourceConfigSearchResources
(
CONFIG
_RESOURCE_SEARCH_RESOURCES_DEFAULT
);
s
=
Set
GpuResourceConfigSearchResources
(
CONFIG_GPU
_RESOURCE_SEARCH_RESOURCES_DEFAULT
);
if
(
!
s
.
ok
())
{
return
s
;
}
s
=
Set
ResourceConfigIndexBuildResources
(
CONFIG_RESOURCE_INDEX_BUILD
_RESOURCES_DEFAULT
);
s
=
Set
GpuResourceConfigBuildIndexResources
(
CONFIG_GPU_RESOURCE_BUILD_INDEX
_RESOURCES_DEFAULT
);
if
(
!
s
.
ok
())
{
return
s
;
}
#endif
return
Status
::
OK
();
}
...
...
@@ -377,7 +377,7 @@ Config::PrintAll() {
PrintConfigSection
(
CONFIG_CACHE
);
PrintConfigSection
(
CONFIG_METRIC
);
PrintConfigSection
(
CONFIG_ENGINE
);
PrintConfigSection
(
CONFIG_RESOURCE
);
PrintConfigSection
(
CONFIG_
GPU_
RESOURCE
);
}
////////////////////////////////////////////////////////////////////////////////
...
...
@@ -591,58 +591,6 @@ Config::CheckCacheConfigCpuCacheThreshold(const std::string& value) {
return
Status
::
OK
();
}
Status
Config
::
CheckCacheConfigGpuCacheCapacity
(
const
std
::
string
&
value
)
{
if
(
!
ValidationUtil
::
ValidateStringIsNumber
(
value
).
ok
())
{
std
::
string
msg
=
"Invalid gpu cache capacity: "
+
value
+
". Possible reason: cache_config.gpu_cache_capacity is not a positive integer."
;
return
Status
(
SERVER_INVALID_ARGUMENT
,
msg
);
}
else
{
uint64_t
gpu_cache_capacity
=
std
::
stoi
(
value
)
*
GB
;
std
::
vector
<
std
::
string
>
resources
;
Status
s
=
GetResourceConfigIndexBuildResources
(
resources
);
if
(
!
s
.
ok
())
{
return
s
;
}
size_t
gpu_memory
;
for
(
auto
&
resource
:
resources
)
{
if
(
resource
==
"cpu"
)
{
continue
;
}
int32_t
device_id
=
std
::
stoi
(
resource
.
substr
(
3
));
if
(
!
ValidationUtil
::
GetGpuMemory
(
device_id
,
gpu_memory
).
ok
())
{
std
::
string
msg
=
"Fail to get GPU memory for GPU device: "
+
std
::
to_string
(
device_id
);
return
Status
(
SERVER_UNEXPECTED_ERROR
,
msg
);
}
else
if
(
gpu_cache_capacity
>=
gpu_memory
)
{
std
::
string
msg
=
"Invalid gpu cache capacity: "
+
value
+
". Possible reason: cache_config.gpu_cache_capacity exceeds GPU memory."
;
return
Status
(
SERVER_INVALID_ARGUMENT
,
msg
);
}
else
if
(
gpu_cache_capacity
>
(
double
)
gpu_memory
*
0.9
)
{
std
::
cerr
<<
"Warning: gpu cache capacity value is too big"
<<
std
::
endl
;
}
}
}
return
Status
::
OK
();
}
Status
Config
::
CheckCacheConfigGpuCacheThreshold
(
const
std
::
string
&
value
)
{
if
(
!
ValidationUtil
::
ValidateStringIsFloat
(
value
).
ok
())
{
std
::
string
msg
=
"Invalid gpu cache threshold: "
+
value
+
". Possible reason: cache_config.gpu_cache_threshold is not in range (0.0, 1.0]."
;
return
Status
(
SERVER_INVALID_ARGUMENT
,
msg
);
}
else
{
float
gpu_cache_threshold
=
std
::
stof
(
value
);
if
(
gpu_cache_threshold
<=
0.0
||
gpu_cache_threshold
>=
1.0
)
{
std
::
string
msg
=
"Invalid gpu cache threshold: "
+
value
+
". Possible reason: cache_config.gpu_cache_threshold is not in range (0.0, 1.0]."
;
return
Status
(
SERVER_INVALID_ARGUMENT
,
msg
);
}
}
return
Status
::
OK
();
}
Status
Config
::
CheckCacheConfigCacheInsertData
(
const
std
::
string
&
value
)
{
if
(
!
ValidationUtil
::
ValidateStringIsBool
(
value
).
ok
())
{
...
...
@@ -693,56 +641,99 @@ Config::CheckEngineConfigGpuSearchThreshold(const std::string& value) {
}
Status
Config
::
CheckResourceConfigMode
(
const
std
::
string
&
value
)
{
if
(
value
!=
"simple"
)
{
std
::
string
msg
=
"Invalid resource mode: "
+
value
+
". Possible reason: resource_config.mode is invalid."
;
Config
::
CheckGpuResourceConfigEnableGpu
(
const
std
::
string
&
value
)
{
if
(
!
ValidationUtil
::
ValidateStringIsBool
(
value
).
ok
())
{
std
::
string
msg
=
"Invalid gpu resource config: "
+
value
+
". Possible reason: gpu_resource_config.enable_gpu is not a boolean."
;
return
Status
(
SERVER_INVALID_ARGUMENT
,
msg
);
}
return
Status
::
OK
();
}
Status
Config
::
CheckGpuResourceConfigCacheCapacity
(
const
std
::
string
&
value
)
{
if
(
!
ValidationUtil
::
ValidateStringIsNumber
(
value
).
ok
())
{
std
::
string
msg
=
"Invalid gpu cache capacity: "
+
value
+
". Possible reason: gpu_resource_config.cache_capacity is not a positive integer."
;
return
Status
(
SERVER_INVALID_ARGUMENT
,
msg
);
}
else
{
uint64_t
gpu_cache_capacity
=
std
::
stoi
(
value
)
*
GB
;
std
::
vector
<
int32_t
>
gpu_ids
;
Status
s
=
GetGpuResourceConfigBuildIndexResources
(
gpu_ids
);
if
(
!
s
.
ok
())
{
return
s
;
}
for
(
int32_t
gpu_id
:
gpu_ids
)
{
size_t
gpu_memory
;
if
(
!
ValidationUtil
::
GetGpuMemory
(
gpu_id
,
gpu_memory
).
ok
())
{
std
::
string
msg
=
"Fail to get GPU memory for GPU device: "
+
std
::
to_string
(
gpu_id
);
return
Status
(
SERVER_UNEXPECTED_ERROR
,
msg
);
}
else
if
(
gpu_cache_capacity
>=
gpu_memory
)
{
std
::
string
msg
=
"Invalid gpu cache capacity: "
+
value
+
". Possible reason: gpu_resource_config.cache_capacity exceeds GPU memory."
;
return
Status
(
SERVER_INVALID_ARGUMENT
,
msg
);
}
else
if
(
gpu_cache_capacity
>
(
double
)
gpu_memory
*
0.9
)
{
std
::
cerr
<<
"Warning: gpu cache capacity value is too big"
<<
std
::
endl
;
}
}
}
return
Status
::
OK
();
}
Status
CheckResource
(
const
std
::
string
&
value
)
{
Config
::
CheckGpuResourceConfigCacheThreshold
(
const
std
::
string
&
value
)
{
if
(
!
ValidationUtil
::
ValidateStringIsFloat
(
value
).
ok
())
{
std
::
string
msg
=
"Invalid gpu cache threshold: "
+
value
+
". Possible reason: gpu_resource_config.cache_threshold is not in range (0.0, 1.0]."
;
return
Status
(
SERVER_INVALID_ARGUMENT
,
msg
);
}
else
{
float
gpu_cache_threshold
=
std
::
stof
(
value
);
if
(
gpu_cache_threshold
<=
0.0
||
gpu_cache_threshold
>=
1.0
)
{
std
::
string
msg
=
"Invalid gpu cache threshold: "
+
value
+
". Possible reason: gpu_resource_config.cache_threshold is not in range (0.0, 1.0]."
;
return
Status
(
SERVER_INVALID_ARGUMENT
,
msg
);
}
}
return
Status
::
OK
();
}
Status
CheckGpuResource
(
const
std
::
string
&
value
)
{
std
::
string
s
=
value
;
std
::
transform
(
s
.
begin
(),
s
.
end
(),
s
.
begin
(),
::
tolower
);
#ifdef MILVUS_CPU_VERSION
if
(
s
!=
"cpu"
)
{
return
Status
(
SERVER_INVALID_ARGUMENT
,
"Invalid CPU resource: "
+
s
);
}
#else
const
std
::
regex
pat
(
"cpu|gpu(
\\
d+)"
);
const
std
::
regex
pat
(
"gpu(
\\
d+)"
);
std
::
smatch
m
;
if
(
!
std
::
regex_match
(
s
,
m
,
pat
))
{
std
::
string
msg
=
"Invalid
search
resource: "
+
value
+
". Possible reason:
resource_config.search_resources
is not in the format of cpux or gpux"
;
std
::
string
msg
=
"Invalid
gpu
resource: "
+
value
+
". Possible reason:
gpu_resource_config
is not in the format of cpux or gpux"
;
return
Status
(
SERVER_INVALID_ARGUMENT
,
msg
);
}
if
(
s
.
compare
(
0
,
3
,
"gpu"
)
==
0
)
{
int32_t
gpu_index
=
std
::
stoi
(
s
.
substr
(
3
));
if
(
!
ValidationUtil
::
ValidateGpuIndex
(
gpu_index
).
ok
())
{
std
::
string
msg
=
"Invalid
search
resource: "
+
value
+
". Possible reason:
resource_config.search_resources does not match your
hardware."
;
std
::
string
msg
=
"Invalid
gpu
resource: "
+
value
+
". Possible reason:
gpu_resource_config does not match with the
hardware."
;
return
Status
(
SERVER_INVALID_ARGUMENT
,
msg
);
}
}
#endif
return
Status
::
OK
();
}
Status
Config
::
CheckResourceConfigSearchResources
(
const
std
::
vector
<
std
::
string
>&
value
)
{
Config
::
Check
Gpu
ResourceConfigSearchResources
(
const
std
::
vector
<
std
::
string
>&
value
)
{
if
(
value
.
empty
())
{
std
::
string
msg
=
"Invalid search resource. "
"Possible reason: resource_config.search_resources is empty."
;
"Invalid
gpu
search resource. "
"Possible reason:
gpu_
resource_config.search_resources is empty."
;
return
Status
(
SERVER_INVALID_ARGUMENT
,
msg
);
}
for
(
auto
&
resource
:
value
)
{
auto
status
=
CheckResource
(
resource
);
auto
status
=
Check
Gpu
Resource
(
resource
);
if
(
!
status
.
ok
())
{
return
Status
(
SERVER_INVALID_ARGUMENT
,
status
.
message
());
}
...
...
@@ -751,33 +742,21 @@ Config::CheckResourceConfigSearchResources(const std::vector<std::string>& value
}
Status
Config
::
Check
ResourceConfigIndexBuild
Resources
(
const
std
::
vector
<
std
::
string
>&
value
)
{
Config
::
Check
GpuResourceConfigBuildIndex
Resources
(
const
std
::
vector
<
std
::
string
>&
value
)
{
if
(
value
.
empty
())
{
std
::
string
msg
=
"Invalid build index resource. "
"Possible reason: resource_config.build_index_resources is empty."
;
"Invalid
gpu
build index resource. "
"Possible reason:
gpu_
resource_config.build_index_resources is empty."
;
return
Status
(
SERVER_INVALID_ARGUMENT
,
msg
);
}
for
(
auto
&
resource
:
value
)
{
auto
status
=
CheckResource
(
resource
);
if
(
!
status
.
ok
())
{
return
Status
(
SERVER_INVALID_ARGUMENT
,
status
.
message
());
}
}
for
(
auto
&
resource
:
value
)
{
auto
status
=
CheckResource
(
resource
);
auto
status
=
Check
Gpu
Resource
(
resource
);
if
(
!
status
.
ok
())
{
return
Status
(
SERVER_INVALID_ARGUMENT
,
status
.
message
());
}
}
if
(
value
.
size
()
>
1
&&
value
[
0
]
==
"cpu"
)
{
std
::
string
msg
=
"Invalid index build resource. "
"Possible reason: resource_config.index_build_device does not support hybrid of cpu and gpux."
;
}
return
Status
::
OK
();
}
...
...
@@ -883,7 +862,6 @@ Config::GetDBConfigArchiveDiskThreshold(int32_t& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
value
=
std
::
stoi
(
str
);
return
Status
::
OK
();
}
...
...
@@ -896,7 +874,6 @@ Config::GetDBConfigArchiveDaysThreshold(int32_t& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
value
=
std
::
stoi
(
str
);
return
Status
::
OK
();
}
...
...
@@ -908,7 +885,6 @@ Config::GetDBConfigInsertBufferSize(int32_t& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
value
=
std
::
stoi
(
str
);
return
Status
::
OK
();
}
...
...
@@ -926,7 +902,6 @@ Config::GetMetricConfigEnableMonitor(bool& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
std
::
transform
(
str
.
begin
(),
str
.
end
(),
str
.
begin
(),
::
tolower
);
value
=
(
str
==
"true"
||
str
==
"on"
||
str
==
"yes"
||
str
==
"1"
);
return
Status
::
OK
();
...
...
@@ -952,7 +927,6 @@ Config::GetCacheConfigCpuCacheCapacity(int64_t& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
value
=
std
::
stoi
(
str
);
return
Status
::
OK
();
}
...
...
@@ -965,33 +939,6 @@ Config::GetCacheConfigCpuCacheThreshold(float& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
value
=
std
::
stof
(
str
);
return
Status
::
OK
();
}
Status
Config
::
GetCacheConfigGpuCacheCapacity
(
int64_t
&
value
)
{
std
::
string
str
=
GetConfigStr
(
CONFIG_CACHE
,
CONFIG_CACHE_GPU_CACHE_CAPACITY
,
CONFIG_CACHE_GPU_CACHE_CAPACITY_DEFAULT
);
Status
s
=
CheckCacheConfigGpuCacheCapacity
(
str
);
if
(
!
s
.
ok
())
{
return
s
;
}
value
=
std
::
stoi
(
str
);
return
Status
::
OK
();
}
Status
Config
::
GetCacheConfigGpuCacheThreshold
(
float
&
value
)
{
std
::
string
str
=
GetConfigStr
(
CONFIG_CACHE
,
CONFIG_CACHE_GPU_CACHE_THRESHOLD
,
CONFIG_CACHE_GPU_CACHE_THRESHOLD_DEFAULT
);
Status
s
=
CheckCacheConfigGpuCacheThreshold
(
str
);
if
(
!
s
.
ok
())
{
return
s
;
}
value
=
std
::
stof
(
str
);
return
Status
::
OK
();
}
...
...
@@ -1004,7 +951,6 @@ Config::GetCacheConfigCacheInsertData(bool& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
std
::
transform
(
str
.
begin
(),
str
.
end
(),
str
.
begin
(),
::
tolower
);
value
=
(
str
==
"true"
||
str
==
"on"
||
str
==
"yes"
||
str
==
"1"
);
return
Status
::
OK
();
...
...
@@ -1018,7 +964,6 @@ Config::GetEngineConfigUseBlasThreshold(int32_t& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
value
=
std
::
stoi
(
str
);
return
Status
::
OK
();
}
...
...
@@ -1030,7 +975,6 @@ Config::GetEngineConfigOmpThreadNum(int32_t& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
value
=
std
::
stoi
(
str
);
return
Status
::
OK
();
}
...
...
@@ -1043,33 +987,114 @@ Config::GetEngineConfigGpuSearchThreshold(int32_t& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
value
=
std
::
stoi
(
str
);
return
Status
::
OK
();
}
Status
Config
::
GetGpuResourceConfigEnableGpu
(
bool
&
value
)
{
std
::
string
str
=
GetConfigStr
(
CONFIG_GPU_RESOURCE
,
CONFIG_GPU_RESOURCE_ENABLE_GPU
,
CONFIG_GPU_RESOURCE_ENABLE_GPU_DEFAULT
);
Status
s
=
CheckGpuResourceConfigEnableGpu
(
str
);
if
(
!
s
.
ok
())
{
return
s
;
}
std
::
transform
(
str
.
begin
(),
str
.
end
(),
str
.
begin
(),
::
tolower
);
value
=
(
str
==
"true"
||
str
==
"on"
||
str
==
"yes"
||
str
==
"1"
);
return
Status
::
OK
();
}
Status
Config
::
GetGpuResourceConfigCacheCapacity
(
int64_t
&
value
)
{
bool
enable_gpu
=
false
;
Status
s
=
GetGpuResourceConfigEnableGpu
(
enable_gpu
);
if
(
!
s
.
ok
())
{
return
s
;
}
if
(
!
enable_gpu
)
{
std
::
string
msg
=
"GPU not supported. Possible reason: gpu_resource_config.enable_gpu is set to false."
;
return
Status
(
SERVER_UNSUPPORTED_ERROR
,
msg
);
}
std
::
string
str
=
GetConfigStr
(
CONFIG_GPU_RESOURCE
,
CONFIG_GPU_RESOURCE_CACHE_CAPACITY
,
CONFIG_GPU_RESOURCE_CACHE_CAPACITY_DEFAULT
);
s
=
CheckGpuResourceConfigCacheCapacity
(
str
);
if
(
!
s
.
ok
())
{
return
s
;
}
value
=
std
::
stoi
(
str
);
return
Status
::
OK
();
}
Status
Config
::
GetResourceConfigMode
(
std
::
string
&
value
)
{
value
=
GetConfigStr
(
CONFIG_RESOURCE
,
CONFIG_RESOURCE_MODE
,
CONFIG_RESOURCE_MODE_DEFAULT
);
return
CheckResourceConfigMode
(
value
);
Config
::
GetGpuResourceConfigCacheThreshold
(
float
&
value
)
{
bool
enable_gpu
=
false
;
Status
s
=
GetGpuResourceConfigEnableGpu
(
enable_gpu
);
if
(
!
s
.
ok
())
{
return
s
;
}
if
(
!
enable_gpu
)
{
std
::
string
msg
=
"GPU not supported. Possible reason: gpu_resource_config.enable_gpu is set to false."
;
return
Status
(
SERVER_UNSUPPORTED_ERROR
,
msg
);
}
std
::
string
str
=
GetConfigStr
(
CONFIG_GPU_RESOURCE
,
CONFIG_GPU_RESOURCE_CACHE_THRESHOLD
,
CONFIG_GPU_RESOURCE_CACHE_THRESHOLD_DEFAULT
);
s
=
CheckGpuResourceConfigCacheThreshold
(
str
);
if
(
!
s
.
ok
())
{
return
s
;
}
value
=
std
::
stof
(
str
);
return
Status
::
OK
();
}
Status
Config
::
GetResourceConfigSearchResources
(
std
::
vector
<
std
::
string
>&
value
)
{
std
::
string
str
=
GetConfigSequenceStr
(
CONFIG_RESOURCE
,
CONFIG_RESOURCE_SEARCH_RESOURCES
,
CONFIG_RESOURCE_RESOURCES_DELIMITER
,
CONFIG_RESOURCE_SEARCH_RESOURCES_DEFAULT
);
server
::
StringHelpFunctions
::
SplitStringByDelimeter
(
str
,
CONFIG_RESOURCE_RESOURCES_DELIMITER
,
value
);
return
CheckResourceConfigSearchResources
(
value
);
Config
::
GetGpuResourceConfigSearchResources
(
std
::
vector
<
int32_t
>&
value
)
{
bool
enable_gpu
=
false
;
Status
s
=
GetGpuResourceConfigEnableGpu
(
enable_gpu
);
if
(
!
s
.
ok
())
{
return
s
;
}
if
(
!
enable_gpu
)
{
std
::
string
msg
=
"GPU not supported. Possible reason: gpu_resource_config.enable_gpu is set to false."
;
return
Status
(
SERVER_UNSUPPORTED_ERROR
,
msg
);
}
std
::
string
str
=
GetConfigSequenceStr
(
CONFIG_GPU_RESOURCE
,
CONFIG_GPU_RESOURCE_SEARCH_RESOURCES
,
CONFIG_GPU_RESOURCE_DELIMITER
,
CONFIG_GPU_RESOURCE_SEARCH_RESOURCES_DEFAULT
);
std
::
vector
<
std
::
string
>
res_vec
;
server
::
StringHelpFunctions
::
SplitStringByDelimeter
(
str
,
CONFIG_GPU_RESOURCE_DELIMITER
,
res_vec
);
s
=
CheckGpuResourceConfigSearchResources
(
res_vec
);
if
(
!
s
.
ok
())
{
return
s
;
}
for
(
std
::
string
&
res
:
res_vec
)
{
value
.
push_back
(
std
::
stoi
(
res
.
substr
(
3
)));
}
return
Status
::
OK
();
}
Status
Config
::
GetResourceConfigIndexBuildResources
(
std
::
vector
<
std
::
string
>&
value
)
{
Config
::
GetGpuResourceConfigBuildIndexResources
(
std
::
vector
<
int32_t
>&
value
)
{
bool
enable_gpu
=
false
;
Status
s
=
GetGpuResourceConfigEnableGpu
(
enable_gpu
);
if
(
!
s
.
ok
())
{
return
s
;
}
if
(
!
enable_gpu
)
{
std
::
string
msg
=
"GPU not supported. Possible reason: gpu_resource_config.enable_gpu is set to false."
;
return
Status
(
SERVER_UNSUPPORTED_ERROR
,
msg
);
}
std
::
string
str
=
GetConfigSequenceStr
(
CONFIG_RESOURCE
,
CONFIG_RESOURCE_INDEX_BUILD_RESOURCES
,
CONFIG_RESOURCE_RESOURCES_DELIMITER
,
CONFIG_RESOURCE_INDEX_BUILD_RESOURCES_DEFAULT
);
server
::
StringHelpFunctions
::
SplitStringByDelimeter
(
str
,
CONFIG_RESOURCE_RESOURCES_DELIMITER
,
value
);
return
CheckResourceConfigIndexBuildResources
(
value
);
GetConfigSequenceStr
(
CONFIG_GPU_RESOURCE
,
CONFIG_GPU_RESOURCE_BUILD_INDEX_RESOURCES
,
CONFIG_GPU_RESOURCE_DELIMITER
,
CONFIG_GPU_RESOURCE_BUILD_INDEX_RESOURCES_DEFAULT
);
std
::
vector
<
std
::
string
>
res_vec
;
server
::
StringHelpFunctions
::
SplitStringByDelimeter
(
str
,
CONFIG_GPU_RESOURCE_DELIMITER
,
res_vec
);
s
=
CheckGpuResourceConfigBuildIndexResources
(
res_vec
);
if
(
!
s
.
ok
())
{
return
s
;
}
for
(
std
::
string
&
res
:
res_vec
)
{
value
.
push_back
(
std
::
stoi
(
res
.
substr
(
3
)));
}
return
Status
::
OK
();
}
///////////////////////////////////////////////////////////////////////////////
...
...
@@ -1080,7 +1105,6 @@ Config::SetServerConfigAddress(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_SERVER
,
CONFIG_SERVER_ADDRESS
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1091,7 +1115,6 @@ Config::SetServerConfigPort(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_SERVER
,
CONFIG_SERVER_PORT
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1102,7 +1125,6 @@ Config::SetServerConfigDeployMode(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_SERVER
,
CONFIG_SERVER_DEPLOY_MODE
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1113,7 +1135,6 @@ Config::SetServerConfigTimeZone(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_SERVER
,
CONFIG_SERVER_TIME_ZONE
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1125,7 +1146,6 @@ Config::SetDBConfigPrimaryPath(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_DB
,
CONFIG_DB_PRIMARY_PATH
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1136,7 +1156,6 @@ Config::SetDBConfigSecondaryPath(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_DB
,
CONFIG_DB_SECONDARY_PATH
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1147,7 +1166,6 @@ Config::SetDBConfigBackendUrl(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_DB
,
CONFIG_DB_BACKEND_URL
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1158,7 +1176,6 @@ Config::SetDBConfigArchiveDiskThreshold(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_DB
,
CONFIG_DB_ARCHIVE_DISK_THRESHOLD
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1169,7 +1186,6 @@ Config::SetDBConfigArchiveDaysThreshold(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_DB
,
CONFIG_DB_ARCHIVE_DAYS_THRESHOLD
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1180,7 +1196,6 @@ Config::SetDBConfigInsertBufferSize(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_DB
,
CONFIG_DB_INSERT_BUFFER_SIZE
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1192,7 +1207,6 @@ Config::SetMetricConfigEnableMonitor(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_METRIC
,
CONFIG_METRIC_ENABLE_MONITOR
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1203,7 +1217,6 @@ Config::SetMetricConfigCollector(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_METRIC
,
CONFIG_METRIC_COLLECTOR
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1214,7 +1227,6 @@ Config::SetMetricConfigPrometheusPort(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_METRIC
,
CONFIG_METRIC_PROMETHEUS_PORT
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1226,7 +1238,6 @@ Config::SetCacheConfigCpuCacheCapacity(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_CACHE
,
CONFIG_CACHE_CPU_CACHE_CAPACITY
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1237,40 +1248,16 @@ Config::SetCacheConfigCpuCacheThreshold(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_CACHE
,
CONFIG_CACHE_CPU_CACHE_THRESHOLD
,
value
);
return
Status
::
OK
();
}
Status
Config
::
SetCacheConfigGpuCacheCapacity
(
const
std
::
string
&
value
)
{
Status
s
=
CheckCacheConfigGpuCacheCapacity
(
value
);
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_CACHE
,
CONFIG_CACHE_GPU_CACHE_CAPACITY
,
value
);
return
Status
::
OK
();
}
Status
Config
::
SetCacheConfigGpuCacheThreshold
(
const
std
::
string
&
value
)
{
Status
s
=
CheckCacheConfigGpuCacheThreshold
(
value
);
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_CACHE
,
CONFIG_CACHE_GPU_CACHE_THRESHOLD
,
value
);
return
Status
::
OK
();
}
Status
Config
::
SetCacheConfigCacheInsertData
(
const
std
::
string
&
value
)
{
Status
s
=
CheckCacheConfigCacheInsertData
(
value
);
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_CACHE
,
CONFIG_CACHE_CACHE_INSERT_DATA
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1282,7 +1269,6 @@ Config::SetEngineConfigUseBlasThreshold(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_ENGINE
,
CONFIG_ENGINE_USE_BLAS_THRESHOLD
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1293,7 +1279,6 @@ Config::SetEngineConfigOmpThreadNum(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_ENGINE
,
CONFIG_ENGINE_OMP_THREAD_NUM
,
value
);
return
Status
::
OK
();
}
...
...
@@ -1304,50 +1289,64 @@ Config::SetEngineConfigGpuSearchThreshold(const std::string& value) {
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_ENGINE
,
CONFIG_ENGINE_GPU_SEARCH_THRESHOLD
,
value
);
return
Status
::
OK
();
}
/* resource config */
/*
gpu
resource config */
Status
Config
::
Set
ResourceConfigMode
(
const
std
::
string
&
value
)
{
Status
s
=
Check
ResourceConfigMode
(
value
);
Config
::
Set
GpuResourceConfigEnableGpu
(
const
std
::
string
&
value
)
{
Status
s
=
Check
GpuResourceConfigEnableGpu
(
value
);
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_RESOURCE
,
CONFIG_RESOURCE_MODE
,
value
);
SetConfigValueInMem
(
CONFIG_GPU_RESOURCE
,
CONFIG_GPU_RESOURCE_ENABLE_GPU
,
value
);
return
Status
::
OK
();
}
Status
Config
::
SetResourceConfigSearchResources
(
const
std
::
string
&
value
)
{
std
::
vector
<
std
::
string
>
res_vec
;
server
::
StringHelpFunctions
::
SplitStringByDelimeter
(
value
,
CONFIG_RESOURCE_RESOURCES_DELIMITER
,
res_vec
);
Status
s
=
CheckResourceConfigSearchResources
(
res_vec
);
Config
::
SetGpuResourceConfigCacheCapacity
(
const
std
::
string
&
value
)
{
Status
s
=
CheckGpuResourceConfigCacheCapacity
(
value
);
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_GPU_RESOURCE
,
CONFIG_GPU_RESOURCE_CACHE_CAPACITY
,
value
);
return
Status
::
OK
();
}
SetConfigValueInMem
(
CONFIG_RESOURCE
,
CONFIG_RESOURCE_SEARCH_RESOURCES
,
value
);
Status
Config
::
SetGpuResourceConfigCacheThreshold
(
const
std
::
string
&
value
)
{
Status
s
=
CheckGpuResourceConfigCacheThreshold
(
value
);
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_GPU_RESOURCE
,
CONFIG_GPU_RESOURCE_CACHE_THRESHOLD
,
value
);
return
Status
::
OK
();
}
Status
Config
::
Set
ResourceConfigIndexBuildResources
(
const
std
::
string
&
value
)
{
Config
::
Set
GpuResourceConfigSearchResources
(
const
std
::
string
&
value
)
{
std
::
vector
<
std
::
string
>
res_vec
;
server
::
StringHelpFunctions
::
SplitStringByDelimeter
(
value
,
CONFIG_RESOURCE_RESOURCES_DELIMITER
,
res_vec
);
Status
s
=
CheckResourceConfigIndexBuildResources
(
res_vec
);
server
::
StringHelpFunctions
::
SplitStringByDelimeter
(
value
,
CONFIG_GPU_RESOURCE_DELIMITER
,
res_vec
);
Status
s
=
CheckGpuResourceConfigSearchResources
(
res_vec
);
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_RESOURCE
,
CONFIG_RESOURCE_INDEX_BUILD_RESOURCES
,
value
);
SetConfigValueInMem
(
CONFIG_GPU_RESOURCE
,
CONFIG_GPU_RESOURCE_SEARCH_RESOURCES
,
value
);
return
Status
::
OK
();
}
Status
Config
::
SetGpuResourceConfigBuildIndexResources
(
const
std
::
string
&
value
)
{
std
::
vector
<
std
::
string
>
res_vec
;
server
::
StringHelpFunctions
::
SplitStringByDelimeter
(
value
,
CONFIG_GPU_RESOURCE_DELIMITER
,
res_vec
);
Status
s
=
CheckGpuResourceConfigBuildIndexResources
(
res_vec
);
if
(
!
s
.
ok
())
{
return
s
;
}
SetConfigValueInMem
(
CONFIG_GPU_RESOURCE
,
CONFIG_GPU_RESOURCE_BUILD_INDEX_RESOURCES
,
value
);
return
Status
::
OK
();
}
// namespace server
}
// namespace server
}
// namespace milvus
core/src/server/Config.h
浏览文件 @
7f5c2fef
...
...
@@ -59,12 +59,8 @@ static const char* CONFIG_DB_PRELOAD_TABLE = "preload_table";
static
const
char
*
CONFIG_CACHE
=
"cache_config"
;
static
const
char
*
CONFIG_CACHE_CPU_CACHE_CAPACITY
=
"cpu_cache_capacity"
;
static
const
char
*
CONFIG_CACHE_CPU_CACHE_CAPACITY_DEFAULT
=
"16"
;
static
const
char
*
CONFIG_CACHE_GPU_CACHE_CAPACITY
=
"gpu_cache_capacity"
;
static
const
char
*
CONFIG_CACHE_GPU_CACHE_CAPACITY_DEFAULT
=
"4"
;
static
const
char
*
CONFIG_CACHE_CPU_CACHE_THRESHOLD
=
"cpu_mem_threshold"
;
static
const
char
*
CONFIG_CACHE_CPU_CACHE_THRESHOLD
=
"cpu_cache_threshold"
;
static
const
char
*
CONFIG_CACHE_CPU_CACHE_THRESHOLD_DEFAULT
=
"0.85"
;
static
const
char
*
CONFIG_CACHE_GPU_CACHE_THRESHOLD
=
"gpu_mem_threshold"
;
static
const
char
*
CONFIG_CACHE_GPU_CACHE_THRESHOLD_DEFAULT
=
"0.85"
;
static
const
char
*
CONFIG_CACHE_CACHE_INSERT_DATA
=
"cache_insert_data"
;
static
const
char
*
CONFIG_CACHE_CACHE_INSERT_DATA_DEFAULT
=
"false"
;
...
...
@@ -87,24 +83,23 @@ static const char* CONFIG_ENGINE_OMP_THREAD_NUM_DEFAULT = "0";
static
const
char
*
CONFIG_ENGINE_GPU_SEARCH_THRESHOLD
=
"gpu_search_threshold"
;
static
const
char
*
CONFIG_ENGINE_GPU_SEARCH_THRESHOLD_DEFAULT
=
"1000"
;
/* resource config */
static
const
char
*
CONFIG_RESOURCE
=
"resource_config"
;
static
const
char
*
CONFIG_RESOURCE_MODE
=
"mode"
;
static
const
char
*
CONFIG_RESOURCE_MODE_DEFAULT
=
"simple"
;
static
const
char
*
CONFIG_RESOURCE_RESOURCES_DELIMITER
=
","
;
static
const
char
*
CONFIG_RESOURCE_SEARCH_RESOURCES
=
"search_resources"
;
#ifdef MILVUS_CPU_VERSION
static
const
char
*
CONFIG_RESOURCE_SEARCH_RESOURCES_DEFAULT
=
"cpu"
;
/* gpu resource config */
static
const
char
*
CONFIG_GPU_RESOURCE
=
"gpu_resource_config"
;
static
const
char
*
CONFIG_GPU_RESOURCE_ENABLE_GPU
=
"enable_gpu"
;
#ifdef MILVUS_GPU_VERSION
static
const
char
*
CONFIG_GPU_RESOURCE_ENABLE_GPU_DEFAULT
=
"true"
;
#else
static
const
char
*
CONFIG_
RESOURCE_SEARCH_RESOURCES_DEFAULT
=
"cpu,gpu0
"
;
static
const
char
*
CONFIG_
GPU_RESOURCE_ENABLE_GPU_DEFAULT
=
"false
"
;
#endif
static
const
char
*
CONFIG_RESOURCE_INDEX_BUILD_RESOURCES
=
"index_build_resources"
;
#ifdef MILVUS_CPU_VERSION
static
const
char
*
CONFIG_RESOURCE_INDEX_BUILD_RESOURCES_DEFAULT
=
"cpu"
;
#else
static
const
char
*
CONFIG_RESOURCE_INDEX_BUILD_RESOURCES_DEFAULT
=
"gpu0"
;
#endif
const
int32_t
CPU_DEVICE_ID
=
-
1
;
static
const
char
*
CONFIG_GPU_RESOURCE_CACHE_CAPACITY
=
"cache_capacity"
;
static
const
char
*
CONFIG_GPU_RESOURCE_CACHE_CAPACITY_DEFAULT
=
"4"
;
static
const
char
*
CONFIG_GPU_RESOURCE_CACHE_THRESHOLD
=
"cache_threshold"
;
static
const
char
*
CONFIG_GPU_RESOURCE_CACHE_THRESHOLD_DEFAULT
=
"0.85"
;
static
const
char
*
CONFIG_GPU_RESOURCE_DELIMITER
=
","
;
static
const
char
*
CONFIG_GPU_RESOURCE_SEARCH_RESOURCES
=
"search_resources"
;
static
const
char
*
CONFIG_GPU_RESOURCE_SEARCH_RESOURCES_DEFAULT
=
"gpu0"
;
static
const
char
*
CONFIG_GPU_RESOURCE_BUILD_INDEX_RESOURCES
=
"build_index_resources"
;
static
const
char
*
CONFIG_GPU_RESOURCE_BUILD_INDEX_RESOURCES_DEFAULT
=
"gpu0"
;
class
Config
{
public:
...
...
@@ -168,10 +163,6 @@ class Config {
Status
CheckCacheConfigCpuCacheThreshold
(
const
std
::
string
&
value
);
Status
CheckCacheConfigGpuCacheCapacity
(
const
std
::
string
&
value
);
Status
CheckCacheConfigGpuCacheThreshold
(
const
std
::
string
&
value
);
Status
CheckCacheConfigCacheInsertData
(
const
std
::
string
&
value
);
/* engine config */
...
...
@@ -182,13 +173,17 @@ class Config {
Status
CheckEngineConfigGpuSearchThreshold
(
const
std
::
string
&
value
);
/* resource config */
/*
gpu
resource config */
Status
Check
ResourceConfigMode
(
const
std
::
string
&
value
);
Check
GpuResourceConfigEnableGpu
(
const
std
::
string
&
value
);
Status
Check
ResourceConfigSearchResources
(
const
std
::
vector
<
std
::
string
>
&
value
);
Check
GpuResourceConfigCacheCapacity
(
const
std
::
string
&
value
);
Status
CheckResourceConfigIndexBuildResources
(
const
std
::
vector
<
std
::
string
>&
value
);
CheckGpuResourceConfigCacheThreshold
(
const
std
::
string
&
value
);
Status
CheckGpuResourceConfigSearchResources
(
const
std
::
vector
<
std
::
string
>&
value
);
Status
CheckGpuResourceConfigBuildIndexResources
(
const
std
::
vector
<
std
::
string
>&
value
);
std
::
string
GetConfigStr
(
const
std
::
string
&
parent_key
,
const
std
::
string
&
child_key
,
const
std
::
string
&
default_value
=
""
);
...
...
@@ -237,10 +232,6 @@ class Config {
Status
GetCacheConfigCpuCacheThreshold
(
float
&
value
);
Status
GetCacheConfigGpuCacheCapacity
(
int64_t
&
value
);
Status
GetCacheConfigGpuCacheThreshold
(
float
&
value
);
Status
GetCacheConfigCacheInsertData
(
bool
&
value
);
/* engine config */
...
...
@@ -251,13 +242,17 @@ class Config {
Status
GetEngineConfigGpuSearchThreshold
(
int32_t
&
value
);
/* resource config */
/* gpu resource config */
Status
GetGpuResourceConfigEnableGpu
(
bool
&
value
);
Status
Get
ResourceConfigMode
(
std
::
string
&
value
);
Get
GpuResourceConfigCacheCapacity
(
int64_t
&
value
);
Status
Get
ResourceConfigSearchResources
(
std
::
vector
<
std
::
string
>
&
value
);
Get
GpuResourceConfigCacheThreshold
(
float
&
value
);
Status
GetResourceConfigIndexBuildResources
(
std
::
vector
<
std
::
string
>&
value
);
GetGpuResourceConfigSearchResources
(
std
::
vector
<
int32_t
>&
value
);
Status
GetGpuResourceConfigBuildIndexResources
(
std
::
vector
<
int32_t
>&
value
);
public:
/* server config */
...
...
@@ -298,10 +293,6 @@ class Config {
Status
SetCacheConfigCpuCacheThreshold
(
const
std
::
string
&
value
);
Status
SetCacheConfigGpuCacheCapacity
(
const
std
::
string
&
value
);
Status
SetCacheConfigGpuCacheThreshold
(
const
std
::
string
&
value
);
Status
SetCacheConfigCacheInsertData
(
const
std
::
string
&
value
);
/* engine config */
...
...
@@ -312,13 +303,17 @@ class Config {
Status
SetEngineConfigGpuSearchThreshold
(
const
std
::
string
&
value
);
/* resource config */
/* gpu resource config */
Status
SetGpuResourceConfigEnableGpu
(
const
std
::
string
&
value
);
Status
SetGpuResourceConfigCacheCapacity
(
const
std
::
string
&
value
);
Status
Set
ResourceConfigMode
(
const
std
::
string
&
value
);
Set
GpuResourceConfigCacheThreshold
(
const
std
::
string
&
value
);
Status
SetResourceConfigSearchResources
(
const
std
::
string
&
value
);
Set
Gpu
ResourceConfigSearchResources
(
const
std
::
string
&
value
);
Status
Set
ResourceConfigIndexBuild
Resources
(
const
std
::
string
&
value
);
Set
GpuResourceConfigBuildIndex
Resources
(
const
std
::
string
&
value
);
private:
std
::
unordered_map
<
std
::
string
,
std
::
unordered_map
<
std
::
string
,
std
::
string
>>
config_map_
;
...
...
core/src/wrapper/KnowhereResource.cpp
浏览文件 @
7f5c2fef
...
...
@@ -37,7 +37,6 @@ constexpr int64_t M_BYTE = 1024 * 1024;
Status
KnowhereResource
::
Initialize
()
{
#ifdef MILVUS_GPU_VERSION
struct
GpuResourceSetting
{
int64_t
pinned_memory
=
300
*
M_BYTE
;
int64_t
temp_memory
=
300
*
M_BYTE
;
...
...
@@ -49,8 +48,8 @@ KnowhereResource::Initialize() {
// get build index gpu resource
server
::
Config
&
config
=
server
::
Config
::
GetInstance
();
auto
build_index_gpus
=
scheduler
::
get_build_resources
(
);
std
::
vector
<
int32_t
>
build_index_gpus
;
s
=
config
.
GetGpuResourceConfigBuildIndexResources
(
build_index_gpus
);
if
(
!
s
.
ok
())
return
s
;
...
...
@@ -59,18 +58,12 @@ KnowhereResource::Initialize() {
}
// get search gpu resource
std
::
vector
<
std
::
string
>
pool
;
s
=
config
.
Get
ResourceConfigSearchResources
(
pool
);
std
::
vector
<
int32_t
>
search_gpus
;
s
=
config
.
Get
GpuResourceConfigSearchResources
(
search_gpus
);
if
(
!
s
.
ok
())
return
s
;
std
::
set
<
uint64_t
>
gpu_ids
;
for
(
auto
&
resource
:
pool
)
{
if
(
resource
.
length
()
<
4
||
resource
.
substr
(
0
,
3
)
!=
"gpu"
)
{
// invalid
continue
;
}
auto
gpu_id
=
std
::
stoi
(
resource
.
substr
(
3
));
for
(
auto
&
gpu_id
:
search_gpus
)
{
gpu_resources
.
insert
(
std
::
make_pair
(
gpu_id
,
GpuResourceSetting
()));
}
...
...
core/unittest/db/utils.cpp
浏览文件 @
7f5c2fef
...
...
@@ -159,6 +159,10 @@ DBTest::SetUp() {
auto
default_conn
=
milvus
::
scheduler
::
Connection
(
"IO"
,
500.0
);
auto
PCIE
=
milvus
::
scheduler
::
Connection
(
"IO"
,
11000.0
);
res_mgr
->
Connect
(
"disk"
,
"cpu"
,
default_conn
);
#ifdef MILVUS_GPU_VERSION
res_mgr
->
Add
(
milvus
::
scheduler
::
ResourceFactory
::
Create
(
"0"
,
"GPU"
,
0
,
true
,
true
));
res_mgr
->
Connect
(
"cpu"
,
"0"
,
PCIE
);
#endif
res_mgr
->
Start
();
milvus
::
scheduler
::
SchedInst
::
GetInstance
()
->
Start
();
...
...
core/unittest/server/test_config.cpp
浏览文件 @
7f5c2fef
...
...
@@ -216,21 +216,6 @@ TEST_F(ConfigTest, SERVER_CONFIG_VALID_TEST) {
s
=
config
.
GetCacheConfigCpuCacheThreshold
(
float_val
);
ASSERT_TRUE
(
float_val
==
cache_cpu_cache_threshold
);
#ifdef MILVUS_GPU_VERSION
int64_t
cache_gpu_cache_capacity
=
1
;
s
=
config
.
SetCacheConfigGpuCacheCapacity
(
std
::
to_string
(
cache_gpu_cache_capacity
));
ASSERT_TRUE
(
s
.
ok
());
s
=
config
.
GetCacheConfigGpuCacheCapacity
(
int64_val
);
ASSERT_TRUE
(
s
.
ok
());
ASSERT_TRUE
(
int64_val
==
cache_gpu_cache_capacity
);
float
cache_gpu_cache_threshold
=
0.2
;
s
=
config
.
SetCacheConfigGpuCacheThreshold
(
std
::
to_string
(
cache_gpu_cache_threshold
));
ASSERT_TRUE
(
s
.
ok
());
s
=
config
.
GetCacheConfigGpuCacheThreshold
(
float_val
);
ASSERT_TRUE
(
float_val
==
cache_gpu_cache_threshold
);
#endif
bool
cache_insert_data
=
true
;
s
=
config
.
SetCacheConfigCacheInsertData
(
std
::
to_string
(
cache_insert_data
));
ASSERT_TRUE
(
s
.
ok
());
...
...
@@ -259,47 +244,54 @@ TEST_F(ConfigTest, SERVER_CONFIG_VALID_TEST) {
ASSERT_TRUE
(
s
.
ok
());
ASSERT_TRUE
(
int32_val
==
engine_gpu_search_threshold
);
/* resource config */
std
::
string
resource_mode
=
"simple"
;
s
=
config
.
Set
ResourceConfigMode
(
resource_mode
);
/*
gpu
resource config */
bool
resource_enable_gpu
=
true
;
s
=
config
.
Set
GpuResourceConfigEnableGpu
(
std
::
to_string
(
resource_enable_gpu
)
);
ASSERT_TRUE
(
s
.
ok
());
s
=
config
.
Get
ResourceConfigMode
(
str
_val
);
s
=
config
.
Get
GpuResourceConfigEnableGpu
(
bool
_val
);
ASSERT_TRUE
(
s
.
ok
());
ASSERT_TRUE
(
str_val
==
resource_mode
);
ASSERT_TRUE
(
bool_val
==
resource_enable_gpu
);
#ifdef MILVUS_CPU_VERSION
std
::
vector
<
std
::
string
>
search_resources
=
{
"cpu"
};
#else
std
::
vector
<
std
::
string
>
search_resources
=
{
"cpu"
,
"gpu0"
};
#endif
std
::
vector
<
std
::
string
>
search_res_vec
;
#ifdef MILVUS_GPU_VERSION
int64_t
gpu_cache_capacity
=
1
;
s
=
config
.
SetGpuResourceConfigCacheCapacity
(
std
::
to_string
(
gpu_cache_capacity
));
ASSERT_TRUE
(
s
.
ok
());
s
=
config
.
GetGpuResourceConfigCacheCapacity
(
int64_val
);
ASSERT_TRUE
(
s
.
ok
());
ASSERT_TRUE
(
int64_val
==
gpu_cache_capacity
);
float
gpu_cache_threshold
=
0.2
;
s
=
config
.
SetGpuResourceConfigCacheThreshold
(
std
::
to_string
(
gpu_cache_threshold
));
ASSERT_TRUE
(
s
.
ok
());
s
=
config
.
GetGpuResourceConfigCacheThreshold
(
float_val
);
ASSERT_TRUE
(
float_val
==
gpu_cache_threshold
);
std
::
vector
<
std
::
string
>
search_resources
=
{
"gpu0"
};
std
::
vector
<
int32_t
>
search_res_vec
;
std
::
string
search_res_str
;
milvus
::
server
::
StringHelpFunctions
::
MergeStringWithDelimeter
(
search_resources
,
milvus
::
server
::
CONFIG_
RESOURCE_RESOURCES
_DELIMITER
,
search_res_str
);
s
=
config
.
SetResourceConfigSearchResources
(
search_res_str
);
search_resources
,
milvus
::
server
::
CONFIG_
GPU_RESOURCE
_DELIMITER
,
search_res_str
);
s
=
config
.
Set
Gpu
ResourceConfigSearchResources
(
search_res_str
);
ASSERT_TRUE
(
s
.
ok
());
s
=
config
.
GetResourceConfigSearchResources
(
search_res_vec
);
s
=
config
.
Get
Gpu
ResourceConfigSearchResources
(
search_res_vec
);
ASSERT_TRUE
(
s
.
ok
());
for
(
size_t
i
=
0
;
i
<
search_resources
.
size
();
i
++
)
{
ASSERT_TRUE
(
s
earch_resources
[
i
]
==
search_res_vec
[
i
]);
ASSERT_TRUE
(
s
td
::
stoi
(
search_resources
[
i
].
substr
(
3
))
==
search_res_vec
[
i
]);
}
#ifdef MILVUS_CPU_VERSION
std
::
vector
<
std
::
string
>
index_build_resources
=
{
"cpu"
};
#else
std
::
vector
<
std
::
string
>
index_build_resources
=
{
"gpu0"
,
"gpu1"
};
#endif
std
::
vector
<
std
::
string
>
index_build_res_vec
;
std
::
string
index_build_res_str
;
std
::
vector
<
std
::
string
>
build_index_resources
=
{
"gpu0"
};
std
::
vector
<
int32_t
>
build_index_res_vec
;
std
::
string
build_index_res_str
;
milvus
::
server
::
StringHelpFunctions
::
MergeStringWithDelimeter
(
index_build_resources
,
milvus
::
server
::
CONFIG_RESOURCE_RESOURCES_DELIMITER
,
index_build
_res_str
);
s
=
config
.
Set
ResourceConfigIndexBuildResources
(
index_build
_res_str
);
build_index_resources
,
milvus
::
server
::
CONFIG_GPU_RESOURCE_DELIMITER
,
build_index
_res_str
);
s
=
config
.
Set
GpuResourceConfigBuildIndexResources
(
build_index
_res_str
);
ASSERT_TRUE
(
s
.
ok
());
s
=
config
.
Get
ResourceConfigIndexBuildResources
(
index_build
_res_vec
);
s
=
config
.
Get
GpuResourceConfigBuildIndexResources
(
build_index
_res_vec
);
ASSERT_TRUE
(
s
.
ok
());
for
(
size_t
i
=
0
;
i
<
index_build
_resources
.
size
();
i
++
)
{
ASSERT_TRUE
(
index_build_resources
[
i
]
==
index_build
_res_vec
[
i
]);
for
(
size_t
i
=
0
;
i
<
build_index
_resources
.
size
();
i
++
)
{
ASSERT_TRUE
(
std
::
stoi
(
build_index_resources
[
i
].
substr
(
3
))
==
build_index
_res_vec
[
i
]);
}
#endif
}
TEST_F
(
ConfigTest
,
SERVER_CONFIG_INVALID_TEST
)
{
...
...
@@ -386,18 +378,6 @@ TEST_F(ConfigTest, SERVER_CONFIG_INVALID_TEST) {
s
=
config
.
SetCacheConfigCpuCacheThreshold
(
"1.0"
);
ASSERT_FALSE
(
s
.
ok
());
#ifdef MILVUS_GPU_VERSION
s
=
config
.
SetCacheConfigGpuCacheCapacity
(
"a"
);
ASSERT_FALSE
(
s
.
ok
());
s
=
config
.
SetCacheConfigGpuCacheCapacity
(
"128"
);
ASSERT_FALSE
(
s
.
ok
());
s
=
config
.
SetCacheConfigGpuCacheThreshold
(
"a"
);
ASSERT_FALSE
(
s
.
ok
());
s
=
config
.
SetCacheConfigGpuCacheThreshold
(
"1.0"
);
ASSERT_FALSE
(
s
.
ok
());
#endif
s
=
config
.
SetCacheConfigCacheInsertData
(
"N"
);
ASSERT_FALSE
(
s
.
ok
());
...
...
@@ -413,20 +393,29 @@ TEST_F(ConfigTest, SERVER_CONFIG_INVALID_TEST) {
s
=
config
.
SetEngineConfigGpuSearchThreshold
(
"-1"
);
ASSERT_FALSE
(
s
.
ok
());
/* resource config */
s
=
config
.
SetResourceConfigMode
(
"default"
);
/* gpu resource config */
s
=
config
.
SetGpuResourceConfigEnableGpu
(
"ok"
);
ASSERT_FALSE
(
s
.
ok
());
#ifdef MILVUS_GPU_VERSION
s
=
config
.
SetGpuResourceConfigCacheCapacity
(
"a"
);
ASSERT_FALSE
(
s
.
ok
());
s
=
config
.
SetGpuResourceConfigCacheCapacity
(
"128"
);
ASSERT_FALSE
(
s
.
ok
());
s
=
config
.
SetResourceConfigSearchResources
(
"gpu10"
);
s
=
config
.
SetGpuResourceConfigCacheThreshold
(
"a"
);
ASSERT_FALSE
(
s
.
ok
());
s
=
config
.
SetGpuResourceConfigCacheThreshold
(
"1.0"
);
ASSERT_FALSE
(
s
.
ok
());
s
=
config
.
Set
ResourceConfigSearchResources
(
"cpu
"
);
ASSERT_
TRU
E
(
s
.
ok
());
s
=
config
.
Set
GpuResourceConfigSearchResources
(
"gpu10
"
);
ASSERT_
FALS
E
(
s
.
ok
());
s
=
config
.
Set
ResourceConfigIndexBuild
Resources
(
"gup2"
);
s
=
config
.
Set
GpuResourceConfigBuildIndex
Resources
(
"gup2"
);
ASSERT_FALSE
(
s
.
ok
());
s
=
config
.
Set
ResourceConfigIndexBuild
Resources
(
"gpu16"
);
s
=
config
.
Set
GpuResourceConfigBuildIndex
Resources
(
"gpu16"
);
ASSERT_FALSE
(
s
.
ok
());
#endif
}
TEST_F
(
ConfigTest
,
SERVER_CONFIG_TEST
)
{
...
...
@@ -443,4 +432,3 @@ TEST_F(ConfigTest, SERVER_CONFIG_TEST) {
s
=
config
.
ResetDefaultConfig
();
ASSERT_TRUE
(
s
.
ok
());
}
core/unittest/server/test_rpc.cpp
浏览文件 @
7f5c2fef
...
...
@@ -85,7 +85,6 @@ class RpcHandlerTest : public testing::Test {
// DBWrapper::GetInstance().GetInstance().StartService();
// DBWrapper::GetInstance().GetInstance().StopService();
milvus
::
server
::
Config
::
GetInstance
().
SetResourceConfigMode
(
"single"
);
milvus
::
server
::
DBWrapper
::
GetInstance
().
StartService
();
// initialize handler, create table
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录