From 546c4fa17d39655cc6e1024a1d4bfe98bf163fde Mon Sep 17 00:00:00 2001 From: Cheerego <35982308+shanyi15@users.noreply.github.com> Date: Sat, 2 Mar 2019 16:43:27 +0800 Subject: [PATCH] Weeklyupdate 0301 (#666) * Tables_rm_op * update_op * update_index --- .../development/new_op/index_cn.rst | 10 +- .../development/new_op/new_op.md | 452 ++++++++++++++++++ .../development/new_op/new_op_cn.md | 1 - .../development/new_op/op_notes.md | 2 +- doc/fluid/beginners_guide/install/Tables.md | 153 +++--- .../beginners_guide/install/Tables_en.md | 214 ++++----- 6 files changed, 629 insertions(+), 203 deletions(-) create mode 100644 doc/fluid/advanced_usage/development/new_op/new_op.md delete mode 120000 doc/fluid/advanced_usage/development/new_op/new_op_cn.md diff --git a/doc/fluid/advanced_usage/development/new_op/index_cn.rst b/doc/fluid/advanced_usage/development/new_op/index_cn.rst index 55f037585b465..fc56472ce9186 100644 --- a/doc/fluid/advanced_usage/development/new_op/index_cn.rst +++ b/doc/fluid/advanced_usage/development/new_op/index_cn.rst @@ -1,10 +1,16 @@ ############# -新增operator +新增Operator ############# -- `op相关的一些注意事项 <../../../advanced_usage/development/new_op/op_notes.html>`_ :介绍op相关的一些注意事项 +本部分将指导您如何新增Operator,也包括一些必要的注意事项 + +- `如何写新的op <./new_op.html>`_ + +- `op相关注意事项 <./op_notes.html>`_ .. toctree:: :hidden: + new_op.md op_notes.md + diff --git a/doc/fluid/advanced_usage/development/new_op/new_op.md b/doc/fluid/advanced_usage/development/new_op/new_op.md new file mode 100644 index 0000000000000..ae42ee5162ac8 --- /dev/null +++ b/doc/fluid/advanced_usage/development/new_op/new_op.md @@ -0,0 +1,452 @@ +# 如何写新的op + + - [概念简介](#概念简介) + - [实现C++类](#实现c类) + - [定义ProtoMaker类](#定义protomaker类) + - [定义Operator类](#定义operator类) + - [定义OpKernel类](#定义opkernel类) + - [注册Operator](#注册operator) + - [编译](#编译) + - [绑定Python](#绑定python) + - [实现单元测试](#实现单元测试) + - [前向Operator单测](#前向operator单测) + - [反向Operator单测](#反向operator单测) + - [编译和执行](#编译和执行) + - [注意事项](#注意事项) + + +## 概念简介 + +简单介绍需要用到基类,详细介绍请参考设计文档。 + +- `framework::OperatorBase`: Operator(简写,Op)基类。 +- `framework::OpKernel`: Op计算函数的基类,称作Kernel。 +- `framework::OperatorWithKernel`:继承自OperatorBase,Op有计算函数,称作有Kernel。 +- `class OpProtoAndCheckerMaker`:描述该Op的输入、输出、属性、注释,主要用于Python API接口生成 + +依据是否包含kernel,可以将Op分为两种:包含Kernel的Op和不包含kernel的Op,前者Op的定义继承自`OperatorWithKernel`,后者继承自`OperatorBase`。本教程主要介绍带Kernel的Op如何写,简单总结Op需要包含的内容如下: + +
内容 | +定义位置 | +
---|---|
OpProtoMake定义 | +.cc 文件,Backward Op不需要定义OpProtoMake | +
Op定义 | +.cc 文件 | +
Kernel实现 | +CPU、CUDA共享Kernel实现在.h 文件中,否则,CPU 实现在.cc 文件中,CUDA 实现在.cu 文件中。 | +
注册Op | +Op注册实现在.cc 文件;Kernel注册CPU实现在.cc 文件中,CUDA实现在.cu 文件中 | +
apt install swig
或 yum install swig
paddlepaddle-gpu
命令在windows环境下,会默认安装CUDA 8.0和cuDNN 5编译的PaddlePaddle
***
@@ -425,10 +360,80 @@ PaddePaddle通过编译时指定路径来实现引用各种BLAS/CUDA/cuDNN库。