-
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
[TIR] Tir constants integration into compilation pipeline #8509
Conversation
5f1da9c
to
50d6052
Compare
Oh. not sure how did I manage to do this. I am sorry for such a massive query. |
fc4e057
to
64e0c42
Compare
64e0c42
to
a4d809e
Compare
a4d809e
to
0665a8c
Compare
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.
@d-smirnov , shall we look to update the design as agreed here ? : https://github.com/apache/tvm-rfcs/blob/main/rfcs/0022-tir-non-scalar-constants.md
0665a8c
to
6c88c9d
Compare
Thanks @d-smirnov working so long on this to enable representation of non-scalar constants in TIR. Thanks @giuseros for the initial work.. |
We're seeing issues on Hexagon after this commit. They are directly caused by float16 not being supported for embedded constants, but there are other potential problems there (difference between target and executor in fuse_ops). See https://discuss.tvm.apache.org/t/problem-with-fuseops-and-embedded-constants-in-tir/12165 for more info. I'm wondering about your thoughts about this. |
@kparzysz-quic thanks for signaling the regression. Is there a way this problem can be triggered via a simple unit test? Perhaps we can get the authors to issue a patch, or perhaps even we could consider reverting this commit until we can resolve the issue? |
We can look into this. @kparzysz-quic , would you be able to submit a PR with an xfail that should have been broken by this PR ?
tvm/src/target/llvm/codegen_params.cc Lines 137 to 157 in dcbdedd
tvm/src/target/source/codegen_params.cc Lines 214 to 229 in dcbdedd
The above are called respectively in the following locations : tvm/src/target/llvm/codegen_llvm.cc Line 1485 in dcbdedd
tvm/src/target/source/codegen_c.cc Line 673 in dcbdedd
(These are same code used to codegen LinkedParam node) So, I am not following what is meant here.. Can you elaborate further ? To understand a bit more, would you be able to share the relay.build(...) configuration (targets, executor, runtime) that you are using ? Ideally, if the target does not support -link-params, it should be able to disable it or if the target needs them linked (i.e. not handled via executor) it needs codegen tir.AllocateConst node -- for which the support has been added for all backends of TVM (with tests). By naive, look at the Hexagon codegen it seems like it is extending codegen LLVM. So what we need to understand, what is the expectation of Hexagon backend when linked-param is used ? I am sensing we might need to move link-param from being executor attr to a target attr . cc : @Mousius @d-smirnov Im a bit concerned by the suggestion to revert based on non-tree tests. FYI : @u99127 |
We have a temporary workaround---just reset the There are two issues that need to be addressed:
Hexagon does utilize the |
Hi @kparzysz-quic , This PR is about non-scalar constants, 2) links to scalar constants -- maybe that feature is yet to be supported anyway ? For 1) maybe lets create an issue -- Im trying to understand the relevance to this PR, @d-smirnov thoughts ? |
Right---the relevance is that I tried setting "relay.FuseOps.link_params" to False in PassContext/config, but it didn't have any effect, since |
The changes in fuse_ops that this PR made (obtaining the value of |
I am still a bit puzzled. I read the above code as PassContext overriding whatever provided by the Executor. |
Would you be able to provide what should be the "correct" behaviour ? |
Line 1054: If executor is present in IRModule, set Line 1057: If the current config has a key "relay.FuseOps.link_params", set |
I think you mentioned that |
Hmmm, Just to understand this a bit better, what is the target string being used in your case ? Secondly, does the hexagon backend requires the constants binded to the IR, eventually to be codegen'd or does it require them to be provided at the runtime ? |
The first failing testcase is resnet50: This is the script that reproduces the crash is:
At the bottom of the crash dump you should see
The target string is We don't yet have codegen for Edit: This will crash with the upstream code as well, so if you have the same resnet50 as we do, you should be able to reproduce this crash. |
tvm/tests/python/relay/test_pass_fuse_ops.py Lines 631 to 661 in d9fac4f
I think this is respected. maybe we should need to verify when Executor has link-params ? But after having read this all again -- the actual issue link-params will be set to True if the Executor has it. It seems like hexagon backend was reliant on FoldConstant behaviour of always having link-params set to False. Is it not ? If so the solution might be to provide link-params override for FoldConstants as well ? Something feels like link-params behaviour for FuseOps pass in the main compilation pipeline needs to be True. Am I wrong here ? |
Can ? / should this discussion please be moved into a proper issue ? Ramana |
Yes I think it make sense -- @kparzysz-quic lets create an issue and move it there. |
This was changed in apache#8509 to run without checking the file formatting, which would lead to pylint errors like we saw on `main` in apache@0c836b7.
@manupa-arm and @junrushao1994 can you tag me on changes to CI scripts in the future? The changes here in |
Oops sorry about this! Will do |
thanks! btw, it's fixed in #10469 so no action here is necessary |
This was changed in apache#8509 to run without checking the file formatting, which would lead to pylint errors like we saw on `main` in apache@0c836b7. Co-authored-by: driazati <driazati@users.noreply.github.com>
* [TIR] Introduce tir.allocate_const to TIR This PR is adding non-scalar constant representation in TIR. This is used to express constants (i.e., parameters) in the TIR instead of bypassing the TIR as it's done until now. Change-Id: Id3afc4d7197260cb43ecde60f05ccbce3fc42430 Co-authored-by: Giuseppe Rossini <giuseppe.rossini@arm.com> Change-Id: Id4a09a637c9c1fd7d49989c6c10f474a78569e18 * [TIR] Integrate tir constant nodes in compilation pipeline This PR integrates tir.allocate_const to the compilation pipeline to support --link-params. Change-Id: Ic8d0cb75d596299fcae7078b304598afbf0c5494 Co-authored-by: Giuseppe Rossini <giuseppe.rossini@arm.com> Change-Id: Id98cc682bbfacfe75c4d8b260fd41658f1f196b2 * [TIR] tir.const extraction This commit tries to implement an amendment to tir.constant RFC with centralized storage of constant data within the IRModule Please note that data and irmod_storage_idx are not mutual exclisive further more the irmod_storage_idx is valid only immediatly after prim func addition to the mod or after update within the mod. If prim func is out of the the module scope then the index become meangless. irmod_storage_idx also is not used in calculation of hash function of the tir.constant node. Change-Id: I40742ed580468b0252ea3fec02184cba65e20871 * unit test fixed Change-Id: Ied2186554d4cbad44b2346216c8be92449e55732 * cmsis-nn codegen fix Now handled case when params of the functions came as constants Change-Id: I5874e182e34ef94e23048eaf3c61b01a56d91131 * Fixes for unittests Change-Id: I5b82ee3f80337155706b5470973f494a301b5d90 * Rebasing tests fixes Change-Id: I94ac87907081bab53c1dd1ab2db106ae057b4b19 * Linter: added method param description Change-Id: I2f8c4c8d244b74c794abaa6079c46cc593ffcbdb * Printing removal fix This patch removes forgotten print in fuse_ops Change-Id: I4bb5934f3b4cd5fde19d36a8e3319aae136bce8a * Bugfix Fixed concurrent map update bug here Change-Id: Ifec3bf5030086d9079b9e493096f17dfd82297ec * Reworked logic for not to introduce empty constant list to modue attrs Change-Id: I082c85b3b4b70c218f0d714f5613ef6e178bd020 * Added support for tir builtin::tvm_access_ptr This fixed unit tests for tests/python/integration/test_arm_mprofile_dsp.py Change-Id: I10919f301ef9ddc3fd87f0e1a8414e9a52fc7938 * Unit test fix Fixes unit tests in torch frontend Change-Id: I6c179834f93dd202605d1ce5a7f07d987b9dc469 * Addressed requested changes Addressed changes requested upstream Change-Id: I741e52b89eb285732c23b1ac7ff277e757a088c3 * Namespace usage changed to conform earlier C++ standard Change-Id: I1b29238cfe2a6bedb525f4f823a3a540f631d836 * Bugfix Change-Id: I57a44b714b307278a243817ec2864e53ad31366b * updated IRModuleNode::ExtractPrimFuncConstants Updated IRModuleNode::ExtractPrimFuncConstants as per request upstream. Change-Id: I35db0145fb5827efd0445ce665d0c99465274016 * Minor changes typo fixd renamed ExtractPrimFuncConstants to ExtractConstants removed getters/setters from FuseMutator and added parametrized constructor Change-Id: Ib2326805781779b88c963a8642ff683c8755956e * Moved LinkedParam/LinkedParamNode Moved LinkedParam/LinkedParamNode from tvm::tir namespace to tvm namespace Change-Id: Ie3f0303bd4f7890c6d680268c91f2051977bc7f4 * Addressed upstream comments Changed BindParams argument to Array<NDArray> Removed 'name' argument from te.const Switched to in-depth comparision of NDArrays in constant de-duplication Removed extra final comma from NDArrayToTIR Changed return type of ConstantAllocationSize to int64_t Made link_param a tvm.testing.parameter for test_fuse_take and test_fuse_gather_nd Change-Id: I4285099cc63756aa5ebe91a5bd207d4135499b41 * Removed unnecessary forward declaration +linter Change-Id: I2a6c0d1f97773aeb1ae3f458da252a22079ccdb1 * Constant extractor now is a separate pass Change-Id: Ia4adca9d3315b26fbdc006ef7c115900c081e303 * Added forgotten file + unit test fix Change-Id: Ice305f4fefd13fe95e97574e6d63ffeb664621df * Changed to IRModule pass Refactored ExtractPrimFuncConstants to IRModule pass. deDup -> DeDup Refactored logic of Applicator supplementary class Change-Id: I6c120d175eb6790ba90f176c4f856bde8f0c7c94 * bugfix after rebasing Change-Id: Ie3ee6ea2479476a30f486baef74f20070f117942 * -v -> -vv to have more debug information Change-Id: I12c63731663b9c9ea574b9ed5cb17311ba3cf701 Co-authored-by: Giuseppe Rossini <giuseppe.rossini@arm.com>
This was changed in apache#8509 to run without checking the file formatting, which would lead to pylint errors like we saw on `main` in apache@0c836b7. Co-authored-by: driazati <driazati@users.noreply.github.com>
This PR is a follow-up PR to integate tir constant nodes introduced in 8472 to compilation pipeline.