Skip to content

Configuration editor

Javier Duarte requested to merge github/fork/vloncar/config_editor into main

Created by: vloncar

Description

Changing configuration in hls4ml requires deep understanding of the conversion process in order to be successful. New layers can be introduced, which pick up default precision definition causing problems for subsequent layers, unexpected allocation of DSPs etc. To solve this, users have to anticipate new layer names and with a meticulous trial-and-error procedure nail the initial configuration that will result in perfect conversion. This is way too cumbersome but until we have a better configuration system it is the only way. This PR proposes an alternative, to be able update the configuration of an existing hls4ml model interactively, via a GUI. It came out of a crazy idea I had last night after a few beers. See it in action:

Screenshot from 2023-05-08 21-26-23

It is very simple to use, make your changes and click "Update", the model will be updated and the changes should be reflected on the architecture plot on the left side.

This builds upon the recent automatic configuration support, by exposing only the configurable attributes (precision, strategy, RF etc). Some parts of it are a bit hacky for now, until we improve the configuration itself (ideally, we should have an model.get_config()/model.set_config() API).

The GUI is built using PySimpleGUI library, you can install it with pip install pysimplegui. Since the feature is optional, I also added an installation extra, so installation of pip install hls4ml[gui] will ensure the dependency is there. I considered a pure Tk implementation using tkinter from the standard library to avoid the new dependency, but the equivalent GUI had 400 lines of code and no support for mouse scroll events so I abandoned it.

The GUI is part of the utilities, to use it, run:

model = hls4ml.converters.convert_from_keras_model(...)
hls4ml.utils.edit_model_configuration(model)

A GUI should open up. If you use this through SSH or VS code server it may be slow to open. I don't know what is causing this, possibly an issue with the GUI library itself. Pure tkinter implementation didn't have this issue.

In the future, we can expand it to support creating the initial configuration, based on Keras/PyTorch/ONNX model.

Type of change

Also fixes a minor bug in definition of the trace attribute (was string, should be bool) and adds strategy attribute to supported layers.

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change which adds functionality)

Tests

We currently don't have any way of testing GUIs and this is a can of worms, so I suggest we skip it for now.

Checklist

  • I have read the guidelines for contributing.
  • I have commented my code, particularly in hard-to-understand areas.
  • I have made corresponding changes to the documentation.
  • My changes generate no new warnings.
  • I have installed and run pre-commit on the files I edited or added.
  • I have added tests that prove my fix is effective or that my feature works.

Merge request reports