From 590f587b27b1709b4451227c79926f85118d93fc Mon Sep 17 00:00:00 2001 From: yumengbo Date: Wed, 18 Dec 2024 03:04:49 +0800 Subject: [PATCH] Add support for UNARY SILU op . Fix pytorch impl bugs. --- ggml/src/ggml-openvino.cpp | 7 +++++ ggml/src/ggml-openvino/ggml-decoder.cpp | 36 ++++++++++++++++++++----- ggml/src/ggml-openvino/utils.cpp | 2 +- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/ggml/src/ggml-openvino.cpp b/ggml/src/ggml-openvino.cpp index b6f01fdb45..1fede40c4a 100644 --- a/ggml/src/ggml-openvino.cpp +++ b/ggml/src/ggml-openvino.cpp @@ -642,6 +642,13 @@ static const std::set& openvino_ops = []() -> const std::setsrc[0]->name] = node; + inputs[node->name] = node; outputs[node->name] = node; + m_input_names.push_back(node->name); + m_output_names.push_back(node->name); break; } // SCALE @@ -228,13 +230,33 @@ const std::string& GgmlOvDecoder::get_op_type() const { {GGML_OP_UNARY, "GGML_OP_UNARY"}, {GGML_OP_VIEW, "GGML_OP_VIEW"} }; + static const std::map unaryOpTypeMap = { + {GGML_UNARY_OP_ABS, "GGML_UNARY_OP_ABS"}, + {GGML_UNARY_OP_SGN, "GGML_UNARY_OP_SGN"}, + {GGML_UNARY_OP_NEG, "GGML_UNARY_OP_NEG"}, + {GGML_UNARY_OP_STEP, "GGML_UNARY_OP_STEP"}, + {GGML_UNARY_OP_TANH, "GGML_UNARY_OP_TANH"}, + {GGML_UNARY_OP_ELU, "GGML_UNARY_OP_ELU"}, + {GGML_UNARY_OP_RELU, "GGML_UNARY_OP_RELU"}, + {GGML_UNARY_OP_SIGMOID, "GGML_UNARY_OP_SIGMOID"}, + {GGML_UNARY_OP_GELU, "GGML_UNARY_OP_GELU"}, + {GGML_UNARY_OP_GELU_QUICK, "GGML_UNARY_OP_GELU_QUICK"}, + {GGML_UNARY_OP_SILU, "GGML_UNARY_OP_SILU"}, + {GGML_UNARY_OP_HARDSWISH, "GGML_UNARY_OP_HARDSWISH"}, + {GGML_UNARY_OP_HARDSIGMOID, "GGML_UNARY_OP_HARDSIGMOID"}, + {GGML_UNARY_OP_EXP, "GGML_UNARY_OP_EXP"}, + {GGML_UNARY_OP_COUNT, "GGML_UNARY_OP_COUNT"} + }; auto it = opTypeMap.find(m_node->op); if (it != opTypeMap.end()) { + if (it->first == GGML_OP_UNARY) { + auto unary_it = unaryOpTypeMap.find(ggml_get_unary_op(m_node)); + if (unary_it != unaryOpTypeMap.end()) { + return unary_it->second; + } + } return it->second; - } else { - static const std::string unknown_op = "UNKNOWN_OP"; - return unknown_op; - } - // static std::string op_type = ggml_op_name(m_node->op); - // return op_type; + } + static const std::string unknown_op = "UNKNOWN_OP"; + return unknown_op; } diff --git a/ggml/src/ggml-openvino/utils.cpp b/ggml/src/ggml-openvino/utils.cpp index 2436f86feb..3bc5779b49 100644 --- a/ggml/src/ggml-openvino/utils.cpp +++ b/ggml/src/ggml-openvino/utils.cpp @@ -112,7 +112,7 @@ enum ggml_status openvino_frontend_compute(ggml_backend_t backend, struct ggml_c auto output_tensor = infer_request.get_output_tensor(i); std::memcpy(output_tensors[output_names[i]], output_tensor.data(), output_tensor.get_byte_size()); #ifdef GGML_OPENVINO_DEBUG - printf("Output %s after: %g\n", output_names[i], *(double*)(output_tensor.data())); + printf("Output %s after: %g\n", output_names[i].c_str(), *(double*)(output_tensor.data())); #endif }