mlonmcu.models package

Submodules

mlonmcu.models.convert_data module

Utility to convert various types of data into MLonMCU compatible raw binary files.

mlonmcu.models.convert_data.convert(mode, val)[source]

Actual convertion function.

Returns:
databytes

Raw converted output.

Raises:
AssertionError

If the choses mode does not exist or value has a wrong shape.

ValueError

If the conversion failed.

mlonmcu.models.convert_data.main()[source]

Main entry pint handling command line options.

mlonmcu.models.convert_data.write_file(dest, data)[source]

Utility to save the file to disk.

mlonmcu.models.frontend module

class mlonmcu.models.frontend.BenchFrontend(name: str, prog_cls: Program, features=None, config=None)[source]

Bases: SimpleFrontend

generate(model) Tuple[dict, dict][source]
get_platform_config(platform)[source]
lookup_models(names, config=None, context=None)[source]
supported_names()[source]
class mlonmcu.models.frontend.CmsisDSPFrontend(features=None, config=None)[source]

Bases: BenchFrontend

get_platform_config(platform)[source]
property supported_names
class mlonmcu.models.frontend.CmsisNNFrontend(features=None, config=None)[source]

Bases: BenchFrontend

get_platform_config(platform)[source]
property supported_names
class mlonmcu.models.frontend.CoremarkFrontend(features=None, config=None)[source]

Bases: SingleBenchFrontend

REQUIRED = {}
class mlonmcu.models.frontend.CryptoBenchFrontend(features=None, config=None)[source]

Bases: BenchFrontend

property supported_names
class mlonmcu.models.frontend.DhrystoneFrontend(features=None, config=None)[source]

Bases: SingleBenchFrontend

REQUIRED = {}
class mlonmcu.models.frontend.EmbenchDSPFrontend(features=None, config=None)[source]

Bases: BenchFrontend

REQUIRED = {'embench_dsp.src_dir'}
get_platform_defs(platform)[source]
property supported_names
class mlonmcu.models.frontend.EmbenchFrontend(features=None, config=None)[source]

Bases: BenchFrontend

REQUIRED = {'embench.src_dir'}
get_platform_defs(platform)[source]
property supported_names
class mlonmcu.models.frontend.EmbenchIoTFrontend(features=None, config=None)[source]

Bases: BenchFrontend

REQUIRED = {'embench_iot.src_dir'}
get_platform_defs(platform)[source]
property supported_names
class mlonmcu.models.frontend.ExampleFrontend(features=None, config=None)[source]

Bases: BenchFrontend

property supported_names
class mlonmcu.models.frontend.Frontend(name, input_formats=None, output_formats=None, features=None, config=None)[source]

Bases: ABC

DEFAULTS = {'gen_data': False, 'gen_data_file': None, 'gen_data_fill_mode': None, 'gen_data_fmt': None, 'gen_data_number': None, 'gen_ref_data': False, 'gen_ref_data_file': None, 'gen_ref_data_fmt': None, 'gen_ref_data_mode': None, 'gen_ref_labels': False, 'gen_ref_labels_file': None, 'gen_ref_labels_fmt': None, 'gen_ref_labels_mode': None, 'use_inout_data': False}
FEATURES = {'validate'}
OPTIONAL = {}
REQUIRED = {}
add_platform_config(platform, config)[source]
add_platform_defs(platform, defs)[source]
export_artifacts(path)[source]
extract_model_info(model: Model)[source]
property gen_data
property gen_data_file
property gen_data_fill_mode
property gen_data_fmt
property gen_data_number
property gen_ref_data
property gen_ref_data_file
property gen_ref_data_fmt
property gen_ref_data_mode
property gen_ref_labels
property gen_ref_labels_file
property gen_ref_labels_fmt
property gen_ref_labels_mode
generate(model) Tuple[dict, dict][source]
generate_artifacts(model) List[Artifact][source]
generate_input_data(input_names, input_types, input_shapes, input_ranges, input_quant_details, in_paths)[source]
generate_model_info(input_names, output_names, input_shapes, output_shapes, input_types, output_types, input_ranges, output_ranges, input_quant_details, output_quant_details)[source]
generate_output_ref_data(inputs_data, model, out_paths, output_names, output_types, output_shapes, output_quant_details)[source]
generate_ref_labels(inputs_data, model, out_labels_paths, output_names, output_types, output_shapes, output_quant_details)[source]
get_platform_config(platform)[source]
get_platform_defs(platform)[source]
inference(model: Model, input_data: Dict[str, array])[source]
lookup_models(names, config=None, context=None)[source]
process_features(features)[source]
process_metadata(model, cfg=None)[source]
abstractmethod produce_artifacts(model)[source]
supports_formats(ins=None, outs=None)[source]

