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 NNCC_IMPLEMENTATION // Define this in exactly one .c file
#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
nncc-2.0.6.tar.gz
(85.0 kB
view details)
File details
Details for the file nncc-2.0.6.tar.gz.
File metadata
- Download URL: nncc-2.0.6.tar.gz
- Upload date:
- Size: 85.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f81485c8ea7b81f941b4416946d0603cc40df0c0c1c52771e8022dd4e98813c8
|
|
| MD5 |
edd76a62f1cf1c2cfaa07d11b0eafdcc
|
|
| BLAKE2b-256 |
c2af1a46ffa73286ab9c61e09de0809ebab3bc091241d21cb65882b734c904cb
|