Skip to content

Commit 6a0a6c7

Browse files
GregoryComerfacebook-github-bot
authored andcommitted
Add REGISTER_OPTIMIZED_OPS option to CMake build (ET + Llama) (#2632)
Summary: Add a CMake option to gate build of optimized ops. Update executor_runner and llama_runner targets to conditionally use portable lib if optimized ops are disabled. Bypassing known failures in external CI. bypass-github-export-checks bypass-github-executorch-ci-checks Pull Request resolved: #2632 Test Plan: Build via the following. Note that the way it's built is a bit touchy and requires removing cmake-out (iterative builds don't seem vito work). This is unrelated to these changes, so will be address separately. [build_llama.sh] ``` dir=examples/models/llama2 cmake -DBUCK2=buck2-et2 \ -DCMAKE_INSTALL_PREFIX=cmake-out \ -DCMAKE_BUILD_TYPE=Debug \ -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \ -DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \ -DEXECUTORCH_BUILD_XNNPACK=ON \ -DEXECUTORCH_ENABLE_LOGGING=1 \ -Bcmake-out . cmake --build cmake-out -j33 --target install --config Debug cmake -DBUCK2=buck2-et2 \ -DCMAKE_INSTALL_PREFIX=cmake-out \ -DCMAKE_BUILD_TYPE=Debug \ -Bcmake-out/examples/models/llama2 \ examples/models/llama2 cmake --build cmake-out/${dir} -j33 --config Debug ``` Confirmed liboptimized_native_cpu_ops_lib.a and liboptimized_kernels.a are present under cmake-out/lib. Confirmed optimized kernels are linked via running `nm -C cmake-out/examples/models/llama2/llama_main`. Confirmed that opt_add_out is present. Reviewed By: kimishpatel Differential Revision: D55292705 Pulled By: GregoryComer fbshipit-source-id: 63a036bbe56c353585b2ef13a30fee8abfd5ba7d
1 parent d70c52b commit 6a0a6c7

File tree

10 files changed

+83
-46
lines changed

10 files changed

+83
-46
lines changed

CMakeLists.txt

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,9 @@ option(EXECUTORCH_BUILD_PYBIND "Build the Python Bindings" OFF)
158158

159159
option(EXECUTORCH_BUILD_QNN "Build the Qualcomm backend" OFF)
160160

161-
option(REGISTER_QUANTIZED_OPS "Build the quantized kernels" OFF)
161+
option(EXECUTORCH_REGISTER_OPTIMIZED_OPS "Build the optimized kernels" ON)
162+
163+
option(EXECUTORCH_REGISTER_QUANTIZED_OPS "Build the quantized kernels" OFF)
162164

163165
option(EXECUTORCH_BUILD_SDK "Build the ExecuTorch SDK")
164166

@@ -313,14 +315,17 @@ endif()
313315
# operators necessary for the models that will run.
314316
#
315317
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/kernels/portable)
316-
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/kernels/optimized)
317318

318-
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/configurations)
319+
if(EXECUTORCH_REGISTER_OPTIMIZED_OPS)
320+
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/kernels/optimized)
321+
endif()
319322

320-
if(REGISTER_QUANTIZED_OPS)
323+
if(EXECUTORCH_REGISTER_QUANTIZED_OPS)
321324
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/kernels/quantized)
322325
endif()
323326

327+
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/configurations)
328+
324329
#
325330
# gflags: Commandline flag host library.
326331
#
@@ -347,10 +352,16 @@ cmake_dependent_option(
347352
EXECUTORCH_BUILD_HOST_TARGETS OFF)
348353
if(EXECUTORCH_BUILD_EXECUTOR_RUNNER)
349354
# Baseline libraries that executor_runner will link against.
350-
set(_executor_runner_libs executorch optimized_native_cpu_ops_lib gflags)
355+
set(_executor_runner_libs executorch gflags)
356+
357+
if(EXECUTORCH_REGISTER_OPTIMIZED_OPS)
358+
list(APPEND _executor_runner_libs optimized_native_cpu_ops_lib)
359+
else()
360+
list(APPEND _executor_runner_libs portable_ops_lib)
361+
endif()
351362

352363
# Generate lib to register quantized ops
353-
if(REGISTER_QUANTIZED_OPS)
364+
if(EXECUTORCH_REGISTER_QUANTIZED_OPS)
354365
list(APPEND _executor_runner_libs quantized_ops_lib)
355366
endif()
356367

build/Codegen.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ function(gen_operators_lib lib_name)
138138
${CMAKE_CURRENT_BINARY_DIR}/NativeFunctions.h)
139139
target_link_libraries(${lib_name} PRIVATE ${GEN_DEPS})
140140
if(GEN_KERNEL_LIBS)
141-
target_link_libraries(${lib_name} PRIVATE ${GEN_KERNEL_LIBS})
141+
target_link_libraries(${lib_name} PUBLIC ${GEN_KERNEL_LIBS})
142142
endif()
143143

144144
target_link_options_shared_lib(${lib_name})

build/Utils.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ function(executorch_print_configuration_summary)
7373
message(
7474
STATUS " EXECUTORCH_BUILD_QNN : ${EXECUTORCH_BUILD_QNN}")
7575
message(
76-
STATUS " REGISTER_QUANTIZED_OPS : ${REGISTER_QUANTIZED_OPS}")
76+
STATUS " EXECUTORCH_REGISTER_OPTIMIZED_OPS : ${EXECUTORCH_REGISTER_OPTIMIZED_OPS}")
77+
message(
78+
STATUS " EXECUTORCH_REGISTER_QUANTIZED_OPS : ${EXECUTORCH_REGISTER_QUANTIZED_OPS}")
7779
message(
7880
STATUS " EXECUTORCH_BUILD_SDK : ${EXECUTORCH_BUILD_SDK}")
7981
message(

build/build_apple_frameworks.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ cmake_build() {
127127
-DIOS_DEPLOYMENT_TARGET="$IOS_DEPLOYMENT_TARGET" \
128128
-DEXECUTORCH_BUILD_COREML=$COREML \
129129
-DEXECUTORCH_BUILD_MPS=$MPS \
130-
-DREGISTER_QUANTIZED_OPS=$QUANTIZED \
130+
-DEXECUTORCH_REGISTER_QUANTIZED_OPS=$QUANTIZED \
131131
-DEXECUTORCH_BUILD_XNNPACK=$XNNPACK \
132132
${platform_flag:+-DIOS_PLATFORM=$platform_flag}
133133
cmake --build . --config $MODE

build/executorch-config.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ endif()
4444
set(lib_list
4545
etdump bundled_program extension_data_loader ${FLATCC_LIB} mpsdelegate
4646
qnn_executorch_backend portable_ops_lib extension_module xnnpack_backend
47-
XNNPACK cpuinfo pthreadpool vulkan_backend
47+
XNNPACK cpuinfo pthreadpool vulkan_backend optimized_kernels
48+
optimized_ops_lib optimized_native_cpu_ops_lib
4849
)
4950
foreach(lib ${lib_list})
5051
# Name of the variable which stores result of the find_library search

configurations/CMakeLists.txt

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,25 @@ set(_common_compile_options -Wno-deprecated-declarations)
2828
include(${EXECUTORCH_ROOT}/build/Utils.cmake)
2929
include(${EXECUTORCH_ROOT}/build/Codegen.cmake)
3030

31-
32-
# Merge optimized and portable definitions, taking optimized where available.
33-
merge_yaml(
34-
FUNCTIONS_YAML ${EXECUTORCH_ROOT}/kernels/optimized/optimized-oss.yaml
35-
FALLBACK_YAML ${EXECUTORCH_ROOT}/kernels/portable/functions.yaml
36-
OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}
37-
)
38-
39-
gen_selected_ops("${CMAKE_CURRENT_BINARY_DIR}/merged.yaml" "" "")
40-
41-
generate_bindings_for_kernels(
42-
FUNCTIONS_YAML ${CMAKE_CURRENT_BINARY_DIR}/merged.yaml)
43-
message("Generated files ${gen_command_sources}")
44-
45-
# optimized_native_cpu_ops_lib: Register optimized op kernels into the runtime
46-
gen_operators_lib(
47-
"optimized_native_cpu_ops_lib"
48-
KERNEL_LIBS portable_kernels optimized_kernels
49-
DEPS executorch)
50-
51-
install(TARGETS optimized_native_cpu_ops_lib DESTINATION lib)
31+
if(EXECUTORCH_REGISTER_OPTIMIZED_OPS)
32+
# Merge optimized and portable definitions, taking optimized where available.
33+
merge_yaml(
34+
FUNCTIONS_YAML ${EXECUTORCH_ROOT}/kernels/optimized/optimized-oss.yaml
35+
FALLBACK_YAML ${EXECUTORCH_ROOT}/kernels/portable/functions.yaml
36+
OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}
37+
)
38+
39+
gen_selected_ops("${CMAKE_CURRENT_BINARY_DIR}/merged.yaml" "" "")
40+
41+
generate_bindings_for_kernels(
42+
FUNCTIONS_YAML ${CMAKE_CURRENT_BINARY_DIR}/merged.yaml)
43+
message("Generated files ${gen_command_sources}")
44+
45+
# optimized_native_cpu_ops_lib: Register optimized op kernels into the runtime
46+
gen_operators_lib(
47+
"optimized_native_cpu_ops_lib"
48+
KERNEL_LIBS portable_kernels optimized_kernels
49+
DEPS executorch)
50+
51+
install(TARGETS optimized_native_cpu_ops_lib DESTINATION lib)
52+
endif()

examples/models/llama2/CMakeLists.txt

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
cmake_minimum_required(VERSION 3.19)
1919
project(llama_runner)
2020

21+
option(EXECUTORCH_REGISTER_OPTIMIZED_OPS "Build the optimized kernels" ON)
22+
2123
if(NOT PYTHON_EXECUTABLE)
2224
set(PYTHON_EXECUTABLE python3)
2325
endif()
@@ -52,34 +54,47 @@ find_package(executorch CONFIG REQUIRED)
5254
# llama_runner library
5355
add_subdirectory(runner)
5456

