Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
0bb58bf
Use py::array::request().itemsize instead of py::array::itemsize()
vawale Aug 3, 2025
531314f
Add CMake build for onnx app
vawale Aug 3, 2025
4207cbd
Format apps/onnx/CMakeLists.txt
alexreinking Aug 5, 2025
b3240d2
Merge branch 'main' into fork/vawale/add-cmake-for-onnx-app
alexreinking Aug 5, 2025
687009e
Fix unused struct member issue
alexreinking Aug 8, 2025
fd3abb5
Pass Adams2019 via MODEL_AUTOSCHEDULER env-var
alexreinking Aug 8, 2025
98cf3c8
Add pytest to dependencies, which was missing from onnx
alexreinking Aug 8, 2025
d9847dc
halide_as_onnx_backend_test seems to run forever
alexreinking Aug 8, 2025
de4e6d9
Replace raw download with FetchContent
alexreinking Aug 8, 2025
a771088
Add PRIVATE to target_link_libraries
alexreinking Aug 8, 2025
83fb3c2
Lock onnx to 1.4.1
alexreinking Aug 8, 2025
b090854
Add DEPENDS argument to add_halide_library
alexreinking Aug 8, 2025
808e8e1
Skip GIT_SHALLOW
alexreinking Aug 8, 2025
b9ff026
Formatting...
alexreinking Aug 8, 2025
2425cdf
Add header sources to model_cpp
alexreinking Aug 8, 2025
a39ed23
Merge set_tests_properties calls
alexreinking Aug 8, 2025
a1f799e
Simplify protobuf generation and dependencies
alexreinking Aug 8, 2025
f4fbb8f
Try using ONNX 1.18.0
alexreinking Aug 8, 2025
f0faabe
Try another way of silencing unused member warnings
alexreinking Aug 8, 2025
18a4b78
Fix project name
alexreinking Aug 8, 2025
d0ca03e
Merge branch 'main' into fork/vawale/add-cmake-for-onnx-app
alexreinking Aug 13, 2025
05dc7eb
Update requirements.txt
alexreinking Aug 13, 2025
fec3d67
Fix --proto_path
alexreinking Aug 13, 2025
d9b4014
Update dependency specs
alexreinking Aug 13, 2025
72e1d1a
Improve search for pybind11 in ONNX app.
alexreinking Aug 13, 2025
011847f
Update exclude patterns for halide_as_onnx_backend_test.py
alexreinking Aug 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ add_app(local_laplacian)
add_app(max_filter)
add_app(nl_means)
# add_app(nn_ops) # TODO(#5374): missing CMake build
# add_app(onnx) # TODO(#5374): missing CMake build
add_app(onnx)
add_app(resize)
# add_app(resnet_50) # TODO(#5374): missing CMake build
# add_app(simd_op_check) # TODO(#5374): missing CMake build
Expand Down
141 changes: 141 additions & 0 deletions apps/onnx/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
cmake_minimum_required(VERSION 3.28)
project(onnx_app)

enable_testing()

# Set up language settings
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_CXX_EXTENSIONS NO)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

find_package(Protobuf)
if (NOT Protobuf_FOUND)
message(WARNING "Could NOT find Protobuf")
return()
endif ()

find_package(Halide REQUIRED)

# Download onnx.proto
include(FetchContent)
FetchContent_Declare(
onnx
GIT_REPOSITORY https://github.com/onnx/onnx.git
GIT_TAG e709452ef2bbc1d113faf678c24e6d3467696e83 # v1.18.0
SOURCE_SUBDIR do-not-load/
)
FetchContent_MakeAvailable(onnx)

# Add library that converts ONNX models to Halide operators
add_library(oclib STATIC)
add_library(onnx_app::oclib ALIAS oclib)

