-
Notifications
You must be signed in to change notification settings - Fork 3.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Relay] Improve build error when no lowered funcs are produced #4132
Conversation
src/relay/backend/build_module.cc
Outdated
target_host_, | ||
BuildConfig::Current()); | ||
} | ||
CHECK(lowered_funcs.size() != 0) << "no lowered funcs exist in the compiled module"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm, this is a good point. But I am not sure if we really want to signal fatal here. We might just have an empty lowered_funcs
in some circumstances. For example, we could just have a constant and invoke build
. Since there is no primitive, we would not have the module, but it should still be valid.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see. I wasn't sure if there were cases where one would want to use a build result without a defined module. Maybe the right change would be to modify the ModuleNode* operator-> methods to check that the shared ptr isn't null?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I personally think returning a nullptr is okay. Dereferencing a nullptr should crash. I would recommend logging a warning here so that users would know the module is empty.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah. A warning seems like a good compromise.
@weberlo please look into the ci error |
I've switched the check in build_module.cc from fatal to a warning, as @zhiics suggested. @tqchen Do you think modifying the ModuleNode* operator-> methods to include a runtime nullptr check is a good idea? I'm not sure what other code paths would generate null modules, but I think if we're generating them anywhere in our APIs, we should at least give users the tools to understand why things are crashing (i.e., by adding a helpful error message). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
…e#4132) * Improve build error when no lowered funcs * Switch from fatal to warning
…e#4132) * Improve build error when no lowered funcs * Switch from fatal to warning
* master: (51 commits) [QNN][TFLite] Parsing QNN Add op. Adding MobilenetV2. (apache#4142) [CI] Pin NNPack pthreadtools version (apache#4152) Fix typo (apache#4144) [Relay][Frontend][TF] Add tensor array ops (apache#3798) [relay][vm] Separate VM runtime with executable (apache#4100) [PATCH] Fix undefined __floatdihf in libtvmruntime.so on aarch64. (apache#4119) [DOCKER] Pin torchvision==0.4.1 (apache#4140) [TOPI][x86] Cascade lake support. (apache#4123) [Relay] Improve build error when no lowered funcs are produced (apache#4132) [RUNTIME] Refactor object python FFI to new protocol. (apache#4128) Update PULL_REQUEST_TEMPLATE.md Adding support for dequantizing from int32 to float32. (apache#4130) [Relay][Training] Add and fix gradients (apache#4126) [QNN] Change default rouning to UPWARD. (apache#4131) Fix infer type of kernel in dense. (apache#4125) [Relay][AlterOpLayout] NHWC to NCHWc pad operator. (apache#4103) [ARITH] Fix lowering of floormod(x, y) != 0 (apache#4127) [RFC][RUNTIME] Introduce new object protocol. (apache#4115) [Relay][Topi] Disable conv NHWC pack int8. (apache#4038) Update task_cpp_unittest.sh ...
If you accidentally create a module with no lowered funcs via
relay.build
, interaction with the module down the road segfaults without an error message. For example, the annotated line in the program below would segfault, because I have accidentally passedparams
torelay.build
, causing the entire program to be const-folded away.This PR adds an error message to prevent the generation of modules without lowered funcs.
CC @jroesch @zhiics @tqchen