Skip to content
This repository has been archived by the owner on Nov 17, 2023. It is now read-only.

Failure in generated op.h in version 1.3.1 #14116

Closed
Bumblebee1964 opened this issue Feb 11, 2019 · 22 comments · Fixed by #15144
Closed

Failure in generated op.h in version 1.3.1 #14116

Bumblebee1964 opened this issue Feb 11, 2019 · 22 comments · Fixed by #15144
Labels

Comments

@Bumblebee1964
Copy link

Note: Providing complete information in the most concise form is the best way to get help. This issue template serves as the checklist for essential information to most of the technical issues and bug reports. For non-technical issues and feature requests, feel free to present the information in what you believe is the best form.

For Q & A and discussion, please start a discussion thread at https://discuss.mxnet.io

Description

When compiling MXNET with CPP package, an op.h header is generated with syntax errors. Compared to version 1.3.0, some operators have been added to have this syntax error (missing type specifier in argument list of inline function)

Environment info (Required)

WINDOWS 10 Pro, X64
MXNET 1.3.1.
VS2017
MKL
OPENCV 3.4.5
CMake 3.13.4
CUDA 9.2
CUDNN 9.2

Build info (Required if built from source)

Compiler: VS2017

MXNet commit hash:
(Paste the output of git rev-parse HEAD here.)

Build config:
1>------ Build started: Project: cpp_package_op_h, Configuration: Release x64 ------
1>"Running: OpWrapperGenerator.py"
1>D:/Projects/MXNet-versions/MxNet1-3-1/build/Release/libmxnet.dll
1>argument "lrs" of operator "multi_sgd_update" has unknown type ", required"
1>argument "wds" of operator "multi_sgd_update" has unknown type ", required"
1>argument "lrs" of operator "multi_sgd_mom_update" has unknown type ", required"
1>argument "wds" of operator "multi_sgd_mom_update" has unknown type ", required"
1>argument "lrs" of operator "multi_mp_sgd_update" has unknown type ", required"
1>argument "wds" of operator "multi_mp_sgd_update" has unknown type ", required"
1>argument "lrs" of operator "multi_mp_sgd_mom_update" has unknown type ", required"
1>argument "wds" of operator "multi_mp_sgd_mom_update" has unknown type ", required"
========== Build: 1 succeeded, 0 failed, 3 up-to-date, 0 skipped ==========

Problem in generated code (the parameters lrs and wds):
inline Symbol multi_sgd_update(const std::string& symbol_name, const std::vector<Symbol>& data, lrs, wds, mx_float rescale_grad = 1, mx_float clip_gradient = -1, int num_weights = 1) { return Operator("multi_sgd_update") .SetParam("lrs", lrs) .SetParam("wds", wds) .SetParam("rescale_grad", rescale_grad) .SetParam("clip_gradient", clip_gradient) .SetParam("num_weights", num_weights) (data) .CreateSymbol(symbol_name); }

The same for the inline functions:
multi_sgd_mom_update
multi_mp_sgd_update
multi_mp_sgd_mom_update
..and overloaded functions

Error Message:

Minimum reproducible example

Steps to reproduce

What have you tried to solve it?

  1. op.h generation worked with same system / compiler settings for 1.3.0
@mxnet-label-bot
Copy link
Contributor

Hey, this is the MXNet Label Bot.
Thank you for submitting the issue! I will try and suggest some labels so that the appropriate MXNet community members can help resolve it.
Here are my recommended labels: Bug

@Bumblebee1964
Copy link
Author

Bumblebee1964 commented Feb 11, 2019

Suggested labels: build, cpp
@mxnet-label-bot add [build, cpp]

@lanking520 lanking520 added the C++ Related to C++ label Feb 12, 2019
@Bumblebee1964
Copy link
Author

dug a bit deeper in the problem. It seems that the new inline functions have an argument type that is not listed as known argument types in OpWrapper.py. I guess the argument type is nnvm::Tuple but not sure.

@smissan
Copy link

smissan commented Feb 20, 2019

this is a critical issue that breaks CPP interface. Please fix

@bj5546
Copy link

bj5546 commented Feb 28, 2019

release 1.40 has the same erro

@Bumblebee1964
Copy link
Author

Please fix, it is annoying to work around this issue especially when trying to understand cpp samples as these won't build out of the box.

@dbsxdbsx
Copy link

dbsxdbsx commented Mar 5, 2019

@Bumblebee1964 , and is especially annoying when it pops up after 1 hours compiling! I got it when compiling mxnet1.5.

