Skip to main content

abovo logo


docs tests GitHub pypi OpenSSF Scorecard downloads

NN-ab-ovo (abovo) is a neural network engine written in C++ with Python bindings, designed to teach systems-level ML optimizations like threading, cache efficiency, hardware acceleration, and quantization.


Features

  • C++ backend with modular layers and training pipeline
  • Python API via pybind11 bindings (pip install abovo)
  • Optimizations: SIMD, OpenMP multithreading, cache blocking
  • Post-training quantization (PTQ) and quantization-aware training (QAT) (FP32 → INT8)
  • Profiling support (Valgrind, cache misses, instruction counts)

Installation

pip install abovo

Requires a C++17-compatible compiler and OpenMP support.

Example (XOR)

from abovo import Sequential, DenseLayer, Matrix, ActivationType, LossType

X = Matrix(4, 2)
X[0, 0] = 0; X[0, 1] = 0
X[1, 0] = 0; X[1, 1] = 1
X[2, 0] = 1; X[2, 1] = 0
X[3, 0] = 1; X[3, 1] = 1

y = Matrix(4, 1)
y[0, 0] = 0
y[1, 0] = 1
y[2, 0] = 1
y[3, 0] = 0

model = Sequential()
model.add(DenseLayer(2, 4, ActivationType.RELU))
model.add(DenseLayer(4, 1, ActivationType.SIGMOID))
model.train(X, y, epochs=100, batch_size=1, learning_rate=0.1, loss_type=LossType.MSE)

Build (C++ Only)

You can either build natively or in Docker. Note the provided Dockerfile runs valgrind, so adjust as needed to run the correct binary. Recommended on Apple Silicon for x86 builds.

Native Build (Mac/Linux):

make
./NN-ab-ovo

Docker (x86_64 emulation):

docker build -t nn-ab-ovo .
docker run --rm nn-ab-ovo

Make sure the MNIST dataset files (train-images.idx3-ubyte, train-labels.idx1-ubyte, etc.) are in the project root or mounted into the Docker container.

Datasets

  • XOR: Validates non-linear separability
  • MNIST: Handwritten digit classification

Optimizations

Optimization experiments are documented in the GitHub repository under optimizations.md, including:

  • Naive vs. blocked matrix multiplication
  • Compiler flag benchmarking
  • L1/L2 cache miss analysis (Valgrind)
  • OpenMP and SIMD speedups
  • Timing analysis with std::chrono

These experiments help evaluate system-level performance, guide improvements for training/inference, and validate optimizations available to the community.

Project Structure

The GitHub repository features the following project structure:

  • Matrix.hpp / Matrix.cpp: Core matrix operations and linear algebra utilities.
  • DenseLayer.hpp / DenseLayer.cpp: Fully connected layer with forward and backward pass.
  • Activation.hpp / Activation.cpp: Support for activation functions (e.g., ReLU, LeakyReLU, Sigmoid).
  • Loss.hpp: Interface for loss functions (e.g., MSE, CrossEntropy).
  • Sequential.hpp / Sequential.cpp: High-level container for layer sequencing and model training.
  • tests: Directory containing runnable code on specific datasets.

The engine is modular: activation functions, loss functions, and layers are easily swappable for flexibility and experimentation.

Documentation

Read the full docs at: https://nn-ab-ovo.readthedocs.io/.

Source Code

You can find the source code at: https://github.com/emirdur/abovo.

Future Work

  • Switch Design Pattern for Activation + Loss
  • Switch Matrix class to use size_t + Refactor
  • More comprehensive Softmax implementation
  • Continue with optimizations
  • Add support for convolutional layers
  • Implement GPU acceleration (Metal or CUDA)
  • LLVMs?

Disclaimer

NN-ab-ovo (abovo) is an independent open-source project and is not affiliated with or endorsed by any company or organization.

License

MIT License

Release files for abovo 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for abovo 0.1.4
File Size Uploaded
abovo-0.1.4.tar.gz 25.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for abovo 0.1.4
File Interpreter ABI Platform
abovo-0.1.4-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details

Total release size: 176.5 kB

Release files / abovo-0.1.4.tar.gz

Download URL abovo-0.1.4.tar.gz
Size 25.2 kB
Tags Source
SHA-256 checksum
How to use checksums
df763aad2c82b8cca5da69f151b1b2ddeb2b615d3f79b6bf646d798f8fb3ddf4
BLAKE2b-256 checksum
How to use checksums
501c1fdc0a6508e7103da71b275f59b20f1223bce41a623424c1c5a094fa6b73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / abovo-0.1.4-cp312-cp312-macosx_11_0_arm64.whl

Download URL abovo-0.1.4-cp312-cp312-macosx_11_0_arm64.whl
Size 151.2 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5ccad72bb30ac9bc97fd9c84f4998027f7df8817ef229394697f9f3d21aaaa40
BLAKE2b-256 checksum
How to use checksums
f022267a1337bbb4693aaaa0d9bf4356968745998ddf8150cd2b11327efd0aa9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page