Package Exports
- @numrs/node
- @numrs/node/dist/ts/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@numrs/node) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
@numrs/node
NumRs Node is the native Node.js binding for the NumRs numerical engine. It provides high-performance, hardware-accelerated (Metal/Accelerate on macOS, MKL/OpenBLAS elsewhere) tensor operations and deep learning capabilities.
🚀 Features
- Hardware Acceleration: Uses Metal on Apple Silicon for GPU-like performance.
- Multithreading: Native parallelization via Rayon.
- Zero-Copy: Efficient memory sharing between Node.js and Rust.
- Deep Learning: Full Autograd engine and Neural Network modules.
- Type Safe: Full TypeScript support.
📦 Installation
npm install @numrs/nodeNote: Requires Rust to be installed on your system to compile the native extension.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
🎯 Usage
Quick Start: Tensors & Autograd
import { Tensor, nn } from '@numrs/node';
// Create tensors with autograd enabled
const x = Tensor.randn([2, 5], true);
const w = Tensor.randn([5, 10], true);
// Fast matrix multiplication
const y = x.matmul(w);
// Backward pass
y.backward();
console.log("Gradient:", x.grad());Deep Learning Model
import { Sequential, nn } from '@numrs/node';
const model = new Sequential();
model.add_linear(new nn.Linear(10, 32));
model.add_relu(new nn.ReLU());
model.add_linear(new nn.Linear(32, 2));
// Forward pass
const input = Tensor.randn([100, 10]);
const output = model.forward(input);Training Loop
Use the TrainerBuilder for a highly optimized, native training loop.
import { TrainerBuilder, Dataset } from '@numrs/node';
// 1. Prepare Data
const input = Tensor.randn([100, 10]);
const target = Tensor.randn([100, 2]);
const dataset = new Dataset(input, target);
// 2. Train
const trainer = new TrainerBuilder(model, dataset)
.batch_size(16)
.learning_rate(0.01)
.optimizer("adam") // Supports: adam, sgd, rmsprop, etc.
.loss("mse") // Supports: mse, cross_entropy
.max_epochs(50)
.build();
const history = trainer.fit();
console.log("Final Loss:", history.final_loss);🧠 Optimizers & Loss Functions
| Category | Supported Algorithms |
|---|---|
| Optimizers | "sgd", "adam", "adamw", "nadam", "radam", "rmsprop", "adagrad", "adadelta", "lamb", "adabound", "lbfgs", "rprop" |
| Loss Functions | "mse" (Regression), "cross_entropy" (Classification) |
🔍 Advanced Features
Zero-Copy Float32Array Ops
For raw numerical computing, you can operate directly on Float32Array buffers without Tensor overhead.
const numrs = require('@numrs/node');
const a = new Float32Array([1, 2, 3, 4]);
const b = new Float32Array([5, 6, 7, 8]);
// Element-wise addition
const c = numrs.add(a, [2, 2], b, [2, 2]); ONNX Export
Export your trained models to ONNX for verifying graphs or interoperability.
model.save_onnx(dummy_input, "model.onnx");📚 Documentation
For full API documentation, please refer to the main NumRs Repository.
License
AGPL-3.0-only