@ausk
Copy link

ausk commented Mar 8, 2019

Rebuild more than 5 times, building failed when run OpWrapperGenerator.py, finally locate to this issue ...

@bj5546
Copy link

bj5546 commented Mar 25, 2019

was this bug fixed?

@smissan
Copy link

smissan commented Mar 25, 2019 via email

@Bumblebee1964
Copy link
Author

It seems fixed in the latest version. I downloaded the code 2 weeks ago, and it seemed to be resolved.

@smissan
Copy link

smissan commented Mar 26, 2019 via email

@Bumblebee1964
Copy link
Author

It looks whether the name of the operator (and probably definition) that caused the problem has been changed. From my current working place I cannot easily check difference between generated op.h from version 1.3.1. (which I had to change manually to get it compiled) and version 1.4.1.

I'' try to check by the end of the week when I am back in the office.

@rocknamx8
Copy link

I also have this problem in version 1.4.0, need a fix.

@bj5546
Copy link

bj5546 commented Apr 9, 2019

please fix it

@407257625
Copy link

alse have this problem in version 1.5.x, please fix!:

1>argument "lrs" of operator "multi_sgd_update" has unknown type ", required"
1>argument "wds" of operator "multi_sgd_update" has unknown type ", required"
1>argument "lrs" of operator "multi_sgd_mom_update" has unknown type ", required"
1>argument "wds" of operator "multi_sgd_mom_update" has unknown type ", required"
1>argument "lrs" of operator "multi_mp_sgd_update" has unknown type ", required"
1>argument "wds" of operator "multi_mp_sgd_update" has unknown type ", required"
1>argument "lrs" of operator "multi_mp_sgd_mom_update" has unknown type ", required"
1>argument "wds" of operator "multi_mp_sgd_mom_update" has unknown type ", required"

@MikeDai2020
Copy link

this problem generates when build the cpp examples using visual studio, e.g Alexnet. I solved this by change the op.h in the install path, generated by execute Running: OpWrapperGenerator.py" ,somewhere like: nnvm::Tuple<mx_float> lrs, nnvm::Tuple<mx_float> wds,.then create another project,copy the examples source file, and include the head files and library again. good luck!

@407257625
Copy link

@Mark-Dai can share the generated sh , such as " python OpWrapperGenerator.py xxx"

@Vigilans
Copy link
Contributor

Vigilans commented Jun 4, 2019

Problem found. Here is my procedures to trace the bug:

Then, what happened to our mxnet::Tuple<float>?
Here: https://github.com/apache/incubator-mxnet/blob/master/include/mxnet/tuple.h#L744

namespace dmlc {
/*! \brief description for optional TShape */
DMLC_DECLARE_TYPE_NAME(optional<mxnet::TShape>, "Shape or None");
DMLC_DECLARE_TYPE_NAME(optional<mxnet::Tuple<int>>, "Shape or None");
// avoid low version of MSVC
#if !defined(_MSC_VER) // <----------- Here !
template<typename T>
struct type_name_helper<mxnet::Tuple<T> > {
  static inline std::string value() {
    return "tuple of <" + type_name<T>() + ">";
  }
};
#endif
}  // namespace dmlc

So the specialization of mxnet::tuple<T> was disabled for Visual Studio in the first place!

I removed the #if block, recompile, then everything works fine.
@junrushao1994

@smissan
Copy link

smissan commented Jun 6, 2019

great, Vigilans , thanks for finally finding the root cause. Is this issue is now fixed in trunk, or is it in code review?

@leleamol
Copy link
Contributor

leleamol commented Jun 7, 2019

@mxnet-label-bot add [Windows]

@JiaoPaner
Copy link

Facing the same error when compiling 1.5.0.
Now have it fixed?

zachgk pushed a commit that referenced this issue Sep 20, 2019
Relax Visual Studio version constraint in the specialization of `dmlc::type_name_helper<DT>` for `DT=mxnet::Tuple<T>`
drivanov pushed a commit to drivanov/incubator-mxnet that referenced this issue Sep 26, 2019
Relax Visual Studio version constraint in the specialization of `dmlc::type_name_helper<DT>` for `DT=mxnet::Tuple<T>`
larroy pushed a commit to larroy/mxnet that referenced this issue Sep 28, 2019
Relax Visual Studio version constraint in the specialization of `dmlc::type_name_helper<DT>` for `DT=mxnet::Tuple<T>`
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet