Refine UnitTest which have acc issue or unspport issue in sp (#659)
1.Skip elementwise/relational op unittest if input/output have INF which sp cannot handle 2.Set different tolerance in Layernom/SoftMax/GRU unittest if SP supported Type: Bug Fix Issue: 37103 Signed-off-by: Feiyue Chen <Feiyue.Chen@verisilicon.com>
This commit is contained in:
parent
a24d2be9c3
commit
4fde0badb2
|
|
@ -38,6 +38,7 @@ class Context {
|
||||||
virtual std::shared_ptr<Graph> CreateGraph(const CompileOption& options) = 0;
|
virtual std::shared_ptr<Graph> CreateGraph(const CompileOption& options) = 0;
|
||||||
|
|
||||||
virtual bool isClOnly() = 0;
|
virtual bool isClOnly() = 0;
|
||||||
|
virtual bool hasSP() = 0;
|
||||||
|
|
||||||
static std::shared_ptr<Context> Create();
|
static std::shared_ptr<Context> Create();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -58,5 +58,9 @@ bool ContextImpl::isClOnly() {
|
||||||
return VSI_NN_HW_EVIS_NONE == context_->config.evis.ver;
|
return VSI_NN_HW_EVIS_NONE == context_->config.evis.ver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ContextImpl::hasSP() {
|
||||||
|
return 0 != context_->config.support_stream_processor;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace vx
|
} // namespace vx
|
||||||
} // namespace tim
|
} // namespace tim
|
||||||
|
|
@ -37,7 +37,8 @@ class ContextImpl : public Context {
|
||||||
std::shared_ptr<Graph> CreateGraph() override;
|
std::shared_ptr<Graph> CreateGraph() override;
|
||||||
std::shared_ptr<Graph> CreateGraph(const CompileOption&) override;
|
std::shared_ptr<Graph> CreateGraph(const CompileOption&) override;
|
||||||
bool isClOnly() override;
|
bool isClOnly() override;
|
||||||
|
bool hasSP() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
vsi_nn_context_t context_;
|
vsi_nn_context_t context_;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@
|
||||||
TEST(FloorDiv, shape_1_fp32) {
|
TEST(FloorDiv, shape_1_fp32) {
|
||||||
auto ctx = tim::vx::Context::Create();
|
auto ctx = tim::vx::Context::Create();
|
||||||
auto graph = ctx->CreateGraph();
|
auto graph = ctx->CreateGraph();
|
||||||
|
if (ctx->hasSP()) GTEST_SKIP();
|
||||||
|
|
||||||
tim::vx::ShapeType io_shape({1});
|
tim::vx::ShapeType io_shape({1});
|
||||||
tim::vx::TensorSpec input_spec(tim::vx::DataType::FLOAT32,
|
tim::vx::TensorSpec input_spec(tim::vx::DataType::FLOAT32,
|
||||||
|
|
@ -135,6 +136,7 @@ TEST(FloorDiv, shape_5_1_broadcast_uint8) {
|
||||||
TEST(Div, shape_1_fp32) {
|
TEST(Div, shape_1_fp32) {
|
||||||
auto ctx = tim::vx::Context::Create();
|
auto ctx = tim::vx::Context::Create();
|
||||||
auto graph = ctx->CreateGraph();
|
auto graph = ctx->CreateGraph();
|
||||||
|
if (ctx->hasSP()) GTEST_SKIP();
|
||||||
|
|
||||||
tim::vx::ShapeType io_shape({1});
|
tim::vx::ShapeType io_shape({1});
|
||||||
tim::vx::TensorSpec input_spec(tim::vx::DataType::FLOAT32,
|
tim::vx::TensorSpec input_spec(tim::vx::DataType::FLOAT32,
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ std::shared_ptr<tim::vx::Tensor> make_empty_tensor(
|
||||||
TEST(GRUCell, unit_4) {
|
TEST(GRUCell, unit_4) {
|
||||||
auto ctx = tim::vx::Context::Create();
|
auto ctx = tim::vx::Context::Create();
|
||||||
auto graph = ctx->CreateGraph();
|
auto graph = ctx->CreateGraph();
|
||||||
|
float tolerance = ctx->hasSP() ? 1e-4f : 1e-5f;
|
||||||
|
|
||||||
uint32_t num_units = 2;
|
uint32_t num_units = 2;
|
||||||
uint32_t feature = 4;
|
uint32_t feature = 4;
|
||||||
|
|
@ -118,5 +119,5 @@ TEST(GRUCell, unit_4) {
|
||||||
|
|
||||||
std::vector<float> output(golden.size());
|
std::vector<float> output(golden.size());
|
||||||
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
||||||
EXPECT_TRUE(ArraysMatch(golden, output, 1e-5f));
|
EXPECT_TRUE(ArraysMatch(golden, output, tolerance));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@
|
||||||
TEST(LayerNorm, axis_0_shape_3_6_1_float) {
|
TEST(LayerNorm, axis_0_shape_3_6_1_float) {
|
||||||
auto ctx = tim::vx::Context::Create();
|
auto ctx = tim::vx::Context::Create();
|
||||||
auto graph = ctx->CreateGraph();
|
auto graph = ctx->CreateGraph();
|
||||||
|
float tolerance = ctx->hasSP() ? 0.01 : 1e-5f;
|
||||||
|
|
||||||
tim::vx::ShapeType io_shape({3, 6, 1});
|
tim::vx::ShapeType io_shape({3, 6, 1});
|
||||||
tim::vx::ShapeType param_shape({6});
|
tim::vx::ShapeType param_shape({6});
|
||||||
|
|
@ -81,12 +82,13 @@ TEST(LayerNorm, axis_0_shape_3_6_1_float) {
|
||||||
|
|
||||||
std::vector<float> output(18);
|
std::vector<float> output(18);
|
||||||
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
||||||
EXPECT_TRUE(ArraysMatch(golden, output, 1e-5f));
|
EXPECT_TRUE(ArraysMatch(golden, output, tolerance));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(LayerNorm, axis_0_shape_2_3_6_1_float) {
|
TEST(LayerNorm, axis_0_shape_2_3_6_1_float) {
|
||||||
auto ctx = tim::vx::Context::Create();
|
auto ctx = tim::vx::Context::Create();
|
||||||
auto graph = ctx->CreateGraph();
|
auto graph = ctx->CreateGraph();
|
||||||
|
float tolerance = ctx->hasSP() ? 0.01 : 1e-5f;
|
||||||
|
|
||||||
tim::vx::ShapeType io_shape({2, 3, 6, 1});
|
tim::vx::ShapeType io_shape({2, 3, 6, 1});
|
||||||
tim::vx::ShapeType param_shape({6});
|
tim::vx::ShapeType param_shape({6});
|
||||||
|
|
@ -139,12 +141,13 @@ TEST(LayerNorm, axis_0_shape_2_3_6_1_float) {
|
||||||
|
|
||||||
std::vector<float> output(36);
|
std::vector<float> output(36);
|
||||||
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
||||||
EXPECT_TRUE(ArraysMatch(golden, output, 1e-5f));
|
EXPECT_TRUE(ArraysMatch(golden, output, tolerance));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(LayerNorm, axis_2_shape_4_2_3_1_float) {
|
TEST(LayerNorm, axis_2_shape_4_2_3_1_float) {
|
||||||
auto ctx = tim::vx::Context::Create();
|
auto ctx = tim::vx::Context::Create();
|
||||||
auto graph = ctx->CreateGraph();
|
auto graph = ctx->CreateGraph();
|
||||||
|
float tolerance = ctx->hasSP() ? 0.01 : 1e-5f;
|
||||||
|
|
||||||
tim::vx::ShapeType io_shape({4, 2, 3, 1});
|
tim::vx::ShapeType io_shape({4, 2, 3, 1});
|
||||||
tim::vx::ShapeType param_shape({1,1,3,1});
|
tim::vx::ShapeType param_shape({1,1,3,1});
|
||||||
|
|
@ -194,7 +197,7 @@ TEST(LayerNorm, axis_2_shape_4_2_3_1_float) {
|
||||||
|
|
||||||
std::vector<float> output(24);
|
std::vector<float> output(24);
|
||||||
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
||||||
EXPECT_TRUE(ArraysMatch(golden, output, 1e-5f));
|
EXPECT_TRUE(ArraysMatch(golden, output, tolerance));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,7 @@ TEST(Equal, shape_1_uint8) {
|
||||||
|
|
||||||
TEST(NotEqual, shape_5_fp32) {
|
TEST(NotEqual, shape_5_fp32) {
|
||||||
auto ctx = tim::vx::Context::Create();
|
auto ctx = tim::vx::Context::Create();
|
||||||
|
if (ctx->hasSP()) GTEST_SKIP();
|
||||||
auto graph = ctx->CreateGraph();
|
auto graph = ctx->CreateGraph();
|
||||||
|
|
||||||
tim::vx::ShapeType io_shape({5});
|
tim::vx::ShapeType io_shape({5});
|
||||||
|
|
@ -101,6 +102,7 @@ TEST(NotEqual, shape_5_fp32) {
|
||||||
TEST(Less, shape_5_1_fp32) {
|
TEST(Less, shape_5_1_fp32) {
|
||||||
auto ctx = tim::vx::Context::Create();
|
auto ctx = tim::vx::Context::Create();
|
||||||
auto graph = ctx->CreateGraph();
|
auto graph = ctx->CreateGraph();
|
||||||
|
if (ctx->hasSP()) GTEST_SKIP();
|
||||||
|
|
||||||
tim::vx::ShapeType io_shape({1,5});
|
tim::vx::ShapeType io_shape({1,5});
|
||||||
tim::vx::TensorSpec input_spec(tim::vx::DataType::FLOAT32,
|
tim::vx::TensorSpec input_spec(tim::vx::DataType::FLOAT32,
|
||||||
|
|
@ -136,6 +138,7 @@ TEST(Less, shape_5_1_fp32) {
|
||||||
TEST(GreaterOrEqual, shape_5_2_1_fp32) {
|
TEST(GreaterOrEqual, shape_5_2_1_fp32) {
|
||||||
auto ctx = tim::vx::Context::Create();
|
auto ctx = tim::vx::Context::Create();
|
||||||
auto graph = ctx->CreateGraph();
|
auto graph = ctx->CreateGraph();
|
||||||
|
if (ctx->hasSP()) GTEST_SKIP();
|
||||||
|
|
||||||
tim::vx::ShapeType io_shape({5,2,1});
|
tim::vx::ShapeType io_shape({5,2,1});
|
||||||
tim::vx::TensorSpec input_spec(tim::vx::DataType::FLOAT32,
|
tim::vx::TensorSpec input_spec(tim::vx::DataType::FLOAT32,
|
||||||
|
|
@ -175,6 +178,7 @@ TEST(GreaterOrEqual, shape_5_2_1_fp32) {
|
||||||
TEST(Greater, shape_5_2_1_1_fp32) {
|
TEST(Greater, shape_5_2_1_1_fp32) {
|
||||||
auto ctx = tim::vx::Context::Create();
|
auto ctx = tim::vx::Context::Create();
|
||||||
auto graph = ctx->CreateGraph();
|
auto graph = ctx->CreateGraph();
|
||||||
|
if (ctx->hasSP()) GTEST_SKIP();
|
||||||
|
|
||||||
tim::vx::ShapeType io_shape({5,2,1,1});
|
tim::vx::ShapeType io_shape({5,2,1,1});
|
||||||
tim::vx::TensorSpec input_spec(tim::vx::DataType::FLOAT32,
|
tim::vx::TensorSpec input_spec(tim::vx::DataType::FLOAT32,
|
||||||
|
|
@ -214,6 +218,7 @@ TEST(Greater, shape_5_2_1_1_fp32) {
|
||||||
TEST(LessOrEqual, shape_1_5_2_1_1_fp32) {
|
TEST(LessOrEqual, shape_1_5_2_1_1_fp32) {
|
||||||
auto ctx = tim::vx::Context::Create();
|
auto ctx = tim::vx::Context::Create();
|
||||||
auto graph = ctx->CreateGraph();
|
auto graph = ctx->CreateGraph();
|
||||||
|
if (ctx->hasSP()) GTEST_SKIP();
|
||||||
|
|
||||||
tim::vx::ShapeType io_shape({1,5,2,1,1});
|
tim::vx::ShapeType io_shape({1,5,2,1,1});
|
||||||
tim::vx::TensorSpec input_spec(tim::vx::DataType::FLOAT32,
|
tim::vx::TensorSpec input_spec(tim::vx::DataType::FLOAT32,
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,10 @@ TEST(Softmax, shape_3_1_float_axis_0) {
|
||||||
|
|
||||||
std::vector<float> output(golden.size());
|
std::vector<float> output(golden.size());
|
||||||
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
||||||
EXPECT_TRUE(ArraysMatch(golden, output, 1e-5f));
|
if (!ctx->hasSP())
|
||||||
|
EXPECT_EQ(golden, output);
|
||||||
|
else
|
||||||
|
EXPECT_TRUE(ArraysMatch(golden, output, 1e-3f));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Softmax, shape_3_4_float_axis_0) {
|
TEST(Softmax, shape_3_4_float_axis_0) {
|
||||||
|
|
@ -96,8 +99,10 @@ TEST(Softmax, shape_3_4_float_axis_0) {
|
||||||
|
|
||||||
std::vector<float> output(golden.size());
|
std::vector<float> output(golden.size());
|
||||||
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
||||||
EXPECT_EQ(golden, output);
|
if (!ctx->hasSP())
|
||||||
// EXPECT_TRUE(ArraysMatch(golden, output, 1e-5f));
|
EXPECT_EQ(golden, output);
|
||||||
|
else
|
||||||
|
EXPECT_TRUE(ArraysMatch(golden, output, 1e-3f));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Softmax, shape_3_4_float_axis_1) {
|
TEST(Softmax, shape_3_4_float_axis_1) {
|
||||||
|
|
@ -136,8 +141,10 @@ TEST(Softmax, shape_3_4_float_axis_1) {
|
||||||
|
|
||||||
std::vector<float> output(golden.size());
|
std::vector<float> output(golden.size());
|
||||||
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
||||||
EXPECT_EQ(golden, output);
|
if (!ctx->hasSP())
|
||||||
// EXPECT_TRUE(ArraysMatch(golden, output, 1e-5f));
|
EXPECT_EQ(golden, output);
|
||||||
|
else
|
||||||
|
EXPECT_TRUE(ArraysMatch(golden, output, 1e-3f));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Softmax, shape_3_3_2_float_axis_0) {
|
TEST(Softmax, shape_3_3_2_float_axis_0) {
|
||||||
|
|
@ -182,8 +189,10 @@ TEST(Softmax, shape_3_3_2_float_axis_0) {
|
||||||
|
|
||||||
std::vector<float> output(golden.size());
|
std::vector<float> output(golden.size());
|
||||||
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
||||||
EXPECT_EQ(golden, output);
|
if (!ctx->hasSP())
|
||||||
// EXPECT_TRUE(ArraysMatch(golden, output, 1e-5f));
|
EXPECT_EQ(golden, output);
|
||||||
|
else
|
||||||
|
EXPECT_TRUE(ArraysMatch(golden, output, 1e-3f));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Softmax, shape_3_3_2_float_axis_1) {
|
TEST(Softmax, shape_3_3_2_float_axis_1) {
|
||||||
|
|
@ -228,8 +237,10 @@ TEST(Softmax, shape_3_3_2_float_axis_1) {
|
||||||
|
|
||||||
std::vector<float> output(golden.size());
|
std::vector<float> output(golden.size());
|
||||||
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
||||||
EXPECT_EQ(golden, output);
|
if (!ctx->hasSP())
|
||||||
// EXPECT_TRUE(ArraysMatch(golden, output, 1e-5f));
|
EXPECT_EQ(golden, output);
|
||||||
|
else
|
||||||
|
EXPECT_TRUE(ArraysMatch(golden, output, 1e-3f));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Softmax, shape_3_3_2_float_axis_2) {
|
TEST(Softmax, shape_3_3_2_float_axis_2) {
|
||||||
|
|
@ -274,6 +285,8 @@ TEST(Softmax, shape_3_3_2_float_axis_2) {
|
||||||
|
|
||||||
std::vector<float> output(golden.size());
|
std::vector<float> output(golden.size());
|
||||||
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
||||||
EXPECT_EQ(golden, output);
|
if (!ctx->hasSP())
|
||||||
// EXPECT_TRUE(ArraysMatch(golden, output, 1e-5f));
|
EXPECT_EQ(golden, output);
|
||||||
|
else
|
||||||
|
EXPECT_TRUE(ArraysMatch(golden, output, 1e-3f));
|
||||||
}
|
}
|
||||||
|
|
@ -35,6 +35,7 @@ std::shared_ptr<tim::vx::Tensor> make_empty_tensor(
|
||||||
TEST(UnidirectionalSequenceGRU, unit_3) {
|
TEST(UnidirectionalSequenceGRU, unit_3) {
|
||||||
auto ctx = tim::vx::Context::Create();
|
auto ctx = tim::vx::Context::Create();
|
||||||
auto graph = ctx->CreateGraph();
|
auto graph = ctx->CreateGraph();
|
||||||
|
float tolerance = ctx->hasSP() ? 1e-4f : 1e-5f;
|
||||||
|
|
||||||
const int timesteps = 1;
|
const int timesteps = 1;
|
||||||
const int batchs = 1;
|
const int batchs = 1;
|
||||||
|
|
@ -125,5 +126,5 @@ TEST(UnidirectionalSequenceGRU, unit_3) {
|
||||||
|
|
||||||
std::vector<float> output(golden.size());
|
std::vector<float> output(golden.size());
|
||||||
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
EXPECT_TRUE(output_tensor->CopyDataFromTensor(output.data()));
|
||||||
EXPECT_TRUE(ArraysMatch(golden, output, 1e-5f));
|
EXPECT_TRUE(ArraysMatch(golden, output, tolerance));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue