mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-30 20:18:08 +00:00
Support for building ngraph EP on Windows (#978)
* Enable windows support for ngraph ep * Slight rewording of building for windows * Streamline build of ngraph ep, disable C# bindings build
This commit is contained in:
parent
7c514d6fef
commit
17690355ed
14 changed files with 351 additions and 53 deletions
2
BUILD.md
2
BUILD.md
|
|
@ -115,7 +115,7 @@ To build ONNX Runtime with MKL-DNN support, build it with `./build.sh --use_mkld
|
|||
To build ONNX Runtime using MKL-DNN built with dependency on MKL small libraries, build it with `./build.sh --use_mkldnn --use_mklml`
|
||||
|
||||
### nGraph
|
||||
ONNX runtime with nGraph as an execution provider (released as preview) can be built on Linux as follows : `./build.sh --use_ngraph`
|
||||
ONNX runtime with nGraph as an execution provider (released as preview) can be built on Linux as follows : `./build.sh --use_ngraph`. Similarly, on Windows use `.\build.bat --use_ngraph`.
|
||||
|
||||
### TensorRT
|
||||
ONNX Runtime supports the TensorRT execution provider (released as preview). You will need to download and install [CUDA](https://developer.nvidia.com/cuda-toolkit), [CUDNN](https://developer.nvidia.com/cudnn) and [TensorRT](https://developer.nvidia.com/nvidia-tensorrt-download).
|
||||
|
|
|
|||
|
|
@ -478,9 +478,6 @@ if (onnxruntime_USE_MKLDNN)
|
|||
endif()
|
||||
|
||||
if (onnxruntime_USE_NGRAPH)
|
||||
if (Win32)
|
||||
message(FATAL_ERROR "nGraph is not currently supported on Windows.")
|
||||
endif()
|
||||
#if (onnxruntime_USE_OPENMP)
|
||||
# message(FATAL_ERROR "Please set onnxruntime_USE_OPENMP=OFF for nGraph execution provider.")
|
||||
#endif()
|
||||
|
|
|
|||
122
cmake/external/ngraph.cmake
vendored
122
cmake/external/ngraph.cmake
vendored
|
|
@ -14,45 +14,95 @@ set(ngraph_URL "https://github.com/NervanaSystems/ngraph.git")
|
|||
set(ngraph_TAG "v0.18.1")
|
||||
|
||||
# Libraries for python package.
|
||||
set(NGRAPH_SHARED_LIB libngraph.so)
|
||||
set(NGRAPH_CODEGEN_SHARED_LIB libcodegen.so)
|
||||
set(NGRAPH_CPU_BACKEND_SHARED_LIB libcpu_backend.so)
|
||||
set(NGRAPH_IOMP5MD_SHARED_LIB libiomp5.so)
|
||||
set(NGRAPH_MKLDNN_SHARED_LIB libmkldnn.so)
|
||||
set(NGRAPH_MKLML_SHARED_LIB libmklml_intel.so)
|
||||
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
||||
set(NGRAPH_TBB_SHARED_LIB libtbb_debug.so)
|
||||
set(NGRAPH_TBB_SHARED_LIB_2 libtbb_debug.so.2)
|
||||
if (WIN32)
|
||||
set(NGRAPH_SHARED_LIB ngraph.dll)
|
||||
set(NGRAPH_CPU_BACKEND_SHARED_LIB cpu_backend.dll)
|
||||
set(NGRAPH_IOMP5MD_SHARED_LIB libiomp5md.dll)
|
||||
set(NGRAPH_MKLDNN_SHARED_LIB mkldnn.dll)
|
||||
set(NGRAPH_MKLML_SHARED_LIB mklml.dll)
|
||||
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
||||
set(NGRAPH_TBB_SHARED_LIB tbb_debug.dll)
|
||||
else()
|
||||
set(NGRAPH_TBB_SHARED_LIB tbb.dll)
|
||||
endif()
|
||||
else()
|
||||
set(NGRAPH_TBB_SHARED_LIB libtbb.so)
|
||||
set(NGRAPH_TBB_SHARED_LIB_2 libtbb.so.2)
|
||||
set(NGRAPH_SHARED_LIB libngraph.so)
|
||||
set(NGRAPH_CODEGEN_SHARED_LIB libcodegen.so)
|
||||
set(NGRAPH_CPU_BACKEND_SHARED_LIB libcpu_backend.so)
|
||||
set(NGRAPH_IOMP5MD_SHARED_LIB libiomp5.so)
|
||||
set(NGRAPH_MKLDNN_SHARED_LIB libmkldnn.so)
|
||||
set(NGRAPH_MKLML_SHARED_LIB libmklml_intel.so)
|
||||
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
||||
set(NGRAPH_TBB_SHARED_LIB libtbb_debug.so)
|
||||
set(NGRAPH_TBB_SHARED_LIB_2 libtbb_debug.so.2)
|
||||
else()
|
||||
set(NGRAPH_TBB_SHARED_LIB libtbb.so)
|
||||
set(NGRAPH_TBB_SHARED_LIB_2 libtbb.so.2)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(project_ngraph
|
||||
PREFIX ngraph
|
||||
GIT_REPOSITORY ${ngraph_URL}
|
||||
GIT_TAG ${ngraph_TAG}
|
||||
GIT_SHALLOW TRUE
|
||||
# Here we use onnx and protobuf built by onnxruntime to avoid linking with incompatible libraries. This might change in future.
|
||||
PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/patches/ngraph/ngraph_onnx.cmake ${ngraph_SRC}/cmake/external_onnx.cmake
|
||||
# TODO: Use cmake.file+copy as above.
|
||||
COMMAND patch -p1 < ${PROJECT_SOURCE_DIR}/patches/ngraph/ngraph_protobuf.patch
|
||||
CMAKE_ARGS
|
||||
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||
-DNGRAPH_USE_PREBUILT_LLVM=TRUE
|
||||
-DNGRAPH_USE_SYSTEM_PROTOBUF=FALSE
|
||||
-DNGRAPH_ONNX_IMPORT_ENABLE=TRUE
|
||||
-DNGRAPH_INTERPRETER_ENABLE=FALSE
|
||||
-DNGRAPH_ONNXIFI_ENABLE=FALSE
|
||||
-DNGRAPH_UNIT_TEST_ENABLE=FALSE
|
||||
-DNGRAPH_TOOLS_ENABLE=FALSE
|
||||
-DCMAKE_INSTALL_PREFIX=${ngraph_INSTALL_DIR}
|
||||
-Dprebuilt_ONNX_BINARY_DIR=${prebuilt_ONNX_BINARY_DIR}
|
||||
-Dprebuilt_ONNX_SOURCE_DIR=${prebuilt_ONNX_SOURCE_DIR}
|
||||
DEPENDS onnx
|
||||
)
|
||||
# discard prior changes due to unblock incremental builds.
|
||||
set(NGRAPH_PATCH_DISCARD_COMMAND cd ${ngraph_SRC} && git checkout -- .)
|
||||
|
||||
add_library(ngraph SHARED IMPORTED)
|
||||
set_property(TARGET ngraph PROPERTY IMPORTED_LOCATION ${ngraph_LIBRARIES}/${NGRAPH_SHARED_LIB})
|
||||
if (MSVC)
|
||||
set(prebuilt_ONNX_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/onnx/${CMAKE_BUILD_TYPE}")
|
||||
set(prebuilt_ONNX_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
|
||||
|
||||
# For the moment, Windows does not support codegen, it works on DEX-only mode
|
||||
ExternalProject_Add(project_ngraph
|
||||
PREFIX ngraph
|
||||
GIT_REPOSITORY ${ngraph_URL}
|
||||
GIT_TAG ${ngraph_TAG}
|
||||
PATCH_COMMAND ${NGRAPH_PATCH_DISCARD_COMMAND}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/patches/ngraph/ngraph_onnx.cmake ${ngraph_SRC}/cmake/external_onnx.cmake
|
||||
COMMAND git apply --ignore-space-change --ignore-whitespace ${PROJECT_SOURCE_DIR}/patches/ngraph/ngraph_protobuf.patch
|
||||
COMMAND git apply --ignore-space-change --ignore-whitespace ${PROJECT_SOURCE_DIR}/patches/ngraph/ngraph_fix_install_error.patch
|
||||
COMMAND git apply --ignore-space-change --ignore-whitespace ${PROJECT_SOURCE_DIR}/patches/ngraph/ngraph_fix_library_path.patch
|
||||
CMAKE_ARGS
|
||||
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||
-DNGRAPH_DEX_ONLY=ON
|
||||
-DNGRAPH_USE_SYSTEM_PROTOBUF=FALSE
|
||||
-DNGRAPH_ONNX_IMPORT_ENABLE=TRUE
|
||||
-DNGRAPH_INTERPRETER_ENABLE=FALSE
|
||||
-DNGRAPH_ONNXIFI_ENABLE=FALSE
|
||||
-DNGRAPH_UNIT_TEST_ENABLE=FALSE
|
||||
-DNGRAPH_TOOLS_ENABLE=FALSE
|
||||
-DCMAKE_INSTALL_PREFIX=${ngraph_INSTALL_DIR}
|
||||
-Dprebuilt_ONNX_BINARY_DIR=${prebuilt_ONNX_BINARY_DIR}
|
||||
-Dprebuilt_ONNX_SOURCE_DIR=${prebuilt_ONNX_SOURCE_DIR}
|
||||
DEPENDS onnx
|
||||
)
|
||||
add_library(ngraph STATIC IMPORTED)
|
||||
set_property(TARGET ngraph PROPERTY IMPORTED_LOCATION ${ngraph_LIBRARIES}/ngraph.lib)
|
||||
else()
|
||||
ExternalProject_Add(project_ngraph
|
||||
PREFIX ngraph
|
||||
GIT_REPOSITORY ${ngraph_URL}
|
||||
GIT_TAG ${ngraph_TAG}
|
||||
GIT_SHALLOW TRUE
|
||||
PATCH_COMMAND ${NGRAPH_PATCH_DISCARD_COMMAND}
|
||||
# Here we use onnx and protobuf built by onnxruntime to avoid linking with incompatible libraries. This might change in future.
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/patches/ngraph/ngraph_onnx.cmake ${ngraph_SRC}/cmake/external_onnx.cmake
|
||||
# TODO: Use cmake.file+copy as above.
|
||||
COMMAND git apply --ignore-space-change --ignore-whitespace ${PROJECT_SOURCE_DIR}/patches/ngraph/ngraph_protobuf.patch
|
||||
CMAKE_ARGS
|
||||
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||
-DNGRAPH_USE_PREBUILT_LLVM=TRUE
|
||||
-DNGRAPH_USE_SYSTEM_PROTOBUF=FALSE
|
||||
-DNGRAPH_ONNX_IMPORT_ENABLE=TRUE
|
||||
-DNGRAPH_INTERPRETER_ENABLE=FALSE
|
||||
-DNGRAPH_ONNXIFI_ENABLE=FALSE
|
||||
-DNGRAPH_UNIT_TEST_ENABLE=FALSE
|
||||
-DNGRAPH_TOOLS_ENABLE=FALSE
|
||||
-DCMAKE_INSTALL_PREFIX=${ngraph_INSTALL_DIR}
|
||||
-Dprebuilt_ONNX_BINARY_DIR=${prebuilt_ONNX_BINARY_DIR}
|
||||
-Dprebuilt_ONNX_SOURCE_DIR=${prebuilt_ONNX_SOURCE_DIR}
|
||||
DEPENDS onnx
|
||||
)
|
||||
|
||||
add_library(ngraph SHARED IMPORTED)
|
||||
set_property(TARGET ngraph PROPERTY IMPORTED_LOCATION ${ngraph_LIBRARIES}/${NGRAPH_SHARED_LIB})
|
||||
endif()
|
||||
add_dependencies(ngraph project_ngraph)
|
||||
include_directories(${ngraph_INCLUDE_DIRS})
|
||||
|
|
|
|||
|
|
@ -195,9 +195,10 @@ if (onnxruntime_USE_NGRAPH)
|
|||
target_include_directories(onnxruntime_providers_ngraph PRIVATE ${ONNXRUNTIME_ROOT} ${ngraph_INCLUDE_DIRS})
|
||||
set_target_properties(onnxruntime_providers_ngraph PROPERTIES LINKER_LANGUAGE CXX)
|
||||
|
||||
target_compile_options(onnxruntime_providers_ngraph PRIVATE "SHELL:-Wformat" "SHELL:-Wformat-security" "SHELL:-fstack-protector-strong" "SHELL:-D_FORTIFY_SOURCE=2")
|
||||
target_link_options(onnxruntime_providers_ngraph PRIVATE "LINKER:-z, noexecstack " "LINKER:-z relro" "LINKER:-z now" "LINKER:-pie")
|
||||
|
||||
if (NOT MSVC)
|
||||
target_compile_options(onnxruntime_providers_ngraph PRIVATE "SHELL:-Wformat" "SHELL:-Wformat-security" "SHELL:-fstack-protector-strong" "SHELL:-D_FORTIFY_SOURCE=2")
|
||||
target_link_options(onnxruntime_providers_ngraph PRIVATE "LINKER:-z, noexecstack " "LINKER:-z relro" "LINKER:-z now" "LINKER:-pie")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (onnxruntime_ENABLE_MICROSOFT_INTERNAL)
|
||||
|
|
|
|||
|
|
@ -370,7 +370,15 @@ if(WIN32)
|
|||
${MKLML_LIB_DIR}/${MKLML_SHARED_LIB} ${MKLML_LIB_DIR}/${IOMP5MD_SHARED_LIB}
|
||||
$<TARGET_FILE_DIR:${test_data_target}>
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
if (onnxruntime_USE_NGRAPH)
|
||||
add_custom_command(
|
||||
TARGET ${test_data_target} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||||
${ngraph_LIBRARIES}/
|
||||
$<TARGET_FILE_DIR:${test_data_target}>
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_library(onnx_test_data_proto ${TEST_SRC_DIR}/proto/tml.proto)
|
||||
|
|
|
|||
127
cmake/patches/ngraph/ngraph_fix_install_error.patch
Normal file
127
cmake/patches/ngraph/ngraph_fix_install_error.patch
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
From 280fbc003ea2794adb24d6a81d42db838a793dd9 Mon Sep 17 00:00:00 2001
|
||||
From: Sang Ik Lee <sang.ik.lee@intel.com>
|
||||
Date: Mon, 15 Apr 2019 16:11:27 -0700
|
||||
Subject: [PATCH] CMAKE_CFG_INTDIR does not work at install time. Use
|
||||
CMAKE_INSTALL_CONFIG_NAME on Windows.
|
||||
|
||||
---
|
||||
CMakeLists.txt | 7 ++++++-
|
||||
cmake/external_mkldnn.cmake | 22 +++++++++++-----------
|
||||
cmake/external_tbb.cmake | 4 ++--
|
||||
cmake/external_tbb_prebuilt.cmake | 6 +++---
|
||||
4 files changed, 22 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 2a21ed3a3..a695e217f 100755
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -390,12 +390,17 @@ endif()
|
||||
|
||||
set(NGRAPH_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/ngraph)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${NGRAPH_BUILD_DIR})
|
||||
-set(NGRAPH_LIBRARY_OUTPUT_DIRECTORY ${NGRAPH_BUILD_DIR}/${CMAKE_CFG_INTDIR})
|
||||
if(WIN32)
|
||||
+ set(NGRAPH_LIBRARY_OUTPUT_DIRECTORY ${NGRAPH_BUILD_DIR}/${CMAKE_CFG_INTDIR})
|
||||
+ set(NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY ${NGRAPH_BUILD_DIR}/\${CMAKE_INSTALL_CONFIG_NAME})
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${NGRAPH_BUILD_DIR})
|
||||
set(NGRAPH_ARCHIVE_OUTPUT_DIRECTORY ${NGRAPH_BUILD_DIR}/${CMAKE_CFG_INTDIR})
|
||||
+ set(NGRAPH_ARCHIVE_INSTALLSRC_DIRECTORY ${NGRAPH_BUILD_DIR}/\${CMAKE_INSTALL_CONFIG_NAME})
|
||||
set(CMAKE_PDB_OUTPUT_DIRECTORY ${NGRAPH_BUILD_DIR})
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${NGRAPH_BUILD_DIR})
|
||||
+else()
|
||||
+ set(NGRAPH_LIBRARY_OUTPUT_DIRECTORY ${NGRAPH_BUILD_DIR})
|
||||
+ set(NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY ${NGRAPH_BUILD_DIR})
|
||||
endif()
|
||||
|
||||
set(EXTERNAL_INSTALL_DIR ${CMAKE_BINARY_DIR}/external)
|
||||
diff --git a/cmake/external_mkldnn.cmake b/cmake/external_mkldnn.cmake
|
||||
index 25445bf0b..7874aca76 100644
|
||||
--- a/cmake/external_mkldnn.cmake
|
||||
+++ b/cmake/external_mkldnn.cmake
|
||||
@@ -312,12 +312,12 @@ endif()
|
||||
if(WIN32)
|
||||
install(
|
||||
FILES
|
||||
- ${NGRAPH_LIBRARY_OUTPUT_DIRECTORY}/${MKLML_LIB}
|
||||
- ${NGRAPH_ARCHIVE_OUTPUT_DIRECTORY}/${MKLML_IMPLIB}
|
||||
- ${NGRAPH_LIBRARY_OUTPUT_DIRECTORY}/${OMP_LIB}
|
||||
- ${NGRAPH_ARCHIVE_OUTPUT_DIRECTORY}/${OMP_IMPLIB}
|
||||
- ${NGRAPH_LIBRARY_OUTPUT_DIRECTORY}/${MKLDNN_LIB}
|
||||
- ${NGRAPH_ARCHIVE_OUTPUT_DIRECTORY}/${MKLDNN_IMPLIB}
|
||||
+ ${NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY}/${MKLML_LIB}
|
||||
+ ${NGRAPH_ARCHIVE_INSTALLSRC_DIRECTORY}/${MKLML_IMPLIB}
|
||||
+ ${NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY}/${OMP_LIB}
|
||||
+ ${NGRAPH_ARCHIVE_INSTALLSRC_DIRECTORY}/${OMP_IMPLIB}
|
||||
+ ${NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY}/${MKLDNN_LIB}
|
||||
+ ${NGRAPH_ARCHIVE_INSTALLSRC_DIRECTORY}/${MKLDNN_IMPLIB}
|
||||
DESTINATION
|
||||
${NGRAPH_INSTALL_LIB}
|
||||
OPTIONAL
|
||||
@@ -325,9 +325,9 @@ if(WIN32)
|
||||
else()
|
||||
install(
|
||||
FILES
|
||||
- ${NGRAPH_LIBRARY_OUTPUT_DIRECTORY}/${MKLML_LIB}
|
||||
- ${NGRAPH_LIBRARY_OUTPUT_DIRECTORY}/${OMP_LIB}
|
||||
- ${NGRAPH_LIBRARY_OUTPUT_DIRECTORY}/${MKLDNN_LIB}
|
||||
+ ${NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY}/${MKLML_LIB}
|
||||
+ ${NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY}/${OMP_LIB}
|
||||
+ ${NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY}/${MKLDNN_LIB}
|
||||
DESTINATION
|
||||
${NGRAPH_INSTALL_LIB}
|
||||
OPTIONAL
|
||||
@@ -335,8 +335,8 @@ else()
|
||||
if(NGRAPH_LIB_VERSIONING_ENABLE)
|
||||
install(
|
||||
FILES
|
||||
- ${NGRAPH_LIBRARY_OUTPUT_DIRECTORY}/${MKLDNN_SHORT_LIB}
|
||||
- ${NGRAPH_LIBRARY_OUTPUT_DIRECTORY}/${MKLDNN_FULL_LIB}
|
||||
+ ${NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY}/${MKLDNN_SHORT_LIB}
|
||||
+ ${NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY}/${MKLDNN_FULL_LIB}
|
||||
DESTINATION
|
||||
${NGRAPH_INSTALL_LIB}
|
||||
OPTIONAL
|
||||
diff --git a/cmake/external_tbb.cmake b/cmake/external_tbb.cmake
|
||||
index 761c5b3bd..6960ea929 100644
|
||||
--- a/cmake/external_tbb.cmake
|
||||
+++ b/cmake/external_tbb.cmake
|
||||
@@ -63,10 +63,10 @@ if(NGRAPH_TBB_ENABLE)
|
||||
${TBB_BUILD_DIR}/${TBB_LIB}.${TBB_SOVER}
|
||||
DESTINATION ${NGRAPH_LIBRARY_OUTPUT_DIRECTORY})
|
||||
endif()
|
||||
- install(FILES ${NGRAPH_LIBRARY_OUTPUT_DIRECTORY}/${TBB_LIB}
|
||||
+ install(FILES ${NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY}/${TBB_LIB}
|
||||
DESTINATION ${NGRAPH_INSTALL_LIB})
|
||||
if(LINUX)
|
||||
- install(FILES ${NGRAPH_LIBRARY_OUTPUT_DIRECTORY}/${TBB_LIB}.${TBB_SOVER}
|
||||
+ install(FILES ${NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY}/${TBB_LIB}.${TBB_SOVER}
|
||||
DESTINATION ${NGRAPH_INSTALL_LIB})
|
||||
endif()
|
||||
add_library(libtbb INTERFACE)
|
||||
diff --git a/cmake/external_tbb_prebuilt.cmake b/cmake/external_tbb_prebuilt.cmake
|
||||
index 3e1d0688f..a1cf1922a 100644
|
||||
--- a/cmake/external_tbb_prebuilt.cmake
|
||||
+++ b/cmake/external_tbb_prebuilt.cmake
|
||||
@@ -69,8 +69,8 @@ if (WIN32)
|
||||
DEPENDEES download
|
||||
)
|
||||
|
||||
- install(FILES ${NGRAPH_ARCHIVE_OUTPUT_DIRECTORY}/${TBB_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}
|
||||
- ${NGRAPH_LIBRARY_OUTPUT_DIRECTORY}/${TBB_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
|
||||
+ install(FILES ${NGRAPH_ARCHIVE_INSTALLSRC_DIRECTORY}/${TBB_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}
|
||||
+ ${NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY}/${TBB_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
|
||||
DESTINATION ${NGRAPH_INSTALL_LIB})
|
||||
elseif(APPLE)
|
||||
set(TBB_LINK_LIBS
|
||||
@@ -82,7 +82,7 @@ elseif(APPLE)
|
||||
COMMENT "Move tbb libraries to ngraph build directory"
|
||||
)
|
||||
|
||||
- install(FILES ${NGRAPH_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}${TBB_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
|
||||
+ install(FILES ${NGRAPH_LIBRARY_INSTALLSRC_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}${TBB_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
|
||||
DESTINATION ${NGRAPH_INSTALL_LIB})
|
||||
endif()
|
||||
|
||||
--
|
||||
2.13.0.windows.1
|
||||
|
||||
33
cmake/patches/ngraph/ngraph_fix_library_path.patch
Normal file
33
cmake/patches/ngraph/ngraph_fix_library_path.patch
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
From fcd51f874f4a96fb4ca77d762ed39ea1bf3f2c0d Mon Sep 17 00:00:00 2001
|
||||
From: Junfeng Dong <junfeng.dong@intel.com>
|
||||
Date: Wed, 17 Apr 2019 13:42:42 -0700
|
||||
Subject: [PATCH] Fix dll library load path on Windows.
|
||||
|
||||
---
|
||||
src/ngraph/runtime/backend_manager.cpp | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/ngraph/runtime/backend_manager.cpp b/src/ngraph/runtime/backend_manager.cpp
|
||||
index eaa8fc26a..4d35c63ec 100644
|
||||
--- a/src/ngraph/runtime/backend_manager.cpp
|
||||
+++ b/src/ngraph/runtime/backend_manager.cpp
|
||||
@@ -123,7 +123,7 @@ unique_ptr<runtime::Backend> runtime::BackendManager::create_backend(const std::
|
||||
static string find_my_file()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
- HMODULE hModule = GetModuleHandleW(NULL);
|
||||
+ HMODULE hModule = GetModuleHandleW(L"ngraph.dll");
|
||||
WCHAR wpath[MAX_PATH];
|
||||
GetModuleFileNameW(hModule, wpath, MAX_PATH);
|
||||
wstring ws(wpath);
|
||||
@@ -157,6 +157,7 @@ DL_HANDLE runtime::BackendManager::open_shared_library(string type)
|
||||
string my_directory = file_util::get_directory(find_my_file());
|
||||
string library_path = file_util::path_join(my_directory, library_name);
|
||||
#ifdef _WIN32
|
||||
+ SetDllDirectory((LPCSTR)my_directory.c_str());
|
||||
handle = LoadLibrary(library_path.c_str());
|
||||
#else
|
||||
handle = dlopen(library_path.c_str(), RTLD_NOW | RTLD_GLOBAL);
|
||||
--
|
||||
2.13.0.windows.1
|
||||
|
||||
|
|
@ -3,8 +3,13 @@ set(ONNX_INCLUDE_DIR ${BINARY_DIR})
|
|||
set(ONNX_SOURCE_INCLUDE_DIR "${prebuilt_ONNX_SOURCE_DIR}/onnx")
|
||||
include_directories("${ONNX_SOURCE_INCLUDE_DIR}")
|
||||
set(ONNX_PROTO_INCLUDE_DIR ${ONNX_INCLUDE_DIR})
|
||||
set(ONNX_LIBRARY ${BINARY_DIR}/libonnx.a)
|
||||
set(ONNX_PROTO_LIBRARY ${BINARY_DIR}/libonnx_proto.a)
|
||||
if (WIN32)
|
||||
set(ONNX_LIBRARY ${BINARY_DIR}/onnx.lib)
|
||||
set(ONNX_PROTO_LIBRARY ${BINARY_DIR}/onnx_proto.lib)
|
||||
else()
|
||||
set(ONNX_LIBRARY ${BINARY_DIR}/libonnx.a)
|
||||
set(ONNX_PROTO_LIBRARY ${BINARY_DIR}/libonnx_proto.a)
|
||||
endif()
|
||||
set(ONNX_LIBRARIES ${ONNX_LIBRARY} ${ONNX_PROTO_LIBRARY})
|
||||
|
||||
if (NOT TARGET onnx::libonnx)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,14 @@
|
|||
diff --git a/cmake/external_protobuf.cmake b/cmake/external_protobuf.cmake
|
||||
index 47977b3..1a66e1c 100644
|
||||
index 32217f5d..f6de5e76 100644
|
||||
--- a/cmake/external_protobuf.cmake
|
||||
+++ b/cmake/external_protobuf.cmake
|
||||
@@ -23,7 +23,7 @@ include(ExternalProject)
|
||||
|
||||
|
||||
# This version of PROTOBUF is required by Microsoft ONNX Runtime.
|
||||
set(NGRAPH_PROTOBUF_GIT_REPO_URL "https://github.com/protocolbuffers/protobuf")
|
||||
-set(NGRAPH_PROTOBUF_GIT_TAG "v3.5.2")
|
||||
+set(NGRAPH_PROTOBUF_GIT_TAG "v3.6.1")
|
||||
|
||||
if (WIN32)
|
||||
ExternalProject_Add(
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_protobuf
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ Developers can now tap into the power of nGraph through ONNX Runtime to accelera
|
|||
While the nGraph Compiler stack supports various operating systems and backends ([full list available here](https://www.ngraph.ai/ecosystem)), the nGraph execution provider for ONNX Runtime is validated for the following:
|
||||
### Supported OS
|
||||
* Ubuntu 16.04
|
||||
* Windows 10 (`DEX_ONLY` mode is only one supported for the moment, codegen mode is work-in-progress.)
|
||||
* More to be added soon!
|
||||
|
||||
### Supported backend
|
||||
|
|
|
|||
|
|
@ -5,10 +5,18 @@
|
|||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(disable:4244 4245)
|
||||
#elif __GNUC__
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||
#endif
|
||||
#include <ngraph/frontend/onnx_import/onnx.hpp>
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(default:4244 4245)
|
||||
#elif __GNUC__
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
#include "ngraph_custom_op.h"
|
||||
#include "core/common/logging/logging.h"
|
||||
|
|
@ -45,6 +53,16 @@ static DType GetDataType(const ngraph::element::Type& ng_type) {
|
|||
}
|
||||
}
|
||||
|
||||
static bool check_ngraph_dump_ops() {
|
||||
#ifdef _WIN32
|
||||
size_t env_name_len = 0;
|
||||
char* env_name = nullptr;
|
||||
return (_dupenv_s(&env_name, &env_name_len, "ONNXRUNTIME_NGRAPH_DUMP_OPS") == 0);
|
||||
#else
|
||||
return (std::getenv("ONNXRUNTIME_NGRAPH_DUMP_OPS") != nullptr);
|
||||
#endif
|
||||
}
|
||||
|
||||
NGRAPHCustomOp::NGRAPHCustomOp(const ComputeContext* context, const ONNX_NAMESPACE::ModelProto& model_proto,
|
||||
const std::shared_ptr<ngraph::runtime::Backend>& ng_backend)
|
||||
: ng_backend_{ng_backend},
|
||||
|
|
@ -54,7 +72,7 @@ NGRAPHCustomOp::NGRAPHCustomOp(const ComputeContext* context, const ONNX_NAMESPA
|
|||
allocator_ = context->allocator_handle;
|
||||
name_ = context->node_name;
|
||||
|
||||
if (std::getenv("ONNXRUNTIME_NGRAPH_DUMP_OPS") != nullptr) {
|
||||
if (check_ngraph_dump_ops()) {
|
||||
std::fstream dump(name_ + ".onnx", std::ios::out | std::ios::trunc | std::ios::binary);
|
||||
model_proto_.SerializeToOstream(&dump);
|
||||
}
|
||||
|
|
@ -92,7 +110,7 @@ void NGRAPHCustomOp::Initialize(const ONNXRunTimeTensor* input_tensors, const si
|
|||
auto graph_proto = model_proto_.mutable_graph();
|
||||
// Clear previous shapes if any and set new input shapes
|
||||
for (size_t i = 0; i < num_inputs; i++) {
|
||||
auto g_in_shape = graph_proto->mutable_input(i)->mutable_type()->mutable_tensor_type()->mutable_shape();
|
||||
auto g_in_shape = graph_proto->mutable_input((int)i)->mutable_type()->mutable_tensor_type()->mutable_shape();
|
||||
g_in_shape->clear_dim();
|
||||
|
||||
for (size_t dim = 0; dim < input_tensors[i].ndim; dim++) {
|
||||
|
|
|
|||
|
|
@ -3,10 +3,19 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(disable:4244 4245)
|
||||
#elif __GNUC__
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||
#endif
|
||||
#include <ngraph/ngraph.hpp>
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(default:4244 4245)
|
||||
#elif __GNUC__
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
#include "core/framework/func_api.h"
|
||||
#include "core/graph/onnx_protobuf.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -11,13 +11,21 @@
|
|||
#include "ngraph_execution_provider.h"
|
||||
#include "ngraph_custom_op.h"
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(disable:4244 4245)
|
||||
#elif __GNUC__
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||
#endif
|
||||
#include <ngraph/ngraph.hpp>
|
||||
#include <ngraph/frontend/onnx_import/onnx.hpp>
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(default:4244 4245)
|
||||
#elif __GNUC__
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
#define MEMCPY_S(dest, src, destsz, srcsz) memcpy(dest, src, MIN(destsz, srcsz))
|
||||
#define MEMCPY_S(dest, src, destsz, srcsz) memcpy(dest, src, std::min(destsz, srcsz))
|
||||
|
||||
namespace onnxruntime {
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
jobs:
|
||||
- job: Windows_nGraph_CI_Dev
|
||||
variables:
|
||||
buildDirectory: '$(Build.BinariesDirectory)'
|
||||
steps:
|
||||
- template: templates/set-test-data-variables-step.yml
|
||||
- template: templates/windows-build-tools-setup-steps.yml
|
||||
parameters:
|
||||
EnvSetupScript: 'setup_env.bat'
|
||||
buildArch: 'x64'
|
||||
setVcvars: false
|
||||
- task: CmdLine@1
|
||||
displayName: 'Download test data and generate cmake config'
|
||||
inputs:
|
||||
filename: '$(Build.BinariesDirectory)\packages\python\python.exe'
|
||||
arguments: '$(Build.SourcesDirectory)\tools\ci_build\build.py --config Release --build_dir $(Build.BinariesDirectory) --skip_submodule_sync --cmake_path $(Build.BinariesDirectory)\cmake\bin\cmake.exe --ctest_path $(Build.BinariesDirectory)\cmake\bin\ctest.exe --enable_pybind --use_openmp --use_ngraph --use_full_protobuf --build_shared_lib --enable_onnx_tests --test_data_url $(TestDataUrl) --test_data_checksum $(TestDataChecksum) --gen_doc --update'
|
||||
workingDirectory: "$(Build.BinariesDirectory)"
|
||||
|
||||
- task: VSBuild@1
|
||||
displayName: 'Build Release'
|
||||
inputs:
|
||||
solution: '$(Build.BinariesDirectory)\Release\onnxruntime.sln'
|
||||
platform: 'x64'
|
||||
configuration: 'Release'
|
||||
msbuildArgs: '/m'
|
||||
msbuildArchitecture: 'x64'
|
||||
logProjectEvents: true
|
||||
workingFolder: '$(Build.BinariesDirectory)\Release'
|
||||
- task: BatchScript@1
|
||||
displayName: 'Test Release'
|
||||
inputs:
|
||||
filename: '$(Build.BinariesDirectory)\packages\python\python.exe'
|
||||
arguments: '$(Build.SourcesDirectory)\tools\ci_build\build.py --config Release --build_dir $(Build.BinariesDirectory) --skip_submodule_sync --cmake_path $(Build.BinariesDirectory)\cmake\bin\cmake.exe --ctest_path $(Build.BinariesDirectory)\cmake\bin\ctest.exe --use_tvm --enable_pybind --use_mkldnn --use_mklml --use_openmp --use_ngraph --build_shared_lib --enable_onnx_tests --test_data_url $(TestDataUrl) --test_data_checksum $(TestDataChecksum) --test'
|
||||
workingFolder: "$(Build.BinariesDirectory)"
|
||||
|
||||
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
|
||||
displayName: 'Component Detection'
|
||||
condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'))
|
||||
|
||||
- template: templates/clean-agent-build-directory-step.yml
|
||||
Loading…
Reference in a new issue