diff --git a/.ci/scripts/test_llama.sh b/.ci/scripts/test_llama.sh index e1098455470..5e5ed588a2d 100644 --- a/.ci/scripts/test_llama.sh +++ b/.ci/scripts/test_llama.sh @@ -51,6 +51,9 @@ UPLOAD_DIR="${UPLOAD_DIR:-}" # Default PT2E_QUANTIZE to empty string if not set PT2E_QUANTIZE="${PT2E_QUANTIZE:-}" +# Default CMake Build Type to release mode +CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release} + if [[ $# -lt 4 ]]; then # Assuming 4 mandatory args echo "Expecting atleast 4 positional arguments" echo "Usage: [...]" @@ -143,7 +146,7 @@ cmake_install_executorch_libraries() { rm -rf cmake-out retry cmake \ -DCMAKE_INSTALL_PREFIX=cmake-out \ - -DCMAKE_BUILD_TYPE=Debug \ + -DCMAKE_BUILD_TYPE="$CMAKE_BUILD_TYPE" \ -DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \ -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \ -DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \ @@ -157,7 +160,7 @@ cmake_install_executorch_libraries() { -DQNN_SDK_ROOT="$QNN_SDK_ROOT" \ -DPYTHON_EXECUTABLE="$PYTHON_EXECUTABLE" \ -Bcmake-out . - cmake --build cmake-out -j9 --target install --config Debug + cmake --build cmake-out -j9 --target install --config "$CMAKE_BUILD_TYPE" } cmake_build_llama_runner() { @@ -165,14 +168,14 @@ cmake_build_llama_runner() { dir="examples/models/llama" retry cmake \ -DCMAKE_INSTALL_PREFIX=cmake-out \ - -DCMAKE_BUILD_TYPE=Debug \ + -DCMAKE_BUILD_TYPE="$CMAKE_BUILD_TYPE" \ -DEXECUTORCH_BUILD_KERNELS_CUSTOM="$CUSTOM" \ -DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \ -DEXECUTORCH_BUILD_XNNPACK="$XNNPACK" \ -DPYTHON_EXECUTABLE="$PYTHON_EXECUTABLE" \ -Bcmake-out/${dir} \ ${dir} - cmake --build cmake-out/${dir} -j9 --config Debug + cmake --build cmake-out/${dir} -j9 --config "$CMAKE_BUILD_TYPE" } diff --git a/.ci/scripts/test_llava.sh b/.ci/scripts/test_llava.sh index 1057fa8f4ac..a30143d8951 100644 --- a/.ci/scripts/test_llava.sh +++ b/.ci/scripts/test_llava.sh @@ -8,11 +8,11 @@ set -exu # shellcheck source=/dev/null -BUILD_TYPE=${1:-Debug} TARGET_OS=${2:-Native} BUILD_DIR=${3:-cmake-out} +CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release} -echo "Building with BUILD_TYPE: $BUILD_TYPE, TARGET_OS: $TARGET_OS, BUILD_DIR: $BUILD_DIR" +echo "Building with CMAKE_BUILD_TYPE: $CMAKE_BUILD_TYPE, TARGET_OS: $TARGET_OS, BUILD_DIR: $BUILD_DIR" if [[ -z "${PYTHON_EXECUTABLE:-}" ]]; then PYTHON_EXECUTABLE=python3 @@ -32,7 +32,7 @@ if hash nproc &> /dev/null; then NPROC=$(nproc); fi EXECUTORCH_COMMON_CMAKE_ARGS=" \ -DCMAKE_INSTALL_PREFIX=${BUILD_DIR} \ - -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \ -DEXECUTORCH_ENABLE_LOGGING=ON \ -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \ -DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \ @@ -49,7 +49,7 @@ cmake_install_executorch_libraries() { ${EXECUTORCH_COMMON_CMAKE_ARGS} \ -B${BUILD_DIR} . - cmake --build ${BUILD_DIR} -j${NPROC} --target install --config ${BUILD_TYPE} + cmake --build ${BUILD_DIR} -j${NPROC} --target install --config ${CMAKE_BUILD_TYPE} } cmake_install_executorch_libraries_for_android() { @@ -59,14 +59,14 @@ cmake_install_executorch_libraries_for_android() { ${EXECUTORCH_COMMON_CMAKE_ARGS} \ -B${BUILD_DIR} . - cmake --build ${BUILD_DIR} -j${NPROC} --target install --config ${BUILD_TYPE} + cmake --build ${BUILD_DIR} -j${NPROC} --target install --config ${CMAKE_BUILD_TYPE} } LLAVA_COMMON_CMAKE_ARGS=" \ -DPYTHON_EXECUTABLE="$PYTHON_EXECUTABLE" \ -DCMAKE_INSTALL_PREFIX=${BUILD_DIR} \ - -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \ -DEXECUTORCH_BUILD_KERNELS_CUSTOM=ON \ -DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \ -DEXECUTORCH_BUILD_XNNPACK=ON" @@ -81,7 +81,7 @@ cmake_build_llava_runner() { -B${BUILD_DIR}/${dir} \ ${dir} - cmake --build ${BUILD_DIR}/${dir} -j${NPROC} --config ${BUILD_TYPE} + cmake --build ${BUILD_DIR}/${dir} -j${NPROC} --config ${CMAKE_BUILD_TYPE} } @@ -98,7 +98,7 @@ cmake_build_llava_runner_for_android() { -B${BUILD_DIR}/${dir} \ ${dir} - cmake --build ${BUILD_DIR}/${dir} -j${NPROC} --config ${BUILD_TYPE} + cmake --build ${BUILD_DIR}/${dir} -j${NPROC} --config ${CMAKE_BUILD_TYPE} } # only export the one without custom op for now since it's diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index 07e0650cd12..741b17c2816 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -290,7 +290,7 @@ jobs: # ${CONDA_RUN} python -m unittest examples.models.llava.test.test_llava # # run e2e (export, tokenizer and runner) - # PYTHON_EXECUTABLE=python ${CONDA_RUN} bash .ci/scripts/test_llava.sh Release + # PYTHON_EXECUTABLE=python ${CONDA_RUN} bash .ci/scripts/test_llava.sh test-qnn-model: name: test-qnn-model diff --git a/backends/xnnpack/third-party/XNNPACK b/backends/xnnpack/third-party/XNNPACK index d5d572e46ed..4ea82e595b3 160000 --- a/backends/xnnpack/third-party/XNNPACK +++ b/backends/xnnpack/third-party/XNNPACK @@ -1 +1 @@ -Subproject commit d5d572e46ed3929fa3e67f6174192893943cf724 +Subproject commit 4ea82e595b36106653175dcb04b2aa532660d0d8 diff --git a/backends/xnnpack/third-party/xnnpack.buck.bzl b/backends/xnnpack/third-party/xnnpack.buck.bzl index d2068661fea..6ce0316010d 100644 --- a/backends/xnnpack/third-party/xnnpack.buck.bzl +++ b/backends/xnnpack/third-party/xnnpack.buck.bzl @@ -42,7 +42,7 @@ def define_xnnpack(): "XNNPACK/src/mutex.c", "XNNPACK/src/normalization.c", "XNNPACK/src/operator-utils.c", - "XNNPACK/src/packing.cc", + "XNNPACK/src/reference/packing.cc", ], headers = get_xnnpack_headers(), header_namespace = "", @@ -67,7 +67,7 @@ def define_xnnpack(): # @lint-ignore BUCKLINT: native and fb_native are explicitly forbidden in fbcode. native.cxx_library( name = "subgraph", - srcs = SUBGRAPH_SRCS, + srcs = SUBGRAPH_SRCS + ["XNNPACK/src/datatype.c"], compiler_flags = [ "-Wno-error=missing-braces", # required since the SGX toolchain does not have this by default ], @@ -1076,6 +1076,8 @@ def define_xnnpack(): "XNNPACK/src/configs/hardware-config.c", "XNNPACK/src/microparams-init.c", "XNNPACK/src/microkernel-utils.c", + "XNNPACK/src/reference/binary-elementwise.cc", + "XNNPACK/src/reference/unary-elementwise.cc", ], headers = get_xnnpack_headers(), exported_headers = { diff --git a/backends/xnnpack/third-party/xnnpack_src_defs.bzl b/backends/xnnpack/third-party/xnnpack_src_defs.bzl index 038b90acab0..8cb9affede3 100644 --- a/backends/xnnpack/third-party/xnnpack_src_defs.bzl +++ b/backends/xnnpack/third-party/xnnpack_src_defs.bzl @@ -17,24 +17,14 @@ def prod_srcs_for_arch_wrapper(arch): return define_xnnpack_build_src(prod_srcs) def get_xnnpack_headers(): - # XNNPACK Headers in the path containing xnnpack/ or configs/ - # do not contain the src/ path. However headers not in xnnpack/ or - # configs/ are prepend with the src/ path. This function helps us - # to correctly parse all the header files to the correct name src_headers = subdir_glob([ ("XNNPACK/src", "**/*.h"), ]) - fixed_headers = {} - for k, v in src_headers.items(): - new_key = k - if not k.startswith("xnnpack") and not k.startswith("configs"): - new_key = "src/{}".format(k) - fixed_headers[new_key] = v include_headers = subdir_glob([ ("XNNPACK/include", "*.h"), ]) - return fixed_headers | include_headers + return src_headers | include_headers OPERATOR_SRCS = define_xnnpack_build_src(_OPERATOR_SRCS) SUBGRAPH_SRCS = define_xnnpack_build_src(_SUBGRAPH_SRCS)