mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-29 20:14:01 +00:00
Pass Model Path to TensorProtoToMLValue from Constant Folding for External Inputs (#5000)
* Don't constant fold external inputs. * pass model_path to TensorProtoToMLValue Co-authored-by: Vincent Wang <weicwang@microsoft.com>
This commit is contained in:
parent
5651c23271
commit
a6e219deff
4 changed files with 12 additions and 7 deletions
|
|
@ -104,8 +104,7 @@ Status ConstantFolding::ApplyImpl(Graph& graph, bool& modified, int graph_level,
|
|||
}
|
||||
|
||||
// Create execution frame for executing constant nodes.
|
||||
// Create execution frame for executing constant nodes.
|
||||
OptimizerExecutionFrame::Info info({node}, constant_inputs, execution_provider_);
|
||||
OptimizerExecutionFrame::Info info({node}, constant_inputs, graph.ModelPath(), execution_provider_);
|
||||
|
||||
std::vector<int> fetch_mlvalue_idxs;
|
||||
for (const auto* node_out : node->OutputDefs()) {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ namespace onnxruntime {
|
|||
|
||||
OptimizerExecutionFrame::Info::Info(const std::vector<const Node*>& nodes,
|
||||
const InitializedTensorSet& initialized_tensor_set,
|
||||
const Path& model_path,
|
||||
const IExecutionProvider& execution_provider)
|
||||
: execution_provider_(execution_provider) {
|
||||
allocator_ptr_ = execution_provider_.GetAllocator(device_id_, mem_type_);
|
||||
|
|
@ -27,7 +28,7 @@ OptimizerExecutionFrame::Info::Info(const std::vector<const Node*>& nodes,
|
|||
data_transfer_mgr_.RegisterDataTransfer(onnxruntime::make_unique<CPUDataTransfer>());
|
||||
|
||||
// Create MLValues related maps
|
||||
auto initialize_maps = [this, &initialized_tensor_set](const NodeArg& arg, size_t /*index*/) -> Status {
|
||||
auto initialize_maps = [this, &initialized_tensor_set, &model_path](const NodeArg& arg, size_t /*index*/) -> Status {
|
||||
int idx = ort_value_name_idx_map_.Add(arg.Name());
|
||||
ort_value_idx_nodearg_map_[idx] = &arg;
|
||||
|
||||
|
|
@ -41,9 +42,12 @@ OptimizerExecutionFrame::Info::Info(const std::vector<const Node*>& nodes,
|
|||
std::unique_ptr<char[]> data(new char[cpu_tensor_length]);
|
||||
std::unique_ptr<Tensor> p_tensor;
|
||||
OrtCallback d;
|
||||
ORT_RETURN_IF_ERROR(utils::TensorProtoToMLValue(Env::Default(), nullptr, tensor_proto,
|
||||
ORT_RETURN_IF_ERROR(utils::TensorProtoToMLValue(Env::Default(),
|
||||
model_path.IsEmpty() ? nullptr : model_path.ToPathString().c_str(),
|
||||
tensor_proto,
|
||||
MemBuffer(data.get(), cpu_tensor_length, allocator_ptr_->Info()),
|
||||
ort_value, d));
|
||||
ort_value,
|
||||
d));
|
||||
|
||||
initializers_[idx] = ort_value;
|
||||
buffer_for_initialized_tensors_[idx] = std::move(data);
|
||||
|
|
|
|||
|
|
@ -20,7 +20,9 @@ class OptimizerExecutionFrame final : public IExecutionFrame {
|
|||
public:
|
||||
class Info {
|
||||
public:
|
||||
Info(const std::vector<const Node*>& nodes, const InitializedTensorSet& initialized_tensor_set,
|
||||
Info(const std::vector<const Node*>& nodes,
|
||||
const InitializedTensorSet& initialized_tensor_set,
|
||||
const Path& model_path,
|
||||
const IExecutionProvider& execution_provider);
|
||||
~Info() {
|
||||
for (auto& kvp : deleter_for_initialized_tensors_) {
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ TEST(OptimizerTest, Basic) {
|
|||
|
||||
std::unique_ptr<CPUExecutionProvider> cpu_execution_provider =
|
||||
onnxruntime::make_unique<CPUExecutionProvider>(CPUExecutionProviderInfo());
|
||||
OptimizerExecutionFrame::Info info(nodes, initialized_tensor_set, *cpu_execution_provider.get());
|
||||
OptimizerExecutionFrame::Info info(nodes, initialized_tensor_set, graph.ModelPath(), *cpu_execution_provider.get());
|
||||
std::vector<int> fetch_mlvalue_idxs{info.GetMLValueIndex("out")};
|
||||
OptimizerExecutionFrame frame(info, fetch_mlvalue_idxs);
|
||||
const logging::Logger& logger = DefaultLoggingManager().DefaultLogger();
|
||||
|
|
|
|||
Loading…
Reference in a new issue