forked from PaddlePaddle/Paddle
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request PaddlePaddle#44 from qili93/add_api
[DOC] Add CXX and Python API Doc
- Loading branch information
Showing
36 changed files
with
2,823 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
code, .rst-content tt, .rst-content code { | ||
white-space: normal; | ||
} | ||
|
||
.rst-content .section ol p, .rst-content .section ul p { | ||
margin-bottom: 2px; | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
# 使用 CPU 进行预测 | ||
|
||
**注意:** | ||
1. 在 CPU 型号允许的情况下,进行预测库下载或编译试尽量使用带 AVX 和 MKL 的版本 | ||
2. 可以尝试使用 Intel 的 MKLDNN 进行 CPU 预测加速,默认 CPU 不启用 MKLDNN | ||
3. 在 CPU 可用核心数足够时,可以通过设置 `SetCpuMathLibraryNumThreads` 将线程数调高一些,默认线程数为 1 | ||
|
||
## CPU 设置 | ||
|
||
API定义如下: | ||
|
||
```c++ | ||
// 设置 CPU Blas 库计算线程数 | ||
// 参数:cpu_math_library_num_threads - blas库计算线程数 | ||
// 返回:None | ||
void SetCpuMathLibraryNumThreads(int cpu_math_library_num_threads); | ||
|
||
// 获取 CPU Blas 库计算线程数 | ||
// 参数:None | ||
// 返回:int - cpu blas库计算线程数。 | ||
int cpu_math_library_num_threads() const; | ||
``` | ||
代码示例: | ||
```c++ | ||
// 创建默认 Config 对象 | ||
paddle_infer::Config config(); | ||
// 设置 CPU Blas 库线程数为 10 | ||
config.SetCpuMathLibraryNumThreads(10); | ||
// 通过 API 获取 CPU 信息 | ||
int num_thread = config.cpu_math_library_num_threads(); | ||
std::cout << "CPU blas thread number is: " << num_thread << std::endl; // 10 | ||
``` | ||
|
||
## MKLDNN 设置 | ||
|
||
**注意:** | ||
1. 启用 MKLDNN 的前提为已经使用 CPU 进行预测,否则启用 MKLDNN 无法生效 | ||
2. 启用 MKLDNN BF16 要求 CPU 型号可以支持 AVX512,否则无法启用 MKLDNN BF16 | ||
3. `SetMkldnnCacheCapacity` 请参考 <a class="reference external" href="https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/fluid/design/mkldnn/caching/caching.md">MKLDNN cache设计文档</a> | ||
|
||
API定义如下: | ||
|
||
```c++ | ||
// 启用 MKLDNN 进行预测加速 | ||
// 参数:None | ||
// 返回:None | ||
void EnableMKLDNN(); | ||
|
||
// 判断是否启用 MKLDNN | ||
// 参数:None | ||
// 返回:bool - 是否启用 MKLDNN | ||
bool mkldnn_enabled() const; | ||
|
||
// 设置 MKLDNN 针对不同输入 shape 的 cache 容量大小 | ||
// 参数:int - cache 容量大小 | ||
// 返回:None | ||
void SetMkldnnCacheCapacity(int capacity); | ||
|
||
// 指定使用 MKLDNN 加速的 OP 列表 | ||
// 参数:std::unordered_set<std::string> - 使用 MKLDNN 加速的 OP 列表 | ||
// 返回:None | ||
void SetMKLDNNOp(std::unordered_set<std::string> op_list); | ||
|
||
// 启用 MKLDNN BFLOAT16 | ||
// 参数:None | ||
// 返回:None | ||
void EnableMkldnnBfloat16(); | ||
|
||
// 判断是否启用 MKLDNN BFLOAT16 | ||
// 参数:None | ||
// 返回:bool - 是否启用 MKLDNN BFLOAT16 | ||
bool mkldnn_bfloat16_enabled() const; | ||
|
||
// 指定使用 MKLDNN BFLOAT16 加速的 OP 列表 | ||
// 参数:std::unordered_set<std::string> - 使用 MKLDNN BFLOAT16 加速的 OP 列表 | ||
// 返回:None | ||
void SetBfloat16Op(std::unordered_set<std::string> op_list); | ||
``` | ||
代码示例 (1):使用 MKLDNN 进行预测 | ||
```c++ | ||
// 创建 Config 对象 | ||
paddle_infer::Config config(FLAGS_infer_model + "/mobilenet"); | ||
// 启用 MKLDNN 进行预测 | ||
config.EnableMKLDNN(); | ||
// 通过 API 获取 MKLDNN 启用结果 - true | ||
std::cout << "Enable MKLDNN is: " << config.mkldnn_enabled() << std::endl; | ||
// 设置 MKLDNN 的 cache 容量大小 | ||
config.SetMkldnnCacheCapacity(1); | ||
// 设置启用 MKLDNN 进行加速的 OP 列表 | ||
std::unordered_set<std::string> op_list = {"softmax", "elementwise_add", "relu"}; | ||
config.SetMKLDNNOp(op_list); | ||
``` | ||
|
||
代码示例 (2):使用 MKLDNN BFLOAT16 进行预测 | ||
|
||
```c++ | ||
// 创建 Config 对象 | ||
paddle_infer::Config config(FLAGS_infer_model + "/mobilenet"); | ||
|
||
// 启用 MKLDNN 进行预测 | ||
config.EnableMKLDNN(); | ||
|
||
// 启用 MKLDNN BFLOAT16 进行预测 | ||
config.EnableMkldnnBfloat16(); | ||
// 设置启用 MKLDNN BFLOAT16 的 OP 列表 | ||
config.SetBfloat16Op({"conv2d"}); | ||
|
||
// 通过 API 获取 MKLDNN BFLOAT16 启用结果 - true | ||
std::cout << "Enable MKLDNN BF16 is: " << config.mkldnn_bfloat16_enabled() << std::endl; | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
# Config 构造函数 | ||
|
||
`Config` 类为用于配置构建 `Predictor` 对象的配置信息,如模型路径、是否开启gpu等等。 | ||
|
||
构造函数定义如下: | ||
|
||
```c++ | ||
// 创建 Config 对象,默认构造函数 | ||
Config(); | ||
|
||
// 创建 Config 对象,输入为其他 Config 对象 | ||
Config(const Config& other); | ||
|
||
// 创建 Config 对象,输入为非 Combine 模型的文件夹路径 | ||
Config(const std::string& model_dir); | ||
|
||
// 创建 Config 对象,输入分别为 Combine 模型的模型文件路径和参数文件路径 | ||
Config(const std::string& prog_file, const std::string& params_file); | ||
``` | ||
代码示例 (1):默认构造函数,通过API加载预测模型 - 非Combined模型 | ||
```c++ | ||
// 字符串 model_dir 为非 Combine 模型文件夹路径 | ||
std::string model_dir = "../assets/models/mobilenet_v1"; | ||
// 创建默认 Config 对象 | ||
paddle_infer::Config config(); | ||
// 通过 API 设置模型文件夹路径 | ||
config.SetModel(model_dir); | ||
// 根据 Config 对象创建预测器对象 | ||
auto predictor = paddle_infer::CreatePredictor(config); | ||
``` | ||
|
||
代码示例 (2):通过构造函数加载预测模型 - 非Combined模型 | ||
|
||
```c++ | ||
// 字符串 model_dir 为非 Combine 模型文件夹路径 | ||
std::string model_dir = "../assets/models/mobilenet_v1"; | ||
|
||
// 根据非 Combine 模型的文件夹路径构造 Config 对象 | ||
paddle_infer::Config config(model_dir); | ||
|
||
// 根据 Config 对象创建预测器对象 | ||
auto predictor = paddle_infer::CreatePredictor(config); | ||
``` | ||
代码示例 (3):通过构造函数加载预测模型 - Combined模型 | ||
```c++ | ||
// 字符串 prog_file 为 Combine 模型文件所在路径 | ||
std::string prog_file = "../assets/models/mobilenet_v1/__model__"; | ||
// 字符串 params_file 为 Combine 模型参数文件所在路径 | ||
std::string params_file = "../assets/models/mobilenet_v1/__params__"; | ||
// 根据 Combine 模型的模型文件和参数文件构造 Config 对象 | ||
paddle_infer::Config config(prog_file, params_file); | ||
// 根据 Config 对象创建预测器对象 | ||
auto predictor = paddle_infer::CreatePredictor(config); | ||
``` |
Oops, something went wrong.