Returs true if the frontend can handle at least one combination of input and output formats.

property use_inout_data
class mlonmcu.models.frontend.ISSBenchFrontend(features=None, config=None)[source]

Bases: BenchFrontend

property supported_names
class mlonmcu.models.frontend.LayerGenFrontend(features=None, config=None)[source]

Bases: Frontend

Example input: 1,1024 1 fully_connected ,10,relu 1,1024 1 fully_connected ,100,relu 1,1024 1 fully_connected ,2,relu 1,1024 1 fully_connected ,4,relu 1,1024 1 fully_connected ,8,relu 1,1024 1 fully_connected ,16,relu 1,1024 1 fully_connected ,32,relu 1,1024 1 fully_connected ,64,relu 1,1024 1 fully_connected ,128,relu 1,1024 1 fully_connected ,256,relu 1,1024 1 fully_connected ,512,relu

DEFAULTS = {'fmt': 'tflite', 'gen_data': False, 'gen_data_file': None, 'gen_data_fill_mode': None, 'gen_data_fmt': None, 'gen_data_number': None, 'gen_ref_data': False, 'gen_ref_data_file': None, 'gen_ref_data_fmt': None, 'gen_ref_data_mode': None, 'gen_ref_labels': False, 'gen_ref_labels_file': None, 'gen_ref_labels_fmt': None, 'gen_ref_labels_mode': None, 'use_inout_data': False}
FEATURES = {'validate'}
REQUIRED = {'layergen.exe'}
property fmt
generate(model) Tuple[dict, dict][source]
property layergen_exe
produce_artifacts(model)[source]
class mlonmcu.models.frontend.MLIRFrontend(features=None, config=None)[source]

Bases: SimpleFrontend

class mlonmcu.models.frontend.MathisFrontend(features=None, config=None)[source]

Bases: BenchFrontend

REQUIRED = {}
property supported_names
class mlonmcu.models.frontend.MibenchFrontend(features=None, config=None)[source]

Bases: BenchFrontend

REQUIRED = {'mibench.src_dir'}
get_platform_defs(platform)[source]
property supported_names
class mlonmcu.models.frontend.ONNXFrontend(features=None, config=None)[source]

Bases: SimpleFrontend

class mlonmcu.models.frontend.OpenASIPFrontend(features=None, config=None)[source]

Bases: BenchFrontend

property supported_names
class mlonmcu.models.frontend.PBFrontend(features=None, config=None)[source]

Bases: SimpleFrontend

class mlonmcu.models.frontend.PackedFrontend(features=None, config=None)[source]

Bases: Frontend

DEFAULTS = {'check': False, 'fake_pack': False, 'gen_data': False, 'gen_data_file': None, 'gen_data_fill_mode': None, 'gen_data_fmt': None, 'gen_data_number': None, 'gen_ref_data': False, 'gen_ref_data_file': None, 'gen_ref_data_fmt': None, 'gen_ref_data_mode': None, 'gen_ref_labels': False, 'gen_ref_labels_file': None, 'gen_ref_labels_fmt': None, 'gen_ref_labels_mode': None, 'ignore_existing': True, 'use_inout_data': False, 'use_packed': True}
FEATURES = {'packed', 'packing', 'validate'}
REQUIRED = {'packer.exe'}
property check
property fake_pack
property ignore_existing
produce_artifacts(model)[source]
property use_packed
class mlonmcu.models.frontend.PaddleFrontend(features=None, config=None)[source]

Bases: SimpleFrontend

class mlonmcu.models.frontend.PolybenchFrontend(features=None, config=None)[source]

Bases: BenchFrontend

