A node addon for [Dannjs](https://dannjs.org).
npm install cunoA node addon for Dannjs.
Provides cuda bindings, kernel maps and device memory managment for Dannjs computations.
The goal is to speed up Dann.prototype.backpropagate by implementing a batch system (Instead of training case by case, we would train a whole dataset batch at once). The current alias Dann.prototype.train would also take in a different set of arguments, for batch/gpu training
A Cuda kernel map would compute all model changes throughout the batch. This is to reduce Memcpy's in the device's memory, thus help reduce training times along with the cuda parallelisation.
``
git clone https://github.com/matiasvlevi/Cuno.git
cd Cuno
git checkout dev
npm run init
`
The build configuration may not be supported on your system, please submit binding.gyp changes to allow for a broader range of systems
Build CUDA source with node-gyp (nvcc)
``
npm run build
Build the Dannjs Source
``
cd Dann
npm run build:fix
(optional) run Dannjs unit tests
``
cd Dann
npm run test
Run Javascript tests
benchmark will create a benchmark.csv file containing performance results.
``
npm run benchmark
npm run test
Here is a logarithmic graph comparing matrix dot products with the Cuno Addon and with native JS
---
These are the current stable bindings, not the final target bindings
`js
const Cuno = require('cuno');
const a = [
[1, 3, 1],
[2, 4, 6],
[4, 1, 2],
[3, 2, 4]
];
const b = [
[3, 2, 1, 3],
[5, 1, 1, 4],
[4, 9, 1, 2]
];
let c = Cuno.dot(a, b);
console.log(c);
`
Allocate & Initialize a neural network
`cpp
const int LENGTH = 5
const int ARCH[LENGTH] = {
32 32 3,
32 * 32,
24 * 24,
16 * 16,
10
};
// Allocate Model
Cuno::DeviceDann
// Memory transfer
nn->toDevice(
// weights, biases, layers, errors, gradients //
);
// Feed Forward
double inputs[ARCH[0]] = {};
Cuno::Wrappers::ffw(nn, inputs);
``