Skip to content
Snippets Groups Projects
Commit a7e9e45a authored by Yaman Umuroglu's avatar Yaman Umuroglu
Browse files

Merge branch 'staging/v0.3b' of https://github.com/Xilinx/finn into staging/v0.3b

parents 147984e6 f1fde71d
No related branches found
No related tags found
No related merge requests found
...@@ -55,14 +55,6 @@ Running the test suite directly ...@@ -55,14 +55,6 @@ Running the test suite directly
FINN comes with a set of tests which can be launched using the command above. Note that some of the tests involve extra compilation and the entire test suite may take some time to complete. FINN comes with a set of tests which can be launched using the command above. Note that some of the tests involve extra compilation and the entire test suite may take some time to complete.
Running the test suite using Jenkins
************************************
::
sh run-docker.sh jenkins
This will launch `Jenkins <https://jenkins.io/>`_ inside a Docker container and print an initial password for the user to use together with the username "admin" to open Jenkins in the webbrowser. The script forwards port 8080 for Jenkins and also configures a smee client to access port 8080. `Smee <https://smee.io/>`_ is a webhook payload delivery service and the FINN GitHub repository has a webhook set up to trigger the smee client (that is set in the run_docker script) when a push event is happening. Through Jenkins the user can set up a test for FINN, which is started at every push event.
Environment variables Environment variables
********************** **********************
...@@ -72,6 +64,8 @@ These are summarized below: ...@@ -72,6 +64,8 @@ These are summarized below:
* `VIVADO_PATH` points to your Vivado installation on the host * `VIVADO_PATH` points to your Vivado installation on the host
* `JUPYTER_PORT` (default 8888) changes the port for Jupyter inside Docker * `JUPYTER_PORT` (default 8888) changes the port for Jupyter inside Docker
* `NETRON_PORT` (default 8081) changes the port for Netron inside Docker * `NETRON_PORT` (default 8081) changes the port for Netron inside Docker
* `NUM_DEFAULT_WORKERS` (default 1) specifies the degree of parallelization for the transformations that can be run in parallel
* `PYNQ_BOARD` specifies the type of PYNQ board used (Pynq-Z1, Pynq-Z2, Ultra96, ZCU104) for the test suite * `PYNQ_BOARD` specifies the type of PYNQ board used (Pynq-Z1, Pynq-Z2, Ultra96, ZCU104) for the test suite
* `PYNQ_IP` and `PYNQ_PORT` specify ip address and port number to access the PYNQ board
* `PYNQ_USERNAME` and `PYNQ_PASSWORD` specify the PYNQ board access credentials for the test suite * `PYNQ_USERNAME` and `PYNQ_PASSWORD` specify the PYNQ board access credentials for the test suite
* `PYNQ_TARGET_DIR` specifies the target dir on the PYNQ board for the test suite * `PYNQ_TARGET_DIR` specifies the target dir on the PYNQ board for the test suite
docs/finn/img/verification.png

53.3 KiB

