Skip to content
This repository has been archived by the owner on Jan 3, 2023. It is now read-only.

Commit

Permalink
Provenance for builders (#3644)
Browse files Browse the repository at this point in the history
* Provenance for builders

* Tests

* Tests

* Update src/ngraph/node.hpp

Co-Authored-By: Sayantan Sarkar <[email protected]>

* style
  • Loading branch information
diyessi authored Sep 20, 2019
1 parent 02909e4 commit 3f672f0
Show file tree
Hide file tree
Showing 17 changed files with 315 additions and 65 deletions.
2 changes: 1 addition & 1 deletion src/ngraph/builder/autobroadcast.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ namespace ngraph
return_value, final_shape, broadcast_axes);
}

return return_value.get_node_shared_ptr();
return return_value.get_node_shared_ptr()->add_provenance_group_members_above({value});
}

std::pair<std::shared_ptr<Node>, std::shared_ptr<Node>>
Expand Down
2 changes: 1 addition & 1 deletion src/ngraph/builder/make_constant.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ namespace ngraph
val = std::make_shared<ngraph::op::Broadcast>(val, shape, axes);
}

return val;
return val->add_provenance_group_members_above({});
}
}
}
11 changes: 7 additions & 4 deletions src/ngraph/builder/norm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,8 @@ namespace ngraph
values->get_shape(),
vector<float>(shape_size(values->get_shape()), 1.f / p_norm));

return {make_shared<op::Power>(values, inv_p_node)};
return {make_shared<op::Power>(values, inv_p_node)
->add_provenance_group_members_above({value})};
}
}

Expand All @@ -80,7 +81,8 @@ namespace ngraph
shared_ptr<Node> non_zero_values = make_shared<op::Convert>(
make_shared<op::NotEqual>(value, zero_node), value.get_element_type());

return make_shared<op::Sum>(non_zero_values, reduction_axes);
return make_shared<op::Sum>(non_zero_values, reduction_axes)
->add_provenance_group_members_above({value});
}

shared_ptr<Node>
Expand All @@ -94,7 +96,7 @@ namespace ngraph
values->get_shape(),
vector<float>(shape_size(values->get_shape()), bias))};

return values + bias_node;
return (values + bias_node)->add_provenance_group_members_above({value});
}

shared_ptr<Node>
Expand All @@ -107,7 +109,8 @@ namespace ngraph
values->get_shape(),
vector<float>(shape_size(values->get_shape()), bias))};

return {make_shared<op::Sqrt>(values + bias_node)};
return {make_shared<op::Sqrt>(values + bias_node)
->add_provenance_group_members_above({value})};
}

shared_ptr<Node> lp_norm(const Output<Node>& value,
Expand Down
3 changes: 2 additions & 1 deletion src/ngraph/builder/numpy_transpose.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ namespace ngraph
out_shape.push_back(in_shape[order[i]]);

// do the reshaping with the order
return std::make_shared<ngraph::op::Reshape>(value, order, out_shape);
return std::make_shared<ngraph::op::Reshape>(value, order, out_shape)
->add_provenance_group_members_above({value});
}

} // namespace builder
Expand Down
92 changes: 80 additions & 12 deletions src/ngraph/builder/quantization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ namespace ngraph

auto zero = make_constant(quant_type, shape, 0);
auto scale = quantization_util::get_scale(min, max, quant_type, true);
return make_shared<op::Quantize>(input, scale, zero, quant_type, axes, round_mode);
return make_shared<op::Quantize>(input, scale, zero, quant_type, axes, round_mode)
->add_provenance_group_members_above({input, min, max});
}

shared_ptr<Node> ScaledDequantize(const Output<Node>& input,
Expand Down Expand Up @@ -89,7 +90,8 @@ namespace ngraph

auto zero = make_constant(quant_type, shape, 0);
auto scale = quantization_util::get_scale(min, max, quant_type);
return make_shared<op::Dequantize>(input, scale, zero, real_type, axes);
return make_shared<op::Dequantize>(input, scale, zero, real_type, axes)
->add_provenance_group_members_above({input, min, max});
}

shared_ptr<Node> ScaledQuantizedConcat(const NodeVector& args,
Expand Down Expand Up @@ -123,8 +125,21 @@ namespace ngraph
AxisSet{},
op::Quantize::RoundMode::ROUND_NEAREST_TOWARD_EVEN);
}

