Skip to content

Commit 9ef450d

Browse files
kobby-kobbsEmmanuel Assumanggithub-actions[bot]
authored
Migrate model tests to ONNX Model ZOO only (microsoft#25888)
### Description - Added `VERIFIED_PUBLIC_MODELS` (20 unique models) and `ONNX_ZOO_MODELS` (158 total) - Implemented `IsModelAllowed()` function with O(1) hash lookup - Added comprehensive name mapping for backwards compatibility - Maintained all existing EP provider configurations ### Motivation and Context - Part of ONNX Runtime Phase 1 migration initiative - Addresses security requirements for public CI pipelines - Prepares for ORT 1.23.0 release compliance --------- Co-authored-by: Emmanuel Assumang <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 2b13541 commit 9ef450d

File tree

6 files changed

+160
-259
lines changed

6 files changed

+160
-259
lines changed

cmake/external/onnxruntime_external_deps.cmake

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -591,10 +591,6 @@ if(NOT (onnx_FOUND OR ONNX_FOUND)) # building ONNX from source
591591
endif()
592592
endif()
593593

594-
if (onnxruntime_RUN_ONNX_TESTS)
595-
add_definitions(-DORT_RUN_EXTERNAL_ONNX_TESTS)
596-
endif()
597-
598594
if(onnxruntime_ENABLE_DLPACK)
599595
message(STATUS "dlpack is enabled.")
600596

onnxruntime/test/framework/inference_session_test.cc

Lines changed: 0 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -588,93 +588,6 @@ TEST(InferenceSessionTests, RequestLoadCancellation) {
588588
}
589589
}
590590

