aaronmarkham commented on a change in pull request #17241: Add CustomOp 
tutorial doc
URL: https://github.com/apache/incubator-mxnet/pull/17241#discussion_r370392145
 
 

 ##########
 File path: example/extensions/lib_custom_op/README.md
 ##########
 @@ -0,0 +1,147 @@
+CustomOp Example and Tutorial
+=============================
+
+## Introduction
+
+Adding new operators in MXNet requires understanding of MXNet backend operator 
registration and recompiling of MXNet with all its dependencies. Users can use 
the old Python custom operator to add new operators, but it is slow, 
complicated and has poor adoption rate. So our approach for adding custom 
operators is to enable dynamic loading of C++ custom operators compiled in 
external libraries at runtime.
+
+Custom operators (CustomOp) enable users to write new operators without 
compiling against all of MXNet header files and dependencies. When a library 
containing custom operators is loaded dynamically, the operators found in the 
library will be re-registered in MXNet so that users can call those operators 
natively just like other built-in operators.
+
+## Getting Started
+
+### Have MXNet Ready
+
+First you should install MXNet either from compiling from source code or 
download from nightly build. It doesn’t matter if the build comes with CUDA or 
MKLDNN. The custom operator doesn’t interact with the execution of other native 
MXNet operators.
+
+### Run An Example:
+
+You can start getting familiar with custom operators by running some examples 
provided in the **example/extensions/lib_custom_op** directory. Start with a 
common linear algebra operator like `gemm` (Generalized Matrix Multiplication). 
Go to `lib_custom_op` directory and follow these steps:
+
+1. Run `make gemm_lib`. The Makefile will generate a dynamic library 
**libgemm_lib.so** compiled from `gemm_lib.cc`. This is the library you are 
going to load that contains everything for the custom gemm operator.
+2. Run `python test_gemm.py`. It’ll first load the above .so library, find the 
operators, register them in the MXNet backend, print "Found x operators", then 
invoke the operator like a regular MXNet operator and output the result.
+
+### Basic Files For Gemm Library:
+
+* **lib_custom_op/gemm_lib.cc**: This file has a source code implementation of 
all required components of a custom operator, as well as the registration of 
the custom operator.
+
+* **lib_custom_op/Makefile**: Compile source code to a dynamic shared library, 
with a header file `include/mxnet/lib_api.h` from MXNet source code. Currently 
the custom operator is compatible with C++11 onwards.
+
+* **lib_custom_op/test_gemm.py**: This file calls 
`mx.library.load(‘libgemm_lib.so’)` to load the library containing the custom 
operator, invokes the operator using both NDArray and Symbol APIs, and prints 
outputs of the forward and backward passes. The outputs should be the same as 
the regular MXNet `gemm` operator.
+
+## Writing Custom Operator Library:
+
+For building a library containing your own custom operator, compose a C++ 
source file like `myop_lib.cc`, include `lib_api.h` header file, and write your 
custom operator implementation with those essential functions:
 
 Review comment:
   ```suggestion
   For building a library containing your own custom operator, compose a C++ 
source file like `myop_lib.cc`, include `lib_api.h` header file, and write your 
custom operator implementation with these essential functions:
   ```

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to