Skip to content

Commit 61cae53

Browse files
committed
support anakin for only-cpu environment
1 parent 7dd8adb commit 61cae53

File tree

5 files changed

+34
-20
lines changed

5 files changed

+34
-20
lines changed

CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,9 +213,11 @@ include(configure) # add paddle env configuration
213213
if(WITH_GPU)
214214
include(cuda)
215215
include(tensorrt)
216+
endif()
217+
if(WITH_MKL OR WITH_MKLML)
216218
include(external/anakin)
217219
elseif()
218-
set(WITH_ANAKIN OFF CACHE STRING "Anakin is used in GPU only now." FORCE)
220+
set(WITH_ANAKIN OFF CACHE STRING "Anakin is used in MKL only now." FORCE)
219221
endif()
220222

221223
include(generic) # simplify cmake module

cmake/external/anakin.cmake

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,6 @@ set(ANAKIN_LIBRARY ${ANAKIN_INSTALL_DIR})
1616
set(ANAKIN_SHARED_LIB ${ANAKIN_LIBRARY}/libanakin.so)
1717
set(ANAKIN_SABER_LIB ${ANAKIN_LIBRARY}/libanakin_saber_common.so)
1818

19-
# TODO(luotao): ANAKIN_MODLE_URL etc will move to demo ci later.
20-
set(INFERENCE_URL "http://paddle-inference-dist.bj.bcebos.com")
21-
set(ANAKIN_MODLE_URL "${INFERENCE_URL}/mobilenet_v2.anakin.bin")
22-
set(ANAKIN_RNN_MODLE_URL "${INFERENCE_URL}/anakin_test%2Fditu_rnn.anakin2.model.bin")
23-
set(ANAKIN_RNN_DATA_URL "${INFERENCE_URL}/anakin_test%2Fditu_rnn_data.txt")
24-
execute_process(COMMAND bash -c "mkdir -p ${ANAKIN_SOURCE_DIR}")
25-
execute_process(COMMAND bash -c "cd ${ANAKIN_SOURCE_DIR}; wget -q --no-check-certificate ${ANAKIN_MODLE_URL} -N")
26-
execute_process(COMMAND bash -c "cd ${ANAKIN_SOURCE_DIR}; wget -q --no-check-certificate ${ANAKIN_RNN_MODLE_URL} -N")
27-
execute_process(COMMAND bash -c "cd ${ANAKIN_SOURCE_DIR}; wget -q --no-check-certificate ${ANAKIN_RNN_DATA_URL} -N")
28-
2919
include_directories(${ANAKIN_INCLUDE})
3020
include_directories(${ANAKIN_INCLUDE}/saber/)
3121
include_directories(${ANAKIN_INCLUDE}/saber/core/)
@@ -48,6 +38,11 @@ set(ANAKIN_COMPILE_EXTRA_FLAGS
4838
-Wno-reorder
4939
-Wno-error=cpp)
5040

