From 7008ff7968f3e1fb9d884f57cb5fbd170deb8255 Mon Sep 17 00:00:00 2001 From: VincyZhang Date: Thu, 14 Sep 2023 09:28:15 +0800 Subject: [PATCH] Build wheel from cached dnnl local (#303) Signed-off-by: Ding, Yi1 Signed-off-by: Wenxin Zhang Co-authored-by: Ding, Yi1 --- .github/workflows/deploy-test.yml | 1 + .github/workflows/optimize-test.yml | 1 + .github/workflows/script/install_binary.sh | 1 + .../script/unitTest/run_unit_test_engine.sh | 2 +- .github/workflows/unit-test-engine.yml | 1 + .github/workflows/unit-test-kernel.yml | 1 + .github/workflows/unit-test-neuralchat.yml | 1 + .github/workflows/unit-test-optimize.yml | 1 + .../llm/runtime/deprecated/CMakeLists.txt | 58 +++++++++++++------ .../runtime/deprecated/cmake/PresetOs.cmake | 11 ++-- 10 files changed, 54 insertions(+), 24 deletions(-) diff --git a/.github/workflows/deploy-test.yml b/.github/workflows/deploy-test.yml index 7bf28549d91..2c5dcfa66d3 100644 --- a/.github/workflows/deploy-test.yml +++ b/.github/workflows/deploy-test.yml @@ -79,6 +79,7 @@ jobs: fi docker run -dit --disable-content-trust --privileged --name=${{ env.CONTAINER_NAME }} -v /dev/shm:/dev/shm \ -v ${{ github.workspace }}:/intel-extension-for-transformers \ + -v ~/.cache/oneAPI:/cache \ ${{ env.REPO_NAME }}:${{ env.REPO_TAG }} - name: Env build diff --git a/.github/workflows/optimize-test.yml b/.github/workflows/optimize-test.yml index 2d8f4327e22..6788cd366d9 100644 --- a/.github/workflows/optimize-test.yml +++ b/.github/workflows/optimize-test.yml @@ -77,6 +77,7 @@ jobs: fi docker run -dit --disable-content-trust --privileged --name=${{ env.CONTAINER_NAME }} -v /dev/shm:/dev/shm \ -v ${{ github.workspace }}:/intel-extension-for-transformers \ + -v ~/.cache/oneAPI:/cache \ ${{ env.REPO_NAME }}:${{ env.REPO_TAG }} - name: Env build diff --git a/.github/workflows/script/install_binary.sh b/.github/workflows/script/install_binary.sh index 6f70f5b60e3..344d29c8cf1 100644 --- a/.github/workflows/script/install_binary.sh +++ b/.github/workflows/script/install_binary.sh @@ -2,6 +2,7 @@ source /intel-extension-for-transformers/.github/workflows/script/change_color.sh cd /intel-extension-for-transformers +export CMAKE_ARGS="-DNE_DNNL_CACHE_DIR=/cache" $BOLD_YELLOW && echo "---------------- git submodule update --init --recursive -------------" && $RESET git config --global --add safe.directory "*" git submodule update --init --recursive diff --git a/.github/workflows/script/unitTest/run_unit_test_engine.sh b/.github/workflows/script/unitTest/run_unit_test_engine.sh index 543df411c19..ac510979156 100644 --- a/.github/workflows/script/unitTest/run_unit_test_engine.sh +++ b/.github/workflows/script/unitTest/run_unit_test_engine.sh @@ -25,7 +25,7 @@ function pytest() { cd ${WORKING_DIR}/test/pytest engine_path=$(python -c 'import intel_extension_for_transformers; import os; print(os.path.dirname(intel_extension_for_transformers.__file__))') - #engine_path="${engine_path}/llm/runtime" + engine_path="${engine_path}/llm/runtime" echo "engine path is ${engine_path}" find . -name "test*.py" | sed 's,\.\/,coverage run --source='"${engine_path}"' --append ,g' | sed 's/$/ --verbose/' >run.sh coverage erase diff --git a/.github/workflows/unit-test-engine.yml b/.github/workflows/unit-test-engine.yml index f21efb4ed5c..c21c1d0e37f 100644 --- a/.github/workflows/unit-test-engine.yml +++ b/.github/workflows/unit-test-engine.yml @@ -70,6 +70,7 @@ jobs: fi docker run -dit --disable-content-trust --privileged --name=${{ env.CONTAINER_NAME }} -v /dev/shm:/dev/shm \ -v ${{ github.workspace }}:/intel-extension-for-transformers \ + -v ~/.cache/oneAPI:/cache \ -v /tf_dataset2:/tf_dataset2 \ ${{ env.REPO_NAME }}:${{ env.REPO_TAG }} diff --git a/.github/workflows/unit-test-kernel.yml b/.github/workflows/unit-test-kernel.yml index 32a88194214..ee83527a9da 100644 --- a/.github/workflows/unit-test-kernel.yml +++ b/.github/workflows/unit-test-kernel.yml @@ -62,6 +62,7 @@ jobs: docker run -dit --disable-content-trust --privileged --name=${{ env.CONTAINER_NAME }} -v /dev/shm:/dev/shm \ -v ${{ github.workspace }}:/intel-extension-for-transformers \ -v /tf_dataset2:/tf_dataset2 \ + -v ~/.cache/oneAPI:/cache \ ${{ env.REPO_NAME }}:${{ env.REPO_TAG }} - name: Env build diff --git a/.github/workflows/unit-test-neuralchat.yml b/.github/workflows/unit-test-neuralchat.yml index 757dd90a90d..b82652c3ed8 100644 --- a/.github/workflows/unit-test-neuralchat.yml +++ b/.github/workflows/unit-test-neuralchat.yml @@ -66,6 +66,7 @@ jobs: fi podman run -dit --disable-content-trust --privileged --name=${{ env.CONTAINER_NAME }} -v /dev/shm:/dev/shm \ -v ${{ github.workspace }}:/intel-extension-for-transformers \ + -v ~/.cache/oneAPI:/cache \ ${{ env.REPO_NAME }}:${{ env.REPO_TAG }} - name: Env build diff --git a/.github/workflows/unit-test-optimize.yml b/.github/workflows/unit-test-optimize.yml index 620f249bb7c..3b398418e6a 100644 --- a/.github/workflows/unit-test-optimize.yml +++ b/.github/workflows/unit-test-optimize.yml @@ -71,6 +71,7 @@ jobs: docker run -dit --disable-content-trust --privileged --name=${{ env.CONTAINER_NAME }} -v /dev/shm:/dev/shm \ -v ${{ github.workspace }}:/intel-extension-for-transformers \ -v /tf_dataset2:/tf_dataset2 \ + -v ~/.cache/oneAPI:/cache \ ${{ env.REPO_NAME }}:${{ env.REPO_TAG }} - name: Env build diff --git a/intel_extension_for_transformers/llm/runtime/deprecated/CMakeLists.txt b/intel_extension_for_transformers/llm/runtime/deprecated/CMakeLists.txt index a985172840c..f0284dd1498 100644 --- a/intel_extension_for_transformers/llm/runtime/deprecated/CMakeLists.txt +++ b/intel_extension_for_transformers/llm/runtime/deprecated/CMakeLists.txt @@ -17,6 +17,15 @@ option(NE_WITH_ONEDNN_GRAPH "Build oneDNNGraph" ON) option(NE_DYNAMIC_LINK "Whether third party libs dynamic link to neural engine" ON) option(NE_WITH_AVX2 "Limit the compile time use of instruciton extensions to AVX2 rather than AVX512" OFF) message(STATUS "NE_DYNAMIC_LINK: ${NE_DYNAMIC_LINK}") +set(NE_DNNL_CACHE_DIR "" CACHE STRING + "The abs directory of cached OneDNN builds, including a libdnnl.so file and a directory for configured header files + + To create a cahce dir, first build without cache, then move `libdnnl.so*` to `YOUR_NEW_CACHE_DIR` and move + `build/neural_engine_py/third_party/oneDNN/include` to `YOUR_NEW_CACHE_DIR/include`") + +# Disable extra OneDNN targets to speedup compilation +set(DNNL_BUILD_EXAMPLES OFF CACHE BOOL "builds examples" FORCE) +set(DNNL_BUILD_TESTS OFF CACHE BOOL "builds tests" FORCE) # Disable extra OneDNN targets to speedup compilation set(DNNL_BUILD_EXAMPLES OFF CACHE BOOL "builds examples" FORCE) @@ -46,25 +55,40 @@ set(BUILD_SHARED_LIBS ON) add_subdirectory(${NE_THIRD_PARTY_DIR}/glog) if(NOT NE_WITH_SPARSELIB_ONLY) - if(NE_DYNAMIC_LINK) - set(DNNL_LIBRARY_TYPE "SHARED" CACHE STRING - "specifies whether oneDNN library should be SHARED, STATIC, or - SDL (single dynamic library).") - set(DNNL_GRAPH_LIBRARY_TYPE "SHARED" CACHE STRING - "specifies whether oneDNN Graph library should be SHARED, STATIC, or - SDL (single dynamic library).") + file(GLOB NE_DNNL_CACHE_B ${NE_DNNL_CACHE_DIR}/libdnnl.so*) + list(LENGTH NE_DNNL_CACHE_B NE_DNNL_CACHE_B_LEN) + set(NE_DNNL_CACHE_H ${NE_DNNL_CACHE_DIR}/include) + if (NE_DNNL_CACHE_DIR AND NE_DNNL_CACHE_B_LEN AND EXISTS ${NE_DNNL_CACHE_H}) + message(STATUS "Using cached NE_DNNL: linking ${NE_DNNL_CACHE_B}") + message(STATUS "Using cached NE_DNNL: include ${NE_DNNL_CACHE_H}") + add_library(dnnl SHARED IMPORTED) + set_target_properties(dnnl PROPERTIES IMPORTED_LOCATION ${NE_DNNL_CACHE_B}) + target_include_directories(dnnl INTERFACE ${NE_DNNL_CACHE_H}) + target_include_directories(dnnl INTERFACE ${NE_THIRD_PARTY_DIR}/oneDNN/include) + + file(COPY ${NE_DNNL_CACHE_B} DESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) + message(STATUS "dnnl library copied to: ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") else() - set(DNNL_LIBRARY_TYPE "STATIC" CACHE STRING - "specifies whether oneDNN library should be SHARED, STATIC, or - SDL (single dynamic library).") - set(DNNL_GRAPH_LIBRARY_TYPE "STATIC" CACHE STRING - "specifies whether oneDNN Graph library should be SHARED, STATIC, or - SDL (single dynamic library).") - endif() - message(STATUS "DNNL_LIBRARY_TYPE: ${DNNL_LIBRARY_TYPE}") - message(STATUS "DNNL_GRAPH_LIBRARY_TYPE: ${DNNL_GRAPH_LIBRARY_TYPE}") + if(NE_DYNAMIC_LINK) + set(DNNL_LIBRARY_TYPE "SHARED" CACHE STRING + "specifies whether oneDNN library should be SHARED, STATIC, or + SDL (single dynamic library).") + set(DNNL_GRAPH_LIBRARY_TYPE "SHARED" CACHE STRING + "specifies whether oneDNN Graph library should be SHARED, STATIC, or + SDL (single dynamic library).") + else() + set(DNNL_LIBRARY_TYPE "STATIC" CACHE STRING + "specifies whether oneDNN library should be SHARED, STATIC, or + SDL (single dynamic library).") + set(DNNL_GRAPH_LIBRARY_TYPE "STATIC" CACHE STRING + "specifies whether oneDNN Graph library should be SHARED, STATIC, or + SDL (single dynamic library).") + endif() + message(STATUS "DNNL_LIBRARY_TYPE: ${DNNL_LIBRARY_TYPE}") + message(STATUS "DNNL_GRAPH_LIBRARY_TYPE: ${DNNL_GRAPH_LIBRARY_TYPE}") - add_subdirectory(${NE_THIRD_PARTY_DIR}/oneDNN) + add_subdirectory(${NE_THIRD_PARTY_DIR}/oneDNN) + endif() add_subdirectory(${NE_THIRD_PARTY_DIR}/pybind11) endif() diff --git a/intel_extension_for_transformers/llm/runtime/deprecated/cmake/PresetOs.cmake b/intel_extension_for_transformers/llm/runtime/deprecated/cmake/PresetOs.cmake index ee0664856c4..de53db31b7a 100644 --- a/intel_extension_for_transformers/llm/runtime/deprecated/cmake/PresetOs.cmake +++ b/intel_extension_for_transformers/llm/runtime/deprecated/cmake/PresetOs.cmake @@ -37,9 +37,8 @@ else() string(APPEND CMAKE_CXX_FLAGS " -fPIC ") string(APPEND CMAKE_C_FLAGS " -fPIC ") endif() - - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") - set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") - set(CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" CACHE PATH "CMAKE_RUNTIME_OUTPUT_DIRECTORY") + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" CACHE PATH "CMAKE_LIBRARY_OUTPUT_DIRECTORY") + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" CACHE PATH "CMAKE_ARCHIVE_OUTPUT_DIRECTORY") + set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" CACHE PATH "CMAKE_PDB_OUTPUT_DIRECTORY") + set(CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" CACHE PATH "CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY")