A 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
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
const int LENGTH = 5
const int ARCH[LENGTH] = {
32 * 32 * 3,
32 * 32,
24 * 24,
16 * 16,
10
};
// Allocate Model
Cuno::DeviceDann<double> *nn = new Cuno::DeviceDann(ARCH, LENGTH);
// Memory transfer
nn->toDevice(
// * weights, biases, layers, errors, gradients * //
);
// Feed Forward
double inputs[ARCH[0]] = {};
Cuno::Wrappers::ffw(nn, inputs);