Skip to content

Commit

Permalink
Add some VitisAI EP C APIs
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Liu Minyue authored and wonchung-microsoft committed Feb 7, 2025
1 parent 7cbcf5c commit 6eeafca
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 32 deletions.
2 changes: 1 addition & 1 deletion cmake/deps.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
1 change: 1 addition & 0 deletions cmake/external/onnxruntime_external_deps.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
12 changes: 0 additions & 12 deletions cmake/onnxruntime_providers_vitisai.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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 "")
Expand Down
55 changes: 37 additions & 18 deletions onnxruntime/core/providers/vitisai/imp/global_api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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();

Expand All @@ -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_) {
Expand All @@ -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(
Expand Down Expand Up @@ -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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 6eeafca

Please sign in to comment.