Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Paddle
提交
08c90086
P
Paddle
项目概览
PaddlePaddle
/
Paddle
大约 1 年 前同步成功
通知
2299
Star
20931
Fork
5422
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1423
列表
看板
标记
里程碑
合并请求
543
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1,423
Issue
1,423
列表
看板
标记
里程碑
合并请求
543
合并请求
543
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
08c90086
编写于
6月 16, 2023
作者:
Z
zhupengyang
提交者:
GitHub
6月 16, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
lite xpu api & clone (#54670)
上级
1a941b71
变更
8
显示空白变更内容
内联
并排
Showing
8 changed file
with
123 addition
and
42 deletion
+123
-42
cmake/external/lite.cmake
cmake/external/lite.cmake
+1
-1
paddle/fluid/framework/naive_executor.cc
paddle/fluid/framework/naive_executor.cc
+36
-0
paddle/fluid/framework/naive_executor.h
paddle/fluid/framework/naive_executor.h
+2
-0
paddle/fluid/inference/analysis/ir_passes/lite_subgraph_pass.cc
.../fluid/inference/analysis/ir_passes/lite_subgraph_pass.cc
+26
-26
paddle/fluid/inference/api/analysis_predictor.cc
paddle/fluid/inference/api/analysis_predictor.cc
+8
-0
paddle/fluid/inference/lite/engine.cc
paddle/fluid/inference/lite/engine.cc
+29
-7
paddle/fluid/inference/lite/engine.h
paddle/fluid/inference/lite/engine.h
+17
-8
paddle/fluid/operators/lite/lite_engine_op.h
paddle/fluid/operators/lite/lite_engine_op.h
+4
-0
未找到文件。
cmake/external/lite.cmake
浏览文件 @
08c90086
...
@@ -73,7 +73,7 @@ if(NOT LITE_SOURCE_DIR OR NOT LITE_BINARY_DIR)
...
@@ -73,7 +73,7 @@ if(NOT LITE_SOURCE_DIR OR NOT LITE_BINARY_DIR)
)
)
if
(
NOT LITE_GIT_TAG
)
if
(
NOT LITE_GIT_TAG
)
set
(
LITE_GIT_TAG
81ef66554099800c143a0feff6e0a491b3b0d12e
)
set
(
LITE_GIT_TAG
d06a1f36ec564fb618d555b342ca1076623d8b94
)
endif
()
endif
()
if
(
NOT CUDA_ARCH_NAME
)
if
(
NOT CUDA_ARCH_NAME
)
...
...
paddle/fluid/framework/naive_executor.cc
浏览文件 @
08c90086
...
@@ -31,6 +31,9 @@
...
@@ -31,6 +31,9 @@
#ifdef PADDLE_WITH_INFERENCE_NVTX
#ifdef PADDLE_WITH_INFERENCE_NVTX
#include "paddle/fluid/platform/device/gpu/cuda/cuda_profiler.h"
#include "paddle/fluid/platform/device/gpu/cuda/cuda_profiler.h"
#endif
#endif
#ifdef PADDLE_WITH_LITE
#include "paddle/fluid/operators/lite/lite_engine_op.h"
#endif
namespace
paddle
{
namespace
paddle
{
namespace
framework
{
namespace
framework
{
...
@@ -271,5 +274,38 @@ void NaiveExecutor::ResetTrtOps(int num) {
...
@@ -271,5 +274,38 @@ void NaiveExecutor::ResetTrtOps(int num) {
#endif
#endif
}
}
void
NaiveExecutor
::
CloneLiteEnigne
(
int
num
,
void
*
stream
)
{
#ifdef PADDLE_WITH_LITE
for
(
auto
&
op
:
ops_
)
{
if
(
op
->
Type
()
==
"lite_engine"
)
{
operators
::
LiteEngineOp
*
lite_op
=
dynamic_cast
<
operators
::
LiteEngineOp
*>
(
op
.
get
());
PADDLE_ENFORCE_NOT_NULL
(
lite_op
,
phi
::
errors
::
InvalidArgument
(
"lite_op(type: lite_engine) should be created."
));
std
::
string
engine_key
=
lite_op
->
Attr
<
std
::
string
>
(
"engine_key"
);
std
::
string
new_engine_key
=
engine_key
+
"_"
+
std
::
to_string
(
num
);
PADDLE_ENFORCE
(
paddle
::
inference
::
Singleton
<
inference
::
lite
::
EngineManager
>::
Global
()
.
Has
(
engine_key
),
phi
::
errors
::
InvalidArgument
(
"lite_engine(key: %s) should be created."
,
engine_key
));
auto
*
lite_engine
=
paddle
::
inference
::
Singleton
<
inference
::
lite
::
EngineManager
>::
Global
()
.
Get
(
engine_key
);
auto
new_lite_engine
=
lite_engine
->
Clone
();
#ifdef LITE_SUBGRAPH_WITH_XPU
new_lite_engine
->
SetStream
(
TARGET
(
kXPU
),
stream
);
#endif
paddle
::
inference
::
Singleton
<
inference
::
lite
::
EngineManager
>::
Global
()
.
Set
(
new_engine_key
,
new_lite_engine
);
lite_op
->
SetAttr
(
"engine_key"
,
new_engine_key
);
lite_op
->
SetEngine
(
new_lite_engine
.
get
());
}
}
#endif
}
}
// namespace framework
}
// namespace framework
}
// namespace paddle
}
// namespace paddle
paddle/fluid/framework/naive_executor.h
浏览文件 @
08c90086
...
@@ -73,6 +73,8 @@ class NaiveExecutor {
...
@@ -73,6 +73,8 @@ class NaiveExecutor {
void
ResetTrtOps
(
int
num
);
void
ResetTrtOps
(
int
num
);
void
CloneLiteEnigne
(
int
num
,
void
*
stream
);
void
RegisterOutputHook
(
const
HookFunc
&
hookfunc
);
void
RegisterOutputHook
(
const
HookFunc
&
hookfunc
);
private:
private:
...
...
paddle/fluid/inference/analysis/ir_passes/lite_subgraph_pass.cc
浏览文件 @
08c90086
...
@@ -252,24 +252,7 @@ void LiteSubgraphPass::SetUpEngine(
...
@@ -252,24 +252,7 @@ void LiteSubgraphPass::SetUpEngine(
bool
use_opencl
=
Get
<
bool
>
(
"use_opencl"
);
bool
use_opencl
=
Get
<
bool
>
(
"use_opencl"
);
int
cpu_math_library_num_threads
=
Get
<
int
>
(
"cpu_math_library_num_threads"
);
int
cpu_math_library_num_threads
=
Get
<
int
>
(
"cpu_math_library_num_threads"
);
bool
use_xpu
=
Get
<
bool
>
(
"use_xpu"
);
bool
use_xpu
=
Get
<
bool
>
(
"use_xpu"
);
int
xpu_device_id
=
Get
<
int
>
(
"xpu_device_id"
);
size_t
xpu_l3_size
=
Get
<
size_t
>
(
"xpu_l3_size"
);
bool
xpu_l3_locked
=
Get
<
bool
>
(
"xpu_l3_locked"
);
bool
xpu_conv_autotune
=
Get
<
int
>
(
"xpu_conv_autotune_level"
)
>
0
;
std
::
string
xpu_conv_autotune_file
=
Get
<
std
::
string
>
(
"xpu_conv_autotune_file"
);
int
xpu_gemm_compute_precision
=
Get
<
int
>
(
"xpu_gemm_compute_precision"
);
std
::
string
xpu_transformer_encoder_precision
{
"int16"
};
if
(
xpu_gemm_compute_precision
==
0
)
{
xpu_transformer_encoder_precision
=
"int8"
;
}
else
if
(
xpu_gemm_compute_precision
==
1
)
{
xpu_transformer_encoder_precision
=
"int16"
;
}
else
if
(
xpu_gemm_compute_precision
==
2
)
{
xpu_transformer_encoder_precision
=
"int31"
;
}
bool
xpu_transformer_encoder_adaptive_seqlen
=
Get
<
bool
>
(
"xpu_transformer_encoder_adaptive_seqlen"
);
bool
xpu_enable_multi_stream
=
Get
<
bool
>
(
"xpu_enable_multi_stream"
);
// NNAdapter Related
// NNAdapter Related
bool
use_nnadapter
=
Get
<
bool
>
(
"use_nnadapter"
);
bool
use_nnadapter
=
Get
<
bool
>
(
"use_nnadapter"
);
std
::
string
nnadapter_model_cache_dir
=
std
::
string
nnadapter_model_cache_dir
=
...
@@ -354,15 +337,32 @@ void LiteSubgraphPass::SetUpEngine(
...
@@ -354,15 +337,32 @@ void LiteSubgraphPass::SetUpEngine(
}
}
config
.
cpu_math_library_num_threads
=
cpu_math_library_num_threads
;
config
.
cpu_math_library_num_threads
=
cpu_math_library_num_threads
;
config
.
xpu_l3_size
=
xpu_l3_size
;
config
.
device_id
=
xpu_device_id
;
// xpu related
config
.
xpu_l3_locked
=
xpu_l3_locked
;
config
.
xpu_device_id
=
Get
<
int
>
(
"xpu_device_id"
);
config
.
xpu_conv_autotune
=
xpu_conv_autotune
;
config
.
xpu_l3_size
=
Get
<
size_t
>
(
"xpu_l3_size"
);
config
.
xpu_conv_autotune_file
=
xpu_conv_autotune_file
;
config
.
xpu_l3_ptr
=
Get
<
void
*>
(
"xpu_l3_ptr"
);
config
.
xpu_transformer_encoder_precision
=
xpu_transformer_encoder_precision
;
config
.
xpu_l3_autotune_size
=
Get
<
size_t
>
(
"xpu_l3_autotune_size"
);
config
.
xpu_stream
=
Get
<
void
*>
(
"xpu_stream"
);
config
.
xpu_conv_autotune_level
=
Get
<
int
>
(
"xpu_conv_autotune_level"
);
config
.
xpu_conv_autotune_file
=
Get
<
std
::
string
>
(
"xpu_conv_autotune_file"
);
config
.
xpu_conv_autotune_file_writeback
=
Get
<
bool
>
(
"xpu_conv_autotune_file_writeback"
);
config
.
xpu_fc_autotune_level
=
Get
<
int
>
(
"xpu_fc_autotune_level"
);
config
.
xpu_fc_autotune_file
=
Get
<
std
::
string
>
(
"xpu_fc_autotune_file"
);
config
.
xpu_fc_autotune_file_writeback
=
Get
<
bool
>
(
"xpu_fc_autotune_file_writeback"
);
config
.
xpu_gemm_compute_precision
=
Get
<
int
>
(
"xpu_gemm_compute_precision"
);
config
.
xpu_transformer_softmax_optimize_level
=
Get
<
int
>
(
"xpu_transformer_softmax_optimize_level"
);
config
.
xpu_transformer_encoder_adaptive_seqlen
=
config
.
xpu_transformer_encoder_adaptive_seqlen
=
xpu_transformer_encoder_adaptive_seqlen
;
Get
<
bool
>
(
"xpu_transformer_encoder_adaptive_seqlen"
);
config
.
xpu_enable_multi_stream
=
xpu_enable_multi_stream
;
config
.
xpu_quant_post_static_gelu_out_threshold
=
Get
<
float
>
(
"xpu_quant_post_static_gelu_out_threshold"
);
config
.
xpu_quant_post_dynamic_activation_method
=
Get
<
int
>
(
"xpu_quant_post_dynamic_activation_method"
);
config
.
xpu_enable_multi_stream
=
Get
<
bool
>
(
"xpu_enable_multi_stream"
);
// NNAdapter Related
// NNAdapter Related
config
.
nnadapter_model_cache_dir
=
nnadapter_model_cache_dir
;
config
.
nnadapter_model_cache_dir
=
nnadapter_model_cache_dir
;
config
.
nnadapter_device_names
=
nnadapter_device_names
;
config
.
nnadapter_device_names
=
nnadapter_device_names
;
...
...
paddle/fluid/inference/api/analysis_predictor.cc
浏览文件 @
08c90086
...
@@ -2615,6 +2615,14 @@ std::unique_ptr<PaddlePredictor> AnalysisPredictor::Clone(void *stream) {
...
@@ -2615,6 +2615,14 @@ std::unique_ptr<PaddlePredictor> AnalysisPredictor::Clone(void *stream) {
x
->
Init
(
scope_
,
inference_program_
);
x
->
Init
(
scope_
,
inference_program_
);
#ifdef PADDLE_WITH_TENSORRT
#ifdef PADDLE_WITH_TENSORRT
x
->
executor_
->
ResetTrtOps
(
++
AnalysisPredictor
::
clone_num_
);
x
->
executor_
->
ResetTrtOps
(
++
AnalysisPredictor
::
clone_num_
);
#endif
#ifdef PADDLE_WITH_LITE
#ifdef LITE_SUBGRAPH_WITH_XPU
x
->
executor_
->
CloneLiteEnigne
(
++
AnalysisPredictor
::
clone_num_
,
config_
.
xpu_config_
.
stream
);
#else
x
->
executor_
->
CloneLiteEnigne
(
++
AnalysisPredictor
::
clone_num_
,
nullptr
);
#endif
#endif
#endif
return
std
::
unique_ptr
<
PaddlePredictor
>
(
x
);
return
std
::
unique_ptr
<
PaddlePredictor
>
(
x
);
}
}
...
...
paddle/fluid/inference/lite/engine.cc
浏览文件 @
08c90086
...
@@ -24,6 +24,8 @@
...
@@ -24,6 +24,8 @@
#include <utility>
#include <utility>
#include "glog/logging.h"
namespace
paddle
{
namespace
paddle
{
namespace
inference
{
namespace
inference
{
namespace
lite
{
namespace
lite
{
...
@@ -56,13 +58,28 @@ paddle::lite_api::PaddlePredictor* EngineManager::Create(
...
@@ -56,13 +58,28 @@ paddle::lite_api::PaddlePredictor* EngineManager::Create(
#endif
#endif
#ifdef LITE_SUBGRAPH_WITH_XPU
#ifdef LITE_SUBGRAPH_WITH_XPU
lite_cxx_config
.
set_xpu_l3_cache_method
(
cfg
.
xpu_l3_size
,
cfg
.
xpu_l3_locked
);
paddle
::
lite_api
::
XpuConfig
lite_xpu_config
;
lite_cxx_config
.
set_xpu_conv_autotune
(
cfg
.
xpu_conv_autotune
,
lite_xpu_config
.
device_id
=
cfg
.
xpu_device_id
;
cfg
.
xpu_conv_autotune_file
);
lite_xpu_config
.
l3_size
=
cfg
.
xpu_l3_size
;
lite_cxx_config
.
set_xpu_multi_encoder_method
(
lite_xpu_config
.
l3_ptr
=
cfg
.
xpu_l3_ptr
;
cfg
.
xpu_transformer_encoder_precision
,
lite_xpu_config
.
l3_autotune_size
=
cfg
.
xpu_l3_size
;
cfg
.
xpu_transformer_encoder_adaptive_seqlen
);
lite_xpu_config
.
conv_autotune_level
=
cfg
.
xpu_conv_autotune_level
;
lite_cxx_config
.
set_xpu_dev_per_thread
(
cfg
.
device_id
);
lite_xpu_config
.
conv_autotune_file
=
cfg
.
xpu_conv_autotune_file
;
lite_xpu_config
.
conv_autotune_file_writeback
=
cfg
.
xpu_conv_autotune_file_writeback
;
lite_xpu_config
.
fc_autotune_level
=
cfg
.
xpu_fc_autotune_level
;
lite_xpu_config
.
fc_autotune_file
=
cfg
.
xpu_fc_autotune_file
;
lite_xpu_config
.
fc_autotune_file_writeback
=
cfg
.
xpu_fc_autotune_file_writeback
;
lite_xpu_config
.
gemm_compute_precision
=
cfg
.
xpu_gemm_compute_precision
;
lite_xpu_config
.
transformer_softmax_optimize_level
=
cfg
.
xpu_transformer_softmax_optimize_level
;
lite_xpu_config
.
transformer_encoder_adaptive_seqlen
=
cfg
.
xpu_transformer_encoder_adaptive_seqlen
;
lite_xpu_config
.
quant_post_static_gelu_out_threshold
=
cfg
.
xpu_quant_post_static_gelu_out_threshold
;
lite_xpu_config
.
quant_post_dynamic_activation_method
=
cfg
.
xpu_quant_post_dynamic_activation_method
;
if
(
cfg
.
xpu_enable_multi_stream
)
{
if
(
cfg
.
xpu_enable_multi_stream
)
{
lite_cxx_config
.
enable_xpu_multi_stream
();
lite_cxx_config
.
enable_xpu_multi_stream
();
}
}
...
@@ -102,6 +119,11 @@ paddle::lite_api::PaddlePredictor* EngineManager::Create(
...
@@ -102,6 +119,11 @@ paddle::lite_api::PaddlePredictor* EngineManager::Create(
return
engines_
[
name
].
get
();
return
engines_
[
name
].
get
();
}
}
void
EngineManager
::
Set
(
const
std
::
string
&
name
,
std
::
shared_ptr
<
paddle
::
lite_api
::
PaddlePredictor
>
p
)
{
engines_
[
name
]
=
p
;
}
void
EngineManager
::
DeleteAll
()
{
void
EngineManager
::
DeleteAll
()
{
for
(
auto
&
item
:
engines_
)
{
for
(
auto
&
item
:
engines_
)
{
item
.
second
.
reset
();
item
.
second
.
reset
();
...
...
paddle/fluid/inference/lite/engine.h
浏览文件 @
08c90086
...
@@ -36,17 +36,24 @@ struct EngineConfig {
...
@@ -36,17 +36,24 @@ struct EngineConfig {
std
::
vector
<
std
::
string
>
neglected_passes
;
std
::
vector
<
std
::
string
>
neglected_passes
;
lite_api
::
LiteModelType
model_type
{
lite_api
::
LiteModelType
::
kProtobuf
};
lite_api
::
LiteModelType
model_type
{
lite_api
::
LiteModelType
::
kProtobuf
};
bool
model_from_memory
{
true
};
bool
model_from_memory
{
true
};
// TODO(wilber): now only works for xpu, lite gpu can support device_id or
// not?
int
device_id
=
0
;
// for xpu
// for xpu
int
xpu_device_id
{
0
};
size_t
xpu_l3_size
{
0
};
size_t
xpu_l3_size
{
0
};
bool
xpu_l3_locked
=
false
;
void
*
xpu_l3_ptr
{
nullptr
};
bool
xpu_conv_autotune
=
true
;
size_t
xpu_l3_autotune_size
{
0
};
std
::
string
xpu_conv_autotune_file
=
""
;
void
*
xpu_stream
{
nullptr
};
std
::
string
xpu_transformer_encoder_precision
=
"int16"
;
int
xpu_conv_autotune_level
{
0
};
bool
xpu_transformer_encoder_adaptive_seqlen
=
false
;
std
::
string
xpu_conv_autotune_file
;
bool
xpu_conv_autotune_file_writeback
{
false
};
int
xpu_fc_autotune_level
{
0
};
std
::
string
xpu_fc_autotune_file
;
bool
xpu_fc_autotune_file_writeback
{
false
};
int
xpu_gemm_compute_precision
{
1
};
int
xpu_transformer_softmax_optimize_level
{
0
};
bool
xpu_transformer_encoder_adaptive_seqlen
{
true
};
float
xpu_quant_post_static_gelu_out_threshold
{
10.
f
};
int
xpu_quant_post_dynamic_activation_method
{
0
};
bool
xpu_enable_multi_stream
=
false
;
bool
xpu_enable_multi_stream
=
false
;
// for x86 or arm
// for x86 or arm
...
@@ -78,6 +85,8 @@ class EngineManager {
...
@@ -78,6 +85,8 @@ class EngineManager {
paddle
::
lite_api
::
PaddlePredictor
*
Get
(
const
std
::
string
&
name
)
const
;
paddle
::
lite_api
::
PaddlePredictor
*
Get
(
const
std
::
string
&
name
)
const
;
paddle
::
lite_api
::
PaddlePredictor
*
Create
(
const
std
::
string
&
name
,
paddle
::
lite_api
::
PaddlePredictor
*
Create
(
const
std
::
string
&
name
,
const
EngineConfig
&
cfg
);
const
EngineConfig
&
cfg
);
void
Set
(
const
std
::
string
&
name
,
std
::
shared_ptr
<
paddle
::
lite_api
::
PaddlePredictor
>
p
);
void
DeleteAll
();
void
DeleteAll
();
private:
private:
...
...
paddle/fluid/operators/lite/lite_engine_op.h
浏览文件 @
08c90086
...
@@ -63,6 +63,10 @@ class LiteEngineOp : public framework::OperatorBase {
...
@@ -63,6 +63,10 @@ class LiteEngineOp : public framework::OperatorBase {
zero_copy_
=
Attr
<
bool
>
(
"zero_copy"
);
zero_copy_
=
Attr
<
bool
>
(
"zero_copy"
);
}
}
void
SetEngine
(
paddle
::
lite_api
::
PaddlePredictor
*
engine
)
{
engine_
=
engine
;
}
protected:
protected:
void
RunImpl
(
const
framework
::
Scope
&
scope
,
void
RunImpl
(
const
framework
::
Scope
&
scope
,
const
platform
::
Place
&
dev_place
)
const
override
{
const
platform
::
Place
&
dev_place
)
const
override
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录