hls4ml.converters package
Subpackages
- hls4ml.converters.keras package
- Submodules
- hls4ml.converters.keras.convolution module
- hls4ml.converters.keras.core module
- hls4ml.converters.keras.graph module
- hls4ml.converters.keras.hgq_proxy_model module
- hls4ml.converters.keras.merge module
- hls4ml.converters.keras.model module
- hls4ml.converters.keras.pooling module
- hls4ml.converters.keras.qkeras module
- hls4ml.converters.keras.recurrent module
- hls4ml.converters.keras.reshape module
- hls4ml.converters.keras.reshaping module
- Module contents
- hls4ml.converters.onnx package
- hls4ml.converters.pytorch package
Submodules
hls4ml.converters.keras_to_hls module
- class hls4ml.converters.keras_to_hls.KerasFileReader(config)
Bases:
KerasReader
- get_weights_data(layer_name, var_name)
- class hls4ml.converters.keras_to_hls.KerasModelReader(keras_model)
Bases:
KerasReader
- get_weights_data(layer_name, var_name)
- class hls4ml.converters.keras_to_hls.KerasNestedFileReader(data_reader, nested_path)
Bases:
KerasFileReader
- class hls4ml.converters.keras_to_hls.KerasReader
Bases:
object
- get_weights_data(layer_name, var_name)
- hls4ml.converters.keras_to_hls.get_model_arch(config)
- hls4ml.converters.keras_to_hls.get_supported_keras_layers()
Returns the list of Keras layers that the converter can parse.
The returned list contains all Keras layers that can be parsed into the hls4ml internal representation. Support for computation of these layers may vary across hls4ml backends and conversion configuration.
- Returns:
The names of supported Keras layers.
- Return type:
list
- hls4ml.converters.keras_to_hls.get_weights_data(data_reader, layer_name, var_name)
- hls4ml.converters.keras_to_hls.keras_handler(*args)
- hls4ml.converters.keras_to_hls.keras_to_hls(config)
- hls4ml.converters.keras_to_hls.parse_default_keras_layer(keras_layer, input_names)
- hls4ml.converters.keras_to_hls.parse_keras_model(model_arch, reader)
- hls4ml.converters.keras_to_hls.register_keras_layer_handler(layer_cname, handler_func)
Register a handler function for the given layer class name.
- The handler function should have the following signature:
parse_func(keras_layer, input_names, input_shapes, data_reader, config):
- Parameters:
layer_cname (str) – The name of Keras layer (the ‘class_name’ property in the layer’s config)
handler_func (callable) – The handler function
- Raises:
Exception – If the layer class has already been registered.
hls4ml.converters.onnx_to_hls module
- hls4ml.converters.onnx_to_hls.compute_pads_1d(operation, layer)
- hls4ml.converters.onnx_to_hls.compute_pads_2d(operation, layer)
- hls4ml.converters.onnx_to_hls.get_constant_value(graph, constant_name)
- hls4ml.converters.onnx_to_hls.get_global_input_shape(graph, inp)
Return the global input shape of the graph with name inp
- Parameters:
graph – the onnx graph
inp (str) – the global input name
- Returns:
The shape
- Return type:
list
- Raises:
StopIteration – If the global input name is not found
- hls4ml.converters.onnx_to_hls.get_input_shape(graph, node)
Return the input shapes of the node in the model
- Parameters:
graph – the onnx graph
node – the onnx node for which the input is desired
- Returns:
The shapes of all the inputs
- Return type:
list of lists
- Raises:
StopIteration – If the an input name is not found in the graph
- hls4ml.converters.onnx_to_hls.get_onnx_attribute(operation, name, default=None)
- hls4ml.converters.onnx_to_hls.get_out_layer_name(graph)
Get the output layer’s name for the model. graph.output only returns the output’s node index
- hls4ml.converters.onnx_to_hls.get_supported_onnx_layers()
- hls4ml.converters.onnx_to_hls.onnx_handler(*args)
- hls4ml.converters.onnx_to_hls.onnx_to_hls(config)
Convert onnx model to hls model from configuration.
- Parameters:
config (dict) – ONNX configuration from yaml file or passed through API.
- Raises:
Exception – Raised if an unsupported operation is found in the ONNX model.
- Returns:
hls4ml model object
- Return type:
- hls4ml.converters.onnx_to_hls.parse_onnx_model(onnx_model)
Parses the onnx model, both for configuration building and general processing.
- Parameters:
onnx_model – an ONNX model object.
- Raises:
Exception – Raised if an unsupported operation is found in the ONNX model.
- Returns:
The onnx layers input_layers (list): The input layers output_layers (list): The output layers
- Return type:
layer_list (list)
- hls4ml.converters.onnx_to_hls.register_onnx_layer_handler(layer_name, handler_func)
- hls4ml.converters.onnx_to_hls.replace_char_inconsitency(name)
Replace some inconsistent characters that cause issues when writing into HLS.
- hls4ml.converters.onnx_to_hls.sanitize_layer_name(layer)
hls4ml.converters.pytorch_to_hls module
hls4ml.converters.utils module
- hls4ml.converters.utils.compute_padding_1d(pad_type, in_size, stride, filt_size)
Computes the amount of padding required on each side of the 1D input tensor.
In case of
same
padding, this routine tries to pad evenly left and right, but if the amount of columns to be added is odd, it will add the extra column to the right.- Parameters:
pad_type (str) – Padding type, one of
same
,valid
orcausal
(case insensitive).in_size (int) – Input size.
stride (int) – Stride length.
filt_size (int) – Length of the kernel window.
- Raises:
Exception – Raised if the padding type is unknown.
- Returns:
Tuple containing the padded input size, left and right padding values.
- Return type:
tuple
- hls4ml.converters.utils.compute_padding_1d_pytorch(pad_type, in_size, stride, filt_size, dilation)
Computes the amount of padding required on each side of the 1D input tensor following pytorch conventions.
In case of
same
padding, this routine tries to pad evenly left and right, but if the amount of columns to be added is odd, it will add the extra column to the right.- Parameters:
pad_type (str or int) – Padding type. If string, one of
same
,valid
orcausal
(case insensitive).in_size (int) – Input size.
stride (int) – Stride length.
filt_size (int) – Length of the kernel window.
- Raises:
Exception – Raised if the padding type is unknown.
- Returns:
Tuple containing the padded input size, left and right padding values.
- Return type:
tuple
- hls4ml.converters.utils.compute_padding_2d(pad_type, in_height, in_width, stride_height, stride_width, filt_height, filt_width)
Computes the amount of padding required on each side of the 2D input tensor.
In case of
same
padding, this routine tries to pad evenly left and right (top and bottom), but if the amount of columns to be added is odd, it will add the extra column to the right/bottom.- Parameters:
pad_type (str) – Padding type, one of
same
orvalid
(case insensitive).in_height (int) – The height of the input tensor.
in_width (int) – The width of the input tensor.
stride_height (int) – Stride height.
stride_width (int) – Stride width.
filt_height (int) – Height of the kernel window.
filt_width (int) – Width of the kernel window.
- Raises:
Exception – Raised if the padding type is unknown.
- Returns:
Tuple containing the padded input height, width, and top, bottom, left and right padding values.
- Return type:
tuple
- hls4ml.converters.utils.compute_padding_2d_pytorch(pad_type, in_height, in_width, stride_height, stride_width, filt_height, filt_width, dilation_height, dilation_width)
Computes the amount of padding required on each side of the 2D input tensor following pytorch conventions.
In case of
same
padding, this routine tries to pad evenly left and right (top and bottom), but if the amount of columns to be added is odd, it will add the extra column to the right/bottom.- Parameters:
pad_type (str or int) – Padding type. If string, one of
same
orvalid
(case insensitive).in_height (int) – The height of the input tensor.
in_width (int) – The width of the input tensor.
stride_height (int) – Stride height.
stride_width (int) – Stride width.
filt_height (int) – Height of the kernel window.
filt_width (int) – Width of the kernel window.
- Raises:
Exception – Raised if the padding type is unknown.
- Returns:
Tuple containing the padded input height, width, and top, bottom, left and right padding values.
- Return type:
tuple
- hls4ml.converters.utils.parse_data_format(input_shape, data_format='channels_last')
Parses the given input shape according to the specified data format.
This function can be used to ensure the shapes of convolutional and pooling layers is correctly parsed. If the first element of the given
input_shape
isNone
it is interpreted as a batch dimension and discarded.The returned tuple will have the channels dimension last.- Parameters:
input_shape (list or tuple) – Input shape of 2D or 3D tensor with optional batch dimension of
None
.data_format (str, optional) – Data format type, one of
channels_first
orchannels_last
. (case insensitive). Defaults to ‘channels_last’.
- Raises:
Exception – Raised if the data format type is unknown.
- Returns:
The input shape (without the batch dimension) in
channels_last
format.- Return type:
tuple
Module contents
- hls4ml.converters.convert_from_config(config)
Convert to hls4ml model based on the provided configuration.
- Parameters:
config – A string containing the path to the YAML configuration file on the filesystem or a dict containing the parsed configuration.
- Returns:
hls4ml model.
- Return type:
- hls4ml.converters.convert_from_keras_model(model, output_dir='my-hls-test', project_name='myproject', input_data_tb=None, output_data_tb=None, backend='Vivado', hls_config=None, **kwargs)
Convert Keras model to hls4ml model based on the provided configuration.
- Parameters:
model – Keras model to convert
output_dir (str, optional) – Output directory of the generated HLS project. Defaults to ‘my-hls-test’.
project_name (str, optional) – Name of the HLS project. Defaults to ‘myproject’.
input_data_tb (str, optional) – String representing the path of input data in .npy or .dat format that will be used during csim and cosim.
output_data_tb (str, optional) – String representing the path of output data in .npy or .dat format that will be used during csim and cosim.
backend (str, optional) – Name of the backend to use, e.g., ‘Vivado’ or ‘Quartus’ or ‘Catapult’.
board (str, optional) – One of target boards specified in supported_board.json file. If set to None a default device of a backend will be used. See documentation of the backend used.
part (str, optional) – The FPGA part. If set to None a default part of a backend will be used. See documentation of the backend used. Note that if board is specified, the part associated to that board will overwrite any part passed as a parameter.
clock_period (int, optional) – Clock period of the design. Defaults to 5.
clock_uncertainty (str, optional) – Clock uncertainty Defaults to 12.5% for Vivado HLS, 27% for Vitis HLS; unused for others
io_type (str, optional) – Type of implementation used. One of ‘io_parallel’ or ‘io_stream’. Defaults to ‘io_parallel’.
hls_config (dict, optional) – The HLS config.
kwargs** (dict, optional) – Additional parameters that will be used to create the config of the specified backend
- Raises:
Exception – If precision and reuse factor are not present in ‘hls_config’.
- Returns:
hls4ml model.
- Return type:
- hls4ml.converters.convert_from_onnx_model(model, output_dir='my-hls-test', project_name='myproject', input_data_tb=None, output_data_tb=None, backend='Vivado', hls_config=None, **kwargs)
Convert Keras model to hls4ml model based on the provided configuration.
- Parameters:
model – ONNX model to convert.
output_dir (str, optional) – Output directory of the generated HLS project. Defaults to ‘my-hls-test’.
project_name (str, optional) – Name of the HLS project. Defaults to ‘myproject’.
input_data_tb (str, optional) – String representing the path of input data in .npy or .dat format that will be used during csim and cosim.
output_data_tb (str, optional) – String representing the path of output data in .npy or .dat format that will be used during csim and cosim.
backend (str, optional) – Name of the backend to use, e.g., ‘Vivado’ or ‘Quartus’ or ‘Catapult’.
board (str, optional) – One of target boards specified in supported_board.json file. If set to None a default device of a backend will be used. See documentation of the backend used.
part (str, optional) – The FPGA part. If set to None a default part of a backend will be used. See documentation of the backend used. Note that if board is specified, the part associated to that board will overwrite any part passed as a parameter.
clock_period (int, optional) – Clock period of the design. Defaults to 5.
clock_uncertainty (str, optional) – Clock uncertainty Defaults to 12.5% for Vivado HLS, 27% for Vitis HLS; unused for others
io_type (str, optional) – Type of implementation used. One of ‘io_parallel’ or ‘io_stream’. Defaults to ‘io_parallel’.
hls_config (dict, optional) – The HLS config.
kwargs** (dict, optional) – Additional parameters that will be used to create the config of the specified backend
- Raises:
Exception – If precision and reuse factor are not present in ‘hls_config’.
- Returns:
hls4ml model.
- Return type:
- hls4ml.converters.convert_from_pytorch_model(model, output_dir='my-hls-test', project_name='myproject', input_data_tb=None, output_data_tb=None, backend='Vivado', hls_config=None, **kwargs)
Convert PyTorch model to hls4ml model based on the provided configuration.
- Parameters:
model – PyTorch model to convert.
output_dir (str, optional) – Output directory of the generated HLS project. Defaults to ‘my-hls-test’.
project_name (str, optional) – Name of the HLS project. Defaults to ‘myproject’.
input_data_tb (str, optional) – String representing the path of input data in .npy or .dat format that will be used during csim and cosim. Defaults to None.
output_data_tb (str, optional) – String representing the path of output data in .npy or .dat format that will be used during csim and cosim. Defaults to None.
backend (str, optional) – Name of the backend to use, e.g., ‘Vivado’ or ‘Quartus’ or ‘Catapult’. Defaults to ‘Vivado’.
board (str, optional) – One of target boards specified in supported_board.json file. If set to None a default device of a backend will be used. See documentation of the backend used.
part (str, optional) – The FPGA part. If set to None a default part of a backend will be used. See documentation of the backend used. Note that if board is specified, the part associated to that board will overwrite any part passed as a parameter.
clock_period (int, optional) – Clock period of the design. Defaults to 5.
clock_uncertainty (str, optional) – Clock uncertainty Defaults to 12.5% for Vivado HLS, 27% for Vitis HLS; unused for others
io_type (str, optional) – Type of implementation used. One of ‘io_parallel’ or ‘io_stream’. Defaults to ‘io_parallel’.
hls_config (dict, optional) – The HLS config.
kwargs** (dict, optional) – Additional parameters that will be used to create the config of the specified backend.
- Raises:
Exception – If precision and reuse factor are not present in ‘hls_config’.
Notes
Pytorch uses the “channels_first” data format for its tensors, while hls4ml expects the “channels_last” format used by keras. By default, hls4ml will automatically add layers to the model which transpose the inputs to the “channels_last” format. Not that this is not supported for the “io_stream” io_type, for which the user will have to transpose the input by hand before passing it to hls4ml. In that case the “channels_last_conversion” argument of the “config_from_pytorch_model” function needs to be set to “internal”. This argument can be used to completely disable this internal conversion. By default, the output of the model remains in the “channels_last” data format. The “transpose_outputs” argument of the “config_from_pytorch_model” can be used to add a layer to the model that transposes back to “channels_first”. As before, this will not work for io_stream.
- Returns:
hls4ml model.
- Return type:
- hls4ml.converters.convert_from_symbolic_expression(expr, n_symbols=None, lut_functions=None, use_built_in_lut_functions=False, output_dir='my-hls-test', project_name='myproject', input_data_tb=None, output_data_tb=None, precision='ap_fixed<16,6>', **kwargs)
Converts a given (SymPy or string) expression to hls4ml model.
- Parameters:
expr (str or sympy.Expr) – Expression to convert. The variables in the expression should be in the form of
x0, x1, x2, ...
.n_symbols (int, optional) – Number of symbols in the expression. If not provided, the largest index of the variable will be used as the number of symbols. Useful if number of inputs differs from the number of variables used in the expression. Defaults to None.
lut_functions (dict, optional) –
LUT function definitions. Defaults to None. The dictionary should have the form of:
{ '<func_name>': { 'math_func': '<func>', 'table_size': <table_size>, 'range_start': <start>, 'range_end': <end>, } }
where
<func_name>
is a given name that can be used with PySR,<func>
is the math function to approximate (sin, cos, log,…),<table_size>
is the size of the lookup table, and<start>
and<end>
are the ranges in which the function will be approximated. It is strongly recommended to use a power-of-two as a range.use_built_in_lut_functions (bool, optional) – Use built-in sin/cos LUT functions. Defaults to False.
output_dir (str, optional) – Output directory of the generated HLS project. Defaults to ‘my-hls-test’.
project_name (str, optional) – Name of the HLS project. Defaults to ‘myproject’.
input_data_tb (str, optional) – String representing the path of input data in .npy or .dat format that will be used during csim and cosim.
output_data_tb (str, optional) – String representing the path of output data in .npy or .dat format that will be used during csim and cosim.
precision (str, optional) – Precision to use. Defaults to ‘ap_fixed<16,6>’.
part (str, optional) – The FPGA part. If set to None a default part of a backend will be used.
clock_period (int, optional) – Clock period of the design. Defaults to 5.
compiler (str, optional) – Compiler to use,
vivado_hls
orvitis_hls
. Defaults tovivado_hls
.hls_include_path (str, optional) – Path to HLS inlcude files. If None the location will be inferred from the location of the compiler used. If an empty string is passed the HLS math libraries won’t be used during compilation, meaning Python integration won’t work unless all functions are LUT-based. Doesn’t affect synthesis. Defaults to None.
hls_libs_path (str, optional) – Path to HLS libs files. If None the location will be inferred from the location of the compiler used. Defaults to None.
- Returns:
hls4ml model.
- Return type:
- hls4ml.converters.parse_yaml_config(config_file)
Parse conversion configuration from the provided YAML file.
This function parses the conversion configuration contained in the YAML file provided as an argument. It ensures proper serialization of hls4ml objects and should be called on YAML files created by hls4ml. A minimal valid YAML file may look like this:
KerasH5: my_keras_model.h5 OutputDir: my-hls-test ProjectName: myproject Part: xcvu13p-flga2577-2-e ClockPeriod: 5 IOType: io_stream HLSConfig: Model: Precision: ap_fixed<16,6> ReuseFactor: 10
Please refer to the docs for more examples of valid YAML configurations.
- Parameters:
config_file (str) – Location of the file on the filesystem.
- Returns:
Parsed configuration.
- Return type:
dict