Skip to content
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

[WIP][Runtime]Pipeline Executor For Compute graph pipeline #7892

Closed
wants to merge 28 commits into from

Conversation

huajsj
Copy link
Contributor

@huajsj huajsj commented Apr 20, 2021

Issue:
SOC hardware plarform have multiple types compute chipset like
GPU,FPGA,APU,RPU etc, there is a requirement that use these compute
unit in parallel to reach best performance.

Solution:
In these pipeline solution, we first split the compute graph into
a group of subgraph, then run these subgraph in a pipeline module
to make the GPU/FPGA/APU/RPU parallel running become possible.

Thanks for contributing to TVM! Please refer to guideline https://tvm.apache.org/docs/contribute/ for useful information and tips. After the pull request is submitted, please request code reviews from Reviewers by @ them in the pull request thread.

@huajsj huajsj changed the title Pipeline Compute Graph With New Subgraph Executor [Runtime]Pipeline Compute Graph With New Subgraph Executor Apr 21, 2021
@tqchen
Copy link
Member

tqchen commented Apr 26, 2021

cc @comaniac @areusch @tmoreau89

@huajsj
Copy link
Contributor Author

huajsj commented Apr 26, 2021

Thanks @tqchen for the follow up, I proposed a RFC(https://discuss.tvm.apache.org/t/rfc-compute-graph-pipeline-with-new-subgraph-executor/9839) to explain the motivation and solution architecture as reference.

@huajsj huajsj changed the title [Runtime]Pipeline Compute Graph With New Subgraph Executor [WIP][Runtime]Pipeline Compute Graph With New Subgraph Executor Apr 28, 2021
@huajsj huajsj changed the title [WIP][Runtime]Pipeline Compute Graph With New Subgraph Executor [Runtime]Pipeline Executor For Compute graph pipeline May 1, 2021
Copy link
Contributor

@comaniac comaniac left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the test for APIs and user interfaces, but it needs lots of changes so I'll stop here for now.

tests/python/relay/test_analysis_pipeline.py Outdated Show resolved Hide resolved
tests/python/relay/test_analysis_pipeline.py Outdated Show resolved Hide resolved
tests/python/relay/test_analysis_pipeline.py Outdated Show resolved Hide resolved
tests/python/relay/test_analysis_pipeline.py Outdated Show resolved Hide resolved
tests/python/relay/test_analysis_pipeline.py Outdated Show resolved Hide resolved
tests/python/relay/test_analysis_pipeline.py Outdated Show resolved Hide resolved
tests/python/relay/test_analysis_pipeline.py Outdated Show resolved Hide resolved
tests/python/relay/test_analysis_pipeline.py Outdated Show resolved Hide resolved
tests/python/relay/test_analysis_pipeline.py Outdated Show resolved Hide resolved
tests/python/relay/test_analysis_pipeline.py Outdated Show resolved Hide resolved
@huajsj
Copy link
Contributor Author

huajsj commented Jun 1, 2021

@comaniac @areusch @tmoreau89

Copy link
Contributor

@comaniac comaniac left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmake/config.cmake Outdated Show resolved Hide resolved
python/tvm/contrib/pipeline_executor.py Outdated Show resolved Hide resolved
python/tvm/contrib/pipeline_executor.py Outdated Show resolved Hide resolved
python/tvm/contrib/pipeline_executor.py Outdated Show resolved Hide resolved
python/tvm/contrib/pipeline_executor.py Outdated Show resolved Hide resolved
python/tvm/contrib/pipeline_executor.py Show resolved Hide resolved
python/tvm/contrib/pipeline_executor.py Outdated Show resolved Hide resolved
params : dict of str to NDArray
Additional arguments
"""
if key is not None:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why key and value are allowed to be None?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Didn't see the fix? Why we need if key is not None?

src/runtime/pipeline/pipeline_executor.cc Outdated Show resolved Hide resolved
src/runtime/pipeline/pipeline_executor.cc Outdated Show resolved Hide resolved
@huajsj huajsj force-pushed the main branch 4 times, most recently from 6061ae2 to 1c67a87 Compare June 16, 2021 21:52
@huajsj huajsj requested a review from comaniac June 16, 2021 23:01
@huajsj
Copy link
Contributor Author

huajsj commented Jun 17, 2021

@comaniac

@comaniac
Copy link
Contributor

@comaniac

I'm busy with other tasks in recent days. Will try to take another look when I got a chance.

cmake/config.cmake Show resolved Hide resolved
python/tvm/contrib/graph_executor.py Outdated Show resolved Hide resolved
python/tvm/contrib/pipeline_executor.py Show resolved Hide resolved
python/tvm/contrib/pipeline_executor.py Outdated Show resolved Hide resolved
python/tvm/contrib/pipeline_executor.py Outdated Show resolved Hide resolved
src/runtime/pipeline/pipeline_executor.h Outdated Show resolved Hide resolved
src/runtime/pipeline/pipeline_executor.cc Outdated Show resolved Hide resolved
src/runtime/pipeline/pipeline_executor.cc Outdated Show resolved Hide resolved
src/runtime/pipeline/pipeline_executor.cc Outdated Show resolved Hide resolved
src/runtime/pipeline/pipeline_executor.h Outdated Show resolved Hide resolved
@huajsj huajsj force-pushed the main branch 2 times, most recently from 2947327 to 62e4d5f Compare June 30, 2021 06:17
@huajsj huajsj requested a review from comaniac July 6, 2021 18:53
@huajsj
Copy link
Contributor Author

huajsj commented Jul 7, 2021

@comaniac

@huajsj
Copy link
Contributor Author

huajsj commented Jul 9, 2021

@comaniac, if you have time , could you help for a review. thanks.


template <typename SLOT_TYPE = SLOT>
void deleteQueue(squeue<SLOT_TYPE>* q) {
free(q);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use delete

#include <assert.h>
#include <sched.h>
#include <string.h>
#include <sys/syscall.h>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only compiles on linux

@masahi
Copy link
Member

masahi commented Sep 3, 2021

Thanks @huajsj. Please respect our coding style and standard good programming practices:

  • For C++ code: Variable names should be snake_case and function / class names should be CamelCase
  • Do not use using namespace without good reason
  • Do not introduce complicated typedef like typedef unordered_map<int, unordered_map<int, unordered_map<int, string>>> PIPELINE_CONF;. Introducing a class should be more readable.
  • Do not use weird type name like RUNTIME_PIPELINE_OUTPUT_CONF.

huajsj added 6 commits October 1, 2021 18:34
[Finding]
the final output is same with constant value, seems like input data is
0, this is because the get input index have a '+1' operation, but the
input index already start from 0. the means when doing setinput('x',..) it
should get convert to setinput(0, ..), but the wrong logic is
setinput(1,..).
@comaniac
Copy link
Contributor

comaniac commented Nov 2, 2021

IIUC, this PR should be out-of-date? Should we close?

@huajsj
Copy link
Contributor Author

huajsj commented Nov 5, 2021

@comaniac , yes we should close this PR, closed it now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants