RE: Time out for Travis CI

2018-09-28 Thread Qin, Zhennan
Hi Kellen,

Thanks for your explanation. Do you have a time plan to solve the timeout 
issue? Rebasing can't work for my case. Or shall we run it silently to disallow 
it voting X for overall CI result? Because most developers are used to ignore 
the PRs with 'X'.

Thanks,
Zhennan

-Original Message-
From: kellen sunderland [mailto:kellen.sunderl...@gmail.com] 
Sent: Friday, September 28, 2018 10:38 PM
To: dev@mxnet.incubator.apache.org
Subject: Re: Time out for Travis CI

Hey Zhennan, you're safe to ignore Travis failures for now.  They're just 
informational.

The reason you sometimes see quick builds and sometimes see slow builds is that 
we're making use of ccache in between builds.  If your PR is similar to what's 
in master you should build very quickly, if not it's going to take a while and 
likely time out.  If you see timeouts rebasing may speed things up.  
Unfortunately the timeouts are global and we're not able to increase them.  I'm 
hoping that adding artifact caching will speed up future builds to the point 
that test runs and builds can be executed in under the global limit (which is 
~50 minutes).

-Kellen


On Fri, Sep 28, 2018 at 4:05 PM Qin, Zhennan  wrote:

> Hi MXNet devs,
>
> I'm struggled with new Travis CI for a while, it always run time out 
> for this PR:
> https://github.com/apache/incubator-mxnet/pull/12530
>
> Most of the time, Jenkins CI can pass, while Travis can't be finished 
> within 50 minutes. For this PR, it shouldn't affect much on the build 
> time or unit test time. Also, I saw other PR has same problem, eg.
>
>
> https://travis-ci.org/apache/incubator-mxnet/builds/433172088?utm_sour
> ce=github_status_medium=notification
>
> https://travis-ci.org/apache/incubator-mxnet/builds/434404305?utm_sour
> ce=github_status_medium=notification
>
> According to the time stamp from Travis, all passed PR are within 
> small code change, and can complete `make -j2` within 25s. But for 
> timeout case, 'make -j2' will need about 1600s. Does Travis do 
> incremental build for each test? Shall we increase time limit for 
> large PR? Can we add more time stamp for build and unites stage to help 
> understand what's going on there?
>
> Thanks in advance,
> Zhennan
>


Re: [Discuss] Next MXNet release

2018-09-28 Thread kellen sunderland
Sorry I meant to say next 'Regarding the *minor* release'.

On Sat, Sep 29, 2018 at 5:27 AM kellen sunderland <
kellen.sunderl...@gmail.com> wrote:

> Thanks for transparently setting a rough timeline Steffen.  I think this
> will go a long way in helping the community plan their work, even if the
> details change somewhat on the road to the release.
>
> Regarding the major release: I would propose we unify TensorRT with the
> subgraph operator work.
>
> Regarding the patch release:  There were a few minor stack/buffer
> overflows exposed by ASAN that have been addressed.  It's probably a good
> idea to include them in a patch release, as they at best result in
> non-deterministic behaviour.
>
> -Kellen
>
>
> On Sat, Sep 29, 2018 at 1:39 AM Steffen Rochel 
> wrote:
>
>> I updated
>>
>> https://cwiki.apache.org/confluence/display/MXNET/Project+Proposals+for+next+MXNet+Release
>> ,
>> removed the completed items from 1.3 release and would like to kick off
>> discussion about the next release. Please suggest what you would like to
>> see included in the next release together with link to design proposal
>> (appropriately for the size and complexity of the proposal) or suggest
>> changes.
>> I suggest to target the next release for December 2018 to frame the
>> discussion.
>> Lets include review of
>> https://cwiki.apache.org/confluence/display/MXNET/MXNet+Roadmap - time to
>> update and discuss changes.
>>
>> From the 1.3 release we had discussion regarding
>> https://github.com/apache/incubator-mxnet/issues/11849 and resolution in
>> https://github.com/apache/incubator-mxnet/pull/12412 .
>> Are you aware of critical issues and feedback from user which we should
>> consider for a potential 1.3.1 patch release. Should we include PR 12412
>> in
>> a potential patch release?
>>
>> Regards,
>> Steffen
>>
>


Re: [Discuss] Next MXNet release

2018-09-28 Thread kellen sunderland
Thanks for transparently setting a rough timeline Steffen.  I think this
will go a long way in helping the community plan their work, even if the
details change somewhat on the road to the release.

Regarding the major release: I would propose we unify TensorRT with the
subgraph operator work.

Regarding the patch release:  There were a few minor stack/buffer overflows
exposed by ASAN that have been addressed.  It's probably a good idea to
include them in a patch release, as they at best result in
non-deterministic behaviour.

-Kellen


On Sat, Sep 29, 2018 at 1:39 AM Steffen Rochel 
wrote:

> I updated
>
> https://cwiki.apache.org/confluence/display/MXNET/Project+Proposals+for+next+MXNet+Release
> ,
> removed the completed items from 1.3 release and would like to kick off
> discussion about the next release. Please suggest what you would like to
> see included in the next release together with link to design proposal
> (appropriately for the size and complexity of the proposal) or suggest
> changes.
> I suggest to target the next release for December 2018 to frame the
> discussion.
> Lets include review of
> https://cwiki.apache.org/confluence/display/MXNET/MXNet+Roadmap - time to
> update and discuss changes.
>
> From the 1.3 release we had discussion regarding
> https://github.com/apache/incubator-mxnet/issues/11849 and resolution in
> https://github.com/apache/incubator-mxnet/pull/12412 .
> Are you aware of critical issues and feedback from user which we should
> consider for a potential 1.3.1 patch release. Should we include PR 12412 in
> a potential patch release?
>
> Regards,
> Steffen
>


Re: Which merge option to use on the Import Julia binding PR?

2018-09-28 Thread Marco de Abreu
Are we sure that this is due to lacking permissions and not because of some
technical limitation? If we are certain, we can ask out mentors to create a
ticket with Apache Infra to make that switch.

-Marco

Carin Meier  schrieb am Sa., 29. Sep. 2018, 01:17:

> I made a test regular merge commit into a copy of master. It seemed to go
> fine. Here is a listing of what it will look like for everyone.
>
> https://github.com/apache/incubator-mxnet/commits/test-merge-julia-import
>
> Although, I would be happy to push the merge button. I think the most
> important thing is to get the PR merged, so whatever way is the best to
> make that happen, let's do it.
>
> So - Does the regular merge seem like a good option?
> If so, what is the best way to make that happen?
>
>
> On Fri, Sep 28, 2018 at 6:05 PM Chiyuan Zhang  wrote:
>
> > Agreed with Pedro. Maybe the merge-commit option from the github
> interface
> > was disabled for a reason. But as Pedro said, maybe it is good to
> > temporarily enable it for this PR and merge using that.
> >
> >
> >- It should be technically easier than rebasing due to the
> >git-subtree-import issue we are currently having
> >- It also avoid stacking a huge commit history on *top* of current
> >history
> >- The downside is probably the history of the project is not linear
> >anymore, but I think this is actually what we would like to have for
> > this
> >particular case, because the contents of the main repo and the julia
> > branch
> >actually does not overlap. So it makes sense to have two tails with
> > their
> >own history.
> >
> > Carin: I guess if someone with admin permission on the github could
> > temporarily enable the merge-commit option, then pushing the button on
> the
> > web might simply work.
> >
> > Best,
> > Chiyuan
> >
> > On Fri, Sep 28, 2018 at 2:53 PM Carin Meier 
> wrote:
> >
> > > Pedro - Maybe a merge commit is a better answer in this case. I
> > originally
> > > ruled it out since it wasn't an option in the github web interface, but
> > > since this looks like it is going to have to be done outside it because
> > of
> > > the subtrees anyway, it might be a better fit.
> > >
> > > On Fri, Sep 28, 2018 at 5:07 PM Carin Meier 
> > wrote:
> > >
> > > > We are actually running into troubles with using the subtree and the
> > > > rebase. Since it looks like this is not going to be a simple, "click
> > the
> > > > button" through the web page merge, I rather hand this task off to
> > > someone
> > > > with more context in making sure it gets in there correctly.
> > > >
> > > > Chiyuan or any others, would you be willing to take this over?
> > > >
> > > > Thanks,
> > > > Carin
> > > >
> > > > On Fri, Sep 28, 2018 at 5:00 PM Naveen Swamy 
> > wrote:
> > > >
> > > >> Should we try to first being into a branch and then try merge that
> > > >> branch?
> > > >>
> > > >> > On Sep 28, 2018, at 4:40 PM, Pedro Larroy <
> > > pedro.larroy.li...@gmail.com>
> > > >> wrote:
> > > >> >
> > > >> > I'm not familiar with the specifics of this contribution, as a
> > general
> > > >> > approach my understanding is that if the list of commits is big
> and
> > > you
> > > >> > want to preserve history, usually merging is better so you keep
> > > history
> > > >> and
> > > >> > causality, if you rebase all the commits on top of master you are
> > > >> changing
> > > >> > the history of these commits which can't be individually reverted
> as
> > > >> some
> > > >> > have suggested before. Maybe is because I come from a mercurial
> > > >> background,
> > > >> > but my initial impression would be either to:
> > > >> > 1. squash everything and rebase
> > > >> > 2. or merge without rebasing or squashing.
> > > >> >
> > > >> > Pedro.
> > > >> >
> > > >> >> On Thu, Sep 27, 2018 at 3:10 PM Carin Meier <
> carinme...@gmail.com>
> > > >> wrote:
> > > >> >>
> > > >> >> Thanks everyone for the input. I'll try to summarize the feedback
> > > from
> > > >> the
> > > >> >> responses:
> > > >> >>
> > > >> >> Using Squash-Merge is the project standard for very good reasons.
> > > >> However,
> > > >> >> in the case of this PR to bring in the Julia language from its
> > > sibling
> > > >> >> repo, we want to preserve all the individual commits of the many
> > > >> >> contributors that have worked over multiple years to make this a
> > > great
> > > >> >> language binding. We will use Rebase-Merge for it.
> > > >> >>
> > > >> >> Chiyuan - thanks for the suggestion of using a tag. I think we
> can
> > > try
> > > >> it
> > > >> >> initially without it since there are other ways to browse the
> > commit
> > > >> >> history, like looking at the PRs. But, we can add the tag
> > > >> retroactively if
> > > >> >> people start having trouble.
> > > >> >>
> > > >> >> If there no objections, I will merge the PR using the above
> method
> > in
> > > >> my
> > > >> >> morning (EST).
> > > >> >>
> > > >> >> Thanks everyone! I'm looking forward to having the Julia
> community
> > > 

Subscription to the ASF mxnet channel

