uTensor / utensor_cgen

C++ code generator for uTensor https://utensor-cgen.readthedocs.io/en/latest/
Apache License 2.0
50 stars 40 forks source link

CLI list-support-ops fails #131

Closed victorromeo closed 3 years ago

victorromeo commented 3 years ago

I've noticed that the command utensor-cli list-support-ops fails as the MissingOperator is incorrectly registered without a namespace.

(utensor_cgen_vr)ian@henry:~/Documents/source/utensor_cgen_vr_fix$ utensor-cli list-support-ops
2020-11-27 10:44:10.040446: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
[WARNING quantize.py <module> @ 12] trying to import deprecated quantization transformer
Traceback (most recent call last):
  File "/home/ian/Documents/source/utensor_cgen_vr/.venv/bin/utensor-cli", line 11, in <module>
    load_entry_point('utensor-cgen', 'console_scripts', 'utensor-cli')()
  File "/home/ian/Documents/source/utensor_cgen_vr/.venv/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/ian/Documents/source/utensor_cgen_vr/.venv/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/ian/Documents/source/utensor_cgen_vr/.venv/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/ian/Documents/source/utensor_cgen_vr/.venv/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/ian/Documents/source/utensor_cgen_vr/.venv/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/ian/Documents/source/utensor_cgen_vr/.venv/lib/python3.8/site-packages/utensor_cgen/cli/backend.py", line 55, in list_support_ops
    pformat(backend.support_ops),
  File "/home/ian/Documents/source/utensor_cgen_vr/.venv/lib/python3.8/site-packages/utensor_cgen/backend/utensor/_backend_impl.py", line 84, in support_ops
    return OperatorFactory.support_op_types()
  File "/home/ian/Documents/source/utensor_cgen_vr/.venv/lib/python3.8/site-packages/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py", line 48, in support_op_types
    return set([
  File "/home/ian/Documents/source/utensor_cgen_vr/.venv/lib/python3.8/site-packages/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py", line 50, in <listcomp>
    for namespaces, op_type in cls._operators.keys()
ValueError: too many values to unpack (expected 2)

A fix is possible by supplying namespaces

diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py
index a6f65bc..70b3c1e 100644
--- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py
+++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py
@@ -822,8 +822,8 @@ class _FullyConnectedOperator(_CommonParams):
       nested_namespaces=type(self).namespaces,
     )

-
 class _MissingOperator(_Operator):
+  namespaces = ["ReferenceOperators","TflmSymQuantOps"]
   op_type = "_MissingOperator"

   def get_declare_snippet(self, op_var_name, with_const_params=True):
@@ -835,5 +835,5 @@ class _MissingOperator(_Operator):
   def get_construct_snippet(self, op_var_name):
     return None

-
-OperatorFactory._operators[_MissingOperator.op_type] = _MissingOperator
+for namespace in _MissingOperator.namespaces:
+  OperatorFactory._operators[((namespace,), _MissingOperator.op_type)] = _MissingOperator
dboyliao commented 3 years ago

_MissOperator is registered that way on purpose, but I didn't notice it will break the list op subcmd. This bug has been fixed on develop by moving _MissingOperator to the only submodule which needs it. Closing the issue. Thanks for reporting.