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.
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.
const torch = require('libtorchjs');
const input = torch.randn([1, 3, 224, 224]);
torch.load('model.pt', function(err, model) {
model.forward(input, function(err, result) {
const output = result.toUint8Array();
console.log(output);
});
});
The overall goal is to mirror pytorch API where possible. Currently just a few methods are exposed.
Create tensor of specified shape filled with 1's (autograd is disabled) and return Tensor object.
Create tensor of specified shape (autograd is disabled) filled with random values in (0..1) range.
Load traced model async from file and return resulting ScripModule.
Forward tensor async and return resulting Tensor.
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
- Expose more of libtorch
- Promisify libtorchjs API
- GPU support
Windows✔️, Mac support- Use travis/appveyor for automatic builds