-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WIP: README suggestions #2
WIP: README suggestions #2
Conversation
contrib/clojure-package/README.md
Outdated
* Checkout the MXNet project from a release tag using the Scala jars with native deps. This is also a pretty easy way to get started. | ||
* Build from the MXNet project master. This option can be used to build the whole project yourself. | ||
1. Install [prebuilt Clojure jars](https://search.maven.org/search?q=clojure%20mxnet) with the native dependencies baked in. This the quickest way to get going. | ||
2. Install the Clojure package from source, but use prebuilt jars for the native dependencies. Choose this option if you want pre-release features of the Clojure package but don't want to build (compile native dependencies yourself. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
2. Install the Clojure package from source, but use prebuilt jars for the native dependencies. Choose this option if you want pre-release features of the Clojure package but don't want to build (compile native dependencies yourself. | |
2. Install the Clojure package from source, but use prebuilt jars for the native dependencies. Choose this option if you want pre-release features of the Clojure package but don't want to build (compile) native dependencies yourself. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's great. I think there will be some merge conflicts with the current version that puts anchors in.
First - thanks so much for your thoughtful feedback. I really like the direction. I've provided answers to your questions in italics below: GeneralLess jargon would look less scary to beginners (like JNI, interop, refactoring, release tag, native deps etc.). "native dependencies" is a bit abstract, maybe associate it with a concrete, tangible artifact like "MXNet core", if that's the correct way of looking at it? IntroductionWhat are the "needed tools"? Which APIs are exposed in Clojure? Aren't the real low-level ones only available in C++, and the rest either "intermediate" or "high" level? GANs and natural language support are not in the same category as the aspects (tools, building blocks) mentioned before them -- they're rather constructs one can build out of the available blocks. I'd find it more compelling to be more concrete and mention that the Module API is supported and the Gluon API is work in progress (with links to both so users can check). Then advanced applications and network structures can be mentioned as use cases. What does "interop" mean? I totally don't get the part with the JNI bindings. Why are we suddenly talking about refactoring? Is this part important? I think this part is better suited for a technical intro for developers. Agree. It is more of holdover from the rationale of going the development direction the package did Current State and PlansThe text doesn't say anything about the current state or about about plans 😄 . Why not write that the best way to get involved is to install the package, run the examples, play around etc., and get back to the devs in case something isn't working as expected. And then would follow a description of how to best get involved (a brief explanation of the Slack channel, the mailing list, and the GH issue tracker). Probably it's a good idea to have a separate section "Getting Involved" for this purpose. Getting StartedC++ rather than C? OS specificity: does it matter only for the core library or also for the language bindings? Do we have to be that specific here? Three ways to get started: I think I understood the second item after reading it 3 times. Is a release tag a Git release tag? What is in source form, what comes as a jar? I think the important cases to cover here are Everything prebuilt Yes. I tried to call that out in the latest version of the README. People can probably interpolate additional options. How about CUDA instructions on Ubuntu? We only have them for Arch. Is it really necessary to match the version of the Scala package with the Git tag or is it fine to just go with Git master? |
👍 That sounds good! Perhaps just write natural language processing, which may be slightly narrower than you like, but a technical term people will recognize.
So is it correct that the native MXNet code sits in the core package, and that both the Scala and Clojure packages don't deal with native code at all? And the only reason they get "tainted" is by building a jar that contains the native core? Or does the Scala package produce some native binaries as well? Sorry if I'm digging into technicalities -- that's not really my intent, I'd just like to understand the overall construct correctly.
Ah okay, that makes sense. I thought the symbolic stuff was part of the Module API, but that's not the case.
Ok. In my mind, this goes onto the same "technical details" pile as the JNI bindings. On a high level, Clojure talks to Scala talks to C++ (or native code), which is all that matters in the beginning (I think).
Hm, if it's like this, how much flexibility does one really have with Git revisions on the various levels? To remove a bit of FUD on the user side, I think it would be important to give some guidelines as to which combinations of versions/revisions are "safe" to use. This is similarly important for the third option where everything is built from source. Is there anything I can do to make sure that I build a working combination? Maybe there's a CI log that will show the last working combination?
Alright, I guess it makes sense not to duplicate that information. Do we have that link somewhere, together with the names of the relevant sections? I vaguely remember something, but I'm not sure. I'll try to get to the rest of the README and the merge conflicts asap. |
I'm fine with that 👍
The Scala package uses the JNI bindings and Macros to create the API. For example this macro would be used to create an NDArray function that would be eventually be wrapped by the clojure package The Scala build process to actually build the jars is system specific and packages it up. The Clojure package just requires one of these jars as its dependency in project.clj
The Module API does use the symbolic api. It just builds on it.
Sure :)
If you use a 1.3.0 jar on master it will break because there was an underlying operator change. This may not always be the case. We could say, if you run into errors then there may have been a change in the core that is not compatible and try to check out the tag.... The Clojure package always autobuilds the interface based on the Scala jars it consumes. It is possible that there is a Clojure change that is not compatible. For example, in master, someone added a Clojure function that depended on a new operator and the published jars did not have that yet.
Running
I'm not sure I know what you are referring to .... Thanks again for helping collaborate with me on making this better! |
Done some more work on the 3rd of the options. I also tried to incorporate some of the discussion above. There are still some rough edges, though. |
Oh, and I haven't actually tested the instructions yet 😉 |
Great. Thanks again for all your work! 💯 We can make any refinements in the main PR. |
…e#10792) * Kvstore strkey (#2) * support string type for kvstore key in cpp-package * make lines short * fix build * add kvstore testcase * no rand() use * fix cpplint sanity check * support string type for kvstore key in cpp-package * make lines short * fix build * print error log * Update test_kvstore.cpp * update * add gpu unittest * check gpu count * fix sanity check
Here are some suggestions, WIP, currently reached the option 3 header.
Remarks/questions:
General
Introduction
Current State and Plans
Getting Started
C++ rather than C?
OS specificity: does it matter only for the core library or also for the language bindings? Do we have to be that specific here?
Three ways to get started: I think I understood the second item after reading it 3 times. Is a release tag a Git release tag? What is in source form, what comes as a jar?
I think the important cases to cover here are
And all cases should be annotated with the expected difficulty (as they already are).
People can probably interpolate additional options.
How about CUDA instructions on Ubuntu? We only have them for Arch.
Is it really necessary to match the version of the Scala package with the Git tag or is it fine to just go with Git master?