57+
set(link_options)
58+
set(link_libraries)
59+
60+
if(EXECUTORCH_REGISTER_OPTIMIZED_OPS)
61+
list(APPEND link_libraries optimized_native_cpu_ops_lib optimized_kernels portable_kernels)
62+
list(APPEND link_options
63+
"SHELL:LINKER:--whole-archive \
64+
$<TARGET_FILE:optimized_native_cpu_ops_lib> \
65+
LINKER:--no-whole-archive")
66+
else()
67+
list(APPEND link_libraries portable_ops_lib portable_kernels)
68+
list(APPEND link_options
69+
"SHELL:LINKER:--whole-archive \
70+
$<TARGET_FILE:portable_ops_lib> \
71+
LINKER:--no-whole-archive")
72+
endif()
5573

56-
target_link_libraries(llama_main PUBLIC gflags llama_runner
57-
portable_ops_lib)
58-
target_link_options(
59-
llama_main PUBLIC "SHELL:LINKER:--whole-archive \
60-
$<TARGET_FILE:portable_ops_lib> \
61-
LINKER:--no-whole-archive")
74+
target_link_libraries(llama_main PUBLIC gflags llama_runner)
6275

6376
# XNNPACK pthreadpool cpuinfo
6477
if(TARGET xnnpack_backend)
6578
set(xnnpack_backend_libs xnnpack_backend XNNPACK pthreadpool cpuinfo)
66-
target_link_libraries(llama_main PUBLIC ${xnnpack_backend_libs})
67-
target_link_options(
68-
llama_main PUBLIC "SHELL:LINKER:--whole-archive \
79+
list(APPEND link_libraries ${xnnpack_backend_libs})
80+
list(APPEND link_options
81+
"SHELL:LINKER:--whole-archive \
6982
$<TARGET_FILE:xnnpack_backend> \
7083
LINKER:--no-whole-archive")
7184
endif()
7285

7386
# Vulkan backend
7487
if(TARGET vulkan_backend)
75-
target_link_libraries(llama_main PUBLIC vulkan_backend)
76-
target_link_options(
77-
llama_main PUBLIC "SHELL:LINKER:--whole-archive \
88+
list(APPEND link_libraries vulkan_backend)
89+
list(APPEND link_options
90+
"SHELL:LINKER:--whole-archive \
7891
$<TARGET_FILE:vulkan_backend> \
7992
LINKER:--no-whole-archive")
8093
endif()
8194

8295
target_compile_options(llama_main PUBLIC ${_common_compile_options})
96+
target_link_libraries(llama_main PUBLIC ${link_libraries})
97+
target_link_options(llama_main PUBLIC ${link_options})
8398

8499
# Print all summary
85100
executorch_print_configuration_summary()

examples/models/llama2/export_llama_lib.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def check_embedding_byte_registered():
141141
'Use `python -c "import torch as _; print(_.__path__)"` to find where torch package is installed.\n'
142142
"Set that as TORCH_PACKAGE_DIR.\n"
143143
"Then from root executorch dir do the following:\n"
144-
"rm -rf cmake-out && mkdir cmake-out && (cd cmake-out && cmake -DBUCK2=<path-to-buck2> -DCMAKE_PREFIX_PATH=$TORCH_PACKAGE_DIR -DREGISTER_QUANTIZED_OPS=ON ..) && cmake --build . -j16\n"
144+
"rm -rf cmake-out && mkdir cmake-out && (cd cmake-out && cmake -DBUCK2=<path-to-buck2> -DCMAKE_PREFIX_PATH=$TORCH_PACKAGE_DIR -DEXECUTORCH_REGISTER_QUANTIZED_OPS=ON ..) && cmake --build . -j16\n"
145145
'To find the location of the lib: find cmake-out -name "libquantized_ops_aot_lib*"\n'
146146
"Then specify the said library via -s <path to libquantized_ops_aot_lib.so\n"
147147
)

examples/models/llama2/runner/CMakeLists.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ endif()
2222

2323
include(${EXECUTORCH_ROOT}/build/Utils.cmake)
2424
include(${EXECUTORCH_ROOT}/build/Codegen.cmake)
25+
2526
#
2627
# The `_<target>_srcs` lists are defined by including ${EXECUTORCH_SRCS_FILE}.
2728
#
@@ -46,6 +47,10 @@ else()
4647
add_library(llama_runner SHARED ${_llama_runner__srcs})
4748
endif()
4849

50+
set(llama_runner_deps executorch extension_module extension_data_loader)
51+
4952
target_link_libraries(
50-
llama_runner PUBLIC executorch portable_kernels extension_module
51-
extension_data_loader)
53+
llama_runner PUBLIC ${llama_runner_deps})
54+
55+
target_include_directories(llama_runner
56+
INTERFACE ${_common_include_directories} ${EXECUTORCH_ROOT})

kernels/optimized/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,5 @@ gen_operators_lib(
5353
"optimized_ops_lib"
5454
KERNEL_LIBS optimized_kernels
5555
DEPS executorch)
56+
57+
install(TARGETS optimized_kernels optimized_ops_lib DESTINATION lib)

0 commit comments

Comments
 (0)