591-
#ifdef ORT_RUN_EXTERNAL_ONNX_TESTS
592-
static bool Compare(const InputDefList& f_arg, const InputDefList& s_arg) {
593-
if (f_arg.size() != s_arg.size()) {
594-
std::cout << "Sizes differ: f_arg size: " << f_arg.size() << " s_arg size: " << s_arg.size() << std::endl;
595-
return false;
596-
}
597-
598-
for (size_t i = 0; i < f_arg.size(); ++i) {
599-
const onnxruntime::NodeArg* x = f_arg[i];
600-
const onnxruntime::NodeArg* y = s_arg[i];
601-
if ((x->Shape() == nullptr) ^ (y->Shape() == nullptr)) {
602-
return false;
603-
}
604-
if (!x->Shape()) {
605-
continue;
606-
}
607-
auto x_shape = utils::GetTensorShapeFromTensorShapeProto(*x->Shape());
608-
auto y_shape = utils::GetTensorShapeFromTensorShapeProto(*y->Shape());
609-
if (x->Name() == y->Name() && x_shape == y_shape && *x->Type() == *y->Type()) {
610-
continue;
611-
}
612-
return false;
613-
}
614-
615-
return true;
616-
}
617-
618-
TEST(InferenceSessionTests, ModelMetadata) {
619-
SessionOptions so;
620-
621-
so.session_logid = "InferenceSessionTests.ModelMetadata";
622-
InferenceSession session_object{so, GetEnvironment()};
623-
auto model_uri = ORT_TSTR("../models/opset8/test_squeezenet/model.onnx");
624-
ASSERT_STATUS_OK(session_object.Load(model_uri));
625-
626-
std::shared_ptr<onnxruntime::Model> p_model;
627-
ASSERT_STATUS_OK(onnxruntime::Model::Load(model_uri, p_model, nullptr, DefaultLoggingManager().DefaultLogger()));
628-
const onnxruntime::Graph& graph = p_model->MainGraph();
629-
630-
// 1. first test the model meta
631-
{
632-
auto retval = session_object.GetModelMetadata();
633-
ASSERT_TRUE(retval.first.IsOK());
634-
const ModelMetadata* m = retval.second;
635-
ASSERT_TRUE(m->custom_metadata_map == p_model->MetaData() &&
636-
m->description == p_model->DocString() &&
637-
m->domain == p_model->Domain() &&
638-
m->graph_name == graph.Name() &&
639-
m->producer_name == p_model->ProducerName() &&
640-
m->version == p_model->ModelVersion());
641-
}
642-
643-
{
644-
// 2. test inputs
645-
auto& inputs = graph.GetInputs();
646-
auto weights = graph.GetAllInitializedTensors();
647-
648-
// skip the weights
649-
InputDefList inputs_no_weights;
650-
for (auto& elem : inputs) {
651-
if (weights.find(elem->Name()) != weights.end()) {
652-
continue;
653-
} else {
654-
inputs_no_weights.push_back(elem);
655-
}
656-
}
657-
658-
auto retval = session_object.GetModelInputs();
659-
std::cout << "weights size: " << weights.size()
660-
<< " inputs.size(): " << inputs.size()
661-
<< " from session: " << retval.second->size() << std::endl;
662-
ASSERT_TRUE(retval.first.IsOK());
663-
ASSERT_TRUE(Compare(inputs_no_weights, *retval.second));
664-
}
665-
666-
// 3. test outputs
667-
{
668-
auto retval = session_object.GetModelOutputs();
669-
ASSERT_TRUE(retval.first.IsOK());
670-
671-
auto& outputs = graph.GetOutputs();
672-
retval = session_object.GetModelOutputs();
673-
ASSERT_TRUE(retval.first.IsOK());
674-
ASSERT_TRUE(Compare(outputs, *retval.second));
675-
}
676-
}
677-
#endif
678591
TEST(InferenceSessionTests, CheckRunLogger) {
679592
if constexpr (!SessionOptions::DEFAULT_USE_PER_SESSION_THREADS) {
680593
GTEST_SKIP() << "Skipping the test";

onnxruntime/test/ir/onnx_model_test.cc

Lines changed: 0 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -26,44 +26,6 @@ class ONNXModelsTest : public ::testing::Test {
2626

2727
std::unique_ptr<logging::Logger> logger_;
2828
};
29-
#ifdef ORT_RUN_EXTERNAL_ONNX_TESTS
30-
// Tests that Resolve() properly clears the state of topological sorted nodes,
31-
// inputs, outputs and valueInfo.
32-
// Assumes the graph passed in has been previously resolved.
33-
static void TestResolve(onnxruntime::Graph& graph) {
34-
GraphViewer graph_viewer(graph);
35-
auto& nodes_before = graph_viewer.GetNodesInTopologicalOrder();
36-
auto& inputs_before = graph.GetInputs();
37-
auto& outputs_before = graph.GetOutputs();
38-
auto& value_info_before = graph.GetValueInfo();
39-
40-
// Touch the graph to force Resolve() to recompute.
41-
graph.SetGraphResolveNeeded();
42-
graph.SetGraphProtoSyncNeeded();
43-
ASSERT_STATUS_OK(graph.Resolve());
44-
45-
GraphViewer graph_viewer_2(graph);
46-
auto& nodes_after = graph_viewer_2.GetNodesInTopologicalOrder();
47-
auto& inputs_after = graph.GetInputs();
48-
auto& outputs_after = graph.GetOutputs();
49-
auto& value_info_after = graph.GetValueInfo();
50-
51-
// Multiple calls to Resolve() should not alter the sorted nodes,
52-
// inputs, outputs and valueInfo. The internal state should be
53-
// cleared.
54-
EXPECT_EQ(nodes_before, nodes_after);
55-
EXPECT_EQ(inputs_before, inputs_after);
56-
EXPECT_EQ(outputs_before, outputs_after);
57-
EXPECT_EQ(value_info_before, value_info_after);
58-
}
59-
60-
TEST_F(ONNXModelsTest, squeeze_net) {
61-
// NOTE: this requires the current directory to be where onnxruntime_ir_UT.exe is located
62-
std::shared_ptr<Model> model;
63-
ASSERT_STATUS_OK(Model::Load(ORT_TSTR("../models/opset8/test_squeezenet/model.onnx"), model, nullptr, *logger_));
64-
TestResolve(model->MainGraph());
65-
}
66-
#endif
6729

6830
TEST_F(ONNXModelsTest, non_existing_model) {
6931
// NOTE: this requires the current directory to be where onnxruntime_ir_UT.exe is located
@@ -96,76 +58,6 @@ class ONNXModelsTest1 : public ::testing::TestWithParam<const ORTCHAR_T*> {
9658
return oss.str();
9759
}
9860
};
99-
#ifdef ORT_RUN_EXTERNAL_ONNX_TESTS
100-
TEST_F(ONNXModelsTest, bvlc_alexnet_1) {
101-
using ::google::protobuf::io::CodedInputStream;
102-
using ::google::protobuf::io::FileInputStream;
103-
using ::google::protobuf::io::ZeroCopyInputStream;
104-
int fd;
105-
ASSERT_STATUS_OK(Env::Default().FileOpenRd(ORT_TSTR("../models/opset8/test_bvlc_alexnet/model.onnx"), fd));
106-
ASSERT_TRUE(fd > 0);
107-
std::unique_ptr<ZeroCopyInputStream> raw_input(new FileInputStream(fd));
108-
std::unique_ptr<CodedInputStream> coded_input(new CodedInputStream(raw_input.get()));
109-
// Allows protobuf library versions < 3.2.0 to parse messages greater than 64MB.
110-
coded_input->SetTotalBytesLimit(INT_MAX);
111-
ModelProto model_proto;
112-
bool result = model_proto.ParseFromCodedStream(coded_input.get());
113-
coded_input.reset();
114-
raw_input.reset();
115-
EXPECT_TRUE(result);
116-
ASSERT_STATUS_OK(Env::Default().FileClose(fd));
117-
118-
std::shared_ptr<Model> model;
119-
ASSERT_STATUS_OK(Model::Load(ORT_TSTR("../models/opset8/test_bvlc_alexnet/model.onnx"), model, nullptr,
120-
*logger_));
121-
122-
// Check the graph input/output/value_info should have the same size as specified in the model file.
123-
EXPECT_EQ(static_cast<size_t>(model_proto.graph().value_info_size()), model->MainGraph().GetValueInfo().size());
124-
EXPECT_EQ(static_cast<size_t>(model_proto.graph().input_size()), model->MainGraph().GetInputs().size() + model->MainGraph().GetAllInitializedTensors().size());
125-
EXPECT_EQ(static_cast<size_t>(model_proto.graph().output_size()), model->MainGraph().GetOutputs().size());
126-
TestResolve(model->MainGraph());
127-
}
128-
129-
TEST_P(ONNXModelsTest1, LoadFromFile) {
130-
std::shared_ptr<Model> model;
131-
ASSERT_STATUS_OK(Model::Load(GetModelFileName(), model, nullptr,
132-
*logger_));
133-
TestResolve(model->MainGraph());
134-
}
135-
136-
TEST_P(ONNXModelsTest1, LoadFromProtobuf) {
137-
using ::google::protobuf::io::CodedInputStream;
138-
using ::google::protobuf::io::FileInputStream;
139-
using ::google::protobuf::io::ZeroCopyInputStream;
140-
int fd;
141-
ASSERT_STATUS_OK(Env::Default().FileOpenRd(GetModelFileName(), fd));
142-
ASSERT_TRUE(fd > 0);
143-
std::unique_ptr<ZeroCopyInputStream> raw_input(new FileInputStream(fd));
144-
std::unique_ptr<CodedInputStream> coded_input(new CodedInputStream(raw_input.get()));
145-
coded_input->SetTotalBytesLimit(INT_MAX);
146-
ModelProto model_proto;
147-
bool result = model_proto.ParseFromCodedStream(coded_input.get());
148-
coded_input.reset();
149-
raw_input.reset();
150-
ASSERT_TRUE(result);
151-
ASSERT_STATUS_OK(Env::Default().FileClose(fd));
152-
std::shared_ptr<Model> model;
153-
ASSERT_STATUS_OK(Model::Load(std::move(model_proto), model, nullptr,
154-
*logger_));
155-
TestResolve(model->MainGraph());
156-
}
157-
158-
#ifndef DISABLE_CONTRIB_OPS
159-
INSTANTIATE_TEST_SUITE_P(ONNXModelsTests,
160-
ONNXModelsTest1,
161-
::testing::Values(ORT_TSTR("bvlc_alexnet"), ORT_TSTR("bvlc_googlenet"), ORT_TSTR("bvlc_reference_caffenet"), ORT_TSTR("bvlc_reference_rcnn_ilsvrc13"), ORT_TSTR("densenet121"), ORT_TSTR("emotion_ferplus"), ORT_TSTR("inception_v1"), ORT_TSTR("inception_v2"), ORT_TSTR("mnist"), ORT_TSTR("resnet50"), ORT_TSTR("shufflenet"), ORT_TSTR("squeezenet"), ORT_TSTR("tiny_yolov2"), ORT_TSTR("vgg19"), ORT_TSTR("zfnet512")));
162-
#else
163-
INSTANTIATE_TEST_SUITE_P(ONNXModelsTests,
164-
ONNXModelsTest1,
165-
::testing::Values(ORT_TSTR("bvlc_alexnet"), ORT_TSTR("bvlc_googlenet"), ORT_TSTR("bvlc_reference_caffenet"), ORT_TSTR("bvlc_reference_rcnn_ilsvrc13"), ORT_TSTR("densenet121"), ORT_TSTR("emotion_ferplus"), ORT_TSTR("inception_v1"), ORT_TSTR("inception_v2"), ORT_TSTR("mnist"), ORT_TSTR("resnet50"), ORT_TSTR("shufflenet"), ORT_TSTR("squeezenet"), ORT_TSTR("vgg19"), ORT_TSTR("zfnet512")));
166-
#endif
167-
168-
#endif
16961

17062
// test a model that conforms to ONNX IR v4 where there are initializers that are not graph inputs.
17163
// a NodeArg should be created for all initializers in this case.

onnxruntime/test/optimizer/resnet50_fusion_test.cc

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
namespace onnxruntime {
1818
namespace test {
19-
// #define ORT_RUN_EXTERNAL_ONNX_TESTS
2019
// #define MLAS_F16VEC_INTRINSICS_SUPPORTED
2120

2221
#define MODEL_FOLDER ORT_TSTR("testdata/transform/")
@@ -28,54 +27,7 @@ class ResNet50FusionTests : public ::testing::Test {
2827
}
2928
std::unique_ptr<logging::Logger> logger;
3029
};
31-
#if defined(ORT_RUN_EXTERNAL_ONNX_TESTS)
32-
TEST_F(ResNet50FusionTests, FuseConvIntegrationTest) {
33-
std::basic_string<ORTCHAR_T> fp32_model_path = ORT_TSTR("../models/opset10/Resnet50_Fusion_Testing/resnet50.onnx");
34-
std::shared_ptr<Model> fp32_model;
35-
std::basic_string<ORTCHAR_T> fp16_model_path = ORT_TSTR("../models/opset10/Resnet50_Fusion_Testing_fp16/resnet50.fp16.onnx");
36-
std::shared_ptr<Model> fp16_model;
37-
if (Model::Load(fp32_model_path, fp32_model, nullptr, *logger) != Status::OK()) {
38-
GTEST_SKIP() << "Failed to load model: " << fp32_model_path;
39-
}
40-
if (Model::Load(fp16_model_path, fp16_model, nullptr, *logger) != Status::OK()) {
41-
GTEST_SKIP() << "Failed to load model: " << fp16_model_path;
42-
}
43-
// ASSERT_STATUS_OK(Model::Load(fp32_model_path, fp32_model, nullptr, *logger));
44-
Graph& fp32_graph = fp32_model->MainGraph();
45-
for (auto& node : fp32_model->MainGraph().Nodes()) {
46-
node.SetExecutionProviderType(kCpuExecutionProvider);
47-
}
48-
Graph& fp16_graph = fp16_model->MainGraph();
49-
for (auto& node : fp16_model->MainGraph().Nodes()) {
50-
node.SetExecutionProviderType(kCpuExecutionProvider);
51-
}
52-
// std::cout << "-------Op Counts Before Fusion---------" << std::endl;
53-
std::map<std::string, int> fp32_op_count = CountOpsInGraph(fp32_graph);
54-
std::map<std::string, int> fp16_op_count = CountOpsInGraph(fp16_graph);
55-
for (auto& op : fp32_op_count) {
56-
// std::cout << op.first << " " << op.second << std::endl;
57-
ASSERT_EQ(op.second, fp16_op_count[op.first]);
58-
}
5930

60-
onnxruntime::GraphTransformerManager graph_transformation_mgr_32{5};
61-
ASSERT_STATUS_OK(graph_transformation_mgr_32.Register(std::make_unique<ConvActivationFusion>(), TransformerLevel::Level3));
62-
ASSERT_STATUS_OK(graph_transformation_mgr_32.Register(std::make_unique<ConvAddActivationFusion>(), TransformerLevel::Level3));
63-
ASSERT_STATUS_OK(graph_transformation_mgr_32.ApplyTransformers(fp32_graph, TransformerLevel::Level3, *logger));
64-
ASSERT_STATUS_OK(Model::Save(*fp32_model, ORT_TSTR("resnet50_fused.onnx")));
65-
66-
onnxruntime::GraphTransformerManager graph_transformation_mgr_16{5};
67-
ASSERT_STATUS_OK(graph_transformation_mgr_16.Register(std::make_unique<ConvActivationFusion>(), TransformerLevel::Level3));
68-
ASSERT_STATUS_OK(graph_transformation_mgr_16.Register(std::make_unique<ConvAddActivationFusion>(), TransformerLevel::Level3));
69-
ASSERT_STATUS_OK(graph_transformation_mgr_16.ApplyTransformers(fp16_graph, TransformerLevel::Level3, *logger));
70-
ASSERT_STATUS_OK(Model::Save(*fp16_model, ORT_TSTR("resnet50_fp16_fused.onnx")));
71-
// std::cout << "-------Op Counts After Fusion---------" << std::endl;
72-
fp32_op_count = CountOpsInGraph(fp32_graph);
73-
fp16_op_count = CountOpsInGraph(fp16_graph);
74-
// for (auto& op : fp32_op_count) {
75-
// ASSERT_EQ(op.second, fp16_op_count[op.first]);
76-
// }
77-
}
78-
#endif // defined(ORT_RUN_EXTERNAL_ONNX_TESTS)
7931
TEST_F(ResNet50FusionTests, FuseConvAddReluUnitTest) {
8032
constexpr const ORTCHAR_T* model_uri = MODEL_FOLDER "fusion/conv_add_relu_fp16.onnx";
8133
std::shared_ptr<Model> p_model;

0 commit comments

Comments
 (0)