DEFAULTS = {'dataset': 'large', 'gen_data': False, 'gen_data_file': None, 'gen_data_fill_mode': None, 'gen_data_fmt': None, 'gen_data_number': None, 'gen_ref_data': False, 'gen_ref_data_file': None, 'gen_ref_data_fmt': None, 'gen_ref_data_mode': None, 'gen_ref_labels': False, 'gen_ref_labels_file': None, 'gen_ref_labels_fmt': None, 'gen_ref_labels_mode': None, 'use_inout_data': False}
REQUIRED = {'polybench.src_dir'}
get_platform_defs(platform)[source]
property supported_names
class mlonmcu.models.frontend.RVVBenchFrontend(features=None, config=None)[source]

Bases: BenchFrontend

property supported_names
class mlonmcu.models.frontend.RelayFrontend(features=None, config=None)[source]

Bases: SimpleFrontend

DEFAULTS = {'gen_data': False, 'gen_data_file': None, 'gen_data_fill_mode': None, 'gen_data_fmt': None, 'gen_data_number': None, 'gen_ref_data': False, 'gen_ref_data_file': None, 'gen_ref_data_fmt': None, 'gen_ref_data_mode': None, 'gen_ref_labels': False, 'gen_ref_labels_file': None, 'gen_ref_labels_fmt': None, 'gen_ref_labels_mode': None, 'relayviz_plotter': 'term', 'use_inout_data': False, 'visualize_graph': False}
FEATURES = {'relayviz', 'validate'}
REQUIRED = {'tvm.build_dir', 'tvm.pythonpath'}
produce_artifacts(model)[source]
property relayviz_plotter
property tvm_build_dir
property tvm_pythonpath
property visualize_graph
class mlonmcu.models.frontend.SimpleFrontend(name, fmt, features=None, config=None)[source]

Bases: Frontend

An abstract frontend with equivalent input and output formats.

produce_artifacts(model)[source]
class mlonmcu.models.frontend.SingleBenchFrontend(name: str, prog_cls: Program, features=None, config=None)[source]

Bases: BenchFrontend

property supported_names
class mlonmcu.models.frontend.TaclebenchFrontend(features=None, config=None)[source]

Bases: BenchFrontend

REQUIRED = {'taclebench.src_dir'}
get_platform_defs(platform)[source]
property supported_names
class mlonmcu.models.frontend.TfLiteFrontend(features=None, config=None)[source]

Bases: SimpleFrontend

DEFAULTS = {'analyze_enable': False, 'analyze_script': None, 'check_integrity': False, 'gen_data': False, 'gen_data_file': None, 'gen_data_fill_mode': None, 'gen_data_fmt': None, 'gen_data_number': None, 'gen_ref_data': False, 'gen_ref_data_file': None, 'gen_ref_data_fmt': None, 'gen_ref_data_mode': None, 'gen_ref_labels': False, 'gen_ref_labels_file': None, 'gen_ref_labels_fmt': None, 'gen_ref_labels_mode': None, 'pack_script': None, 'split_layers': False, 'use_inout_data': False, 'visualize_enable': False, 'visualize_script': None}
FEATURES = {'gen_data', 'gen_ref_data', 'gen_ref_labels', 'split_layers', 'tflite_analyze', 'validate', 'visualize'}
OPTIONAL = {'tflite_analyze.script'}
REQUIRED = {}
property analyze_enable
property analyze_script
property check_integrity
extract_model_info(model: Model)[source]
generate(model) Tuple[dict, dict][source]
inference(model: Model, input_data: Dict[str, array], quant=False, dequant=False, verbose=False)[source]
property pack_script
process_metadata(model, cfg=None)[source]
produce_artifacts(model)[source]
property split_layers
property visualize_enable
property visualize_script
mlonmcu.models.frontend.check_integrity(algorithm: str, value: str, file_path: str | Path, check: bool = True)[source]

mlonmcu.models.group module

class mlonmcu.models.group.ModelGroup(name, models, description='')[source]

Bases: object

mlonmcu.models.lookup module

