MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / dump

Method dump

src/serialization/impl/serializer_oss_v2.cpp:294–401  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

292}
293
294GraphDumper::DumpResult GraphDumperOSSV2::dump(
295 const SymbolVarArray& output_vars, const DumpConfig& config,
296 const Metadata& metadata) {
297 mgb_throw_if(output_vars.empty(), SerializationError, "Can't dump empty graph");
298
299 auto new_output_vars = output_vars;
300 if (!config.no_change_graph) {
301 new_output_vars = converter_all_opr_to_compatiable(output_vars);
302 mgb_assert(output_vars.size() == new_output_vars.size());
303 for (size_t id = 0; id < output_vars.size(); id++) {
304 auto& new_var = new_output_vars[id];
305 new_var.rename(output_vars[id].node()->name());
306 }
307 }
308
309 auto begin_pos = m_file->tell();
310 m_config = config;
311 m_builder.Reset();
312
313 m_output_vars.clear();
314 m_cur_rst = {};
315 m_used_input_names.clear();
316 m_used_param_names.clear();
317 m_var_remove_in_dump.clear();
318 m_model_middle_tensors.clear();
319 m_var2midtensor_id.clear();
320 m_nr_shared_tensor = 0;
321
322 // process output vars
323 bool keep_output_var_name = m_config.keep_var_name >= 1;
324 std::unordered_set<std::string> output_var_names;
325 for (auto i : new_output_vars) {
326 mgb_assert(
327 !i.node()->contain_flag(VarNode::Flag::VOLATILE_CONTENT),
328 "can not dump var with VOLATILE_CONTENT flag: %s",
329 cg::dump_var_info({i.node()}).c_str());
330 if (m_output_vars.insert(i.node()).second && keep_output_var_name) {
331 auto name_ins = output_var_names.insert(i.node()->name()).second;
332 mgb_assert(name_ins, "duplicated output var name: %s", i.node()->cname());
333 }
334 }
335
336 // Dump metadata
337 auto fbmeta = build_metadata(metadata);
338
339 // Dump operators
340 init_oprs_to_dump(new_output_vars);
341 std::vector<flatbuffers::Offset<fbs::v2::Operator>> oprs;
342 for (auto&& i : m_oprs_to_dump) {
343 record_opr_dumped(i.second->type_id, i.second->name, i.second->version);
344 oprs.emplace_back(build_single_opr(i.first, i.second));
345 }
346 auto fb_oprs = m_builder.CreateVector(oprs);
347
348 // Dump output vars
349 std::vector<flatbuffers::Offset<fbs::v2::OutputVar>> output_vars_idx;
350 output_vars_idx.reserve(new_output_vars.size());
351 for (auto i : new_output_vars) {

Callers

nothing calls this directly

Calls 15

sortFunction · 0.85
renameMethod · 0.80
emplace_backMethod · 0.80
emptyMethod · 0.45
sizeMethod · 0.45
nameMethod · 0.45
nodeMethod · 0.45
tellMethod · 0.45
clearMethod · 0.45
contain_flagMethod · 0.45
insertMethod · 0.45
cnameMethod · 0.45

Tested by

no test coverage detected