PulseFocusPlatform/static/ppdet/ext_op/README.md

78 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 自定义OP的编译过程
**注意:** 编译自定义OP使用的gcc版本须与Paddle编译使用gcc版本一致Paddle develop每日版本目前采用**gcc 4.8.2**版本编译,若使用每日版本,请使用**gcc 4.8.2**版本编译自定义OP否则可能出现兼容性问题。
## 代码结构
- src: 扩展OP C++/CUDA 源码
- cornerpool_lib.py: Python API封装
- tests: 各OP单测程序
## 编译自定义OP
自定义op需要将实现的C++、CUDA代码编译成动态库```src/mask.sh```中通过g++/nvcc编译当然您也可以写Makefile或者CMake。
编译需要include PaddlePaddle的相关头文件链接PaddlePaddle的lib库。 头文件和lib库可通过下面命令获取到:
```
# python
>>> import paddle
>>> print(paddle.sysconfig.get_include())
/paddle/pyenv/local/lib/python2.7/site-packages/paddle/include
>>> print(paddle.sysconfig.get_lib())
/paddle/pyenv/local/lib/python2.7/site-packages/paddle/libs
```
我们提供动态库编译脚本如下:
```
cd src
sh make.sh
```
最终编译会产出`cornerpool_lib.so`
**说明:** 若使用源码编译安装PaddlePaddle的方式编译过程中`cmake`未设置`WITH_MKLDNN`的方式,
编译自定义OP时会报错找不到`mkldnn.h`等文件,可在`make.sh`中删除编译命令中的`-DPADDLE_WITH_MKLDNN`选项。
## 设置环境变量
需要将Paddle的核心库设置到`LD_LIBRARY_PATH`里, 先运行下面程序获取路径:
```
import paddle
print(paddle.sysconfig.get_lib())
```
可通过如下方式添加动态库路径:
```
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`python -c 'import paddle; print(paddle.sysconfig.get_lib())'`
```
## 执行单测
执行下列单测,确保自定义算子可在网络中正确使用:
```
# 回到 ext_op 目录,运行单测
cd ..
python test/test_corner_pool.py
```
单测运行成功会输出提示信息,如下所示:
```
.
----------------------------------------------------------------------
Ran 4 test in 2.858s
OK
```
更多关于如何在框架外部自定义 C++ OP可阅读[官网说明文档](https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_usage/index_cn.html)