@@ -216,7 +216,8 @@ void ngfunction_2_ir(pugi::xml_node& node,
216
216
const ov::Model& model,
217
217
ConstantWriter& constant_write_handler,
218
218
int64_t version,
219
- bool deterministic);
219
+ bool deterministic,
220
+ const bool skip_weightless_constants = false );
220
221
221
222
namespace rt_info {
222
223
static const std::vector<std::string> list_of_names{
@@ -330,7 +331,7 @@ class XmlSerializer : public ov::AttributeVisitor {
330
331
bool m_compress_to_fp16;
331
332
ov::element::Type m_output_element_type;
332
333
bool m_data_is_temporary;
333
- bool m_weightless_const ;
334
+ bool m_skip_weightless_constants ;
334
335
335
336
template <typename T>
336
337
std::string create_atribute_list (ov::ValueAccessor<std::vector<T>>& adapter) {
@@ -451,7 +452,7 @@ class XmlSerializer : public ov::AttributeVisitor {
451
452
bool compress_to_fp16 = false ,
452
453
ov::element::Type output_element_type = ov::element::dynamic,
453
454
bool data_is_temporary = false ,
454
- bool weightless_const = false )
455
+ bool skip_weightless_constants = false )
455
456
: m_xml_node(data),
456
457
m_node_type_name (node_type_name),
457
458
m_constant_write_handler(constant_write_handler),
@@ -460,7 +461,7 @@ class XmlSerializer : public ov::AttributeVisitor {
460
461
m_compress_to_fp16(compress_to_fp16),
461
462
m_output_element_type(output_element_type),
462
463
m_data_is_temporary(data_is_temporary),
463
- m_weightless_const(weightless_const ) {}
464
+ m_skip_weightless_constants(skip_weightless_constants ) {}
464
465
465
466
void on_adapter (const std::string& name, ov::ValueAccessor<void >& adapter) override {
466
467
using BodyTargetNames = std::tuple<std::string, std::string, std::vector<std::string>>;
@@ -595,7 +596,7 @@ class XmlSerializer : public ov::AttributeVisitor {
595
596
}
596
597
} else if (const auto & a = ov::as_type<ov::AttributeAdapter<std::shared_ptr<ov::AlignedBuffer>>>(&adapter)) {
597
598
if (name == " value" && translate_type_name (m_node_type_name) == " Const" ) {
598
- const size_t size = m_weightless_const ? 0lu : a->get ()->size ();
599
+ const size_t size = m_skip_weightless_constants ? 0lu : a->get ()->size ();
599
600
size_t new_size = 0lu;
600
601
int64_t offset = m_constant_write_handler.write (static_cast <const char *>(a->get ()->get_ptr ()),
601
602
size,
@@ -690,11 +691,21 @@ class XmlSerializer : public ov::AttributeVisitor {
690
691
// to layer above (m_xml_node.parent()) as in ngfunction_2_ir() layer (m_xml_node) with empty attributes
691
692
// is removed.
692
693
pugi::xml_node xml_body = m_xml_node.parent ().append_child (name.c_str ());
693
- ngfunction_2_ir (xml_body, *adapter.get (), m_constant_write_handler, m_version, m_deterministic);
694
+ ngfunction_2_ir (xml_body,
695
+ *adapter.get (),
696
+ m_constant_write_handler,
697
+ m_version,
698
+ m_deterministic,
699
+ m_skip_weightless_constants);
694
700
xml_body.remove_attribute (" name" );
695
701
xml_body.remove_attribute (" version" );
696
702
} else if (name == " net" ) {
697
- ngfunction_2_ir (m_xml_node, *adapter.get (), m_constant_write_handler, m_version, m_deterministic);
703
+ ngfunction_2_ir (m_xml_node,
704
+ *adapter.get (),
705
+ m_constant_write_handler,
706
+ m_version,
707
+ m_deterministic,
708
+ m_skip_weightless_constants);
698
709
} else {
699
710
OPENVINO_THROW (" Unsupported Model name." );
700
711
}
@@ -1009,7 +1020,8 @@ void ngfunction_2_ir(pugi::xml_node& netXml,
1009
1020
const ov::Model& model,
1010
1021
ConstantWriter& constant_node_write_handler,
1011
1022
int64_t version,
1012
- bool deterministic) {
1023
+ bool deterministic,
1024
+ const bool skip_weightless_constants) {
1013
1025
// If determinism is not required, include auto-generated names into xml
1014
1026
// model name is not critical for hash computing
1015
1027
if (!deterministic) {
@@ -1075,9 +1087,10 @@ void ngfunction_2_ir(pugi::xml_node& netXml,
1075
1087
1076
1088
// <layers/data> general attributes
1077
1089
pugi::xml_node data = layer.append_child (" data" );
1078
- bool weightless_const = false ;
1079
1090
1080
- auto append_runtime_info = [&weightless_const](pugi::xml_node& node, ov::RTMap& attributes) {
1091
+ auto append_runtime_info = [&skip_weightless_constants](pugi::xml_node& node,
1092
+ ov::RTMap& attributes,
1093
+ bool & weightless_const) {
1081
1094
pugi::xml_node rt_node = node.append_child (" rt_info" );
1082
1095
bool has_attrs = false ;
1083
1096
for (auto & item : attributes) {
@@ -1092,7 +1105,8 @@ void ngfunction_2_ir(pugi::xml_node& netXml,
1092
1105
rt_node.remove_child (attribute_node);
1093
1106
} else {
1094
1107
has_attrs = true ;
1095
- if (strcmp (type_info.name , ov::WeightlessCacheAttribute::get_type_info_static ().name ) == 0 ) {
1108
+ if (skip_weightless_constants &&
1109
+ strcmp (type_info.name , ov::WeightlessCacheAttribute::get_type_info_static ().name ) == 0 ) {
1096
1110
weightless_const = true ;
1097
1111
}
1098
1112
}
@@ -1103,8 +1117,9 @@ void ngfunction_2_ir(pugi::xml_node& netXml,
1103
1117
}
1104
1118
};
1105
1119
1120
+ bool weightless_const = false ;
1106
1121
if (version >= 11 ) {
1107
- append_runtime_info (layer, node->get_rt_info ());
1122
+ append_runtime_info (layer, node->get_rt_info (), weightless_const );
1108
1123
}
1109
1124
1110
1125
int port_id = 0 ;
@@ -1135,8 +1150,10 @@ void ngfunction_2_ir(pugi::xml_node& netXml,
1135
1150
.set_value (std::to_string (d.get_length ()).c_str ());
1136
1151
}
1137
1152
}
1138
- if (version >= 11 )
1139
- append_runtime_info (port, i.get_rt_info ());
1153
+ if (version >= 11 ) {
1154
+ bool weightless_const_tmp = false ;
1155
+ append_runtime_info (port, i.get_rt_info (), weightless_const_tmp);
1156
+ }
1140
1157
}
1141
1158
1142
1159
if (node_type_name == " TensorIterator" || node_type_name == " Loop" ) {
@@ -1192,8 +1209,10 @@ void ngfunction_2_ir(pugi::xml_node& netXml,
1192
1209
.set_value (std::to_string (d.get_length ()).c_str ());
1193
1210
}
1194
1211
}
1195
- if (version >= 11 )
1196
- append_runtime_info (port, o.get_rt_info ());
1212
+ if (version >= 11 ) {
1213
+ bool weightless_const_tmp = false ;
1214
+ append_runtime_info (port, o.get_rt_info (), weightless_const_tmp);
1215
+ }
1197
1216
}
1198
1217
if (node_type_name == " TensorIterator" || node_type_name == " Loop" ) {
1199
1218
layer.insert_move_after (output, layer.first_child ());
@@ -1288,7 +1307,8 @@ void serializeFunc(std::ostream& xml_file,
1288
1307
std::ostream& bin_file,
1289
1308
std::shared_ptr<ov::Model> model,
1290
1309
ov::pass::Serialize::Version ver,
1291
- bool deterministic = false ) {
1310
+ bool deterministic = false ,
1311
+ bool skip_weightless_constants = false ) {
1292
1312
auto version = static_cast <int64_t >(ver);
1293
1313
1294
1314
auto & rt_info = model->get_rt_info ();
@@ -1310,7 +1330,15 @@ void serializeFunc(std::ostream& xml_file,
1310
1330
pugi::xml_document xml_doc;
1311
1331
pugi::xml_node net_node = xml_doc.append_child (name.c_str ());
1312
1332
ConstantWriter constant_write_handler (bin_file);
1313
- XmlSerializer visitor (net_node, name, constant_write_handler, version, deterministic);
1333
+ XmlSerializer visitor (net_node,
1334
+ name,
1335
+ constant_write_handler,
1336
+ version,
1337
+ deterministic,
1338
+ false ,
1339
+ ov::element::dynamic,
1340
+ false ,
1341
+ skip_weightless_constants);
1314
1342
visitor.on_attribute (name, model);
1315
1343
1316
1344
xml_doc.save (xml_file);
@@ -1334,7 +1362,7 @@ bool pass::Serialize::run_on_model(const std::shared_ptr<ov::Model>& model) {
1334
1362
disable_fp16_compression (node);
1335
1363
1336
1364
if (m_xmlFile && m_binFile) {
1337
- serializeFunc (*m_xmlFile, *m_binFile, model, m_version);
1365
+ serializeFunc (*m_xmlFile, *m_binFile, model, m_version, false , m_skip_weightless_constants );
1338
1366
} else {
1339
1367
#if defined(OPENVINO_ENABLE_UNICODE_PATH_SUPPORT) && defined(_WIN32)
1340
1368
const auto & xmlPath_ref = ov::util::string_to_wstring (m_xmlPath);
@@ -1359,7 +1387,7 @@ bool pass::Serialize::run_on_model(const std::shared_ptr<ov::Model>& model) {
1359
1387
OPENVINO_ASSERT (xml_file, message_xml);
1360
1388
1361
1389
try {
1362
- serializeFunc (xml_file, bin_file, model, m_version);
1390
+ serializeFunc (xml_file, bin_file, model, m_version, false , m_skip_weightless_constants );
1363
1391
} catch (const ov::AssertFailure&) {
1364
1392
// optimization decision was made to create .bin file upfront and
1365
1393
// write to it directly instead of buffering its content in memory,
@@ -1376,28 +1404,38 @@ bool pass::Serialize::run_on_model(const std::shared_ptr<ov::Model>& model) {
1376
1404
return false ;
1377
1405
}
1378
1406
1379
- pass::Serialize::Serialize (std::ostream& xmlFile, std::ostream& binFile, pass::Serialize::Version version)
1407
+ pass::Serialize::Serialize (std::ostream& xmlFile,
1408
+ std::ostream& binFile,
1409
+ pass::Serialize::Version version,
1410
+ bool weightless_cache)
1380
1411
: m_xmlFile{&xmlFile},
1381
1412
m_binFile{&binFile},
1382
1413
m_xmlPath{},
1383
1414
m_binPath{},
1384
- m_version{version} {}
1415
+ m_version{version},
1416
+ m_skip_weightless_constants{weightless_cache} {}
1385
1417
1386
- pass::Serialize::Serialize (const std::string& xmlPath, const std::string& binPath, pass::Serialize::Version version)
1418
+ pass::Serialize::Serialize (const std::string& xmlPath,
1419
+ const std::string& binPath,
1420
+ pass::Serialize::Version version,
1421
+ bool weightless_cache)
1387
1422
: m_xmlFile{nullptr },
1388
1423
m_binFile{nullptr },
1389
1424
m_xmlPath{valid_xml_path (xmlPath)},
1390
1425
m_binPath{provide_bin_path (xmlPath, binPath)},
1391
- m_version{version} {}
1426
+ m_version{version},
1427
+ m_skip_weightless_constants{weightless_cache} {}
1392
1428
1393
1429
pass::StreamSerialize::StreamSerialize (std::ostream& stream,
1394
1430
const std::function<void (std::ostream&)>& custom_data_serializer,
1395
1431
const std::function<std::string(const std::string&)>& cache_encrypt,
1396
- Serialize::Version version)
1432
+ Serialize::Version version,
1433
+ bool skip_weightless_constants)
1397
1434
: m_stream(stream),
1398
1435
m_custom_data_serializer (custom_data_serializer),
1399
1436
m_cache_encrypt(cache_encrypt),
1400
- m_version(version) {
1437
+ m_version(version),
1438
+ m_skip_weightless_constants(skip_weightless_constants) {
1401
1439
if (version != Serialize::Version::UNSPECIFIED && version != Serialize::Version::IR_V10 &&
1402
1440
version != Serialize::Version::IR_V11) {
1403
1441
OPENVINO_THROW (" Unsupported version" );
@@ -1447,7 +1485,15 @@ bool pass::StreamSerialize::run_on_model(const std::shared_ptr<ov::Model>& model
1447
1485
pugi::xml_document xml_doc;
1448
1486
pugi::xml_node net_node = xml_doc.append_child (name.c_str ());
1449
1487
ConstantWriter constant_write_handler (m_stream);
1450
- XmlSerializer visitor (net_node, name, constant_write_handler, version);
1488
+ XmlSerializer visitor (net_node,
1489
+ name,
1490
+ constant_write_handler,
1491
+ version,
1492
+ false ,
1493
+ false ,
1494
+ ov::element::dynamic,
1495
+ false ,
1496
+ m_skip_weightless_constants);
1451
1497
std::shared_ptr<ov::Model> fun = model;
1452
1498
visitor.on_attribute (name, fun);
1453
1499
0 commit comments