mlonmcu.models.lookup.apply_modelgroups(models, context=None)[source]
mlonmcu.models.lookup.find_metadata(directory, model_name=None)[source]
mlonmcu.models.lookup.get_model_directories(context)[source]
mlonmcu.models.lookup.list_modelgroups(directory, ignore_cache: bool = False)[source]
mlonmcu.models.lookup.list_models(directory, depth=1, formats=None, config=None, ignore_cache: bool = False)[source]
mlonmcu.models.lookup.lookup_models(names, frontends=None, config=None, context=None, ignore_cache: bool = False)[source]
mlonmcu.models.lookup.lookup_models_and_groups(directories, formats, config=None, ignore_cache: bool = False)[source]
mlonmcu.models.lookup.map_frontend_to_model(model, frontends, backend=None)[source]
mlonmcu.models.lookup.print_groups(groups, all_models=[], duplicates=[], detailed=False)[source]
mlonmcu.models.lookup.print_models(models, duplicates=[], detailed=False)[source]
mlonmcu.models.lookup.print_paths(directories)[source]
mlonmcu.models.lookup.print_summary(context, detailed: bool = False, ignore_cache: bool = False)[source]
mlonmcu.models.lookup.reset_models_cache()[source]

mlonmcu.models.metadata module

mlonmcu.models.metadata.parse_metadata(path)[source]

mlonmcu.models.model module

class mlonmcu.models.model.CmsisDSPProgram(name: str, config=None, alt=None)[source]

Bases: MultiBenchProgram

DEFAULTS = {'batch_size': 16, 'number': 10, 'size': 16}
property batch_size
get_platform_defs(platform)[source]
property number
property size
class mlonmcu.models.model.CmsisNNProgram(name: str, config=None, alt=None)[source]

Bases: MultiBenchProgram

DEFAULTS = {'batch_size': 16, 'number': 10, 'size': 16}
property batch_size
get_platform_defs(platform)[source]
property number
property size
class mlonmcu.models.model.CoremarkProgram(name, config=None, alt=None)[source]

Bases: Program

get_platform_defs(platform)[source]
class mlonmcu.models.model.CryptoBenchProgram(name: str, config=None, alt=None)[source]

Bases: MultiBenchProgram

DEFAULTS = {'verbose': False}
get_platform_defs(platform)[source]
property verbose
class mlonmcu.models.model.DhrystoneProgram(name, config=None, alt=None)[source]

Bases: Program

get_platform_defs(platform)[source]
class mlonmcu.models.model.EmbenchDSPProgram(name: str, config=None, alt=None)[source]

Bases: MultiBenchProgram

DEFAULTS = {'no_snr_check': False}
get_platform_defs(platform)[source]
property no_snr_check
class mlonmcu.models.model.EmbenchIoTProgram(name: str, config=None, alt=None)[source]

Bases: MultiBenchProgram

DEFAULTS = {'global_scale_factor': 1}
get_platform_defs(platform)[source]
property global_scale_factor
class mlonmcu.models.model.EmbenchProgram(name: str, config=None, alt=None)[source]

Bases: MultiBenchProgram

class mlonmcu.models.model.ExampleProgram(name: str, config=None, alt=None)[source]

Bases: MultiBenchProgram

class mlonmcu.models.model.ISSBenchProgram(name: str, config=None, alt=None)[source]

Bases: MultiBenchProgram

DEFAULTS = {'array_size': 1048576, 'dtype': 'uint32_t', 'num_iter': 10000000}
property array_size
property dtype
get_platform_defs(platform)[source]
property num_iter
class mlonmcu.models.model.MathisProgram(name, config=None, alt=None)[source]

Bases: Program

DEFAULTS = {'size': 1024}
get_elem_size(name)[source]
get_nargs(name)[source]
get_platform_defs(platform)[source]
property size
class mlonmcu.models.model.MibenchProgram(name: str, config=None, alt=None)[source]

Bases: MultiBenchProgram

class mlonmcu.models.model.Model(name, paths, config=None, alt=None, formats=ModelFormats.TFLITE)[source]

Bases: Workload

