LibtorchJS
Simple Node.js N-API module that wraps few pieces of pytorch C++ library (libtorch) to allow loading and running pytorch-trained models in Node.js.
Node.js non-blocking model is great for scheduling heavy computational tasks such as NN inference. This wrapper provides async methods that do not block event loop, so it's possible to use it in a web-service.
This module was made just for fun, to check if it's easily possible to create image style transfer app with Node.js.
Installation
With npm: npm i --save libtorchjs
Module binary is pre-built and published using node-pre-gyp
so it's not required to download libtorch/pytorch
or install build tools.
Currently, Linux & Windows builds are available.
Usage Example
const torch = ; const input = torch;torch;
API
The overall goal is to mirror pytorch API where possible. Currently just a few methods are exposed.
Tensor
ones(Array shape)
Create tensor of specified shape filled with 1's (autograd is disabled) and return Tensor object.
randn(Array shape)
Create tensor of specified shape (autograd is disabled) filled with random values in (0..1) range.
ScriptModule
load(String filename, callback)
Load traced model async from file and return resulting ScripModule.
forward(Tensor tensor, callback)
Forward tensor async and return resulting Tensor.
Acknowledgments
Following resources were extremely useful for creating this module:
- Inspiration: https://www.udacity.com/facebook-pytorch-scholarship
- Libtorch tutorial: https://pytorch.org/tutorials/advanced/cpp_export.html
- Blog post about similar thing: http://blog.christianperone.com/2018/10/pytorch-1-0-tracing-jit-and-libtorch-c-api-to-integrate-pytorch-into-nodejs
- N-API examples: https://github.com/nodejs/node-addon-examples
- Pre-built module distribution: https://github.com/mapbox/node-pre-gyp
Possible Future
- Expose more of libtorch
- Promisify libtorchjs API
- GPU support
Windows✔️, Mac support- Use travis/appveyor for automatic builds