Neural Network to C Compiler
Project description
nncc - Neural Network to C Compiler
A minimal, dependency-free compiler that converts PyTorch models into portable C99 code for inference.
Features
- Python-First Workflow: Compile directly from your Python training script using
nncc.compile(). - Zero-Dependency Inference: Generated C code only requires
<math.h>and<stdlib.h>. - Embedded Weights: Weights are embedded directly into the generated C header/source, making it a single-file solution.
- Dynamic & Portable: Supports arbitrary model architectures and runs on any C99-compliant compiler (GCC, Clang, MSVC).
Installation
pip install nncc
Quick Start
1. Compile directly from PyTorch
import torch
import torch.nn as nn
import nncc
# 1. Define your model
model = nn.Sequential(
nn.Linear(10, 64),
nn.ReLU(),
nn.Linear(64, 2),
nn.Softmax(dim=-1)
)
# 2. Compile to C source code
# We pass a sample input to infer shapes
c_code = nncc.compile(model, torch.randn(1, 10), name="my_model")
# 3. Save to file
with open("model.c", "w") as f:
f.write(c_code)
print("Saved model.c!")
2. Use the generated C code
The generated file is a single-header library. You can include it directly in your C application.
// main.c
#define MODEL_IMPLEMENTATION // Define this in exactly one .c file to implement functions
#include "model.c"
#include <stdio.h>
int main() {
// Input matches the shape provided during compilation (1, 10)
float input[10] = {0.5f, -0.2f, /* ... */};
float output[2];
// Run inference
my_model_inference(input, output);
printf("Class 0: %f\n", output[0]);
printf("Class 1: %f\n", output[1]);
return 0;
}
Compile it with standard tools:
gcc -O3 main.c -o app -lm
Supported Layers
| Category | Operations |
|---|---|
| Linear | Linear (GEMM) |
| Conv | Conv2d |
| Pool | MaxPool2d, AvgPool2d, AdaptiveAvgPool2d (Global) |
| Act | ReLU, ReLU6,, Sigmoid, Tanh, Softmax |
| Norm | BatchNorm2d |
| Shape | Flatten, Dropout (No-op) |
Advanced / Manual Usage
CLI Tool
If you prefer the command-line interface or want to work with raw files:
- Export Model: Use
scripts/export_model.pyto generate.safetensorsand.nnmodelfiles. - Compile:
nncc model.safetensors model.nnmodel -o model.c
Building from Source
To build the nncc compiler and shared library from source:
Windows (MinGW/Git Bash):
make
Windows (MSVC):
cl /O2 /Fe:nncc.exe src/main.c src/model.c src/loader.c src/codegen.c
Linux/macOS:
make
Project Structure
nncc/
├── nncc/ # Python package
│ ├── __init__.py
│ ├── compiler.py # Python API & Ctypes bindings
│ └── nncc.dll # Pre-compiled core
├── src/ # C Compiler Core
│ ├── libnncc.c # Shared library entry point
│ ├── main.c # CLI entry point
│ ├── model.c # Graph IR
│ └── codegen.c # C99 Generator
├── examples/ # Usage examples
└── setup.py # Packaging config
License
MIT License
Project details
Release history Release notifications | RSS feed
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 nncc-2.0.0.tar.gz.
File metadata
- Download URL: nncc-2.0.0.tar.gz
- Upload date:
- Size: 84.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
474adc9317443377da4f9393154365e8b40532f63a76f162f87980baa36c0e03
|
|
| MD5 |
6d0bfecc320c7752d7784a9c0cbecde5
|
|
| BLAKE2b-256 |
08176dec85a9aa682683bacdae6e3392956b93a735bcc17790f01ad3e3c77ed6
|
File details
Details for the file nncc-2.0.0-py3-none-any.whl.
File metadata
- Download URL: nncc-2.0.0-py3-none-any.whl
- Upload date:
- Size: 60.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6c0bfc6607b5296db493ddec60acf928b9b783f65adc4a3c6871595a1f24df2
|
|
| MD5 |
6fa01ddbdf8a14b082cbba01b0068ed0
|
|
| BLAKE2b-256 |
89474b4fea2bdce8c6f41f6d0c9ad0c7ad27827cbc35ae02df74d32fda3911c0
|