1313#include " intel_npu/config/options.hpp"
1414#include " openvino/pass/manager.hpp"
1515#include " openvino/pass/serialize.hpp"
16+ #include " transformations/common_optimizations/nop_elimination.hpp"
1617#include " transformations/op_conversions/convert_interpolate11_downgrade.hpp"
1718
1819namespace {
@@ -156,7 +157,9 @@ IRSerializer::IRSerializer(const std::shared_ptr<const ov::Model>& origModel, co
156157 countModelSize ();
157158}
158159
159- void IRSerializer::serializeModelToStream (std::ostream& xml, std::ostream& weights) {
160+ void IRSerializer::serializeModelToStream (std::ostream& xml,
161+ std::ostream& weights,
162+ std::optional<ze_graph_compiler_version_info_t > compilerVersionOpt) {
160163 _logger.debug (" serializeModelToStream" );
161164 const auto passConfig = std::make_shared<ov::pass::PassConfig>();
162165 ov::pass::Manager manager (std::move (passConfig), " NPU:serializeModelToStream" );
@@ -167,6 +170,11 @@ void IRSerializer::serializeModelToStream(std::ostream& xml, std::ostream& weigh
167170 _logger.info (" Downgrade op for opset smaller than 11" );
168171 }
169172
173+ if (compilerVersionOpt.has_value () &&
174+ (compilerVersionOpt.value ().major < 7 ||
175+ (compilerVersionOpt.value ().major == 7 && compilerVersionOpt.value ().minor <= 26 ))) {
176+ manager.register_pass <ov::pass::EliminateIdentity>();
177+ }
170178 manager.register_pass <ov::pass::Serialize>(xml, weights);
171179
172180 // Depending on the driver version, the compiler attached to it may request this information as an indicator of the
@@ -214,15 +222,17 @@ void IRSerializer::countModelSize() {
214222 _logger.debug (" countModelSize completed, xml size: %d, weights size: %d" , _xmlSize, _weightsSize);
215223}
216224
217- void IRSerializer::serializeModelToBuffer (uint8_t * xml, uint8_t * weights) {
225+ void IRSerializer::serializeModelToBuffer (uint8_t * xml,
226+ uint8_t * weights,
227+ std::optional<ze_graph_compiler_version_info_t > compilerVersionOpt) {
218228 _logger.debug (" serializeModelToBuffer" );
219229
220230 writer_streambuf xmlStreamBuf (xml);
221231 writer_streambuf weightsStreamBuf (weights);
222232 std::ostream xmlStream (&xmlStreamBuf);
223233 std::ostream weightsStream (&weightsStreamBuf);
224234
225- serializeModelToStream (xmlStream, weightsStream);
235+ serializeModelToStream (xmlStream, weightsStream, std::move (compilerVersionOpt) );
226236
227237 _logger.debug (" serializeModelToBuffer end" );
228238}
@@ -274,7 +284,7 @@ SerializedIR IRSerializer::serializeIR(const std::shared_ptr<const ov::Model>& m
274284 uint64_t weightsOffset = offset;
275285 offset += weightsSize;
276286
277- serializeModelToBuffer (serializedIR + xmlOffset, serializedIR + weightsOffset);
287+ serializeModelToBuffer (serializedIR + xmlOffset, serializedIR + weightsOffset, compilerVersion );
278288
279289 OPENVINO_ASSERT (offset == sizeOfSerializedIR);
280290
0 commit comments