From 4443eeb823a0bbc35ec016d1a92574264f3981fe Mon Sep 17 00:00:00 2001 From: Felix Jentzsch Date: Thu, 25 May 2023 12:47:27 +0200 Subject: [PATCH 1/5] Update base image to Ubuntu 22.04 --- docker/Dockerfile.finn | 31 +++++++++++++++++++------------ docker/finn_entrypoint.sh | 5 +++-- fetch-repos.sh | 4 ++-- requirements.txt | 14 ++++++-------- run-docker.sh | 5 ++++- 5 files changed, 34 insertions(+), 25 deletions(-) diff --git a/docker/Dockerfile.finn b/docker/Dockerfile.finn index f823d3c42b..d69ccc9725 100644 --- a/docker/Dockerfile.finn +++ b/docker/Dockerfile.finn @@ -26,10 +26,10 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -FROM pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime +FROM ubuntu:jammy-20230126 LABEL maintainer="Yaman Umuroglu " -ARG XRT_DEB_VERSION="xrt_202210.2.13.466_18.04-amd64-xrt" +ARG XRT_DEB_VERSION="xrt_202220.2.14.354_22.04-amd64-xrt" WORKDIR /workspace @@ -57,12 +57,15 @@ RUN apt-get update && \ unzip \ zip \ locales \ - lsb-core + lsb-core \ + python3 \ + python-is-python3 \ + python3-pip RUN echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config RUN locale-gen "en_US.UTF-8" # install Verilator from source to get the right version -RUN apt-get install -y git perl python3 make autoconf g++ flex bison ccache libgoogle-perftools-dev numactl perl-doc libfl2 libfl-dev zlibc zlib1g zlib1g-dev +RUN apt-get install -y git perl make autoconf g++ flex bison ccache libgoogle-perftools-dev numactl perl-doc libfl2 libfl-dev zlib1g zlib1g-dev RUN git clone https://github.com/verilator/verilator RUN cd verilator && \ git checkout v4.224 && \ @@ -81,19 +84,23 @@ RUN rm /tmp/$XRT_DEB_VERSION.deb COPY requirements.txt . RUN pip install -r requirements.txt RUN rm requirements.txt + +# install PyTorch +RUN pip install torch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116 + # extra Python package dependencies (for testing and interaction) -RUN pip install pygments==2.4.1 -RUN pip install ipykernel==5.5.5 +RUN pip install pygments==2.14.0 +RUN pip install ipykernel==6.21.2 RUN pip install jupyter==1.0.0 --ignore-installed RUN pip install markupsafe==2.0.1 -RUN pip install matplotlib==3.3.1 --ignore-installed +RUN pip install matplotlib==3.7.0 --ignore-installed RUN pip install pytest-dependency==0.5.1 -RUN pip install pytest-xdist[setproctitle]==2.4.0 -RUN pip install pytest-parallel==0.1.0 +RUN pip install pytest-xdist[setproctitle]==3.2.0 +RUN pip install pytest-parallel==0.1.1 RUN pip install "netron>=5.0.0" -RUN pip install pandas==1.1.5 -RUN pip install scikit-learn==0.24.1 -RUN pip install tqdm==4.31.1 +RUN pip install pandas==1.5.3 +RUN pip install scikit-learn==1.2.1 +RUN pip install tqdm==4.64.1 RUN pip install -e git+https://github.com/fbcotter/dataset_loading.git@0.0.4#egg=dataset_loading # extra dependencies from other FINN deps diff --git a/docker/finn_entrypoint.sh b/docker/finn_entrypoint.sh index b5c702111a..4e0266ca6b 100644 --- a/docker/finn_entrypoint.sh +++ b/docker/finn_entrypoint.sh @@ -54,8 +54,9 @@ recho () { echo -e "${RED}ERROR: $1${NC}" } -# qonnx -pip install --user -e ${FINN_ROOT}/deps/qonnx +# qonnx (using workaround for https://github.com/pypa/pip/issues/7953) +# to be fixed in future Ubuntu versions (https://bugs.launchpad.net/ubuntu/+source/setuptools/+bug/1994016) +pip install --no-build-isolation --no-warn-script-location -e ${FINN_ROOT}/deps/qonnx # finn-experimental pip install --user -e ${FINN_ROOT}/deps/finn-experimental # brevitas diff --git a/fetch-repos.sh b/fetch-repos.sh index e039ca9144..189693dd17 100755 --- a/fetch-repos.sh +++ b/fetch-repos.sh @@ -27,7 +27,7 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -QONNX_COMMIT="20a34289cf2297d2b2bbbe75d6ac152ece86e3b4" +QONNX_COMMIT="0c980ef410c7c99b33c5b96486233f5a723ca1bc" FINN_EXP_COMMIT="0aa7e1c44b20cf085b6fe42cff360f0a832afd2c" BREVITAS_COMMIT="c65f9c13dc124971f14739349531bbcda5c2a4aa" PYVERILATOR_COMMIT="766e457465f5c0dd315490d7b9cc5d74f9a76f4f" @@ -39,7 +39,7 @@ XIL_BDF_COMMIT="8cf4bb674a919ac34e3d99d8d71a9e60af93d14e" KV260_BDF_COMMIT="98e0d3efc901f0b974006bc4370c2a7ad8856c79" EXP_BOARD_FILES_MD5="30eecc497c31050bd46d10ea20eba232" -QONNX_URL="https://github.com/fastmachinelearning/qonnx.git" +QONNX_URL="https://github.com/iksnagreb/qonnx.git" FINN_EXP_URL="https://github.com/Xilinx/finn-experimental.git" BREVITAS_URL="https://github.com/Xilinx/brevitas.git" PYVERILATOR_URL="https://github.com/maltanar/pyverilator.git" diff --git a/requirements.txt b/requirements.txt index 3cf829a171..a9e691fea2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,19 +2,17 @@ bitstring==3.1.7 clize==4.1.1 dataclasses-json==0.5.7 gspread==3.6.0 -numpy==1.22.0 +numpy==1.24.1 onnx==1.13.0 onnxoptimizer -onnxruntime==1.11.1 -pre-commit==2.9.2 +onnxruntime==1.15.0 +pre-commit==3.3.2 protobuf==3.20.3 psutil==5.9.4 -pyscaffold==3.2.1 -scipy==1.5.2 +pyscaffold==4.4 +scipy==1.10.1 setupext-janitor>=1.1.2 sigtools==2.0.3 -sphinx==5.0.2 -sphinx_rtd_theme==0.5.0 -toposort==1.5 +toposort==1.7.0 vcdvcd==1.0.5 wget==3.2 diff --git a/run-docker.sh b/run-docker.sh index 381be35293..c24dcec724 100755 --- a/run-docker.sh +++ b/run-docker.sh @@ -86,7 +86,7 @@ SCRIPTPATH=$(dirname "$SCRIPT") : ${ALVEO_BOARD="U250"} : ${ALVEO_TARGET_DIR="/tmp"} : ${PLATFORM_REPO_PATHS="/opt/xilinx/platforms"} -: ${XRT_DEB_VERSION="xrt_202210.2.13.466_18.04-amd64-xrt"} +: ${XRT_DEB_VERSION="xrt_202220.2.14.354_22.04-amd64-xrt"} : ${FINN_HOST_BUILD_DIR="/tmp/$DOCKER_INST_NAME"} : ${FINN_DOCKER_TAG="xilinx/finn:$(git describe --always --tags --dirty).$XRT_DEB_VERSION"} : ${FINN_DOCKER_PREBUILT="0"} @@ -201,6 +201,9 @@ DOCKER_EXEC+="-e PYNQ_PASSWORD=$PYNQ_PASSWORD " DOCKER_EXEC+="-e PYNQ_TARGET_DIR=$PYNQ_TARGET_DIR " DOCKER_EXEC+="-e OHMYXILINX=$OHMYXILINX " DOCKER_EXEC+="-e NUM_DEFAULT_WORKERS=$NUM_DEFAULT_WORKERS " +# Workaround for FlexLM issue, see: +# https://community.flexera.com/t5/InstallAnywhere-Forum/Issues-when-running-Xilinx-tools-or-Other-vendor-tools-in-docker/m-p/245820#M10647 +DOCKER_EXEC+="-e LD_PRELOAD=/lib/x86_64-linux-gnu/libudev.so.1 " if [ "$FINN_DOCKER_RUN_AS_ROOT" = "0" ];then DOCKER_EXEC+="-v /etc/group:/etc/group:ro " DOCKER_EXEC+="-v /etc/passwd:/etc/passwd:ro " From a2a0ffedfad96a64fe102d7c9d3c4c01a3288121 Mon Sep 17 00:00:00 2001 From: Felix Jentzsch Date: Thu, 25 May 2023 17:33:52 +0200 Subject: [PATCH 2/5] Update pre-commit config --- .pre-commit-config.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 126a4ac4b2..42a18b2737 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -29,11 +29,11 @@ exclude: '^docs/conf.py' default_language_version: - python: python3.8 + python: python3.10 repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.2.0 + rev: v4.4.0 hooks: - id: trailing-whitespace exclude: '\.dat$' @@ -56,13 +56,13 @@ repos: - id: isort - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 23.3.0 hooks: - id: black language_version: python3 - repo: https://github.com/PyCQA/flake8 - rev: 3.9.2 + rev: 6.0.0 hooks: - id: flake8 # black-compatible flake-8 config From 161cc20e25a71806d438290f3dca88a87e1213d2 Mon Sep 17 00:00:00 2001 From: Felix Jentzsch Date: Fri, 26 May 2023 11:22:46 +0200 Subject: [PATCH 3/5] Update Brevitas, apply workarounds to fix quicktest --- fetch-repos.sh | 2 +- setup.cfg | 8 ++++---- tests/brevitas/test_brevitas_avg_pool_export.py | 4 ++-- tests/end2end/test_end2end_cybsec_mlp.py | 2 +- tests/transformation/streamline/test_streamline_cnv.py | 2 ++ tests/transformation/streamline/test_streamline_fc.py | 2 ++ tests/transformation/test_infer_data_layouts_cnv.py | 3 ++- 7 files changed, 14 insertions(+), 9 deletions(-) diff --git a/fetch-repos.sh b/fetch-repos.sh index 189693dd17..ddae4020ed 100755 --- a/fetch-repos.sh +++ b/fetch-repos.sh @@ -29,7 +29,7 @@ QONNX_COMMIT="0c980ef410c7c99b33c5b96486233f5a723ca1bc" FINN_EXP_COMMIT="0aa7e1c44b20cf085b6fe42cff360f0a832afd2c" -BREVITAS_COMMIT="c65f9c13dc124971f14739349531bbcda5c2a4aa" +BREVITAS_COMMIT="d30ba0d6b3db4a333072624fa3d10827a686488d" PYVERILATOR_COMMIT="766e457465f5c0dd315490d7b9cc5d74f9a76f4f" CNPY_COMMIT="4e8810b1a8637695171ed346ce68f6984e585ef4" HLSLIB_COMMIT="c17aa478ae574971d115afa9fa4d9c215857d1ac" diff --git a/setup.cfg b/setup.cfg index 50a91498ce..fb070a436e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -34,12 +34,12 @@ name = finn description = A Framework for Fast, Scalable Quantized Neural Network Inference author = Yaman Umuroglu -author-email = yamanu@xilinx.com +author_email = yamanu@xilinx.com license = new-bsd -long-description = file: README.md -long-description-content-type = text/markdown +long_description = file: README.md +long_description_content_type = text/markdown url = https://xilinx.github.io/finn/ -project-urls = +project_urls = Documentation = https://finn.readthedocs.io/ # Change if running only on Windows, Mac or Linux (comma-separated) platforms = any diff --git a/tests/brevitas/test_brevitas_avg_pool_export.py b/tests/brevitas/test_brevitas_avg_pool_export.py index 9550031b32..898f1fb732 100644 --- a/tests/brevitas/test_brevitas_avg_pool_export.py +++ b/tests/brevitas/test_brevitas_avg_pool_export.py @@ -31,7 +31,7 @@ import os import torch from brevitas.export import export_qonnx -from brevitas.nn import QuantAvgPool2d, QuantIdentity, QuantReLU +from brevitas.nn import TruncAvgPool2d, QuantIdentity, QuantReLU from qonnx.core.datatype import DataType from qonnx.core.modelwrapper import ModelWrapper from qonnx.transformation.infer_datatypes import InferDataTypes @@ -73,7 +73,7 @@ def test_brevitas_avg_pool_export( bit_width=input_bit_width, return_quant_tensor=True, ) - quant_avgpool = QuantAvgPool2d( + quant_avgpool = TruncAvgPool2d( kernel_size=kernel_size, stride=stride, bit_width=bit_width, diff --git a/tests/end2end/test_end2end_cybsec_mlp.py b/tests/end2end/test_end2end_cybsec_mlp.py index d2a4d0287f..1ab2d01228 100644 --- a/tests/end2end/test_end2end_cybsec_mlp.py +++ b/tests/end2end/test_end2end_cybsec_mlp.py @@ -146,7 +146,7 @@ def test_end2end_cybsec_mlp_export(QONNX_export): model.save(export_onnx_path) else: export_finn_onnx( - model_for_export, export_path=export_onnx_path, input_t=input_qt + model_for_export, export_path=export_onnx_path, input_t=input_qt, input_names=["onnx::Mul_0"] ) assert os.path.isfile(export_onnx_path) # fix input datatype diff --git a/tests/transformation/streamline/test_streamline_cnv.py b/tests/transformation/streamline/test_streamline_cnv.py index b7d6a825bb..c5d8e2517f 100644 --- a/tests/transformation/streamline/test_streamline_cnv.py +++ b/tests/transformation/streamline/test_streamline_cnv.py @@ -38,6 +38,7 @@ from qonnx.transformation.general import ( GiveReadableTensorNames, GiveUniqueNodeNames, + GiveUniqueParameterTensors, RemoveStaticGraphInputs, RemoveUnusedTensors, ) @@ -69,6 +70,7 @@ def test_streamline_cnv(size, wbits, abits): model = model.transform(InferShapes()) model = model.transform(FoldConstants()) model = model.transform(GiveUniqueNodeNames()) + model = model.transform(GiveUniqueParameterTensors()) model = model.transform(GiveReadableTensorNames()) model = model.transform(RemoveStaticGraphInputs()) # load one of the test vectors diff --git a/tests/transformation/streamline/test_streamline_fc.py b/tests/transformation/streamline/test_streamline_fc.py index 6131c3b03e..07c3a0f3cb 100644 --- a/tests/transformation/streamline/test_streamline_fc.py +++ b/tests/transformation/streamline/test_streamline_fc.py @@ -39,6 +39,7 @@ from qonnx.transformation.general import ( GiveReadableTensorNames, GiveUniqueNodeNames, + GiveUniqueParameterTensors, RemoveStaticGraphInputs, RemoveUnusedTensors, ) @@ -72,6 +73,7 @@ def test_streamline_fc(size, wbits, abits): model = model.transform(InferShapes()) model = model.transform(FoldConstants()) model = model.transform(GiveUniqueNodeNames()) + model = model.transform(GiveUniqueParameterTensors()) model = model.transform(GiveReadableTensorNames()) model = model.transform(RemoveStaticGraphInputs()) # load one of the test vectors diff --git a/tests/transformation/test_infer_data_layouts_cnv.py b/tests/transformation/test_infer_data_layouts_cnv.py index 71822a2903..245980f958 100644 --- a/tests/transformation/test_infer_data_layouts_cnv.py +++ b/tests/transformation/test_infer_data_layouts_cnv.py @@ -35,7 +35,7 @@ from qonnx.core.modelwrapper import ModelWrapper from qonnx.transformation.bipolar_to_xnor import ConvertBipolarMatMulToXnorPopcount from qonnx.transformation.fold_constants import FoldConstants -from qonnx.transformation.general import GiveReadableTensorNames, GiveUniqueNodeNames +from qonnx.transformation.general import GiveReadableTensorNames, GiveUniqueNodeNames, GiveUniqueParameterTensors from qonnx.transformation.infer_data_layouts import InferDataLayouts from qonnx.transformation.infer_shapes import InferShapes from qonnx.transformation.lower_convs_to_matmul import LowerConvsToMatMul @@ -57,6 +57,7 @@ def test_infer_data_layouts_cnv(): model = model.transform(InferShapes()) model = model.transform(FoldConstants()) model = model.transform(GiveUniqueNodeNames()) + model = model.transform(GiveUniqueParameterTensors()) model = model.transform(GiveReadableTensorNames()) model = model.transform(Streamline()) model = model.transform(InferDataLayouts()) From aae59b1e6448c3274c36daa5667f943ee0d56a9a Mon Sep 17 00:00:00 2001 From: Felix Jentzsch Date: Thu, 1 Jun 2023 11:18:40 +0200 Subject: [PATCH 4/5] [Zynq build] update PS IP version --- src/finn/transformation/fpgadataflow/templates.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/finn/transformation/fpgadataflow/templates.py b/src/finn/transformation/fpgadataflow/templates.py index f52bad0ffb..bc34f61a8b 100644 --- a/src/finn/transformation/fpgadataflow/templates.py +++ b/src/finn/transformation/fpgadataflow/templates.py @@ -135,7 +135,7 @@ create_bd_design "top" if {$ZYNQ_TYPE == "zynq_us+"} { - create_bd_cell -type ip -vlnv xilinx.com:ip:zynq_ultra_ps_e:3.4 zynq_ps + create_bd_cell -type ip -vlnv xilinx.com:ip:zynq_ultra_ps_e:3.5 zynq_ps apply_bd_automation -rule xilinx.com:bd_rule:zynq_ultra_ps_e -config {apply_board_preset "1" } [get_bd_cells zynq_ps] #activate one slave port, deactivate the second master port set_property -dict [list CONFIG.PSU__USE__S_AXI_GP2 {1}] [get_bd_cells zynq_ps] From 1679e01ee4526a220664b04a8c77cbf9ef13e3a1 Mon Sep 17 00:00:00 2001 From: Felix Jentzsch Date: Thu, 1 Jun 2023 13:51:12 +0200 Subject: [PATCH 5/5] Minor fixes and workarounds for version updates --- src/finn/analysis/fpgadataflow/post_synth_res.py | 2 +- tests/end2end/test_end2end_bnn_pynq.py | 6 +++--- tests/fpgadataflow/test_convert_to_hls_layers_cnv.py | 3 ++- tests/fpgadataflow/test_convert_to_hls_layers_fc.py | 4 +++- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/finn/analysis/fpgadataflow/post_synth_res.py b/src/finn/analysis/fpgadataflow/post_synth_res.py index 8b9c5d2a04..1202120529 100644 --- a/src/finn/analysis/fpgadataflow/post_synth_res.py +++ b/src/finn/analysis/fpgadataflow/post_synth_res.py @@ -85,7 +85,7 @@ def get_instance_stats(inst_name): row = root.findall(".//*[@contents='%s']/.." % inst_name) if row != []: node_dict = {} - row = row[0].getchildren() + row = list(row[0]) for (restype, ind) in restype_to_ind.items(): node_dict[restype] = int(row[ind].attrib["contents"]) return node_dict diff --git a/tests/end2end/test_end2end_bnn_pynq.py b/tests/end2end/test_end2end_bnn_pynq.py index 62b76d2f13..4c68a018db 100644 --- a/tests/end2end/test_end2end_bnn_pynq.py +++ b/tests/end2end/test_end2end_bnn_pynq.py @@ -328,13 +328,13 @@ def test_export(self, topology, wbits, abits, QONNX_export): (model, ishape) = get_trained_network_and_ishape(topology, wbits, abits) chkpt_name = get_checkpoint_name(topology, wbits, abits, QONNX_export, "export") if QONNX_export: - export_qonnx(model, torch.randn(ishape), chkpt_name) + export_qonnx(model, torch.randn(ishape), chkpt_name, opset_version=13) qonnx_cleanup(chkpt_name, out_file=chkpt_name) model = ModelWrapper(chkpt_name) model = model.transform(ConvertQONNXtoFINN()) model.save(chkpt_name) else: - export_finn_onnx(model, torch.randn(ishape), chkpt_name) + export_finn_onnx(model, torch.randn(ishape), chkpt_name, opset_version=13) nname = "%s_w%da%d" % (topology, wbits, abits) update_dashboard_data(topology, wbits, abits, "network", nname) dtstr = datetime.now().strftime("%Y-%m-%d %H:%M:%S") @@ -374,7 +374,7 @@ def test_add_pre_and_postproc(self, topology, wbits, abits, QONNX_export): chkpt_preproc_name = get_checkpoint_name( topology, wbits, abits, QONNX_export, "preproc" ) - export_finn_onnx(totensor_pyt, torch.randn(ishape), chkpt_preproc_name) + export_finn_onnx(totensor_pyt, torch.randn(ishape), chkpt_preproc_name, opset_version=13) assert os.path.isfile(chkpt_preproc_name) # join preprocessing and core model pre_model = ModelWrapper(chkpt_preproc_name) diff --git a/tests/fpgadataflow/test_convert_to_hls_layers_cnv.py b/tests/fpgadataflow/test_convert_to_hls_layers_cnv.py index 73721b6cc5..001c353c8e 100644 --- a/tests/fpgadataflow/test_convert_to_hls_layers_cnv.py +++ b/tests/fpgadataflow/test_convert_to_hls_layers_cnv.py @@ -38,7 +38,7 @@ from qonnx.custom_op.registry import getCustomOp from qonnx.transformation.bipolar_to_xnor import ConvertBipolarMatMulToXnorPopcount from qonnx.transformation.fold_constants import FoldConstants -from qonnx.transformation.general import GiveReadableTensorNames, GiveUniqueNodeNames +from qonnx.transformation.general import GiveReadableTensorNames, GiveUniqueNodeNames, GiveUniqueParameterTensors from qonnx.transformation.infer_data_layouts import InferDataLayouts from qonnx.transformation.infer_shapes import InferShapes from qonnx.transformation.lower_convs_to_matmul import LowerConvsToMatMul @@ -67,6 +67,7 @@ def test_convert_to_hls_layers_cnv_w1a1(fused_activation): model = model.transform(InferShapes()) model = model.transform(FoldConstants()) model = model.transform(GiveUniqueNodeNames()) + model = model.transform(GiveUniqueParameterTensors()) model = model.transform(GiveReadableTensorNames()) model = model.transform(Streamline()) model = model.transform(LowerConvsToMatMul()) diff --git a/tests/fpgadataflow/test_convert_to_hls_layers_fc.py b/tests/fpgadataflow/test_convert_to_hls_layers_fc.py index 5a45638ba1..0fa7155ac5 100644 --- a/tests/fpgadataflow/test_convert_to_hls_layers_fc.py +++ b/tests/fpgadataflow/test_convert_to_hls_layers_fc.py @@ -39,7 +39,7 @@ from qonnx.custom_op.registry import getCustomOp from qonnx.transformation.bipolar_to_xnor import ConvertBipolarMatMulToXnorPopcount from qonnx.transformation.fold_constants import FoldConstants -from qonnx.transformation.general import GiveReadableTensorNames, GiveUniqueNodeNames +from qonnx.transformation.general import GiveReadableTensorNames, GiveUniqueNodeNames, GiveUniqueParameterTensors from qonnx.transformation.infer_shapes import InferShapes import finn.core.onnx_exec as oxe @@ -64,6 +64,7 @@ def test_convert_to_hls_layers_tfc_w1a1(): model = model.transform(InferShapes()) model = model.transform(FoldConstants()) model = model.transform(GiveUniqueNodeNames()) + model = model.transform(GiveUniqueParameterTensors()) model = model.transform(GiveReadableTensorNames()) model = model.transform(Streamline()) model = model.transform(ConvertBipolarMatMulToXnorPopcount()) @@ -135,6 +136,7 @@ def test_convert_to_hls_layers_tfc_w1a2(): model = model.transform(InferShapes()) model = model.transform(FoldConstants()) model = model.transform(GiveUniqueNodeNames()) + model = model.transform(GiveUniqueParameterTensors()) model = model.transform(GiveReadableTensorNames()) model = model.transform(Streamline()) from finn.transformation.fpgadataflow.convert_to_hls_layers import (