diff --git a/cmake/external/anakin.cmake b/cmake/external/anakin.cmake index 55ae6b7408c93653a1de489240824f21826e577d..86e91a9602871f7969f5602be0894593c7526873 100644 --- a/cmake/external/anakin.cmake +++ b/cmake/external/anakin.cmake @@ -10,7 +10,35 @@ set(ANAKIN_LIBRARY ${ANAKIN_INSTALL_DIR}) SET(ANAKIN_SHARED_LIB ${ANAKIN_LIBRARY}/libanakin.so) SET(ANAKIN_SABER_LIB ${ANAKIN_LIBRARY}/libanakin_saber_common.so) -include_directories(${ANAKIN_INCLUDE}) +# A helper function used in Anakin, currently, to use it, one need to recursively include +# nearly all the header files. +function(fetch_include_recursively root_dir) + if (IS_DIRECTORY ${root_dir}) + include_directories(${root_dir}) + endif() + + file(GLOB ALL_SUB RELATIVE ${root_dir} ${root_dir}/*) + foreach(sub ${ALL_SUB}) + if (IS_DIRECTORY ${root_dir}/${sub}) + fetch_include_recursively(${root_dir}/${sub}) + endif() + endforeach() +endfunction() +fetch_include_recursively(${ANAKIN_INCLUDE}) + +# A nother helper function used in Anakin. +function(target_fetch_include_recursively root_dir target_name) + if (IS_DIRECTORY ${root_dir}) + target_include_directories(${target_name} PUBLIC ${root_dir}) + endif() + + file(GLOB ALL_SUB RELATIVE ${root_dir} ${root_dir}/*) + foreach(sub ${ALL_SUB}) + if (IS_DIRECTORY ${root_dir}/${sub}) + target_include_directories(${target_name} PUBLIC ${root_dir}/${sub}) + endif() + endforeach() +endfunction() set(ANAKIN_COMPILE_EXTRA_FLAGS -Wno-error=unused-but-set-variable -Wno-unused-but-set-variable @@ -29,7 +57,7 @@ ExternalProject_Add( extern_anakin ${EXTERNAL_PROJECT_LOG_ARGS} GIT_REPOSITORY "https://github.com/luotao1/Anakin" - GIT_TAG "20f6cb94a0f6ebbef0b45068b34baeb07242bac7" + GIT_TAG "3957ae9263eaa0b1986758dac60a88852afb09be" PREFIX ${ANAKIN_SOURCE_DIR} UPDATE_COMMAND "" CMAKE_ARGS -DUSE_GPU_PLACE=YES @@ -41,28 +69,10 @@ ExternalProject_Add( ${EXTERNAL_OPTIONAL_ARGS} CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${ANAKIN_INSTALL_DIR} ) -# must manualy copy anakin_config.h to install dir. -execute_process(COMMAND bash -c "cp ${ANAKIN_INSTALL_DIR}/../../extern_anakin-build/anakin_config.h ${ANAKIN_INSTALL_DIR}") - -# A helper function used in Anakin, currently, to use it, one need to recursively include -# nearly all the header files. -function(fetch_include_recursively root_dir) - if (IS_DIRECTORY ${root_dir}) - include_directories(${root_dir}) - endif() - - file(GLOB ALL_SUB RELATIVE ${root_dir} ${root_dir}/*) - foreach(sub ${ALL_SUB}) - if (IS_DIRECTORY ${root_dir}/${sub}) - fetch_include_recursively(${root_dir}/${sub}) - endif() - endforeach() -endfunction() message(STATUS "Anakin for inference is enabled") message(STATUS "Anakin is set INCLUDE:${ANAKIN_INCLUDE} LIBRARY:${ANAKIN_LIBRARY}") - add_dependencies(extern_anakin protobuf mklml) add_library(anakin SHARED IMPORTED GLOBAL) set_property(TARGET anakin PROPERTY IMPORTED_LOCATION ${ANAKIN_SHARED_LIB}) diff --git a/cmake/inference_lib.cmake b/cmake/inference_lib.cmake index aeb081e76e5bc5b9d3d81ce625195c800174ab6c..834ab5a9e527355d3664313d38cd4920f6fbf535 100644 --- a/cmake/inference_lib.cmake +++ b/cmake/inference_lib.cmake @@ -143,7 +143,7 @@ if (WITH_ANAKIN AND WITH_GPU) copy(anakin_inference_lib DEPS paddle_inference_api inference_anakin_api SRCS ${PADDLE_BINARY_DIR}/paddle/fluid/inference/api/libinference_anakin_api* # compiled anakin api - ${PADDLE_BINARY_DIR}/third_party/install/anakin/*.tar.gz # anakin release + ${ANAKIN_INSTALL_DIR} # anakin release DSTS ${dst_dir}/inference/anakin ${dst_dir}/inference/anakin) list(APPEND inference_deps anakin_inference_lib) endif() diff --git a/paddle/fluid/inference/api/CMakeLists.txt b/paddle/fluid/inference/api/CMakeLists.txt index 738b9d42c028f372592ffcd18fbfd81e3efe055c..d3bff665cc59e26c3c1c36942359d9321fbc97cb 100644 --- a/paddle/fluid/inference/api/CMakeLists.txt +++ b/paddle/fluid/inference/api/CMakeLists.txt @@ -61,18 +61,24 @@ inference_api_test(test_api_tensorrt_subgraph_engine SRC api_tensorrt_subgraph_e endif() if (WITH_ANAKIN) # only needed in CI - fetch_include_recursively(${ANAKIN_INCLUDE}) # compile the libinference_anakin_api.a and anakin.so. nv_library(inference_anakin_api SRCS api.cc api_anakin_engine.cc DEPS anakin) nv_library(inference_anakin_api_shared SHARED SRCS api.cc api_anakin_engine.cc DEPS anakin) - target_compile_options(inference_anakin_api BEFORE PUBLIC ${ANAKIN_COMPILE_EXTRA_FLAGS}) - target_compile_options(inference_anakin_api_shared BEFORE PUBLIC ${ANAKIN_COMPILE_EXTRA_FLAGS}) set(ANAKIN_DEPS_LIB ${ANAKIN_SHARED_LIB} ${ANAKIN_SABER_LIB} ${CUDNN_LIBRARY}) - target_link_libraries(inference_anakin_api ${ANAKIN_DEPS_LIB}) - target_link_libraries(inference_anakin_api_shared ${ANAKIN_DEPS_LIB}) + function(anakin_target target_name) + target_fetch_include_recursively(${ANAKIN_INCLUDE} ${target_name}) + target_compile_options(${target_name} BEFORE PUBLIC ${ANAKIN_COMPILE_EXTRA_FLAGS}) + target_link_libraries(${target_name} ${ANAKIN_DEPS_LIB}) + endfunction() + anakin_target(inference_anakin_api) + anakin_target(inference_anakin_api_shared) if (WITH_TESTING) + set(ANAKIN_MODLE_URL "http://paddle-inference-dist.bj.bcebos.com/mobilenet_v2.anakin.bin") + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/.timestamp + COMMAND cd ${CMAKE_CURRENT_BINARY_DIR} && wget --no-check-certificate ${ANAKIN_MODLE_URL} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) cc_test(inference_anakin_test SRCS api_anakin_engine_tester.cc - ARGS --model=/home/luotao02/download/anakin/mobilenet_v2.anakin.bin + ARGS --model=${CMAKE_CURRENT_BINARY_DIR}/mobilenet_v2.anakin.bin DEPS inference_anakin_api_shared dynload_cuda SERIAL) target_compile_options(inference_anakin_test BEFORE PUBLIC ${ANAKIN_COMPILE_EXTRA_FLAGS}) endif(WITH_TESTING)