Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pfnet-research/node-menoh
NodeJS binding for Menoh DNN inference library
https://github.com/pfnet-research/node-menoh
chainer inference-library machine-learning mkl-dnn neural-network nodejs onnx
Last synced: about 2 months ago
JSON representation
NodeJS binding for Menoh DNN inference library
- Host: GitHub
- URL: https://github.com/pfnet-research/node-menoh
- Owner: pfnet-research
- License: mit
- Created: 2018-07-10T04:37:11.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-05-07T12:23:29.000Z (over 3 years ago)
- Last Synced: 2024-10-31T14:30:06.855Z (2 months ago)
- Topics: chainer, inference-library, machine-learning, mkl-dnn, neural-network, nodejs, onnx
- Language: JavaScript
- Homepage:
- Size: 6.3 MB
- Stars: 5
- Watchers: 12
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# menoh
NodeJS binding for Menoh DNN inference library.## Features
* Fast DNN inference on Intel CPU.
* Support standard [ONNX](http://onnx.ai/) format.
* Easy to use.## Requirements
* MKL-DNN library [v0.14](https://github.com/intel/mkl-dnn/tree/v0.14) or later.
* ProtocolBuffers (Tested with v3.5.1)
* [Menoh(C/C++) library](https://github.com/pfnet-research/menoh) v1.x (Tested with v1.1.1)
* NodeJS v6 or greater## Supported OS
* Mac
* Linux
* Windows## Installation
Add `menoh` npm module to your project dependencies (package.json):
```
npm install menoh -S
```### Installing dependencies
#### Mac & Linux
Simply follow the instruction described [here](https://github.com/pfnet-research/menoh/blob/v1.1.1/README.md).For linux, you may need to add `/usr/local/lib` to LD_LIBRARY_PATH depending on your linux distrubtion.
```sh
export LD_LIBRARY_PATH=/usr/local/lib
```Or, you could add `/usr/local/lib` to [system library path](http://howtolamp.com/articles/adding-shared-libraries-to-system-library-path/).
#### Windows
##### menoh import library and dll
You can download pre-build DLLs from [here](https://github.com/pfnet-research/menoh/releases/tag/v1.1.1).
The import library (menoh.lib) and its header files are bundled in this module and built during
its installation.
> Current version uses the import library built with *native* menoh v1.1.1.Copy menoh.dll found in the pre-build package to C:Windows\\System32\\.
##### MKL-DNN
Follow [this instruction](https://github.com/intel/mkl-dnn/blob/master/README.md) to install MKL-DNN
lbrary and its dependencies. You may optionally download prebuild pacakge from [here](https://github.com/pfnet-research/menoh/releases/tag/v1.1.1).> The mklml.dll (included in the pre-built package for the native menoh v1.1.1) depends on `msvcr120.dll`. If
> your system does not have it, install [Visual C++ 2013 Redistibutable Package](https://support.microsoft.com/en-us/help/3179560/update-for-visual-c-2013-and-visual-c-redistributable-package).## Run examples
Checkout the repository, cd into the root folder, then:
```
npm install
```### VGG16 examples
```
cd example
sh retrieve_vgg16_data.sh
```Then, run the VGG16 example.
```
node example_vgg16.js
```You should see something similar to following:
```
### Result for ../test/data/Light_sussex_hen.jpg
fc6 out: -29.68303871154785 -52.6440544128418 0.9215406179428101 21.43817710876465 -6.305706977844238 ...
Top 5 categories are:
[8] 0.8902806639671326 n01514859 hen
[86] 0.037541598081588745 n01807496 partridge
[7] 0.03157550096511841 n01514668 cock
[82] 0.017570357769727707 n01797886 ruffed grouse, partridge, Bonasa umbellus
[83] 0.002043411135673523 n01798484 prairie chicken, prairie grouse, prairie fowl
### Result for ../test/data/honda_nsx.jpg
fc6 out: 14.704771041870117 -10.323609352111816 -32.17032241821289 -9.661919593811035 -14.448777198791504 ...
Top 5 categories are:
[751] 0.6547003388404846 n04037443 racer, race car, racing car
[817] 0.28364330530166626 n04285008 sports car, sport car
[573] 0.02763519063591957 n03444034 go-kart
[511] 0.01738707721233368 n03100240 convertible
[814] 0.004731603432446718 n04273569 speedboat
```### MNIST examples
In the example folder...
```
$ node example_mnist.js
### Result for ../test/data/mnist/0.png
[0] 9792.962890625 Zero
### Result for ../test/data/mnist/1.png
[1] 4203.07470703125 One
### Result for ../test/data/mnist/2.png
[2] 7281.75341796875 Two
### Result for ../test/data/mnist/3.png
[3] 7360.65625 Three
### Result for ../test/data/mnist/4.png
[4] 3837.8447265625 Four
### Result for ../test/data/mnist/5.png
[5] 5259.931640625 Five
### Result for ../test/data/mnist/6.png
[6] 3743.64306640625 Six
### Result for ../test/data/mnist/7.png
[7] 4321.0859375 Seven
### Result for ../test/data/mnist/8.png
[8] 3331.339111328125 Eight
### Result for ../test/data/mnist/9.png
[9] 1424.4774169921875 Nine
```> Read the comments in the examples for more details.
## API
```js
const menoh = require('menoh');
```### Module methods
#### menoh.getNativeVersion() => {string}
Returns the version of underlying native menoh (core) library.#### menoh.create(onnx_file_path{string}, [cb]) => {Promise}
Returns promise if `cb` is not provided. The promise resolves to a new instance of ModelBuilder.### ModelBuilder methods
#### builder.addInput(input_var_name{string}, dims{array}) => {void}
Add an input profile for the given name.
> Data type is implicitly set to `float32`.#### builder.addOutput(output_var_name{string}) => {void}
Add an output profile for the given name.
> It currently takes no argument other than the name.
> Data type is implicitly set to `float32`.#### builder.buildModel(config{object}) => {Model}
Returns an executable model.
The config object can have two properties:
* backendName {string}: defaults to "mkldnn" or explicitly set it to "mkldnn" always.
* backendConfig {string}: a JSON string. defaults to "" or set to "" always.You may build more than one model from the same builder.
### Model methods
#### model.getProfile(var_name{string}) => {object}
Returns a profile information for the given name.
The returned object has following properties:
* dims {array}: Dimensions of the attached buffer. (e.g. [1, 3, 244, 244])
* buf {Buffer}: Reference to the buffer attached to the variable.
* dtype {string}: Data type.> Current revision supports only one data type, "float32".
#### model.run(cb) => {Promise}
Run inference. It returns promise if `cb` is not provided. The actual inference takes place
in a background worker thread. You may run a different models concurrently to take advantage of
available CPU cores.#### model.setInputData(input_var_name{string}, data{array})
> DEPREACATED. Use model.getProfile() instead.Sets input data for the give input name.
#### model.getOutput(output_var_name) => {object}
> DEPREACATED. Use model.getProfile() instead.Returns output object generated during `model.run()` for the given output name.
The output object has following properties:
* dims {array}: Output data dimensions. (e.g. [1, 3, 244, 244])
* data {array}: Output data (flat array).## Limitations
* You may not call `run()` on the *same model* more than once concurrently. The second run() will
fail with an error. Consider building another model for the concurrent operations.