A C++ neural network engine with Python bindings, designed for educational performance optimization.
Project description
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
pybind11bindings (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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file abovo-0.1.4.tar.gz.
File metadata
- Download URL: abovo-0.1.4.tar.gz
- Upload date:
- Size: 25.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df763aad2c82b8cca5da69f151b1b2ddeb2b615d3f79b6bf646d798f8fb3ddf4
|
|
| MD5 |
9b938c4d3fa98e202cdca8f62fae1f0a
|
|
| BLAKE2b-256 |
501c1fdc0a6508e7103da71b275f59b20f1223bce41a623424c1c5a094fa6b73
|
File details
Details for the file abovo-0.1.4-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: abovo-0.1.4-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 151.2 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ccad72bb30ac9bc97fd9c84f4998027f7df8817ef229394697f9f3d21aaaa40
|
|
| MD5 |
5d7883277f1b3be7c198bf083d0b8fb4
|
|
| BLAKE2b-256 |
f022267a1337bbb4693aaaa0d9bf4356968745998ddf8150cd2b11327efd0aa9
|