From fdd324c0274e8c4f7fc51a7fbd9fec83f73ed2ea Mon Sep 17 00:00:00 2001 From: effrey-liu <64138454+effrey-liu@users.noreply.github.com> Date: Thu, 31 Oct 2024 16:25:17 +0800 Subject: [PATCH] [frontend] Add ops fusion demo. (#364) --- examples/BuddyFusedLeNet/CMakeLists.txt | 83 ++++ examples/BuddyFusedLeNet/README.md | 47 ++ .../BuddyFusedLeNet/buddy-lenet-import.py | 79 ++++ examples/BuddyFusedLeNet/buddy-lenet-main.cpp | 133 ++++++ examples/BuddyFusedLeNet/images/1-28*28.png | Bin 0 -> 1439 bytes examples/BuddyFusedLeNet/lenet-model.pth | Bin 0 -> 183344 bytes examples/BuddyFusedLeNet/model.py | 41 ++ examples/CMakeLists.txt | 4 + frontend/Python/frontend.py | 1 + frontend/Python/graph/graph.py | 5 +- frontend/Python/graph/graph_driver.py | 60 ++- frontend/Python/graph/operation.py | 12 +- frontend/Python/graph/transform/__init__.py | 4 +- frontend/Python/graph/transform/fuse_ops.py | 441 ++++++++++++++++++ .../graph/transform/useless_op_eliminate.py | 22 + 15 files changed, 919 insertions(+), 13 deletions(-) create mode 100644 examples/BuddyFusedLeNet/CMakeLists.txt create mode 100644 examples/BuddyFusedLeNet/README.md create mode 100644 examples/BuddyFusedLeNet/buddy-lenet-import.py create mode 100644 examples/BuddyFusedLeNet/buddy-lenet-main.cpp create mode 100644 examples/BuddyFusedLeNet/images/1-28*28.png create mode 100644 examples/BuddyFusedLeNet/lenet-model.pth create mode 100644 examples/BuddyFusedLeNet/model.py diff --git a/examples/BuddyFusedLeNet/CMakeLists.txt b/examples/BuddyFusedLeNet/CMakeLists.txt new file mode 100644 index 0000000000..c8f41a2141 --- /dev/null +++ b/examples/BuddyFusedLeNet/CMakeLists.txt @@ -0,0 +1,83 @@ +file(GLOB SUBGRAPH_FILES "${CMAKE_CURRENT_SOURCE_DIR}/subgraph*.mlir") + +add_custom_command( + OUTPUT ${BUDDY_EXAMPLES_DIR}/BuddyFusedLeNet/arg0.data + ${BUDDY_EXAMPLES_DIR}/BuddyFusedLeNet/forward.mlir + ${SUBGRAPH_FILES} + COMMAND python3 ${BUDDY_EXAMPLES_DIR}/BuddyFusedLeNet/buddy-lenet-import.py + COMMENT "Generating forward.mlir, subgraph*.mlir and parameter files" +) + +set(SUBGRAPH_OBJECTS "") +foreach(SUBGRAPH_FILE ${SUBGRAPH_FILES}) + get_filename_component(SUBGRAPH_NAME ${SUBGRAPH_FILE} NAME_WE) + set(OBJECT_FILE ${BUDDY_BINARY_DIR}/../examples/BuddyFusedLeNet/${SUBGRAPH_NAME}.o) + list(APPEND SUBGRAPH_OBJECTS ${OBJECT_FILE}) + + add_custom_command( + OUTPUT ${OBJECT_FILE} + COMMAND ${BUDDY_BINARY_DIR}/buddy-opt ${SUBGRAPH_FILE} + -pass-pipeline + "builtin.module(func.func(tosa-to-linalg-named, tosa-to-arith, tosa-to-linalg, tosa-to-tensor))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -convert-elementwise-to-linalg + -func-bufferize-dynamic-offset + -arith-bufferize + -func-bufferize + -tensor-bufferize + -linalg-bufferize + -finalizing-bufferize + -convert-linalg-to-loops + -lower-affine + -convert-scf-to-cf + -llvm-request-c-wrappers + -convert-math-to-llvm + -convert-math-to-libm + -convert-arith-to-llvm + -convert-func-to-llvm + -expand-strided-metadata + -finalize-memref-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O3 + -o ${OBJECT_FILE} + DEPENDS ${SUBGRAPH_FILE} buddy-opt + COMMENT "Building ${SUBGRAPH_NAME}.o" + VERBATIM + ) +endforeach() + +add_custom_command( + OUTPUT forward.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyFusedLeNet/forward.mlir + -pass-pipeline + "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith), \ + empty-tensor-to-alloc-tensor, convert-elementwise-to-linalg, arith-bufferize, \ + func.func(linalg-bufferize, tensor-bufferize), func-bufferize)" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt + -pass-pipeline + "builtin.module(func.func(buffer-deallocation-simplification, convert-linalg-to-loops), \ + eliminate-empty-tensors, func.func(llvm-request-c-wrappers), \ + convert-math-to-llvm, convert-math-to-libm, convert-scf-to-cf, \ + convert-arith-to-llvm, expand-strided-metadata, finalize-memref-to-llvm, \ + convert-func-to-llvm, reconcile-unrealized-casts)" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O3 + -o ${BUDDY_BINARY_DIR}/../examples/BuddyFusedLeNet/forward.o + DEPENDS ${BUDDY_EXAMPLES_DIR}/BuddyFusedLeNet/forward.mlir + COMMENT "Building forward.o" + VERBATIM +) + +add_library(FUSED_LENET STATIC ${SUBGRAPH_OBJECTS} forward.o) + +SET_TARGET_PROPERTIES(FUSED_LENET PROPERTIES LINKER_LANGUAGE C) + +add_executable(buddy-fused-lenet-run buddy-lenet-main.cpp) +target_link_directories(buddy-fused-lenet-run PRIVATE ${LLVM_LIBRARY_DIR}) + +set(BUDDY_LENET_LIBS FUSED_LENET mlir_c_runner_utils ${PNG_LIBRARIES}) + +target_link_libraries(buddy-fused-lenet-run ${BUDDY_LENET_LIBS}) diff --git a/examples/BuddyFusedLeNet/README.md b/examples/BuddyFusedLeNet/README.md new file mode 100644 index 0000000000..b3cad43a4f --- /dev/null +++ b/examples/BuddyFusedLeNet/README.md @@ -0,0 +1,47 @@ +# Buddy Compiler Fuse Ops Example + +## Fused LeNet Model Inference + +0. Activate your python environment. + +1. Build buddy-mlir + +```bash +$ mkdir build && cd build +$ cmake -G Ninja .. \ + -DMLIR_DIR=$PWD/../llvm/build/lib/cmake/mlir \ + -DLLVM_DIR=$PWD/../llvm/build/lib/cmake/llvm \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DBUDDY_MLIR_ENABLE_PYTHON_PACKAGES=ON \ + -DPython3_EXECUTABLE=$(which python3) \ + -DBUDDY_MLIR_ENABLE_DIP_LIB=ON \ + -DBUDDY_ENABLE_PNG=ON +$ ninja +$ ninja check-buddy +``` + +2. Set the `PYTHONPATH` environment variable. + +Make sure you are in the build directory. + +```bash +$ export BUDDY_MLIR_BUILD_DIR=$PWD +$ export LLVM_MLIR_BUILD_DIR=$PWD/../llvm/build +$ export PYTHONPATH=${LLVM_MLIR_BUILD_DIR}/tools/mlir/python_packages/mlir_core:${BUDDY_MLIR_BUILD_DIR}/python_packages:${PYTHONPATH} +``` + +3. Set the `FUSED_LENET_EXAMPLE_PATH` environment variable. + +```bash +$ export FUSED_LENET_EXAMPLE_PATH=${BUDDY_MLIR_BUILD_DIR}/../examples/BuddyFusedLeNet/ +``` + +4. Build and run the Fused LeNet example + +```bash +$ cmake -G Ninja .. -DBUDDY_FUSED_LENET_EXAMPLES=ON +$ ninja buddy-fused-lenet-run +$ cd bin +$ ./buddy-fused-lenet-run +``` diff --git a/examples/BuddyFusedLeNet/buddy-lenet-import.py b/examples/BuddyFusedLeNet/buddy-lenet-import.py new file mode 100644 index 0000000000..63185a466a --- /dev/null +++ b/examples/BuddyFusedLeNet/buddy-lenet-import.py @@ -0,0 +1,79 @@ +# ===- buddy-lenet-import.py --------------------------------------------------- +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ===--------------------------------------------------------------------------- +# +# This is the LeNet model AOT importer. +# +# ===--------------------------------------------------------------------------- + +import os +from pathlib import Path + +import numpy as np +import torch +from torch._inductor.decomposition import decompositions as inductor_decomp + +from buddy.compiler.frontend import DynamoCompiler +from buddy.compiler.graph import GraphDriver +from buddy.compiler.graph.transform import simply_fuse, my_fuse_ops_test +from buddy.compiler.ops import tosa +from model import LeNet + +# Retrieve the LeNet model path from environment variables. +model_path = os.environ.get("FUSED_LENET_EXAMPLE_PATH") +if model_path is None: + raise EnvironmentError( + "The environment variable 'LENET_MODEL_PATH' is not set or is invalid." + ) + +model = LeNet() +model = torch.load(model_path + "/lenet-model.pth") +model = model.eval() + +# Initialize Dynamo Compiler with specific configurations as an importer. +dynamo_compiler = DynamoCompiler( + primary_registry=tosa.ops_registry, + aot_autograd_decomposition=inductor_decomp, +) + +data = torch.randn([1, 1, 28, 28]) +# Import the model into MLIR module and parameters. +with torch.no_grad(): + graphs = dynamo_compiler.importer(model, data) + +assert len(graphs) == 1 +graph = graphs[0] +params = dynamo_compiler.imported_params[graph] +pattern_list = [my_fuse_ops_test] +graph.fuse_ops(pattern_list) +driver = GraphDriver(graph) +path_prefix = os.path.dirname(os.path.abspath(__file__)) + +for i in range(len(driver.subgraphs)): + driver.subgraphs[i].lower_to_top_level_ir() + with open(os.path.join(path_prefix, f"subgraph{i}.mlir"), "w") as module_file: + print(driver.subgraphs[i]._imported_module, file=module_file) + +with open(os.path.join(path_prefix, "forward.mlir"), "w") as module_file: + print(driver.construct_main_graph(True), file=module_file) + +params = dynamo_compiler.imported_params[graph] +current_path = os.path.dirname(os.path.abspath(__file__)) + +float32_param = np.concatenate( + [param.detach().numpy().reshape([-1]) for param in params] +) + +float32_param.tofile(Path(current_path) / "arg0.data") diff --git a/examples/BuddyFusedLeNet/buddy-lenet-main.cpp b/examples/BuddyFusedLeNet/buddy-lenet-main.cpp new file mode 100644 index 0000000000..b882f823c7 --- /dev/null +++ b/examples/BuddyFusedLeNet/buddy-lenet-main.cpp @@ -0,0 +1,133 @@ +//===- buddy-lenet-main.cpp -----------------------------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +constexpr size_t ParamsSize = 44426; +const std::string ImgName = "1-28*28.png"; + +/// Declare LeNet forward function. +extern "C" void _mlir_ciface_forward(MemRef *output, + MemRef *arg0, + dip::Image *input); + +/// Print [Log] label in bold blue format. +void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } + +/// Load parameters into data container. +void loadParameters(const std::string ¶mFilePath, + MemRef ¶ms) { + const auto loadStart = std::chrono::high_resolution_clock::now(); + // Open the parameter file in binary mode. + std::ifstream paramFile(paramFilePath, std::ios::in | std::ios::binary); + if (!paramFile.is_open()) { + throw std::runtime_error("[Error] Failed to open params file!"); + } + printLogLabel(); + std::cout << "Loading params..." << std::endl; + printLogLabel(); + // Print the canonical path of the parameter file. + std::cout << "Params file: " << std::filesystem::canonical(paramFilePath) + << std::endl; + // Read the parameter data into the provided memory reference. + paramFile.read(reinterpret_cast(params.getData()), + sizeof(float) * (params.getSize())); + if (paramFile.fail()) { + throw std::runtime_error("Error occurred while reading params file!"); + } + paramFile.close(); + const auto loadEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration loadTime = + loadEnd - loadStart; + printLogLabel(); + std::cout << "Params load time: " << (double)(loadTime.count()) / 1000 + << "s\n" + << std::endl; +} + +/// Softmax function to convert logits to probabilities. +void softmax(float *input, size_t size) { + size_t i; + float max_value = -INFINITY; + double sum = 0.0; + // Find the maximum value in the input array for numerical stability. + for (i = 0; i < size; ++i) { + if (max_value < input[i]) { + max_value = input[i]; + } + } + // Calculate the sum of the exponentials of the input elements, normalized by + // the max value. + for (i = 0; i < size; ++i) { + sum += exp(input[i] - max_value); + } + // Normalize the input array with the softmax calculation. + for (i = 0; i < size; ++i) { + input[i] = exp(input[i] - max_value) / sum; + } +} + +int main() { + // Print the title of this example. + const std::string title = "Fused LeNet Inference Powered by Buddy Compiler"; + std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; + + // Define the sizes of the output tensors. + intptr_t sizesOutput[2] = {1, 10}; + + // Create input and output containers for the image and model output. + std::string lenetDir = getenv("FUSED_LENET_EXAMPLE_PATH"); + std::string imgPath = lenetDir + "/images/" + ImgName; + dip::Image input(imgPath, dip::DIP_GRAYSCALE, true /* norm */); + MemRef output(sizesOutput); + + // Load model parameters from the specified file. + std::string paramsDir = lenetDir + "/arg0.data"; + MemRef paramsContainer({ParamsSize}); + loadParameters(paramsDir, paramsContainer); + + // Call the forward function of the model. + _mlir_ciface_forward(&output, ¶msContainer, &input); + + // Apply softmax to the output logits to get probabilities. + auto out = output.getData(); + softmax(out, 10); + + // Find the classification and print the result. + float maxVal = 0; + float maxIdx = 0; + for (int i = 0; i < 10; ++i) { + if (out[i] > maxVal) { + maxVal = out[i]; + maxIdx = i; + } + } + + std::cout << "Classification: " << maxIdx << std::endl; + std::cout << "Probability: " << maxVal << std::endl; + + return 0; +} diff --git a/examples/BuddyFusedLeNet/images/1-28*28.png b/examples/BuddyFusedLeNet/images/1-28*28.png new file mode 100644 index 0000000000000000000000000000000000000000..0f25e8b026430e44d856a01bbc97b862fdd3f2b0 GIT binary patch literal 1439 zcmV;Q1z`G#P)4Tx0C=2jkWWhjQ540`s3nvOqX?1~vk0QFkkKgGO%@fn7_{gQv>4x*3OYT; ziD(mjfR@pwee?~a2 zjJmqEuKHi#K?p%iq0?j~t{X;zM)0leRlSEI^=?f5^?V*m<)?41_cpu(Pp`h?zw>R? zWo1f?^n+Ss+;IUVLTv1~T=G6~pF>9xA4<+P_*8Pb!58(JrDUA=mN>|ArbYZn98S0R z*%mGqw%OMW^7=r=UQUtrQx9Smb4burVL-zqwT1=C=>MHqeJ74BaO}cC9$Dnz(zZ?x zM*$h)Mc7~%N0?YcggPd({+(gdvnlHdouJb6tYP3R3iO7X-Voi?a{ye9a?>$?l2xj{ z(q>d^aCaH#I1=J*1@MmmwTck$Wg%)OfcF8os(u0AtklSyJoR0MISaOJxT|A9Zny?@W83qi7VBW}fohz3H87|b}Cetiq6wr7&u z+c2By$EiAX>LCV$K`_REmkoMFDFq>bj0++i!U9 z;k`$v(*Xd~bq(d5TYK0!7cYkpKt#y048|A;A<*e`pp-&YRZvPr20{p^>pI@e^E?{p zoP+lsLTepTkJyWJ2_c}hh7bbQ+J+ZODFA>mrr{wQz@g#0s!iRd#gB&&V2r`p*%>Y_ zE-)AjaCLQso0}UbrNCNf1E(QTQp)(V4Z@3Q$@3iF-`_YoI>P1UCA!@%y4^1B?(VQy zEE)it91%i5Zrf;!#~2d@QkEs2pP#W@E^&T-j?>fA7zU2NlydDIB7$5)O8|KhQA2e^ zgu!3{?>(l|DXOZ1wKjg<`ST7dd8^vWYD<{`t+kL+VmKV)pP!t7>F(}It4-XHhsw!5SO=U4%4M4Uc^){u*T8pA6u)DhpBEoDo!~Oj|h$sSX z%j-z#)}7X3t9!j3Mxzm=lqky*@9*!Zs;WWZw!3Q{Zac&ld+$*c1^WFy>bk~au|Qqd zu-2}fZ!4YmRqFmW?!EUh@wL{-^BmS%OePc5b&XD^vqs~l@PrT`(~bXHTm;f~^YQV4 zx~`$MhSoZslTtRkYrMlXkiARWR7wrUi2rG=WAd+7D>&yG^|Re)*_i(oO-cvLKKOvu zY8Cgr_i)br(v}$4eyc%gyV$b#+_{MedwYA(na1nuE3U7vW7p?en&u(X+Q3LH*cMNv z6oe2MjYc^A=M;IKV=|dwJRUa`+U_viWg2g_!O|MaQyEWUd7k6Xzkhy`+y^N2Q%j|k zab{_c7O5fD+Fwdp9Gld|g7Dr)p$I7;g^b;S2P`(e-F!J*GIgJbpp=T%5fS?RKC&!} zk4~pk%w{t@K0e}W`4xfKOCbcZEQ?BQ=c3}tE9E+^?kU|wgr}z`yu7^N_VyNKS;iQ1 zze|m`);7is06$}5T6Fng1_IECN59|4!NCFE-ri7ERRr|j!&)1`oO4l7sd7cP+YL-b t+Q+uFCysMEg0O*{hn$-{!}1;x;V-Fn0I?km*yI2J002ovPDHLkV1l^Fsqg>* literal 0 HcmV?d00001 diff --git a/examples/BuddyFusedLeNet/lenet-model.pth b/examples/BuddyFusedLeNet/lenet-model.pth new file mode 100644 index 0000000000000000000000000000000000000000..1fbb41ac7c740cf9bf88c7c9f1dde6bc9ac19ec7 GIT binary patch literal 183344 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 None: """ Initialize the GraphDriver object with a given computational graph. @@ -94,7 +95,7 @@ def build_subgraph_by_group(self): if isinstance(node, OutputOp): for arg in node.args: output_node.append(arg) - + # Identify outputs for each subgraph for subgraph_name in self._graph.op_groups.keys(): subgraphs_outputs[subgraph_name] = [] @@ -127,11 +128,11 @@ def build_subgraph_by_group(self): if inp in node._parents: placeholder_node.add_children(op.name) subgraph_body.append(placeholder_node) - + # Add operations to subgraph body for op in self._graph.op_groups[subgraph_name]: subgraph_body.append(op) - + # Construct output node output_node = OutputOp() output_node.name = "output" @@ -190,12 +191,12 @@ def construct_main_graph(self, do_param_pack=False): self._graph.node_table[output].tensor_meta["dtype"] ) main_graph.body.append(func_node) - + # Adding placeholder operations from the original graph for op in self._graph.body: if isinstance(op, PlaceholderOp): main_graph.body.append(op) - + # TODO: analysis topology order to sort subgraph call. if len(self._subgraphs) == 1: # Adding CallOp to invoke the single subgraph @@ -216,18 +217,63 @@ def construct_main_graph(self, do_param_pack=False): # Adding GetItemOps to retrieve individual output tensors output_node = OutputOp() - for i, output in enumerate(list(self._subgraphs_outputs.values())[0]): + for i, output in enumerate( + list(self._subgraphs_outputs.values())[0] + ): getitem_node = GetItemOp() getitem_node.add_argument(call_node.name) getitem_node.add_argument(i) getitem_node.name = "getitem{}".format(i) output_node.add_argument(getitem_node.name) main_graph.body.append(getitem_node) - + # Marking the final output of the main graph output_node.name = "output" main_graph.body.append(output_node) + # Importing the main graph + with ir.Location.unknown(ir.Context()): + main_importer = GraphImporter( + main_graph.body, + main_graph._fake_params, + main_graph._inputs, + main_graph._func_name, + main_graph._ops_registry, + do_param_pack, + ) + return main_importer.import_main_graph() + else: + for i in range(len(self._subgraphs) - 1): + # Adding CallOp to invoke the single subgraph + call_node = CallOp() + call_node.call_func_name = list(self._subgraphs.keys())[i] + call_node.name = call_node.call_func_name + call_node.tensor_meta = {"shape": [], "dtype": []} + for inp in list(self._subgraphs_inputs.values())[i]: + call_node.add_argument(inp) + for output in list(self._subgraphs_outputs.values())[i]: + call_node.tensor_meta["shape"].append( + self._graph.node_table[output].tensor_meta["shape"] + ) + call_node.tensor_meta["dtype"].append( + self._graph.node_table[output].tensor_meta["dtype"] + ) + main_graph.body.append(call_node) + + # Adding GetItemOps to retrieve individual output tensors + output_node = OutputOp() + for i, output in enumerate(list(self._subgraphs_outputs.values())[0]): + getitem_node = GetItemOp() + getitem_node.add_argument(call_node.name) + getitem_node.add_argument(i) + getitem_node.name = "getitem{}".format(i) + output_node.add_argument(getitem_node.name) + main_graph.body.append(getitem_node) + + # Marking the final output of the main graph + output_node.name = "output" + main_graph.body.append(output_node) + # Importing the main graph with ir.Location.unknown(ir.Context()): main_importer = GraphImporter( diff --git a/frontend/Python/graph/operation.py b/frontend/Python/graph/operation.py index 0eb31fd961..d34d6acf82 100644 --- a/frontend/Python/graph/operation.py +++ b/frontend/Python/graph/operation.py @@ -47,8 +47,8 @@ class OpType(Enum): Note: The underlying values are integers for these operation types. """ - BroadcastType = 0 - ElementwiseType = 1 + ElementwiseType = 0 + BroadcastType = 1 ReshapeType = 2 SliceLikeType = 3 ReduceType = 4 @@ -141,6 +141,14 @@ def tensor_meta(self): def tensor_meta(self, new_tensor_meta): self._tensor_meta = new_tensor_meta + @property + def parents(self): + return self._parents + + @property + def op_type(self): + return self._op_type + class PlaceholderOp(Op): def __init__(self) -> None: diff --git a/frontend/Python/graph/transform/__init__.py b/frontend/Python/graph/transform/__init__.py index d91e0d06b2..fb27605929 100644 --- a/frontend/Python/graph/transform/__init__.py +++ b/frontend/Python/graph/transform/__init__.py @@ -18,5 +18,5 @@ # # ===--------------------------------------------------------------------------- -from .fuse_ops import simply_fuse -from .useless_op_eliminate import maxpool2d_simplify +from .fuse_ops import simply_fuse, my_fuse_ops_test +from .useless_op_eliminate import maxpool2d_simplify, varmean_simpplify diff --git a/frontend/Python/graph/transform/fuse_ops.py b/frontend/Python/graph/transform/fuse_ops.py index ac7d34c99c..70f1919465 100644 --- a/frontend/Python/graph/transform/fuse_ops.py +++ b/frontend/Python/graph/transform/fuse_ops.py @@ -28,6 +28,447 @@ # OP_TYPE_FUSABLE_BY_SPECIFIC_PASS = [] # ANCHOR_OP_TYPE = [] +from ..type import TensorDType +from torch.fx.node import Node +from torch.fx.immutable_collections import immutable_list +from ..operation import OutputOp, PlaceholderOp + +import logging + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger("[BuddyGraphFuseOps]") + + +class GraphNode: + def __init__(self): + self.name = None + self.outputs = [] + self.index = 0 + self.ref = None + self.extern_ref = 0 + self.pattern = OpType.Unfusable + + +class LinkNode: + def __init__(self): + self.value = None + self.pattern = 0 + self.next = None + + +class Group: + def __init__(self): + self.parent = None + self.pattern = 0 + self.root_ref = None + self.master_ref = None + self.name = None + self.num_nodes = 1 + + def FindRoot(self): + if self.parent == None: + return self + else: + root = self + while root.parent != None: + root = root.parent + while self != root: + parent = self.parent + self.parent = root + self = parent + return root + + +class BuddyTopoGraph: + def __init__(self, graph: Graph): + self.edge_node_dict = {} + self.post_dfs_order = [] + self.visited_list = [] + self.added_dict = {} + self.root_flag = 1 + self.root_flag_1 = 1 + self._graph = graph + + def FindNode(self, node_name, nodes): + if node_name in self._graph.node_table: + return self._graph.node_table[node_name], "node" + if node_name == "placeholder": + return "placeholder", "var" + elif node_name is None: + return "None", "var" + elif isinstance(node_name, (TensorDType, int, float, bool)): + return type(node_name), "var" + elif isinstance(node_name, immutable_list): + if isinstance(node_name[0], Node): + node_list = [] + for node_name_element in node_name: + node_list.append( + self._graph.node_table[node_name_element.name] + ) + return node_list, "node_list" + else: + return type(node_name), "var" + + logger.info("cannot find node {0}".format(node_name)) + + def Update(self, node, parent, pattern): + """ + create new graph node with edge and then add to edge_node_dict + """ + if node.name in self.edge_node_dict.keys(): + current = self.edge_node_dict[node.name] + else: + current = GraphNode() + if node.name in self._graph.node_table: + if parent is not None: + link = LinkNode() + if parent.name not in self.edge_node_dict.keys(): + logger.error( + "cannot find node {0} in edge dict, prob this is the last node".format( + parent.name + ) + ) + exit(1) + parent = self.edge_node_dict[parent.name] + link.value = parent + link.pattern = pattern + current.name = node.name + current.outputs.append(link) + else: + current.name = node.name + current.extern_ref = 1 + return current + + def AddNode(self, node, node_pattern): + if node.name not in self.edge_node_dict.keys(): + logger.error( + "cannot find node {0} in edge dict, prob this is the last node".format( + node.name + ) + ) + exit(1) + current = self.edge_node_dict[node.name] + current.index = len(self.post_dfs_order) + current.ref = node + current.pattern = node_pattern + if node.name not in self.added_dict.keys(): + self.post_dfs_order.append(current) + self.added_dict[node.name] = current.index + else: + index = self.added_dict[node.name] + self.post_dfs_order[index] = current + + def VisitExpr(self, node): + """ + build model DAG graph + """ + if node in self.visited_list: + return + if self.root_flag: + edge_root_node = self.Update(node, None, OpType.Unfusable) + self.edge_node_dict[node.name] = edge_root_node + self.root_flag = 0 + op_pattern = node.op_type + for input_s in node.args: + edge_pattern = op_pattern + if input_s == "PlaceholderOp": + break + input_node, node_type = self.FindNode( + input_s, self._graph._ops_registry + ) + if node_type == "node": + edge_node = self.Update(input_node, node, edge_pattern) + self.edge_node_dict[input_node.name] = edge_node + self.VisitExpr(input_node) + self.visited_list.append(input_node) + elif node_type == "var": + self.visited_list.append(input_node) + elif node_type == "node_list": + for next_node in input_node: + edge_node = self.Update(next_node, node, edge_pattern) + self.edge_node_dict[next_node.name] = edge_node + self.VisitExpr(next_node) + self.visited_list.append(next_node) + self.AddNode(node, op_pattern) + return + + +class DominatorTree: + def __init__(self, graph: Graph): + super().__init__() + self.groups = [] + self.tree_nodes = [] + self._graph = graph + + class TreeNode: + def __init__(self): + self.name = None + self.parent = None + self.depth = 0 + self.pattern = None + self.index = 0 + self.gnode = None + + def InitGropus(self, graph): + size = len(graph.post_dfs_order) + for index in range(size): + graph_node = graph.post_dfs_order[index] + group_node = Group() + group_node.pattern = graph_node.pattern + group_node.root_ref = graph_node.ref + group_node.name = graph_node.name + if group_node.pattern == OpType.ReduceType: + group_node.master_ref = graph_node.ref + self.groups.append(group_node) + + def CombinePattern(self, lhs, rhs): + if lhs.value > rhs.value: + return lhs + return rhs + + def LeastCommonAncestorMulEdges(self, lhs, rhs, edge_pattern): + while lhs != rhs: + if lhs == None: + return None + if rhs == None: + return None + if lhs.depth < rhs.depth: + edge_pattern = self.CombinePattern(edge_pattern, rhs.pattern) + rhs = rhs.parent + elif rhs.depth < lhs.depth: + edge_pattern = self.CombinePattern(edge_pattern, lhs.pattern) + lhs = lhs.parent + else: + edge_pattern = self.CombinePattern(edge_pattern, lhs.pattern) + edge_pattern = self.CombinePattern(edge_pattern, rhs.pattern) + lhs = lhs.parent + rhs = rhs.parent + return lhs + + def LeastCommonAncestor(self, edges, edge_pattern, index): + if len(edges) <= index: + return None + link_head = edges[index] + + def get_node(father_node): + oindex = father_node.index + return self.tree_nodes[oindex] + + parent = get_node(link_head.value) + edge_pattern = link_head.value.pattern + index = index + 1 + for i in range(index, len(edges)): + link = edges[index] + parent = self.LeastCommonAncestorMulEdges( + parent, get_node(link.value), edge_pattern + ) + edge_pattern = self.CombinePattern(edge_pattern, link.value.pattern) + return parent + + def GetNode(self, graph_node, graph): + tree_node = self.TreeNode() + if graph_node.extern_ref == 1: + tree_node.name = graph_node.name + tree_node.depth = 1 + tree_node.parent = None + tree_node.pattern = "Unfusable" + tree_node.parent_gnode = graph_node + else: + # find the LCAs of all outputs. + pattern = OpType.ElementwiseType + tree_node.name = graph_node.name + parent = self.LeastCommonAncestor(graph_node.outputs, pattern, 0) + tree_node.depth = parent.depth + 1 if parent else 1 + tree_node.parent = parent + tree_node.pattern = pattern + parent_gnode = None + for node in graph: + if node.name == parent.name: + parent_gnode = node + assert parent_gnode is not None + tree_node.parent_gnode = parent_gnode + return tree_node + + def PostDom(self, graph): + size = len(graph.post_dfs_order) + self.tree_nodes = [None] * size + for i in range(size, 0, -1): + self.tree_nodes[i - 1] = self.GetNode( + graph.post_dfs_order[i - 1], graph.post_dfs_order + ) + + def DominatorPartition(self, graph): + self.InitGropus(graph) + self.PostDom(graph) + + +class GraphPartioner: + def __init__(self, graph: Graph): + self.fuse = None + self.visited = [] + self._graph = graph + + def CheckPath_(self, src, sink, fcond, tree): + if src.name in self.visited: + return True + self.visited.append(src.name) + gnode = tree.groups[src.index] + assert gnode is not None + gnode = gnode.FindRoot() + if not fcond(gnode.pattern, src == sink): + return False + if src == sink: + return True + for link in src.outputs: + if not self.CheckPath_(link.value, sink, fcond, tree): + return False + return True + + def CheckPath(self, src, sink, fcond, tree): + assert src.extern_ref == 0, "root node, error" + self.visited = [] + assert src != sink + for link in src.outputs: + if not self.CheckPath_(link.value, sink, fcond, tree): + return False + return True + + def MergeFromTo(self, child, parent): + child = child.FindRoot() + parent = parent.FindRoot() + if child == parent: + return + parent.num_nodes += child.num_nodes + self._graph.op_groups[parent.name][:0] = self._graph.op_groups[ + child.name + ] + del self._graph.op_groups[child.name] + child.parent = parent + if child.master_ref is not None: + assert parent.master_ref is None + parent.master_ref = child.master_ref + parent.pattern = child.pattern + else: + assert parent.master_ref is not None + child.master_ref = parent.master_ref + child.pattern = parent.pattern + + def CommitFuse_(self, src, sink, target, tree): + if src == sink: + return + if src.name in self.visited: + return + self.visited.append(src.name) + gnode = tree.groups[src.index] + assert gnode is not None + self.MergeFromTo(gnode, target) + for link in src.outputs: + self.CommitFuse_(link.value, sink, target, tree) + + def CommitFuse(self, src, sink, tree): + target = tree.groups[sink.index] + logger.info( + "[Merge] {0} + {1} -> {2}".format(src.name, sink.name, target.name) + ) + self.visited = [] + assert src != sink + self.CommitFuse_(src, sink, target, tree) + + def RunFuse(self, graph, tree): + def fcond0(kind, issink): + return kind.value <= OpType.BroadcastType.value + + for phase in range(0, 1): + for i in range(0, len(tree.groups)): + graph_node = graph.post_dfs_order[i] + dom_node = tree.tree_nodes[i] + group_node = tree.groups[i] + + # if group_node.pattern == OpType.Unfusable: + # continue + # if dom_node.parent == None: + # continue + # dom_parent_gindex = dom_node.parent_gnode.index + # if phase == 2: + # if group_node.pattern > OpType.ElementwiseType: + # continue + # dom_parent_group = tree.groups[dom_parent_gindex] + # dom_root_group = dom_parent_group.FindRoot() + # if dom_root_group.pattern == OpType.GetItemType: + # continue + # if dom_parent_group.pattern == OpType.GetItemType and dom_root_group.pattern == OpType.ElementwiseType: + # def fcond1(kind, is_sink): + # return kind.value <= OpType.ElementwiseType.value + # if self.CheckPath(graph_node, dom_node.parent_gnode, fcond=fcond1, tree=tree): + # self.CommitFuse(graph_node, dom_node.parent_gnode, tree) + # continue + # if tree.groups[dom_parent_gindex] != None and group_node.FindRoot() == tree.groups[dom_parent_gindex].FindRoot(): + # continue + # if tree.groups[dom_parent_gindex].pattern == OpType.GetItemType: + # continue + + if dom_node != None and group_node.pattern == OpType.ReduceType: + if phase != 0: + continue + if ( + dom_node.parent != None + and dom_node.pattern == OpType.ElementwiseType + ): + if self.CheckPath( + graph_node, dom_node.parent_gnode, fcond0, tree + ): + self.CommitFuse( + graph_node, dom_node.parent_gnode, tree + ) + # elif group_node.pattern.value <= OpType.BroadcastType.value: + # if dom_node.parent != None and (dom_node.pattern.value <= OpType.ElementwiseType.value or dom_node.pattern == OpType.ReduceType): + # def fcond2(kind, is_sink): + # if is_sink is False: + # return kind.value <= OpType.ElementwiseType.value + # else: + # return (kind.value <= OpType.BroadcastType.value or kind == OpType.ReduceType or kind == OpType.ElementwiseType or kind == OpType.ReduceType) + # if self.CheckPath(graph_node, dom_node.parent_gnode, fcond2, tree): + # self.CommitFuse(graph_node, dom_node.parent_gnode, tree) + # elif group_node.pattern == OpType.ElementwiseType or group_node.pattern == OpType.GetItemType: + # if phase != 1: + # continue + # def fcond3(kind, is_sink): + # return kind.value <= OpType.ElementwiseType.value + # if self.CheckPath(graph_node, dom_node.parent_gnode, fcond3, tree): + # self.CommitFuse(graph_node, dom_node.parent_gnode, tree) + # else: + # pass + + for node in tree.groups: + if node.master_ref is not None: + logger.info( + "[groups] {0} {1} {2}".format( + node.name, node.num_nodes, node.master_ref.name + ) + ) + # if node.master_ref.name not in self._graph.op_groups: + # self._graph.op_groups[node.master_ref.name] = [] + # self._graph.group_map_device = { + # node.master_ref.name: DeviceType.UNKNOW + # } + # self._graph.op_groups[node.master_ref.name].append( + # self._graph.node_table[node.name] + # ) + + +def my_fuse_ops_test(graph: Graph): + graph._ops_registry["OutputOp"] = OutputOp + graph._ops_registry["PlaceholderOp"] = PlaceholderOp + topo_graph = BuddyTopoGraph(graph) + topo_graph.VisitExpr(graph.body[-1]) + + post_dom_tree = DominatorTree(graph) + post_dom_tree.DominatorPartition(topo_graph) + + fuse_op_object = GraphPartioner(graph) + fuse_op_object.RunFuse(topo_graph, post_dom_tree) + + def simply_fuse(graph: Graph): """ Function to fuse all operations into one graph. diff --git a/frontend/Python/graph/transform/useless_op_eliminate.py b/frontend/Python/graph/transform/useless_op_eliminate.py index a99dbe02c6..509a0d6bc6 100644 --- a/frontend/Python/graph/transform/useless_op_eliminate.py +++ b/frontend/Python/graph/transform/useless_op_eliminate.py @@ -64,3 +64,25 @@ def maxpool2d_simplify(graph: Graph): if op == getitem_node: graph.body[j] = new_node break + +def varmean_simpplify(graph: Graph): + """ + Fuse the varmean op and getitem op to simpllify graph. + Args: + graph (Graph): The Graph to be simplified. + """ + keys_to_remove = [] + + for i, key in enumerate(list(graph.op_groups.keys())): + if key.startswith("var_mean"): + getitem_key1 = list(graph.op_groups.keys())[i + 1] + getitem_key2 = list(graph.op_groups.keys())[i + 2] + + if getitem_key1 in graph.op_groups and getitem_key2 in graph.op_groups: + graph.op_groups[getitem_key1][:0] = graph.op_groups[key] + graph.op_groups[getitem_key2][:0] = graph.op_groups[key] + + keys_to_remove.extend([key]) + + for key in keys_to_remove: + del graph.op_groups[key]