Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/matiasvlevi/cuno
Provides cuda bindings, kernel maps and device memory managment for Dannjs computations. [Experimental and not complete]
https://github.com/matiasvlevi/cuno
addon cuda dann dannjs machine-learning nodejs
Last synced: about 2 months ago
JSON representation
Provides cuda bindings, kernel maps and device memory managment for Dannjs computations. [Experimental and not complete]
- Host: GitHub
- URL: https://github.com/matiasvlevi/cuno
- Owner: matiasvlevi
- Created: 2022-10-17T06:01:38.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2023-05-12T05:14:51.000Z (over 1 year ago)
- Last Synced: 2023-05-12T06:23:18.988Z (over 1 year ago)
- Topics: addon, cuda, dann, dannjs, machine-learning, nodejs
- Language: Cuda
- Homepage:
- Size: 1.49 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Cuno | Dannjs Cuda Addon
A node addon for [Dannjs](https://dannjs.org).
Provides cuda bindings, kernel maps and device memory managment for [Dannjs](https://dannjs.org) 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.
### Install
```
git clone https://github.com/matiasvlevi/Cuno.gitcd Cuno
git checkout devnpm run init
```
### Build
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/Test
Run Javascript tests
`benchmark` will create a `benchmark.csv` file containing performance results.
```
npm run benchmark
npm run test
```
### Performance
Here is a logarithmic graph comparing matrix dot products with the Cuno Addon and with native JS
![Image](https://i.ibb.co/gPfKKHn/Cuno-Log-Graph.png)
---
# Current APIs
These are the current stable bindings, not the final target bindings
## Nodejs API
```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);
```## CPP API
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 *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);```