Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
edd962b1
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
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. */
#include "paddle_analysis_config.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
{
using
DataType
=
paddle
::
PaddleDType
;
using
PlaceType
=
paddle
::
PaddlePlace
;
using
PrecisionType
=
paddle
::
AnalysisConfig
::
Precision
;
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
{
public:
// Can only be created by predictor->GetInputHandle(cosnt std::string& name)
...
...
@@ -44,33 +62,106 @@ class PD_INFER_DECL Tensor {
Tensor
()
=
delete
;
explicit
Tensor
(
std
::
unique_ptr
<
paddle
::
ZeroCopyTensor
>&&
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
);
///
/// \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
>
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
>
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
>
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
>
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
);
/// \brief Return the lod info of the tensor.
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
;
/// \brief Return the shape of the Tensor.
std
::
vector
<
int
>
shape
()
const
;
/// \brief Return the name of the tensor.
const
std
::
string
&
name
()
const
;
private:
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
{
public:
Predictor
()
=
delete
;
...
...
@@ -79,25 +170,78 @@ class PD_INFER_DECL Predictor {
explicit
Predictor
(
std
::
unique_ptr
<
paddle
::
PaddlePredictor
>&&
pred
)
:
predictor_
(
std
::
move
(
pred
))
{}
///
/// \brief Construct a new Predictor object
///
/// \param[in] Config config
///
explicit
Predictor
(
const
Config
&
config
);
///
/// \brief Get the input names
///
/// \return input names
///
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
);
///
/// \brief Run the prediction engine
///
/// \return Whether the function executed successfully
///
bool
Run
();
///
/// \brief Get the output names
///
/// \return output names
///
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
);
///
/// \brief Clone to get the new predictor. thread safe.
///
/// \return get a new predictor
///
std
::
unique_ptr
<
Predictor
>
Clone
();
/// \brief Clear the intermediate tensors of the predictor
void
ClearIntermediateTensor
();
private:
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
(
const
Config
&
config
);
// NOLINT
PD_INFER_DECL
int
GetNumBytesOfDataType
(
DataType
dtype
);
PD_INFER_DECL
std
::
string
GetVersion
();
...
...
@@ -128,13 +272,24 @@ T* Tensor::data(PlaceType* place, int* size) const {
namespace
paddle_infer
{
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
{
public:
PredictorPool
()
=
delete
;
PredictorPool
(
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
);
/// \brief Get \param id-th predictor.
Predictor
*
Retrive
(
size_t
idx
);
private:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录