Skip to content

Commit 04bb85e

Browse files
yifei410yifei
authored andcommitted
[VitisAI] add new api to VitisAI to save graph as a string (#25602)
### Description Add new API to VitisAI to save graph as a string ### Motivation and Context to support in-memory flow --------- Co-authored-by: yifei <[email protected]>
1 parent de822ac commit 04bb85e

File tree

4 files changed

+32
-5
lines changed

4 files changed

+32
-5
lines changed

onnxruntime/core/providers/vitisai/imp/global_api.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,8 @@ vaip_core::OrtApiForVaip* create_org_api_hook() {
580580
graph.RemoveInitializedTensor(tensor_name);
581581
};
582582
the_global_api.graph_reverse_dfs_from_preemp = vaip::graph_reverse_dfs_from;
583+
the_global_api.graph_save_string = vaip::graph_save_string;
584+
583585
if (!s_library_vitisaiep.vaip_get_version) {
584586
return reinterpret_cast<vaip_core::OrtApiForVaip*>(&(the_global_api.host_));
585587
} else {

onnxruntime/core/providers/vitisai/imp/graph.cc

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,29 @@ void graph_save(const Graph& graph, const std::string& filename, const std::stri
205205
vai_assert(result, "model serialize to ostream error");
206206
}
207207

208+
vaip_core::DllSafe<std::string> graph_save_string(const Graph& graph) {
209+
auto model_proto = const_cast<onnxruntime::Model&>(graph.GetModel()).ToProto();
210+
auto graph_proto_subgraph = graph.ToGraphProto();
211+
*model_proto->mutable_graph() = *graph_proto_subgraph;
212+
auto& logger = logging::LoggingManager::DefaultLogger();
213+
auto model = Model::Create(std::move(*model_proto), graph.ModelPath(), nullptr, logger);
214+
model_proto = model->ToProto();
215+
auto& metadata = model->MetaData();
216+
if (!metadata.empty()) {
217+
auto metadata_props = model_proto->mutable_metadata_props();
218+
metadata_props->Clear();
219+
for (auto& m : metadata) {
220+
auto prop = metadata_props->Add();
221+
*prop->mutable_key() = m.first;
222+
*prop->mutable_value() = m.second;
223+
}
224+
}
225+
std::string graph_string;
226+
bool result = model_proto->SerializeToString(graph_string);
227+
vai_assert(result, "model serialize to string error");
228+
return vaip_core::DllSafe(graph_string);
229+
}
230+
208231
Node& graph_fuse(Graph& graph, const std::string& name,
209232
const std::string& op_type,
210233
const std::vector<size_t>& nodes,

onnxruntime/core/providers/vitisai/include/vaip/graph.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Node& graph_add_node(Graph& graph, const std::string& name, const std::string& o
1414
const NodeAttributes& attributes, const std::string& domain);
1515
void graph_save(const Graph& graph, const std::string& filename, const std::string& dat_filename,
1616
size_t initializer_size_threshold);
17+
vaip_core::DllSafe<std::string> graph_save_string(const Graph& graph);
1718
Node& graph_fuse(Graph& graph, const std::string& name, const std::string& op_type, const std::vector<size_t>& nodes,
1819
const std::vector<std::string>& inputs, const std::vector<std::string>& outputs,
1920
const std::vector<std::string>& constant_initializers);

onnxruntime/core/providers/vitisai/include/vaip/vaip_ort_api.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ struct OrtApi;
1313

1414
namespace vaip_core {
1515

16-
#define VAIP_ORT_API_MAJOR (17u)
16+
#define VAIP_ORT_API_MAJOR (18u)
1717
#define VAIP_ORT_API_MINOR (0u)
1818
#define VAIP_ORT_API_PATCH (0u)
1919
struct OrtApiForVaip {
@@ -252,10 +252,11 @@ struct OrtApiForVaip {
252252
stop); // [103]
253253
void (*graph_set_name)(Graph& graph, const char* name); // [104]
254254
void (*graph_infer_shapes_from_filepath)(
255-
const std::string& m, const std::string& save_path); // [105]
256-
GraphProto* (*graph_to_graph_proto)(const Graph& graph); // [106]
257-
void (*graph_proto_delete)(GraphProto* p); // [107]
258-
void (*graph_infer_shapes)(ModelProto& m); // [108]
255+
const std::string& m, const std::string& save_path); // [105]
256+
GraphProto* (*graph_to_graph_proto)(const Graph& graph); // [106]
257+
void (*graph_proto_delete)(GraphProto* p); // [107]
258+
void (*graph_infer_shapes)(ModelProto& m); // [108]
259+
DllSafe<std::string> (*graph_save_string)(const Graph& graph); // [109]
259260
};
260261

261262
#ifndef USE_VITISAI

0 commit comments

Comments
 (0)