未验证 提交 607a1d65 编写于 作者: H heliqi 提交者: GitHub

[inference]Resolve protobuf of ORT Backend conflict (#43159)

* modify paddle2onnx cmake

* modify paddle2onnx cmake

* modify export interface

* modify paddle2onnx export

* paddle2onnx add mac windows

* modify paddle2onnx mac windows cmake

* modify paddle2onnx mac windows cmake

* modify paddle2onnx cmake support windows

* modify paddle2onnx cmake support windows

* modify paddle2onnx cmake support windows
Co-authored-by: Nxiegegege <xiege01@baidu.com>
上级 c22e1123
...@@ -25,82 +25,82 @@ include(ExternalProject) ...@@ -25,82 +25,82 @@ include(ExternalProject)
set(PADDLE2ONNX_PROJECT "extern_paddle2onnx") set(PADDLE2ONNX_PROJECT "extern_paddle2onnx")
set(PADDLE2ONNX_PREFIX_DIR ${THIRD_PARTY_PATH}/paddle2onnx) set(PADDLE2ONNX_PREFIX_DIR ${THIRD_PARTY_PATH}/paddle2onnx)
set(PADDLE2ONNX_SOURCE_DIR
${THIRD_PARTY_PATH}/paddle2onnx/src/${PADDLE2ONNX_PROJECT})
set(PADDLE2ONNX_INSTALL_DIR ${THIRD_PARTY_PATH}/install/paddle2onnx) set(PADDLE2ONNX_INSTALL_DIR ${THIRD_PARTY_PATH}/install/paddle2onnx)
set(PADDLE2ONNX_INC_DIR set(PADDLE2ONNX_INC_DIR
"${PADDLE2ONNX_INSTALL_DIR}/include" "${PADDLE2ONNX_INSTALL_DIR}/include"
CACHE PATH "paddle2onnx include directory." FORCE) CACHE PATH "paddle2onnx include directory." FORCE)
set(PADDLE2ONNX_REPOSITORY ${GIT_URL}/PaddlePaddle/Paddle2ONNX.git) set(PADDLE2ONNX_LIB_DIR
set(PADDLE2ONNX_TAG cpp) "${PADDLE2ONNX_INSTALL_DIR}/lib"
set(LIBDIR "lib") CACHE PATH "onnxruntime lib directory." FORCE)
set(CMAKE_BUILD_RPATH "${CMAKE_BUILD_RPATH}" set(CMAKE_BUILD_RPATH "${CMAKE_BUILD_RPATH}"
"${PADDLE2ONNX_INSTALL_DIR}/${LIBDIR}") "${PADDLE2ONNX_INSTALL_DIR}/${LIBDIR}")
include_directories(${PADDLE2ONNX_INC_DIR} include_directories(${PADDLE2ONNX_INC_DIR}
)# For PADDLE2ONNX code to include internal headers. )# For PADDLE2ONNX code to include internal headers.
if(WIN32) if(WIN32)
set(PADDLE2ONNX_SOURCE_LIB
"${PADDLE2ONNX_SOURCE_DIR}/lib/libpaddle2onnx.dylib"
CACHE FILEPATH "Paddle2ONNX source library." FORCE)
set(PADDLE2ONNX_LIB set(PADDLE2ONNX_LIB
"${PADDLE2ONNX_INSTALL_DIR}/${LIBDIR}/paddle2onnx.lib" "${PADDLE2ONNX_INSTALL_DIR}/lib/paddle2onnx.dll"
CACHE FILEPATH "paddle2onnx static library." FORCE) CACHE FILEPATH "paddle2onnx library." FORCE)
set(PADDLE2ONNX_SHARED_LIB set(PADDLE2ONNX_COMPILE_LIB
"${PADDLE2ONNX_INSTALL_DIR}/${LIBDIR}/paddle2onnx.dll" "${PADDLE2ONNX_INSTALL_DIR}/lib/paddle2onnx.lib"
CACHE FILEPATH "paddle2onnx shared library." FORCE) CACHE FILEPATH "paddle2onnx compile library." FORCE)
elseif(APPLE) elseif(APPLE)
set(PADDLE2ONNX_SOURCE_LIB
"${PADDLE2ONNX_SOURCE_DIR}/lib/libpaddle2onnx.dylib"
CACHE FILEPATH "Paddle2ONNX source library." FORCE)
set(PADDLE2ONNX_LIB set(PADDLE2ONNX_LIB
"${PADDLE2ONNX_INSTALL_DIR}/${LIBDIR}/libpaddle2onnx.dylib" "${PADDLE2ONNX_INSTALL_DIR}/lib/libpaddle2onnx.dylib"
CACHE FILEPATH "PADDLE2ONNX library." FORCE) CACHE FILEPATH "PADDLE2ONNX library." FORCE)
set(PADDLE2ONNX_COMPILE_LIB
"${PADDLE2ONNX_INSTALL_DIR}/lib/libpaddle2onnx.dylib"
CACHE FILEPATH "paddle2onnx compile library." FORCE)
else() else()
set(PADDLE2ONNX_SOURCE_LIB
"${PADDLE2ONNX_SOURCE_DIR}/lib/libpaddle2onnx.so"
CACHE FILEPATH "Paddle2ONNX source library." FORCE)
set(PADDLE2ONNX_LIB set(PADDLE2ONNX_LIB
"${PADDLE2ONNX_INSTALL_DIR}/${LIBDIR}/libpaddle2onnx.so" "${PADDLE2ONNX_INSTALL_DIR}/lib/libpaddle2onnx.so"
CACHE FILEPATH "PADDLE2ONNX library." FORCE) CACHE FILEPATH "PADDLE2ONNX library." FORCE)
set(PADDLE2ONNX_COMPILE_LIB
"${PADDLE2ONNX_INSTALL_DIR}/lib/libpaddle2onnx.so"
CACHE FILEPATH "paddle2onnx compile library." FORCE)
endif(WIN32) endif(WIN32)
# The protoc path is required to compile onnx. if(WIN32)
string(REPLACE "/" ";" PROTOC_BIN_PATH ${PROTOBUF_PROTOC_EXECUTABLE}) set(PADDLE2ONNX_URL
list(POP_BACK PROTOC_BIN_PATH) "https://github.com/PaddlePaddle/Paddle2ONNX/releases/download/v0.9.7/paddle2onnx-win-x64-0.9.7.zip"
list(JOIN PROTOC_BIN_PATH "/" PROTOC_BIN_PATH) )
elseif(APPLE)
set(PADDLE2ONNX_OPTIONAL_ARGS set(PADDLE2ONNX_URL
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} "https://github.com/PaddlePaddle/Paddle2ONNX/releases/download/v0.9.7/paddle2onnx-osx-x86_64-0.9.7.tgz"
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} )
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} else()
-DCMAKE_CXX_STANDARD=14 set(PADDLE2ONNX_URL
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} "https://github.com/PaddlePaddle/Paddle2ONNX/releases/download/v0.9.7/paddle2onnx-linux-x64-0.9.7.tgz"
-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} )
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}
-DONNX_CUSTOM_PROTOC_PATH=${PROTOC_BIN_PATH}
-DWITH_STATIC=OFF
-DMSVC_STATIC_CRT=${MSVC_STATIC_CRT}
-DCMAKE_INSTALL_PREFIX=${PADDLE2ONNX_INSTALL_DIR}
-DCMAKE_INSTALL_LIBDIR=${PADDLE2ONNX_INSTALL_DIR}/${LIBDIR}
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DCMAKE_BUILD_TYPE=${THIRD_PARTY_BUILD_TYPE}
${EXTERNAL_OPTIONAL_ARGS})
if(WITH_PYTHON)
set(PADDLE2ONNX_OPTIONAL_ARGS
${PADDLE2ONNX_OPTIONAL_ARGS}
-DPYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE}
-DPYTHON_INCLUDE_DIR:PATH=${PYTHON_INCLUDE_DIR}
-DPYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY})
endif() endif()
ExternalProject_Add( ExternalProject_Add(
${PADDLE2ONNX_PROJECT} ${PADDLE2ONNX_PROJECT}
${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} ${EXTERNAL_PROJECT_LOG_ARGS}
GIT_REPOSITORY ${PADDLE2ONNX_REPOSITORY} URL ${PADDLE2ONNX_URL}
GIT_TAG ${PADDLE2ONNX_TAG}
DEPENDS protobuf
PREFIX ${PADDLE2ONNX_PREFIX_DIR} PREFIX ${PADDLE2ONNX_PREFIX_DIR}
DOWNLOAD_NO_PROGRESS 1
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
UPDATE_COMMAND "" UPDATE_COMMAND ""
CMAKE_ARGS ${PADDLE2ONNX_OPTIONAL_ARGS} INSTALL_COMMAND
CMAKE_CACHE_ARGS ${CMAKE_COMMAND} -E copy_directory ${PADDLE2ONNX_SOURCE_DIR}/lib
-DCMAKE_INSTALL_PREFIX:PATH=${PADDLE2ONNX_INSTALL_DIR} ${PADDLE2ONNX_LIB_DIR} && ${CMAKE_COMMAND} -E copy_directory
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON ${PADDLE2ONNX_SOURCE_DIR}/include ${PADDLE2ONNX_INC_DIR}
-DCMAKE_BUILD_TYPE:STRING=${THIRD_PARTY_BUILD_TYPE} BUILD_BYPRODUCTS ${PADDLE2ONNX_COMPILE_LIB})
BUILD_BYPRODUCTS ${PADDLE2ONNX_LIB})
add_library(paddle2onnx STATIC IMPORTED GLOBAL) add_library(paddle2onnx STATIC IMPORTED GLOBAL)
set_property(TARGET paddle2onnx PROPERTY IMPORTED_LOCATION ${PADDLE2ONNX_LIB}) set_property(TARGET paddle2onnx PROPERTY IMPORTED_LOCATION
${PADDLE2ONNX_COMPILE_LIB})
add_dependencies(paddle2onnx ${PADDLE2ONNX_PROJECT}) add_dependencies(paddle2onnx ${PADDLE2ONNX_PROJECT})
...@@ -234,10 +234,7 @@ function(build_protobuf TARGET_NAME BUILD_FOR_HOST) ...@@ -234,10 +234,7 @@ function(build_protobuf TARGET_NAME BUILD_FOR_HOST)
"-Dprotobuf_MSVC_STATIC_RUNTIME=${MSVC_STATIC_CRT}") "-Dprotobuf_MSVC_STATIC_RUNTIME=${MSVC_STATIC_CRT}")
endif() endif()
if(WITH_ONNXRUNTIME) if(WITH_ASCEND AND NOT WITH_ASCEND_CXX11)
set(PROTOBUF_REPOSITORY ${GIT_URL}/protocolbuffers/protobuf.git)
set(PROTOBUF_TAG v3.18.0)
elseif(WITH_ASCEND AND NOT WITH_ASCEND_CXX11)
set(PROTOBUF_REPOSITORY https://gitee.com/tianjianhe/protobuf.git) set(PROTOBUF_REPOSITORY https://gitee.com/tianjianhe/protobuf.git)
set(PROTOBUF_TAG v3.8.0) set(PROTOBUF_TAG v3.8.0)
elseif(WITH_ASCEND_CL AND NOT WITH_ASCEND_CXX11) elseif(WITH_ASCEND_CL AND NOT WITH_ASCEND_CXX11)
...@@ -319,9 +316,7 @@ function(build_protobuf TARGET_NAME BUILD_FOR_HOST) ...@@ -319,9 +316,7 @@ function(build_protobuf TARGET_NAME BUILD_FOR_HOST)
endif() endif()
endfunction() endfunction()
if(WITH_ONNXRUNTIME) if(WITH_ASCEND OR WITH_ASCEND_CL)
set(PROTOBUF_VERSION 3.18.0)
elseif(WITH_ASCEND OR WITH_ASCEND_CL)
set(PROTOBUF_VERSION 3.8.0) set(PROTOBUF_VERSION 3.8.0)
elseif(WITH_IPU) elseif(WITH_IPU)
set(PROTOBUF_VERSION 3.6.1) set(PROTOBUF_VERSION 3.6.1)
......
...@@ -148,18 +148,10 @@ function(copy_part_of_thrid_party TARGET DST) ...@@ -148,18 +148,10 @@ function(copy_part_of_thrid_party TARGET DST)
DSTS ${dst_dir} ${dst_dir}) DSTS ${dst_dir} ${dst_dir})
set(dst_dir "${DST}/third_party/install/paddle2onnx") set(dst_dir "${DST}/third_party/install/paddle2onnx")
if(WIN32)
copy( copy(
${TARGET} ${TARGET}
SRCS ${PADDLE2ONNX_INC_DIR}/paddle2onnx ${PADDLE2ONNX_SHARED_LIB} SRCS ${PADDLE2ONNX_INC_DIR}/paddle2onnx ${PADDLE2ONNX_LIB_DIR}
${PADDLE2ONNX_LIB} DSTS ${dst_dir}/include ${dst_dir})
DSTS ${dst_dir}/include ${dst_dir}/lib ${dst_dir}/lib)
else()
copy(
${TARGET}
SRCS ${PADDLE2ONNX_INC_DIR}/paddle2onnx ${PADDLE2ONNX_LIB}
DSTS ${dst_dir}/include ${dst_dir}/lib)
endif()
endif() endif()
set(dst_dir "${DST}/third_party/install/gflags") set(dst_dir "${DST}/third_party/install/gflags")
......
...@@ -103,7 +103,7 @@ if(WIN32) ...@@ -103,7 +103,7 @@ if(WIN32)
list(APPEND EAGER_CODEGEN_DEPS ${eager_generator_path}/onnxruntime.dll) list(APPEND EAGER_CODEGEN_DEPS ${eager_generator_path}/onnxruntime.dll)
add_custom_command( add_custom_command(
OUTPUT ${eager_generator_path}/paddle2onnx.dll OUTPUT ${eager_generator_path}/paddle2onnx.dll
COMMAND ${CMAKE_COMMAND} -E copy ${PADDLE2ONNX_SHARED_LIB} COMMAND ${CMAKE_COMMAND} -E copy ${PADDLE2ONNX_LIB}
${eager_generator_path} ${eager_generator_path}
DEPENDS paddle2onnx) DEPENDS paddle2onnx)
list(APPEND EAGER_CODEGEN_DEPS ${eager_generator_path}/paddle2onnx.dll) list(APPEND EAGER_CODEGEN_DEPS ${eager_generator_path}/paddle2onnx.dll)
......
...@@ -74,8 +74,14 @@ bool CheckConvertToONNX(const AnalysisConfig &config) { ...@@ -74,8 +74,14 @@ bool CheckConvertToONNX(const AnalysisConfig &config) {
config.model_dir(), config.prog_file(), config.params_file()); config.model_dir(), config.prog_file(), config.params_file());
return false; return false;
} }
return paddle2onnx::IsExportable(config.prog_file(), config.params_file(), if (config.model_from_memory()) {
config.model_from_memory()); return paddle2onnx::IsExportable(
config.prog_file().data(), config.prog_file().size(),
config.params_file().data(), config.params_file().size());
} else {
return paddle2onnx::IsExportable(config.prog_file().c_str(),
config.params_file().c_str());
}
} }
bool ONNXRuntimePredictor::Init() { bool ONNXRuntimePredictor::Init() {
...@@ -89,9 +95,16 @@ bool ONNXRuntimePredictor::Init() { ...@@ -89,9 +95,16 @@ bool ONNXRuntimePredictor::Init() {
place_ = paddle::platform::CPUPlace(); place_ = paddle::platform::CPUPlace();
} }
std::string onnx_proto; char *onnx_proto = nullptr;
paddle2onnx::Export(config_.prog_file(), config_.params_file(), &onnx_proto, int out_size;
config_.model_from_memory()); if (config_.model_from_memory()) {
paddle2onnx::Export(config_.prog_file().data(), config_.prog_file().size(),
config_.params_file().data(),
config_.params_file().size(), &onnx_proto, &out_size);
} else {
paddle2onnx::Export(config_.prog_file().c_str(),
config_.params_file().c_str(), &onnx_proto, &out_size);
}
Ort::SessionOptions session_options; Ort::SessionOptions session_options;
if (config_.ort_optimization_enabled()) { if (config_.ort_optimization_enabled()) {
...@@ -118,7 +131,7 @@ bool ONNXRuntimePredictor::Init() { ...@@ -118,7 +131,7 @@ bool ONNXRuntimePredictor::Init() {
"will be " "will be "
"generated."; "generated.";
} }
session_ = {env_, onnx_proto.data(), onnx_proto.size(), session_options}; session_ = {env_, onnx_proto, static_cast<size_t>(out_size), session_options};
binding_ = std::make_shared<Ort::IoBinding>(session_); binding_ = std::make_shared<Ort::IoBinding>(session_);
Ort::MemoryInfo memory_info(device_name, OrtDeviceAllocator, Ort::MemoryInfo memory_info(device_name, OrtDeviceAllocator,
...@@ -153,6 +166,8 @@ bool ONNXRuntimePredictor::Init() { ...@@ -153,6 +166,8 @@ bool ONNXRuntimePredictor::Init() {
allocator.Free(output_name); allocator.Free(output_name);
} }
delete onnx_proto;
onnx_proto = nullptr;
return true; return true;
} }
......
...@@ -335,7 +335,7 @@ if(WITH_PYTHON) ...@@ -335,7 +335,7 @@ if(WITH_PYTHON)
if(WITH_ONNXRUNTIME) if(WITH_ONNXRUNTIME)
add_custom_command( add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/paddle2onnx.dll OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/paddle2onnx.dll
COMMAND ${CMAKE_COMMAND} -E copy ${PADDLE2ONNX_SHARED_LIB} COMMAND ${CMAKE_COMMAND} -E copy ${PADDLE2ONNX_LIB}
${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS paddle2onnx) DEPENDS paddle2onnx)
list(APPEND OP_IMPL_DEPS ${CMAKE_CURRENT_BINARY_DIR}/paddle2onnx.dll) list(APPEND OP_IMPL_DEPS ${CMAKE_CURRENT_BINARY_DIR}/paddle2onnx.dll)
......
...@@ -531,12 +531,10 @@ if '${WITH_MKLDNN}' == 'ON': ...@@ -531,12 +531,10 @@ if '${WITH_MKLDNN}' == 'ON':
if '${WITH_ONNXRUNTIME}' == 'ON': if '${WITH_ONNXRUNTIME}' == 'ON':
shutil.copy('${ONNXRUNTIME_SHARED_LIB}', libs_path) shutil.copy('${ONNXRUNTIME_SHARED_LIB}', libs_path)
shutil.copy('${PADDLE2ONNX_LIB}', libs_path)
if os.name == 'nt': if os.name == 'nt':
shutil.copy('${PADDLE2ONNX_SHARED_LIB}', libs_path)
package_data['paddle.libs']+=['paddle2onnx.dll', 'onnxruntime.dll'] package_data['paddle.libs']+=['paddle2onnx.dll', 'onnxruntime.dll']
else: elif sys.platform == 'darwin':
shutil.copy('${PADDLE2ONNX_LIB}', libs_path)
if sys.platform == 'darwin':
package_data['paddle.libs']+=['libpaddle2onnx.dylib', 'libonnxruntime.1.10.0.dylib'] package_data['paddle.libs']+=['libpaddle2onnx.dylib', 'libonnxruntime.1.10.0.dylib']
else: else:
package_data['paddle.libs']+=['libpaddle2onnx.so', 'libonnxruntime.so.1.10.0'] package_data['paddle.libs']+=['libpaddle2onnx.so', 'libonnxruntime.so.1.10.0']
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册