Skip to content

Commit 044e5d2

Browse files
msmykx-intelKadian
authored and
Kadian
committed
[DOCS] Dependencies and Building for OpenVINO GenAI article for master (#25908)
Adding information on the OpenVINO GenAI Dependencies and ref-link to the GenAI building in user docs. Added a new pattern in pattern matcher [CPU] Avoid rounding to zero for Reduce node in quantized models (#25766) - *If the Reduce node has both input and output precision to be integers from the original model, then rounding to zero should be done before converting intermediate floating point value to integer.* - *However, if such integer precisions are resulted from quantization, then we should not do such rounding, in order to maintain accuracy.* - *Add corresponding test cases.* - *CVS-147352* Correct clang format issues Tried to resolve the segmentation fault Corrected clang format error Tried to correct segmentation fault Removed std::move Using std::move with much more caution Correct clang format issues Corrected clang format error Tried to correct segmentation fault Removed std::move Using std::move with much more caution Modified comments Change index precision from `i64` to `i32` in MaxPool14 to MaxPool8 downgrade transformation (#25514) - CVS-146277 [DOCS] Corrected build guides in docs. (#25922) - Corrected build guides in docs. - [NPU] Disable MCL in case of UD28 (#25903) - *The UD28 Windows driver version doesn't support as expected the MutableCommandList feature - just disable this feature from the plugin in case this driver is used* - *EISW-133845* [GPU] Bugfix reorder for byfx format (#25782) + Reorder returns OOR error while handling byfx from a fused permute parent - *item1* - *...* - CVS-147330 --------- Signed-off-by: Min, Byung-il <byungil.min@intel.com>
1 parent cbf4035 commit 044e5d2

File tree

16 files changed

+236
-40
lines changed

16 files changed

+236
-40
lines changed

docs/articles_en/get-started/configurations.rst

+9-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
.. {#openvino_docs_install_guides_configurations_header}
2-
3-
Additional Configurations For Hardware
1+
Additional Configurations
42
======================================
53

64

@@ -16,10 +14,10 @@ Additional Configurations For Hardware
1614

1715
For GPU <configurations/configurations-intel-gpu>
1816
For NPU <configurations/configurations-intel-npu>
17+
GenAI Dependencies <configurations/genai-dependencies>
1918

20-
For certain use cases, you may need to install additional software, to use the full
21-
potential of OpenVINO™. Check the following list for components for elements used in
22-
your workflow:
19+
For certain use cases, you may need to install additional software, to benefit from the full
20+
potential of OpenVINO™. Check the following list for components used in your workflow:
2321

2422
| **GPU drivers**
2523
| If you want to run inference on a GPU, make sure your GPU's drivers are properly installed.
@@ -33,6 +31,11 @@ your workflow:
3331
See the :doc:`guide on NPU configuration <configurations/configurations-intel-npu>`
3432
for details.
3533
34+
| **OpenVINO GenAI Dependencies**
35+
| OpenVINO GenAI is a flavor of OpenVINO, aiming to simplify running generative
36+
AI models. For information on the dependencies required to use OpenVINO GenAI, see the
37+
:doc:`guide on OpenVINO GenAI Dependencies <configurations/genai-dependencies>`.
38+
3639
| **Open Computer Vision Library**
3740
| OpenCV is used to extend the capabilities of some models, for example enhance some of
3841
OpenVINO samples, when used as a dependency in compilation. To install OpenCV for OpenVINO, see the
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
OpenVINO™ GenAI Dependencies
2+
=================================
3+
4+
OpenVINO™ GenAI depends on both `OpenVINO <https://github.com/openvinotoolkit/openvino>`__ and
5+
`OpenVINO Tokenizers <https://github.com/openvinotoolkit/openvino_tokenizers>`__. During OpenVINO™
6+
GenAI installation from PyPi, the same versions of OpenVINO and OpenVINO Tokenizers
7+
are used (e.g. ``openvino==2024.3.0`` and ``openvino-tokenizers==2024.3.0.0`` are installed for
8+
``openvino-genai==2024.3.0``).
9+
10+
Trying to update any of the dependency packages might result in a version incompatiblibty
11+
due to different Application Binary Interfaces (ABIs), which will result in errors while running
12+
OpenVINO GenAI. Having package version in the ``<MAJOR>.<MINOR>.<PATCH>.<REVISION>`` format, allows
13+
changing the ``<REVISION>`` portion of the full version to ensure ABI compatibility. Changing
14+
``<MAJOR>``, ``<MINOR>`` or ``<PATCH>`` part of the version may break ABI.
15+
16+
GenAI, Tokenizers, and OpenVINO wheels for Linux on PyPI are compiled with ``_GLIBCXX_USE_CXX11_ABI=0``
17+
to cover a wider range of platforms. In the C++ archive distributions for Ubuntu, ``_GLIBCXX_USE_CXX11_ABI=1``
18+
is used instead. Mixing different ABIs is not possible as doing so will result in a link error.
19+
20+
To try OpenVINO GenAI with different dependencies versions (which are **not** prebuilt packages
21+
as archives or python wheels), build OpenVINO GenAI library from
22+
`Source <https://github.com/openvinotoolkit/openvino.genai/blob/releases/2024/3/src/docs/BUILD.md#build-openvino-openvino-tokenizers-and-openvino-genai-from-source>`__.
23+
24+
Additional Resources
25+
#######################
26+
27+
* :doc:`OpenVINO GenAI Installation Guide <../install-openvino/install-openvino-genai>`
28+
* `OpenVINO GenAI repository <https://github.com/openvinotoolkit/openvino.genai>`__
29+
* :doc:`OpenVINO Installation Guide <../install-openvino>`
30+
* :doc:`OpenVINO Tokenizers <../../learn-openvino/llm_inference_guide/ov-tokenizers>`
31+

docs/articles_en/get-started/install-openvino/install-openvino-genai.rst

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ To see GenAI in action, check the Jupyter notebooks:
1111
`LLM-powered Chatbot <https://github.com/openvinotoolkit/openvino_notebooks/blob/latest/notebooks/llm-chatbot/README.md>`__ and
1212
`LLM Instruction-following pipeline <https://github.com/openvinotoolkit/openvino_notebooks/blob/latest/notebooks/llm-question-answering/README.md>`__.
1313

14-
The OpenVINO GenAI flavor is available for installation via PyPI and Archive distributions:
14+
The OpenVINO GenAI flavor is available for installation via PyPI and Archive distributions.
15+
A `detailed guide <https://github.com/openvinotoolkit/openvino.genai/blob/releases/2024/3/src/docs/BUILD.md>`__
16+
on how to build OpenVINO GenAI is available in the OpenVINO GenAI repository.
1517

1618
PyPI Installation
1719
###############################

docs/dev/build_linux.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ You can use the following additional build options:
7474
```
7575
3. After the build process finishes, export the newly built Python libraries to the user environment variables:
7676
```
77-
export PYTHONPATH=<openvino_repo>/bin/intel64/Release/python:$PYTHONPATH
77+
export PYTHONPATH=<openvino_repo>/bin/intel64/Release/python:<openvino_repo>/tools/ovc:$PYTHONPATH
7878
export LD_LIBRARY_PATH=<openvino_repo>/bin/intel64/Release:$LD_LIBRARY_PATH
7979
```
8080
or install the wheel with pip:

docs/dev/build_windows.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ Supported configurations:
6161
```
6262
3. After the build process finishes, export the newly built Python libraries to the user environment variables:
6363
```
64-
set PYTHONPATH=<openvino_repo>/bin/<arch>/Release/python;%PYTHONPATH%
64+
set PYTHONPATH=<openvino_repo>/bin/<arch>/Release/python;<openvino_repo>/tools/ovc;%PYTHONPATH%
6565
set OPENVINO_LIB_PATHS=<openvino_repo>/bin/<arch>/Release;<openvino_repo>/temp/tbb/bin
6666
```
6767
or install the wheel with pip:

src/common/transformations/src/transformations/op_conversions/convert_maxpool_downgrade.cpp

+12-12
Original file line numberDiff line numberDiff line change
@@ -98,23 +98,23 @@ ov::pass::ConvertMaxPool14ToMaxPool8::ConvertMaxPool14ToMaxPool8() {
9898
const auto strides = max_pool_v14->get_strides();
9999
const auto padding_begin = max_pool_v14->get_pads_begin();
100100
const auto padding_begin_node =
101-
node_registry.make<Constant>(element::i64, Shape{padding_begin.size()}, padding_begin);
101+
node_registry.make<Constant>(element::i32, Shape{padding_begin.size()}, padding_begin);
102102
const auto padding_end = max_pool_v14->get_pads_end();
103103
const auto padding_end_node =
104-
node_registry.make<Constant>(element::i64, Shape{padding_end.size()}, padding_end);
105-
const auto zero = node_registry.make<Constant>(element::i64, Shape{}, 0);
106-
const auto one = node_registry.make<Constant>(element::i64, Shape{}, 1);
107-
const auto two = node_registry.make<Constant>(element::i64, Shape{}, 2);
104+
node_registry.make<Constant>(element::i32, Shape{padding_end.size()}, padding_end);
105+
const auto zero = node_registry.make<Constant>(element::i32, Shape{}, 0);
106+
const auto one = node_registry.make<Constant>(element::i32, Shape{}, 1);
107+
const auto two = node_registry.make<Constant>(element::i32, Shape{}, 2);
108108

109109
const auto pads_size = max_pool_v14->get_pads_begin().size();
110-
const auto pads_len = node_registry.make<Constant>(element::i64, Shape{}, pads_size);
110+
const auto pads_len = node_registry.make<Constant>(element::i32, Shape{}, pads_size);
111111
const auto pads_remaining =
112-
node_registry.make<Constant>(element::i64, Shape{2}, std::vector<int64_t>{0, 0});
112+
node_registry.make<Constant>(element::i32, Shape{2}, std::vector<int64_t>{0, 0});
113113

114114
// gather input spatial dims and prepare for compare as values (in_dim + pad)
115-
const auto end = node_registry.make<Constant>(element::i64, Shape{}, pads_size + 2);
116-
const auto dim_idxs = node_registry.make<Range>(two, end, one, element::i64);
117-
const auto shape = node_registry.make<ShapeOf>(input, element::i64);
115+
const auto end = node_registry.make<Constant>(element::i32, Shape{}, pads_size + 2);
116+
const auto dim_idxs = node_registry.make<Range>(two, end, one, element::i32);
117+
const auto shape = node_registry.make<ShapeOf>(input, element::i32);
118118
const auto gth_in_dims = node_registry.make<Gather>(shape, dim_idxs, zero);
119119
const auto in_left_padded = node_registry.make<Add>(gth_in_dims, padding_begin_node);
120120

@@ -126,10 +126,10 @@ ov::pass::ConvertMaxPool14ToMaxPool8::ConvertMaxPool14ToMaxPool8() {
126126
max_pool_v14->get_pads_end(),
127127
max_pool_v14->get_kernel(),
128128
ov::op::RoundingType::CEIL);
129-
const auto shape_of_mp = node_registry.make<ShapeOf>(mp, element::i64);
129+
const auto shape_of_mp = node_registry.make<ShapeOf>(mp, element::i32);
130130
const auto gth_out_dims = node_registry.make<Gather>(shape_of_mp, dim_idxs, zero);
131131
const auto out_sub_one = node_registry.make<Subtract>(gth_out_dims, one);
132-
const auto stride_node = node_registry.make<Constant>(element::i64, Shape{strides.size()}, strides);
132+
const auto stride_node = node_registry.make<Constant>(element::i32, Shape{strides.size()}, strides);
133133
const auto out_mul_stride = node_registry.make<Multiply>(out_sub_one, stride_node);
134134

135135
// if (in_dim + pad) > ((out_dim - 1) * stride) sliding window in bound use end padding.

src/common/transformations/tests/op_conversions/convert_maxpool_downgrade_test.cpp

+12-12
Original file line numberDiff line numberDiff line change
@@ -91,20 +91,20 @@ std::shared_ptr<ov::Model> create_ceil_torch_workaround_model(const ov::op::Roun
9191
const ov::Strides strides{2, 2}, dilations{1, 1};
9292
ov::Shape pads_begin{1, 1}, pads_end{1, 1}, kernel{2, 2};
9393

94-
const auto padding_begin_node = Constant::create(ov::element::i64, ov::Shape{pads_begin.size()}, pads_begin);
95-
const auto padding_end_node = Constant::create(ov::element::i64, ov::Shape{pads_end.size()}, pads_end);
96-
const auto zero = Constant::create(ov::element::i64, ov::Shape{}, {0});
97-
const auto one = Constant::create(ov::element::i64, ov::Shape{}, {1});
98-
const auto two = Constant::create(ov::element::i64, ov::Shape{}, {2});
94+
const auto padding_begin_node = Constant::create(ov::element::i32, ov::Shape{pads_begin.size()}, pads_begin);
95+
const auto padding_end_node = Constant::create(ov::element::i32, ov::Shape{pads_end.size()}, pads_end);
96+
const auto zero = Constant::create(ov::element::i32, ov::Shape{}, {0});
97+
const auto one = Constant::create(ov::element::i32, ov::Shape{}, {1});
98+
const auto two = Constant::create(ov::element::i32, ov::Shape{}, {2});
9999

100100
const auto pads_size = pads_begin.size();
101-
const auto pads_len = Constant::create(ov::element::i64, ov::Shape{}, {pads_size});
102-
const auto pads_remaining = Constant::create(ov::element::i64, ov::Shape{2}, {0, 0});
101+
const auto pads_len = Constant::create(ov::element::i32, ov::Shape{}, {pads_size});
102+
const auto pads_remaining = Constant::create(ov::element::i32, ov::Shape{2}, {0, 0});
103103

104104
// gather input spatial dims and prepare for compare as values (in_dim + pad)
105-
const auto end = Constant::create(ov::element::i64, ov::Shape{}, {pads_size + 2});
106-
const auto dim_idxs = std::make_shared<Range>(two, end, one, ov::element::i64);
107-
const auto shape = std::make_shared<ShapeOf>(input, ov::element::i64);
105+
const auto end = Constant::create(ov::element::i32, ov::Shape{}, {pads_size + 2});
106+
const auto dim_idxs = std::make_shared<Range>(two, end, one, ov::element::i32);
107+
const auto shape = std::make_shared<ShapeOf>(input, ov::element::i32);
108108
const auto gth_in_dims = std::make_shared<Gather>(shape, dim_idxs, zero);
109109
const auto in_left_padded = std::make_shared<Add>(gth_in_dims, padding_begin_node);
110110

@@ -116,10 +116,10 @@ std::shared_ptr<ov::Model> create_ceil_torch_workaround_model(const ov::op::Roun
116116
pads_end,
117117
kernel,
118118
ov::op::RoundingType::CEIL);
119-
const auto shape_of_mp = std::make_shared<ShapeOf>(mp, ov::element::i64);
119+
const auto shape_of_mp = std::make_shared<ShapeOf>(mp, ov::element::i32);
120120
const auto gth_out_dims = std::make_shared<Gather>(shape_of_mp, dim_idxs, zero);
121121
const auto out_sub_one = std::make_shared<Subtract>(gth_out_dims, one);
122-
const auto stride_node = Constant::create(ov::element::i64, ov::Shape{strides.size()}, strides);
122+
const auto stride_node = Constant::create(ov::element::i32, ov::Shape{strides.size()}, strides);
123123
const auto out_mul_stride = std::make_shared<Multiply>(out_sub_one, stride_node);
124124

125125
// if (in_dim + pad) > ((out_dim - 1) * stride) sliding window in bound use end padding.

src/inference/include/openvino/runtime/intel_npu/level_zero/level_zero.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ class ZeroContext : public RemoteContext {
100100
}
101101

102102
/**
103-
* @brief This function is used to obtain remote tensor object from user-supplied Direct3D 12 Core object
103+
* @brief This function is used to obtain remote tensor object from user-supplied NT handle object
104104
* @param type Tensor element type
105105
* @param shape Tensor shape
106106
* @param buffer A void* object that should be wrapped by a remote tensor

src/plugins/intel_gpu/src/kernel_selector/cl_kernels/reorder_data.cl

+15-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,15 @@ KERNEL (reorder_data)(
2727
#endif
2828
)
2929
{
30+
#if INPUT0_LAYOUT_BYFX
31+
// GWS_FEATURE takes Y for byfx format
32+
const uint b = get_global_id(GWS_BATCH);
33+
const uint y = get_global_id(GWS_FEATURE);
34+
#else
3035
const uint b = get_global_id(GWS_BATCH);
3136
const uint f = get_global_id(GWS_FEATURE);
37+
#endif
38+
3239
#if INPUT0_DIMS == 2
3340
const uint y = 0;
3441
const uint x = 0;
@@ -37,8 +44,14 @@ KERNEL (reorder_data)(
3744
const uint u = 0;
3845
const uint v = 0;
3946
#elif INPUT0_DIMS == 4
40-
const uint y = ((uint)(get_global_id(GWS_YX))) / INPUT0_SIZE_X;
41-
const uint x = ((uint)(get_global_id(GWS_YX))) % INPUT0_SIZE_X;
47+
#if INPUT0_LAYOUT_BYFX
48+
// GWS_YX takes (F and X) axes for byfx format
49+
const uint f = ((uint)(get_global_id(GWS_YX))) / INPUT0_SIZE_X;
50+
const uint x = ((uint)(get_global_id(GWS_YX))) % INPUT0_SIZE_X;
51+
#else
52+
const uint y = ((uint)(get_global_id(GWS_YX))) / INPUT0_SIZE_X;
53+
const uint x = ((uint)(get_global_id(GWS_YX))) % INPUT0_SIZE_X;
54+
#endif
4255
const uint z = 0;
4356
const uint w = 0;
4457
const uint u = 0;

src/plugins/intel_gpu/src/kernel_selector/kernels/reorder/reorder_kernel_base.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,12 @@ ReorderKernelBase::DispatchData ReorderKernelBase::SetDefault(const reorder_para
189189
dispatchData.lws[0] = 1;
190190
dispatchData.lws[1] = 16;
191191
dispatchData.lws[2] = 1;
192+
} else if (input_l == DataLayout::byfx) {
193+
auto first_primary_axis_size = dispatchData.gws[0]; // X axis
194+
auto second_primiary_axis_size = dispatchData.gws[1]; // YF axes
195+
dispatchData.gws[0] = first_primary_axis_size * input.Feature().v; // takes XF axes
196+
dispatchData.gws[1] = second_primiary_axis_size / input.Feature().v; // takes Y axis
197+
dispatchData.lws = {1, 1, 1};
192198
}
193199

194200
return dispatchData;

src/plugins/intel_gpu/tests/unit/fusions/gemm_fusion_test.cpp

+38
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ class GemmFusingTest : public ::BaseFusingTest<gemm_test_params> {
142142
#define CASE_GEMM_PERMUTES_FUSION_FP16_3 { { 17, 11, 2, 18 }, { 17, 11, 18, 4 } }, { 17, 11, 2, 4 }, data_types::f16, data_types::f16, data_types::f16, format::bfyx, data_types::f16, format::bfyx
143143
#define CASE_GEMM_PERMUTES_FUSION_FP16_4 { { 3, 2, 10, 12 }, { 3, 2, 12, 20 } }, { 3, 2, 10, 20 }, data_types::f16, data_types::f16, data_types::f16, format::bfyx, data_types::f16, format::bfyx
144144
#define CASE_GEMM_PERMUTES_FUSION_FP16_5 { { 3, 2, 16, 32 }, { 3, 2, 32, 16} }, { 3, 2, 16, 16 }, data_types::f16, data_types::f16, data_types::f16, format::bfyx, data_types::f16, format::bfyx
145+
#define CASE_GEMM_PERMUTES_FUSION_FP16_6 { { 3, 2, 16, 32 }, { 3, 16, 2, 32} }, { 3, 2, 2, 32 }, data_types::f16, data_types::f16, data_types::f16, format::bfyx, data_types::f16, format::bfyx
146+
145147
class gemm_3in_quantize_i8 : public GemmFusingTest {};
146148
TEST_P(gemm_3in_quantize_i8, basic) {
147149
// TODO: Fix me, refer PR(#15873)
@@ -757,4 +759,40 @@ INSTANTIATE_TEST_SUITE_P(
757759
gemm_test_params{CASE_GEMM_PERMUTES_FUSION_FP16_3, 3, 6, "", broadcast_kinds::feature/*dummy*/, eltwise_mode::sum/*dummy*/, {{0, 2, 1, 3} /*byfx*/, {1, 2, 3, 0} /*xbfy*/, {0, 2, 1, 3} /*byfx*/}},
758760
}));
759761

762+
class permute_gemm_reorder : public GemmFusingTestOneDNN {};
763+
TEST_P(permute_gemm_reorder, fused_permute_gemm_with_reorder) {
764+
auto p = GetParam();
765+
auto in_lay0 = get_input_layout(p, 0);
766+
auto in_lay1 = get_input_layout(p, 1);
767+
auto permute_in_lay0 = get_permute_input_shape(in_lay0.get_shape(), p.permute_orders[0]);
768+
auto permute_in_lay1 = get_permute_input_shape(in_lay1.get_shape(), p.permute_orders[1]);
769+
in_lay0.set_partial_shape(permute_in_lay0);
770+
in_lay1.set_partial_shape(permute_in_lay1);
771+
create_topologies(
772+
input_layout("input0", in_lay0),
773+
input_layout("input1", in_lay1),
774+
permute("permute0", input_info("input0"), p.permute_orders[0]),
775+
reorder("reorder_permute", input_info("permute0"), p.default_format, data_types::f32),
776+
permute("permute1", input_info("input1"), p.permute_orders[1]),
777+
gemm("gemm_prim", { input_info("permute0"), input_info("permute1") }, data_types::f16),
778+
reorder("reorder_bfyx", input_info("gemm_prim"), p.default_format, data_types::f32),
779+
eltwise("eltwise", { input_info("reorder_permute"), input_info("reorder_bfyx") }, eltwise_mode::sum, data_types::f32)
780+
);
781+
782+
tolerance = default_tolerance(data_types::f16);
783+
execute(p, false);
784+
}
785+
786+
#define CASE_PERMUTES_GEMM_FUSION_FP16_1 { { 1, 12, 20, 64 }, { 1, 12, 64, 64 } }, { 1, 12, 20, 64 }, data_types::f16, data_types::f16, data_types::f16, format::bfyx, data_types::f16, format::bfyx
787+
#define CASE_PERMUTES_GEMM_FUSION_FP16_2 { { 3, 2, 10, 12 }, { 3, 2, 12, 1 } }, { 3, 2, 10, 1 }, data_types::f16, data_types::f16, data_types::f16, format::bfyx, data_types::f16, format::bfyx
788+
789+
INSTANTIATE_TEST_SUITE_P(
790+
fusings_gpu, permute_gemm_reorder, ::testing::ValuesIn(std::vector<gemm_test_params>{
791+
gemm_test_params{CASE_PERMUTES_GEMM_FUSION_FP16_1, 4, 6, "", broadcast_kinds::feature/*dummy*/, eltwise_mode::sum/*dummy*/, {{0, 2, 1, 3} /*byfx*/, {0, 2, 1, 3} /*byfx*/}},
792+
gemm_test_params{CASE_PERMUTES_GEMM_FUSION_FP16_1, 4, 6, "", broadcast_kinds::feature/*dummy*/, eltwise_mode::sum/*dummy*/, {{0, 2, 1, 3} /*byfx*/, {1, 2, 3, 0} /*xbfy*/}},
793+
gemm_test_params{CASE_PERMUTES_GEMM_FUSION_FP16_2, 4, 6, "", broadcast_kinds::feature/*dummy*/, eltwise_mode::sum/*dummy*/, {{0, 2, 1, 3} /*byfx*/, {0, 2, 1, 3} /*byfx*/}},
794+
gemm_test_params{CASE_PERMUTES_GEMM_FUSION_FP16_2, 4, 6, "", broadcast_kinds::feature/*dummy*/, eltwise_mode::sum/*dummy*/, {{0, 2, 1, 3} /*byfx*/, {1, 2, 3, 0} /*xbfy*/}},
795+
}));
796+
797+
760798
#endif // ENABLE_ONEDNN_FOR_GPU

src/plugins/intel_npu/src/backend/src/zero_init.cpp

+15-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
#include "ze_command_queue_npu_ext.h"
1111
#include "zero_utils.hpp"
1212

13+
#ifdef _WIN32
14+
namespace {
15+
constexpr uint32_t WIN_DRIVER_NO_MCL_SUPPORT = 2688;
16+
} // namespace
17+
#endif
18+
1319
namespace intel_npu {
1420

1521
const ze_driver_uuid_t ZeroInitStructsHolder::uuid = ze_intel_npu_driver_uuid;
@@ -169,9 +175,15 @@ ZeroInitStructsHolder::ZeroInitStructsHolder() : log("NPUZeroInitStructsHolder",
169175
std::make_unique<ze_graph_dditable_ext_decorator>(graph_ddi_table_ext, driver_ext_version);
170176

171177
// Query the mutable command list version
172-
std::string mutable_comamnd_list_name;
173-
log.debug("ZeroInitStructsHolder - tie output of queryMutableCommandListVersion");
174-
mutable_command_list_version = queryMutableCommandListVersion(extProps, count);
178+
#ifdef _WIN32
179+
// The 2688 Windows driver version doesn't support as expected the MutableCommandList feature
180+
if (driver_properties.driverVersion != WIN_DRIVER_NO_MCL_SUPPORT) {
181+
#endif
182+
log.debug("ZeroInitStructsHolder - tie output of queryMutableCommandListVersion");
183+
mutable_command_list_version = queryMutableCommandListVersion(extProps, count);
184+
#ifdef _WIN32
185+
}
186+
#endif
175187

176188
log.debug("Mutable command list version %d.%d",
177189
ZE_MAJOR_VERSION(mutable_command_list_version),

src/plugins/intel_npu/src/backend/src/zero_pipeline.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ struct IntegratedPipeline final : public Pipeline {
275275
};
276276

277277
void updateCommandList(const TensorData& tensors_data, uint32_t index, size_t batch_size) override {
278-
OV_ITT_TASK_CHAIN(ZERO_EXECUTOR_IP_PULL,
278+
OV_ITT_TASK_CHAIN(ZERO_EXECUTOR_IP_UMCL,
279279
itt::domains::LevelZeroBackend,
280280
"IntegratedPipeline",
281281
"updateCommandList");

0 commit comments

Comments
 (0)