2018-09-28 Thread Javier Rodriguez Zaurin
Hi there, I am Javier, I was posting before on slack and I was advised to
subscribe to that channel

just that  :)

Ciao
J.


[Discuss] Next MXNet release

2018-09-28 Thread Steffen Rochel
I updated
https://cwiki.apache.org/confluence/display/MXNET/Project+Proposals+for+next+MXNet+Release,
removed the completed items from 1.3 release and would like to kick off
discussion about the next release. Please suggest what you would like to
see included in the next release together with link to design proposal
(appropriately for the size and complexity of the proposal) or suggest
changes.
I suggest to target the next release for December 2018 to frame the
discussion.
Lets include review of
https://cwiki.apache.org/confluence/display/MXNET/MXNet+Roadmap - time to
update and discuss changes.

>From the 1.3 release we had discussion regarding
https://github.com/apache/incubator-mxnet/issues/11849 and resolution in
https://github.com/apache/incubator-mxnet/pull/12412 .
Are you aware of critical issues and feedback from user which we should
consider for a potential 1.3.1 patch release. Should we include PR 12412 in
a potential patch release?

Regards,
Steffen


Re: Which merge option to use on the Import Julia binding PR?

2018-09-28 Thread Carin Meier
I made a test regular merge commit into a copy of master. It seemed to go
fine. Here is a listing of what it will look like for everyone.

https://github.com/apache/incubator-mxnet/commits/test-merge-julia-import

Although, I would be happy to push the merge button. I think the most
important thing is to get the PR merged, so whatever way is the best to
make that happen, let's do it.

So - Does the regular merge seem like a good option?
If so, what is the best way to make that happen?


On Fri, Sep 28, 2018 at 6:05 PM Chiyuan Zhang  wrote:

> Agreed with Pedro. Maybe the merge-commit option from the github interface
> was disabled for a reason. But as Pedro said, maybe it is good to
> temporarily enable it for this PR and merge using that.
>
>
>- It should be technically easier than rebasing due to the
>git-subtree-import issue we are currently having
>- It also avoid stacking a huge commit history on *top* of current
>history
>- The downside is probably the history of the project is not linear
>anymore, but I think this is actually what we would like to have for
> this
>particular case, because the contents of the main repo and the julia
> branch
>actually does not overlap. So it makes sense to have two tails with
> their
>own history.
>
> Carin: I guess if someone with admin permission on the github could
> temporarily enable the merge-commit option, then pushing the button on the
> web might simply work.
>
> Best,
> Chiyuan
>
> On Fri, Sep 28, 2018 at 2:53 PM Carin Meier  wrote:
>
> > Pedro - Maybe a merge commit is a better answer in this case. I
> originally
> > ruled it out since it wasn't an option in the github web interface, but
> > since this looks like it is going to have to be done outside it because
> of
> > the subtrees anyway, it might be a better fit.
> >
> > On Fri, Sep 28, 2018 at 5:07 PM Carin Meier 
> wrote:
> >
> > > We are actually running into troubles with using the subtree and the
> > > rebase. Since it looks like this is not going to be a simple, "click
> the
> > > button" through the web page merge, I rather hand this task off to
> > someone
> > > with more context in making sure it gets in there correctly.
> > >
> > > Chiyuan or any others, would you be willing to take this over?
> > >
> > > Thanks,
> > > Carin
> > >
> > > On Fri, Sep 28, 2018 at 5:00 PM Naveen Swamy 
> wrote:
> > >
> > >> Should we try to first being into a branch and then try merge that
> > >> branch?
> > >>
> > >> > On Sep 28, 2018, at 4:40 PM, Pedro Larroy <
> > pedro.larroy.li...@gmail.com>
> > >> wrote:
> > >> >
> > >> > I'm not familiar with the specifics of this contribution, as a
> general
> > >> > approach my understanding is that if the list of commits is big and
> > you
> > >> > want to preserve history, usually merging is better so you keep
> > history
> > >> and
> > >> > causality, if you rebase all the commits on top of master you are
> > >> changing
> > >> > the history of these commits which can't be individually reverted as
> > >> some
> > >> > have suggested before. Maybe is because I come from a mercurial
> > >> background,
> > >> > but my initial impression would be either to:
> > >> > 1. squash everything and rebase
> > >> > 2. or merge without rebasing or squashing.
> > >> >
> > >> > Pedro.
> > >> >
> > >> >> On Thu, Sep 27, 2018 at 3:10 PM Carin Meier 
> > >> wrote:
> > >> >>
> > >> >> Thanks everyone for the input. I'll try to summarize the feedback
> > from
> > >> the
> > >> >> responses:
> > >> >>
> > >> >> Using Squash-Merge is the project standard for very good reasons.
> > >> However,
> > >> >> in the case of this PR to bring in the Julia language from its
> > sibling
> > >> >> repo, we want to preserve all the individual commits of the many
> > >> >> contributors that have worked over multiple years to make this a
> > great
> > >> >> language binding. We will use Rebase-Merge for it.
> > >> >>
> > >> >> Chiyuan - thanks for the suggestion of using a tag. I think we can
> > try
> > >> it
> > >> >> initially without it since there are other ways to browse the
> commit
> > >> >> history, like looking at the PRs. But, we can add the tag
> > >> retroactively if
> > >> >> people start having trouble.
> > >> >>
> > >> >> If there no objections, I will merge the PR using the above method
> in
> > >> my
> > >> >> morning (EST).
> > >> >>
> > >> >> Thanks everyone! I'm looking forward to having the Julia community
> > >> join the
> > >> >> main repo and increasing our collaboration with them.
> > >> >>
> > >> >> Best,
> > >> >> Carin
> > >> >>
> > >> >>> On Thu, Sep 27, 2018 at 1:37 PM Chiyuan Zhang 
> > >> wrote:
> > >> >>>
> > >> >>> +1 for rebase and merge. As a workaround for the aforementioned
> > issue,
> > >> >>> maybe we can create a tag for the commit before the merge, so that
> > in
> > >> >> case
> > >> >>> people want to browse the recent main-repo commits by skipping
> this
> > >> big
> > >> >>> chunk of rebased commits, there is a pointer to 

Re: Which merge option to use on the Import Julia binding PR?

2018-09-28 Thread Chiyuan Zhang
Agreed with Pedro. Maybe the merge-commit option from the github interface
was disabled for a reason. But as Pedro said, maybe it is good to
temporarily enable it for this PR and merge using that.


   - It should be technically easier than rebasing due to the
   git-subtree-import issue we are currently having
   - It also avoid stacking a huge commit history on *top* of current
   history
   - The downside is probably the history of the project is not linear
   anymore, but I think this is actually what we would like to have for this
   particular case, because the contents of the main repo and the julia branch
   actually does not overlap. So it makes sense to have two tails with their
   own history.

Carin: I guess if someone with admin permission on the github could
temporarily enable the merge-commit option, then pushing the button on the
web might simply work.

Best,
Chiyuan

On Fri, Sep 28, 2018 at 2:53 PM Carin Meier  wrote:

> Pedro - Maybe a merge commit is a better answer in this case. I originally
> ruled it out since it wasn't an option in the github web interface, but
> since this looks like it is going to have to be done outside it because of
> the subtrees anyway, it might be a better fit.
>
> On Fri, Sep 28, 2018 at 5:07 PM Carin Meier  wrote:
>
> > We are actually running into troubles with using the subtree and the
> > rebase. Since it looks like this is not going to be a simple, "click the
> > button" through the web page merge, I rather hand this task off to
> someone
> > with more context in making sure it gets in there correctly.
> >
> > Chiyuan or any others, would you be willing to take this over?
> >
> > Thanks,
> > Carin
> >
> > On Fri, Sep 28, 2018 at 5:00 PM Naveen Swamy  wrote:
> >
> >> Should we try to first being into a branch and then try merge that
> >> branch?
> >>
> >> > On Sep 28, 2018, at 4:40 PM, Pedro Larroy <
> pedro.larroy.li...@gmail.com>
> >> wrote:
> >> >
> >> > I'm not familiar with the specifics of this contribution, as a general
> >> > approach my understanding is that if the list of commits is big and
> you
> >> > want to preserve history, usually merging is better so you keep
> history
> >> and
> >> > causality, if you rebase all the commits on top of master you are
> >> changing
> >> > the history of these commits which can't be individually reverted as
> >> some
> >> > have suggested before. Maybe is because I come from a mercurial
> >> background,
> >> > but my initial impression would be either to:
> >> > 1. squash everything and rebase
> >> > 2. or merge without rebasing or squashing.
> >> >
> >> > Pedro.
> >> >
> >> >> On Thu, Sep 27, 2018 at 3:10 PM Carin Meier 
> >> wrote:
> >> >>
> >> >> Thanks everyone for the input. I'll try to summarize the feedback
> from
> >> the
> >> >> responses:
> >> >>
> >> >> Using Squash-Merge is the project standard for very good reasons.
> >> However,
> >> >> in the case of this PR to bring in the Julia language from its
> sibling
> >> >> repo, we want to preserve all the individual commits of the many
> >> >> contributors that have worked over multiple years to make this a
> great
> >> >> language binding. We will use Rebase-Merge for it.
> >> >>
> >> >> Chiyuan - thanks for the suggestion of using a tag. I think we can
> try
> >> it
> >> >> initially without it since there are other ways to browse the commit
> >> >> history, like looking at the PRs. But, we can add the tag
> >> retroactively if
> >> >> people start having trouble.
> >> >>
> >> >> If there no objections, I will merge the PR using the above method in
> >> my
> >> >> morning (EST).
> >> >>
> >> >> Thanks everyone! I'm looking forward to having the Julia community
> >> join the
> >> >> main repo and increasing our collaboration with them.
> >> >>
> >> >> Best,
> >> >> Carin
> >> >>
> >> >>> On Thu, Sep 27, 2018 at 1:37 PM Chiyuan Zhang 
> >> wrote:
> >> >>>
> >> >>> +1 for rebase and merge. As a workaround for the aforementioned
> issue,
> >> >>> maybe we can create a tag for the commit before the merge, so that
> in
> >> >> case
> >> >>> people want to browse the recent main-repo commits by skipping this
> >> big
> >> >>> chunk of rebased commits, there is a pointer to take his or her hand
> >> on.
> >> >>>
> >> >>> Best,
> >> >>> Chiyuan
> >> >>>
> >>  On Thu, Sep 27, 2018 at 7:34 AM Jason Dai 
> >> wrote:
> >> 
> >>  +1 to rebase and merge to preserve and track the contributions.
> >> 
> >>  Thanks,
> >>  -Jason
> >> 
> >>  On Thu, Sep 27, 2018 at 12:27 PM Aaron Markham <
> >> >>> aaron.s.mark...@gmail.com>
> >>  wrote:
> >> 
> >> > +1 to rebase and merge to retain the efforts of all of the
> >> >>> contributors.
> >>  If
> >> > there's some git maintenance that can trim it down from 700+
> commits
> >> >>> then
> >> > maybe that's a compromise.
> >> >
> >> >> On Wed, Sep 26, 2018, 21:23 Naveen Swamy 
> >> wrote:
> >> >>
> >> >> this PR comes from more than 1 individual, if we 

