Skip to content

Commit 2944f3a

Browse files
committed
DRAFT initial circle-mlir project
on-going draft to introduce initial circle-mlir project. Signed-off-by: SaeHie Park <[email protected]>
1 parent a200684 commit 2944f3a

File tree

8 files changed

+172
-0
lines changed

8 files changed

+172
-0
lines changed

circle-mlir/Makefile.sample

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ endif
1515
# TODO error handle if not found
1616
PYTHON3_PATH=$(shell dirname $(PYTHON3_CMD))
1717

18+
# NOTE CIRCLEM_LIR_XXX is used for CMakeLists
19+
# CIRCLEMLIR_XXX is used in this Makefile
20+
1821
CIRCLEMLIR_BUILD_DEBUG?=build/debug
1922
CIRCLEMLIR_BUILD_REL?=build/release
2023
CIRCLEMLIR_BUILD_COV?=build/coverage

circle-mlir/README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,23 @@ make testcov
169169
make gencov
170170
```
171171

172+
## Dump debug logs
173+
174+
To see logs during conversion with `onnx2circle` tool, set `CM_PASS_DUMP=1` for
175+
preprocessing ONNX and ONNX to circle conversion, or set `CM_PASS_DUMP=2` to see
176+
additional logs for circle rewrite.
177+
178+
```
179+
CM_PASS_DUMP=2 onnx2circle input.onnx output.circle
180+
```
181+
182+
You can give `-debug` option to see general MLIR logs or `-debug-only=o2c`
183+
option to see only logs from onnx2circle.
184+
185+
```
186+
onnx2circle -debug-only=o2c input.onnx output.circle
187+
```
188+
172189
## TensorFlow source code
173190

174191
Some source codes are referenced from TensorFlow and the file path is added to

circle-mlir/circle-mlir/tools-test/circle-impexp-test/test.lst

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,27 @@
66

77
AddModel(Add_F32_R4)
88
AddModel(Add_F32_R4_C1)
9+
AddModel(Conv2d_F32_R4)
10+
AddModel(Conv2d_F32_R4_nobias)
11+
AddModel(Conv2d_F32_R4_k33)
12+
AddModel(Conv2d_F32_R4_p11)
13+
AddModel(Conv2d_F32_R4_p10)
14+
# TODO AddModel(Conv2d_F32_R4_g2)
15+
# TODO AddModel(Conv2d_F32_R4_g5)
16+
AddModel(Conv2d_F32_R4_s2)
17+
AddModel(Conv2d_F32_R4_dil)
18+
# TODO AddModel(Conv2d_F32_R4_dil_g2)
19+
AddModel(Pad_Constant2d_F32_R4)
20+
# TODO AddModel(Pad_Constant2d_F32_R4_v14)
21+
AddModel(Pad_Constant2d_F32_R4_1)
22+
AddModel(Pad_Constant2d_F32_R4_t4)
23+
AddModel(Pad_Constant2d_F32_R4_t8)
24+
AddModel(Reshape_F32_R4_1)
25+
AddModel(Reshape_F32_R4_2)
26+
AddModel(Reshape_F32_R4_3)
27+
AddModel(Reshape_F32_R4_4)
28+
AddModel(Reshape_F32_R4_5)
29+
AddModel(Reshape_F32_R4_6)
30+
AddModel(Shape_F32_R4)
31+
AddModel(Transpose_F32_R4)
32+
AddModel(Transpose_F32_R4_pm)

circle-mlir/circle-mlir/tools-test/onnx2circle-models/CMakeLists.txt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,30 @@ macro(AddModel MODEL_NAME)
3333
list(APPEND FILE_DEPS_VALCHK "${TEST_CIRCLE_MODEL_DST}")
3434
endmacro(AddModel)
3535

36+
macro(AddDownloadModel MODEL_NAME)
37+
# copy to build folder only when source file exist
38+
set(TEST_ONNX_MODEL_SRC "${DOWNLOAD_ONNX_PATH}/${MODEL_NAME}.onnx")
39+
set(TEST_ONNX_MODEL_DST "${CMAKE_CURRENT_BINARY_DIR}/${MODEL_NAME}.onnx")
40+
if(EXISTS ${TEST_ONNX_MODEL_SRC})
41+
add_custom_command(
42+
OUTPUT ${TEST_ONNX_MODEL_DST}
43+
COMMAND ${CMAKE_COMMAND} -E copy "${TEST_ONNX_MODEL_SRC}" "${TEST_ONNX_MODEL_DST}"
44+
DEPENDS ${TEST_ONNX_MODEL_SRC}
45+
COMMENT "onnx2circle-models: prepare ${MODEL_NAME}.onnx"
46+
)
47+
48+
set(TEST_CIRCLE_MODEL_DST "${CMAKE_CURRENT_BINARY_DIR}/${MODEL_NAME}.circle")
49+
add_custom_command(
50+
OUTPUT ${TEST_CIRCLE_MODEL_DST}
51+
COMMAND "$<TARGET_FILE:onnx2circle>" "${OPTION_O2C_SINGLE}" "${TEST_ONNX_MODEL_DST}" "${TEST_CIRCLE_MODEL_DST}"
52+
DEPENDS ${TEST_ONNX_MODEL_DST} onnx2circle
53+
COMMENT "onnx2circle-models: generate ${MODEL_NAME}.circle"
54+
)
55+
56+
list(APPEND FILE_DEPS_VALCHK "${TEST_CIRCLE_MODEL_DST}")
57+
endif()
58+
endmacro(AddDownloadModel)
59+
3660
# Read "test.lst"
3761
include("test.lst")
3862
# Read "test.local.lst" if exists

circle-mlir/circle-mlir/tools-test/onnx2circle-value-test/CMakeLists.txt

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ COPY_SCRIPT(util_validation.py)
3030

3131
# AddModel used in test.lst
3232
set(UNIT_TEST_MODELS )
33+
set(UNIT_TEST_TOL_MODELS )
3334

3435
get_target_property(ONNX_ARTIFACTS_BIN_PATH gen_onnx_target BINARY_DIR)
3536
get_target_property(CIRCLE_ARTIFACTS_BIN_PATH onnx2circle_models_target BINARY_DIR)
@@ -59,6 +60,62 @@ macro(AddModel MODEL_NAME)
5960
list(APPEND FILE_DEPS_VALCHK "${TEST_CIRCLE_MODEL_DST}")
6061
endmacro(AddModel)
6162

63+
macro(AddDownloadModel MODEL_NAME)
64+
# copy ONNX to build folder
65+
set(TEST_ONNX_MODEL_SRC "${DOWNLOAD_ONNX_PATH}/${MODEL_NAME}.onnx")
66+
set(TEST_ONNX_MODEL_DST "${CMAKE_CURRENT_BINARY_DIR}/${MODEL_NAME}.onnx")
67+
68+
if(EXISTS ${TEST_ONNX_MODEL_SRC})
69+
add_custom_command(
70+
OUTPUT ${TEST_ONNX_MODEL_DST}
71+
COMMAND ${CMAKE_COMMAND} -E copy "${TEST_ONNX_MODEL_SRC}" "${TEST_ONNX_MODEL_DST}"
72+
DEPENDS ${TEST_ONNX_MODEL_SRC}
73+
COMMENT "onnx2circle-value-test: prepare ${MODEL_NAME}.onnx"
74+
)
75+
# copy Circle to build folder
76+
set(TEST_CIRCLE_MODEL_SRC "${CIRCLE_ARTIFACTS_BIN_PATH}/${MODEL_NAME}.circle")
77+
set(TEST_CIRCLE_MODEL_DST "${CMAKE_CURRENT_BINARY_DIR}/${MODEL_NAME}.circle")
78+
add_custom_command(
79+
OUTPUT ${TEST_CIRCLE_MODEL_DST}
80+
COMMAND ${CMAKE_COMMAND} -E copy "${TEST_CIRCLE_MODEL_SRC}" "${TEST_CIRCLE_MODEL_DST}"
81+
DEPENDS ${TEST_CIRCLE_MODEL_SRC}
82+
COMMENT "onnx2circle-value-test: prepare ${MODEL_NAME}.circle"
83+
)
84+
85+
list(APPEND UNIT_TEST_MODELS "${MODEL_NAME}")
86+
list(APPEND FILE_DEPS_VALCHK "${TEST_ONNX_MODEL_DST}")
87+
list(APPEND FILE_DEPS_VALCHK "${TEST_CIRCLE_MODEL_DST}")
88+
endif()
89+
endmacro(AddDownloadModel)
90+
91+
macro(AddDownloadModelTol MODEL_NAME RTOL ATOL)
92+
# copy ONNX to build folder
93+
set(TEST_ONNX_MODEL_SRC "${DOWNLOAD_ONNX_PATH}/${MODEL_NAME}.onnx")
94+
set(TEST_ONNX_MODEL_DST "${CMAKE_CURRENT_BINARY_DIR}/${MODEL_NAME}.onnx")
95+
96+
if(EXISTS ${TEST_ONNX_MODEL_SRC})
97+
add_custom_command(
98+
OUTPUT ${TEST_ONNX_MODEL_DST}
99+
COMMAND ${CMAKE_COMMAND} -E copy "${TEST_ONNX_MODEL_SRC}" "${TEST_ONNX_MODEL_DST}"
100+
DEPENDS ${TEST_ONNX_MODEL_SRC}
101+
COMMENT "onnx2circle-value-test: prepare ${MODEL_NAME}.onnx"
102+
)
103+
# copy Circle to build folder
104+
set(TEST_CIRCLE_MODEL_SRC "${CIRCLE_ARTIFACTS_BIN_PATH}/${MODEL_NAME}.circle")
105+
set(TEST_CIRCLE_MODEL_DST "${CMAKE_CURRENT_BINARY_DIR}/${MODEL_NAME}.circle")
106+
add_custom_command(
107+
OUTPUT ${TEST_CIRCLE_MODEL_DST}
108+
COMMAND ${CMAKE_COMMAND} -E copy "${TEST_CIRCLE_MODEL_SRC}" "${TEST_CIRCLE_MODEL_DST}"
109+
DEPENDS ${TEST_CIRCLE_MODEL_SRC}
110+
COMMENT "onnx2circle-value-test: prepare ${MODEL_NAME}.circle"
111+
)
112+
113+
list(APPEND UNIT_TEST_TOL_MODELS "${MODEL_NAME} ${RTOL} ${ATOL}")
114+
list(APPEND FILE_DEPS_VALCHK "${TEST_ONNX_MODEL_DST}")
115+
list(APPEND FILE_DEPS_VALCHK "${TEST_CIRCLE_MODEL_DST}")
116+
endif()
117+
endmacro(AddDownloadModelTol)
118+
62119
# Read "test.lst"
63120
include("test.lst")
64121
# Read "test.local.lst" if exists
@@ -76,3 +133,16 @@ foreach(MODEL IN ITEMS ${UNIT_TEST_MODELS})
76133
COMMAND bash run_value_test.sh ${VENV_PATH} ${TEST_MODEL_BASE}
77134
)
78135
endforeach()
136+
137+
foreach(MODEL_INFO IN ITEMS ${UNIT_TEST_TOL_MODELS})
138+
separate_arguments(MODEL_INFO_LIST UNIX_COMMAND ${MODEL_INFO})
139+
list (GET MODEL_INFO_LIST 0 MODEL)
140+
list (GET MODEL_INFO_LIST 1 ATOL)
141+
list (GET MODEL_INFO_LIST 2 RTOL)
142+
143+
set(TEST_MODEL_BASE "${CMAKE_CURRENT_BINARY_DIR}/${MODEL}")
144+
add_test(
145+
NAME onnx2circle_value_test_${MODEL}
146+
COMMAND bash run_value_test.sh ${VENV_PATH} ${TEST_MODEL_BASE} ${ATOL} ${RTOL}
147+
)
148+
endforeach()

circle-mlir/circle-mlir/tools/onnx2circle/TestModels.cmake

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,21 @@ macro(ConvertUnitModel MLIR_FNAME)
1616
list(APPEND FILE_DEPS "${TEST_MLIR_MODEL_DST}")
1717
endmacro(ConvertUnitModel)
1818

19+
set(TEST_NEG_MODELS )
20+
macro(ConvertUnitModelNEG MLIR_FNAME)
21+
# copy to build folder
22+
set(TEST_MLIR_MODEL_SRC "${CMAKE_SOURCE_DIR}/models/mlir/${MLIR_FNAME}")
23+
set(TEST_MLIR_MODEL_DST "${CMAKE_CURRENT_BINARY_DIR}/models/mlir/${MLIR_FNAME}")
24+
add_custom_command(
25+
OUTPUT ${TEST_MLIR_MODEL_DST}
26+
COMMAND ${CMAKE_COMMAND} -E copy "${TEST_MLIR_MODEL_SRC}" "${TEST_MLIR_MODEL_DST}"
27+
DEPENDS ${TEST_MLIR_MODEL_SRC}
28+
COMMENT "tools/onnx2circle: prepare mlir/${MLIR_FNAME}"
29+
)
30+
list(APPEND TEST_NEG_MODELS "${MLIR_FNAME}")
31+
list(APPEND FILE_DEPS "${TEST_MLIR_MODEL_DST}")
32+
endmacro(ConvertUnitModelNEG)
33+
1934
set(VALIDATE_SHAPEINF_MODELS)
2035
macro(ValidateShapeInf MLIR_FNAME)
2136
# copy to build folder
@@ -63,6 +78,18 @@ foreach(MODEL IN ITEMS ${TEST_MODELS})
6378
)
6479
endforeach()
6580

81+
foreach(MODEL IN ITEMS ${TEST_NEG_MODELS})
82+
set(MLIR_MODEL_PATH "${CMAKE_CURRENT_BINARY_DIR}/models/mlir/${MODEL}")
83+
set(CIRCLE_MODEL_PATH "${CMAKE_CURRENT_BINARY_DIR}/models/mlir/${MODEL}.circle")
84+
add_test(
85+
NAME onnx2circle_neg_test_${MODEL}
86+
COMMAND "$<TARGET_FILE:onnx2circle>"
87+
"${MLIR_MODEL_PATH}"
88+
"${CIRCLE_MODEL_PATH}"
89+
)
90+
set_tests_properties(onnx2circle_neg_test_${MODEL} PROPERTIES WILL_FAIL TRUE)
91+
endforeach()
92+
6693
foreach(MODEL IN ITEMS ${VALIDATE_SHAPEINF_MODELS})
6794
set(MLIR_MODEL_PATH "${CMAKE_CURRENT_BINARY_DIR}/models/mlir/${MODEL}")
6895
set(CIRCLE_MODEL_PATH "${CMAKE_CURRENT_BINARY_DIR}/models/mlir/${MODEL}.circle")

circle-mlir/circle-mlir/tools/onnx2circle/test.lst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
# ConvertUnitModel(test_mode.mlir)
44
#
55

6+
ConvertUnitModel(Add_F32_0.circle.mlir)
7+
ConvertUnitModel(Add_F32_1.circle.mlir)
8+
ConvertUnitModel(Add_F32_2.circle.mlir)
69
ConvertUnitModel(Add_F32.onnx.mlir)
710

811
# shape inference validation

circle-mlir/externals/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ ExternalProject_Add(externals-llvm-project
112112
INSTALL_DIR "${LP_INSTALL_DIR}"
113113
CMAKE_ARGS -DLLVM_ENABLE_PROJECTS=mlir
114114
-DLLVM_TARGETS_TO_BUILD=host
115+
-DLLVM_ENABLE_TERMINFO=OFF
116+
-DLLVM_ENABLE_ZLIB=OFF
117+
-DLLVM_ENABLE_ZSTD=OFF
118+
-DLLVM_INCLUDE_TESTS=OFF
115119
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
116120
-DCMAKE_INSTALL_PREFIX='${LP_INSTALL_DIR}'
117121
${CIRCLE_MLIR_GOLD_OPTION}

0 commit comments

Comments
 (0)