rwth-i6 / pytorch-to-returnn

Make PyTorch code runnable within RETURNN
3 stars 6 forks source link

Fix for RETURNN updates #117

Closed vieting closed 2 years ago

vieting commented 2 years ago

I think that some updates of RETURNN break things in the converter. I'll rerun the test cases here so we can see.

albertz commented 2 years ago

Can you copy & paste the error and maybe other information about the problem (either here or in a separate issue)? Which test case breaks exactly? Can you maybe also figure out which RETURNN commit breaks it (just git bisect)?

vieting commented 2 years ago

It seems to be caused by this commit https://github.com/rwth-i6/returnn/commit/15a42ca30f05363ecf19f472eb35eeb18bb3e55e which was introducing GetLayer to fix https://github.com/rwth-i6/returnn/issues/993.

vieting commented 2 years ago

A couple of tests break, e.g. test_converter.test_naming_problem.

Full traceback

``` ERROR: test_converter.test_naming_problem ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/runner/.local/lib/python3.8/site-packages/nose/case.py", line 198, in TestBase.runTest line: self.test(*self.arg) locals: self = test_converter.test_naming_problem self.test = self.arg = () File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/tests/test_converter.py", line 186, in test_naming_problem line: verify_torch_and_convert_to_returnn(model_func, inputs=x) locals: verify_torch_and_convert_to_returnn = model_func = .model_func at 0x7fbb08459430> inputs = x = array([[[ 0.49671414, -0.1382643 , 0.64768857, 1.5230298 , -0.23415338, -0.23413695, 1.5792128 , 0.7674347 , -0.46947438, 0.54256004, -0.46341768], [-0.46572974, 0.24196227, -1.9132802 , -1.7249179 , -0.5622875 , -1.0128311 , 0.31424734, -0.9080241 , ... File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/pytorch_to_returnn/converter/converter.py", line 432, in verify_torch_and_convert_to_returnn line: converter.run() locals: converter = converter.run = > File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/pytorch_to_returnn/converter/converter.py", line 139, in Converter.run line: self._run_torch_returnn_drop_in() locals: self = self._run_torch_returnn_drop_in = > File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/pytorch_to_returnn/converter/converter.py", line 277, in Converter._run_torch_returnn_drop_in line: out_returnn = self._model_func(wrapped_import_torch_returnn, in_returnn) locals: out_returnn = self = self._model_func = .model_func at 0x7fbb08459430> wrapped_import_torch_returnn = in_returnn = File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/tests/test_converter.py", line 182, in test_naming_problem..model_func line: return model(inputs) locals: model = inputs = File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/pytorch_to_returnn/torch/nn/modules/module.py", line 439, in Module.__call__ line: res = call_entry.apply_call() locals: res = call_entry = > (depth 0)> call_entry.apply_call = > (depth 0)>> File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/pytorch_to_returnn/naming/call.py", line 106, in CallEntry.apply_call line: res = module.forward(*inputs_args, **inputs_kwargs) locals: res = module = module.forward = .model_func..MainModel.forward at 0x7fbb0171b0d0> inputs_args = (,) inputs_kwargs = {} File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/pytorch_to_returnn/torch/nn/modules/module.py", line 105, in wrapped_func line: return obj(*args, **kwargs) locals: obj = .model_func..MainModel.forward of > args = (,) kwargs = {} File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/tests/test_converter.py", line 179, in test_naming_problem..model_func..MainModel.forward line: return self.feature_extractor(x) locals: self = self.feature_extractor = x = File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/pytorch_to_returnn/torch/nn/modules/module.py", line 438, in Module.__call__ line: with naming.make_module_call(module=self, inputs_args=input, inputs_kwargs=kwargs) as call_entry: locals: naming = naming.make_module_call = > module = self = inputs_args = input = (,) inputs_kwargs = kwargs = {} call_entry = File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/pytorch_to_returnn/naming/naming.py", line 238, in Naming.make_module_call line: namespace = parent_namespace.register_sub_call(entry) locals: namespace = parent_namespace = > -> ...> parent_namespace.register_sub_call = > -> ...>> entry = > (depth 1)> File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/pytorch_to_returnn/naming/namespace.py", line 192, in RegisteredName.register_sub_call line: child.assign_call(call) locals: child = > -> None> child.assign_call = > -> None>> call = > (depth 1)> File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/pytorch_to_returnn/naming/namespace.py", line 121, in RegisteredName.assign_call line: self.assign_module(call.module) locals: self = > -> None> self.assign_module = > -> None>> call = > (depth 1)> call.module = > File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/pytorch_to_returnn/naming/namespace.py", line 163, in RegisteredName.assign_module line: self.maybe_create_returnn_ctx() locals: self = > -> None> self.maybe_create_returnn_ctx = > -> None>> File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/pytorch_to_returnn/naming/namespace.py", line 143, in RegisteredName.maybe_create_returnn_ctx line: self.returnn_ctx = _returnn_ctx.ReturnnContext( parent=self.parent.returnn_ctx if self.parent else None, name=self.name, returnn_train_flag=self.returnn_train_flag) locals: self = > -> None> self.returnn_ctx = None _returnn_ctx = _returnn_ctx.ReturnnContext = parent = self.parent = > -> ...> self.parent.returnn_ctx = name = self.name = 'feature_extractor', len = 17 returnn_train_flag = self.returnn_train_flag = False File "/home/runner/work/pytorch-to-returnn/pytorch-to-returnn/pytorch_to_returnn/naming/returnn_ctx.py", line 20, in ReturnnContext.__init__ line: self.sub_net_layer = parent.network.construct_layer( name=name, # This is just a placeholder, will be replaced in define_output. net_dict={name: {"class": "subnetwork", "from": "data", "subnetwork": { "output": {"class": "copy", "from": "data"}}}}) locals: self = !AttributeError: 'ReturnnContext' object has no attribute 'network' self.sub_net_layer = !AttributeError: 'ReturnnContext' object has no attribute 'sub_net_layer' parent = parent.network = parent.network.construct_layer = > name = 'feature_extractor', len = 17 File "/home/runner/.local/lib/python3.8/site-packages/returnn/tf/network.py", line 954, in TFNetwork.construct_layer line: layer_class.transform_config_dict(layer_desc, network=net, get_layer=get_layer) locals: layer_class = layer_class.transform_config_dict = > layer_desc = {'from': 'data', 'subnetwork': {'output': {'class': 'copy', 'from': 'data'}}, '_network': , '_name': 'feature_extractor', '_subnet': Subnetwork{root/feature_extractor}} network = net = get_layer = File "/home/runner/.local/lib/python3.8/site-packages/returnn/tf/layers/basic.py", line 8353, in SubnetworkLayer.transform_config_dict line: d["_output"] = subnet.construct_layer("output", parent_get_layer=get_layer) locals: d = {'from': 'data', 'subnetwork': {'output': {'class': 'copy', 'from': 'data'}}, '_network': , '_name': 'feature_extractor', '_subnet': Subnetwork{root/feature_extractor}} subnet = Subnetwork{root/feature_extractor} subnet.construct_layer = parent_get_layer = get_layer = File "/home/runner/.local/lib/python3.8/site-packages/returnn/tf/network.py", line 2998, in Subnetwork.construct_layer line: return self.get_sub_layer_func(parent_get_layer)(name) locals: self = Subnetwork{root/feature_extractor} self.get_sub_layer_func = parent_get_layer = name = 'output', len = 6 File "/home/runner/.local/lib/python3.8/site-packages/returnn/tf/network.py", line 3275, in GetLayer.__call__ line: return get_layer.network.construct_layer( net_dict=get_layer._net_dict, name=name, get_layer=get_layer, add_layer=get_layer._add_layer_func) locals: get_layer = get_layer.network = get_layer.network.construct_layer = > net_dict = get_layer._net_dict = {} name = 'feature_extractor/output', len = 24 add_layer = get_layer._add_layer_func = None File "/home/runner/.local/lib/python3.8/site-packages/returnn/tf/network.py", line 885, in TFNetwork.construct_layer line: raise LayerNotFound( "layer %r not found in %r" % (name, self), layer_name=full_name, network=self, net_dict=net_dict) locals: LayerNotFound = name = 'feature_extractor', len = 17 self = layer_name = full_name = 'feature_extractor/output', len = 24 network = net_dict = {} returnn.tf.network.LayerNotFound: layer 'feature_extractor' not found in ```
albertz commented 2 years ago

It would be helpful to also have a pure RETURNN test (pure RETURNN net dict) for this, and then an issue on RETURNN side.

vieting commented 2 years ago

Also test_converter.test_weight_norm, test_converter.test_custom_layer_norm, test_converter.test_naming_problem, ERROR: test_converter.test_naming_inner_func_functional_with_buffer. It's always the error.

returnn.tf.network.LayerNotFound: layer '...' not found in <TFNetwork 'root' train=False>

And a few tests in test_layers.py with the same error.

vieting commented 2 years ago

It would be helpful to also have a pure RETURNN test (pure RETURNN net dict) for this, and then an issue on RETURNN side.

I'll do that.

vieting commented 2 years ago

See https://github.com/rwth-i6/returnn/issues/1014 for a pure RETURNN test.

albertz commented 2 years ago

I don't think there needs anything to be done here in pytorch-to-returnn if this RETURNN issue is the only problem. Let's wait until https://github.com/rwth-i6/returnn/pull/1015 is merged (edit done) and then rerun the tests here (edit done). Edit Ok, it looks like this can be closed.