Add some VitisAI EP C APIs

fix compile error

move configuration to vaip

update vaip repo remote url

add vaip_get_default_config API

move pattern zoo to internal (#1)

* move pattern zoo to internal

* change external vaip

---------

Co-authored-by: mingyue <mingyue@amd.com>
Co-authored-by: mingyue <mingyue@xilinx.com>

add get_patterrn_list API and change get_pattern API (#2)

* add get_patterrn_list API and change get_pattern API

* lintrunner -a

---------

Co-authored-by: mingyue <mingyue@amd.com>
Co-authored-by: mingyue <mingyue@xilinx.com>

change xcompiler_compile API by CPS (#3)

Co-authored-by: mingyue <mingyue@amd.com>

[deps] change vaip remote and branch

Add vaip_get/has_mem_xclbin APIs (#4)

* Add vaip_get/has_mem_xclbin APIs

---------

Co-authored-by: mingyue <mingyue@xilinx.com>

vaip point to github/amd

use main branch
This commit is contained in:
Liu Minyue 2024-08-26 03:28:08 -06:00 committed by Won Chung
parent 7cbcf5cd4b
commit 6eeafca6e0
5 changed files with 45 additions and 32 deletions

View file

@ -60,4 +60,4 @@ directx_headers;https://github.com/microsoft/DirectX-Headers/archive/refs/tags/v
cudnn_frontend;https://github.com/NVIDIA/cudnn-frontend/archive/refs/tags/v1.7.0.zip;d0753d8d5b39947ca0729d7773cb84653a129eb1
dawn;https://github.com/google/dawn/archive/12a3b24c456cebd9fd11f23ac0164f78129b00c6.zip;ad428f6dc16f1336d584f7bad5714e1097dafc43
kleidiai;https://gitlab.arm.com/kleidi/kleidiai/-/archive/d15722976120710080ca098fe8ddabf4556cb40f/kleidiai-d15722976120710080ca098fe8ddabf4556cb40f.zip;d6c840d00c3b05aedf06e957ddaece1013d1f40b
vaip;https://gitenterprise.xilinx.com/chunywan/vaip.git;refactor-vaip
vaip;https://github.com/amd/vaip.git;main

View file

@ -198,6 +198,7 @@ FetchContent_Declare(
PATCH_COMMAND ${ONNXRUNTIME_PROTOBUF_PATCH_COMMAND}
FIND_PACKAGE_ARGS NAMES Protobuf protobuf
)
set(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests" FORCE)
#TODO: we'd better to turn the following option off. However, it will cause
# ".\build.bat --config Debug --parallel --skip_submodule_sync --update" fail with an error message:

View file

@ -8,18 +8,6 @@
GIT_SHALLOW TRUE
OVERRIDE_FIND_PACKAGE
)
set(WITH_XCOMPILER ON CACHE BOOL "enable XCOMPILER")
set(WITH_OPENSSL OFF CACHE BOOL "enable open ssl")
set(WITH_CPURUNNER ON CACHE BOOL "enable cpu runner")
set(BUILD_PYTHON_EXT OFF CACHE BOOL "enable python ext")
set(EN_LLM_DOD_OPS OFF CACHE BOOL "enable dd flow")
set(EN_VAIML OFF CACHE BOOL "enable vaiml flow")
set(TRIM_CONFIG OFF CACHE BOOL "enable config trimming")
set(ENABLE_VITIS_AI_CUSTOM_OP OFF "enable vitis ai custom op")
set(PACK_XCLBIN_PATH "" CACHE STRING "list of xclbin files")
set(ENABLE_BUILD_VOE_WHEEL OFF CACHE BOOL "internal used only" FORCE)
set(INSTALL_USER ON CACHE BOOL "internal used only" FORCE)
set(ENABLE_XRT_SHARED_CONTEXT ON CACHE BOOL "internal used only" FORCE)
find_package(vaip)
if ("${GIT_COMMIT_ID}" STREQUAL "")

View file

@ -41,17 +41,15 @@ using namespace onnxruntime;
#define LIBRARY_PREFIX "lib"
#define LIBRARY_EXTENSION ".so"
#endif
namespace vaip_core {
void initialize_onnxruntime_vitisai_ep(vaip_core::OrtApiForVaip* api, std::vector<OrtCustomOpDomain*>& ret_domain);
uint32_t vaip_get_version();
extern "C" int create_ep_context_nodes(
extern "C" {
void initialize_onnxruntime_vitisai_ep_c(vaip_core::OrtApiForVaip* api, std::vector<OrtCustomOpDomain*>& ret_domain);
uint32_t vaip_get_version_c();
int create_ep_context_nodes_c(
const std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>& eps,
vaip_core::DllSafe<std::vector<Node*>>* ret_value);
std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>* compile_onnx_model_with_options(
std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>* compile_onnx_model_with_options_c(
const std::string& model_path, const onnxruntime::Graph& graph, const onnxruntime::ProviderOptions& options);
} // namespace vaip_core
};
vaip_core::OrtApiForVaip* create_org_api_hook();
struct OrtVitisAIEpAPI {
void (*initialize_onnxruntime_vitisai_ep)(vaip_core::OrtApiForVaip* api, std::vector<OrtCustomOpDomain*>& ret_domain);
@ -77,13 +75,21 @@ struct OrtVitisAIEpAPI {
size_t input_xmodel_size,
const char* config_xmodel,
size_t config_xmodel_size, void* state,
char* (*allocator)(void*, size_t)) = nullptr;
void (*k)(void*, void*, size_t)) = nullptr;
const char* (*vaip_get_default_config)() = nullptr;
int (*vaip_get_pattern_as_binary)(const char* name, void* state, void (*k)(void*, void*, size_t)) = nullptr;
void (*vaip_get_pattern_list)(void* state, void (*k)(void*, void*, size_t)) = nullptr;
int (*vaip_get_mem_xclbin)(const char* name, void* state, void (*k)(void*, void*, size_t)) = nullptr;
bool (*vaip_has_mem_xclbin)(const char* name) = nullptr;
void Ensure() {
this->initialize_onnxruntime_vitisai_ep = vaip_core::initialize_onnxruntime_vitisai_ep;
this->compile_onnx_model_with_options = vaip_core::compile_onnx_model_with_options;
this->create_ep_context_nodes = vaip_core::create_ep_context_nodes;
this->vaip_get_version = vaip_core::vaip_get_version;
//
if (handle_)
return;
this->initialize_onnxruntime_vitisai_ep = initialize_onnxruntime_vitisai_ep_c;
this->compile_onnx_model_with_options = compile_onnx_model_with_options_c;
this->create_ep_context_nodes = create_ep_context_nodes_c;
this->vaip_get_version = vaip_get_version_c;
auto& env = Provider_GetHost()->Env__Default();
auto& logger = *Provider_GetHost()->LoggingManager_GetDefaultLogger();
@ -104,6 +110,11 @@ struct OrtVitisAIEpAPI {
ORT_THROW_IF_ERROR(env.LoadDynamicLibrary(full_path, true, &handle_));
#endif
ORT_THROW_IF_ERROR(env.GetSymbolFromLibrary(handle_, "vaip_xcompiler_compile", (void**)&vaip_xcompiler_compile));
ORT_THROW_IF_ERROR(env.GetSymbolFromLibrary(handle_, "vaip_get_default_config", (void**)&vaip_get_default_config));
ORT_THROW_IF_ERROR(env.GetSymbolFromLibrary(handle_, "vaip_get_pattern_as_binary", (void**)&vaip_get_pattern_as_binary));
ORT_THROW_IF_ERROR(env.GetSymbolFromLibrary(handle_, "vaip_get_pattern_list", (void**)&vaip_get_pattern_list));
ORT_THROW_IF_ERROR(env.GetSymbolFromLibrary(handle_, "vaip_get_mem_xclbin", (void**)&vaip_get_mem_xclbin));
ORT_THROW_IF_ERROR(env.GetSymbolFromLibrary(handle_, "vaip_has_mem_xclbin", (void**)&vaip_has_mem_xclbin));
}
void Clear() {
if (handle_) {
@ -120,10 +131,9 @@ struct OrtVitisAIEpAPI {
static OrtVitisAIEpAPI s_library_vitisaiep;
static std::shared_ptr<KernelRegistry> s_kernel_registry_vitisaiep;
static std::vector<OrtCustomOpDomain*> s_domains_vitisaiep;
static vaip_core::OrtApiForVaip the_global_api;
g
std::shared_ptr<KernelRegistry>
get_kernel_registry_vitisaiep() { return s_kernel_registry_vitisaiep; }
std::shared_ptr<KernelRegistry> get_kernel_registry_vitisaiep() { return s_kernel_registry_vitisaiep; }
const std::vector<OrtCustomOpDomain*>& get_domains_vitisaiep() { return s_domains_vitisaiep; }
void profiler_collect(
@ -524,7 +534,16 @@ vaip_core::OrtApiForVaip* create_org_api_hook() {
return &the_global_api;
}
the_global_api.vaip_xcompiler_compile = s_library_vitisaiep.vaip_xcompiler_compile;
return &the_global_api;
the_global_api.vaip_get_default_config = s_library_vitisaiep.vaip_get_default_config;
the_global_api.vaip_get_pattern_as_binary = s_library_vitisaiep.vaip_get_pattern_as_binary;
the_global_api.vaip_get_pattern_list = s_library_vitisaiep.vaip_get_pattern_list;
the_global_api.vaip_get_mem_xclbin = s_library_vitisaiep.vaip_get_mem_xclbin;
the_global_api.vaip_has_mem_xclbin = s_library_vitisaiep.vaip_has_mem_xclbin;
if (!s_library_vitisaiep.vaip_get_version) {
return reinterpret_cast<vaip_core::OrtApiForVaip*>(&(the_global_api.host_));
} else {
return &the_global_api;
}
}
void deinitialize_vitisai_ep() {

View file

@ -247,7 +247,12 @@ struct OrtApiForVaip {
size_t input_xmodel_size,
const char* config_xmodel,
size_t config_xmodel_size, void* state,
char* (*allocator)(void*, size_t)); // [103]
void (*k)(void*, void*, size_t)); // [103]
const char* (*vaip_get_default_config)(); // [104]
int (*vaip_get_pattern_as_binary)(const char* name, void* state, void (*k)(void*, void*, size_t)); // [105]
void (*vaip_get_pattern_list)(void* state, void (*k)(void*, void*, size_t)); // [106]
int (*vaip_get_mem_xclbin)(const char* name, void* state, void (*k)(void*, void*, size_t)); // [107]
bool (*vaip_has_mem_xclbin)(const char* name); // [108]
};
#ifndef USE_VITISAI