Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Paddle
提交
edd962b1
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看板
未验证
提交
edd962b1
编写于
9月 09, 2020
作者:
W
Wilber
提交者:
GitHub
9月 09, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add 2.0 inference api doc. (#27125)
上级
5d039f40
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
156 addition
and
1 deletion
+156
-1
paddle/fluid/inference/api/paddle_inference_api.h
paddle/fluid/inference/api/paddle_inference_api.h
+156
-1
未找到文件。
paddle/fluid/inference/api/paddle_inference_api.h
浏览文件 @
edd962b1
...
@@ -31,12 +31,30 @@ limitations under the License. */
...
@@ -31,12 +31,30 @@ limitations under the License. */
#include "paddle_analysis_config.h" // NOLINT
#include "paddle_analysis_config.h" // NOLINT
#include "paddle_api.h" // NOLINT
#include "paddle_api.h" // NOLINT
///
/// \file paddle_inference_api.h
///
/// \brief Paddle Inference API
///
/// \author paddle-infer@baidu.com
/// \date 2020-09-01
/// \since 2.0.0-beta
///
namespace
paddle_infer
{
namespace
paddle_infer
{
using
DataType
=
paddle
::
PaddleDType
;
using
DataType
=
paddle
::
PaddleDType
;
using
PlaceType
=
paddle
::
PaddlePlace
;
using
PlaceType
=
paddle
::
PaddlePlace
;
using
PrecisionType
=
paddle
::
AnalysisConfig
::
Precision
;
using
PrecisionType
=
paddle
::
AnalysisConfig
::
Precision
;
using
Config
=
paddle
::
AnalysisConfig
;
using
Config
=
paddle
::
AnalysisConfig
;
///
/// \class Tensor
///
/// \brief Represents an n-dimensional array of values.
/// The Tensor is used to store the input or output of the network.
/// It is obtained through Predictor::GetinputHandle()
/// and Predictor::GetOutputHandle() interface.
///
class
PD_INFER_DECL
Tensor
{
class
PD_INFER_DECL
Tensor
{
public:
public:
// Can only be created by predictor->GetInputHandle(cosnt std::string& name)
// Can only be created by predictor->GetInputHandle(cosnt std::string& name)
...
@@ -44,33 +62,106 @@ class PD_INFER_DECL Tensor {
...
@@ -44,33 +62,106 @@ class PD_INFER_DECL Tensor {
Tensor
()
=
delete
;
Tensor
()
=
delete
;
explicit
Tensor
(
std
::
unique_ptr
<
paddle
::
ZeroCopyTensor
>&&
tensor
)
explicit
Tensor
(
std
::
unique_ptr
<
paddle
::
ZeroCopyTensor
>&&
tensor
)
:
tensor_
(
std
::
move
(
tensor
))
{}
:
tensor_
(
std
::
move
(
tensor
))
{}
///
/// \brief Reset the shape of the tensor.
/// Generally it's only used for the input tensor.
/// Reshape must be called before calling mutable_data() or CopyFromCpu()
/// \param shape The shape to set.
///
void
Reshape
(
const
std
::
vector
<
int
>&
shape
);
void
Reshape
(
const
std
::
vector
<
int
>&
shape
);
///
/// \brief Copy the host memory to tensor data.
/// It's usually used to set the input tensor data.
/// \param data The pointer of the data, from which the tensor will copy.
///
template
<
typename
T
>
template
<
typename
T
>
void
CopyFromCpu
(
const
T
*
data
);
void
CopyFromCpu
(
const
T
*
data
);
// should add the place
///
/// \brief Get the memory pointer in CPU or GPU with specific data type.
/// Please Reshape the tensor first before call this.
/// It's usually used to get input data pointer.
/// \param place The place of the tensor.
/// \return The tensor data buffer pointer.
///
template
<
typename
T
>
template
<
typename
T
>
T
*
mutable_data
(
PlaceType
place
);
T
*
mutable_data
(
PlaceType
place
);
///
/// \brief Copy the tensor data to the host memory.
/// It's usually used to get the output tensor data.
/// \param[out] data The tensor will copy the data to the address.
///
template
<
typename
T
>
template
<
typename
T
>
void
CopyToCpu
(
T
*
data
);
void
CopyToCpu
(
T
*
data
);
///
/// \brief Get the memory pointer directly.
/// It's usually used to get the output data pointer.
/// \param[out] place To get the device type of the tensor.
/// \param[out] size To get the data size of the tensor.
/// \return The tensor data buffer pointer.
///
template
<
typename
T
>
template
<
typename
T
>
T
*
data
(
PlaceType
*
place
,
int
*
size
)
const
;
T
*
data
(
PlaceType
*
place
,
int
*
size
)
const
;
///
/// \brief Set lod info of the tensor.
/// More about LOD can be seen here:
/// https://www.paddlepaddle.org.cn/documentation/docs/zh/beginners_guide/basic_concept/lod_tensor.html#lodtensor
/// \param x the lod info.
///
void
SetLoD
(
const
std
::
vector
<
std
::
vector
<
size_t
>>&
x
);
void
SetLoD
(
const
std
::
vector
<
std
::
vector
<
size_t
>>&
x
);
/// \brief Return the lod info of the tensor.
std
::
vector
<
std
::
vector
<
size_t
>>
lod
()
const
;
std
::
vector
<
std
::
vector
<
size_t
>>
lod
()
const
;
/// \brief Return the data type of the tensor.
/// It's usually used to get the output tensor data type.
/// \return The data type of the tensor.
DataType
type
()
const
;
DataType
type
()
const
;
/// \brief Return the shape of the Tensor.
std
::
vector
<
int
>
shape
()
const
;
std
::
vector
<
int
>
shape
()
const
;
/// \brief Return the name of the tensor.
const
std
::
string
&
name
()
const
;
const
std
::
string
&
name
()
const
;
private:
private:
std
::
unique_ptr
<
paddle
::
ZeroCopyTensor
>
tensor_
;
std
::
unique_ptr
<
paddle
::
ZeroCopyTensor
>
tensor_
;
};
};
///
/// \class Predictor
///
/// \brief Predictor is the interface for model prediction.
///
/// The predictor has the following typical uses:
///
/// Get predictor
/// \code{cpp}
/// auto predictor = CreatePredictor(config);
/// \endcode
///
/// Get input or output names
/// \code{cpp}
/// auto input_names = predictor->GetInputNames();
/// auto output_names = predictor->GetOutputNames();
/// \endcode
///
/// Get input or output handle
/// \code{cpp}
/// auto input_t = predictor->GetInputHandle(input_names[0]);
/// auto output_t = predictor->GetOutputHandle(output_names[0]);
/// \endcode
///
/// Run predictor
/// \code{cpp}
/// predictor->Run();
/// \endcode
///
class
PD_INFER_DECL
Predictor
{
class
PD_INFER_DECL
Predictor
{
public:
public:
Predictor
()
=
delete
;
Predictor
()
=
delete
;
...
@@ -79,25 +170,78 @@ class PD_INFER_DECL Predictor {
...
@@ -79,25 +170,78 @@ class PD_INFER_DECL Predictor {
explicit
Predictor
(
std
::
unique_ptr
<
paddle
::
PaddlePredictor
>&&
pred
)
explicit
Predictor
(
std
::
unique_ptr
<
paddle
::
PaddlePredictor
>&&
pred
)
:
predictor_
(
std
::
move
(
pred
))
{}
:
predictor_
(
std
::
move
(
pred
))
{}
///
/// \brief Construct a new Predictor object
///
/// \param[in] Config config
///
explicit
Predictor
(
const
Config
&
config
);
explicit
Predictor
(
const
Config
&
config
);
///
/// \brief Get the input names
///
/// \return input names
///
std
::
vector
<
std
::
string
>
GetInputNames
();
std
::
vector
<
std
::
string
>
GetInputNames
();
///
/// \brief Get the Input Tensor object
///
/// \param[in] name input name
/// \return input tensor
///
std
::
unique_ptr
<
Tensor
>
GetInputHandle
(
const
std
::
string
&
name
);
std
::
unique_ptr
<
Tensor
>
GetInputHandle
(
const
std
::
string
&
name
);
///
/// \brief Run the prediction engine
///
/// \return Whether the function executed successfully
///
bool
Run
();
bool
Run
();
///
/// \brief Get the output names
///
/// \return output names
///
std
::
vector
<
std
::
string
>
GetOutputNames
();
std
::
vector
<
std
::
string
>
GetOutputNames
();
///
/// \brief Get the Output Tensor object
///
/// \param[in] name otuput name
/// \return output tensor
///
std
::
unique_ptr
<
Tensor
>
GetOutputHandle
(
const
std
::
string
&
name
);
std
::
unique_ptr
<
Tensor
>
GetOutputHandle
(
const
std
::
string
&
name
);
///
/// \brief Clone to get the new predictor. thread safe.
///
/// \return get a new predictor
///
std
::
unique_ptr
<
Predictor
>
Clone
();
std
::
unique_ptr
<
Predictor
>
Clone
();
/// \brief Clear the intermediate tensors of the predictor
void
ClearIntermediateTensor
();
void
ClearIntermediateTensor
();
private:
private:
std
::
unique_ptr
<
paddle
::
PaddlePredictor
>
predictor_
;
std
::
unique_ptr
<
paddle
::
PaddlePredictor
>
predictor_
;
};
};
///
/// \brief A factory to help create predictors.
///
/// Usage:
///
/// \code{.cpp}
/// Config config;
/// ... // change the configs.
/// auto predictor = CreatePredictor(config);
/// \endcode
///
PD_INFER_DECL
std
::
shared_ptr
<
Predictor
>
CreatePredictor
(
PD_INFER_DECL
std
::
shared_ptr
<
Predictor
>
CreatePredictor
(
const
Config
&
config
);
// NOLINT
const
Config
&
config
);
// NOLINT
PD_INFER_DECL
int
GetNumBytesOfDataType
(
DataType
dtype
);
PD_INFER_DECL
int
GetNumBytesOfDataType
(
DataType
dtype
);
PD_INFER_DECL
std
::
string
GetVersion
();
PD_INFER_DECL
std
::
string
GetVersion
();
...
@@ -128,13 +272,24 @@ T* Tensor::data(PlaceType* place, int* size) const {
...
@@ -128,13 +272,24 @@ T* Tensor::data(PlaceType* place, int* size) const {
namespace
paddle_infer
{
namespace
paddle_infer
{
namespace
services
{
namespace
services
{
///
/// \class PredictorPool
///
/// \brief PredictorPool is a simple encapsulation of Predictor, suitable for
/// use in multi-threaded situations. According to the thread id, the
/// corresponding Predictor is taken out from PredictorPool to complete the
/// prediction.
///
class
PD_INFER_DECL
PredictorPool
{
class
PD_INFER_DECL
PredictorPool
{
public:
public:
PredictorPool
()
=
delete
;
PredictorPool
()
=
delete
;
PredictorPool
(
const
PredictorPool
&
)
=
delete
;
PredictorPool
(
const
PredictorPool
&
)
=
delete
;
PredictorPool
&
operator
=
(
const
PredictorPool
&
)
=
delete
;
PredictorPool
&
operator
=
(
const
PredictorPool
&
)
=
delete
;
/// \brief Construct the predictor pool with \param size predictor instances.
explicit
PredictorPool
(
const
Config
&
config
,
size_t
size
=
1
);
explicit
PredictorPool
(
const
Config
&
config
,
size_t
size
=
1
);
/// \brief Get \param id-th predictor.
Predictor
*
Retrive
(
size_t
idx
);
Predictor
*
Retrive
(
size_t
idx
);
private:
private:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录