Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
milvus
提交
10d50d2f
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,发现更多精彩内容 >>
提交
10d50d2f
编写于
11月 30, 2019
作者:
F
fishpenguin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
IVF_PQ search on CPUs when using GPU-version
上级
f45df1a2
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
136 addition
and
0 deletion
+136
-0
core/src/scheduler/SchedInst.h
core/src/scheduler/SchedInst.h
+4
-0
core/src/scheduler/optimizer/FaissIVFPQPass.cpp
core/src/scheduler/optimizer/FaissIVFPQPass.cpp
+74
-0
core/src/scheduler/optimizer/FaissIVFPQPass.h
core/src/scheduler/optimizer/FaissIVFPQPass.h
+58
-0
未找到文件。
core/src/scheduler/SchedInst.h
浏览文件 @
10d50d2f
...
...
@@ -25,6 +25,7 @@
#include "optimizer/BuildIndexPass.h"
#include "optimizer/FaissFlatPass.h"
#include "optimizer/FaissIVFFlatPass.h"
#include "optimizer/FaissIVFPQPass.h"
#include "optimizer/FaissIVFSQ8HPass.h"
#include "optimizer/FaissIVFSQ8Pass.h"
#include "optimizer/FallbackPass.h"
...
...
@@ -129,7 +130,10 @@ class OptimizerInst {
pass_list
.
push_back
(
std
::
make_shared
<
FaissFlatPass
>
());
pass_list
.
push_back
(
std
::
make_shared
<
FaissIVFFlatPass
>
());
pass_list
.
push_back
(
std
::
make_shared
<
FaissIVFSQ8Pass
>
());
#ifdef CUSTOMIZATION
pass_list
.
push_back
(
std
::
make_shared
<
FaissIVFSQ8HPass
>
());
#endif
pass_list
.
push_back
(
std
::
make_shared
<
FaissIVFPQPass
>
());
}
#endif
pass_list
.
push_back
(
std
::
make_shared
<
FallbackPass
>
());
...
...
core/src/scheduler/optimizer/FaissIVFPQPass.cpp
0 → 100644
浏览文件 @
10d50d2f
// 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.
#ifdef MILVUS_GPU_VERSION
#include "scheduler/optimizer/FaissIVFPQPass.h"
#include "cache/GpuCacheMgr.h"
#include "scheduler/SchedInst.h"
#include "scheduler/Utils.h"
#include "scheduler/task/SearchTask.h"
#include "scheduler/tasklabel/SpecResLabel.h"
#include "server/Config.h"
#include "utils/Log.h"
namespace
milvus
{
namespace
scheduler
{
void
FaissIVFPQPass
::
Init
()
{
#ifdef MILVUS_GPU_VERSION
server
::
Config
&
config
=
server
::
Config
::
GetInstance
();
Status
s
=
config
.
GetEngineConfigGpuSearchThreshold
(
threshold_
);
if
(
!
s
.
ok
())
{
threshold_
=
std
::
numeric_limits
<
int32_t
>::
max
();
}
s
=
config
.
GetGpuResourceConfigSearchResources
(
gpus
);
if
(
!
s
.
ok
())
{
throw
;
}
#endif
}
bool
FaissIVFPQPass
::
Run
(
const
TaskPtr
&
task
)
{
if
(
task
->
Type
()
!=
TaskType
::
SearchTask
)
{
return
false
;
}
auto
search_task
=
std
::
static_pointer_cast
<
XSearchTask
>
(
task
);
if
(
search_task
->
file_
->
engine_type_
!=
(
int
)
engine
::
EngineType
::
FAISS_PQ
)
{
return
false
;
}
auto
search_job
=
std
::
static_pointer_cast
<
SearchJob
>
(
search_task
->
job_
.
lock
());
ResourcePtr
res_ptr
;
if
(
search_job
->
nq
()
<
threshold_
)
{
SERVER_LOG_DEBUG
<<
"FaissIVFPQPass: nq < gpu_search_threshold, specify cpu to search!"
;
res_ptr
=
ResMgrInst
::
GetInstance
()
->
GetResource
(
"cpu"
);
}
else
{
auto
best_device_id
=
count_
%
gpus
.
size
();
SERVER_LOG_DEBUG
<<
"FaissIVFPQPass: nq > gpu_search_threshold, specify gpu"
<<
best_device_id
<<
" to search!"
;
count_
++
;
res_ptr
=
ResMgrInst
::
GetInstance
()
->
GetResource
(
ResourceType
::
GPU
,
gpus
[
best_device_id
]);
}
auto
label
=
std
::
make_shared
<
SpecResLabel
>
(
res_ptr
);
task
->
label
()
=
label
;
return
true
;
}
}
// namespace scheduler
}
// namespace milvus
#endif
core/src/scheduler/optimizer/FaissIVFPQPass.h
0 → 100644
浏览文件 @
10d50d2f
// 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.
#ifdef MILVUS_GPU_VERSION
#pragma once
#include <condition_variable>
#include <deque>
#include <limits>
#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
FaissIVFPQPass
:
public
Pass
{
public:
FaissIVFPQPass
()
=
default
;
public:
void
Init
()
override
;
bool
Run
(
const
TaskPtr
&
task
)
override
;
private:
int64_t
threshold_
=
std
::
numeric_limits
<
int64_t
>::
max
();
int64_t
count_
=
0
;
std
::
vector
<
int64_t
>
gpus
;
};
using
FaissIVFPQPassPtr
=
std
::
shared_ptr
<
FaissIVFPQPass
>
;
}
// namespace scheduler
}
// namespace milvus
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录