target_sources(oclib PRIVATE onnx_converter.cc "${onnx_SOURCE_DIR}/onnx/onnx.proto")
protobuf_generate(
TARGET oclib
LANGUAGE cpp
PROTOC_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/_protoc_out
IMPORT_DIRS ${onnx_SOURCE_DIR}
)
target_include_directories(oclib PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/_protoc_out")
target_link_libraries(oclib PUBLIC Halide::Halide protobuf::libprotobuf-lite)
target_compile_definitions(oclib PUBLIC GOOGLE_PROTOBUF_NO_RTTI)

# Add test for the onnx converter library (oclib)
add_executable(onnx_converter_test onnx_converter_test.cc)
target_link_libraries(onnx_converter_test PRIVATE onnx_app::oclib)

add_test(NAME onnx_converter_test
COMMAND onnx_converter_test)
set_tests_properties(
onnx_converter_test PROPERTIES
LABELS onnx
PASS_REGULAR_EXPRESSION "Success!"
SKIP_REGULAR_EXPRESSION "\\[SKIP\\]"
)

# Generator
add_halide_generator(
onnx_converter.generator
SOURCES onnx_converter_generator.cc
LINK_LIBRARIES onnx_app::oclib
)

# Generate test onnx model
add_custom_command(
OUTPUT test_model.onnx
COMMAND
protobuf::protoc
--encode=onnx.ModelProto
"--proto_path=${onnx_SOURCE_DIR}"
"$<SHELL_PATH:${onnx_SOURCE_DIR}/onnx/onnx.proto>"
< "$<SHELL_PATH:${CMAKE_CURRENT_SOURCE_DIR}/test_model_proto.txt>"
> test_model.onnx
DEPENDS protobuf::protoc ${onnx_SOURCE_DIR}/onnx/onnx.proto
COMMENT "Generating test ONNX model from proto content"
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/test_model_proto.txt
VERBATIM
)

# Generate static library using halide generator for test onnx model
add_halide_library(
test_model FROM onnx_converter.generator
GENERATOR onnx_model_generator
PARAMS model_file_path=${CMAKE_CURRENT_BINARY_DIR}/test_model.onnx
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/test_model.onnx
AUTOSCHEDULER Halide::Adams2019
)

# Test the generated static library
add_executable(onnx_converter_generator_test onnx_converter_generator_test.cc)
target_link_libraries(onnx_converter_generator_test PRIVATE Halide::Runtime test_model)

add_test(NAME onnx_converter_generator_test
COMMAND onnx_converter_generator_test)
set_tests_properties(
onnx_converter_generator_test
PROPERTIES
LABELS onnx
PASS_REGULAR_EXPRESSION "Success!"
SKIP_REGULAR_EXPRESSION "\\[SKIP\\]"
)

# Python bindings to convert onnx models to Halide model
find_package(Python 3 COMPONENTS Interpreter Development)
if (NOT Python_FOUND)
message(WARNING "Could NOT find Python")
return()
endif ()

find_package(pybind11 HINTS "${Python_SITEARCH}")
if (NOT pybind11_FOUND)
message(WARNING "Could NOT find pybind11")
return()
endif ()

pybind11_add_module(
model_cpp model.cpp benchmarking_utils.h common_types.h denormal_disabler.h
)
target_link_libraries(model_cpp PRIVATE Halide::Halide onnx_app::oclib)

add_test(
NAME model_test
COMMAND ${Python_EXECUTABLE} -m unittest ${CMAKE_CURRENT_SOURCE_DIR}/model_test.py -v
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_test(
NAME halide_as_onnx_backend_test
COMMAND ${Python_EXECUTABLE} -m unittest ${CMAKE_CURRENT_SOURCE_DIR}/halide_as_onnx_backend_test.py -v
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
set_tests_properties(
halide_as_onnx_backend_test
model_test
PROPERTIES
LABELS onnx
PASS_REGULAR_EXPRESSION "OK"
SKIP_REGULAR_EXPRESSION "\\[SKIP\\]"
ENVIRONMENT "PYTHONPATH=$<TARGET_FILE_DIR:model_cpp>;MODEL_AUTOSCHEDULER=$<TARGET_FILE:Halide::Adams2019>"
TIMEOUT 120
)
2 changes: 2 additions & 0 deletions apps/onnx/denormal_disabler.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,10 @@ class DenormalDisabler {
}

private:
#ifdef __SSE__
unsigned int csr_ = 0;
bool need_restore_ = false;
#endif
// Interpret denormal as zero (DAZ) bit
static constexpr unsigned int DAZ = 0x0040;
// Flush denormal to zero (FTZ) bit
Expand Down
Loading
Loading