From f3051c4900973465474d9667257d147257956cb3 Mon Sep 17 00:00:00 2001 From: GaoWei8 Date: Tue, 24 Mar 2020 06:25:32 +0000 Subject: [PATCH 1/4] mklml memory leakage --- cmake/configure.cmake | 3 +-- cmake/external/mkldnn.cmake | 4 ++-- cmake/external/mklml.cmake | 12 ++++++------ cmake/generic.cmake | 4 ++-- cmake/inference_lib.cmake | 6 +++--- paddle/fluid/pybind/CMakeLists.txt | 6 +++--- python/setup.py.in | 1 - 7 files changed, 17 insertions(+), 19 deletions(-) diff --git a/cmake/configure.cmake b/cmake/configure.cmake index 14a8bede08711f..f73eca7096cb6d 100644 --- a/cmake/configure.cmake +++ b/cmake/configure.cmake @@ -118,8 +118,7 @@ else() list(APPEND CMAKE_CXX_SOURCE_FILE_EXTENSIONS cu) endif() -if (WITH_MKLML AND MKLML_IOMP_LIB) - message(STATUS "Enable Intel OpenMP with ${MKLML_IOMP_LIB}") +if (WITH_MKLML) if(WIN32) # openmp not support well for now on windows set(OPENMP_FLAGS "") diff --git a/cmake/external/mkldnn.cmake b/cmake/external/mkldnn.cmake index da8343f3c88e43..ac69e176b8551d 100644 --- a/cmake/external/mkldnn.cmake +++ b/cmake/external/mkldnn.cmake @@ -52,7 +52,7 @@ IF(NOT WIN32) IF(${CBLAS_PROVIDER} STREQUAL "MKLML") # Force libmkldnn.so to link libiomp5.so (provided by intel mkl) instead of libgomp.so (provided by gcc), # since core_avx.so links libiomp5.so - set(MKLDNN_SHARED_LINKER_FLAG "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-as-needed -L${MKLML_LIB_DIR} -liomp5") + set(MKLDNN_SHARED_LINKER_FLAG "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-as-needed -L${MKLML_LIB_DIR} ") set(FORBID "-fopenmp") ELSE() set(MKLDNN_SHARED_LINKER_FLAG "${CMAKE_SHARED_LINKER_FLAGS}") @@ -112,7 +112,7 @@ add_definitions(-DPADDLE_WITH_MKLDNN) SET(dummyfile ${CMAKE_CURRENT_BINARY_DIR}/mkldnn_dummy.c) FILE(WRITE ${dummyfile} "const char * dummy = \"${dummyfile}\";") ADD_LIBRARY(mkldnn STATIC ${dummyfile}) -TARGET_LINK_LIBRARIES(mkldnn ${MKLDNN_LIB} ${MKLML_IOMP_LIB}) +TARGET_LINK_LIBRARIES(mkldnn ${MKLDNN_LIB}) ADD_DEPENDENCIES(mkldnn ${MKLDNN_PROJECT}) # copy the real so.0 lib to install dir diff --git a/cmake/external/mklml.cmake b/cmake/external/mklml.cmake index bbc14313cb20c3..96a75dbe8176eb 100644 --- a/cmake/external/mklml.cmake +++ b/cmake/external/mklml.cmake @@ -26,19 +26,19 @@ IF(WIN32) SET(MKLML_VER "mklml_win_${TIME_VERSION}" CACHE STRING "" FORCE) SET(MKLML_URL "https://paddlepaddledeps.bj.bcebos.com/${MKLML_VER}.zip" CACHE STRING "" FORCE) SET(MKLML_LIB ${MKLML_LIB_DIR}/mklml.lib) - SET(MKLML_IOMP_LIB ${MKLML_LIB_DIR}/libiomp5md.lib) + #SET(MKLML_IOMP_LIB ${MKLML_LIB_DIR}/libiomp5md.lib) SET(MKLML_SHARED_LIB ${MKLML_LIB_DIR}/mklml.dll) SET(MKLML_SHARED_LIB_DEPS ${MKLML_LIB_DIR}/msvcr120.dll) - SET(MKLML_SHARED_IOMP_LIB ${MKLML_LIB_DIR}/libiomp5md.dll) + #SET(MKLML_SHARED_IOMP_LIB ${MKLML_LIB_DIR}/libiomp5md.dll) ELSE() #TODO(intel-huying): # Now enable Erf function in mklml library temporarily, it will be updated as offical version later. SET(MKLML_VER "csrmm2_mklml_lnx_2019.0.2" CACHE STRING "" FORCE) SET(MKLML_URL "http://paddlepaddledeps.bj.bcebos.com/${MKLML_VER}.tgz" CACHE STRING "" FORCE) - SET(MKLML_LIB ${MKLML_LIB_DIR}/libmklml_intel.so) - SET(MKLML_IOMP_LIB ${MKLML_LIB_DIR}/libiomp5.so) - SET(MKLML_SHARED_LIB ${MKLML_LIB_DIR}/libmklml_intel.so) - SET(MKLML_SHARED_IOMP_LIB ${MKLML_LIB_DIR}/libiomp5.so) + SET(MKLML_LIB ${MKLML_LIB_DIR}/libmklml_gnu.so) + #SET(MKLML_IOMP_LIB ${MKLML_LIB_DIR}/libiomp5.so) + SET(MKLML_SHARED_LIB ${MKLML_LIB_DIR}/libmklml_gnu.so) + #SET(MKLML_SHARED_IOMP_LIB ${MKLML_LIB_DIR}/libiomp5.so) ENDIF() SET(MKLML_PROJECT "extern_mklml") diff --git a/cmake/generic.cmake b/cmake/generic.cmake index 54a6e18b0078b3..c38306ca1c6d12 100644 --- a/cmake/generic.cmake +++ b/cmake/generic.cmake @@ -299,9 +299,9 @@ function(cc_library TARGET_NAME) endif() add_dependencies(${TARGET_NAME} mklml) if(WIN32) - target_link_libraries(${TARGET_NAME} ${MKLML_IOMP_LIB}) + target_link_libraries(${TARGET_NAME}) else(WIN32) - target_link_libraries(${TARGET_NAME} "-L${MKLML_LIB_DIR} -liomp5 -Wl,--as-needed") + target_link_libraries(${TARGET_NAME} "-L${MKLML_LIB_DIR} -Wl,--as-needed") endif(WIN32) endif() # remove link to python, see notes at: diff --git a/cmake/inference_lib.cmake b/cmake/inference_lib.cmake index 87667d1cae2042..a3d8a892ff3f3b 100644 --- a/cmake/inference_lib.cmake +++ b/cmake/inference_lib.cmake @@ -60,13 +60,13 @@ function(copy_part_of_thrid_party TARGET DST) set(dst_dir "${DST}/third_party/install/mklml") if(WIN32) copy(${TARGET} - SRCS ${MKLML_LIB} ${MKLML_IOMP_LIB} ${MKLML_SHARED_LIB} - ${MKLML_SHARED_LIB_DEPS} ${MKLML_SHARED_IOMP_LIB} ${MKLML_INC_DIR} + SRCS ${MKLML_LIB} ${MKLML_SHARED_LIB} + ${MKLML_SHARED_LIB_DEPS} ${MKLML_INC_DIR} DSTS ${dst_dir}/lib ${dst_dir}/lib ${dst_dir}/lib ${dst_dir}/lib ${dst_dir}/lib ${dst_dir}) else() copy(${TARGET} - SRCS ${MKLML_LIB} ${MKLML_IOMP_LIB} ${MKLML_INC_DIR} + SRCS ${MKLML_LIB} ${MKLML_INC_DIR} DSTS ${dst_dir}/lib ${dst_dir}/lib ${dst_dir}) endif() elseif(${CBLAS_PROVIDER} STREQUAL EXTERN_OPENBLAS) diff --git a/paddle/fluid/pybind/CMakeLists.txt b/paddle/fluid/pybind/CMakeLists.txt index 0fad32d160fd38..1780188362033e 100644 --- a/paddle/fluid/pybind/CMakeLists.txt +++ b/paddle/fluid/pybind/CMakeLists.txt @@ -69,8 +69,8 @@ if(WITH_PYTHON) if(${CBLAS_PROVIDER} STREQUAL MKLML) add_custom_command(TARGET op_function_generator POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${MKLML_SHARED_LIB} ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} - COMMAND ${CMAKE_COMMAND} -E copy ${MKLML_SHARED_LIB_DEPS} ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} - COMMAND ${CMAKE_COMMAND} -E copy ${MKLML_SHARED_IOMP_LIB} ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} ) else(${CBLAS_PROVIDER} STREQUAL EXTERN_OPENBLAS) add_custom_command(TARGET op_function_generator POST_BUILD @@ -95,7 +95,7 @@ if(WITH_PYTHON) if(WITH_MKL) add_custom_command(TARGET op_function_generator POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${MKLML_SHARED_LIB} ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E copy ${MKLML_SHARED_IOMP_LIB} ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR} ) endif(WITH_MKL) if(WITH_MKLDNN) diff --git a/python/setup.py.in b/python/setup.py.in index d2f4571b115df2..2f4cb79b4b01f9 100644 --- a/python/setup.py.in +++ b/python/setup.py.in @@ -182,7 +182,6 @@ if '${TENSORRT_FOUND}' == 'ON' and os.name == 'nt': if '${WITH_MKL}' == 'ON': shutil.copy('${MKLML_SHARED_LIB}', libs_path) - shutil.copy('${MKLML_SHARED_IOMP_LIB}', libs_path) package_data['paddle.libs']+=[('libmklml_intel' if os.name != 'nt' else 'mklml') + ext_name, ('libiomp5' if os.name != 'nt' else 'libiomp5md') + ext_name] # mklml has dependency to vs runtime library if os.name == 'nt': From 0ebefb7c73df7b0e840822c5f094e2c6ce94d730 Mon Sep 17 00:00:00 2001 From: Tao Luo Date: Mon, 30 Mar 2020 18:37:45 +0800 Subject: [PATCH 2/4] fix compile error --- cmake/external/mklml.cmake | 4 ---- cmake/inference_lib.cmake | 5 ++--- paddle/fluid/pybind/CMakeLists.txt | 4 +--- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/cmake/external/mklml.cmake b/cmake/external/mklml.cmake index 96a75dbe8176eb..1be2cf82e51990 100644 --- a/cmake/external/mklml.cmake +++ b/cmake/external/mklml.cmake @@ -26,19 +26,15 @@ IF(WIN32) SET(MKLML_VER "mklml_win_${TIME_VERSION}" CACHE STRING "" FORCE) SET(MKLML_URL "https://paddlepaddledeps.bj.bcebos.com/${MKLML_VER}.zip" CACHE STRING "" FORCE) SET(MKLML_LIB ${MKLML_LIB_DIR}/mklml.lib) - #SET(MKLML_IOMP_LIB ${MKLML_LIB_DIR}/libiomp5md.lib) SET(MKLML_SHARED_LIB ${MKLML_LIB_DIR}/mklml.dll) SET(MKLML_SHARED_LIB_DEPS ${MKLML_LIB_DIR}/msvcr120.dll) - #SET(MKLML_SHARED_IOMP_LIB ${MKLML_LIB_DIR}/libiomp5md.dll) ELSE() #TODO(intel-huying): # Now enable Erf function in mklml library temporarily, it will be updated as offical version later. SET(MKLML_VER "csrmm2_mklml_lnx_2019.0.2" CACHE STRING "" FORCE) SET(MKLML_URL "http://paddlepaddledeps.bj.bcebos.com/${MKLML_VER}.tgz" CACHE STRING "" FORCE) SET(MKLML_LIB ${MKLML_LIB_DIR}/libmklml_gnu.so) - #SET(MKLML_IOMP_LIB ${MKLML_LIB_DIR}/libiomp5.so) SET(MKLML_SHARED_LIB ${MKLML_LIB_DIR}/libmklml_gnu.so) - #SET(MKLML_SHARED_IOMP_LIB ${MKLML_LIB_DIR}/libiomp5.so) ENDIF() SET(MKLML_PROJECT "extern_mklml") diff --git a/cmake/inference_lib.cmake b/cmake/inference_lib.cmake index a3d8a892ff3f3b..1f9834772e7181 100644 --- a/cmake/inference_lib.cmake +++ b/cmake/inference_lib.cmake @@ -62,12 +62,11 @@ function(copy_part_of_thrid_party TARGET DST) copy(${TARGET} SRCS ${MKLML_LIB} ${MKLML_SHARED_LIB} ${MKLML_SHARED_LIB_DEPS} ${MKLML_INC_DIR} - DSTS ${dst_dir}/lib ${dst_dir}/lib ${dst_dir}/lib - ${dst_dir}/lib ${dst_dir}/lib ${dst_dir}) + DSTS ${dst_dir}/lib ${dst_dir}/lib ${dst_dir}/lib ${dst_dir}/lib ${dst_dir}) else() copy(${TARGET} SRCS ${MKLML_LIB} ${MKLML_INC_DIR} - DSTS ${dst_dir}/lib ${dst_dir}/lib ${dst_dir}) + DSTS ${dst_dir}/lib ${dst_dir}) endif() elseif(${CBLAS_PROVIDER} STREQUAL EXTERN_OPENBLAS) set(dst_dir "${DST}/third_party/install/openblas") diff --git a/paddle/fluid/pybind/CMakeLists.txt b/paddle/fluid/pybind/CMakeLists.txt index 1780188362033e..82e921cce26574 100644 --- a/paddle/fluid/pybind/CMakeLists.txt +++ b/paddle/fluid/pybind/CMakeLists.txt @@ -69,8 +69,7 @@ if(WITH_PYTHON) if(${CBLAS_PROVIDER} STREQUAL MKLML) add_custom_command(TARGET op_function_generator POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${MKLML_SHARED_LIB} ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} + COMMAND ${CMAKE_COMMAND} -E copy ${MKLML_SHARED_LIB_DEPS} ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} ) else(${CBLAS_PROVIDER} STREQUAL EXTERN_OPENBLAS) add_custom_command(TARGET op_function_generator POST_BUILD @@ -95,7 +94,6 @@ if(WITH_PYTHON) if(WITH_MKL) add_custom_command(TARGET op_function_generator POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${MKLML_SHARED_LIB} ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR} ) endif(WITH_MKL) if(WITH_MKLDNN) From 3e516ee18aa8003b3ffacc897b37a91c645b4105 Mon Sep 17 00:00:00 2001 From: Tao Luo Date: Mon, 30 Mar 2020 20:13:39 +0800 Subject: [PATCH 3/4] fix dynamic_loader and some demo CMakeLists.txt test=develop --- paddle/fluid/inference/api/demo_ci/CMakeLists.txt | 6 ++---- paddle/fluid/platform/dynload/dynamic_loader.cc | 6 +++--- paddle/fluid/train/demo/CMakeLists.txt | 2 +- paddle/fluid/train/imdb_demo/CMakeLists.txt | 2 +- python/setup.py.in | 4 ++-- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/paddle/fluid/inference/api/demo_ci/CMakeLists.txt b/paddle/fluid/inference/api/demo_ci/CMakeLists.txt index 255a1bf33e2fa1..251bcdfc47f31f 100644 --- a/paddle/fluid/inference/api/demo_ci/CMakeLists.txt +++ b/paddle/fluid/inference/api/demo_ci/CMakeLists.txt @@ -94,11 +94,9 @@ if(WITH_MKL) set(MATH_LIB_PATH "${PADDLE_LIB_THIRD_PARTY_PATH}mklml") include_directories("${MATH_LIB_PATH}/include") if(WIN32) - set(MATH_LIB ${MATH_LIB_PATH}/lib/mklml${CMAKE_STATIC_LIBRARY_SUFFIX} - ${MATH_LIB_PATH}/lib/libiomp5md${CMAKE_STATIC_LIBRARY_SUFFIX}) + set(MATH_LIB ${MATH_LIB_PATH}/lib/mklml${CMAKE_STATIC_LIBRARY_SUFFIX}) else() - set(MATH_LIB ${MATH_LIB_PATH}/lib/libmklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX} - ${MATH_LIB_PATH}/lib/libiomp5${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(MATH_LIB ${MATH_LIB_PATH}/lib/libmklml_gnu${CMAKE_SHARED_LIBRARY_SUFFIX}) endif() set(MKLDNN_PATH "${PADDLE_LIB_THIRD_PARTY_PATH}mkldnn") if(EXISTS ${MKLDNN_PATH}) diff --git a/paddle/fluid/platform/dynload/dynamic_loader.cc b/paddle/fluid/platform/dynload/dynamic_loader.cc index 48848bd84fe8bf..d54dfd2ee6f8c8 100644 --- a/paddle/fluid/platform/dynload/dynamic_loader.cc +++ b/paddle/fluid/platform/dynload/dynamic_loader.cc @@ -44,7 +44,7 @@ DEFINE_string( tensorrt_dir, "", "Specify path for loading tensorrt library, such as libnvinfer.so."); -DEFINE_string(mklml_dir, "", "Specify path for loading libmklml_intel.so."); +DEFINE_string(mklml_dir, "", "Specify path for loading libmklml_gnu.so."); DEFINE_string(op_dir, "", "Specify path for loading user-defined op library."); @@ -274,11 +274,11 @@ void* GetTensorRtDsoHandle() { void* GetMKLMLDsoHandle() { #if defined(__APPLE__) || defined(__OSX__) - return GetDsoHandleFromSearchPath(FLAGS_mklml_dir, "libmklml_intel.dylib"); + return GetDsoHandleFromSearchPath(FLAGS_mklml_dir, "libmklml_gnu.dylib"); #elif defined(_WIN32) return GetDsoHandleFromSearchPath(FLAGS_mklml_dir, "mklml.dll"); #else - return GetDsoHandleFromSearchPath(FLAGS_mklml_dir, "libmklml_intel.so"); + return GetDsoHandleFromSearchPath(FLAGS_mklml_dir, "libmklml_gnu.so"); #endif } diff --git a/paddle/fluid/train/demo/CMakeLists.txt b/paddle/fluid/train/demo/CMakeLists.txt index 57fda493a81102..b2c81bf781e554 100644 --- a/paddle/fluid/train/demo/CMakeLists.txt +++ b/paddle/fluid/train/demo/CMakeLists.txt @@ -46,7 +46,7 @@ if(WITH_MKL) if(WIN32) set(MATH_LIB ${PADDLE_LIB}/third_party/install/mklml/lib/mklml.lib) else(WIN32) - set(MATH_LIB ${PADDLE_LIB}/third_party/install/mklml/lib/libmklml_intel.so) + set(MATH_LIB ${PADDLE_LIB}/third_party/install/mklml/lib/libmklml_gnu.so) endif(WIN32) else() if(APPLE) diff --git a/paddle/fluid/train/imdb_demo/CMakeLists.txt b/paddle/fluid/train/imdb_demo/CMakeLists.txt index 29d54d0d2fbf61..11db81929e3dfa 100644 --- a/paddle/fluid/train/imdb_demo/CMakeLists.txt +++ b/paddle/fluid/train/imdb_demo/CMakeLists.txt @@ -45,7 +45,7 @@ if(WITH_MKL) if(WIN32) set(MATH_LIB ${PADDLE_LIB}/third_party/install/mklml/lib/mklml.lib) else(WIN32) - set(MATH_LIB ${PADDLE_LIB}/third_party/install/mklml/lib/libmklml_intel.so) + set(MATH_LIB ${PADDLE_LIB}/third_party/install/mklml/lib/libmklml_gnu.so) endif(WIN32) else() if(APPLE) diff --git a/python/setup.py.in b/python/setup.py.in index c4c453c5fe0eca..d9a92524012e2b 100644 --- a/python/setup.py.in +++ b/python/setup.py.in @@ -182,7 +182,7 @@ if '${TENSORRT_FOUND}' == 'ON' and os.name == 'nt': if '${WITH_MKL}' == 'ON': shutil.copy('${MKLML_SHARED_LIB}', libs_path) - package_data['paddle.libs']+=[('libmklml_intel' if os.name != 'nt' else 'mklml') + ext_name, ('libiomp5' if os.name != 'nt' else 'libiomp5md') + ext_name] + package_data['paddle.libs']+=[('libmklml_gnu' if os.name != 'nt' else 'mklml') + ext_name, ('libiomp5' if os.name != 'nt' else 'libiomp5md') + ext_name] # mklml has dependency to vs runtime library if os.name == 'nt': shutil.copy('${MKLML_SHARED_LIB_DEPS}', libs_path) @@ -207,7 +207,7 @@ if '${WITH_MKLDNN}' == 'ON': # # change rpath of libdnnl.so.1, add $ORIGIN/ to it. # The reason is that all thirdparty libraries in the same directory, - # thus, libdnnl.so.1 will find libmklml_intel.so and libiomp5.so. + # thus, libdnnl.so.1 will find libmklml_gnu.so. command = "patchelf --set-rpath '$ORIGIN/' ${MKLDNN_SHARED_LIB}" if os.system(command) != 0: raise Exception("patch libdnnl.so failed, command: %s" % command) From 9da98cdf3351cf9312584cee6a1f0ae4110437a6 Mon Sep 17 00:00:00 2001 From: Tao Luo Date: Mon, 30 Mar 2020 20:41:20 +0800 Subject: [PATCH 4/4] remove iomp5.so in setup.py.in test=develop --- python/setup.py.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/setup.py.in b/python/setup.py.in index d9a92524012e2b..7f26d751976b70 100644 --- a/python/setup.py.in +++ b/python/setup.py.in @@ -182,7 +182,7 @@ if '${TENSORRT_FOUND}' == 'ON' and os.name == 'nt': if '${WITH_MKL}' == 'ON': shutil.copy('${MKLML_SHARED_LIB}', libs_path) - package_data['paddle.libs']+=[('libmklml_gnu' if os.name != 'nt' else 'mklml') + ext_name, ('libiomp5' if os.name != 'nt' else 'libiomp5md') + ext_name] + package_data['paddle.libs']+=[('libmklml_gnu' if os.name != 'nt' else 'mklml') + ext_name] # mklml has dependency to vs runtime library if os.name == 'nt': shutil.copy('${MKLML_SHARED_LIB_DEPS}', libs_path) @@ -249,7 +249,7 @@ package_dir['paddle.libs']=libs_path # change rpath of ${FLUID_CORE_NAME}.ext, add $ORIGIN/../libs/ to it. -# The reason is that libwarpctc.ext, libiomp5.ext etc are in paddle.libs, and +# The reason is that libwarpctc.ext, etc are in paddle.libs, and # ${FLUID_CORE_NAME}.ext is in paddle.fluid, thus paddle/fluid/../libs will pointer to above libraries. # This operation will fix https://github.com/PaddlePaddle/Paddle/issues/3213 if '${CMAKE_BUILD_TYPE}' == 'Release':