rondogency commented on a change in pull request #17585: Dynamic subgraph 
property doc
URL: https://github.com/apache/incubator-mxnet/pull/17585#discussion_r381475714
 
 

 ##########
 File path: example/extensions/lib_subgraph/README.md
 ##########
 @@ -0,0 +1,192 @@
+<!--- Licensed to the Apache Software Foundation (ASF) under one -->
+<!--- or more contributor license agreements.  See the NOTICE file -->
+<!--- distributed with this work for additional information -->
+<!--- regarding copyright ownership.  The ASF licenses this file -->
+<!--- to you under the Apache License, Version 2.0 (the -->
+<!--- "License"); you may not use this file except in compliance -->
+<!--- with the License.  You may obtain a copy of the License at -->
+
+<!---   http://www.apache.org/licenses/LICENSE-2.0 -->
+
+<!--- Unless required by applicable law or agreed to in writing, -->
+<!--- software distributed under the License is distributed on an -->
+<!--- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -->
+<!--- KIND, either express or implied.  See the License for the -->
+<!--- specific language governing permissions and limitations -->
+<!--- under the License. -->
+
+Custom Partitioner Example and Tutorial
+=======================================
+
+## Introduction
+
+Adding custom model partitioners in MXNet used to require deep understanding 
of the MXNet backend, including operator registration and other internal 
classes, followed by recompiling MXNet from source. This feature allows adding 
custom partitioners by dynamically loading external libraries at runtime.
+
+This custom partitioner feature enables users to write custom model 
partitioning strategies without compiling against all of MXNet header files and 
dependencies. When a library containing custom partitioners is loaded 
dynamically, the components found in the library will be re-registered in MXNet 
so that users can use those natively just like other built-in components.
+
+## Getting Started
+
+### Have MXNet Ready
+
+The custom partitioner feature was merged recently (#15969) and is not 
available in versions of MXNet prior to v1.7.0. To use the feature now, please 
install MXNet either by installing the nightly pip wheel or compiling from 
source. For running the following example, it doesn’t matter if it is a CUDA, 
MKLDNN or plain MXNet build; the custom partitioner doesn’t interact with the 
execution of other native MXNet features. Note that if you want to write your 
custom partitioners running on GPU, you still need an MXNet CUDA build. 
+
+### Run An Example
+
+You can start getting familiar with custom partitioners by running an example 
provided in the **example/extensions/lib_subgraph** directory. This example 
partitions `exp` and `log` operators into subgraphs. Go to the **lib_subgraph** 
directory and follow these steps:
+
+1. Run `make`. The Makefile will generate the dynamic library 
**libsubgraph_lib.so** which is compiled from the `subgraph_lib.cc` file. This 
is the library you are going to load that contains everything for the custom 
partitioner.
+2. Run `python test_subgraph.py`. It’ll first load the above library, find the 
components, register them in the MXNet backend, then partition the model and 
execute the operators like a regular MXNet operator and output the result. 
Below is the output when running the `python test_subgraph.py` command. Notice 
that it loads 2 operators: my_gemm and state_gemm.
+
+```
+[10:38:03] src/c_api/c_api.cc:286: Found 1 operators in library
+[10:38:03] src/c_api/c_api.cc:350:       Op[0] _custom_subgraph_op
+[10:38:03] src/c_api/c_api.cc:785: Found 1 partitioners in library
+[10:38:03] src/c_api/c_api.cc:801:       Partitioner[0] myProp
+[10:38:03] src/c_api/c_api.cc:821:             Strategy[0] strategy1 
subgraphOp: '_custom_subgraph_op'
+```
+
+### Basic Files For Custom Partitioner Library
+
+* **lib_subgraph/subgraph_lib.cc**: This file has a source code implementation 
of all required components to make a custom partitioner, it also shows 
registration of them so that they can be loaded by MXNet.
+
+* **lib_subgraph/Makefile**: This file compiles the 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_subgraph/test_subgraph.py**: This file calls 
`mx.library.load(‘libsubgraph_lib.so’)` to load the library containing the 
custom components, partitions the model using the `optimize_for` API, and 
prints outputs of the forward passes. The outputs should be the same as the 
regular MXNet forward pass without partitioning.
+
 
 Review comment:
   nit: add lib_api.h intro here like 
https://github.com/apache/incubator-mxnet/blob/master/example/extensions/lib_custom_op/README.md#basic-files-for-a-gemm-library

----------------------------------------------------------------
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