Do we have a consensus yet on how to implement this?
On Fri, Oct 20, 2017 at 9:05 AM Tianqi Chen <tqc...@cs.washington.edu> wrote: > As with every change, there need to be steps. The python API of gluon is a > first step toward moving API to the set of the new operator. I think > exchange and compilation are next step it is relatively easy to do so > without start implementing these ops (we canonicalize to core ops and > convert them back to the ops we have). The final step is to move the > implementation toward the new ops, which can happen gradually. > > Tianqi > > On Fri, Oct 20, 2017 at 8:58 AM, Tianqi Chen <tqc...@cs.washington.edu> > wrote: > > > The core ops do not mean implementation. They are merely a spec that we > > want to agree on what attributes we need. > > > > - The current list of the proposal spec is here: > > http://nnvm.tvmlang.org/top.html (I think eventually MXNet's document > > should have one such page) > > - They are is modeled after numpy and mxnet/gluon and is used by the new > > graph optimizations in nnvm compiler. > > - There is priority in terms of support level, which indicates how > > important they are when support. > > > > The major need for core ops is to be concise(smallest set), > > expressive(covers most need), conventional (follows existing well adopted > > API like numpy). The legacy ops have no problem in terms of expressive > but > > have issues with respect to conciseness and conventional. > > > > By drifting the central support to core ops and canonicalize other ops > > into them, we can make optimization, exchange and other related problems > > easier. It also gives clear external support of ApacheMXNet > > > > Tinaqi > > > > On Fri, Oct 20, 2017 at 8:50 AM, Chris Olivier <cjolivie...@gmail.com> > > wrote: > > > >> Thansk for that explanation! > >> What is meant by the "core ops"? Are these the gluon python ops? I > know > >> what the "legacy ops" are -- things like BatchNormProp/BatchNormOp. > WHat > >> are the "new ones"? > >> > >> I apologize for not knowing this, but what are some of the "pain points" > >> with the legacy ops? Not in great detail, but would just like to get a > >> little perspective. > >> > >> Thanks, > >> > >> -Chris > >> > >> > >> On Fri, Oct 20, 2017 at 8:42 AM, Tianqi Chen <tqc...@cs.washington.edu> > >> wrote: > >> > >> > First of all, I agree that supporting the format as an important step > of > >> > adding influence. We are going to do it in either options. The > overhead > >> of > >> > engineering is not that much difference. I also do not argue for > >> specific > >> > types of APIs(gluon vs symbolic) we should use. > >> > > >> > MXNet Sym API contains two elements: > >> > > >> > - 1) The graph manipulation API > >> > - 2) The operator defs > >> > > >> > The graph manipulation API has been serving us great and we should be > >> keep > >> > using it for whatever purposes we have. However, the operator > >> definitions > >> > has been involved for two years and there are quite a few pains in > >> legacy > >> > operator and attributes. The new remodeled gluon API is much cleaner. > >> > While there is a gap between the current operator def and gluon's API, > >> we > >> > want to shift defs toward gluon style operator defs (NOTE this do not > >> mean > >> > imperative only, just to make operator def align with numpy and > gluon). > >> > > >> > What I am proposing is to have a clear document and list of "core > >> operator > >> > defs" we want to prioritize in terms of supporting exchange offers > >> > optimization. Having such document, gives us and others a clear > >> reference > >> > on what we need, and what is needed in order to give good external > >> support > >> > to ApacheMXNet. > >> > > >> > The MXNet/gluon or nnvm/top is such initial set of operator defs that > is > >> > proposed. By canonicalizing the current MXNet op defs into this "core > >> set", > >> > and using it as a center for talking to other exchange format gives > the > >> > advantage of the things we mentioned above. > >> > > >> > Going through the path have second major advantage, because it > >> > enables(answering your question on what compilation mean) > >> > mxnet->core ops -> nnvm compiler-> bare metal(javascript, ARM, > >> > AMDGPU, Metal) > >> > > >> > While in theory we can also do mxnet->onnx-> nnvm compiler, This is a > >> more > >> > twisted path as the exchange format do not preserve information and > >> subject > >> > to change. While going through the core ops offers bi-directional > >> exchange > >> > with mxnet, and directly doing that in memory. The compilation path > is > >> not > >> > offered if we do not go through the core ops, because the graph > >> > optimization can take great advantage of a clear core set of > operators. > >> > > >> > To facilitate discussion technically. I would suggest we break our > >> points > >> > down. I tried to do that in this email on things we agree on and have > >> > opions. So we can find common ground and move forward. > >> > > >> > > >> > Tianqi > >> > > >> > > >> > > On 10/19/17, 20:43, "Tianqi Chen" <workc...@gmail.com on behalf of > >> > > tqc...@cs.washington.edu> wrote: > >> > > > >> > > I will start forking the previous discussion and it has gone > awry > >> > and I > >> > > hope to start a pure technical discussion thread. > >> > > > >> > > I said in another email that we could do a vote to settle this > >> issue. > >> > > I now > >> > > think that I was wrong and would like to apology for my rush > >> proposal > >> > > on > >> > > this. > >> > > > >> > > I hope to reopen this email thread to gain consensus on what we > >> want. > >> > > There > >> > > has been express of concerns that the code should reside on > >> > ApacheMXNet > >> > > repo. I think that discussion is already over and at least I > would > >> > > want the > >> > > code to be in the repo as long as we reach the consensus. > >> > > > >> > > The leftover point is how should we do it. There are two ways of > >> > doing > >> > > this > >> > > > >> > > 1) Doing it on top of existing Symbol API. > >> > > 2) Moving most of the exchange layer on standardized core > operator > >> > set, > >> > > namely mxnet/gluon spec. > >> > > > >> > > Both approaches are feasible. There is some advocation on which > >> way > >> > > might > >> > > be simpler, but the additional effort of engineering won't be > that > >> > > much. > >> > > The reason why I am seeing this decision so seriously is that it > >> will > >> > > affect how we can influence the design of the exchange format we > >> act > >> > > on, and > >> > > how easily it is to integrate future features that are made > >> > available. > >> > > > >> > > I am in favor of (2) because technically it gives us a clean > >> future > >> > > compatibility, offers compilation and articulates clearly what > >> > > ApacheMXNet's stance on core operators. > >> > > These things could bring more impact to the community in > general. > >> > > > >> > > Tianqi > >> > > > >> > > > >> > > > >> > > > >> > > >> > > > > >