Name | acetone-nnet JSON |
Version |
0.3.2.post3
JSON |
| download |
home_page | None |
Summary | Predictable programming framework for ML applications in safety-critical systems. |
upload_time | 2024-07-01 14:47:12 |
maintainer | None |
docs_url | None |
author | None |
requires_python | <3.12,>=3.10 |
license | None |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# ACETONE
Predictable programming framework for ML applications in safety-critical systems.
This repo contains the code of the framework presented in the ECRTS'22 paper ["ACETONE: Predictable programming framework for ML applications in safety-critical systems"](https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.ECRTS.2022.3).
This framework generate a C code corresponding to a neural network given as input.
## Package
The corresponding package is named [acetone-nnet](https://pypi.org/project/acetone-nnet/).
The folder [tests/examples](./tests/examples/) give examples on how to use the main functionnalities of the package (code generation and debug mode)
The folder [tests/check_installation](./tests/check_installation/) give a file with a few quick test checking some main, functionalities of the package, as an quick verification of the installation.
## Code architecture
You'll find in the home directory the files regarding the licencing and copyright of the framework:
* [AUTHORS.md](./AUTHORS.md)
* [LICENSE](./LICENSE)
This directory also contains the [requirements.txt](./requirements.txt) which list the package versionning used in the framework.
The [test](./test/) directory includes several tests for the framework and the data to run them.
The [src](./src/) folder contains the backend code of ACETONE.
## Installation
### User mode
Install le package using `pip`
```
pip install acetone-nnet
```
### Development Mode
Clone the GitHub repo on your computer
```
git clone https://github.com/onera/acetone.git
```
Then install the packages listed in [`requirements.txt`](./requirements.txt)
```
pip install -r acetone/requirements.txt
```
## Code Generation
The following commands generate a test neural network before generating the corresponding C code using ACETONE.
### Generating the neural network
In the *acetone* directory
* Run the *initial_setup.py* code
```
python3 tests/models/lenet5/lenet5_example/initial_setup.py
```
This script defines a neural network with a Lenet-5 architecture using the framework Keras. It then save the model in *.h5* and *.json* files. The later one is created using a specific function, developped by us, to write the keras model in ACETONE's format. The scripts also creates a random input to test the neural network. Finally, the scripts saves and prints, as a reference, the output of the inference done by the Keras framework.
### Generating the C code with ACETONE package
Then, generate the C code with ACETONE.
* Call ACETONE with the following arguments:
* The file describing the model
* The name of the function to generate (here 'lenet5')
* The number of test to run (here 1)
* The algorithm used for the convolution layer ('6loops','indirect_gemm_'+TYPE, 'std_gemm_'+TYPE, with TYPE being amongst 'nn','nt', 'tn','tt')
* The directory in which the code will be generated
* The input file with the test data
```
acetone_generate tests/models/lenet5/lenet5_example/lenet5.h5 lenet5 1 std_gemm_nn tests/models/lenet5/lenet5_example/lenet5_generated tests/models/lenet5/lenet5_example/test_input_lenet5.txt
```
* Compile the code
```
make -C tests/models/lenet5/lenet5_example/lenet5_generated all
```
* Execute the file with the path to the directory of the output file as argument
```
./tests/models/lenet5/lenet5_example/lenet5_generated/lenet5 ./tests/models/lenet5/lenet5_example/lenet5_generated/output_acetone.txt
```
* Compare the output given by Keras and ACETONE
```
acetone_compare ./tests/models/lenet5/lenet5_example/output_keras.txt ./tests/models/lenet5/lenet5_example/lenet5_generated/output_acetone.txt 1
```
## Tests
Tests are implemented in the folder *tests*.
To run them, use the `run_tests.py` script from the `tests/` folder.
```
python3 run_tests.py all
```
You can replace the `all` argument by the name of a subfolder to only run the tests in it.
```
python3 run_tests.py FOLDER_NAME
```
where FOLDER_NAME is the name of your subfolder.
You can run one test by using the command
```
python3 -m unittest PATH_TO_TEST
```
where PATH_TO_TEST is the path tot your test.
## Reproduce the paper's experiments
To reproduce the result of semantic experiment with ACETONE as described in the paper, use the following commands:
* For the acas_decr128 model
```
acetone_generate tests/models/acas/acas_decr128/acas_decr128.json acas_dcre128 1000 std_gemm_nn tests/models/acas/acas_decr128/output_acetone tests/models/acas/acas_decr128/test_input_acas_decr128.txt
make -C tests/models/acas/acas_decr128/output_acetone all
./tests/models/acas/acas_decr128/output_acetone/acas_decr128 tests/models/acas/acas_decr128/output_acetone/output_acetone.txt
acetone_compare tests/models/acas/acas_decr128/output_keras.txt tests/models/acas/acas_decr128/output_acetone/output_acetone.txt
```
* For the lent5 model
```
acetone_generate tests/models/lenet5/lenet5_trained/lenet5_trained.json lenet5_trained 1000 std_gemm_nn tests/models/lenet5/lenet5_trained/output_acetone tests/models/lenet5_trained/test_input_lenet5.txt
make -C tests/models/lenet5/lenet5_trained/output_acetone all
./tests/models/lenet5/lenet5_trained/output_acetone/lenet5_trained tests/models/lenet5/lenet5_trained/output_acetone/output_acetone.txt
acetone_compare tests/models/lenet5/lenet5_trained/output_keras.txt tests/models/lenet5/lenet5_trained/output_acetone/output_acetone.txt
```
## Capability
Please refer to the [`implemented.md`](./implemented.md) file to see the current capabilities of the framework.
## License
The project is under the GNU Lesser General Public License as published by the Free Software Foundation ; either version 3 of the License or (at your option) any later version.
See LICENSE for details.
Raw data
{
"_id": null,
"home_page": null,
"name": "acetone-nnet",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.12,>=3.10",
"maintainer_email": null,
"keywords": null,
"author": null,
"author_email": "Yanis AIT-AISSA <Yanis.AIT-AISSA@student.isae-supaero.fr>, Thomas CARLE <Thomas.Carle@irit.fr>, Iryna DE ALBUQUERQUE SILVA <Iryna.De_Albuquerque_Silva@onera.fr>, Adrien GAUFFRIAU <Adrien.Gauffriau@airbus.com>, Benjamin LESAGE <benjamin.lesage@onera.fr>, Claire PAGETTI <Claire.Pagetti@onera.fr>",
"download_url": "https://files.pythonhosted.org/packages/13/fa/bf29ca029a43cf50add4337e65cde4fcf93d627e129070727ed7e5fb01ca/acetone_nnet-0.3.2.post3.tar.gz",
"platform": null,
"description": "# ACETONE\nPredictable programming framework for ML applications in safety-critical systems.\n\nThis repo contains the code of the framework presented in the ECRTS'22 paper [\"ACETONE: Predictable programming framework for ML applications in safety-critical systems\"](https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.ECRTS.2022.3).\n\nThis framework generate a C code corresponding to a neural network given as input.\n\n## Package\n\nThe corresponding package is named [acetone-nnet](https://pypi.org/project/acetone-nnet/). \n\nThe folder [tests/examples](./tests/examples/) give examples on how to use the main functionnalities of the package (code generation and debug mode)\n\nThe folder [tests/check_installation](./tests/check_installation/) give a file with a few quick test checking some main, functionalities of the package, as an quick verification of the installation.\n\n\n## Code architecture\n\nYou'll find in the home directory the files regarding the licencing and copyright of the framework:\n\n* [AUTHORS.md](./AUTHORS.md)\n* [LICENSE](./LICENSE)\n\nThis directory also contains the [requirements.txt](./requirements.txt) which list the package versionning used in the framework.\n\nThe [test](./test/) directory includes several tests for the framework and the data to run them.\n\nThe [src](./src/) folder contains the backend code of ACETONE.\n\n## Installation\n\n### User mode\n\nInstall le package using `pip`\n```\npip install acetone-nnet\n```\n\n\n### Development Mode\n\nClone the GitHub repo on your computer\n\n```\ngit clone https://github.com/onera/acetone.git\n```\n\nThen install the packages listed in [`requirements.txt`](./requirements.txt)\n\n```\npip install -r acetone/requirements.txt\n```\n\n\n## Code Generation\n\nThe following commands generate a test neural network before generating the corresponding C code using ACETONE.\n\n### Generating the neural network\n\nIn the *acetone* directory\n\n* Run the *initial_setup.py* code\n```\npython3 tests/models/lenet5/lenet5_example/initial_setup.py\n```\n\nThis script defines a neural network with a Lenet-5 architecture using the framework Keras. It then save the model in *.h5* and *.json* files. The later one is created using a specific function, developped by us, to write the keras model in ACETONE's format. The scripts also creates a random input to test the neural network. Finally, the scripts saves and prints, as a reference, the output of the inference done by the Keras framework.\n\n### Generating the C code with ACETONE package\n\nThen, generate the C code with ACETONE.\n\n* Call ACETONE with the following arguments:\n * The file describing the model\n * The name of the function to generate (here 'lenet5')\n * The number of test to run (here 1)\n * The algorithm used for the convolution layer ('6loops','indirect_gemm_'+TYPE, 'std_gemm_'+TYPE, with TYPE being amongst 'nn','nt', 'tn','tt')\n * The directory in which the code will be generated\n * The input file with the test data\n\n```\nacetone_generate tests/models/lenet5/lenet5_example/lenet5.h5 lenet5 1 std_gemm_nn tests/models/lenet5/lenet5_example/lenet5_generated tests/models/lenet5/lenet5_example/test_input_lenet5.txt\n```\n\n* Compile the code\n```\nmake -C tests/models/lenet5/lenet5_example/lenet5_generated all\n```\n\n* Execute the file with the path to the directory of the output file as argument\n```\n./tests/models/lenet5/lenet5_example/lenet5_generated/lenet5 ./tests/models/lenet5/lenet5_example/lenet5_generated/output_acetone.txt\n```\n\n* Compare the output given by Keras and ACETONE\n```\nacetone_compare ./tests/models/lenet5/lenet5_example/output_keras.txt ./tests/models/lenet5/lenet5_example/lenet5_generated/output_acetone.txt 1\n```\n\n## Tests\n\nTests are implemented in the folder *tests*.\n\nTo run them, use the `run_tests.py` script from the `tests/` folder.\n```\npython3 run_tests.py all\n```\n\nYou can replace the `all` argument by the name of a subfolder to only run the tests in it.\n```\npython3 run_tests.py FOLDER_NAME\n```\nwhere FOLDER_NAME is the name of your subfolder.\n\nYou can run one test by using the command\n```\npython3 -m unittest PATH_TO_TEST\n```\nwhere PATH_TO_TEST is the path tot your test.\n\n## Reproduce the paper's experiments\n\nTo reproduce the result of semantic experiment with ACETONE as described in the paper, use the following commands:\n\n* For the acas_decr128 model\n```\nacetone_generate tests/models/acas/acas_decr128/acas_decr128.json acas_dcre128 1000 std_gemm_nn tests/models/acas/acas_decr128/output_acetone tests/models/acas/acas_decr128/test_input_acas_decr128.txt\nmake -C tests/models/acas/acas_decr128/output_acetone all\n./tests/models/acas/acas_decr128/output_acetone/acas_decr128 tests/models/acas/acas_decr128/output_acetone/output_acetone.txt\nacetone_compare tests/models/acas/acas_decr128/output_keras.txt tests/models/acas/acas_decr128/output_acetone/output_acetone.txt\n```\n\n* For the lent5 model\n\n```\nacetone_generate tests/models/lenet5/lenet5_trained/lenet5_trained.json lenet5_trained 1000 std_gemm_nn tests/models/lenet5/lenet5_trained/output_acetone tests/models/lenet5_trained/test_input_lenet5.txt\nmake -C tests/models/lenet5/lenet5_trained/output_acetone all\n./tests/models/lenet5/lenet5_trained/output_acetone/lenet5_trained tests/models/lenet5/lenet5_trained/output_acetone/output_acetone.txt\nacetone_compare tests/models/lenet5/lenet5_trained/output_keras.txt tests/models/lenet5/lenet5_trained/output_acetone/output_acetone.txt\n```\n\n## Capability\n\nPlease refer to the [`implemented.md`](./implemented.md) file to see the current capabilities of the framework.\n\n## License\n\nThe project is under the GNU Lesser General Public License as published by the Free Software Foundation ; either version 3 of the License or (at your option) any later version.\n\nSee LICENSE for details.\n",
"bugtrack_url": null,
"license": null,
"summary": "Predictable programming framework for ML applications in safety-critical systems.",
"version": "0.3.2.post3",
"project_urls": {
"Bug Tracker": "https://github.com/onera/acetone/issues",
"Repository": "https://github.com/onera/acetone/"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "df49aaeac376526ab89a737a2b197c8506e35b8c160dc033337a4e72bca72642",
"md5": "21574cbf69086d33fec8f22ed1300f7f",
"sha256": "e8b14694838853a5e5fdbe4b8618183a87094422310f606475398e6b5b007077"
},
"downloads": -1,
"filename": "acetone_nnet-0.3.2.post3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "21574cbf69086d33fec8f22ed1300f7f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.12,>=3.10",
"size": 172097,
"upload_time": "2024-07-01T14:47:10",
"upload_time_iso_8601": "2024-07-01T14:47:10.412007Z",
"url": "https://files.pythonhosted.org/packages/df/49/aaeac376526ab89a737a2b197c8506e35b8c160dc033337a4e72bca72642/acetone_nnet-0.3.2.post3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "13fabf29ca029a43cf50add4337e65cde4fcf93d627e129070727ed7e5fb01ca",
"md5": "648424e5a3937cb93d6ace8533c03149",
"sha256": "84277727d678d96be373dfa33cad2f5ed0401ca08b3e5203695a346b09583c11"
},
"downloads": -1,
"filename": "acetone_nnet-0.3.2.post3.tar.gz",
"has_sig": false,
"md5_digest": "648424e5a3937cb93d6ace8533c03149",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.12,>=3.10",
"size": 82316,
"upload_time": "2024-07-01T14:47:12",
"upload_time_iso_8601": "2024-07-01T14:47:12.712735Z",
"url": "https://files.pythonhosted.org/packages/13/fa/bf29ca029a43cf50add4337e65cde4fcf93d627e129070727ed7e5fb01ca/acetone_nnet-0.3.2.post3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-07-01 14:47:12",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "onera",
"github_project": "acetone",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "acetone-nnet"
}