{"id":14958698,"url":"https://github.com/impetus-udes/rule4ml","last_synced_at":"2026-01-21T01:09:14.969Z","repository":{"id":248697723,"uuid":"823682123","full_name":"IMPETUS-UdeS/rule4ml","owner":"IMPETUS-UdeS","description":"Resource Utilization and Latency Estimation for ML on FPGA.","archived":false,"fork":false,"pushed_at":"2025-09-23T05:25:15.000Z","size":8504,"stargazers_count":15,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-09-23T12:01:01.753Z","etag":null,"topics":["fpga","hls","keras","machine-learning","neural-network","onnx","prediction","python","pytorch","regression-models","resource-utilization","surrogate-models","vitis","vivado"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IMPETUS-UdeS.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-07-03T13:57:48.000Z","updated_at":"2025-07-24T17:54:53.000Z","dependencies_parsed_at":"2024-07-19T10:46:06.174Z","dependency_job_id":"9a8744b2-d736-4b05-b39d-2b72f025d975","html_url":"https://github.com/IMPETUS-UdeS/rule4ml","commit_stats":{"total_commits":3,"total_committers":1,"mean_commits":3.0,"dds":0.0,"last_synced_commit":"27e640b87bad897f5a2bf41b844c55ac6cb38a60"},"previous_names":["impetus-udes/rule4ml"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/IMPETUS-UdeS/rule4ml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IMPETUS-UdeS%2Frule4ml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IMPETUS-UdeS%2Frule4ml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IMPETUS-UdeS%2Frule4ml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IMPETUS-UdeS%2Frule4ml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IMPETUS-UdeS","download_url":"https://codeload.github.com/IMPETUS-UdeS/rule4ml/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IMPETUS-UdeS%2Frule4ml/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277652902,"owners_count":25854381,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-30T02:00:09.208Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fpga","hls","keras","machine-learning","neural-network","onnx","prediction","python","pytorch","regression-models","resource-utilization","surrogate-models","vitis","vivado"],"created_at":"2024-09-24T13:17:51.963Z","updated_at":"2026-01-21T01:09:14.961Z","avatar_url":"https://github.com/IMPETUS-UdeS.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![License](https://img.shields.io/badge/License-GPL_3.0-red.svg)](https://opensource.org/license/gpl-3-0)\n[![PyPI version](https://badge.fury.io/py/rule4ml.svg)](https://badge.fury.io/py/rule4ml)\n\n# rule4ml: Resource Utilization and Latency Estimation for ML\n\n`rule4ml` is a tool designed for pre-synthesis estimation of FPGA resource utilization and inference latency for machine learning models.\n\n## Installation\n\n`rule4ml` releases are uploaded to the Python Package Index for easy installation via `pip`.\n\n```bash\npip install rule4ml\n```\n\nThis will only install the [base package](https://github.com/IMPETUS-UdeS/rule4ml/tree/main/rule4ml) and its dependencies for resources and latency prediction. The [data_gen](https://github.com/IMPETUS-UdeS/rule4ml/tree/main/data_gen/) scripts and the [Jupyter notebooks](https://github.com/IMPETUS-UdeS/rule4ml/tree/main/notebooks) are to be cloned from the repo if needed.\n\nThe data generation dependencies are listed seperately in [data_gen/requirements.txt](https://github.com/IMPETUS-UdeS/rule4ml/tree/main/data_gen/requirements.txt), or can be installed with:\n\n```bash\npip install rule4ml[datagen]\n```\n\n## Getting Started\n\n### Tutorial\nTo get started with `rule4ml`, please refer to the detailed Jupyter Notebook [tutorial](https://github.com/IMPETUS-UdeS/rule4ml/tree/main/notebooks/tutorial.ipynb). This tutorial covers:\n\n- Using pre-trained estimators for resources and latency predictions.\n- Generating synthetic datasets.\n- Training and testing your own predictors.\n\n### Usage\nHere's a quick example of how to use `rule4ml` to estimate resources and latency for a given model:\n\n```python\nimport keras\nfrom keras.layers import Input, Dense, Activation\n\nfrom rule4ml.models.wrappers import MultiModelWrapper\n\n# Example of a simple keras Model\ninput_size = 16\ninputs = Input(shape=(input_size,))\nx = Dense(32, activation=\"relu\")(inputs)\nx = Dense(32, activation=\"relu\")(x)\nx = Dense(32, activation=\"relu\")(x)\noutputs = Dense(5, activation=\"softmax\")(x)\n\nmodel_to_predict = keras.Model(inputs=inputs, outputs=outputs, name=\"Jet Classifier\")\nmodel_to_predict.build((None, input_size))  # building keras models is required\n\n# Loading default predictors\nestimator = MultiModelWrapper()\nestimator.load_default_models()\n\n# MultiModelWrapper predictions are formatted as a pandas DataFrame\nprediction_df = estimator.predict(model_to_predict)\n\n# Further formatting can be applied to organize the DataFrame\nif not prediction_df.empty:\n    prediction_df = prediction_df.groupby(\n        [\"Model\", \"Board\", \"Strategy\", \"Precision\", \"Reuse Factor\", \"HLS4ML Version\", \"Vivado Version\"], observed=True\n    ).mean()  # each row is unique in the groupby, mean() is only called to convert DataFrameGroupBy\n\n# Outside of Jupyter notebooks, we recommend saving the DataFrame as HTML for better readability\nprediction_df.to_html(\"keras_example.html\")\n```\n\n**keras_example.html** (truncated)\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003eBRAM\u003c/th\u003e\n      \u003cth\u003eBRAM (%)\u003c/th\u003e\n      \u003cth\u003eDSP\u003c/th\u003e\n      \u003cth\u003eDSP (%)\u003c/th\u003e\n      \u003cth\u003eFF\u003c/th\u003e\n      \u003cth\u003eFF (%)\u003c/th\u003e\n      \u003cth\u003eLUT\u003c/th\u003e\n      \u003cth\u003eLUT (%)\u003c/th\u003e\n      \u003cth\u003eCYCLES\u003c/th\u003e\n      \u003cth\u003eINTERVAL\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eModel\u003c/th\u003e\n      \u003cth\u003eBoard\u003c/th\u003e\n      \u003cth\u003eStrategy\u003c/th\u003e\n      \u003cth\u003ePrecision\u003c/th\u003e\n      \u003cth\u003eReuse Factor\u003c/th\u003e\n      \u003cth\u003eHLS4ML Version\u003c/th\u003e\n      \u003cth\u003eVivado Version\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth rowspan=\"4032\" valign=\"top\"\u003eJet Classifier\u003c/th\u003e\n      \u003cth rowspan=\"1008\" valign=\"top\"\u003epynq-z2\u003c/th\u003e\n      \u003cth rowspan=\"504\" valign=\"top\"\u003elatency\u003c/th\u003e\n      \u003cth rowspan=\"168\" valign=\"top\"\u003eap_fixed\u0026lt;2, 1\u0026gt;\u003c/th\u003e\n      \u003cth rowspan=\"24\" valign=\"top\"\u003e1\u003c/th\u003e\n      \u003cth rowspan=\"12\" valign=\"top\"\u003e0.8.1\u003c/th\u003e\n      \u003cth\u003e2019.1\u003c/th\u003e\n      \u003ctd\u003e2.52\u003c/td\u003e\n      \u003ctd\u003e0.90\u003c/td\u003e\n      \u003ctd\u003e0.32\u003c/td\u003e\n      \u003ctd\u003e0.14\u003c/td\u003e\n      \u003ctd\u003e1265.02\u003c/td\u003e\n      \u003ctd\u003e1.19\u003c/td\u003e\n      \u003ctd\u003e3564.90\u003c/td\u003e\n      \u003ctd\u003e6.70\u003c/td\u003e\n      \u003ctd\u003e125.77\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2019.2\u003c/th\u003e\n      \u003ctd\u003e2.47\u003c/td\u003e\n      \u003ctd\u003e0.88\u003c/td\u003e\n      \u003ctd\u003e0.48\u003c/td\u003e\n      \u003ctd\u003e0.22\u003c/td\u003e\n      \u003ctd\u003e1262.29\u003c/td\u003e\n      \u003ctd\u003e1.19\u003c/td\u003e\n      \u003ctd\u003e3380.57\u003c/td\u003e\n      \u003ctd\u003e6.35\u003c/td\u003e\n      \u003ctd\u003e115.48\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2020.1\u003c/th\u003e\n      \u003ctd\u003e2.29\u003c/td\u003e\n      \u003ctd\u003e0.82\u003c/td\u003e\n      \u003ctd\u003e0.49\u003c/td\u003e\n      \u003ctd\u003e0.22\u003c/td\u003e\n      \u003ctd\u003e1109.34\u003c/td\u003e\n      \u003ctd\u003e1.04\u003c/td\u003e\n      \u003ctd\u003e3279.37\u003c/td\u003e\n      \u003ctd\u003e6.16\u003c/td\u003e\n      \u003ctd\u003e115.62\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2020.2\u003c/th\u003e\n      \u003ctd\u003e2.55\u003c/td\u003e\n      \u003ctd\u003e0.91\u003c/td\u003e\n      \u003ctd\u003e0.53\u003c/td\u003e\n      \u003ctd\u003e0.24\u003c/td\u003e\n      \u003ctd\u003e1490.04\u003c/td\u003e\n      \u003ctd\u003e1.40\u003c/td\u003e\n      \u003ctd\u003e3457.23\u003c/td\u003e\n      \u003ctd\u003e6.50\u003c/td\u003e\n      \u003ctd\u003e118.07\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2021.1\u003c/th\u003e\n      \u003ctd\u003e2.31\u003c/td\u003e\n      \u003ctd\u003e0.83\u003c/td\u003e\n      \u003ctd\u003e0.44\u003c/td\u003e\n      \u003ctd\u003e0.20\u003c/td\u003e\n      \u003ctd\u003e1054.50\u003c/td\u003e\n      \u003ctd\u003e0.99\u003c/td\u003e\n      \u003ctd\u003e2915.67\u003c/td\u003e\n      \u003ctd\u003e5.48\u003c/td\u003e\n      \u003ctd\u003e118.99\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2021.2\u003c/th\u003e\n      \u003ctd\u003e2.48\u003c/td\u003e\n      \u003ctd\u003e0.89\u003c/td\u003e\n      \u003ctd\u003e0.58\u003c/td\u003e\n      \u003ctd\u003e0.26\u003c/td\u003e\n      \u003ctd\u003e1085.17\u003c/td\u003e\n      \u003ctd\u003e1.02\u003c/td\u003e\n      \u003ctd\u003e3072.19\u003c/td\u003e\n      \u003ctd\u003e5.77\u003c/td\u003e\n      \u003ctd\u003e117.91\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2022.1\u003c/th\u003e\n      \u003ctd\u003e2.53\u003c/td\u003e\n      \u003ctd\u003e0.90\u003c/td\u003e\n      \u003ctd\u003e0.47\u003c/td\u003e\n      \u003ctd\u003e0.21\u003c/td\u003e\n      \u003ctd\u003e1301.50\u003c/td\u003e\n      \u003ctd\u003e1.22\u003c/td\u003e\n      \u003ctd\u003e3093.67\u003c/td\u003e\n      \u003ctd\u003e5.82\u003c/td\u003e\n      \u003ctd\u003e119.36\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2022.2\u003c/th\u003e\n      \u003ctd\u003e2.43\u003c/td\u003e\n      \u003ctd\u003e0.87\u003c/td\u003e\n      \u003ctd\u003e0.57\u003c/td\u003e\n      \u003ctd\u003e0.26\u003c/td\u003e\n      \u003ctd\u003e1150.09\u003c/td\u003e\n      \u003ctd\u003e1.08\u003c/td\u003e\n      \u003ctd\u003e3032.74\u003c/td\u003e\n      \u003ctd\u003e5.70\u003c/td\u003e\n      \u003ctd\u003e119.39\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2023.1\u003c/th\u003e\n      \u003ctd\u003e2.51\u003c/td\u003e\n      \u003ctd\u003e0.90\u003c/td\u003e\n      \u003ctd\u003e0.59\u003c/td\u003e\n      \u003ctd\u003e0.27\u003c/td\u003e\n      \u003ctd\u003e1357.55\u003c/td\u003e\n      \u003ctd\u003e1.28\u003c/td\u003e\n      \u003ctd\u003e3327.19\u003c/td\u003e\n      \u003ctd\u003e6.25\u003c/td\u003e\n      \u003ctd\u003e118.30\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2023.2\u003c/th\u003e\n      \u003ctd\u003e2.39\u003c/td\u003e\n      \u003ctd\u003e0.85\u003c/td\u003e\n      \u003ctd\u003e0.29\u003c/td\u003e\n      \u003ctd\u003e0.13\u003c/td\u003e\n      \u003ctd\u003e304.04\u003c/td\u003e\n      \u003ctd\u003e0.29\u003c/td\u003e\n      \u003ctd\u003e2689.27\u003c/td\u003e\n      \u003ctd\u003e5.06\u003c/td\u003e\n      \u003ctd\u003e108.34\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2024.1\u003c/th\u003e\n      \u003ctd\u003e2.41\u003c/td\u003e\n      \u003ctd\u003e0.86\u003c/td\u003e\n      \u003ctd\u003e0.54\u003c/td\u003e\n      \u003ctd\u003e0.25\u003c/td\u003e\n      \u003ctd\u003e1574.28\u003c/td\u003e\n      \u003ctd\u003e1.48\u003c/td\u003e\n      \u003ctd\u003e3517.61\u003c/td\u003e\n      \u003ctd\u003e6.61\u003c/td\u003e\n      \u003ctd\u003e116.26\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2024.2\u003c/th\u003e\n      \u003ctd\u003e2.08\u003c/td\u003e\n      \u003ctd\u003e0.74\u003c/td\u003e\n      \u003ctd\u003e0.77\u003c/td\u003e\n      \u003ctd\u003e0.35\u003c/td\u003e\n      \u003ctd\u003e936.16\u003c/td\u003e\n      \u003ctd\u003e0.88\u003c/td\u003e\n      \u003ctd\u003e2780.73\u003c/td\u003e\n      \u003ctd\u003e5.23\u003c/td\u003e\n      \u003ctd\u003e110.77\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth rowspan=\"12\" valign=\"top\"\u003e1.1.0\u003c/th\u003e\n      \u003cth\u003e2019.1\u003c/th\u003e\n      \u003ctd\u003e2.57\u003c/td\u003e\n      \u003ctd\u003e0.92\u003c/td\u003e\n      \u003ctd\u003e1.16\u003c/td\u003e\n      \u003ctd\u003e0.53\u003c/td\u003e\n      \u003ctd\u003e1237.20\u003c/td\u003e\n      \u003ctd\u003e1.16\u003c/td\u003e\n      \u003ctd\u003e2434.88\u003c/td\u003e\n      \u003ctd\u003e4.58\u003c/td\u003e\n      \u003ctd\u003e37.70\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2019.2\u003c/th\u003e\n      \u003ctd\u003e2.53\u003c/td\u003e\n      \u003ctd\u003e0.90\u003c/td\u003e\n      \u003ctd\u003e1.39\u003c/td\u003e\n      \u003ctd\u003e0.63\u003c/td\u003e\n      \u003ctd\u003e1273.41\u003c/td\u003e\n      \u003ctd\u003e1.20\u003c/td\u003e\n      \u003ctd\u003e2317.88\u003c/td\u003e\n      \u003ctd\u003e4.36\u003c/td\u003e\n      \u003ctd\u003e28.73\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2020.1\u003c/th\u003e\n      \u003ctd\u003e2.35\u003c/td\u003e\n      \u003ctd\u003e0.84\u003c/td\u003e\n      \u003ctd\u003e1.42\u003c/td\u003e\n      \u003ctd\u003e0.65\u003c/td\u003e\n      \u003ctd\u003e1023.07\u003c/td\u003e\n      \u003ctd\u003e0.96\u003c/td\u003e\n      \u003ctd\u003e2275.59\u003c/td\u003e\n      \u003ctd\u003e4.28\u003c/td\u003e\n      \u003ctd\u003e28.97\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2020.2\u003c/th\u003e\n      \u003ctd\u003e2.64\u003c/td\u003e\n      \u003ctd\u003e0.94\u003c/td\u003e\n      \u003ctd\u003e1.45\u003c/td\u003e\n      \u003ctd\u003e0.66\u003c/td\u003e\n      \u003ctd\u003e1314.61\u003c/td\u003e\n      \u003ctd\u003e1.24\u003c/td\u003e\n      \u003ctd\u003e2359.94\u003c/td\u003e\n      \u003ctd\u003e4.44\u003c/td\u003e\n      \u003ctd\u003e30.62\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2021.1\u003c/th\u003e\n      \u003ctd\u003e2.34\u003c/td\u003e\n      \u003ctd\u003e0.84\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n      \u003ctd\u003e0.61\u003c/td\u003e\n      \u003ctd\u003e983.35\u003c/td\u003e\n      \u003ctd\u003e0.92\u003c/td\u003e\n      \u003ctd\u003e2025.47\u003c/td\u003e\n      \u003ctd\u003e3.81\u003c/td\u003e\n      \u003ctd\u003e31.37\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2021.2\u003c/th\u003e\n      \u003ctd\u003e2.56\u003c/td\u003e\n      \u003ctd\u003e0.91\u003c/td\u003e\n      \u003ctd\u003e1.50\u003c/td\u003e\n      \u003ctd\u003e0.68\u003c/td\u003e\n      \u003ctd\u003e1149.12\u003c/td\u003e\n      \u003ctd\u003e1.08\u003c/td\u003e\n      \u003ctd\u003e2167.54\u003c/td\u003e\n      \u003ctd\u003e4.07\u003c/td\u003e\n      \u003ctd\u003e30.66\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2022.1\u003c/th\u003e\n      \u003ctd\u003e2.65\u003c/td\u003e\n      \u003ctd\u003e0.95\u003c/td\u003e\n      \u003ctd\u003e1.39\u003c/td\u003e\n      \u003ctd\u003e0.63\u003c/td\u003e\n      \u003ctd\u003e1104.21\u003c/td\u003e\n      \u003ctd\u003e1.04\u003c/td\u003e\n      \u003ctd\u003e2131.50\u003c/td\u003e\n      \u003ctd\u003e4.01\u003c/td\u003e\n      \u003ctd\u003e31.74\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2022.2\u003c/th\u003e\n      \u003ctd\u003e2.47\u003c/td\u003e\n      \u003ctd\u003e0.88\u003c/td\u003e\n      \u003ctd\u003e1.49\u003c/td\u003e\n      \u003ctd\u003e0.68\u003c/td\u003e\n      \u003ctd\u003e1200.66\u003c/td\u003e\n      \u003ctd\u003e1.13\u003c/td\u003e\n      \u003ctd\u003e2120.53\u003c/td\u003e\n      \u003ctd\u003e3.99\u003c/td\u003e\n      \u003ctd\u003e31.79\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2023.1\u003c/th\u003e\n      \u003ctd\u003e2.58\u003c/td\u003e\n      \u003ctd\u003e0.92\u003c/td\u003e\n      \u003ctd\u003e1.64\u003c/td\u003e\n      \u003ctd\u003e0.74\u003c/td\u003e\n      \u003ctd\u003e1247.67\u003c/td\u003e\n      \u003ctd\u003e1.17\u003c/td\u003e\n      \u003ctd\u003e2301.45\u003c/td\u003e\n      \u003ctd\u003e4.33\u003c/td\u003e\n      \u003ctd\u003e30.79\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2023.2\u003c/th\u003e\n      \u003ctd\u003e2.49\u003c/td\u003e\n      \u003ctd\u003e0.89\u003c/td\u003e\n      \u003ctd\u003e1.14\u003c/td\u003e\n      \u003ctd\u003e0.52\u003c/td\u003e\n      \u003ctd\u003e499.64\u003c/td\u003e\n      \u003ctd\u003e0.47\u003c/td\u003e\n      \u003ctd\u003e1795.66\u003c/td\u003e\n      \u003ctd\u003e3.38\u003c/td\u003e\n      \u003ctd\u003e25.01\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2024.1\u003c/th\u003e\n      \u003ctd\u003e2.46\u003c/td\u003e\n      \u003ctd\u003e0.88\u003c/td\u003e\n      \u003ctd\u003e1.45\u003c/td\u003e\n      \u003ctd\u003e0.66\u003c/td\u003e\n      \u003ctd\u003e1373.96\u003c/td\u003e\n      \u003ctd\u003e1.29\u003c/td\u003e\n      \u003ctd\u003e2405.98\u003c/td\u003e\n      \u003ctd\u003e4.52\u003c/td\u003e\n      \u003ctd\u003e29.38\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2024.2\u003c/th\u003e\n      \u003ctd\u003e2.09\u003c/td\u003e\n      \u003ctd\u003e0.75\u003c/td\u003e\n      \u003ctd\u003e1.99\u003c/td\u003e\n      \u003ctd\u003e0.91\u003c/td\u003e\n      \u003ctd\u003e1059.89\u003c/td\u003e\n      \u003ctd\u003e1.00\u003c/td\u003e\n      \u003ctd\u003e2089.47\u003c/td\u003e\n      \u003ctd\u003e3.93\u003c/td\u003e\n      \u003ctd\u003e26.71\u003c/td\u003e\n      \u003ctd\u003e1.35\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n## Datasets\nTraining accurate predictors requires large datasets of synthesized neural networks. We used [hls4ml](https://github.com/fastmachinelearning/hls4ml) to synthesize neural networks generated with parameters randomly sampled from predefined ranges (defaults of data classes in the code). Our models' training data is publicly available at [https://borealisdata.ca/dataverse/rule4ml](https://borealisdata.ca/dataverse/rule4ml).\n\nNewer predictors were trained on `wa-hls4ml`, a bigger dataset including more architectures and parameter ranges. This dataset, along with the HLS project files, can be found at [https://huggingface.co/datasets/fastmachinelearning/wa-hls4ml](https://huggingface.co/datasets/fastmachinelearning/wa-hls4ml) and [https://huggingface.co/datasets/fastmachinelearning/wa-hls4ml-projects](https://huggingface.co/datasets/fastmachinelearning/wa-hls4ml-projects).\n\n## Limitations\nIn their current iteration, the predictors can process [Keras](https://keras.io/about/) or [PyTorch](https://pytorch.org/tutorials/beginner/basics/quickstart_tutorial.html) models to generate FPGA resources (**BRAM**, **DSP**, **FF**, **LUT**) and latency (**Clock Cycles**) estimations for various synthesis configurations. However, the training models are limited to specific layers: **Dense/Linear**, **ReLU**, **Tanh**, **Sigmoid**, **Softmax**, **BatchNorm**, **Add**, **Concatenate**, and **Dropout**. They are also constrained by synthesis parameters, notably **clock_period** (10 ns) and **io_type** (io_parallel). Inputs outside these configurations may result in inaccurate predictions.\n\n## License\nThis project is licensed under the GPL-3.0 License. See the [LICENSE](https://github.com/IMPETUS-UdeS/rule4ml/tree/main/LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimpetus-udes%2Frule4ml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimpetus-udes%2Frule4ml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimpetus-udes%2Frule4ml/lists"}