Я пытаюсь написать оболочку для onnxruntime.
Модель получает один тензор на входе и один тензор на выходе.
Во время сеанса->Выполнения внутри библиотеки onnxruntime возникает ошибка сегментации . Как загруженная библиотека, так и собранная из исходного кода выдают одну и ту же ошибку.
Вот ошибка:
Я пытаюсь написать оболочку для onnxruntime. Модель получает один тензор на входе и один тензор на выходе. Во время сеанса->Выполнения внутри библиотеки onnxruntime возникает ошибка сегментации . Как загруженная библиотека, так и собранная из исходного кода выдают одну и ту же ошибку. Вот ошибка: [code]Thread 1 "app" received signal SIGSEGV, Segmentation fault. 0x00007ffff6b16eb1 in onnxruntime::logging::ISink::Send (this=0x5555559154c0, timestamp=..., logger_id="", message=...) at /home/listray/Work/Libs/onnxruntime/include/onnxruntime/core/common/logging/isink.h:23 23 SendImpl(timestamp, logger_id, message); [/code] Вот это: [code]#0 0x00007ffff6b16eb1 in onnxruntime::logging::ISink::Send (this=0x5555559154c0, timestamp=..., logger_id="", message=...) at /home/listray/Work/Libs/onnxruntime/include/onnxruntime/core/common/logging/isink.h:23 #1 0x00007ffff6b174b8 in onnxruntime::logging::LoggingManager::Log (this=0x55555576cbb0, logger_id="", message=...) at /home/listray/Work/Libs/onnxruntime/onnxruntime/core/common/logging/logging.cc:153 #2 0x00007ffff6b16cae in onnxruntime::logging::Logger::Log (this=0x7fffffffcdd0, message=...) at /home/listray/Work/Libs/onnxruntime/include/onnxruntime/core/common/logging/logging.h:291 #3 0x00007ffff6b16ce0 in onnxruntime::logging::Capture::~Capture (this=0x7fffffffc4e0, __in_chrg=) at /home/listray/Work/Libs/onnxruntime/onnxruntime/core/common/logging/capture.cc:57 #4 0x00007ffff6a86301 in onnxruntime::SequentialExecutor::Execute(onnxruntime::SessionState const&, std::vector const&, std::vector const&, std::vector const&, std::vector&, std::unordered_map const&, onnxruntime::logging::Logger const&) (this=0x5555559da4c0, session_state=..., feed_mlvalue_idxs=std::vector of length 1, capacity 1 = {...}, feeds=std::vector of length 1, capacity 1 = {...}, fetch_mlvalue_idxs=std::vector of length 1, capacity 1 = {...}, fetches=std::vector of length 1, capacity 1 = {...}, fetch_allocators=std::unordered_map with 0 elements, logger=...) at /home/listray/Work/Libs/onnxruntime/onnxruntime/core/framework/sequential_executor.cc:309 #5 0x00007ffff6a6d787 in onnxruntime::utils::ExecuteGraphImpl(const onnxruntime::SessionState &, const onnxruntime::FeedsFetchesManager &, const std::vector &, std::vector &, const std::unordered_map &, ExecutionMode, const bool &, const onnxruntime::logging::Logger &, bool) (session_state=..., feeds_fetches_manager=..., feeds=std::vector of length 1, capacity 1 = {...}, fetches=std::vector of length 1, capacity 1 = {...}, fetch_allocators=std::unordered_map with 0 elements, execution_mode=ORT_SEQUENTIAL, terminate_flag=@0x7fffffffd168: false, logger=..., only_execute_path_to_fetches=false) at /home/listray/Work/Libs/onnxruntime/onnxruntime/core/framework/utils.cc:454 #6 0x00007ffff6a6df37 in onnxruntime::utils::ExecuteGraph (session_state=..., feeds_fetches_manager=..., feeds=std::vector of length 1, capacity 1 = {...}, fetches=std::vector of length 1, capacity 1 = {...}, execution_mode=ORT_SEQUENTIAL, terminate_flag=@0x7fffffffd168: false, logger=..., only_execute_path_to_fetches=false) at /home/listray/Work/Libs/onnxruntime/onnxruntime/core/framework/utils.cc:513 #7 0x00007ffff63e00c2 in onnxruntime::InferenceSession::Run (this=0x555555917110, run_options=..., feed_names=std::vector of length 1, capacity 1 = {...}, feeds=std::vector of length 1, capacity 1 = {...}, output_names=std::vector of length 1, capacity 1 = {...}, p_fetches=0x7fffffffd120) at /home/listray/Work/Libs/onnxruntime/onnxruntime/core/session/inference_session.cc:1206 #8 0x00007ffff637ecc3 in OrtApis::Run (sess=0x555555917110, run_options=0x0, input_names=0x5555559c1a10, input=0x7fffffffd2f8, input_len=1, output_names1=0x555555a521a0, output_names_len=1, output=0x555555a3fb30) at /home/listray/Work/Libs/onnxruntime/onnxruntime/core/session/onnxruntime_c_api.cc:506 #9 0x00007ffff7ba6a93 in Ort::Session::Run (this=0x555555916440, run_options=..., input_names=0x5555559c1a10, input_values=0x7fffffffd2f8, input_count=1, output_names=0x555555a521a0, output_values=0x555555a3fb30, output_count=1) at /home/listray/Work/Libs/onnx_debug/include/onnxruntime_cxx_inline.h:246 #10 0x00007ffff7ba69da in Ort::Session::Run (this=0x555555916440, run_options=..., input_names=0x5555559c1a10, input_values=0x7fffffffd2f8, input_count=1, output_names=0x555555a521a0, output_names_count=1) at /home/listray/Work/Libs/onnx_debug/include/onnxruntime_cxx_inline.h:237 #11 0x00007ffff7bb0b31 in ai::common::OnnxruntimeGenericModelWrapper::process (this=0x55555576cb60, tensors=...) at /home/listray/Work/Projects/ml-library/framework/onnxruntime/onnx_generic_model_wrapper.h:48 ... [/code] Загруженная библиотека останавливается на onnxruntime::logging::LoggingManager::Log. Вот код-оболочка. Загрузка модели:< /p> [code]void load_graph(const ByteBuffer& model) { // enviroment maintains thread pools and other state info Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "Vicue Run"); // initialize session options Ort::SessionOptions session_options(nullptr); //session_options.SetIntraOpNumThreads(1);
//Loading models session = std::make_unique(env, static_cast(model.data.get()), model.length, session_options); } [/code] [code]session[/code] — поле оболочки: [code]std::unique_ptr session; [/code] [code]ByteBuffer: struct ByteBuffer { std::unique_ptr data; size_t length; } [/code] На самом деле оболочка была универсальной, но этот код вызывает ту же ошибку. [code]std::array process(std::array tensors) override { std::array result;
// maybe this should be different if we have multiple input Ort::AllocatorWithDefaultOptions allocator; auto memory_info = Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault);
std::vector input_node_names = { session->GetInputName(0, allocator) }; std::vector output_node_names = { session->GetOutputName(0, allocator) }; std::vector output_tensors = session->Run(Ort::RunOptions{nullptr}, input_node_names.data(), &input_tensor, inputs, output_node_names.data(), outputs); [/code] Одна странная вещь, которую я не понимаю. Во время ошибки я вижу это: [code](gdb) print this $4 = (onnxruntime::logging::Capture * const) 0x7fffffffc4e0 (gdb) print this->logger_->logging_manager_->sink_ $5 = std::unique_ptr = {get() = 0x5555559154c0} (gdb) print *(this->logger_->logging_manager_->sink_) $6 = {_vptr.ISink = 0x0} [/code] При создании средства ведения журнала его *(logging_manager_->sink_) также имеет значение {_vptr.ISink = 0x0}.