-
Notifications
You must be signed in to change notification settings - Fork 2.4k
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
[PDPD] fix ops for baidu customer #27222
Changes from all commits
1fa0b0a
8c13775
d1320ac
e0d3c03
16dfa2d
4907e28
3ef457b
eade946
add78b0
69410ef
cff4b98
8ee7d57
929ed83
3b37ca8
323406d
1565e41
afb8741
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// Copyright (C) 2018-2024 Intel Corporation | ||
// SPDX-License-Identifier: Apache-2.0 | ||
// | ||
|
||
#include "default_opset.hpp" | ||
#include "openvino/frontend/paddle/node_context.hpp" | ||
#include "openvino/frontend/paddle/visibility.hpp" | ||
|
||
namespace ov { | ||
namespace frontend { | ||
namespace paddle { | ||
namespace op { | ||
NamedOutputs elu(const NodeContext& node) { | ||
auto data = node.get_input("X"); | ||
auto alpha = node.get_attribute<float>("alpha", 1.0); | ||
const auto& elu_node = std::make_shared<default_opset::Elu>(data, alpha); | ||
return node.default_single_output_mapping({elu_node}, {"Out"}); | ||
} | ||
|
||
} // namespace op | ||
} // namespace paddle | ||
} // namespace frontend | ||
} // namespace ov |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
// Copyright (C) 2018-2024 Intel Corporation | ||
// SPDX-License-Identifier: Apache-2.0 | ||
// | ||
|
||
#include "default_opset.hpp" | ||
#include "openvino/frontend/paddle/node_context.hpp" | ||
|
||
namespace ov { | ||
namespace frontend { | ||
namespace paddle { | ||
namespace op { | ||
NamedOutputs eye(const NodeContext& node) { | ||
auto row = node.get_attribute<int64_t>("num_rows"); | ||
auto col = node.get_attribute<int64_t>("num_columns", row); | ||
auto dtype = node.get_attribute<ov::element::Type>("dtype", ov::element::f32); | ||
|
||
const auto& row_node = std::make_shared<default_opset::Constant>(ov::element::i64, Shape{}, (row)); | ||
const auto& col_node = std::make_shared<default_opset::Constant>(ov::element::i64, Shape{}, (col)); | ||
const auto& diagonal_index_node = std::make_shared<default_opset::Constant>(ov::element::i32, Shape{}, (0)); | ||
|
||
std::shared_ptr<Node> out_node; | ||
if (dtype == ov::element::i32 || dtype == ov::element::i64) { | ||
out_node = std::make_shared<default_opset::Eye>(row_node, col_node, diagonal_index_node, dtype); | ||
} else { | ||
const auto& eye_node = | ||
std::make_shared<default_opset::Eye>(row_node, col_node, diagonal_index_node, ov::element::i32); | ||
out_node = std::make_shared<default_opset::Convert>(eye_node, dtype); | ||
} | ||
|
||
return node.default_single_output_mapping({out_node}, {"Out"}); | ||
} | ||
|
||
} // namespace op | ||
} // namespace paddle | ||
} // namespace frontend | ||
} // namespace ov |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,6 +4,7 @@ | |
|
||
#include "default_opset.hpp" | ||
#include "openvino/frontend/paddle/node_context.hpp" | ||
#include "openvino/opsets/opset4.hpp" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. How about upgrade to latest opset too? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
|
||
namespace ov { | ||
namespace frontend { | ||
|
@@ -147,8 +148,9 @@ static NamedOutputs interpolate(const NodeContext& node, | |
attrs.pads_begin = {0, 0, 0, 0}; | ||
attrs.pads_end = {0, 0, 0, 0}; | ||
|
||
return node.default_single_output_mapping({std::make_shared<Interpolate>(x, target_spatial_shape, scales, attrs)}, | ||
{"Out"}); | ||
return node.default_single_output_mapping( | ||
{std::make_shared<ov::opset4::Interpolate>(x, target_spatial_shape, scales, attrs)}, | ||
{"Out"}); | ||
} | ||
|
||
NamedOutputs linear_interp_v2(const NodeContext& node) { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
# Copyright (C) 2018-2024 Intel Corporation | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
# | ||
# relu6 paddle model generator | ||
# | ||
import numpy as np | ||
from save_model import saveModel | ||
import paddle | ||
import sys | ||
|
||
|
||
def elu(name: str, x, alpha=None, data_type='float32'): | ||
paddle.enable_static() | ||
|
||
with paddle.static.program_guard(paddle.static.Program(), paddle.static.Program()): | ||
node_x = paddle.static.data(name='x', shape=x.shape, dtype=data_type) | ||
|
||
if paddle.__version__ >= '2.0.0': | ||
out = paddle.nn.functional.elu(node_x, alpha, name='elu') | ||
else: | ||
out = paddle.fluid.layers.elu(node_x, alpha, name='elu') | ||
cpu = paddle.static.cpu_places(1) | ||
exe = paddle.static.Executor(cpu[0]) | ||
# startup program will call initializer to initialize the parameters. | ||
exe.run(paddle.static.default_startup_program()) | ||
|
||
outs = exe.run( | ||
feed={'x': x}, | ||
fetch_list=[out]) | ||
|
||
saveModel(name, exe, feed_vars=[node_x], fetchlist=[out], | ||
inputs=[x], outputs=[outs[0]], target_dir=sys.argv[1]) | ||
|
||
return outs[0] | ||
|
||
|
||
def main(): | ||
data_type = 'float32' | ||
data = np.random.randn(2, 3, 4).astype('float32') | ||
elu("elu", data) | ||
|
||
if __name__ == "__main__": | ||
main() |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# Copyright (C) 2018-2024 Intel Corporation | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
# | ||
# fill_const paddle model generator | ||
# | ||
import numpy as np | ||
from save_model import saveModel | ||
import paddle | ||
import sys | ||
|
||
|
||
def eye(name : str, rows, cols = None, dtype = None): | ||
paddle.enable_static() | ||
with paddle.static.program_guard(paddle.static.Program(), paddle.static.Program()): | ||
if paddle.__version__ >= '2.0.0': | ||
x1 = paddle.eye(num_rows=rows, num_columns=cols, dtype=dtype, name='fill') | ||
x2 = paddle.eye(num_rows=rows, num_columns=cols, dtype=dtype, name='fill') | ||
else: | ||
x1 = paddle.fluid.layers.eye(num_rows=rows, num_columns=cols, dtype=dtype, name='fill_constant') | ||
x2 = paddle.fluid.layers.eye(num_rows=rows, num_columns=cols, dtype=dtype, name='fill_constant') | ||
out = paddle.add(x1, x2) | ||
cpu = paddle.static.cpu_places(1) | ||
exe = paddle.static.Executor(cpu[0]) | ||
# startup program will call initializer to initialize the parameters. | ||
exe.run(paddle.static.default_startup_program()) | ||
|
||
outs = exe.run( | ||
fetch_list=[out]) | ||
|
||
saveModel(name, exe, feed_vars=[], fetchlist=[out], inputs=[], outputs=[outs[0]], target_dir=sys.argv[1]) | ||
|
||
return outs[0] | ||
|
||
def main(): | ||
eye("eye", 3) | ||
eye("eye_int32", 2, 3, "int32") | ||
eye("eye_int64", 2, 3, "int64") | ||
|
||
if __name__ == "__main__": | ||
main() |
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.
Is this CHECK in need as it's after an unsqueeze node and should definitely be 1?
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. But PDPD export mechanism always changes from time to time. Sometimes it may be a 0-dim tensor. Sometimes it may be 2-dim tensor. So I have to leave an extra check here.