-
Notifications
You must be signed in to change notification settings - Fork 4.1k
[NV TensorRT RTX EP] Fix external tensorrt_plugins load path #26814
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 3 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -8,6 +8,12 @@ | |
| #include "nv_execution_provider_custom_ops.h" | ||
| #include "nv_execution_provider.h" | ||
|
|
||
| #ifdef _WIN32 | ||
| #include <windows.h> | ||
| #else | ||
| #include <dlfcn.h> | ||
| #endif | ||
|
|
||
| // The filename extension for a shared library is different per platform | ||
| #ifdef _WIN32 | ||
| #define LIBRARY_PREFIX | ||
|
|
@@ -23,6 +29,48 @@ | |
| namespace onnxruntime { | ||
| extern TensorrtLogger& GetTensorrtLogger(bool verbose); | ||
|
|
||
| /// @brief Gets the directory path of the EP library that contains the current function | ||
| /// @return The directory path containing the EP library, or an empty string if the path cannot be determined. | ||
| static PathString GetEPLibraryDirectory() { | ||
| #ifdef _WIN32 | ||
| HMODULE hModule = NULL; | ||
| // Get handle to the DLL executing this code | ||
| if (!GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | | ||
| GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, | ||
| reinterpret_cast<LPCWSTR>(&GetEPLibraryDirectory), | ||
|
||
| &hModule)) { | ||
| return PathString(L""); | ||
|
yuslepukhin marked this conversation as resolved.
Outdated
|
||
| } | ||
|
|
||
| wchar_t buffer[MAX_PATH]; | ||
| DWORD len = GetModuleFileNameW(hModule, buffer, MAX_PATH); | ||
| if (len == 0 || len >= MAX_PATH) { | ||
| return PathString(L""); | ||
|
yuslepukhin marked this conversation as resolved.
Outdated
|
||
| } | ||
|
|
||
| std::wstring path(buffer); | ||
| size_t lastSlash = path.find_last_of(L"\\/"); | ||
| if (lastSlash != std::wstring::npos) { | ||
| return PathString(path.substr(0, lastSlash + 1)); | ||
| } | ||
| return PathString(path); | ||
|
||
| #else | ||
| // Linux and other Unix-like platforms | ||
| Dl_info dl_info; | ||
|
|
||
| if (dladdr((void*)&GetEPLibraryDirectory, &dl_info) == 0 || dl_info.dli_fname == nullptr) { | ||
|
Check warning on line 61 in onnxruntime/core/providers/nv_tensorrt_rtx/nv_execution_provider_custom_ops.cc
|
||
| return PathString(""); | ||
| } | ||
|
|
||
| std::string so_path(dl_info.dli_fname); | ||
| size_t last_slash = so_path.find_last_of('/'); | ||
| if (last_slash != std::string::npos) { | ||
| return PathString(so_path.substr(0, last_slash + 1)); | ||
| } | ||
| return PathString(so_path); | ||
|
||
| #endif | ||
| } | ||
|
|
||
| /* | ||
| * Create custom op domain list for TRT plugins. | ||
| * | ||
|
|
@@ -76,14 +124,14 @@ | |
| // This library contains GroupQueryAttention and RotaryEmbedding plugins for transformer models | ||
| try { | ||
| const auto& env = onnxruntime::GetDefaultEnv(); | ||
| auto external_plugin_path = env.GetRuntimePath() + | ||
| auto external_plugin_path = GetEPLibraryDirectory() + | ||
| PathString(LIBRARY_PREFIX ORT_TSTR("tensorrt_plugins") LIBRARY_EXTENSION); | ||
| void* external_plugin_handle = nullptr; | ||
| auto status = env.LoadDynamicLibrary(external_plugin_path, false, &external_plugin_handle); | ||
| if (status.IsOK()) { | ||
| LOGS_DEFAULT(INFO) << "[NvTensorRTRTX EP] External plugins loaded: tensorrt_plugins (GQA + RotaryEmbedding)"; | ||
| } else { | ||
| LOGS_DEFAULT(VERBOSE) << "[NvTensorRTRTX EP] tensorrt_plugins library not found in runtime path (optional)"; | ||
| LOGS_DEFAULT(VERBOSE) << "[NvTensorRTRTX EP] tensorrt_plugins library not found in EP library path (optional)"; | ||
| } | ||
| } catch (const std::exception& e) { | ||
| LOGS_DEFAULT(VERBOSE) << "[NvTensorRTRTX EP] tensorrt_plugins library not available: " << e.what(); | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.