return make_shared<op::QuantizedConcat>(rescaled_args, concatenation_axis);
OutputVector base;
for (auto node : args)
{
base.push_back(node);
}
for (auto node : mins)
{
base.push_back(node);
}
for (auto node : maxs)
{
base.push_back(node);
}
return make_shared<op::QuantizedConcat>(rescaled_args, concatenation_axis)
->add_provenance_group_members_above(base);
}

shared_ptr<Node> ScaledQuantizedAvgPool(const Output<Node>& input,
Expand All @@ -141,7 +156,8 @@ namespace ngraph
window_movement_strides,
padding_below,
padding_above,
include_padding_in_avg_computation);
include_padding_in_avg_computation)
->add_provenance_group_members_above({input});
}

shared_ptr<Node> ScaledQuantizedConvolutionBias(const Output<Node>& input,
Expand Down Expand Up @@ -187,7 +203,16 @@ namespace ngraph
padding_above,
data_dilation_strides,
requantization_scale,
with_relu);
with_relu)
->add_provenance_group_members_above({input,
filters,
bias,
min_input,
max_input,
min_filter,
max_filter,
min_output,
max_output});
}

shared_ptr<Node> ScaledQuantizedConvolutionRelu(const Output<Node>& input,
Expand All @@ -214,7 +239,15 @@ namespace ngraph
padding_below,
padding_above,
data_dilation_strides,
requantization_scale);
requantization_scale)
->add_provenance_group_members_above({input,
filters,
min_input,
max_input,
min_filter,
max_filter,
min_output,
max_output});
}

shared_ptr<Node> ScaledQuantizedMaxPool(const Output<Node>& input,
Expand All @@ -226,7 +259,8 @@ namespace ngraph
const Output<Node>& /* max */)
{
return make_shared<op::QuantizedMaxPool>(
input, window_shape, window_movement_strides, padding_below, padding_above);
input, window_shape, window_movement_strides, padding_below, padding_above)
->add_provenance_group_members_above({input});
}

shared_ptr<Node> ScaledQuantizedConvolutionBiasAdd(const Output<Node>& input,
Expand Down Expand Up @@ -280,7 +314,19 @@ namespace ngraph
data_dilation_strides,
requantization_scale,
sum_scale,
with_relu);
with_relu)
->add_provenance_group_members_above({input,
filters,
bias,
sum_input,
min_input,
max_input,
min_filter,
max_filter,
min_output,
max_output,
min_sum_input,
max_sum_input});
}

shared_ptr<Node>
Expand Down Expand Up @@ -340,7 +386,19 @@ namespace ngraph
data_dilation_strides,
requantization_scale,
sum_scale,
with_relu);
with_relu)
->add_provenance_group_members_above({input,
filters,
bias,
sum_input,
min_input,
max_input,
min_filter,
max_filter,
min_output,
max_output,
min_sum_input,
max_sum_input});
return make_shared<op::Convert>(qconv, element::u8);
}

Expand Down Expand Up @@ -381,7 +439,9 @@ namespace ngraph
bias, bias_scale, zero, element::i32, quantization_axes, round_mode);
}
return make_shared<op::QuantizedDotBias>(
input, filters, mybias, requantization_scale, requantize, with_relu);
input, filters, mybias, requantization_scale, requantize, with_relu)
->add_provenance_group_members_above(
{min_input, max_input, min_filter, max_filter, min_output, max_output});
}

shared_ptr<Node> ScaledQuantizedDot(const Output<Node>& input,
Expand All @@ -406,7 +466,15 @@ namespace ngraph
with_relu ? element::u8 : element::i8,
requantize);
return make_shared<op::QuantizedDot>(
input, filters, requantization_scale, requantize, with_relu);
input, filters, requantization_scale, requantize, with_relu)
->add_provenance_group_members_above({input,
filters,
min_input,
max_input,
min_filter,
max_filter,
min_output,
max_output});
}
} // namespace builder
} // namespace ngraph
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ namespace ngraph
mybias = make_shared<op::Quantize>(
bias, bias_scale, zero, element::i32, quantization_axes, round_mode);
}