DEFAULTS = {'input_shapes': None, 'input_types': None, 'inputs_path': None, 'metadata_path': 'definition.yml', 'output_labels_path': None, 'output_shapes': None, 'output_types': None, 'outputs_path': None, 'params_path': None, 'support_path': None}
property input_shapes
property input_types
property inputs_path
property metadata_path
property output_labels_path
property output_shapes
property output_types
property outputs_path
property params_path
property skip_check
property support_path
class mlonmcu.models.model.ModelFormat(value, extensions)

Bases: tuple

extensions

Alias for field number 1

value

Alias for field number 0

class mlonmcu.models.model.ModelFormats(value)[source]

Bases: Enum

IPYNB = (3, ['ipynb'])
MLIR = (9, ['mlir'])
NONE = (0, [])
ONNX = (4, ['onnx'])
PACKED = (2, ['tflm'])
PADDLE = (7, ['pdmodel'])
PB = (6, ['pb'])
RELAY = (5, ['relay'])
SAVED_MODEL = (9, [''])
TEXT = (8, ['txt'])
TFLITE = (1, ['tflite'])
property extension
property extensions
classmethod from_extension(ext)[source]
class mlonmcu.models.model.MultiBenchProgram(name: str, prefix: str, config=None, alt=None)[source]

Bases: Program

get_platform_defs(platform)[source]
class mlonmcu.models.model.OpenASIPProgram(name: str, config=None, alt=None)[source]

Bases: MultiBenchProgram

DEFAULTS = {'crc_mode': 'both'}
property crc_mode
get_platform_defs(platform)[source]
class mlonmcu.models.model.PolybenchProgram(name: str, config=None, alt=None)[source]

Bases: MultiBenchProgram

class mlonmcu.models.model.Program(name, config=None, alt=None)[source]

Bases: Workload

class mlonmcu.models.model.RVVBenchProgram(name: str, config=None, alt=None)[source]

Bases: MultiBenchProgram

class mlonmcu.models.model.TaclebenchProgram(name: str, config=None, alt=None)[source]

Bases: MultiBenchProgram

class mlonmcu.models.model.Workload(name, config=None, alt=None)[source]

Bases: object

DEFAULTS = {}
add_platform_config(platform, config)[source]
add_platform_defs(platform, defs)[source]
get_platform_config(platform)[source]
get_platform_defs(platform)[source]
mlonmcu.models.model.parse_metadata_from_path(path)[source]
mlonmcu.models.model.parse_shape_string(inputs_string)[source]

Parse an input shape dictionary string to a usable dictionary.

Taken from: https://github.com/apache/tvm/blob/main/python/tvm/driver/tvmc/shape_parser.py

Parameters:
inputs_string: str

A string of the form “input_name:[dim1,dim2,…,dimn] input_name2:[dim1,dim2]” that indicates the desired shape for specific model inputs. Colons, forward slashes and dots within input_names are supported. Spaces are supported inside of dimension arrays.

Returns
——-
shape_dict: dict

A dictionary mapping input names to their shape for use in relay frontend converters.

mlonmcu.models.model.parse_type_string(inputs_string)[source]

Parse an input type dictionary string to a usable dictionary.

Parameters:
inputs_string: str

A string of the form “input_name:ty input_name2:ty” that indicates the desired type for specific model inputs/outputs. Colons, forward slashes and dots within input_names are supported. Spaces are supported inside of dimension arrays.

Returns
——-
type_dict: dict

A dictionary mapping input names to their type.

mlonmcu.models.options module

class mlonmcu.models.options.BackendModelOptions(backend, supported=True, options={})[source]

Bases: object

class mlonmcu.models.options.TFLMIModelOptions(backend, supported=True, arena_size=None, builtin_ops=None, custom_ops=None)[source]

Bases: BackendModelOptions

class mlonmcu.models.options.TVMRTModelOptions(backend, supported=True, arena_size=None)[source]

Bases: BackendModelOptions

mlonmcu.models.options.parse_model_options_for_backend(backend, options)[source]

mlonmcu.models.utils module

mlonmcu.models.utils.fill_data_source(in_bufs, out_bufs)[source]
mlonmcu.models.utils.fill_data_source_inputs_only(in_bufs)[source]
mlonmcu.models.utils.get_data_source(input_paths, output_paths)[source]
mlonmcu.models.utils.lookup_data_buffers(input_paths, output_paths)[source]
mlonmcu.models.utils.make_hex_array(filename, mode='bin')[source]

