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:
R. G. Esteves 2019-05-07 14:14:50 -07:00 committed by jywu-msft
parent 7c514d6fef
commit 17690355ed
14 changed files with 351 additions and 53 deletions

View file

@ -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).

View file

@ -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()

View file

@ -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})

View file

@ -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)

View file

@ -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)

View 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

View 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

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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++) {

View file

@ -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"

View file

@ -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 {

View file

@ -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