return make_shared<op::QuantizedConvolutionBias>(input,
filter,
mybias,
Expand All @@ -73,7 +72,9 @@ namespace ngraph
padding_above,
data_dilation_strides,
requantization_scale,
false);
false)
->add_provenance_group_members_above(
{input, filter, bias, input_scale, filter_scale, output_scale});
}
}
}
Expand Down
38 changes: 25 additions & 13 deletions src/ngraph/builder/quantization/quantized_linear_matmul.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,20 +73,30 @@ namespace ngraph

auto dot = make_shared<op::Dot>(dq_input0, dq_input1, 1);
return make_shared<op::Quantize>(
dot,
output_scale,
output_zero_point,
output_zero_point.get_element_type(),
axes,
op::Quantize::RoundMode::ROUND_NEAREST_TOWARD_EVEN);
dot,
output_scale,
output_zero_point,
output_zero_point.get_element_type(),
axes,
op::Quantize::RoundMode::ROUND_NEAREST_TOWARD_EVEN)
->add_provenance_group_members_above({input0,
input1,
input0_scale,
input0_zero_point,
input1_scale,
input1_scale,
input1_zero_point,
output_scale,
output_zero_point});
}
}

shared_ptr<Node> QuantizedLinearMatmulInteger(const Output<Node>& input0,
const Output<Node>& input1)
{
auto output_scale = make_constant(element::f32, Shape{}, 1);
return make_shared<op::QuantizedDot>(input0, input1, output_scale, false, false);
return make_shared<op::QuantizedDot>(input0, input1, output_scale, false, false)
->add_provenance_group_members_above({input0, input1});
}

shared_ptr<Node> QuantizedLinearMatmulInteger(const Output<Node>& input0,
Expand Down Expand Up @@ -124,12 +134,14 @@ namespace ngraph

const auto dot = make_shared<op::Dot>(dq_input0, dq_input1, 1);
return make_shared<op::Quantize>(
dot,
output_scale,
output_zero_point,
output_zero_point->get_element_type(),
axes,
op::Quantize::RoundMode::ROUND_NEAREST_TOWARD_EVEN);
dot,
output_scale,
output_zero_point,
output_zero_point->get_element_type(),
axes,
op::Quantize::RoundMode::ROUND_NEAREST_TOWARD_EVEN)
->add_provenance_group_members_above(
{input0, input1, input0_zero_point, input1_zero_point});
}
}
}
Expand Down
6 changes: 4 additions & 2 deletions src/ngraph/builder/quantization_utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ namespace ngraph
{
auto abs_a = std::make_shared<op::Abs>(a);
auto abs_b = std::make_shared<op::Abs>(b);
return std::make_shared<op::Maximum>(abs_a, abs_b);
return std::make_shared<op::Maximum>(abs_a, abs_b)
->add_provenance_group_members_above({a, b});
}

std::shared_ptr<Node> get_scale(const Output<Node>& input_min_range,
Expand Down Expand Up @@ -72,7 +73,8 @@ namespace ngraph
auto max_abs_range = max_abs(min_range, max_range);
auto target_range = make_constant(type, shape, range);

return max_abs_range / target_range;
return (max_abs_range / target_range)
->add_provenance_group_members_above({input_min_range, input_max_range});
}
}
}
Expand Down
42 changes: 25 additions & 17 deletions src/ngraph/builder/quantized_conv_builder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,23 +56,31 @@ namespace ngraph
auto filter_zero_point = op::Constant::create(filters.get_element_type(), Shape{}, {0});

return make_shared<op::QuantizedConvolution>(
input,
filters,
window_movement_strides,
window_dilation_strides,
padding_below,
padding_above,
data_dilation_strides,
input_scale,
input_zero_point,
filter_scale,
filter_zero_point,
output_scale,
filter_zero_point, // output type will be same as filter
output_type,
input_axes,
filter_axes,
output_axes);
input,
filters,
window_movement_strides,
window_dilation_strides,
padding_below,
padding_above,
data_dilation_strides,
input_scale,
input_zero_point,
filter_scale,
filter_zero_point,
output_scale,
filter_zero_point, // output type will be same as filter
output_type,
input_axes,
filter_axes,
output_axes)
->add_provenance_group_members_above({input,
filters,
min_input,
max_input,
min_filter,
max_filter,
min_output,
max_output});
}
}
}
Loading

0 comments on commit 3f672f0

Please sign in to comment.