Module contents

class mlonmcu.models.LayerGenFrontend(features=None, config=None)[source]

Bases: Frontend

Example input: 1,1024 1 fully_connected ,10,relu 1,1024 1 fully_connected ,100,relu 1,1024 1 fully_connected ,2,relu 1,1024 1 fully_connected ,4,relu 1,1024 1 fully_connected ,8,relu 1,1024 1 fully_connected ,16,relu 1,1024 1 fully_connected ,32,relu 1,1024 1 fully_connected ,64,relu 1,1024 1 fully_connected ,128,relu 1,1024 1 fully_connected ,256,relu 1,1024 1 fully_connected ,512,relu

DEFAULTS = {'fmt': 'tflite', 'gen_data': False, 'gen_data_file': None, 'gen_data_fill_mode': None, 'gen_data_fmt': None, 'gen_data_number': None, 'gen_ref_data': False, 'gen_ref_data_file': None, 'gen_ref_data_fmt': None, 'gen_ref_data_mode': None, 'gen_ref_labels': False, 'gen_ref_labels_file': None, 'gen_ref_labels_fmt': None, 'gen_ref_labels_mode': None, 'use_inout_data': False}
FEATURES = {'validate'}
REQUIRED = {'layergen.exe'}
property fmt
generate(model) Tuple[dict, dict][source]
property layergen_exe
produce_artifacts(model)[source]
class mlonmcu.models.MLIRFrontend(features=None, config=None)[source]

Bases: SimpleFrontend

class mlonmcu.models.ONNXFrontend(features=None, config=None)[source]

Bases: SimpleFrontend

class mlonmcu.models.PBFrontend(features=None, config=None)[source]

Bases: SimpleFrontend

class mlonmcu.models.PackedFrontend(features=None, config=None)[source]

Bases: Frontend

DEFAULTS = {'check': False, 'fake_pack': False, 'gen_data': False, 'gen_data_file': None, 'gen_data_fill_mode': None, 'gen_data_fmt': None, 'gen_data_number': None, 'gen_ref_data': False, 'gen_ref_data_file': None, 'gen_ref_data_fmt': None, 'gen_ref_data_mode': None, 'gen_ref_labels': False, 'gen_ref_labels_file': None, 'gen_ref_labels_fmt': None, 'gen_ref_labels_mode': None, 'ignore_existing': True, 'use_inout_data': False, 'use_packed': True}
FEATURES = {'packed', 'packing', 'validate'}
REQUIRED = {'packer.exe'}
property check
property fake_pack
property ignore_existing
produce_artifacts(model)[source]
property use_packed
class mlonmcu.models.TfLiteFrontend(features=None, config=None)[source]

Bases: SimpleFrontend

DEFAULTS = {'analyze_enable': False, 'analyze_script': None, 'check_integrity': False, 'gen_data': False, 'gen_data_file': None, 'gen_data_fill_mode': None, 'gen_data_fmt': None, 'gen_data_number': None, 'gen_ref_data': False, 'gen_ref_data_file': None, 'gen_ref_data_fmt': None, 'gen_ref_data_mode': None, 'gen_ref_labels': False, 'gen_ref_labels_file': None, 'gen_ref_labels_fmt': None, 'gen_ref_labels_mode': None, 'pack_script': None, 'split_layers': False, 'use_inout_data': False, 'visualize_enable': False, 'visualize_script': None}
FEATURES = {'gen_data', 'gen_ref_data', 'gen_ref_labels', 'split_layers', 'tflite_analyze', 'validate', 'visualize'}
OPTIONAL = {'tflite_analyze.script'}
REQUIRED = {}
property analyze_enable
property analyze_script
property check_integrity
extract_model_info(model: Model)[source]
generate(model) Tuple[dict, dict][source]
inference(model: Model, input_data: Dict[str, array], quant=False, dequant=False, verbose=False)[source]
property pack_script
process_metadata(model, cfg=None)[source]
produce_artifacts(model)[source]
property split_layers
property visualize_enable
property visualize_script
mlonmcu.models.print_summary(context, detailed: bool = False, ignore_cache: bool = False)[source]