...@@ -138,6 +138,8 @@ Transformation Pass ...@@ -138,6 +138,8 @@ Transformation Pass
A transformation passes changes (transforms) the given model, it gets the model in the ModelWrapper as input and returns the changed model (ModelWrapper) to the FINN flow. Additional the flag *model_was_changed* which indicates if a transformation has to be performed more than once, is returned. If you are interested in how to write a transformation pass for FINN, please take a look at the Jupyter notebook about how to write a transformation pass, see chapter :ref:`tutorials` for details. For more information about existing transformation passes in FINN, see module :py:mod:`finn.transformation`. A transformation passes changes (transforms) the given model, it gets the model in the ModelWrapper as input and returns the changed model (ModelWrapper) to the FINN flow. Additional the flag *model_was_changed* which indicates if a transformation has to be performed more than once, is returned. If you are interested in how to write a transformation pass for FINN, please take a look at the Jupyter notebook about how to write a transformation pass, see chapter :ref:`tutorials` for details. For more information about existing transformation passes in FINN, see module :py:mod:`finn.transformation`.
.. _mem_mode:
StreamingFCLayer *mem_mode* StreamingFCLayer *mem_mode*
=========================== ===========================
......
...@@ -37,7 +37,7 @@ After this transformation the ONNX model is streamlined and contains now custom ...@@ -37,7 +37,7 @@ After this transformation the ONNX model is streamlined and contains now custom
Convert to HLS Layers Convert to HLS Layers
===================== =====================
Pairs of binary XNORPopcountMatMul layers are converted to StreamingFCLayers and following Multithreshold layers are absorbed into the MVTU. The result is a model consisting of a mixture of HLS and non-HLS layers. For more details, see :py:mod:`finn.transformation.fpgadataflow.convert_to_hls_layers`. Pairs of binary XNORPopcountMatMul layers are converted to StreamingFCLayers and following Multithreshold layers are absorbed into the Matrix-Vector-Activate-Unit (MVAU). The result is a model consisting of a mixture of HLS and non-HLS layers. For more details, see :py:mod:`finn.transformation.fpgadataflow.convert_to_hls_layers`. The MVAU can be implemented in two different modes, *const* and *decoupled*, see chapter :ref:`mem_mode`.
Dataflow Partitioning Dataflow Partitioning
===================== =====================
......
...@@ -6,56 +6,47 @@ Tutorials ...@@ -6,56 +6,47 @@ Tutorials
.. note:: **This website is currently under construction.** .. note:: **This website is currently under construction.**
FINN provides several Jupyter notebooks that can help to get familiar with the basics, the internals and the end-to-end flow in FINN. All Jupyter notebooks can be found in the repo in the `notebook folder <https://github.com/Xilinx/finn/tree/dev/notebooks>`_. FINN provides several Jupyter notebooks that can help to get familiar with the basics, the internals and the end-to-end flow in FINN. All Jupyter notebooks can be found in the repo in the `notebook folder <https://github.com/Xilinx/finn/tree/master/notebooks>`_.
Basics Basics
====== ======
The notebooks in this folder should give a basic insight into FINN, how to get started and the basic concepts. The notebooks in this folder should give a basic insight into FINN, how to get started and the basic concepts.
* `0_getting_started <https://github.com/Xilinx/finn/blob/master/notebooks/basics/0_getting_started.ipynb>`_ * 0_how_to_work_with_onnx
* This notebook corresponds to the chapter :ref:`getting_started` and gives an overview how to start working with FINN.
* `1_how_to_work_with_onnx <https://github.com/Xilinx/finn/blob/master/notebooks/basics/1_how_to_work_with_onnx.ipynb>`_
* This notebook can help you to learn how to create and manipulate a simple ONNX model, also by using FINN * This notebook can help you to learn how to create and manipulate a simple ONNX model, also by using FINN
* `2_modelwrapper <https://github.com/Xilinx/finn/blob/master/notebooks/basics/2_modelwrapper.ipynb>`_ * 1_brevitas_network_import
* This notebook corresponds to the section :ref:`modelwrapper` in the chapter about internals.
* `3_brevitas_network_import <https://github.com/Xilinx/finn/blob/master/notebooks/basics/3_brevitas_network_import.ipynb>`_
* This notebook shows how to import a brevitas network and prepare it for the FINN flow. * This notebook shows how to import a brevitas network and prepare it for the FINN flow.
Internals Advanced
========= ========
The notebooks in this folder are more developer oriented. They should help you to get familiar with the principles in FINN and how to add new content regarding these concepts. The notebooks in this folder are more developer oriented. They should help you to get familiar with the principles in FINN and how to add new content regarding these concepts.
* `0_custom_analysis_pass <https://github.com/Xilinx/finn/blob/master/notebooks/internals/0_custom_analysis_pass.ipynb>`_ * 0_custom_analysis_pass
* This notebook explains what an analysis pass is and how to write one for FINN. * This notebook explains what an analysis pass is and how to write one for FINN.
* `1_custom_transformation_pass <https://github.com/Xilinx/finn/blob/master/notebooks/internals/1_custom_transformation_pass.ipynb>`_ * 1_custom_transformation_pass
* This notebook explains what a transformation pass is and how to write one for FINN. * This notebook explains what a transformation pass is and how to write one for FINN.
* `2_custom_op <https://github.com/Xilinx/finn/blob/master/notebooks/internals/2_custom_op.ipynb>`_ End-to-End Flow
===============
* This notebooks explains what a custom operation/node is and how to create one for FINN. This notebook shows the FINN end-to-end flow step by step using an example of a simple, binarized, fully-connected network trained on the MNIST data set. Starting with the brevitas export and taking this particular network all the way down to hardware by using a specific sequence of transformations.
* `3_verify_hls_custom_op <https://github.com/Xilinx/finn/blob/master/notebooks/internals/3_verify_hls_custom_op.ipynb>`_ * cnv_end2end_example
* This notebook shows the functional verification flow for hls custom operations/nodes. * This notebook takes a simple convolutional model step-by-step from a trained Brevitas net to a running FPGA bitfile.
End-to-End Flow * tfc_end2end_example
===============
This notebook shows the FINN end-to-end flow step by step using an example of a simple, binarized, fully-connected network trained on the MNIST data set. Starting with the brevitas export and taking this particular network all the way down to hardware by using a specific sequence of transformations. * This notebook takes a simple fully-connected model step-by-step from a trained Brevitas net to a running FPGA bitfile.
* tfc_end2end_verification
* `tfc_end2end_example <https://github.com/Xilinx/finn/blob/master/notebooks/end2end_example/tfc_end2end_example.ipynb>`_
* This notebook takes the model step-by-step from a trained Brevitas net to a running FPGA bitfile.
* `tfc_end2end_verification <https://github.com/Xilinx/finn/blob/master/notebooks/end2end_example/tfc_end2end_verification.ipynb>`_
* This notebook runs parellel to the tfc_end2end_example notebook above, and shows how the output of each step can be verified. * This notebook runs parellel to the tfc_end2end_example notebook above, and shows how the output of each step can be verified.
...@@ -6,11 +6,11 @@ Functional Verification ...@@ -6,11 +6,11 @@ Functional Verification
.. note:: **This website is currently under construction.** .. note:: **This website is currently under construction.**
.. image:: /img/verification.png .. image:: ../../notebooks/end2end_example/verification.png
:scale: 70% :scale: 70%
:align: center :align: center
"* This part of the flow is covered by the `this notebook <https://github.com/Xilinx/finn/tree/master/notebooks/end2end_example/tfc_end2end_verification.ipynb>`_. *" This part of the flow is covered by the Jupyter notebook about the verification of a simple fully-connected network, which you can find in the `end2end notebook folder <https://github.com/Xilinx/finn/tree/master/notebooks/end2end_example/tfc_end2end_verification.ipynb>`_.
When the network is transformed it is important to verify the functionality to make sure the transformation did not change the behaviour of the model. There are multiple ways of verification that can be applied in different stages of the network inside FINN. All can be accessed using the execution function in module :py:mod:`finn.core.onnx_exec`. The execution happens in most cases node by node, which supports networks that have a mixture of standard ONNX nodes, custom nodes and HLS custom nodes. A single node can be executed using one or more of the following methods: When the network is transformed it is important to verify the functionality to make sure the transformation did not change the behaviour of the model. There are multiple ways of verification that can be applied in different stages of the network inside FINN. All can be accessed using the execution function in module :py:mod:`finn.core.onnx_exec`. The execution happens in most cases node by node, which supports networks that have a mixture of standard ONNX nodes, custom nodes and HLS custom nodes. A single node can be executed using one or more of the following methods:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment