From 26e901f9debd072013a638042996edef24ef254d Mon Sep 17 00:00:00 2001 From: auphelia <jakobapk@web.de> Date: Fri, 8 May 2020 10:52:25 +0100 Subject: [PATCH] [Sphinx documentation] Add section about mem mode in chapter Internals --- docs/finn/img/mem_mode.png | Bin 0 -> 41236 bytes docs/finn/internals.rst | 40 ++++++++++++++++++++++++++++++------- 2 files changed, 33 insertions(+), 7 deletions(-) create mode 100755 docs/finn/img/mem_mode.png diff --git a/docs/finn/img/mem_mode.png b/docs/finn/img/mem_mode.png new file mode 100755 index 0000000000000000000000000000000000000000..27783c5f3233cdf1d646e330d85ecdad39b8b922 GIT binary patch literal 41236 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 N7W`9C;}Js6e*vL7m6`wm literal 0 HcmV?d00001 diff --git a/docs/finn/internals.rst b/docs/finn/internals.rst index 1e4ea189d..ce45b99e7 100644 --- a/docs/finn/internals.rst +++ b/docs/finn/internals.rst @@ -24,7 +24,7 @@ FINN uses many custom operations (op_type in ONNX NodeProto) that are not define Custom ONNX Execution Flow ========================== -To verify correct operation of FINN-ONNX graphs, FINN provides its own ONNX execution flow (:py:mod:`finn.core.onnx_exec`). This flow supports the standard set of ONNX operations as well as the custom FINN operations. +To verify correct operation of FINN-ONNX graphs, FINN provides its own ONNX execution flow (:py:mod:`finn.core.onnx_exec`). This flow supports the standard set of ONNX operations as well as the custom FINN operations. .. warning:: This execution flow is only meant for checking the correctness of models after applying transformations, and not for high performance inference. @@ -39,7 +39,7 @@ Some of the helper functions are described in more detail below. Create a ModelWrapper instance ------------------------------ -The ModelWrapper instance can be created using a model in .onnx format or by directly passing a ModelProto instance to the wrapper. The code block below gives an example of how to use the wrapper on a model in .onnx format. +The ModelWrapper instance can be created using a model in .onnx format or by directly passing a ModelProto instance to the wrapper. The code block below gives an example of how to use the wrapper on a model in .onnx format. :: from finn.core.modelwrapper import ModelWrapper @@ -49,7 +49,7 @@ Access the ONNX GraphProto through ModelWrapper ----------------------------------------------- The ONNX ModelProto can be accessed with following command: :: - + modelproto = model.model The graph can be accessed using: @@ -62,7 +62,7 @@ The node list is accessed by: nodes = model.graph.node -The individual nodes can be selected via their indices. +The individual nodes can be selected via their indices. :: # first node @@ -79,7 +79,7 @@ Helper functions for tensors A list of all tensors (names) can easily be accessed using: :: - + tensor_list = model.get_all_tensor_names() If we take a single tensor from that list (by index), we can determine their producer or consumer node by using one of the following functions. Note that it may be that a tensor does not have a producer or consumer node, for example if the tensor represents a constant that is already set. In that case `None` will be returned. @@ -105,13 +105,13 @@ Optionally, the dtype (container datatype) of the tensor can also be specified a As mentioned above there are FINN DataTypes additional to the container datatype, these can be accessed and set for a tensor with the following functions: :: - + # get tensor dataype of third tensor in model tensor list model.get_tensor_datatype(tensor_list[2]) # set tensor datatype of third tensor in model tensor list from finn.core.datatype import DataType - + finn_dtype = DataType.BIPOLAR model.set_tensor_datatype(tensor_list[2], finn_dtype) @@ -138,3 +138,29 @@ 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`. +StreamingFCLayer *mem_mode* +=========================== + +FINN supports two types of the so-called *mem_mode* for the node StreamingFCLayer. With the selection of this mode it is decided in which way the weight values are accessed during the execution. That means the mode setting has direct influence on the resulting circuit. Currently two settings for the *mem_mode* are supported in FINN: + +* "const" + +* "decoupled" + +The following picture shows the idea behind the two modes. + +.. image:: img/mem_mode.png + :scale: 55% + :align: center + +Const mode +---------- +In *const* mode the weights are baked into the Matrix-Vector-Activate-Unit (MVAU), which means they are part of the HLS code. During the IP block generation the weight values are integrated as *params.h* file in the HLS code and synthesized together with it. For the *const* mode IP block generation the `StreamingFCLayer_Batch function <https://github.com/Xilinx/finn-hlslib/blob/07a8353f6cdfd8bcdd81e309a5581044c2a93d3b/fclayer.h#L94>`_ from the finn-hls library is used, which implements a standard MVAU. The resulting IP block has an input and an output stream, as shown in the above picture on the left. FIFOs in the form of verilog components are connected to these. + +Decoupled mode +-------------- +In *decoupled* mode the MVAU has three ports. Besides the input and output streams, which are fed into the circuit via verilog FIFOs, there is another input, which is used to stream the weights. For this the `streaming MVAU <https://github.com/Xilinx/finn-hlslib/blob/07a8353f6cdfd8bcdd81e309a5581044c2a93d3b/mvau.hpp#L213>`_ from the finn-hls library is used. To make the streaming possible a verilog weight streamer component accesses the weight memory and sends the values via FIFO to the MVAU. This component can be found in the `finn-rtllib <https://github.com/Xilinx/finn/tree/dev/finn-rtllib>`_ under the name *memstream.v*. For the IP block generation this component, the IP block resulting from the synthesis of the HLS code of the streaming MVAU and a FIFO for the weight stream are combined in a verilog wrapper. The weight values are saved in .dat files and stored in the weight memory from which the weight streamer reads. The resulting verilog component, which is named after the name of the node and has the suffix "_memstream.v", exposes only two ports to the outside, the data input and output. It therefore behaves externally in the same way as the MVAU in *const* mode. + +How to set *mem_mode* +--------------------- +When the nodes in the network are converted to HLS layers, the *mem_mode* can be passed. More detailed information about the transformations that prepare the network and the transformation that performs the conversion to HLS layers can be found in chapter :ref:`nw_prep`. The *mem_mode* is passed as argument. Note that if no argument is passed, the default is *const*. -- GitLab