Metadata-Version: 2.4
Name: finn-plus
Version: 1.2.0
Summary: Fork of FINN, a QNN dataflow compiler for AMD/Xilinx FPGAs
License-File: AUTHORS.rst
License-File: LICENSE.txt
Maintainer: Felix Jentzsch
Maintainer-email: felix.jentzsch@upb.de
Requires-Python: >=3.10,<3.12
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Requires-Dist: bitstring (>=4.3.1,<4.4.0)
Requires-Dist: click (>=8.1.8,<9.0.0)
Requires-Dist: clize (>=5.0.2,<5.1.0)
Requires-Dist: cmake (>=4.0.3,<4.1.0)
Requires-Dist: deap (>=1.4.3,<1.5.0)
Requires-Dist: dependencies (==2.0.1)
Requires-Dist: dvc[webdav] (>=3.59.1,<3.60.0)
Requires-Dist: dvclive[image] (>=3.48.2,<3.49.0)
Requires-Dist: gspread (>=3.6.0,<3.7.0)
Requires-Dist: importlib-resources (>=6.5.2,<6.6.0)
Requires-Dist: ipykernel (>=6.29.5,<6.30.0)
Requires-Dist: ipython (>=8.37.0,<8.38.0)
Requires-Dist: jupyter (>=1.1.1,<1.2.0)
Requires-Dist: markupsafe (>=3.0.2,<3.1.0)
Requires-Dist: mashumaro[yaml] (>=3.15,<4.0)
Requires-Dist: matplotlib (>=3.10.3,<3.11.0)
Requires-Dist: mip (>=1.13.0,<1.14.0)
Requires-Dist: netron (>5.0.0,<=8.5.0)
Requires-Dist: networkx (>=3.4.2,<3.5.0)
Requires-Dist: numpy (==1.26.4)
Requires-Dist: onnx (==1.17.0)
Requires-Dist: onnxoptimizer (>=0.3.13,<0.4.0)
Requires-Dist: onnxruntime (==1.20.1)
Requires-Dist: pandas (>=2.3.1,<2.4.0)
Requires-Dist: pre-commit (>=4.2.0,<4.3.0)
Requires-Dist: protobuf (==3.20.3)
Requires-Dist: psutil (>=5.9.4,<5.10.0)
Requires-Dist: pygments (>=2.19.2,<2.20.0)
Requires-Dist: pyscaffold (>=4.6,<4.7)
Requires-Dist: pytest (>=8.4.1,<8.5.0)
Requires-Dist: pytest-cov (>=6.2.1,<6.3.0)
Requires-Dist: pytest-dependency (>=0.6.0,<0.7.0)
Requires-Dist: pytest-forked (>=1.6.0,<1.7.0)
Requires-Dist: pytest-html (>=4.1.1,<4.2.0)
Requires-Dist: pytest-html-merger (>=0.1.0,<0.2.0)
Requires-Dist: pytest-metadata (>=3.1.1,<3.2.0)
Requires-Dist: pytest-parallel (>=0.1.1,<0.2.0)
Requires-Dist: pytest-rerunfailures (>=15.1,<15.2)
Requires-Dist: pytest-xdist[setproctitle] (>=3.6.1,<3.7.0)
Requires-Dist: pyyaml (>=6.0.2,<6.1.0)
Requires-Dist: rich (>=13.9.4,<14.0.0)
Requires-Dist: scikit-learn (>=1.7.0,<1.8.0)
Requires-Dist: scipy (>=1.15.0,<1.16.0)
Requires-Dist: setupext-janitor (>=1.1.2,<2.0.0)
Requires-Dist: setuptools (>40.8.0,<70.0.0)
Requires-Dist: sigtools (>=4.0.1,<4.1.0)
Requires-Dist: tclwrapper (==0.0.1)
Requires-Dist: termcolor (>=2.5.0,<3.0.0)
Requires-Dist: tokenize-rt (>=4.2.1,<4.3.0)
Requires-Dist: toposort (>=1.7.0,<1.8.0)
Requires-Dist: torch (>=2.7.1,<2.8.0)
Requires-Dist: torchvision (>=0.22.1,<0.23.0)
Requires-Dist: tqdm (>=4.67.1,<4.68.0)
Requires-Dist: vcdvcd (>=1.0.5,<1.1.0)
Requires-Dist: wget (>=3.2,<3.3)
Project-URL: EKI Project, https://www.eki-project.tech/
Project-URL: GitHub, https://github.com/eki-project/finn-plus
Description-Content-Type: text/markdown

<img src=https://cs.uni-paderborn.de/fileadmin-eim/informatik/fg/ce/MiscImages/finn-plus_logo.png width=196/>

# Dataflow Compiler for Fast, Scalable Quantized Neural Network Inference on FPGAs

