EMADL2CPP issueshttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues2020-10-29T16:21:37+01:00https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/8Lab: Image based Calculator2020-10-29T16:21:37+01:00Evgeny KusmenkoLab: Image based CalculatorTo evaluate #7 the goal is to design a small EMADL model featuring several DL components as well as some math components. The input of this model are 3 MNIST pictures and 2 CIFAR10 pictures.
Each input picture is translated to its respe...To evaluate #7 the goal is to design a small EMADL model featuring several DL components as well as some math components. The input of this model are 3 MNIST pictures and 2 CIFAR10 pictures.
Each input picture is translated to its respective class number. These numbers are then fed forward to a math component which would compute a polynomial of the form y=a1*x1+a_21*x2^2 + a3, where the a's are coefficients given by the MNIST images and the x's are the variables provide by the cifar10 classes.
Please evaluate the individual test error for each component as well as the whole systems test error. Which loss function is suitable for this problem?Christopher Jan-Steffen BrixChristopher Jan-Steffen Brix2019-01-23https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/7Lab: DL Toolchain Automation2019-03-08T17:25:36+01:00Evgeny KusmenkoLab: DL Toolchain AutomationThe aim of this ticket is to make the EMADL2CPP compilation toolchain as user friendly and intuitive as possible.
**Current state:** EMADL2CPP is a code generator / compiler written to enable the compilation and training of EmbeddedMon...The aim of this ticket is to make the EMADL2CPP compilation toolchain as user friendly and intuitive as possible.
**Current state:** EMADL2CPP is a code generator / compiler written to enable the compilation and training of EmbeddedMontiArc models featuring Deep Learning based components, i.e. those having a CNNArch implementation. However, instead of doing the actual code generation itself, EMADL2CPP delegates the actual generation to the respective sub-generators: EMAM2CPP for architecture generation as well as MontiMath code generation and CNNArch2X for deep learning components (thereby X=MXNet or Caffe2). Thereby, the code is generated and the user has to make sure that the database containing the training and test data is put into the right location in the target directory structure, then train the network and compile the result to an executable file "manually".
**Goal:** Rework the EMADL2CPP compiler such that based on a given *configuration* it generates code , trains *all* the networks present in the EmbeddedMontiArc model, compiles the result to an executable in one shot (only one call allowed!).
Therefore, an additional configuration file is needed to set up the data paths for training for each DL component as well as some meta data concerning the database. A line of the configuration file might look like this (and we need a line per DL component):
`de.some.package.MyParentComponent.dlComponentToTrainInstanceName /path/to/data LMDB`
Thereby, the first argument is a fully qualified descriptor of the instance to be trained. The name of the instance is `dlComponentToTrainInstanceName`, it is instantiated in the component `MyParentComponent` residing in the package `de.some.package`.
The semantics of the line is to look up an LMDB database containing training and test data respectively in `/path/to/data`. Hence, EMADL2CPP should ask the backend compiler if it currently supports this kind of data base. If an unsopprted database type is required, an error needs to be thrown.
On the other hand, you do not want to retrain all the networks inside your model each time you change and regenerate a MontiMath component. Hence, you need to check whether training is necessary. Therfore, you might want to store an additional file containing the hash value of the data used for training in the target directory of each DL component. If neither the hash value of the training database nor the CNNArch component implementation has changed, a re-training can be omitted.
Of course, there might be scenarios where you want to force re-training and there are also scenario's where you want to omit checking the hash value as it might take a while for big databases. Therefore, please introduce two new CLI parameters for EMADL2CPP: `no-training` and `force-training`.
There is one more pitfall: sometimes you want to have several instances of the very same component, i.e. you want to allow for *weight sharing*. It should, hence, be possible to have several instances of the same DL component to share weights. On epossible solution would be to check, whether several instances mentionned in the configuration file have the same component type AND the same training data. Then the weights should be shared. As an additional alternative it makes sense to allow one to configure a component type with a database instead of a concrete instance. Then all instances of this type should share the same weight (with exceptions of concretely mentionned instances)
Feel free to ask questions, suggest improvements, and discuss new ideas.Christopher Jan-Steffen BrixChristopher Jan-Steffen Brix2019-01-31https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/15Weights as Dependencies2020-10-29T16:20:54+01:00Evgeny KusmenkoWeights as DependenciesThe goal is to be able to publish trained weights as archives (e.g. JARs)
and to use them as maven dependencies in order to skip training.
First step: define archive structure for Gluon ArchivesThe goal is to be able to publish trained weights as archives (e.g. JARs)
and to use them as maven dependencies in order to skip training.
First step: define archive structure for Gluon ArchivesYuyuan LiuYuyuan Liu2020-01-15https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/44Custom Layers2022-08-31T14:53:38+02:00Evgeny KusmenkoCustom LayersPlease implement custom layers for the PyTorch backendPlease implement custom layers for the PyTorch backendSonam Raju ChughSonam Raju Chugh2022-08-24https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/41Implement LoadNetwork layer for PyTorch backend2022-10-11T11:19:12+02:00Evgeny KusmenkoImplement LoadNetwork layer for PyTorch backendSonam Raju ChughSonam Raju Chugh2022-09-22https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/38Validation Mechanism for Components2022-10-11T11:40:17+02:00Evgeny KusmenkoValidation Mechanism for Componentsallow parameterizable components in conflang based on the components of a reference modelallow parameterizable components in conflang based on the components of a reference modelFeras MulhemFeras Mulhem2022-09-24https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/39Introduce String types in EMA2022-10-11T11:39:44+02:00Evgeny KusmenkoIntroduce String types in EMA- make it possible to use String as a type for ports and component parameters
- write tests
- This [reference model](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/applications/mnistcalculator/-/blob/16-pytorch/pytorch/predefined-...- make it possible to use String as a type for ports and component parameters
- write tests
- This [reference model](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/applications/mnistcalculator/-/blob/16-pytorch/pytorch/predefined-pipeline/src/test/resources/schemas/referencemodels/Training_Pipeline.ema) of a machine learning pipeline would parse when trying to provide String parameters in component definitions, even though no explicit support for Strings seems to take place. However, trying to instantiate the corresponding component, here `instance Data_Access ("path.to.datasource") data_access_step;` would lead to a parsing error. To reproduce this, it is sufficient to try to parse the model with the parsing API provided by the EMA language.Nazish QamarAkashKumarDSNazish Qamar2022-09-27https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/40Execution Order2022-10-11T11:24:01+02:00Evgeny KusmenkoExecution OrderUse Execution Semantics to determine the correct order of the component executionUse Execution Semantics to determine the correct order of the component executionFeras MulhemFeras Mulhem2022-10-05https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/48Extend Conf Schema for Network Optimizers2022-11-07T10:24:57+01:00Evgeny KusmenkoExtend Conf Schema for Network Optimizerssimilarly to `optimizer:sgd {...}` we want to allow the definition of `network_optimizer` parameters. Since depending on the concrete optimizer it might have varying parameters, e.g. alpha, beta in the case of efficient net, it should be...similarly to `optimizer:sgd {...}` we want to allow the definition of `network_optimizer` parameters. Since depending on the concrete optimizer it might have varying parameters, e.g. alpha, beta in the case of efficient net, it should be written in a nested way similarly to the optimizer example as `network_optimizer:efficientnet {efficientnet specific params come here}` or `network_optimizer:adanet{adanetspecific params come here}`Hiroshi HamanoAkashKumarDSHiroshi Hamano2022-10-18https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/54CustomLayerPyTorchTest2022-11-09T09:36:16+01:00Evgeny KusmenkoCustomLayerPyTorchTest- currently does not throw the expected exception although the output seems to be correct. Please analyse what the reason is and fix test- currently does not throw the expected exception although the output seems to be correct. Please analyse what the reason is and fix testTobias HörnschemeyerHiroshi HamanoTobias Hörnschemeyer2022-11-09https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/58PrettyPrinter for ArchitectureSymbol2022-11-18T11:55:15+01:00Evgeny KusmenkoPrettyPrinter for ArchitectureSymbolplease create a prettyprinter for architecture symbols, so that we can get textual MontiAnna models for given Architecture symbolsplease create a prettyprinter for architecture symbols, so that we can get textual MontiAnna models for given Architecture symbolsTobias HörnschemeyerNazish QamarTobias Hörnschemeyer2022-11-21https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/51Create EfficientNet algorithm2022-11-25T12:44:31+01:00Evgeny KusmenkoCreate EfficientNet algorithmTobias HörnschemeyerNazish QamarTobias Hörnschemeyer2022-11-21https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/50Create AdaNet algorithm2022-11-16T16:07:55+01:00Evgeny KusmenkoCreate AdaNet algorithmTobias HörnschemeyerNazish QamarTobias Hörnschemeyer2022-11-21https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/56Input output of architecture search should be ArchitectureSymbol2022-11-25T12:44:31+01:00Evgeny KusmenkoInput output of architecture search should be ArchitectureSymbolMake sure an architecture optimizer takes ArchitetureSymbol as input and has an ArchitectureSymbol as output.
The output AS is then given to the pipeline / code generator , evaluated and the AutoML algoirthm gets the new AS and the eval ...Make sure an architecture optimizer takes ArchitetureSymbol as input and has an ArchitectureSymbol as output.
The output AS is then given to the pipeline / code generator , evaluated and the AutoML algoirthm gets the new AS and the eval metric as input for the next iterationTobias HörnschemeyerNazish QamarTobias Hörnschemeyer2022-11-23https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/52Create parser for MontiAnna languages2022-11-27T11:35:22+01:00Feras MulhemCreate parser for MontiAnna languagesDifferent ways can be observed that are used to parse EMADL models and their related models. The goal of this issue is to modularise und unify the parsing interface.
**Included languages**
- ConfLang
- SchemaLang
- EmbeddedMontiArc (EMA...Different ways can be observed that are used to parse EMADL models and their related models. The goal of this issue is to modularise und unify the parsing interface.
**Included languages**
- ConfLang
- SchemaLang
- EmbeddedMontiArc (EMA)
**Tasks**
- [x] create parsing classes
- [x] parse a ConfLang configuration and return symbol-augmented AST
- [x] parse a SchemaLang schema and return symbol-augmented AST
- [x] parse an EMA model and return symbol-augmented AST
- [x] parse EMADL model with CNN architecture into symbol-augmented AST
- [x] test it on [LeNetNetwork](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/blob/master/src/test/resources/models/mnist/LeNetNetwork.emadl)
**Notes**
- The lenet network is crucial for the [evaluation ](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/applications/mnistpredictor) part and has priorityTobias HörnschemeyerFeras MulhemTobias Hörnschemeyer2022-11-28https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/61Ranges syntax2023-01-07T11:41:08+01:00Evgeny KusmenkoRanges syntaxMake sure you are using the range syntax of EmbeddedMontiArc languagescommons
use Commons2 grammar in ConfLang for thisMake sure you are using the range syntax of EmbeddedMontiArc languagescommons
use Commons2 grammar in ConfLang for thisHiroshi HamanoAkashKumarDSHiroshi Hamano2022-11-30https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/57Input of hyperparameter configuration optimization2023-02-11T11:51:00+01:00Evgeny KusmenkoInput of hyperparameter configuration optimizationInput and output of hyperparameter configuration optimization should be the Configuration object (get in touch with @feras.m94.4 to find out which class he uses)Input and output of hyperparameter configuration optimization should be the Configuration object (get in touch with @feras.m94.4 to find out which class he uses)Hiroshi HamanoAkashKumarDSHiroshi Hamano2022-11-30https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/62Object diagrams for model transformations Architecture2023-01-07T12:43:09+01:00Evgeny KusmenkoObject diagrams for model transformations ArchitecturePlease create object diagrams representing the AST/symbol table of a network architecture for several steps of each architecture search algorithm you implementPlease create object diagrams representing the AST/symbol table of a network architecture for several steps of each architecture search algorithm you implementTobias HörnschemeyerNazish QamarTobias Hörnschemeyer2022-12-13https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/49Create Workflow for Autonomous Pipeline Execution2023-01-28T22:17:41+01:00Evgeny KusmenkoCreate Workflow for Autonomous Pipeline ExecutionIn montipipes#1 a python script was generated to execute a python pipeline. In this issue **minimal** workflow shall be created to test functionality integration into the framework
**Tasks**
- [x] dedicated classes to execute the follow...In montipipes#1 a python script was generated to execute a python pipeline. In this issue **minimal** workflow shall be created to test functionality integration into the framework
**Tasks**
- [x] dedicated classes to execute the following steps
- [x] parsing
- [x] parse appropriate pipeline model
- [x] parse pipeline configuration
- [x] parse training configuration
- [x] symbol table for EMA pipeline
- [x] symbol table for training and pipeline configurations
- [x] check CoCos
- [x] inter-model validations (schemas / configurations):
- [x] generate backend-related artefacts
- [x] wrap EMADLGenerator with new main generator (MontiAnnaGenerator)
- [x] refactor MontiAnnaGenerator using EMADLGenerator functionality
- [x] provide python training configuration
- [x] use default if not generated
- [x] generate the configuration
- [x] choose the appropriate schema API
- [x] calculate execution semantic
- [x] generate pipeline script
- [x] execute pipeline
- [x] read results
- [x] Discuss TODOS
**Issues**
- [x] Problem with parsing LeNet model with generic parameters
**Notes**
- EMADLGenerator for inspiration
- Defaults are to be used to create quick demonstration
- Only PyTorch is supported as backend for nowTobias HörnschemeyerFeras MulhemNazish QamarTobias Hörnschemeyer2022-12-30https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/105Make python component library usable as a central resource (stored in EMADL2CPP)2023-02-22T12:25:45+01:00aixaiMake python component library usable as a central resource (stored in EMADL2CPP)Currently we need to create python files for the pipeline components in the projects (cf mnistdetector -> library). Please make sure we have some predefined components packaged with EMADL2Cpp (or CNNArch2Pytorch or any other meaningful p...Currently we need to create python files for the pipeline components in the projects (cf mnistdetector -> library). Please make sure we have some predefined components packaged with EMADL2Cpp (or CNNArch2Pytorch or any other meaningful project) which can be used from there without having to manually copying them to the application projectTobias HörnschemeyerNazish QamarHiroshi HamanoAkashKumarDSTobias Hörnschemeyer2023-02-18