41+
if(WITH_GPU)
42+
set(CMAKE_ARGS_PREFIX -DUSE_GPU_PLACE=YES -DCUDNN_ROOT=${CUDNN_ROOT} -DCUDNN_INCLUDE_DIR=${CUDNN_INCLUDE_DIR})
43+
else()
44+
set(CMAKE_ARGS_PREFIX -DUSE_GPU_PLACE=NO)
45+
endif()
5146
ExternalProject_Add(
5247
extern_anakin
5348
${EXTERNAL_PROJECT_LOG_ARGS}
@@ -56,13 +51,11 @@ ExternalProject_Add(
5651
GIT_TAG "9424277cf9ae180a14aff09560d3cd60a49c76d2"
5752
PREFIX ${ANAKIN_SOURCE_DIR}
5853
UPDATE_COMMAND ""
59-
CMAKE_ARGS -DUSE_GPU_PLACE=YES
54+
CMAKE_ARGS ${CMAKE_ARGS_PREFIX}
6055
-DUSE_X86_PLACE=YES
6156
-DBUILD_WITH_UNIT_TEST=NO
6257
-DPROTOBUF_ROOT=${THIRD_PARTY_PATH}/install/protobuf
6358
-DMKLML_ROOT=${THIRD_PARTY_PATH}/install/mklml
64-
-DCUDNN_ROOT=${CUDNN_ROOT}
65-
-DCUDNN_INCLUDE_DIR=${CUDNN_INCLUDE_DIR}
6659
-DENABLE_OP_TIMER=${ANAKIN_ENABLE_OP_TIMER}
6760
${EXTERNAL_OPTIONAL_ARGS}
6861
CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${ANAKIN_INSTALL_DIR}

cmake/inference_lib.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ copy(memory_lib
145145
set(inference_deps paddle_fluid_shared paddle_fluid)
146146

147147
set(module "inference/api")
148-
if (WITH_ANAKIN AND WITH_GPU)
148+
if (WITH_ANAKIN AND WITH_MKL)
149149
copy(anakin_inference_lib DEPS paddle_inference_api inference_anakin_api
150150
SRCS
151151
${PADDLE_BINARY_DIR}/paddle/fluid/inference/api/libinference_anakin_api* # compiled anakin api

paddle/fluid/inference/api/CMakeLists.txt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ cc_library(paddle_inference_tensorrt_subgraph_engine
7373
inference_api_test(test_api_tensorrt_subgraph_engine SRC api_tensorrt_subgraph_engine_tester.cc ARGS test_word2vec)
7474
endif()
7575

76-
if (WITH_ANAKIN AND WITH_GPU) # only needed in CI
76+
if (WITH_ANAKIN AND WITH_MKL) # only needed in CI
7777
# compile the libinference_anakin_api.a and anakin.so.
7878
cc_library(inference_anakin_api SRCS api.cc api_anakin_engine.cc DEPS anakin_shared anakin_saber mklml)
7979
cc_library(inference_anakin_api_shared SHARED SRCS api.cc api_anakin_engine.cc DEPS anakin_shared anakin_saber)
@@ -83,12 +83,24 @@ if (WITH_ANAKIN AND WITH_GPU) # only needed in CI
8383
anakin_target(inference_anakin_api)
8484
anakin_target(inference_anakin_api_shared)
8585
if (WITH_TESTING)
86-
cc_test(api_anakin_engine_tester SRCS api_anakin_engine_tester.cc
87-
ARGS --model=${ANAKIN_SOURCE_DIR}/mobilenet_v2.anakin.bin
88-
DEPS inference_anakin_api_shared dynload_cuda SERIAL)
86+
# TODO(luotao): ANAKIN_MODLE_URL etc will move to demo ci later.
87+
set(INFERENCE_URL "http://paddle-inference-dist.bj.bcebos.com")
88+
set(ANAKIN_RNN_MODLE_URL "${INFERENCE_URL}/anakin_test%2Fditu_rnn.anakin2.model.bin")
89+
set(ANAKIN_RNN_DATA_URL "${INFERENCE_URL}/anakin_test%2Fditu_rnn_data.txt")
90+
execute_process(COMMAND bash -c "mkdir -p ${ANAKIN_SOURCE_DIR}")
91+
execute_process(COMMAND bash -c "cd ${ANAKIN_SOURCE_DIR}; wget -q --no-check-certificate ${ANAKIN_RNN_MODLE_URL} -N")
92+
execute_process(COMMAND bash -c "cd ${ANAKIN_SOURCE_DIR}; wget -q --no-check-certificate ${ANAKIN_RNN_DATA_URL} -N")
93+
if(WITH_GPU)
94+
set(anakin_test_extra_deps dynload_cuda)
95+
set(ANAKIN_MODLE_URL "${INFERENCE_URL}/mobilenet_v2.anakin.bin")
96+
execute_process(COMMAND bash -c "cd ${ANAKIN_SOURCE_DIR}; wget -q --no-check-certificate ${ANAKIN_MODLE_URL} -N")
97+
cc_test(api_anakin_engine_tester SRCS api_anakin_engine_tester.cc
98+
ARGS --model=${ANAKIN_SOURCE_DIR}/mobilenet_v2.anakin.bin
99+
DEPS inference_anakin_api_shared ${anakin_test_extra_deps} SERIAL)
100+
endif()
89101
cc_test(api_anakin_engine_rnn_tester SRCS api_anakin_engine_rnn_tester.cc
90102
ARGS --model=${ANAKIN_SOURCE_DIR}/anakin_test%2Fditu_rnn.anakin2.model.bin
91103
--datapath=${ANAKIN_SOURCE_DIR}/anakin_test%2Fditu_rnn_data.txt
92-
DEPS inference_anakin_api_shared dynload_cuda SERIAL)
104+
DEPS inference_anakin_api_shared ${anakin_test_extra_deps} SERIAL)
93105
endif(WITH_TESTING)
94106
endif()

paddle/fluid/inference/api/api_anakin_engine.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,9 @@ PaddleInferenceAnakinPredictor<Target>::Clone() {
193193
return std::move(cls);
194194
}
195195

196+
#ifdef PADDLE_WITH_CUDA
196197
template class PaddleInferenceAnakinPredictor<anakin::NV>;
198+
#endif
197199
template class PaddleInferenceAnakinPredictor<anakin::X86>;
198200

199201
// A factory to help create difference predictor.
@@ -202,10 +204,15 @@ std::unique_ptr<PaddlePredictor> CreatePaddlePredictor<
202204
AnakinConfig, PaddleEngineKind::kAnakin>(const AnakinConfig &config) {
203205
VLOG(3) << "Anakin Predictor create.";
204206
if (config.target_type == AnakinConfig::NVGPU) {
207+
#ifdef PADDLE_WITH_CUDA
205208
VLOG(3) << "Anakin Predictor create on [ NVIDIA GPU ].";
206209
std::unique_ptr<PaddlePredictor> x(
207210
new PaddleInferenceAnakinPredictor<anakin::NV>(config));
208211
return x;
212+
#else
213+
LOG(ERROR) << "AnakinConfig::NVGPU could not used in ONLY-CPU environment";
214+
return nullptr;
215+
#endif
209216
} else if (config.target_type == AnakinConfig::X86) {
210217
VLOG(3) << "Anakin Predictor create on [ Intel X86 ].";
211218
std::unique_ptr<PaddlePredictor> x(

0 commit comments

Comments
 (0)