fastmachinelearning / hls4ml

Machine learning on FPGAs using HLS
https://fastmachinelearning.org/hls4ml
Apache License 2.0
1.22k stars 396 forks source link

error while converting onnx model to hls #686

Open Praj120301 opened 1 year ago

Praj120301 commented 1 year ago

im trying to convert an onnx model to hls by using us4ml

i receieved this error after getting this output

Interpreting Model ... Output layers: ['Softmax'] Input shape: [None, 10, 4] Topology: Layer name: Transpose, layer type: Transpose, current shape: [[None, 10, 4]] Layer name: Conv1D, layer type: Conv1D, current shape: [[None, 4, 10]] Layer name: Relu, layer type: Activation, current shape: [[None, 3, 10]] Layer name: Conv1D1, layer type: Conv1D, current shape: [[None, 3, 10]] Layer name: Relu1, layer type: Activation, current shape: [[None, 2, 10]] Layer name: Conv1D__2, layer type: Conv1D, current shape: [[None, 2, 10]] Layer name: Relu2, layer type: Activation, current shape: [[None, 1, 10]] Layer name: Transpose5, layer type: Transpose, current shape: [[None, 1, 10]] Layer name: , layer type: Dense, current shape: [[None, 10]] Layer name: Relu3, layer type: Activation, current shape: [[None, 10]] Layer name: , layer type: Dense, current shape: [[None, 10]] Layer name: Softmax, layer type: Softmax, current shape: [[None, 5]] Creating HLS model

TypeError Traceback (most recent call last) Cell In [31], line 30 28 cfg['OnnxModel'] = model 29 cfg['OutputDir'] = PROJECT_PATH + 'Onnx_two_layer/hls4ml_u250_prj' ---> 30 hls_model = hls4ml.converters.onnx_to_hls(cfg) 31 print('done')

File ~/anaconda3/envs/hls4ml-tutorial/lib/python3.8/site-packages/hls4ml/converters/onnx_to_hls.py:319, in onnx_to_hls(config) 314 ################# 315 ## Generate HLS 316 ################# 318 print('Creating HLS model') --> 319 hls_model = ModelGraph(config, reader, layer_list, input_layers, output_layers) 320 return hls_model

File ~/anaconda3/envs/hls4ml-tutorial/lib/python3.8/site-packages/hls4ml/model/graph.py:319, in ModelGraph.init(self, config, data_reader, layer_list, inputs, outputs) 316 self._make_graph(layer_list) 318 for flow in self.config.flows: --> 319 self.apply_flow(flow)

File ~/anaconda3/envs/hls4ml-tutorial/lib/python3.8/site-packages/hls4ml/model/graph.py:338, in ModelGraph.apply_flow(self, flow) 336 def apply_flow(self, flow): 337 applied_flows = {} --> 338 self._apply_sub_flow(flow, applied_flows) 339 self._applied_flows.append(applied_flows)

File ~/anaconda3/envs/hls4ml-tutorial/lib/python3.8/site-packages/hls4ml/model/graph.py:348, in ModelGraph._apply_sub_flow(self, flow_name, applied_flows) 346 for sub_flow in flow.requires: 347 if sub_flow not in applied_flows.keys(): --> 348 self._apply_sub_flow(sub_flow, applied_flows) 350 if len(flow.optimizers) > 0: 351 applied_passes = optimize_model(self, flow.optimizers)

File ~/anaconda3/envs/hls4ml-tutorial/lib/python3.8/site-packages/hls4ml/model/graph.py:351, in ModelGraph._apply_sub_flow(self, flow_name, applied_flows) 348 self._apply_sub_flow(sub_flow, applied_flows) 350 if len(flow.optimizers) > 0: --> 351 applied_passes = optimize_model(self, flow.optimizers) 352 else: 353 applied_passes = []

File ~/anaconda3/envs/hls4ml-tutorial/lib/python3.8/site-packages/hls4ml/model/optimizer/optimizer.py:192, in optimize_model(model, passes) 190 for node in model.graph.values(): 191 if opt.match(node): --> 192 res = opt.transform(model, node) 193 applied_passes.add(opt_name) 194 if res:

File ~/anaconda3/envs/hls4ml-tutorial/lib/python3.8/site-packages/hls4ml/backends/template.py:20, in Template.transform(self, model, node) 19 def transform(self, model, node): ---> 20 formatted_template = self.format(node) 21 node.set_attr(self.attribute_name, formatted_template) 22 return False

File ~/anaconda3/envs/hls4ml-tutorial/lib/python3.8/site-packages/hls4ml/backends/vivado/passes/reshaping_templates.py:114, in TransposeConfigTemplate.format(self, node) 113 def format(self, node): --> 114 params = self._default_config_params() 116 return self.template.format(**params)

TypeError: _default_config_params() missing 1 required positional argument: 'layer'

jmitrevs commented 1 year ago

The ONNX frontend is undergoing many changes in the current version of hls4ml. One needs to use the qonnx package to preprocess it--clean it and make it channels-last--and then it can be imported as in the ingest-qonnx-master branch.