diff --git a/onnxruntime/core/providers/vitisai/imp/graph.cc b/onnxruntime/core/providers/vitisai/imp/graph.cc index 4d6ad9c397fc3..028ee7fa8c5ce 100644 --- a/onnxruntime/core/providers/vitisai/imp/graph.cc +++ b/onnxruntime/core/providers/vitisai/imp/graph.cc @@ -15,7 +15,7 @@ #include "vaip/node.h" #include "vaip/node_arg.h" - +#include "./tensor_proto.h" namespace vaip { struct NodeEdgeT { @@ -309,7 +309,14 @@ Model* model_clone(const Model& original_model, int64_t external_data_threshold) cloned_tensor->add_dims(dim); size = size * dim; } - if (size >= external_data_threshold) { + auto ORT_MEM_ADDR_tag = process_ext_address(*original_tensor); + if (!ORT_MEM_ADDR_tag.empty()) { + cloned_tensor->set_data_location(ONNX_NAMESPACE::TensorProto_DataLocation_EXTERNAL); + auto external_data = cloned_tensor->mutable_external_data(); + auto p = external_data->Add(); + *p->mutable_key() = "location"; + *p->mutable_value() = std::string("<") + graph_ptr; + } else if (size >= external_data_threshold) { cloned_tensor->set_data_location(ONNX_NAMESPACE::TensorProto_DataLocation_EXTERNAL); auto external_data = cloned_tensor->mutable_external_data(); auto p = external_data->Add(); diff --git a/onnxruntime/core/providers/vitisai/imp/tensor_proto.cc b/onnxruntime/core/providers/vitisai/imp/tensor_proto.cc index bb942c69003a1..2f1478bf1326b 100644 --- a/onnxruntime/core/providers/vitisai/imp/tensor_proto.cc +++ b/onnxruntime/core/providers/vitisai/imp/tensor_proto.cc @@ -10,7 +10,7 @@ namespace vaip { using namespace onnxruntime; -static gsl::span process_ext_address(const ONNX_NAMESPACE::TensorProto& tensor) { +gsl::span process_ext_address(const ONNX_NAMESPACE::TensorProto& tensor) { auto tensor_proto = const_cast(&tensor); auto file = std::string(); uintptr_t offset = 0; diff --git a/onnxruntime/core/providers/vitisai/imp/tensor_proto.h b/onnxruntime/core/providers/vitisai/imp/tensor_proto.h index 73015d3411a54..a7c90ac18b44e 100644 --- a/onnxruntime/core/providers/vitisai/imp/tensor_proto.h +++ b/onnxruntime/core/providers/vitisai/imp/tensor_proto.h @@ -37,4 +37,5 @@ ONNX_NAMESPACE::TensorProto* tensor_proto_new_fp16(const std::string& name, cons const std::vector& data); ONNX_NAMESPACE::TensorProto* tensor_proto_new_doubles(const std::string& name, const std::vector& shape, const std::vector& data); +gsl::span process_ext_address(const ONNX_NAMESPACE::TensorProto& tensor); } // namespace vaip