Re: Which merge option to use on the Import Julia binding PR?

2018-09-28 Thread Carin Meier
Pedro - Maybe a merge commit is a better answer in this case. I originally
ruled it out since it wasn't an option in the github web interface, but
since this looks like it is going to have to be done outside it because of
the subtrees anyway, it might be a better fit.

On Fri, Sep 28, 2018 at 5:07 PM Carin Meier  wrote:

> We are actually running into troubles with using the subtree and the
> rebase. Since it looks like this is not going to be a simple, "click the
> button" through the web page merge, I rather hand this task off to someone
> with more context in making sure it gets in there correctly.
>
> Chiyuan or any others, would you be willing to take this over?
>
> Thanks,
> Carin
>
> On Fri, Sep 28, 2018 at 5:00 PM Naveen Swamy  wrote:
>
>> Should we try to first being into a branch and then try merge that
>> branch?
>>
>> > On Sep 28, 2018, at 4:40 PM, Pedro Larroy 
>> wrote:
>> >
>> > I'm not familiar with the specifics of this contribution, as a general
>> > approach my understanding is that if the list of commits is big and you
>> > want to preserve history, usually merging is better so you keep history
>> and
>> > causality, if you rebase all the commits on top of master you are
>> changing
>> > the history of these commits which can't be individually reverted as
>> some
>> > have suggested before. Maybe is because I come from a mercurial
>> background,
>> > but my initial impression would be either to:
>> > 1. squash everything and rebase
>> > 2. or merge without rebasing or squashing.
>> >
>> > Pedro.
>> >
>> >> On Thu, Sep 27, 2018 at 3:10 PM Carin Meier 
>> wrote:
>> >>
>> >> Thanks everyone for the input. I'll try to summarize the feedback from
>> the
>> >> responses:
>> >>
>> >> Using Squash-Merge is the project standard for very good reasons.
>> However,
>> >> in the case of this PR to bring in the Julia language from its sibling
>> >> repo, we want to preserve all the individual commits of the many
>> >> contributors that have worked over multiple years to make this a great
>> >> language binding. We will use Rebase-Merge for it.
>> >>
>> >> Chiyuan - thanks for the suggestion of using a tag. I think we can try
>> it
>> >> initially without it since there are other ways to browse the commit
>> >> history, like looking at the PRs. But, we can add the tag
>> retroactively if
>> >> people start having trouble.
>> >>
>> >> If there no objections, I will merge the PR using the above method in
>> my
>> >> morning (EST).
>> >>
>> >> Thanks everyone! I'm looking forward to having the Julia community
>> join the
>> >> main repo and increasing our collaboration with them.
>> >>
>> >> Best,
>> >> Carin
>> >>
>> >>> On Thu, Sep 27, 2018 at 1:37 PM Chiyuan Zhang 
>> wrote:
>> >>>
>> >>> +1 for rebase and merge. As a workaround for the aforementioned issue,
>> >>> maybe we can create a tag for the commit before the merge, so that in
>> >> case
>> >>> people want to browse the recent main-repo commits by skipping this
>> big
>> >>> chunk of rebased commits, there is a pointer to take his or her hand
>> on.
>> >>>
>> >>> Best,
>> >>> Chiyuan
>> >>>
>>  On Thu, Sep 27, 2018 at 7:34 AM Jason Dai 
>> wrote:
>> 
>>  +1 to rebase and merge to preserve and track the contributions.
>> 
>>  Thanks,
>>  -Jason
>> 
>>  On Thu, Sep 27, 2018 at 12:27 PM Aaron Markham <
>> >>> aaron.s.mark...@gmail.com>
>>  wrote:
>> 
>> > +1 to rebase and merge to retain the efforts of all of the
>> >>> contributors.
>>  If
>> > there's some git maintenance that can trim it down from 700+ commits
>> >>> then
>> > maybe that's a compromise.
>> >
>> >> On Wed, Sep 26, 2018, 21:23 Naveen Swamy 
>> wrote:
>> >>
>> >> this PR comes from more than 1 individual, if we squash merge we'll
>> >>> not
>> > be
>> >> able to attribute the contribution of those individuals.
>> >>
>> >> +1 to rebase merge to preserve history
>> >>
>> >> On Thu, Sep 27, 2018 at 12:04 AM, Tianqi Chen <
>>  tqc...@cs.washington.edu>
>> >> wrote:
>> >>
>> >>> One of the main reason for a rebase merge is that it preserves
>> >> the
>> > commit
>> >>> history of the MXNet.jl package contributors, and given that the
>> > project
>> >>> has been evolved since 2015 and has always been a high-quality
>>  language
>> >>> module for MXNet.
>> >>>
>> >>> I think we should take an exception here to preserve the commit
>>  history
>> >> of
>> >>> each individual contributors to the Julia binding and welcome
>> >> them
>> >>> to
>> > the
>> >>> community.
>> >>>
>> >>> Tianqi
>> >>>
>> >>> On Wed, Sep 26, 2018 at 8:55 PM Tianqi Chen <
>>  tqc...@cs.washington.edu>
>> >>> wrote:
>> >>>
>>  In this particular case, I would suggest rebase and merge.
>> 
>>  The main reasoning is that the commit log of the Julia binding
>> >> is
>>  not
>>  simple WIP 

Re: [DISCUSS] Use modernized C++11 range loops uniformly throughout the project

2018-09-28 Thread Chris Olivier
ok then, my vote is still -1, however, because it’s just adding needless
friction for developers imho.

On Fri, Sep 28, 2018 at 7:42 AM kellen sunderland <
kellen.sunderl...@gmail.com> wrote:

> "Range loops aren’t always the most performant way" Do you have an example
> where there's a perf difference?
>
> "In addition, sometimes you want the index. Or maybe you want to iterate
> backwards, or not start from the first, etc. Maybe you want the iterator
> because you remove it from the list at the bottom of the loop Seems
> like a rule for the sake of having a rule."
>
> I should have been more clear about this point.  If you're using the index
> in the loop, doing reverse iteration, or not iterating from start-to-end
> this inspection is smart enough to realize it and will not suggest
> optimizing that type of loop.  The loops that would be changes are _only_
> the loops which are detected as equivalent to range-loops.  Examples can be
> found here:
> https://clang.llvm.org/extra/clang-tidy/checks/modernize-loop-convert.html
> or you can look at what's been changed in the ref PR.  I've initially set
> our confidence level at 'reasonable' but we could also set to 'safe' which
> would further reduce the number of loops the check would apply to.
>
> -Kellen
>
> On Fri, Sep 28, 2018 at 3:54 PM Chris Olivier 
> wrote:
>
> > -1
> >
> > Range loops aren’t always the most performant way. In addition, sometimes
> > you want the index. Or maybe you want to iterate backwards, or not start
> > from the first, etc. Maybe you want the iterator because you remove it
> from
> > the list at the bottom of the loop Seems like a rule for the sake of
> > having a rule.
> >
> > On Fri, Sep 28, 2018 at 2:12 AM kellen sunderland <
> > kellen.sunderl...@gmail.com> wrote:
> >
> > > Hello MXNet devs,
> > >
> > > I'd like to discuss uniformly adopting C++11 range loops in the MXNet
> > > project.  The benefits I see are:
> > >
> > > *  Improved C++ readability (examples below).
> > > *  Consistency with other languages.  The range-loops are quite similar
> > to
> > > loops almost all other programming languages.  Given we're a project
> that
> > > supports many languages this language consistency could be positive for
> > our
> > > community.
> > > * Consistency within the same project.  Currently different authors
> have
> > > different loops styles which hurts codebase readability.
> > > *  Best available performance.  There are often multiple ways to write
> > > loops in C++ with subtle differences in performance and memory usage
> > > between loop methods.  Using range-loops ensures we get the best
> possible
> > > perf using an intuitive loop pattern.
> > > *  Slightly lower chance for bugs / OOB accesses when dealing with
> > indexing
> > > in an array for example.
> > >
> > > If we decide to enable this uniformly throughout the project we can
> > enable
> > > this policy with a simple clang-tidy configuration change.  There would
> > be
> > > no need for reviewers to have to manually provide feedback when someone
> > > uses an older C++ loops style.
> > >
> > > -Kellen
> > >
> > > Reference PR:  https://github.com/apache/incubator-mxnet/pull/12356/
> > > Previous clang-tidy discussion on the list:
> > >
> > >
> >
> https://lists.apache.org/thread.html/b0ae5a9df5dfe0d9074cb2ebe432264db4fa2175b89fa43a5f6e36be@%3Cdev.mxnet.apache.org%3E
> > >
> > > -
> > > Examples:
> > > for (auto axis_iter = param.axis.begin() ; axis_iter!=
> param.axis.end();
> > > ++axis_iter) {
> > > CHECK_LT(*axis_iter, static_cast(ishape.ndim()));
> > > stride_[reverse_index] = ishape[*axis_iter];
> > > ...
> > > -->
> > > for (int axis : param.axis) {
> > > CHECK_LT(axis, static_cast(ishape.ndim()));
> > > stride_[reverse_index] = ishape[axis];
> > > ...
> > > --
> > > for (size_t i = 0; i < in_array.size(); i++) {
> > > auto  = in_array[i];
> > > pre_temp_buf_.emplace_back(nd.shape(), nd.ctx(), true, nd.dtype());
> > > }
> > > -->
> > > for (auto & nd : in_array) {
> > > pre_temp_buf_.emplace_back(nd.shape(), nd.ctx(), true, nd.dtype());
> > > }
> > >
> >
>


Re: Which merge option to use on the Import Julia binding PR?

2018-09-28 Thread Carin Meier
We are actually running into troubles with using the subtree and the
rebase. Since it looks like this is not going to be a simple, "click the
button" through the web page merge, I rather hand this task off to someone
with more context in making sure it gets in there correctly.

Chiyuan or any others, would you be willing to take this over?

Thanks,
Carin

On Fri, Sep 28, 2018 at 5:00 PM Naveen Swamy  wrote:

> Should we try to first being into a branch and then try merge that branch?
>
> > On Sep 28, 2018, at 4:40 PM, Pedro Larroy 
> wrote:
> >
> > I'm not familiar with the specifics of this contribution, as a general
> > approach my understanding is that if the list of commits is big and you
> > want to preserve history, usually merging is better so you keep history
> and
> > causality, if you rebase all the commits on top of master you are
> changing
> > the history of these commits which can't be individually reverted as some
> > have suggested before. Maybe is because I come from a mercurial
> background,
> > but my initial impression would be either to:
> > 1. squash everything and rebase
> > 2. or merge without rebasing or squashing.
> >
> > Pedro.
> >
> >> On Thu, Sep 27, 2018 at 3:10 PM Carin Meier 
> wrote:
> >>
> >> Thanks everyone for the input. I'll try to summarize the feedback from
> the
> >> responses:
> >>
> >> Using Squash-Merge is the project standard for very good reasons.
> However,
> >> in the case of this PR to bring in the Julia language from its sibling
> >> repo, we want to preserve all the individual commits of the many
> >> contributors that have worked over multiple years to make this a great
> >> language binding. We will use Rebase-Merge for it.
> >>
> >> Chiyuan - thanks for the suggestion of using a tag. I think we can try
> it
> >> initially without it since there are other ways to browse the commit
> >> history, like looking at the PRs. But, we can add the tag retroactively
> if
> >> people start having trouble.
> >>
> >> If there no objections, I will merge the PR using the above method in my
> >> morning (EST).
> >>
> >> Thanks everyone! I'm looking forward to having the Julia community join
> the
> >> main repo and increasing our collaboration with them.
> >>
> >> Best,
> >> Carin
> >>
> >>> On Thu, Sep 27, 2018 at 1:37 PM Chiyuan Zhang 
> wrote:
> >>>
> >>> +1 for rebase and merge. As a workaround for the aforementioned issue,
> >>> maybe we can create a tag for the commit before the merge, so that in
> >> case
> >>> people want to browse the recent main-repo commits by skipping this big
> >>> chunk of rebased commits, there is a pointer to take his or her hand
> on.
> >>>
> >>> Best,
> >>> Chiyuan
> >>>
>  On Thu, Sep 27, 2018 at 7:34 AM Jason Dai 
> wrote:
> 
>  +1 to rebase and merge to preserve and track the contributions.
> 
>  Thanks,
>  -Jason
> 
>  On Thu, Sep 27, 2018 at 12:27 PM Aaron Markham <
> >>> aaron.s.mark...@gmail.com>
>  wrote:
> 
> > +1 to rebase and merge to retain the efforts of all of the
> >>> contributors.
>  If
> > there's some git maintenance that can trim it down from 700+ commits
> >>> then
> > maybe that's a compromise.
> >
> >> On Wed, Sep 26, 2018, 21:23 Naveen Swamy 
> wrote:
> >>
> >> this PR comes from more than 1 individual, if we squash merge we'll
> >>> not
> > be
> >> able to attribute the contribution of those individuals.
> >>
> >> +1 to rebase merge to preserve history
> >>
> >> On Thu, Sep 27, 2018 at 12:04 AM, Tianqi Chen <
>  tqc...@cs.washington.edu>
> >> wrote:
> >>
> >>> One of the main reason for a rebase merge is that it preserves
> >> the
> > commit
> >>> history of the MXNet.jl package contributors, and given that the
> > project
> >>> has been evolved since 2015 and has always been a high-quality
>  language
> >>> module for MXNet.
> >>>
> >>> I think we should take an exception here to preserve the commit
>  history
> >> of
> >>> each individual contributors to the Julia binding and welcome
> >> them
> >>> to
> > the
> >>> community.
> >>>
> >>> Tianqi
> >>>
> >>> On Wed, Sep 26, 2018 at 8:55 PM Tianqi Chen <
>  tqc...@cs.washington.edu>
> >>> wrote:
> >>>
>  In this particular case, I would suggest rebase and merge.
> 
>  The main reasoning is that the commit log of the Julia binding
> >> is
>  not
>  simple WIP commits, every commit there has been done through
> > testcases
> >>> and
>  it is important for us to respect the developer of the effort.
> >> It
>  is
> >> also
>  good to trace back the history of the commits more easily.
> 
>  Tianqi
> 
> 
>  Tianqi
> 
>  On Wed, Sep 26, 2018 at 5:34 PM Carin Meier <
> >>> carinme...@gmail.com>
> >>> wrote:
> 
> > Chiyuan,
> >
> 

Re: Which merge option to use on the Import Julia binding PR?

2018-09-28 Thread Naveen Swamy
Should we try to first being into a branch and then try merge that branch? 

> On Sep 28, 2018, at 4:40 PM, Pedro Larroy  
> wrote:
> 
> I'm not familiar with the specifics of this contribution, as a general
> approach my understanding is that if the list of commits is big and you
> want to preserve history, usually merging is better so you keep history and
> causality, if you rebase all the commits on top of master you are changing
> the history of these commits which can't be individually reverted as some
> have suggested before. Maybe is because I come from a mercurial background,
> but my initial impression would be either to:
> 1. squash everything and rebase
> 2. or merge without rebasing or squashing.
> 
> Pedro.
> 
>> On Thu, Sep 27, 2018 at 3:10 PM Carin Meier  wrote:
>> 
>> Thanks everyone for the input. I'll try to summarize the feedback from the
>> responses:
>> 
>> Using Squash-Merge is the project standard for very good reasons. However,
>> in the case of this PR to bring in the Julia language from its sibling
>> repo, we want to preserve all the individual commits of the many
>> contributors that have worked over multiple years to make this a great
>> language binding. We will use Rebase-Merge for it.
>> 
>> Chiyuan - thanks for the suggestion of using a tag. I think we can try it
>> initially without it since there are other ways to browse the commit
>> history, like looking at the PRs. But, we can add the tag retroactively if
>> people start having trouble.
>> 
>> If there no objections, I will merge the PR using the above method in my
>> morning (EST).
>> 
>> Thanks everyone! I'm looking forward to having the Julia community join the
>> main repo and increasing our collaboration with them.
>> 
>> Best,
>> Carin
>> 
>>> On Thu, Sep 27, 2018 at 1:37 PM Chiyuan Zhang  wrote:
>>> 
>>> +1 for rebase and merge. As a workaround for the aforementioned issue,
>>> maybe we can create a tag for the commit before the merge, so that in
>> case
>>> people want to browse the recent main-repo commits by skipping this big
>>> chunk of rebased commits, there is a pointer to take his or her hand on.
>>> 
>>> Best,
>>> Chiyuan
>>> 
 On Thu, Sep 27, 2018 at 7:34 AM Jason Dai  wrote:
 
 +1 to rebase and merge to preserve and track the contributions.
 
 Thanks,
 -Jason
 
 On Thu, Sep 27, 2018 at 12:27 PM Aaron Markham <
>>> aaron.s.mark...@gmail.com>
 wrote:
 
> +1 to rebase and merge to retain the efforts of all of the
>>> contributors.
 If
> there's some git maintenance that can trim it down from 700+ commits
>>> then
> maybe that's a compromise.
> 
>> On Wed, Sep 26, 2018, 21:23 Naveen Swamy  wrote:
>> 
>> this PR comes from more than 1 individual, if we squash merge we'll
>>> not
> be
>> able to attribute the contribution of those individuals.
>> 
>> +1 to rebase merge to preserve history
>> 
>> On Thu, Sep 27, 2018 at 12:04 AM, Tianqi Chen <
 tqc...@cs.washington.edu>
>> wrote:
>> 
>>> One of the main reason for a rebase merge is that it preserves
>> the
> commit
>>> history of the MXNet.jl package contributors, and given that the
> project
>>> has been evolved since 2015 and has always been a high-quality
 language
>>> module for MXNet.
>>> 
>>> I think we should take an exception here to preserve the commit
 history
>> of
>>> each individual contributors to the Julia binding and welcome
>> them
>>> to
> the
>>> community.
>>> 
>>> Tianqi
>>> 
>>> On Wed, Sep 26, 2018 at 8:55 PM Tianqi Chen <
 tqc...@cs.washington.edu>
>>> wrote:
>>> 
 In this particular case, I would suggest rebase and merge.
 
 The main reasoning is that the commit log of the Julia binding
>> is
 not
 simple WIP commits, every commit there has been done through
> testcases
>>> and
 it is important for us to respect the developer of the effort.
>> It
 is
>> also
 good to trace back the history of the commits more easily.
 
 Tianqi
 
 
 Tianqi
 
 On Wed, Sep 26, 2018 at 5:34 PM Carin Meier <
>>> carinme...@gmail.com>
>>> wrote:
 
> Chiyuan,
> 
> Thanks for the prompt to find some clarity of the pros and
>> cons
>>> of
>>> each. I
> think that will help drive us to the right decision. I think
>>> some
 of
>>> those
> reasons are the ones you listed. I will take a stab below at
> outlining
> what
> I see. Feel free to chime in if I missed any.
> 
> *Squash and Merge*
>  *Pros* - It is the project standard
>  - It will provide one commit for the feature and
>>> lessen
> the
>>> need
> for 700+ commits rebased on top of master.
> - It is easier for a user to do git log to browse

Re: Maturity Model and Graduation

2018-09-28 Thread Pedro Larroy
So Isabel, are you saying that if we publish a clearer TODO list or
contributions needed material we might get more contribution there?

One thing that I like from other projects is to make a list of low-hanging
fruit issues or easy contributions that newcomers can pick to get familiar
with the project, especially in projects like MXNet in which some
contributions might require significant ramp up time, technical and
mathematical skills or domain knowledge.

Pedro.

On Fri, Sep 28, 2018 at 3:06 AM Isabel Drost-Fromm 
wrote:

>
>
> On 28/09/18 11:27, kellen sunderland wrote:
> > I'd love to see some more
> > sustained contribution from other open source communities to help us out
> in
> > this area
>
> That's not exactly the model I have seen to work. What I have seen works
> really well at other projects is pulling users in as committers in a
> scratch your own itch kind of way. For that to work you need to make it
> clear what contributions you need, you need to make time to coach people
> to become developers, you need to make your users accustomed to the way
> you work as early as possible. It also helps to ask users for
> contributions and offer mentoring help from your side along the way.
>
> I know that this is tedious work that needs a lot of motivating people,
> mentoring people, explaining to people, however it makes for a
> sustainable community of people that do the work out of self interest.
>
>
> http://blog.isabel-drost.de/posts/open-development-and-inner-source-for-fun-and-profit.html
>
>
> Isabel
>


Re: Which merge option to use on the Import Julia binding PR?

2018-09-28 Thread Pedro Larroy
I'm not familiar with the specifics of this contribution, as a general
approach my understanding is that if the list of commits is big and you
want to preserve history, usually merging is better so you keep history and
causality, if you rebase all the commits on top of master you are changing
the history of these commits which can't be individually reverted as some
have suggested before. Maybe is because I come from a mercurial background,
but my initial impression would be either to:
1. squash everything and rebase
2. or merge without rebasing or squashing.

Pedro.

On Thu, Sep 27, 2018 at 3:10 PM Carin Meier  wrote:

> Thanks everyone for the input. I'll try to summarize the feedback from the
> responses:
>
> Using Squash-Merge is the project standard for very good reasons. However,
> in the case of this PR to bring in the Julia language from its sibling
> repo, we want to preserve all the individual commits of the many
> contributors that have worked over multiple years to make this a great
> language binding. We will use Rebase-Merge for it.
>
> Chiyuan - thanks for the suggestion of using a tag. I think we can try it
> initially without it since there are other ways to browse the commit
> history, like looking at the PRs. But, we can add the tag retroactively if
> people start having trouble.
>
> If there no objections, I will merge the PR using the above method in my
> morning (EST).
>
> Thanks everyone! I'm looking forward to having the Julia community join the
> main repo and increasing our collaboration with them.
>
> Best,
> Carin
>
> On Thu, Sep 27, 2018 at 1:37 PM Chiyuan Zhang  wrote:
>
> > +1 for rebase and merge. As a workaround for the aforementioned issue,
> > maybe we can create a tag for the commit before the merge, so that in
> case
> > people want to browse the recent main-repo commits by skipping this big
> > chunk of rebased commits, there is a pointer to take his or her hand on.
> >
> > Best,
> > Chiyuan
> >
> > On Thu, Sep 27, 2018 at 7:34 AM Jason Dai  wrote:
> >
> > > +1 to rebase and merge to preserve and track the contributions.
> > >
> > > Thanks,
> > > -Jason
> > >
> > > On Thu, Sep 27, 2018 at 12:27 PM Aaron Markham <
> > aaron.s.mark...@gmail.com>
> > > wrote:
> > >
> > > > +1 to rebase and merge to retain the efforts of all of the
> > contributors.
> > > If
> > > > there's some git maintenance that can trim it down from 700+ commits
> > then
> > > > maybe that's a compromise.
> > > >
> > > > On Wed, Sep 26, 2018, 21:23 Naveen Swamy  wrote:
> > > >
> > > > > this PR comes from more than 1 individual, if we squash merge we'll
> > not
> > > > be
> > > > > able to attribute the contribution of those individuals.
> > > > >
> > > > > +1 to rebase merge to preserve history
> > > > >
> > > > > On Thu, Sep 27, 2018 at 12:04 AM, Tianqi Chen <
> > > tqc...@cs.washington.edu>
> > > > > wrote:
> > > > >
> > > > > > One of the main reason for a rebase merge is that it preserves
> the
> > > > commit
> > > > > > history of the MXNet.jl package contributors, and given that the
> > > > project
> > > > > > has been evolved since 2015 and has always been a high-quality
> > > language
> > > > > > module for MXNet.
> > > > > >
> > > > > > I think we should take an exception here to preserve the commit
> > > history
> > > > > of
> > > > > > each individual contributors to the Julia binding and welcome
> them
> > to
> > > > the
> > > > > > community.
> > > > > >
> > > > > > Tianqi
> > > > > >
> > > > > > On Wed, Sep 26, 2018 at 8:55 PM Tianqi Chen <
> > > tqc...@cs.washington.edu>
> > > > > > wrote:
> > > > > >
> > > > > > > In this particular case, I would suggest rebase and merge.
> > > > > > >
> > > > > > > The main reasoning is that the commit log of the Julia binding
> is
> > > not
> > > > > > > simple WIP commits, every commit there has been done through
> > > > testcases
> > > > > > and
> > > > > > > it is important for us to respect the developer of the effort.
> It
> > > is
> > > > > also
> > > > > > > good to trace back the history of the commits more easily.
> > > > > > >
> > > > > > > Tianqi
> > > > > > >
> > > > > > >
> > > > > > > Tianqi
> > > > > > >
> > > > > > > On Wed, Sep 26, 2018 at 5:34 PM Carin Meier <
> > carinme...@gmail.com>
> > > > > > wrote:
> > > > > > >
> > > > > > >> Chiyuan,
> > > > > > >>
> > > > > > >> Thanks for the prompt to find some clarity of the pros and
> cons
> > of
> > > > > > each. I
> > > > > > >> think that will help drive us to the right decision. I think
> > some
> > > of
> > > > > > those
> > > > > > >> reasons are the ones you listed. I will take a stab below at
> > > > outlining
> > > > > > >> what
> > > > > > >> I see. Feel free to chime in if I missed any.
> > > > > > >>
> > > > > > >> *Squash and Merge*
> > > > > > >>   *Pros* - It is the project standard
> > > > > > >>   - It will provide one commit for the feature and
> > lessen
> > > > the
> > > > > > need
> > > > > > >> for 700+ commits rebased on top of master.
> > > > > > >>  

Re: [DISCUSS] Use modernized C++11 range loops uniformly throughout the project

2018-09-28 Thread Lin Yuan
+1

Using range-based for-loop whenever possible improves code readability and
makes code less prone to human error.

I did some preliminary research on Google and did not find any complaint
about its performance drawback. Here is one piece from StackOverflow for
reference:
https://stackoverflow.com/questions/10821756/is-the-ranged-based-for-loop-beneficial-to-performance

Lin

On Fri, Sep 28, 2018 at 7:42 AM kellen sunderland <
kellen.sunderl...@gmail.com> wrote:

> "Range loops aren’t always the most performant way" Do you have an example
> where there's a perf difference?
>
> "In addition, sometimes you want the index. Or maybe you want to iterate
> backwards, or not start from the first, etc. Maybe you want the iterator
> because you remove it from the list at the bottom of the loop Seems
> like a rule for the sake of having a rule."
>
> I should have been more clear about this point.  If you're using the index
> in the loop, doing reverse iteration, or not iterating from start-to-end
> this inspection is smart enough to realize it and will not suggest
> optimizing that type of loop.  The loops that would be changes are _only_
> the loops which are detected as equivalent to range-loops.  Examples can be
> found here:
> https://clang.llvm.org/extra/clang-tidy/checks/modernize-loop-convert.html
> or you can look at what's been changed in the ref PR.  I've initially set
> our confidence level at 'reasonable' but we could also set to 'safe' which
> would further reduce the number of loops the check would apply to.
>
> -Kellen
>
> On Fri, Sep 28, 2018 at 3:54 PM Chris Olivier 
> wrote:
>
> > -1
> >
> > Range loops aren’t always the most performant way. In addition, sometimes
> > you want the index. Or maybe you want to iterate backwards, or not start
> > from the first, etc. Maybe you want the iterator because you remove it
> from
> > the list at the bottom of the loop Seems like a rule for the sake of
> > having a rule.
> >
> > On Fri, Sep 28, 2018 at 2:12 AM kellen sunderland <
> > kellen.sunderl...@gmail.com> wrote:
> >
> > > Hello MXNet devs,
> > >
> > > I'd like to discuss uniformly adopting C++11 range loops in the MXNet
> > > project.  The benefits I see are:
> > >
> > > *  Improved C++ readability (examples below).
> > > *  Consistency with other languages.  The range-loops are quite similar
> > to
> > > loops almost all other programming languages.  Given we're a project
> that
> > > supports many languages this language consistency could be positive for
> > our
> > > community.
> > > * Consistency within the same project.  Currently different authors
> have
> > > different loops styles which hurts codebase readability.
> > > *  Best available performance.  There are often multiple ways to write
> > > loops in C++ with subtle differences in performance and memory usage
> > > between loop methods.  Using range-loops ensures we get the best
> possible
> > > perf using an intuitive loop pattern.
> > > *  Slightly lower chance for bugs / OOB accesses when dealing with
> > indexing
> > > in an array for example.
> > >
> > > If we decide to enable this uniformly throughout the project we can
> > enable
> > > this policy with a simple clang-tidy configuration change.  There would
> > be
> > > no need for reviewers to have to manually provide feedback when someone
> > > uses an older C++ loops style.
> > >
> > > -Kellen
> > >
> > > Reference PR:  https://github.com/apache/incubator-mxnet/pull/12356/
> > > Previous clang-tidy discussion on the list:
> > >
> > >
> >
> https://lists.apache.org/thread.html/b0ae5a9df5dfe0d9074cb2ebe432264db4fa2175b89fa43a5f6e36be@%3Cdev.mxnet.apache.org%3E
> > >
> > > -
> > > Examples:
> > > for (auto axis_iter = param.axis.begin() ; axis_iter!=
> param.axis.end();
> > > ++axis_iter) {
> > > CHECK_LT(*axis_iter, static_cast(ishape.ndim()));
> > > stride_[reverse_index] = ishape[*axis_iter];
> > > ...
> > > -->
> > > for (int axis : param.axis) {
> > > CHECK_LT(axis, static_cast(ishape.ndim()));
> > > stride_[reverse_index] = ishape[axis];
> > > ...
> > > --
> > > for (size_t i = 0; i < in_array.size(); i++) {
> > > auto  = in_array[i];
> > > pre_temp_buf_.emplace_back(nd.shape(), nd.ctx(), true, nd.dtype());
> > > }
> > > -->
> > > for (auto & nd : in_array) {
> > > pre_temp_buf_.emplace_back(nd.shape(), nd.ctx(), true, nd.dtype());
> > > }
> > >
> >
>


Re: [LAZY VOTE] Consolidating developer guide in one place (cwiki preferred)

2018-09-28 Thread Lin Yuan
Hi Aaron,

Thanks a lot for effort. This consolidation will make it more convenient
for developers to find development resource and help to attract more
contributors.

I have also created a story to make it easy for developers to navigate from
mxnet.io: https://issues.apache.org/jira/browse/MXNET-1002

Thanks!

Lin

On Wed, Sep 26, 2018 at 10:24 AM Aaron Markham 
wrote:

> I think the latest feedback has been great. It seems to be mostly user
> level issues though. Installation and usage primarily, with a sprinkle of
> *if that stuff was better then I might be able to contribute*.
>
> I've (with a few other contributors) tackled some of the very direct bits
> of feedback for the website by incremental improvement of the install
> pages, Gluon info, and UX for the API docs.
>
> I've started additional planning for updates by adding an epic with
> specific stories and tasks to Jira for the documentation pipeline (the
> backend part of the website build):
> https://issues.apache.org/jira/browse/MXNET-957
>
> I've also added one that is more specific to the website's content:
> https://issues.apache.org/jira/browse/MXNET-986
> This is where I've captured only two tasks related to transitioning content
> related to "contributing to MXNet" over to the wiki. Any pointers on which
> content to move would help. These could be added as tasks too.
>
> I welcome any suggestions, additions, and contributions to either of these
> epics.
>
> Cheers,
> Aaron
>
> On Wed, Sep 26, 2018, 00:02 Lin Yuan  wrote:
>
> > Hi Aaron,
> >
> > Do we have a resolution for this proposal yet? Recently, there have been
> > many asks for a better documentation for MXNet developers. I think it's a
> > good time that we consolidate the developer documentation in a central
> > place. Any thoughts or plan?
> >
> > Many Thanks,
> >
> > Lin
> >
> > On Tue, Sep 4, 2018 at 1:55 PM Lin Yuan  wrote:
> >
> > > +1
> > >
> > > On Tue, Sep 4, 2018 at 1:46 PM Aaron Markham <
> aaron.s.mark...@gmail.com>
> > > wrote:
> > >
> > >> I'd like to call for a lazy vote on this before proceeding. Already
> had
> > >> some +1s but let's be sure.
> > >>
> > >> The vote is to move developer guide info to cwiki. User guides would
> > >> remain
> > >> on the website.
> > >>
> > >> On Tue, Aug 21, 2018 at 12:53 PM sandeep krishnamurthy <
> > >> sandeep.krishn...@gmail.com> wrote:
> > >>
> > >> > +1
> > >> > Thanks Lin and Aaron. I agree website to cover all user facing
> > >> > documentation and a separate consolidated and organized developer
> > >> focussed
> > >> > docs in one place (cwiki).
> > >> >
> > >> >
> > >> > Note: Permissions on cwiki is currently not well managed with many
> > >> people
> > >> > having full admin rights to edit/create/delete pages. Should be fine
> > for
> > >> > now, but, when we start accumulating many documents and resources,
> we
> > >> > should probably revisit on Delete permissions.
> > >> >
> > >> >
> > >> > On Tue, Aug 21, 2018 at 11:57 AM Lin Yuan 
> > wrote:
> > >> >
> > >> > > Hi Aaron,
> > >> > >
> > >> > > Thanks for your answer. I think it's a very worthwhile effort to
> > move
> > >> all
> > >> > > the developer related content from mxet.io website to a dedicated
> > >> > > developer
> > >> > > site. Would you like to initiate this effort?
> > >> > >
> > >> > > Best,
> > >> > >
> > >> > > Lin
> > >> > >
> > >> > > On Wed, Aug 15, 2018 at 3:47 PM Haibin Lin <
> > haibin.lin@gmail.com>
> > >> > > wrote:
> > >> > >
> > >> > > > +1
> > >> > > >
> > >> > > > On Wed, Aug 15, 2018 at 1:10 PM, Aaron Markham <
> > >> > > aaron.s.mark...@gmail.com>
> > >> > > > wrote:
> > >> > > >
> > >> > > > > Hi Lin, I agree with this organization. If you feel like
> > >> somethings
> > >> > > > should
> > >> > > > > be transitioned from the website to the wiki, I can help with
> > >> that,
> > >> > but
> > >> > > > for
> > >> > > > > the moment I've been suggesting that new developer-focused
> > >> content be
> > >> > > > > placed on the wiki.
> > >> > > > >
> > >> > > > > On Tue, Aug 14, 2018 at 10:40 AM, Lin Yuan <
> apefor...@gmail.com
> > >
> > >> > > wrote:
> > >> > > > >
> > >> > > > > > Dear MXNet community,
> > >> > > > > >
> > >> > > > > > As a developer, I noticed we have some developer guide
> > >> scattered in
> > >> > > > > > different websites (mxnet.io, cwiki):
> > >> > > > > >
> > >> > > > > > E.g.
> > >> > > > > >
> > >> > > > > > How to Create New Operators (Layers): [
> > >> > > > > > https://mxnet.incubator.apache.org/faq/new_op.html]
> > >> > > > > > A Guide to Implementing Sparse Operators in MXNet Backend [
> > >> > > > > > https://cwiki.apache.org/confluence/display/MXNET/A+
> > >> > > > > > Guide+to+Implementing+Sparse+Operators+in+MXNet+Backend
> > >> > > > > > ]
> > >> > > > > >
> > >> > > > > > When searching developer guide by keyword, only one of them
> > can
> > >> be
> > >> > > > > returned
> > >> > > > > > on either site.
> > >> > > > > >
> > >> > > > > > It will be more convenient for developers if all the
> 

Re: Mentor changes

2018-09-28 Thread Steffen Rochel
Jason, Jim, Bob and Michael - welcome to the project! Looking forward
working with you.
I like Jim's suggestion to make an assessment where we are based on the
maturity model and will do a first pass over the weekend.

Regards,
Steffen

On Thu, Sep 27, 2018 at 7:37 PM Zhao, Patric  wrote:

> Welcome, Jason, I think MXNet will achieve the great success as same as
> BigDL.
>
> Looking forward to working with you :)
>
>
> > -Original Message-
> > From: Hen [mailto:bay...@apache.org]
> > Sent: Friday, September 28, 2018 8:23 AM
> > To: dev@mxnet.incubator.apache.org
> > Cc: Jim Jagielski ; Michael Wall ;
> Bob
> > Paulin ; Jason Dai 
> > Subject: Mentor changes
> >
> > I'd like to welcome four additional mentors (cc'd) for MXNet :)
> >
> >  * Jason Dai;
> >  * Jim Jagielski;
> >  * Bob Paulin; and
> >  * Michael Wall.
> >
> > Suneel Marthi has also stepped back from mentoring.
> >
> > Thank you to each of our new mentors for joining in, and many thanks to
> > Suneel for the time he's given over the last 2 years.
> >
> > Hen
>


Re: [DISCUSS] Use modernized C++11 range loops uniformly throughout the project

2018-09-28 Thread kellen sunderland
"Range loops aren’t always the most performant way" Do you have an example
where there's a perf difference?

"In addition, sometimes you want the index. Or maybe you want to iterate
backwards, or not start from the first, etc. Maybe you want the iterator
because you remove it from the list at the bottom of the loop Seems
like a rule for the sake of having a rule."

I should have been more clear about this point.  If you're using the index
in the loop, doing reverse iteration, or not iterating from start-to-end
this inspection is smart enough to realize it and will not suggest
optimizing that type of loop.  The loops that would be changes are _only_
the loops which are detected as equivalent to range-loops.  Examples can be
found here:
https://clang.llvm.org/extra/clang-tidy/checks/modernize-loop-convert.html
or you can look at what's been changed in the ref PR.  I've initially set
our confidence level at 'reasonable' but we could also set to 'safe' which
would further reduce the number of loops the check would apply to.

-Kellen

On Fri, Sep 28, 2018 at 3:54 PM Chris Olivier 
wrote:

> -1
>
> Range loops aren’t always the most performant way. In addition, sometimes
> you want the index. Or maybe you want to iterate backwards, or not start
> from the first, etc. Maybe you want the iterator because you remove it from
> the list at the bottom of the loop Seems like a rule for the sake of
> having a rule.
>
> On Fri, Sep 28, 2018 at 2:12 AM kellen sunderland <
> kellen.sunderl...@gmail.com> wrote:
>
> > Hello MXNet devs,
> >
> > I'd like to discuss uniformly adopting C++11 range loops in the MXNet
> > project.  The benefits I see are:
> >
> > *  Improved C++ readability (examples below).
> > *  Consistency with other languages.  The range-loops are quite similar
> to
> > loops almost all other programming languages.  Given we're a project that
> > supports many languages this language consistency could be positive for
> our
> > community.
> > * Consistency within the same project.  Currently different authors have
> > different loops styles which hurts codebase readability.
> > *  Best available performance.  There are often multiple ways to write
> > loops in C++ with subtle differences in performance and memory usage
> > between loop methods.  Using range-loops ensures we get the best possible
> > perf using an intuitive loop pattern.
> > *  Slightly lower chance for bugs / OOB accesses when dealing with
> indexing
> > in an array for example.
> >
> > If we decide to enable this uniformly throughout the project we can
> enable
> > this policy with a simple clang-tidy configuration change.  There would
> be
> > no need for reviewers to have to manually provide feedback when someone
> > uses an older C++ loops style.
> >
> > -Kellen
> >
> > Reference PR:  https://github.com/apache/incubator-mxnet/pull/12356/
> > Previous clang-tidy discussion on the list:
> >
> >
> https://lists.apache.org/thread.html/b0ae5a9df5dfe0d9074cb2ebe432264db4fa2175b89fa43a5f6e36be@%3Cdev.mxnet.apache.org%3E
> >
> > -
> > Examples:
> > for (auto axis_iter = param.axis.begin() ; axis_iter!= param.axis.end();
> > ++axis_iter) {
> > CHECK_LT(*axis_iter, static_cast(ishape.ndim()));
> > stride_[reverse_index] = ishape[*axis_iter];
> > ...
> > -->
> > for (int axis : param.axis) {
> > CHECK_LT(axis, static_cast(ishape.ndim()));
> > stride_[reverse_index] = ishape[axis];
> > ...
> > --
> > for (size_t i = 0; i < in_array.size(); i++) {
> > auto  = in_array[i];
> > pre_temp_buf_.emplace_back(nd.shape(), nd.ctx(), true, nd.dtype());
> > }
> > -->
> > for (auto & nd : in_array) {
> > pre_temp_buf_.emplace_back(nd.shape(), nd.ctx(), true, nd.dtype());
> > }
> >
>


Re: Time out for Travis CI

2018-09-28 Thread kellen sunderland
Hey Zhennan, you're safe to ignore Travis failures for now.  They're just
informational.

The reason you sometimes see quick builds and sometimes see slow builds is
that we're making use of ccache in between builds.  If your PR is similar
to what's in master you should build very quickly, if not it's going to
take a while and likely time out.  If you see timeouts rebasing may speed
things up.  Unfortunately the timeouts are global and we're not able to
increase them.  I'm hoping that adding artifact caching will speed up
future builds to the point that test runs and builds can be executed in
under the global limit (which is ~50 minutes).

-Kellen


On Fri, Sep 28, 2018 at 4:05 PM Qin, Zhennan  wrote:

> Hi MXNet devs,
>
> I'm struggled with new Travis CI for a while, it always run time out for
> this PR:
> https://github.com/apache/incubator-mxnet/pull/12530
>
> Most of the time, Jenkins CI can pass, while Travis can't be finished
> within 50 minutes. For this PR, it shouldn't affect much on the build time
> or unit test time. Also, I saw other PR has same problem, eg.
>
>
> https://travis-ci.org/apache/incubator-mxnet/builds/433172088?utm_source=github_status_medium=notification
>
> https://travis-ci.org/apache/incubator-mxnet/builds/434404305?utm_source=github_status_medium=notification
>
> According to the time stamp from Travis, all passed PR are within small
> code change, and can complete `make -j2` within 25s. But for timeout case,
> 'make -j2' will need about 1600s. Does Travis do incremental build for each
> test? Shall we increase time limit for large PR? Can we add more time stamp
> for build and unites stage to help understand what's going on there?
>
> Thanks in advance,
> Zhennan
>


Re: Feedback request for new Java API

2018-09-28 Thread Carin Meier
Sorry bad paste on the gist - here is the good one
https://gist.github.com/gigasquid/01cd48f563db4739910592dd9ac9db20

On Fri, Sep 28, 2018 at 10:24 AM Carin Meier  wrote:

> +1 on option #2
>
> In the case of minimizing the the overhead for code maintenance, I wanted
> to suggest the option of investigating generating code from the Java
> Reflection for the Java APIs.  I did a quick gist from Clojure of what the
> generated classes look like from the current Scala Symbol.api for
> FullyConnected here
> https://gist.github.com/gigasquid/01cd48f563db4739910592
>
> I looks like that there is always a base Java class generated will all the
> arguments. If this is the case, then there is a possibility to generate a
> Java api based on this Java method automatically with just a conversion for
> the Scala option and it might be reusable for all the packages.
>
> Not sure if it will work for this use case, but thought I would bring it
> up in case it's helpful.
>
> - Carin
>
> On Fri, Sep 28, 2018 at 7:05 AM Davydenko, Denis 
> wrote:
>
>> +1 on option #2. Having clear Java interface for NDArray, from my
>> perspective, would be a better experience for Java users as it won't
>> require them to deal with Scala code in any capacity. Overhead of extra
>> code for additional macros is justified, in my mind, as it will be
>> introduced with option #1 either way, just in a different place.
>>
>> --
>> Thanks,
>> Denis
>>
>> On 9/27/18, 6:14 PM, "YiZhi Liu"  wrote:
>>
>> I vote for "2.) Leave the existing macro in place and add another
>> which generates a Java friendly version"
>>
>> @Qing @Andrew, could you give some examples, so that people can better
>> understand how it provides "best possible experience" to Java users.
>>
>> I have no strong preference between having JavaShape & JavaContext or
>> not.
>> On Thu, Sep 27, 2018 at 5:56 PM Andrew Ayres <
>> andrew.f.ay...@gmail.com> wrote:
>> >
>> > That's not really the conversation I'm wanting to have. I want a
>> discussion
>> > about the macros with respect to NDArray so that we can get
>> agreement on
>> > our path forward with respect to implementing the NDArray wrapper.
>> >
>> > The design that was put forth and agreed to was for a a Java
>> wrapper around
>> > the Scala API. Adding a bunch of Java friendly methods inside the
>> Scala
>> > code would create a mess for users. Maintenance would be
>> essentially the
>> > same for both because either way you're going to be updating Java
>> methods
>> > when you make Scala changes.
>> >
>> > Let's please stick with the issue in the original email.
>> >
>> > Thanks,
>> > Andrew
>> >
>> > On Thu, Sep 27, 2018 at 5:22 PM Qing Lan 
>> wrote:
>> >
>> > > I would like to loop this back a layer. Current, there is a
>> discussion in
>> > > the MXNet Scala community on the ways to implement the Java APIs.
>> Currently
>> > > there are two thoughts:
>> > >
>> > > 1. Make Scala Java Friendly (Create Java compatible methods in
>> the Scala
>> > > Class. such as NDArray with Java compatible constructor)
>> > > 2. Make Java friendly wrappers in Scala (Andrew's explanation
>> below)
>> > >
>> > > The first approach require minimum input from our side to
>> implement
>> > > however bring user a bunch of useless api they may not want to
>> use. It also
>> > > makes Scala package heavier. The good thing is these two packages
>> require
>> > > minimum maintenance cost. As a tradeoff, if any time in the
>> future we want
>> > > to make Java big (make Java as the primary language supported by
>> MXNet),
>> > > then the migration from Scala to Java will be harmful. Spark
>> consider this
>> > > carefully and decide not to change much on their Scala code base
>> to make it
>> > > more Java.
>> > >
>> > > The second approach will make unique NDArray, Shape, Context and
>> more. The
>> > > good thing about this is we can always holds a version control on
>> Java.
>> > > Some breaking changes on Scala may not influence much on Java. It
>> did the
>> > > best way to decouple the module and good for us to build unique
>> pipeline
>> > > for Java. The bad thing with this design is the maintenance cost
>> as we need
>> > > to keep two code bases, but it also make Java side easy to change
>> to make
>> > > it better compatible with users.
>> > >
>> > > Thanks,
>> > > Qing
>> > >
>> > > On 9/27/18, 3:25 PM, "Andrew Ayres" 
>> wrote:
>> > >
>> > > Hi,
>> > >
>> > > Currently, we're working to implement a new Java API and
>> would like
>> > > some
>> > > feedback from the community on an implementation detail. In
>> short, the
>> > > new
>> > > Java API will use the existing Scala API (in a manner similar
>> to how
>> > > the
>> > > current Clojure API works). This basically 

Re: Feedback request for new Java API

2018-09-28 Thread Carin Meier
+1 on option #2

In the case of minimizing the the overhead for code maintenance, I wanted
to suggest the option of investigating generating code from the Java
Reflection for the Java APIs.  I did a quick gist from Clojure of what the
generated classes look like from the current Scala Symbol.api for
FullyConnected here https://gist.github.com/gigasquid/01cd48f563db4739910592

I looks like that there is always a base Java class generated will all the
arguments. If this is the case, then there is a possibility to generate a
Java api based on this Java method automatically with just a conversion for
the Scala option and it might be reusable for all the packages.

Not sure if it will work for this use case, but thought I would bring it up
in case it's helpful.

- Carin

On Fri, Sep 28, 2018 at 7:05 AM Davydenko, Denis 
wrote:

> +1 on option #2. Having clear Java interface for NDArray, from my
> perspective, would be a better experience for Java users as it won't
> require them to deal with Scala code in any capacity. Overhead of extra
> code for additional macros is justified, in my mind, as it will be
> introduced with option #1 either way, just in a different place.
>
> --
> Thanks,
> Denis
>
> On 9/27/18, 6:14 PM, "YiZhi Liu"  wrote:
>
> I vote for "2.) Leave the existing macro in place and add another
> which generates a Java friendly version"
>
> @Qing @Andrew, could you give some examples, so that people can better
> understand how it provides "best possible experience" to Java users.
>
> I have no strong preference between having JavaShape & JavaContext or
> not.
> On Thu, Sep 27, 2018 at 5:56 PM Andrew Ayres 
> wrote:
> >
> > That's not really the conversation I'm wanting to have. I want a
> discussion
> > about the macros with respect to NDArray so that we can get
> agreement on
> > our path forward with respect to implementing the NDArray wrapper.
> >
> > The design that was put forth and agreed to was for a a Java wrapper
> around
> > the Scala API. Adding a bunch of Java friendly methods inside the
> Scala
> > code would create a mess for users. Maintenance would be essentially
> the
> > same for both because either way you're going to be updating Java
> methods
> > when you make Scala changes.
> >
> > Let's please stick with the issue in the original email.
> >
> > Thanks,
> > Andrew
> >
> > On Thu, Sep 27, 2018 at 5:22 PM Qing Lan 
> wrote:
> >
> > > I would like to loop this back a layer. Current, there is a
> discussion in
> > > the MXNet Scala community on the ways to implement the Java APIs.
> Currently
> > > there are two thoughts:
> > >
> > > 1. Make Scala Java Friendly (Create Java compatible methods in the
> Scala
> > > Class. such as NDArray with Java compatible constructor)
> > > 2. Make Java friendly wrappers in Scala (Andrew's explanation
> below)
> > >
> > > The first approach require minimum input from our side to implement
> > > however bring user a bunch of useless api they may not want to
> use. It also
> > > makes Scala package heavier. The good thing is these two packages
> require
> > > minimum maintenance cost. As a tradeoff, if any time in the future
> we want
> > > to make Java big (make Java as the primary language supported by
> MXNet),
> > > then the migration from Scala to Java will be harmful. Spark
> consider this
> > > carefully and decide not to change much on their Scala code base
> to make it
> > > more Java.
> > >
> > > The second approach will make unique NDArray, Shape, Context and
> more. The
> > > good thing about this is we can always holds a version control on
> Java.
> > > Some breaking changes on Scala may not influence much on Java. It
> did the
> > > best way to decouple the module and good for us to build unique
> pipeline
> > > for Java. The bad thing with this design is the maintenance cost
> as we need
> > > to keep two code bases, but it also make Java side easy to change
> to make
> > > it better compatible with users.
> > >
> > > Thanks,
> > > Qing
> > >
> > > On 9/27/18, 3:25 PM, "Andrew Ayres" 
> wrote:
> > >
> > > Hi,
> > >
> > > Currently, we're working to implement a new Java API and would
> like
> > > some
> > > feedback from the community on an implementation detail. In
> short, the
> > > new
> > > Java API will use the existing Scala API (in a manner similar
> to how
> > > the
> > > current Clojure API works). This basically means that we're
> making Java
> > > friendly wrappers to call the existing Scala API.
> > >
> > > The feedback we're looking for is on the implementation of
> NDArray.
> > > Scala's
> > > NDArray has a significant amount of code which is generated
> via macros
> > > and
> > > we've got two viable paths 

Time out for Travis CI

2018-09-28 Thread Qin, Zhennan
Hi MXNet devs,

I'm struggled with new Travis CI for a while, it always run time out for this 
PR:
https://github.com/apache/incubator-mxnet/pull/12530

Most of the time, Jenkins CI can pass, while Travis can't be finished within 50 
minutes. For this PR, it shouldn't affect much on the build time or unit test 
time. Also, I saw other PR has same problem, eg.

https://travis-ci.org/apache/incubator-mxnet/builds/433172088?utm_source=github_status_medium=notification
https://travis-ci.org/apache/incubator-mxnet/builds/434404305?utm_source=github_status_medium=notification

According to the time stamp from Travis, all passed PR are within small code 
change, and can complete `make -j2` within 25s. But for timeout case, 'make 
-j2' will need about 1600s. Does Travis do incremental build for each test? 
Shall we increase time limit for large PR? Can we add more time stamp for build 
and unites stage to help understand what's going on there?

Thanks in advance,
Zhennan


Re: [DISCUSS] Use modernized C++11 range loops uniformly throughout the project

2018-09-28 Thread Chris Olivier
-1

Range loops aren’t always the most performant way. In addition, sometimes
you want the index. Or maybe you want to iterate backwards, or not start
from the first, etc. Maybe you want the iterator because you remove it from
the list at the bottom of the loop Seems like a rule for the sake of
having a rule.

On Fri, Sep 28, 2018 at 2:12 AM kellen sunderland <
kellen.sunderl...@gmail.com> wrote:

> Hello MXNet devs,
>
> I'd like to discuss uniformly adopting C++11 range loops in the MXNet
> project.  The benefits I see are:
>
> *  Improved C++ readability (examples below).
> *  Consistency with other languages.  The range-loops are quite similar to
> loops almost all other programming languages.  Given we're a project that
> supports many languages this language consistency could be positive for our
> community.
> * Consistency within the same project.  Currently different authors have
> different loops styles which hurts codebase readability.
> *  Best available performance.  There are often multiple ways to write
> loops in C++ with subtle differences in performance and memory usage
> between loop methods.  Using range-loops ensures we get the best possible
> perf using an intuitive loop pattern.
> *  Slightly lower chance for bugs / OOB accesses when dealing with indexing
> in an array for example.
>
> If we decide to enable this uniformly throughout the project we can enable
> this policy with a simple clang-tidy configuration change.  There would be
> no need for reviewers to have to manually provide feedback when someone
> uses an older C++ loops style.
>
> -Kellen
>
> Reference PR:  https://github.com/apache/incubator-mxnet/pull/12356/
> Previous clang-tidy discussion on the list:
>
> https://lists.apache.org/thread.html/b0ae5a9df5dfe0d9074cb2ebe432264db4fa2175b89fa43a5f6e36be@%3Cdev.mxnet.apache.org%3E
>
> -
> Examples:
> for (auto axis_iter = param.axis.begin() ; axis_iter!= param.axis.end();
> ++axis_iter) {
> CHECK_LT(*axis_iter, static_cast(ishape.ndim()));
> stride_[reverse_index] = ishape[*axis_iter];
> ...
> -->
> for (int axis : param.axis) {
> CHECK_LT(axis, static_cast(ishape.ndim()));
> stride_[reverse_index] = ishape[axis];
> ...
> --
> for (size_t i = 0; i < in_array.size(); i++) {
> auto  = in_array[i];
> pre_temp_buf_.emplace_back(nd.shape(), nd.ctx(), true, nd.dtype());
> }
> -->
> for (auto & nd : in_array) {
> pre_temp_buf_.emplace_back(nd.shape(), nd.ctx(), true, nd.dtype());
> }
>


Re: Feedback request for new Java API

2018-09-28 Thread Davydenko, Denis
+1 on option #2. Having clear Java interface for NDArray, from my perspective, 
would be a better experience for Java users as it won't require them to deal 
with Scala code in any capacity. Overhead of extra code for additional macros 
is justified, in my mind, as it will be introduced with option #1 either way, 
just in a different place.

-- 
Thanks,
Denis

On 9/27/18, 6:14 PM, "YiZhi Liu"  wrote:

I vote for "2.) Leave the existing macro in place and add another
which generates a Java friendly version"

@Qing @Andrew, could you give some examples, so that people can better
understand how it provides "best possible experience" to Java users.

I have no strong preference between having JavaShape & JavaContext or not.
On Thu, Sep 27, 2018 at 5:56 PM Andrew Ayres  
wrote:
>
> That's not really the conversation I'm wanting to have. I want a 
discussion
> about the macros with respect to NDArray so that we can get agreement on
> our path forward with respect to implementing the NDArray wrapper.
>
> The design that was put forth and agreed to was for a a Java wrapper 
around
> the Scala API. Adding a bunch of Java friendly methods inside the Scala
> code would create a mess for users. Maintenance would be essentially the
> same for both because either way you're going to be updating Java methods
> when you make Scala changes.
>
> Let's please stick with the issue in the original email.
>
> Thanks,
> Andrew
>
> On Thu, Sep 27, 2018 at 5:22 PM Qing Lan  wrote:
>
> > I would like to loop this back a layer. Current, there is a discussion 
in
> > the MXNet Scala community on the ways to implement the Java APIs. 
Currently
> > there are two thoughts:
> >
> > 1. Make Scala Java Friendly (Create Java compatible methods in the Scala
> > Class. such as NDArray with Java compatible constructor)
> > 2. Make Java friendly wrappers in Scala (Andrew's explanation below)
> >
> > The first approach require minimum input from our side to implement
> > however bring user a bunch of useless api they may not want to use. It 
also
> > makes Scala package heavier. The good thing is these two packages 
require
> > minimum maintenance cost. As a tradeoff, if any time in the future we 
want
> > to make Java big (make Java as the primary language supported by MXNet),
> > then the migration from Scala to Java will be harmful. Spark consider 
this
> > carefully and decide not to change much on their Scala code base to 
make it
> > more Java.
> >
> > The second approach will make unique NDArray, Shape, Context and more. 
The
> > good thing about this is we can always holds a version control on Java.
> > Some breaking changes on Scala may not influence much on Java. It did 
the
> > best way to decouple the module and good for us to build unique pipeline
> > for Java. The bad thing with this design is the maintenance cost as we 
need
> > to keep two code bases, but it also make Java side easy to change to 
make
> > it better compatible with users.
> >
> > Thanks,
> > Qing
> >
> > On 9/27/18, 3:25 PM, "Andrew Ayres"  wrote:
> >
> > Hi,
> >
> > Currently, we're working to implement a new Java API and would like
> > some
> > feedback from the community on an implementation detail. In short, 
the
> > new
> > Java API will use the existing Scala API (in a manner similar to how
> > the
> > current Clojure API works). This basically means that we're making 
Java
> > friendly wrappers to call the existing Scala API.
> >
> > The feedback we're looking for is on the implementation of NDArray.
> > Scala's
> > NDArray has a significant amount of code which is generated via 
macros
> > and
> > we've got two viable paths to move forward:
> >
> > 1.) Change the macro to generate Java friendly methods  - To do this
> > we'll
> > modify the macro so that the generated methods won't have
> > default/optional
> > arguments. There may also have to be some changes to parameter 
types to
> > make them Java friendly. The big advantage here is that ongoing
> > maintenance
> > will easier. The disadvantages are that we'll be changing the 
existing
> > Scala NDArray Infer API (it's marked experimental) and Scala users 
will
> > lose the ability to use the default and optional arguments.
> >
> > 2.) Leave the existing macro in place and add another which 
generates a
> > Java friendly version - The biggest issue here is that we'll be
> > doubling
> > the number of macros that we've got to maintain. It'll become even 
more
> > overhead once we start expanding the Java API with more classes that
> > use
> > generated code like 

Re: Maturity Model and Graduation

2018-09-28 Thread Isabel Drost-Fromm




On 28/09/18 11:27, kellen sunderland wrote:

I'd love to see some more
sustained contribution from other open source communities to help us out in
this area


That's not exactly the model I have seen to work. What I have seen works 
really well at other projects is pulling users in as committers in a 
scratch your own itch kind of way. For that to work you need to make it 
clear what contributions you need, you need to make time to coach people 
to become developers, you need to make your users accustomed to the way 
you work as early as possible. It also helps to ask users for 
contributions and offer mentoring help from your side along the way.


I know that this is tedious work that needs a lot of motivating people, 
mentoring people, explaining to people, however it makes for a 
sustainable community of people that do the work out of self interest.


http://blog.isabel-drost.de/posts/open-development-and-inner-source-for-fun-and-profit.html


Isabel


Re: Maturity Model and Graduation

2018-09-28 Thread kellen sunderland
Hey Jim, welcome to the community.

To the best of my knowledge we have not yet discussed/run a Maturity
Model.  My gut feel is that MXNet would come away a fairly bi-model
result.  My view of the project is that it's getting the Apache Way right
in terms of Code, Releases, and Quality.  I think the project is doing
decently well with Licensing (although it's maybe a little more complex
than other projects given the many required code dependencies).  From my
observations I would say the community often struggles with consensus
building.  My opinion is that the project is doing a lot right with
community, especially in question answer, but is lacking in other areas
such as community expansion and ownership.

Independence is an area where the project is clearly behind, with almost
all active committers coming from Amazon.  We've had some great
contributions from Intel and NVIDIA, but so far have not been able to add
the members from those organizations to the IPMC for various reasons.
MXNet seems to not have had much support from other open-source communities
(with a notable exception of Carin who did a great job with Clojure and was
made a committer/ipmc member).  My impression is that the community would
love to improve in this area, so the lack of progress is not due to any
lack of desire on the community's part.  I'd love to see some more
sustained contribution from other open source communities to help us out in
this area (and am hopeful we can reach out to the Julia community as an
example).

-Kellen

On Wed, Sep 26, 2018 at 11:24 PM Jim Jagielski  wrote:

> As a newly "minted" mentor, I'm getting my feet wet on determining where
> the project is and where it needs to go in order to be ready for
> graduation...
>
> Has the project run the Maturity Model against itself? How do we stack up?
> What areas of improvement could we benefit from (this might be independent
> of what the MatModel sez, btw. If you have ideas on where we could be
> working and collaborating better, please bring them up!)?
>
> Cheers!


[DISCUSS] Use modernized C++11 range loops uniformly throughout the project

2018-09-28 Thread kellen sunderland
Hello MXNet devs,

I'd like to discuss uniformly adopting C++11 range loops in the MXNet
project.  The benefits I see are:

*  Improved C++ readability (examples below).
*  Consistency with other languages.  The range-loops are quite similar to
loops almost all other programming languages.  Given we're a project that
supports many languages this language consistency could be positive for our
community.
* Consistency within the same project.  Currently different authors have
different loops styles which hurts codebase readability.
*  Best available performance.  There are often multiple ways to write
loops in C++ with subtle differences in performance and memory usage
between loop methods.  Using range-loops ensures we get the best possible
perf using an intuitive loop pattern.
*  Slightly lower chance for bugs / OOB accesses when dealing with indexing
in an array for example.

If we decide to enable this uniformly throughout the project we can enable
this policy with a simple clang-tidy configuration change.  There would be
no need for reviewers to have to manually provide feedback when someone
uses an older C++ loops style.

-Kellen

Reference PR:  https://github.com/apache/incubator-mxnet/pull/12356/
Previous clang-tidy discussion on the list:
https://lists.apache.org/thread.html/b0ae5a9df5dfe0d9074cb2ebe432264db4fa2175b89fa43a5f6e36be@%3Cdev.mxnet.apache.org%3E

-
Examples:
for (auto axis_iter = param.axis.begin() ; axis_iter!= param.axis.end();
++axis_iter) {
CHECK_LT(*axis_iter, static_cast(ishape.ndim()));
stride_[reverse_index] = ishape[*axis_iter];
...
-->
for (int axis : param.axis) {
CHECK_LT(axis, static_cast(ishape.ndim()));
stride_[reverse_index] = ishape[axis];
...
--
for (size_t i = 0; i < in_array.size(); i++) {
auto  = in_array[i];
pre_temp_buf_.emplace_back(nd.shape(), nd.ctx(), true, nd.dtype());
}
-->
for (auto & nd : in_array) {
pre_temp_buf_.emplace_back(nd.shape(), nd.ctx(), true, nd.dtype());
}