**FINN+** is a fork of **FINN**, an experimental framework from the Integrated Communications and AI Lab of AMD Research & Advanced Development to explore deep neural network inference on FPGAs.
It specifically targets quantized neural networks, with emphasis on generating dataflow-style architectures customized for each network.
The resulting FPGA accelerators are highly efficient and can yield high throughput and low latency.
The framework is fully open-source in order to give a higher degree of flexibility, and is intended to enable neural network research spanning several layers of the software/hardware abstraction stack.

**To get an overview of how FINN+ is used, take a look at the Getting Started section below!**

**While our [Wiki](https://github.com/eki-project/finn-plus/wiki) is under construction, we refer to the original [FINN homepage](https://xilinx.github.io/finn/) for further information.**

## FINN+ Extensions
**FINN+** aims to incorporate all development from the upstream repository (dev branch) while extending **FINN** in all directions, including the following list of features that are either in progress or already completed:
- Transformer/Attention support
- Improved streamlining
- Improved automatic folding and FIFO-sizing
- Empirical quality-of-result (QoR) estimation
- Back-end extensions
    - Instrumentation for accurate performance profiling in simulation and on hardware
    - Improved Alveo build flow
    - Multi-FPGA support
    - Optimized C++ driver
- Quality-of-live improvements
    - Better logging and error handling
    - Type hinting/checking
    - Alternative YAML-based build configuration
    - Containerless setup

Please refer to our [**Feature Tracker**](https://github.com/orgs/eki-project/projects/1) for the current status of individual features.
While some items are already on-track to be merged into the upstream repository, we try to merge them into the **FINN+** dev branch as early as possible to increase development pace and drive our research forward.

## Getting Started
This is a quick overview of how to get started, for additional information please refer to our [**Wiki**](https://github.com/eki-project/finn-plus/wiki)!

### Requirements
The primary dependencies currently are:
- Python >= 3.10 (< 3.12)
- Vivado, Vitis, Vitis HLS (2022.2 or 2024.2)
- Some basic system-level packages, refer to the [**dependency installation script**](https://github.com/eki-project/finn-plus/blob/main/installDependencies.sh)

### Installing via pip
After preparing the dependencies mentioned above, simply run the following to start a build flow:
```
# Make sure to create a fresh virtual environment for FINN+
pip install finn-plus          # Install FINN+ and its Python dependencies via pip
finn deps update               # Ensure FINN+ pulled all further dependencies (this might update packages in your venv!)
finn build build_config.yaml   # Run a FINN+ build defined in a YAML file
```

### Installing from the repository
To install directly from the repository, you'll need Poetry (>= 2.0) for dependency management. After cloning the repo and setting up the system-level dependencies, run the following to start a build flow:
```
cd finn-plus
poetry install                 # Install Python packages into a Poetry-managed virtual environment
source <your-poetry-venv>      # Use "poetry env info" to find the path to your Poetry venv. For further information visit the Poetry documentation
finn config create             # Create a default configuration in ~/.finn/settings.yaml. Optional but recommended
finn deps update               # Ensure FINN+ pulled all further dependencies (this might update packages in your venv!)
finn build build_config.yaml   # Run a FINN+ build defined in a YAML file
```

## About Us
FINN+ is maintained by researchers from the [Computer Engineering Group](https://en.cs.uni-paderborn.de/ceg) (CEG) and [Paderborn Center for Parallel Computing](https://pc2.uni-paderborn.de/) (PC²) at Paderborn University, Germany as part of the [eki research project](https://www.eki-project.tech/).

<p align="left">
<a href="https://en.cs.uni-paderborn.de/ceg"><img align="top" src="https://cs.uni-paderborn.de/fileadmin-eim/informatik/fg/ce/MiscImages/UPB_Logo_ENG_coloured_RGB.jpg" alt="logo" style="margin-right: 20px" width="250"/></a>
<a href="https://pc2.uni-paderborn.de/"><img align="top" src="https://cs.uni-paderborn.de/fileadmin-eim/informatik/fg/ce/MiscImages/PC2_logo.png" alt="logo" style="margin-right: 20px" width="250"/></a>
</p>

<p align="left">
<a href="https://www.eki-project.tech/"><img align="top" src="https://cs.uni-paderborn.de/fileadmin-eim/informatik/fg/ce/MiscImages/eki-RGB-EN-s.png" alt="logo" style="margin-right: 20px" width="250"/></a>
<a href="https://www.bmuv.de/"><img align="top" src="https://cs.uni-paderborn.de/fileadmin-eim/informatik/fg/ce/MiscImages/BMUV_Fz_2021_Office_Farbe_en.png" alt="logo" style="margin-right: 20px" width="250"/></a>
</p>

