From 236a854be935bb219dd507f55e307ae3719f779a Mon Sep 17 00:00:00 2001 From: Oleg Pipikin Date: Tue, 19 Nov 2024 19:53:16 +0100 Subject: [PATCH 01/24] Add sdl required flags to debug build on Windows (#27592) ### Details: - Add sdl required flags to debug build on Windows ### Tickets: - CVS-157306 --- .../developer_package/compile_flags/sdl.cmake | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/cmake/developer_package/compile_flags/sdl.cmake b/cmake/developer_package/compile_flags/sdl.cmake index 34ad5904519e7f..35f59cb8970573 100644 --- a/cmake/developer_package/compile_flags/sdl.cmake +++ b/cmake/developer_package/compile_flags/sdl.cmake @@ -55,11 +55,20 @@ if(ENABLE_INTEGRITYCHECK) set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /INTEGRITYCHECK") endif() -set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${OV_C_CXX_FLAGS}") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OV_C_CXX_FLAGS}") -set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} ${OV_LINKER_FLAGS}") -set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} ${OV_LINKER_FLAGS}") -set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${OV_LINKER_FLAGS}") +if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" OR (OV_COMPILER_IS_INTEL_LLVM AND WIN32)) + # add sdl required flags to both Debug and Release on Windows + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OV_C_CXX_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OV_C_CXX_FLAGS}") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${OV_LINKER_FLAGS}") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${OV_LINKER_FLAGS}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OV_LINKER_FLAGS}") +else() + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${OV_C_CXX_FLAGS}") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OV_C_CXX_FLAGS}") + set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} ${OV_LINKER_FLAGS}") + set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} ${OV_LINKER_FLAGS}") + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${OV_LINKER_FLAGS}") +endif() unset(OV_C_CXX_FLAGS) unset(OV_LINKER_FLAGS) From 4f75ab9b00e9c600d585900f9a8c7dacfd340a9c Mon Sep 17 00:00:00 2001 From: Karol Blaszczak Date: Tue, 19 Nov 2024 23:24:53 +0100 Subject: [PATCH 02/24] [DOCS] relnotes 24.5 pass2 (#27621) port: https://github.com/openvinotoolkit/openvino/pull/27616 --- .../about-openvino/performance-benchmarks.rst | 6 +- .../about-openvino/release-notes-openvino.rst | 74 +- .../OV-2024.5-platform_list.pdf | Bin 191948 -> 193350 bytes .../benchmarks_files/data/graph-data-ov.json | 1724 +++-------------- .../benchmarks_files/graph-config.json | 18 + 5 files changed, 350 insertions(+), 1472 deletions(-) diff --git a/docs/articles_en/about-openvino/performance-benchmarks.rst b/docs/articles_en/about-openvino/performance-benchmarks.rst index d874d1808f7aaf..8a58dc27df1f83 100644 --- a/docs/articles_en/about-openvino/performance-benchmarks.rst +++ b/docs/articles_en/about-openvino/performance-benchmarks.rst @@ -13,7 +13,7 @@ Performance Benchmarks Efficient LLMs for AI PC Performance Information F.A.Q. OpenVINO Accuracy - Getting Performance Numbers + Getting Performance Numbers This page presents benchmark results for the @@ -160,10 +160,10 @@ For a listing of all platforms and configurations used for testing, refer to the **Disclaimers** * Intel® Distribution of OpenVINO™ toolkit performance results are based on release - 2024.3, as of July 31, 2024. + 2024.5, as of November 20, 2024. * OpenVINO Model Server performance results are based on release - 2024.3, as of Aug. 19, 2024. + 2024.4, as of Sept. 30, 2024. The results may not reflect all publicly available updates. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software, or service diff --git a/docs/articles_en/about-openvino/release-notes-openvino.rst b/docs/articles_en/about-openvino/release-notes-openvino.rst index dc82009b402593..343c9e780f05dc 100644 --- a/docs/articles_en/about-openvino/release-notes-openvino.rst +++ b/docs/articles_en/about-openvino/release-notes-openvino.rst @@ -28,21 +28,22 @@ OpenVINO Release Notes What's new +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -* More Gen AI coverage and framework integrations to minimize code changes. +* More GenAI coverage and framework integrations to minimize code changes. * New models supported: Llama 3.2 (1B & 3B), Gemma 2 (2B & 9B), and YOLO11. - * LLM support on NPU: Llama 3 8B, Llama 2 7B, Mistral-v0.2-7B, Qwen2-7B-Instruct and Phi-3 Mini. + * LLM support on NPU: Llama 3 8B, Llama 2 7B, Mistral-v0.2-7B, Qwen2-7B-Instruct and Phi-3 + Mini-Instruct. * Noteworthy notebooks added: Sam2, Llama3.2, Llama3.2 - Vision, Wav2Lip, Whisper, and Llava. - Preview: Support for Flax, a high-performance Python neural network library based on JAX. + * Preview: support for Flax, a high-performance Python neural network library based on JAX. Its modular design allows for easy customization and accelerated inference on GPUs. * Broader Large Language Model (LLM) support and more model compression techniques. - * Optimizations for built-in GPUs on Intel® Core Ultra Processors (Series 1) and Intel® Arc™ + * Optimizations for built-in GPUs on Intel® Core™ Ultra Processors (Series 1) and Intel® Arc™ Graphics include KV Cache compression for memory reduction along with improved usability, and model load time optimizations to improve first token latency for LLMs. * Dynamic quantization was enabled to improve first token latency for LLMs on built-in - Intel® GPUs without impacting accuracy on Intel Core Ultra Processors (Series 1). Second + Intel® GPUs without impacting accuracy on Intel® Core™ Ultra Processors (Series 1). Second token latency will also improve for large batch inference. * A new method to generate synthetic text data is implemented in the Neural Network Compression Framework (NNCF). This will allow LLMs to be compressed more accurately using @@ -52,9 +53,9 @@ What's new * More portability and performance to run AI at the edge, in the cloud, or locally. * Support for - `Intel® Xeon 6 Processors with P-cores `__ + `Intel® Xeon® 6 Processors with P-cores `__ (formerly codenamed Granite Rapids) and - `Intel® Core Ultra 200V series processors `__ + `Intel® Core™ Ultra 200V series processors `__ (formerly codenamed Arrow Lake-S). * Preview: GenAI API enables multimodal AI deployment with support for multimodal pipelines for improved contextual awareness, transcription pipelines for easy audio-to-text @@ -95,9 +96,9 @@ Common CPU Device Plugin ----------------------------------------------------------------------------------------------- -* Gold support of the Intel Xeon 6 platform with P-cores (formerly code name Granite Rapids) +* Gold support of the Intel® Xeon® 6 platform with P-cores (formerly code name Granite Rapids) has been reached. -* Support of Intel® Core Ultra 200V series processors (formerly codenamed Arrow Lake-S) has +* Support of Intel® Core™ Ultra 200V series processors (formerly codenamed Arrow Lake-S) has been implemented. * LLM performance has been further improved with Rotary Position Embedding optimization; Query, Key, and Value; and multi-layer perceptron fusion optimization. @@ -117,7 +118,7 @@ GPU Device Plugin * A new feature of GPU weightless blob caching enables caching model structure only and reusing the weights from the original model file. Use the new OPTIMIZE_SIZE property to activate. * Dynamic quantization with INT4 and INT8 precisions has been implemented and enabled by - default on Intel Core Ultra platforms, improving LLM first token latency. + default on Intel® Core™ Ultra platforms, improving LLM first token latency. NPU Device Plugin @@ -138,14 +139,11 @@ NPU Device Plugin * LLM-related improvements have been implemented in terms of both memory usage and performance. * AvgPool and MaxPool operator support has been extended, adding support for more PyTorch models. -* NOTE: for systems based on Intel® Core Ultra Processors Series 2, more than 16GB of RAM may +* NOTE: for systems based on Intel® Core™ Ultra Processors Series 2, more than 16GB of RAM may be required to use larger models, such as Llama-2-7B, Mistral-0.2-7B, and Qwen-2-7B - (exceeding 4b parameters). + (exceeding 4B parameters) with prompt sizes over 1024 tokens. - prompts longer then 1024 characters will not work with a model of 7B or more parameters, - such as . - OpenVINO Python API ----------------------------------------------------------------------------------------------- @@ -328,17 +326,17 @@ Known Issues | Description: | Description: When using new version of Transformer version to convert some of LLMs (GPT-J/GPT-NeoX or falcon-7b), the inference accuracy may be impacted on 4th or 5th - generation of Xeon CPU platforms, due to model structure update triggering inference + generation of Intel® Xeon® processors, due to model structure update triggering inference precision difference in part of the model. The workaround is to use transformer version of 4.44.2 or lower. | **Component: GPU Plugin** | ID: 154583 | Description: -| LLM accuracy can be low especially on non-systolic platform like Intel Core Ultra. When +| LLM accuracy can be low especially on non-systolic platforms like Intel® Core™ Ultra. When facing the low accuracy issue, user needs to manually set a config ACTIVATION_SCALING_FACOTR - with a value 8.0 in compile_model() function. From the next release, scaling factor value - will be automatically applied through updated IR. + with a value of 8.0 in the compile_model() function. From the next release, scaling factor + value will be automatically applied through updated IR. | **Component: GenAI** | ID: 156437, 148933 @@ -402,7 +400,7 @@ Previous 2024 releases * More portability and performance to run AI at the edge, in the cloud, or locally. - * Support for Intel® Core Ultra Processors Series 2 (formerly codenamed Lunar Lake) on Windows. + * Support for Intel® Core™ Ultra Processors Series 2 (formerly codenamed Lunar Lake) on Windows. * OpenVINO™ Model Server now comes with production-quality support for OpenAI-compatible API which enables significantly higher throughput for parallel inferencing on Intel® Xeon® processors when serving LLMs to many concurrent users. @@ -450,10 +448,10 @@ Previous 2024 releases * 1st token performance with Llama series of models, with additional CPU operator optimization (such as MLP, SDPA) on BF16 precision. * Default oneTBB version on Linux is now 2021.13.0, improving overall performance on latest - Intel XEON platforms. + Intel® Xeon® platforms. * MXFP4 weight compression models (compressing weights to 4-bit with the e2m1 data type - without a zero point and with 8-bit e8m0 scales) have been optimized for Xeon platforms - thanks to fullyconnected compressed weight LLM support. + without a zero point and with 8-bit e8m0 scales) have been optimized for Intel® Xeon® + platforms thanks to fullyconnected compressed weight LLM support. * The following has been fixed: @@ -622,7 +620,7 @@ Previous 2024 releases | ID: CVS-150542, CVS-145996 | Description: | The upgrade of default oneTBB on Linux platforms to 2021.13.0 improves overall - performance on latest Intel XEON platform but causes regression in some cases. Limit the + performance on latest Intel® Xeon® platform but causes regression in some cases. Limit the threads usage of postprocessing done by Torch can mitigate the regression (For example: torch.set_num_threads(n), n can be 1, beam search number, prompt batch size or other numbers). @@ -949,7 +947,7 @@ Previous 2024 releases * Preview: addition of the :doc:`Generate API <../learn-openvino/llm_inference_guide/genai-guide>`, a simplified API for text generation using large language models with only a few lines of code. The API is available through the newly launched OpenVINO GenAI package. - * Support for Intel Atom® Processor X Series. For more details, see :doc:`System Requirements <./release-notes-openvino/system-requirements>`. + * Support for Intel® Atom® Processor X Series. For more details, see :doc:`System Requirements <./release-notes-openvino/system-requirements>`. * Preview: Support for Intel® Xeon® 6 processor. **OpenVINO™ Runtime** @@ -973,8 +971,8 @@ Previous 2024 releases *CPU Device Plugin* * Performance when using latency mode in FP32 precision has been improved on Intel client - platforms, including Core Ultra (formerly codenamed Meteor Lake) and 13th Gen Core processors - (formerly codenamed Raptor Lake). + platforms, including Intel® Core™ Ultra (formerly codenamed Meteor Lake) and 13th Gen Core + processors (formerly codenamed Raptor Lake). * 2nd token latency and memory footprint for FP16 LLMs have been improved significantly on AVX2 and AVX512 based CPU platforms, particularly for small batch sizes. * PagedAttention has been optimized on AVX2, AVX512 and AMX platforms together with INT8 KV cache @@ -988,9 +986,9 @@ Previous 2024 releases * Both first token and average token latency of LLMs is improved on all GPU platforms, most significantly on discrete GPUs. Memory usage of LLMs has been reduced as well. - * Stable Diffusion FP16 performance improved on Core Ultra platforms, with significant pipeline - improvement for models with dynamic-shaped input. Memory usage of the pipeline has been reduced, - as well. + * Stable Diffusion FP16 performance improved on Intel® Core™ Ultra platforms, with significant + pipeline improvement for models with dynamic-shaped input. Memory usage of the pipeline + has been reduced, as well. * Optimized permute_f_y kernel performance has been improved. *NPU Device Plugin* @@ -1045,7 +1043,7 @@ Previous 2024 releases * OpenVINO Model server can be now used for text generation use cases using OpenAI compatible API. * Added support for continuous batching and PagedAttention algorithms for text generation with - fast and efficient in high concurrency load especially on Intel Xeon processors. + fast and efficient in high concurrency load especially on Intel® Xeon® processors. `Learn more about it `__. **Neural Network Compression Framework** @@ -1088,8 +1086,9 @@ Previous 2024 releases | Description: | In 2024.2, oneTBB 2021.2.x is used for Intel Distribution of OpenVINO Ubuntu and Red Hat archives, instead of system TBB/oneTBB. This improves performance on the new generation of - Xeon platforms but may increase latency of some models on the previous generation. You can - build OpenVINO with **-DSYSTEM_TBB=ON** to get better latency performance for these models. + Intel® Xeon® platforms but may increase latency of some models on the previous generation. + You can build OpenVINO with **-DSYSTEM_TBB=ON** to get better latency performance for + these models. | **Component: python API** | ID: CVS-141744 @@ -1598,10 +1597,11 @@ Previous 2024 releases | **Component: CPU runtime** | *ID:* N/A | *Description:* - | Performance results (first token latency) may vary from those offered by the previous OpenVINO version, for - “latency” hint inference of LLMs with long prompts on Xeon platforms with 2 or more - sockets. The reason is that all CPU cores of just the single socket running the application - are employed, lowering the memory overhead for LLMs when numa control is not used. + | Performance results (first token latency) may vary from those offered by the previous + OpenVINO version, for “latency” hint inference of LLMs with long prompts on Intel® Xeon® + platforms with 2 or more sockets. The reason is that all CPU cores of just the single + socket running the application are employed, lowering the memory overhead for LLMs when + numa control is not used. | *Workaround:* | The behavior is expected but stream and thread configuration may be used to include cores from all sockets. diff --git a/docs/sphinx_setup/_static/benchmarks_files/OV-2024.5-platform_list.pdf b/docs/sphinx_setup/_static/benchmarks_files/OV-2024.5-platform_list.pdf index 8e57fde69d60c3efde43d68c1001c19a499eb4ab..9cb20570020cc8fb73ccafb23ee817dfeab1c4ff 100644 GIT binary patch delta 21848 zcma&MWmsKHuq_%i1Shy#aCe8`t^tC(yF;*v6Wrb1J-9<~4;nPMyZc*Y?|tq&-+e#c zpV_0UYjjmtSJ#|huQj>^*S`Z7?GDBo=;UCmZ;b%!mfo(pksPVFD>yub!9P zR0}T>%me<0MY|rTLy%9BfC(=mM~}nd?|t#ELHgV@AqP~CHjevm?suN-r-cl^Z&|Pl zlUP{z00GBoc@`coBwGc$Ac~`PtICZfI5#>5`^jqo(^r!sfg@Rh%*sZQv|8M^Cq8@U7w0Yb{sJV8_~`{!Sp zzJ1>}7Ad9~Jc^8Nma}JZ$DEQMkl$qyP_f(jv%P*@>NmF1U&!~VkhbPq9SSFI6=E!0 zJAY5*yYU0eGrU5GodHeG+%sA4*Gj+oC3Mw&gn1KqTJBnT?SNaJm&f=1z*Jw=St23f zA0P!kLOda=(jZ_h0YF)V9L+!>jnp0Aad#g?jt!dk|BYAu`n@_Utsm@HzAHVx5ci(jq`RU$ zn0}WSCf05=m@}~3d^p#XEpFc7_D9d&(3zPsEwvp@fK!XIK4w#dne(23d*aLPw%}0k zlyBzexcB?fmCB4Vnw$@PPteN0SnZA)3j+gT(N}iC8x!-P#%-2`wFD{$SgG)EP`F5& z2{PE`$SqP*wJTkMoT1J>J@R)yeP@=n$5PV1?tW)PN(J})PYmOd-IvGV`@>}U0ogR?yDq-n?X%MfAFVr;_(%s z3F_x5gGX|~j7FnFUL@kGs!=5jVV6mJ=3t|Zzh}#@TpcmU!3KALj2;a{N63XRPwE_Dp~G2<*@N5>YS zWLoP_AHg?gYugZ%7kl=ki$ccNI_SvpBkMo;{>+jQIl|*cuMr4{s!bAEHQ9XMpF$2{ zCeDxcV3z7p!?br?KR20JF#q1*g21Jl>-q)AeH){fLb7%-uV|XXUD$pk;rs36D=(Wk-GV^@z@a~P& z?!2s;%2DWLEp z!Hv{wn63G`=K8LZ({~@`cmO?bodLbr=h&Fx4sRvRsmb{5MMg{frWnIy-HvDYGlTjl zirZ?|NKwxtX~^{Cw0_)PN>y|Qiv=qD27Qk1zJO=)BNv{dc#frNoY{{^66ZRl z8HRx%966zw2+n$YHHFAOPF_WX!l<}racQQ!os_C69)t`N7K0yH*hw0N3|GFn4k8fu z&Ji_S(9{sK2#fz|%fcO&kUSh+pr8{V;@aSTmj^*Jhb*N`Fj|c;GLZ;3C|TSL&{^-3 zqz!DRWRXDCe)ZyTP5H{GRIdppy-{|;#B|MI8$MJi@}76V zNS!O5Z-HWxb8>1*Jm%8qj~<6vFE*VHE5#k{SyU9vZqllsdfb(KNS~XlnVR(Z382z4 z-+!lDB^~TVV?fcRO_qBwNxWUL?(`pv@&vvpSC)ttzIx|rjs~Tz*35Q;0gucyOANMl z$2aOyMT|LVK{#5D5SYCx_;lTp4Ou@w-ag}ce%$p!AR(J#{|-ws+Qbyz;;P+Pk3^Ny z05&rxPOpuGoCgqc1l$B;Yk`TY*CC__#)w7v!nIHLSf9?qa!XUyGJ*5-iD%p*U<=(V z2;(m+@CPRoFWQTi?Ish)0QnPVT=*{SPnP7Z=4>34a1Fj+7%u~v>}EA3N-7bcY?dEf zu;N1(_0+cQI!jT4^6;jy7+3AhQ}riPv|Tvct=gf8ngi6oNS^G`Yn5|7jIGpdUw?#) zksX#1H@#+e`Mz-#%3I2G1=!<#~-MvXFr+G^WOQ#G@lEDrPWC?6o94;Bie%A&IPB%1m zb4f^o8h?1+zc}ARM^x9z#7siWO7Ca?DDUk*zsq~z?yOyxR;^UFVou>vvF?wcsBUO4 zPFaegv^uoQCG;U zMA&1G4{iHE)+6VQzU>8xp=iwkAn@sIDSl3CKaCJfHvdC$kA%NGbZ+4%N|l_!W~B(^ zXatRQzljKPbdno})Y|Ns0FvwzUvg1a?B(L{v1P1m;m5?`2>DKj20TJmn{(=l^v0c z!2vF9YARSF5qL3_f+EsXMl4Ne-2GV*bJ7}JR4)5DF!vJ{Wi6O=b*On0gUSOX9CT z7-QU2JRZQ#!u7wuT?;bCB59lL18)^1880DCzDmOCEcta0q?>C>uPM8L%3HIDz9W|jIG7k^q9Fl~9BuA{r( zVupsr*?JwB`3VQ1Ur&=W7A`zeE^(A0FUj~14{5s+oug$@%UOo6%fd(y%a=|fzDc=L z)@(NBp94Nj=Goio3q+BlP!QtNsZST~+hrR(SYBe7`dwrpn;GaGIdvw0ub}NZq*Jt* zzaTJnKb(M=1_8|%bYg;7K=)&MeHU6_%YK~)?ik)30b(%DM$^pnm+jsc9j9d>p0G?| z&F$R7IrjvS`HBw^h&HI=4jNUFV$zZy#Qc0~Ts@J_^SVFFc?Y;?6in&Sf?D@HCLQB5 zCy|Em?$hk;X8D1bkagfDzy+g!=8N}i85&md$N5}ET{abORvk87R_^fesJXI48N;4G z`&{kRqzfp?8n^qLJ@<1c`-@BhJaWYl!}xr~dDA{~GEXqaqk<3`PRav7LgWE9L9-io z5#kO;IHX}#Bq`VBNb)lj>0UY{R9$wG?@+qAlL>@?M*0qGG7|7zIC!3s$J`F_{7Qqf z%#3mC@v29%>y$AxS=QqdrW2M2XMBHl-I=0c7QMHree_+iBEz)A5o%{IDr`j0>ACJx za`12TgQGtPKidr1ucpjDhq07i5~eF=Z0eqgnDWj^@#qfpO~=@iYO_+;B^7PL>~Kep z&QpH>791tk-I)zs;;^x-V8Z7M4cv*Bv3?BiJI&5mfifc7K@m7$ghu$m3tBQWMW??D z#zmE(#wc8j;DA0Y&OF>yzj$=YpcvL4iIb;dFxnKc!0zewD|MO(ME@evHHwf~Cc2#) zZf0ZVYi?#6&;yT&g4`QanD|G9MEc8kGJz*t&(9?CyILGBNTF^FXG ztj5|J1#ZYGBnwacehpe7@dZI?4+>(wcKc0>n|uQ+v4=k{@SKwR!D#$GmZTuo3|%8# zBW2*gCh(Z;p`n@;c`>h=uW;|PQctd!u}9ui?n!{7xUolTQ9=t`9zlY0;2sVPSZhxr zF5OSJ>UTRoDTybk{C5}{K3JZI_bJVAPEF}lUIB2-Xc$HIh8}d&)IS(;2k3Pm`^;wk zT;U`P+*uoaD3@I0IG~roDWsznLw+rAuxGF4PP8mSbrLKe`kBjSKC6v6g*jKFM6Z#7 z(Z1wX{;QQXwm_TLKOw#^`CKOO^QT??V@P9mRi4uGR1i?n&tN zI#&R_v}60;%FtpumNdp}D$11aQ=sT6i7$$dJ0>=K*lORoGEFCSiSRiR_64 zvUg3{qNj)ihHV1|9&t5VGsY1(VaIgtuJ$T+Q>_vvYFG5NTx|62pYb)W=r2;fM7(P; zn`#{lo@u(vA*_Dqnn4|+ar8g!N)}nSM%RUegT|R&T&uq*!1k*jQICx5GLNMZ4p@ z`^${EhzIW0=){%8jhw*HM1IG~R5OkXCjG+0DvEK7M;aQdpVKbE||W&Th)0c{PS zb);XD0JAM*IqBE`hub`sK|)(?)ch0vgb)2kQ^RzO_K{^m+T=JcKA7I2Wx`Q^5DRb2 z=maUTaVTA^$z0K&2CVYT2f{sx3&HgQp8omQA{jUa7i-ER7I?=%dgd0gDX-b*Q|2Oy zd%l#%yImud9MMzeTZ)mJPrBqGTq(eGT%A7idx}@Sl<7FU)Y0eWJ?)(Lc` z(VfgaskxK6eI#AS=+Wrpl$m8HN##EcJ2nw-<|52DV__rdL+LuLqfED$Ap_`WiR~aR zP$ORM`@z^2Qv$RRcYc}C@L0MXgE>Qi$D%tjmBETl>Yp!l0KU8v2hngzAvo#Zmbamn z8=wc=ZkQz*2D@5$vlh3m(biVzqrr|0eRx#{l@_1j`OihI+aAxa<{IHd8!3urW^5W~ zLn2Ph=LnXQsf0;HTuepteJXrk`;8cAk)d+_NOewbY-Al?I@j=3wo7!RyYzJ|5Tvxy zA26p?D`W=(nTEda;8gIlHn7qIZ}!;WBQY4NKbxsNI{4v)%%e7+utAjzAsBJc>d+H& z-!ax1H_SJMO7QlFl_mTpn4eFk{(-y=LYCBdFmT?wDaTAms)h6e6AuVsINvFZnEWxB z2{7jI2DjR(7%)7)kKkR!e)17TF!H2l)K}4%@i74C>udRRu*Uro;&VX2wjlY-R)Wrk293OqwO)PJjfvpz zq<4(B+|+G2s>ZDmK(huUvCz@{shdQ=4^q- ziC3rb(%o`_r;!zNYumEtqja8v4Y%SZ&psE)zIz#zlyw@Dk|qLbj2yLujWz;mc9a2w z-4{>77_Z8{rChy^8Umg?YzNjMuCn)eDMI#=eNQqqx*Z1cN;SO7qe3+jeGdwXKWn60 zMsE}pr^u2M2w6rptQ8s8)PSgrDG3MJ-~=zoJd`b*SgmP&<9trY=AcjWPHNcHunq{a z^uY-^x!*VUr0luM;n4>!)qf+A4(M-jhCiJ}TrXfpe42Mq<0>Q=L)%J?)f&+^E~Xr0 zBWq6V9ad0`wv=+9`-dLSX8T4L9Sbwr<_u2{j=5xX$Q-)6>f7!YrT&>{Cv^NHMhOg&@4|B>?kk2 zdalyD-fp6+R11e0h(zY)c5c%U-?nQ^yFVS)I8w01$7m>tF0Fp|%UOO@fjMLtQ)Y~% zofg=^fVqrxzVFbLyr9v(9o&iocjx5qx{LOUZ!f}=l_V?s%VoXFM_ zD?Fy4L_}-(HW*`sQbXGUP9B_^ldskeh<{-r)YuUo@ie<%$3LuP!HcNgQmBj9;{?|i zC8gz>fhU9N2^CXwD8`n84VZnWkH|(kL~Wq%3^j_#CM;PK5LIZx^@BDzaeMNjmuJq{ zloLn)caBLl#ZuoYH{oGy?3{ z0pA8%j^M>f%QyaOVk)ugw8tAZq3mua6(-PK3w zkazx#+<}7QLF;?34*_%$)dz2?Fq$~}vwwG?fwiafZ5Mtz?8BPaF78*dK`Hca1~nXC zoXiovKFfEmu3DDvuKrS=$_##Y)KIpvTbl;k;BUEP+`yra>DO@3Ko&WRDy?%Fe{#$K z056-stG4O=Gm_2Ii}N#`UN_<^3QksD`c=^I-H*=KYb`FSOW|%}$nAJqB&Z~Y;@g`; zmTq~TM_nkgu|?r-60L{T!*=;*N4WK$i$Z#tHHbX^G1otMDE6)6&&|KS9yZseMh5$R zfjOY~koCcPaq88fa&<}<2}%?`OeaViKteyf#Qt`Im#(J?Kgu>|Xv*5{(&3o6%8xBd zM6)pFN(3qbCQxbjh-9RF)Y<4q+dRpjQ;b(e?~F(xEUI$or~b_bC*4gGZIt7U{6NwL zW<1M7kq2u7g?o=kMcPN+g?_ZjQw)y|)$C{O`L`Gt#$D6%ycL7)Fu-KHS=a8LTJ*OR z83!kv7Tvc`!8q*mJsnjuD;@c1xx)#(sY5kiA$q%js!}MYOS_aS2$UMTGtx{{_@UZ{ z`Q7)sABBs>((sfYxpx}D3(~iHW#Ov^g@Wj}{QuH-y#AqgaC|*w*v12m0=YY)br;KI zoaYUc$+qPKx7LRhj~mqvkeXy)qNPulG2a{}N?L7V_*;(X+ii8& zbD+^$zFlAURGo|Ax#_6Q(?Paf7u3V1dDu#IZ|zvEV^+NyV!O8SYBx15r`$-sTHWKL z5$^kBp#uuUXzl;(L#)^ zGC*so)A}~s+gb!n694Cg60>E2NK@BA$XG}8HSrC<)nnSB*|z}rX^F;`ag~Rog?%@i zYIJ@RO`IO4rx^bm$8oby&8fY^xu+jSNd{H^V$kcLOu~UJI3dOWeXBH8>uo+1V1U|E z=WQ$bI~yJUm+b>Ynz9ZG#xkNL?^fA24OoZ$#wDjWI_lOh+s6IBeDP`CP0J|WTT}!R|W}k*EG`)yDDPOtxK$B%I=r=l*?3 z<|4j!lC!8y(<-mWQ`dlL(u(BLZc1aNIjx3X)5ZqK@2|E*?Rj~wzY64X`0pM^O+MgN zVq2wnF8+9Ruk2X4Q>gwR*lzl&U3#J>y~1{qno>RflZ*m$mdb zKZI3z+-u#5S*WWVJ#@boZ+^5RAqD!j9brL~UNfC^zRQ2q8)Q3j)!_}e{3jdp=8B4d z{Z3eD2J&ykd#DyrNYgwr@aSG56@S#---qVp8pLPfP>k+)U4~rGV2hpsMo#0uI40+d z=q?y`$)927`78`Yvy`N5hl@Pu`$PE)6IbKqZ}q~_p^AE%&uap>RynfN)e0WJ==5953`!hN(71zGWc{H+y;P;zDB*W;!CQ)-#|l&tO0Enqe(M_+Q(`DjEptW<{KxCK zE&elKcQv;}ZQz?n7&U=t3(8&UXE#rm1uQDn{}6R)8PK6;lO8-9bvs5e_r(-#%|qnu zQ2oKAyVM{sk1&kkU!Iz$J&4B+;{8R`p){RlHtBTHoBxES@0I}J$vv^7y*X8FeJ^Pd zEw~X>G!ne=IynDva`UWD-!OmSnKQ^SFXJ$_j?cx@fX`X%yj>gs@60S998}XTx4TmH zvUkI!hE>|XT|f(t_&Wo92e(x?S}@^&olW`@;=tn$>fyc@aE0OJ?8bAovw{QivT?7h zcL{X1q->|Y{>yTfbzZ=t=3o2BXV3mOkhjlM44GAkwneL5nqNSc!gl}VbOLT53x5Oo zChJ!?zi-$Jsr$AD@~{0g%6r|@*$ua?$dj(7XNn=+_TO;y-0xH~DWm28dK2La_W^pk zSIZ4N|8Do-@B-c{eY<}n@O3P1S)jC#6@Q~YmB0K(zJW?MII5;Fs_fa{PHLLisQexY zu!`~yc*OT_G+b@J4$95qZWlj&NoWDx*QG2AL==gf?mr?-ZN*u>USxi358iea@p3yR zyg|)<&P-ZE@#@gDU;+l#kJDTM+ocFXY0k#DdfaFPdxb_HO$&adS5?x?VEG$=oL%PQRCyRMX%vlR~nwFme68R_0>l{NLBg722(pR?QJ(?~{RIfhJ9o zYjAk+%|XfDV=G2qYgY0a1Vg>|FCLEeNvyjMte9}l-1|Ev+9Xu58u|HSE!)4&n+Uco zwx?)bY=L+%Ap&Dsg!?(28hLcvgHuyw&s0?MKl1vpaCL(L0}q1kZ6J z%-EJRpavCn#YDVwa9o4d+sZ$8vA#)Q5syIChfQ0&gSV5X3>K#US^~!#v`@@^KJzjI zUQhHDvkCsOoXrl*U#H7>0qwz#p55xZBU7`X-v}#o9T%oyHT|e-a^#3g+C_1-zoH4j z7i47?Sieg1#M0Sj_&flkX%vygZ$vAqG|4eVtogU;w;9!(HD>R2pRnJ>E;82|{kAYo z3(ALfOKB7b%697HuFco;0m11bZiCx59P8jW1zOw0P$tw#UaFQ5WMV0?Vza?8>3S}} zcO6)%2tQ1#10?g==H$yIyXHe;?X#J1I*7}9q=-~3&G0p4*Gyo@`T38S{d1_SLKUp` zC^{@Dj`5W8&*stKxsfdTyuy*{iDmD;8HGk&Cg@VTM$um3w25NXJkO4sBA4qTix~&{ z&78c)FPpnBbhG@Ln5=B5hkku@g~*eW%B70aS&8B_HpH5U6)l0ZW*W!i1p=wq=vlvU z6huU7>}*5bs7!#uIcnDG4-L>r8sYpJ!SBN=a@gt3EDjo`o=b)@Z0ya&WC4pO48Q7R z;)iXF#^_VKTE*VPbj{_$*~4vl>uZ(9Cb~`f*{nq+%*LjQy~+dm2;E*-$_5E{$FL>t zlXgJ}xGVnUjgC|=;>Fn0X*!#oqiI8!Fz@C*YxStZiz2{c#t+_chSJ7fb2<;hOz#W+ zES=434cVT2u%eAU++5Cq{JbG+Bd1Ggo z{{gkP87^C%_F0GNY!nz#;4v(&^$UaH;qui%Ix}B<{QI<+`si$=1@^t@@mjKKk#uSR#X<(c)xH^9q0zoovgr3vwgHvNdv$ZJ|$g(2Ylaj1?#6$ zRc!x))S+5d1k>dVrJ&VVI(r#-7}{roe5z}w75H4{zXw^|@*Y7xBc&Jis_aBxo^iGp z!E%Maoe5eu`XG8LldC^-6Yj(v%t`q+)j(r*r3^8cfPo+d9fMIvjy~#xS&)qR3FLb~ zJZ78!qLc4fwfv{Xvh=}R%Vqk+Fhx}*t6uxVkG_hNldp{}EqLXtp^T-+FAV)I<^4-= zD-=;p^^-2nXJ&U>d>Z5=9W8m7CTh5M^jT1~ty;-Go0&wC3q^4G074v9MmX6xyyv`w$xYUNVDslKkv^kOu(J+Hoi}FO-rvYL_|7070C_Mew`W## zPtauO_S-6#RyNK7!$&Ysg7Fh4W!Q$hc87m79q&Q|I~*Ti`-C)-9vHzwh|q~fscm$# z`yH||pV~duVUbOmy}@aj-gCiZuipHiu3o=zB2rr!nf7&J=+)O4FqGETgPu{#<6=3x z-Xi;cvF%1a=|pF5@~5>B@DEej!)y=;qEvO)?aMI6(%VAdN{Wf>G#F?3m0=8H_yKJP z97a=B)Jk(7?&5>|0&!QnffQ~C8-4L*#iHFL_?oY1pc?b9O-#+;kwc7gzJC191*2ry zmDv97iwYLp1^2s_F1Zc4s$!V~RJoezCQ_a13Q9y+KQGZ{e~h$`fIrqNxC_JBZqTvV z`7jz{P5O~zZ%{Azf~e2wRkQwxBCpvsxGux%l^>$(q``nv4L0F!>4;f4wKKHCN#4y$x)-1ks4}uZ>@{@0$6EAIm z&3@=W=9U?F+VEh31S&B0suL-oHfa_HaLl>C?;6HmiamJO8VDQ>_16Z)AaYp@>gAgv z#2LYxnh!k485lHM!e(iEql^48oa&P%~rmf~oJ*nTV z9&MNag^_I?75)=rbP&velVw`4U12ITV>iRfYSHA2yqlkVH}H$Uf~dv~g-{ih7U(f|*3ZHBnER$CsslKtk8Hcs=4OAo$L@V>Md5LdM<{+X5@(Iw;V# zK7?na%`$&iIV~HV;e-}WhK7P(z6Ev5!Q}3Ten@ug5AGcY6S#byGXK-!%ozfc0Rv!c09ji0gwAjQNU{_@U(y0d4DMn+}|v{_G6NFoC!qP3OrSzzsm-I z=fl^hs9iHuAnFD5Gkz2XymX*OGHOl&?6EBzI?0UC71x8SZw5}sI|JU3B~I~mGxmsa z6OrCuzn#dP6ml-Db6C|d&|6l~7a2%?V3IrO*uoj}%la1_>zPxi&Bg7}UbX)E9dDLw zRA(+@RwQ(|B=jDYyF}re<{pXA`@lM&g_PF17 zg}Rp|CG1S&sf(+J^Pe^2Q=F-YW2NMrI2>{NXtAp29Z(54e=gyaKI8)H3+Yk_c2`g( zkiYC8gbJWPKlmvJnSblz<@hYGi+70^k+(lNYGFx%!%@2*Jrg=_Ry^}A&#@#SN28$F zgyzP&1b&V>kS#2%v7nZj4k7ts8IsS-e$3VVmi-&B&v3z)UO z{ADSZ{)e;WA`ts|nCW!- zd;oKRSA6qxMITGK2qRye<6s|kQJ=l+KT*{DP$~M?P6KD9`I{XEAmggCok9cGVlD{B zWkhit%!x4rrtqr+Vn{=#f<-$>4HD#`pXK#NQ{h`oK2*+zZKl4h^7)tKsryMt=Kt(~ zDnxQ6h^WpGt8cm9R0t-ss|43wuK}9Er;tH{tVtDafDK_1lxezL`(E5HcN@vOW_W;X zu*m|2)@o4$p*UGlbiLCP26L-=yHo8|Yo|JKKe z^8n}W^zQO`Iz@(~U)?K@^K<3=&Q2S9ht3jhf$ihZloz$lfzIdks;qGRwNBylC0oMz z0lVz_KDs@EyIH~1Wv?O49)i^nPpb=c3y0eRTWJ*%6*+K3a2=QQQ{3>PZ$M=Kl+#@% zDNe%jh%&wmdBx?y5;JDZ5H5DEf~2uG@AWHfT;VaLf)P~(wW`WEb0B6htYi@}-MPT~#Z#sDAM#h-`_z`!LTpp4uDF zpX|#U)*1?Arro52Cj(E^qJ&_16B$Vc%I!?Es=2@kul!@OTPO=;7)HI;_2|&(L&9I| zkOM#N1}7X5O$I8F;f=uCxI@lc1wO(EYSF|xu+cA$3*@)eFGi^~I$fCWi>3aHw?K9D z93u#aSQ=E1vHumN{4X~#KX^TjBc()$492z_FkniS_Gn^#5(4?>%d$=f|M894m2!pw z9rD*UEnH&JbQJKn7*AQ5DJ8s9|K!oG!_Us>i8F?a_33jWX23^I)YVQRu-Z1FH|7o0 zhv;o6kpCBY-%h-YTp0#WbfSBNvRoO=d}w3aH5dXvsjR!A;SfpF|6u0aOah@1xHq>o zVG-Vl<=oQ##;){(9fi?evcw62-VU-T0I{@7B7Fjgc#8&F8?`c4`gs`aztLG!HVdF_ zo~%k=9_}cO_EI5!EENg}lUuH9{EM*iGiDPU+Mb>vxlQ@ysz3^0WuU|LS2u7HnLLx2xXMjGGc>= z?4Wtx!)CPdQso|LK7q2#rNgDUTSvDj{`~k$@unaz9zvMnXXFK~DI07l9Zo_zqhubl zw1KOOD2b%zPjrM4RTsmql(NwVyeFmH0M&5|0~eZezhU?vJObrm<;!u?pY~_!Q-+VE zMBE;QBg&Tn7I=`LWZ251yNc-34+quPTAJ^e$|eeYcXI5t7tOcdLI2A!l($Hf)le*RV8Ab@kZ#(1UCM@y`#1M=O6;Nu@({=1d zJSD=Baba{~j0cFBqNgYnaC`(Mb$?XRzbQs3ccUj?{M9ec9VK0P6@SW~ZXHetkmM@D z9Bbv{EOQg29BLi5{p4<^8UqL7s#ovXJh*XhVC_=k758b9y8F;-#Af(o)H*7xVoyOB zeG>%bH67YGNX`I5W>@$mmivD2!cU>WSi;|!!;=@^KHL!vai)~DED}b296^#bO)9oj z^<~%tlu`=NrU|c+P9Ow;;FFjE=*YksFMVfKJE(*A`qw5IYYB*HQQNCPEU6Osn)>Y@ zqR_h4Uv0a7+fQO|q87_hKhaFwxc}C97uNN5bnnY*g+gvwNB>Pv>E7^vj{IxTufGU! z>FpQ+UQVv^yb+FQktV&s7_Sh9?D%^8H7n(*c`{0EzL5GC|BJ#P?0*jZ>vR5JWX%pL zPWWgoJd{p^8I-LZ3afL~Bu3^#fx-{kgI%^7&lA#Yr-Xy%*`~pGD;mVR< zdcU>NT3SIitEgLdCiCmoL$i%PeN`LQz-2YJZX&T7Dq#LB?T%Xsqoq`G^iwx3OSXl? zX{f+^8||wrMc|1X>`L&-aHT-JD@S@3*9$K_kEziy0x-OUJ3fKeNu1z|b85>e;P@1z z9Aq&xL9UI`ldrVD?}@|MnkMAR5qNS57&l_I?4_)O4)J}=>>md@l$$faJ8G2Sn->-A znASm(9IuOj{|TzwN(6$`3B6A9aoX;uSG@Vmye7xd+PDdCQN`Os@zSDlE~>-NQy*&b zc)OeW0idbm{e0)0I8w>_Qs2j&*G89}W)XGqBR(pc877f8HO0t={~J=$G2&PdMth)F0=q-`@m* zc6qKS&BKson(La2lfy$ON@c8Ih178t+2;Ux2)cSRc@jeeo8%UC-AH8rDgJn;z~whB zrE_-o^XNkv#@gBWm$B%H%~*&$Rr8Xh1DVgY#;@_hM!SwBDEp)CBn}xvEB$cWeJp%g z`L0SsV0#cA?`6h6^7#U}`%QbJX*3uw4pZ&$osZkO*=P~N8^^7!LGpRug0GgCuW5D`gP)IEcf#eRCgDq_ifIMCZ@)-p ziCwxzttQ?V>@AML%c?t_13mgrkHr8OzShi#xBqp=J(uCZbFnjsnL9W-5pglIgRa_f z0Tw1U#{YfSUZAlOO2F~4U3bBC5;we5suLNUSitB5Q$PEW=t5Y?Wd+~Q%nxx)pKLn| zP8?b5{-_3zYRMcPCQ23L<;BW5OOJmvh)#E;8fS+d}*q| zyPT{^Va z`#x{3!Tn%z(QL_a5>LE6vn^g+^HeD;oWDhr9yIlh1rF*q#LVJAbsOo5J!|8yvG;18 zjO4vKAqQkx+6ii` zR2nC-#hjvphczH$d=AV(-}Jq=_8Q&B3cv19FCp%m5gRHYWiIE8iw!TK!^!x{%^Tfa z&2+I5mt;kxJ|iT>56MuHG+e!r@MTr(1WkG=9({~Bfwlb3UwPA{?|8O5CwGjB=T6P@ zt^`2{!_k8e;dOZhZ!<{jDi(F7h^maogl=nVBj2UfwGh}^GMG_LoaK*NN)ET!4)&^1uo7lc>47)hDx0iX{MmBU#qHCJsq!i zCf4Y`RuP^Ew0qs%^lop?A_+vma#KH1XtjIpqVf#udf!g~)y_hPNm-W5ks28{DVSaw zCWl|&SBL{M-`LuD9C9nQlH6v>)9+VRGj5EFE?jx&&eeTXz~?YcLg~F4^GqCeS}VA< zKg#@CJGoMaU&={7!RM+mQRA|3;r>k%l)%<|uy*`|KTJOmo`xo9maX?ev94~Y5(LS5 zuP71IT_0$JRG7;vu~d`bzwrG-`a1+5rn@X=_Ek#-&7$`%#_Fd=rDn*wXfl;oV7s8b zALsGH=*7XFQ-!y*48lJ?J9eu5`WN>3PRl*kVa*LzHyEhtGLJ^O+Z_Iux<>DPaF~n4so(aAiiA4saQSeR4i-oJoV+4t)7kuT-@APYxRiIvh0+>j zPP$Rl$*r3=p2=-z4D&>|;+#6I{wBVE`X1b&+3h)V5TGjjnf@W%GJbtV@v!aUj%Wta z%YEbgW5Jgw%n`G_KY;`9Yi!JRP@^zqUf>8AdM+n-$_y6;e_#uFAJ@`S+>CCol;w5I zGjHgv5&jNDO-f?%IJh982O??vhqwJRT=RM5v~*;Tn@60dG&YBg`4%3<2uzM^D+_OC zjJ1y*NZ0Bd?)6BqhjLJpzJBpIxuE`Rq2A(|eJ0j_@N;{1CbP9IG`fX%^0#k4j`@%J zk%rVo$E2^szveX8rdCZ&J+k;LPwO_3?=cZE7E*SDIBsLGGfYR*VgRGciJ^y~0xn_4 zuMs zh`1NDbc^Q}OCD4E14BxA!X7+Y<`<4?K;|9=CSQ?o2OU9*-lNQ5-tgyR8D1 zI=ZX;T3$f&%eF&jk~nVStMlXf&dtTc^YxkC^4-B4otD7z^2)~TbMF{X)n5Ia>i@EH za$FR3G99PxOhH)b-RA89+-}{@pFY3Ft*tF<0ZksaTm6Rs5=W<2=FH0Dxy9*8m4J?y z>*dLGJJR+}H`jB!mY3J9{nf+l@zSj;zu#J=t#5CbJR$HpG$ob1OvlloXf7RT`)RRu z6L;k1>aM?-kB>jpSUyT1qX~1KkfHPS$E)Yoo(|t}d~b-Sd|WW!HeR&i%4G?d_!Zw2 z_RWmpLY*6s<2UGW$+v|1hr6wB-)n*iG8)6eDd`88k|m~wzQASXR5NMQSbbDI zxtcTy45F40I1f&9tljpoAATVI=7S&pFt$H_X==a=rH#_I!%vcYvGv?^2hbIOBFtB4 zwtm)y9D>qn|74Qy*geVJ;S&D%p#{)9Gcx!t+((~*n|%W6r_v^JEy1793dg%dyzj?h z)6qF;>{S1hcd7fu_0hc6* z*a*uYh)I-JXl9uatO3jlVgb6kq8qD=-N*Xf5)6AoKV&s(m)tuZu%iG3F0iA2d&j2V zI(rb`C$8%!XP+FB6Y5OB^+0Oqp}*N=EZQS2nOJdGN~zHy-5V z2C+GA#=O7)2R#G0`(Hk2CVDoA*d0E!N`EA=urqx|#s7Ru9?++Jeg}rKWv z_`QG_|Mo83NSikPAo71bYi5>b^PAr+AxL=V0=0my_cgi&{0O$1rmON@tKST$@1qUo zQjpp;t_JqcxQ})Xi|U*3ul7-RLNHI}iCf#|JtB|cU(wrGAMlTU{bf4LH7aQ(CpGvH zbhYM|??(zL$f%${Q^>qHe&W633x8YTGqe6Uss~U5Lx9koN9@LW6pla<9YpjCSwv$8 z1@oEsJ1b<&-!6`ygfOx>3<-i@zDj1oA?Xl70SWc_XM}3pE}M6)U?3y7T_<`j?|}t; zJy)L0g3;6jbM9%L^c)I>+Bvu3u5S3h`Tl{B0Bj1Vs8~*$sWS5SaOFZgQWxKl($A9$cd$w21F z_bCm^Mes(+61FcPKczO6tBjS9iG~fIbQhH?Yw-T3o$$9E*F9dzG!SkQM%Z;-fGSA< z;dk-7(TB9va1Q)qwm@>N^#9Y!wMR8^W^pqSkVim4P{;!m0TnPanLL$8ePAC1S;0qC z6hZ{$B?PUeni7zgJVMrLnWz+76+CWH26auesF0A*ZWUT-l`57zT3lC@q_}IU5qARA zD)F55oZb27p8Namy}$e2x!;%h&dChyy`n1wQ{o+hH_VJb^zGC}xuo?io|4pbuIJ){ zOHmcRvU$61e|dhTLEPay>-@niYs3cya74ejn<~6_t7VulY#rE9;Iy#+r>^GEdoyIi z()-q$yn;Kder^|aU|?@Vz{4lUAD?`N8+OA z9#8xFb`o6Dwr#e3@#Mhag9LyHpCc=}ZLgL-RDRQmgB4c_aS}{bMD4|0#{n?=07Vg` zpq1dFF@*RIm~2c0X4~XftAMxgPOOC>Z6Te7OyvRaOXWQt z@YleY#o!VqObcJe25I4RHVlU^VMB|4=dJgv7wKCCtSjGX|tB!?@{e z8~Ll;Q4xP=u`yum+=eCl`nip9`~8DCY2-rvvrU&Swl#dA_q=iU?ndAvpz_4*DYNe$ zyD@j}sdrcj^XJYA$SF+uv;?T!dl1(Z*)1HAZ+Uq6=DIyyhjWLXJiA`E^7!&AQ6tLz zLxSZ}zwXue!`W^B6yk$<>1~glbid%>CRWOzWJzyYTeXu1PZZXr3CH{V;5NgJ_xKvl zxPXXScjDKuceiQJ>GilHeT&Rmo&Bcp*AG|a&2^^adrdozCe`B@~y_T&5-$u0VJidQPYt*!v)1-JhscY`IV z^SKonAVZt7o-4Z#`oJlaYt@Iq(De2}IbnOM`!(rBbmoA%l{aZvFe_|d3<_%bE1L>~ zPlrp^kJ(()%pqGo{NdU1m~w zmJolYGfp|}iD6CO-aA5KLE)mj8IL+5l|&EY+m>06)H1VIpUlaW7*XP6cB8a+n`Tlp zMhmCD!%O5BuUA+c>ah>g#72}S8(AU>)!<r{w2 z4e-VjngfuQG+;aOO&Z{i%t;6KNi1_~>T}V%e*F9rbB_+%g=fz*b-CF_q z25WfSig_TTQFUJK*u!_j`cF=T`OB~EJp>WcH6%HCJAXyBx>fEpEQku*=YWDfs$;y# zUkij`WkD^IYgHkrTdg*q=aa>cX)64<#dD2jK9Br4Kdz}LuEqVPM7x_egP8JRb_t=y znW=T}B^}|%W*41q@y2?vmvRTYt0m+XII3b}i|bDHNz`d)C$5*chwm@;d&W-|`y6e* zhep@5EoM(G*QJOlqiLac>)9Ewmcd+B|xV24Yh>^;vA^5X1Dk>Ylv$U2XT- zUdbAknIM*sw;03fs<40L1AQCC+*TL=&RV1$D(Lurlo!5{>BiczlZLmXo`oy zH)8KmJrq&dY2F@D5n`g(t8&e*5mm{0MC5)|yDrxhv8lt=0vE{o^+8sgMCEUG*`&=9 zc@OE{w>sn+2v&kbgRaii=UDOn`i)kvA!DR?pNA>e>iR+>31i{1W?qqzos)0NO+l5; z$;U<=44Vm{bvylerxHz@`DWYnWWC+v`2>#_y5oTlN zDSjqqfW9=yl>0T7o#Kz%{jGLX8wKwtyBuNK#>P!-LhzbacAt0nu+1d;H=BjE72GZ_SfibXKZqF zgT)o8Hqls-nqT|M#FLM)NtbOt`q=4SSC&C~qFY|z5Pv4omsGtyFeK>nUCVUfif zQz_SEzoG#?Z7SZBSOLjLW8k^PraFg}#;16PRi&X3wdzV9E>sZIRP{YN|7P32c&=Hg z|&ZIxI3K_If|#dkofG zMnj^cms_a+X`f{Yiz@EsOC+Ry_&m^EwcirquHjn%_s$vSAX1T+DUDRxtlLVe668hH zsMiWTS9Hu{`<~RVsw?UdQm&N2SeK7Cxrv-qIBbqf+E--?7ZYa~=ORm#wGg`}L>0m=ymSKHT@dF`wTL(eus?eqPm2D78oVIm-V!=HUt_wY@e?H>XSLJW$ zv`l-{`Ju>dywkUcX37lHtbojTPvjY|%ZMo50=f0(nnSIg-TGS=LVahI2-j?QVj*u* z`I|zl)0%Z@t)Kwb0P)!z_pk+7mv zlFKRbb{Y9T59=BCV8yia5Q9rdRDTDOV_)3RuA=9RX$)@XjjQJ&?>M4u3^VCzc}&gW z#`I`MwM6x*@ReN0#BWF4d&;L%ZBbfn?k{Y9npiC6bSmcFbJgZ&PQapQB(a$PW9su* zVq&W;j5z`G-zB;&cMGn3z3oReruaXiUm9Lt9{-aj`F-iVfo{S=e95FwDI_j-JkY)w z^yR)mkcr%Ffqi&=tfOtJG4GfYT6e%wte97)Q*C8vwUxnm0~^!05None@hcHS!!cxP z4z{Tjf0eTtL5XD^Z(){RS32mz*l~uwkGl0FR$ZTCkM7IT;KI#>0p$aQAHyp8d27kL z(6r!=Ir5o_{CsZNJjkI@O_%!#!0>dHo16lthNX9g$$ii9*IX;+Ku!bNB;M3v{-&_P zUm=B|e2A$)h_T-T^2r_)bqz$(9c9!QHn(EM0xf-R})*B&95Z+YrZ*;-Uc5J;p z5O`%*OHodlWMAL(4cIRWbT<1@{SMQMJA3Mh@gYf(x)U*ub=Hx>M5m)uDVHA}!C#2Z zYI9c*dY>s*9v^YKlx2-Q@L96AwE6fb2Lp4EiW00m0viF%EkYmR&#^2+~*+h-n~= zGcg$&1kz~}?I0Lpzk-o%bEnbS5cmo>iZMVoQ}H+tII(*k#02R9Oa}IVA7Cry=!Ibn zI}G{k6TmAH8)DfFF+uhlFpeFDn8!k3m9S%kXm7w^I}BM|Kbi$(pCA)r+L<#U`)rZ@ z<00%5WYR$U5H$O25&c*Qntg&y+8fGAv(FZRj*de|SXvGl$5r zvm-x$$Jq9QH9Q0|5x0jx$ZtI2{|gWGFZpRZvAxR{e)L3~xFaWEbW-E5`23y%2Zop| Mf=f_PO#Jfy0uXUBxc~qF delta 20612 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 A6951J diff --git a/docs/sphinx_setup/_static/benchmarks_files/data/graph-data-ov.json b/docs/sphinx_setup/_static/benchmarks_files/data/graph-data-ov.json index 4d482804d30a5a..59e06ef51f812d 100644 --- a/docs/sphinx_setup/_static/benchmarks_files/data/graph-data-ov.json +++ b/docs/sphinx_setup/_static/benchmarks_files/data/graph-data-ov.json @@ -13490,7 +13490,7 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", "Model": "bert-base-cased", "featured_SKU": false, "whats_new_model": false, @@ -13500,8 +13500,8 @@ "Precisions": [ { "int4": "", - "int8": 187.26, - "fp16": 147.66, + "int8": 385.87, + "fp16": 420.99, "fp32": "", "bf16": "", "token_int4": "", @@ -13516,7 +13516,7 @@ "Precisions": [ { "int4": "", - "int8": 5.66, + "int8": 2.99, "fp16": "", "fp32": "", "bf16": "" @@ -13528,7 +13528,7 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", "Model": "efficientdet-d0", "featured_SKU": false, "whats_new_model": false, @@ -13538,8 +13538,8 @@ "Precisions": [ { "int4": "", - "int8": 147.24, - "fp16": 121.24, + "int8": 426.56, + "fp16": 362.73, "fp32": "", "bf16": "", "token_int4": "", @@ -13554,7 +13554,7 @@ "Precisions": [ { "int4": "", - "int8": 9.93, + "int8": 2.8, "fp16": "", "fp32": "", "bf16": "" @@ -13566,10 +13566,10 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", - "Model": "llama-2-7b-chat", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", + "Model": "gemma-2-9b", "featured_SKU": false, - "whats_new_model": false, + "whats_new_model": true, "PlatformType": "Accelerator Platforms", "Parameters": { "throughput": { @@ -13580,8 +13580,8 @@ "fp16": "", "fp32": "", "bf16": "", - "token_int4": 9.15, - "token_int8": "", + "token_int4": 22.66, + "token_int8": 18.13, "token_fp16": "" } ], @@ -13591,8 +13591,8 @@ "latency": { "Precisions": [ { - "int4": 109.23, - "int8": "", + "int4": 44.13, + "int8": 55.13, "fp16": "", "fp32": "", "bf16": "" @@ -13604,8 +13604,8 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", - "Model": "llama-3-8b", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", + "Model": "glm-4-9b-chat", "featured_SKU": false, "whats_new_model": false, "PlatformType": "Accelerator Platforms", @@ -13618,8 +13618,8 @@ "fp16": "", "fp32": "", "bf16": "", - "token_int4": 10.18, - "token_int8": "", + "token_int4": 40.04, + "token_int8": 26.95, "token_fp16": "" } ], @@ -13629,8 +13629,8 @@ "latency": { "Precisions": [ { - "int4": 98.23, - "int8": "", + "int4": 24.97, + "int8": 37.1, "fp16": "", "fp32": "", "bf16": "" @@ -13642,10 +13642,10 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", - "Model": "llama-3.2-3b-instruct", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", + "Model": "llama-2-7b-chat", "featured_SKU": false, - "whats_new_model": true, + "whats_new_model": false, "PlatformType": "Accelerator Platforms", "Parameters": { "throughput": { @@ -13656,9 +13656,9 @@ "fp16": "", "fp32": "", "bf16": "", - "token_int4": 22.57, - "token_int8": 16.65, - "token_fp16": "" + "token_int4": 45.22, + "token_int8": 33.88, + "token_fp16": 21.45 } ], "Unit": "FPS", @@ -13667,9 +13667,9 @@ "latency": { "Precisions": [ { - "int4": 44.29, - "int8": 60.05, - "fp16": "", + "int4": 22.11, + "int8": 29.51, + "fp16": 46.62, "fp32": "", "bf16": "" } @@ -13680,8 +13680,8 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", - "Model": "mask_rcnn_resnet50_atrous_coco", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", + "Model": "llama-3-8b", "featured_SKU": false, "whats_new_model": false, "PlatformType": "Accelerator Platforms", @@ -13694,8 +13694,8 @@ "fp16": "", "fp32": "", "bf16": "", - "token_int4": "", - "token_int8": "", + "token_int4": 45.55, + "token_int8": 30.8, "token_fp16": "" } ], @@ -13705,8 +13705,8 @@ "latency": { "Precisions": [ { - "int4": "", - "int8": 187.74, + "int4": 21.95, + "int8": 32.46, "fp16": "", "fp32": "", "bf16": "" @@ -13718,10 +13718,10 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", - "Model": "mistral-7b-v0.1", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", + "Model": "llama-3.2-3b-instruct", "featured_SKU": false, - "whats_new_model": false, + "whats_new_model": true, "PlatformType": "Accelerator Platforms", "Parameters": { "throughput": { @@ -13732,9 +13732,9 @@ "fp16": "", "fp32": "", "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" + "token_int4": 69.44, + "token_int8": 57.9, + "token_fp16": 37.69 } ], "Unit": "FPS", @@ -13743,9 +13743,9 @@ "latency": { "Precisions": [ { - "int4": "", - "int8": "", - "fp16": "", + "int4": 14.4, + "int8": 17.27, + "fp16": 26.53, "fp32": "", "bf16": "" } @@ -13756,8 +13756,8 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", - "Model": "mobilenet-v2", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", + "Model": "mask_rcnn_resnet50_atrous_coco", "featured_SKU": false, "whats_new_model": false, "PlatformType": "Accelerator Platforms", @@ -13766,8 +13766,8 @@ "Precisions": [ { "int4": "", - "int8": 1879.14, - "fp16": 1565.12, + "int8": 33.38, + "fp16": 19.04, "fp32": "", "bf16": "", "token_int4": "", @@ -13782,7 +13782,7 @@ "Precisions": [ { "int4": "", - "int8": 0.78, + "int8": 48.67, "fp16": "", "fp32": "", "bf16": "" @@ -13794,10 +13794,10 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", - "Model": "phi-3-mini-4k-instruct", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", + "Model": "mistral-7b-v0.1", "featured_SKU": false, - "whats_new_model": true, + "whats_new_model": false, "PlatformType": "Accelerator Platforms", "Parameters": { "throughput": { @@ -13808,9 +13808,9 @@ "fp16": "", "fp32": "", "bf16": "", - "token_int4": 19.33, - "token_int8": 10.23, - "token_fp16": "" + "token_int4": 45.53, + "token_int8": 32.37, + "token_fp16": 20.21 } ], "Unit": "FPS", @@ -13819,9 +13819,9 @@ "latency": { "Precisions": [ { - "int4": 51.73, - "int8": 97.67, - "fp16": "", + "int4": 21.96, + "int8": 30.89, + "fp16": 49.48, "fp32": "", "bf16": "" } @@ -13832,21 +13832,21 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", - "Model": "qwen2-7b", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", + "Model": "mobilenet-v2", "featured_SKU": false, - "whats_new_model": true, + "whats_new_model": false, "PlatformType": "Accelerator Platforms", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", - "fp16": "", + "int8": 3134.27, + "fp16": 3004.5, "fp32": "", "bf16": "", - "token_int4": 10.59, + "token_int4": "", "token_int8": "", "token_fp16": "" } @@ -13857,8 +13857,8 @@ "latency": { "Precisions": [ { - "int4": 94.38, - "int8": "", + "int4": "", + "int8": 0.57, "fp16": "", "fp32": "", "bf16": "" @@ -13870,23 +13870,23 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", - "Model": "resnet-50", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", + "Model": "phi-3-mini-4k-instruct", "featured_SKU": false, - "whats_new_model": false, + "whats_new_model": true, "PlatformType": "Accelerator Platforms", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": 820.74, - "fp16": 519.4, + "int8": "", + "fp16": "", "fp32": "", "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" + "token_int4": 69.93, + "token_int8": 51.51, + "token_fp16": 32.84 } ], "Unit": "FPS", @@ -13895,9 +13895,9 @@ "latency": { "Precisions": [ { - "int4": "", - "int8": 1.39, - "fp16": "", + "int4": 14.3, + "int8": 19.41, + "fp16": 30.45, "fp32": "", "bf16": "" } @@ -13908,10 +13908,10 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", - "Model": "ssd-resnet34-1200", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", + "Model": "qwen2-7b", "featured_SKU": false, - "whats_new_model": false, + "whats_new_model": true, "PlatformType": "Accelerator Platforms", "Parameters": { "throughput": { @@ -13922,8 +13922,8 @@ "fp16": "", "fp32": "", "bf16": "", - "token_int4": "", - "token_int8": "", + "token_int4": 45.8, + "token_int8": 32.78, "token_fp16": "" } ], @@ -13933,8 +13933,8 @@ "latency": { "Precisions": [ { - "int4": "", - "int8": 37.02, + "int4": 21.83, + "int8": 30.5, "fp16": "", "fp32": "", "bf16": "" @@ -13946,8 +13946,8 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", - "Model": "ssd_mobilenet_v1_coco", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", + "Model": "resnet-50", "featured_SKU": false, "whats_new_model": false, "PlatformType": "Accelerator Platforms", @@ -13956,8 +13956,8 @@ "Precisions": [ { "int4": "", - "int8": 993.56, - "fp16": 762.67, + "int8": 1921.18, + "fp16": 1329.28, "fp32": "", "bf16": "", "token_int4": "", @@ -13972,7 +13972,7 @@ "Precisions": [ { "int4": "", - "int8": 1.33, + "int8": 0.78, "fp16": "", "fp32": "", "bf16": "" @@ -13984,8 +13984,8 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 140 dGPU", - "Model": "yolo_v8n", + "Platform": "Intel® Data Center GPU Flex 170 dGPU", + "Model": "ssd-resnet34-1200", "featured_SKU": false, "whats_new_model": false, "PlatformType": "Accelerator Platforms", @@ -13994,8 +13994,8 @@ "Precisions": [ { "int4": "", - "int8": 319.11, - "fp16": 290.1, + "int8": 133.77, + "fp16": "", "fp32": "", "bf16": "", "token_int4": "", @@ -14010,7 +14010,7 @@ "Precisions": [ { "int4": "", - "int8": 3.76, + "int8": 13.93, "fp16": "", "fp32": "", "bf16": "" @@ -14023,7 +14023,7 @@ }, { "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "bert-base-cased", + "Model": "ssd_mobilenet_v1_coco", "featured_SKU": false, "whats_new_model": false, "PlatformType": "Accelerator Platforms", @@ -14032,8 +14032,8 @@ "Precisions": [ { "int4": "", - "int8": 385.87, - "fp16": 420.99, + "int8": 2200.83, + "fp16": 1665.15, "fp32": "", "bf16": "", "token_int4": "", @@ -14048,7 +14048,7 @@ "Precisions": [ { "int4": "", - "int8": 2.99, + "int8": 0.78, "fp16": "", "fp32": "", "bf16": "" @@ -14061,7 +14061,7 @@ }, { "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "efficientdet-d0", + "Model": "stable-diffusion-v1-5", "featured_SKU": false, "whats_new_model": false, "PlatformType": "Accelerator Platforms", @@ -14070,8 +14070,8 @@ "Precisions": [ { "int4": "", - "int8": 426.56, - "fp16": 362.73, + "int8": "", + "fp16": "", "fp32": "", "bf16": "", "token_int4": "", @@ -14086,8 +14086,8 @@ "Precisions": [ { "int4": "", - "int8": 2.8, - "fp16": "", + "int8": 2.33, + "fp16": 2.36, "fp32": "", "bf16": "" } @@ -14099,21 +14099,21 @@ }, { "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "gemma-2-9b", + "Model": "yolo_v8n", "featured_SKU": false, - "whats_new_model": true, + "whats_new_model": false, "PlatformType": "Accelerator Platforms", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", - "fp16": "", + "int8": 759.93, + "fp16": 694.57, "fp32": "", "bf16": "", - "token_int4": 22.66, - "token_int8": 18.13, + "token_int4": "", + "token_int8": "", "token_fp16": "" } ], @@ -14123,8 +14123,8 @@ "latency": { "Precisions": [ { - "int4": 44.13, - "int8": 55.13, + "int4": "", + "int8": 1.96, "fp16": "", "fp32": "", "bf16": "" @@ -14136,22 +14136,22 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "glm-4-9b-chat", + "Platform": "Intel® Processor N100 CPU+iGPU", + "Model": "efficientdet-d0", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Accelerator Platforms", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", + "int8": 36.93, "fp16": "", - "fp32": "", + "fp32": 27.64, "bf16": "", - "token_int4": 40.04, - "token_int8": 26.95, + "token_int4": "", + "token_int8": "", "token_fp16": "" } ], @@ -14159,50 +14159,12 @@ "UnitDesc": "higher is better" }, "latency": { - "Precisions": [ - { - "int4": 24.97, - "int8": 37.1, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "llama-2-7b-chat", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Accelerator Platforms", - "Parameters": { - "throughput": { "Precisions": [ { "int4": "", "int8": "", "fp16": "", "fp32": "", - "bf16": "", - "token_int4": 45.22, - "token_int8": 33.88, - "token_fp16": 21.45 - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": 22.11, - "int8": 29.51, - "fp16": 46.62, - "fp32": "", "bf16": "" } ], @@ -14212,1121 +14174,19 @@ } }, { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "llama-3-8b", + "Platform": "Intel® Processor N100 CPU+iGPU", + "Model": "mobilenet-v2", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Accelerator Platforms", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "", - "token_int4": 45.55, - "token_int8": 30.8, - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": 21.95, - "int8": 32.46, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "llama-3.2-3b-instruct", - "featured_SKU": false, - "whats_new_model": true, - "PlatformType": "Accelerator Platforms", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "", - "token_int4": 69.44, - "token_int8": 57.9, - "token_fp16": 37.69 - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": 14.4, - "int8": 17.27, - "fp16": 26.53, - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "mask_rcnn_resnet50_atrous_coco", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Accelerator Platforms", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 33.38, - "fp16": 19.04, - "fp32": "", - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 48.67, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "mistral-7b-v0.1", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Accelerator Platforms", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "", - "token_int4": 45.53, - "token_int8": 32.37, - "token_fp16": 20.21 - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": 21.96, - "int8": 30.89, - "fp16": 49.48, - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "mobilenet-v2", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Accelerator Platforms", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 3134.27, - "fp16": 3004.5, - "fp32": "", - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 0.57, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "phi-3-mini-4k-instruct", - "featured_SKU": false, - "whats_new_model": true, - "PlatformType": "Accelerator Platforms", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "", - "token_int4": 69.93, - "token_int8": 51.51, - "token_fp16": 32.84 - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": 14.3, - "int8": 19.41, - "fp16": 30.45, - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "qwen2-7b", - "featured_SKU": false, - "whats_new_model": true, - "PlatformType": "Accelerator Platforms", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "", - "token_int4": 45.8, - "token_int8": 32.78, - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": 21.83, - "int8": 30.5, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "resnet-50", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Accelerator Platforms", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 1921.18, - "fp16": 1329.28, - "fp32": "", - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 0.78, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "ssd-resnet34-1200", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Accelerator Platforms", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 133.77, - "fp16": "", - "fp32": "", - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 13.93, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "ssd_mobilenet_v1_coco", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Accelerator Platforms", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 2200.83, - "fp16": 1665.15, - "fp32": "", - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 0.78, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "stable-diffusion-v1-5", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Accelerator Platforms", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 2.33, - "fp16": 2.36, - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Data Center GPU Flex 170 dGPU", - "Model": "yolo_v8n", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Accelerator Platforms", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 759.93, - "fp16": 694.57, - "fp32": "", - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 1.96, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU+iGPU", - "Model": "efficientdet-d0", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 36.93, - "fp16": "", - "fp32": 27.64, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU+iGPU", - "Model": "mobilenet-v2", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 484.32, - "fp16": "", - "fp32": 278.4, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU+iGPU", - "Model": "resnet-50", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 112.23, - "fp16": "", - "fp32": 42.14, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU+iGPU", - "Model": "ssd-resnet34-1200", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 2.04, - "fp16": "", - "fp32": 0.6, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU+iGPU", - "Model": "ssd_mobilenet_v1_coco", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 216.96, - "fp16": "", - "fp32": 94.92, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU+iGPU", - "Model": "yolo11", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": 34.52, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU+iGPU", - "Model": "yolo_v8n", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 61.06, - "fp16": "", - "fp32": 28.61, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU-only", - "Model": "efficientdet-d0", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 15.44, - "fp16": "", - "fp32": 12.75, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 66.23, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU-only", - "Model": "mobilenet-v2", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 296.53, - "fp16": "", - "fp32": 183.3, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 3.8, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU-only", - "Model": "resnet-50", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 48.77, - "fp16": "", - "fp32": 20.13, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 21.88, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU-only", - "Model": "ssd-resnet34-1200", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 0.82, - "fp16": "", - "fp32": 0.31, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 1224.62, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU-only", - "Model": "ssd_mobilenet_v1_coco", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 106.12, - "fp16": "", - "fp32": 49.52, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 9.72, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU-only", - "Model": "yolo11", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": 15.36, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": "", - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 CPU-only", - "Model": "yolo_v8n", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 23.65, - "fp16": "", - "fp32": 12.86, - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 43.43, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 iGPU-only", - "Model": "efficientdet-d0", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 33.69, - "fp16": 30.91, - "fp32": "", - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 38.02, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 iGPU-only", - "Model": "mobilenet-v2", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 337.95, - "fp16": 267.38, - "fp32": "", - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 3.84, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 iGPU-only", - "Model": "resnet-50", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 81.72, - "fp16": 49.76, - "fp32": "", - "bf16": "", - "token_int4": "", - "token_int8": "", - "token_fp16": "" - } - ], - "Unit": "FPS", - "UnitDesc": "higher is better" - }, - "latency": { - "Precisions": [ - { - "int4": "", - "int8": 13.15, - "fp16": "", - "fp32": "", - "bf16": "" - } - ], - "Unit": "ms", - "UnitDesc": "lower is better" - } - } - }, - { - "Platform": "Intel® Processor N100 iGPU-only", - "Model": "ssd-resnet34-1200", - "featured_SKU": false, - "whats_new_model": false, - "PlatformType": "Mobile Platforms (Intel® Atom™)", - "Parameters": { - "throughput": { - "Precisions": [ - { - "int4": "", - "int8": 1.62, - "fp16": 1.01, - "fp32": "", + "int4": "", + "int8": 484.32, + "fp16": "", + "fp32": 278.4, "bf16": "", "token_int4": "", "token_int8": "", @@ -15340,7 +14200,7 @@ "Precisions": [ { "int4": "", - "int8": 622.97, + "int8": "", "fp16": "", "fp32": "", "bf16": "" @@ -15352,8 +14212,8 @@ } }, { - "Platform": "Intel® Processor N100 iGPU-only", - "Model": "ssd_mobilenet_v1_coco", + "Platform": "Intel® Processor N100 CPU+iGPU", + "Model": "resnet-50", "featured_SKU": false, "whats_new_model": false, "PlatformType": "Mobile Platforms (Intel® Atom™)", @@ -15362,9 +14222,9 @@ "Precisions": [ { "int4": "", - "int8": 164.31, - "fp16": 106.85, - "fp32": "", + "int8": 112.23, + "fp16": "", + "fp32": 42.14, "bf16": "", "token_int4": "", "token_int8": "", @@ -15378,7 +14238,7 @@ "Precisions": [ { "int4": "", - "int8": 7.35, + "int8": "", "fp16": "", "fp32": "", "bf16": "" @@ -15390,8 +14250,8 @@ } }, { - "Platform": "Intel® Processor N100 iGPU-only", - "Model": "yolo_v8n", + "Platform": "Intel® Processor N100 CPU+iGPU", + "Model": "ssd-resnet34-1200", "featured_SKU": false, "whats_new_model": false, "PlatformType": "Mobile Platforms (Intel® Atom™)", @@ -15400,9 +14260,9 @@ "Precisions": [ { "int4": "", - "int8": 47.04, - "fp16": 34.97, - "fp32": "", + "int8": 2.04, + "fp16": "", + "fp32": 0.6, "bf16": "", "token_int4": "", "token_int8": "", @@ -15416,7 +14276,7 @@ "Precisions": [ { "int4": "", - "int8": 23.03, + "int8": "", "fp16": "", "fp32": "", "bf16": "" @@ -15428,20 +14288,20 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "bert-base-cased", + "Platform": "Intel® Processor N100 CPU+iGPU", + "Model": "ssd_mobilenet_v1_coco", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", + "int8": 216.96, "fp16": "", - "fp32": "", - "bf16": 2314.52, + "fp32": 94.92, + "bf16": "", "token_int4": "", "token_int8": "", "token_fp16": "" @@ -15457,7 +14317,7 @@ "int8": "", "fp16": "", "fp32": "", - "bf16": 6.96 + "bf16": "" } ], "Unit": "ms", @@ -15466,11 +14326,11 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "efficientdet-d0", + "Platform": "Intel® Processor N100 CPU+iGPU", + "Model": "yolo11", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ @@ -15478,8 +14338,8 @@ "int4": "", "int8": "", "fp16": "", - "fp32": "", - "bf16": 1153.0, + "fp32": 34.52, + "bf16": "", "token_int4": "", "token_int8": "", "token_fp16": "" @@ -15495,7 +14355,7 @@ "int8": "", "fp16": "", "fp32": "", - "bf16": 6.38 + "bf16": "" } ], "Unit": "ms", @@ -15504,23 +14364,23 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "gemma-2-9b", + "Platform": "Intel® Processor N100 CPU+iGPU", + "Model": "yolo_v8n", "featured_SKU": false, - "whats_new_model": true, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "whats_new_model": false, + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", + "int8": 61.06, "fp16": "", - "fp32": "", + "fp32": 28.61, "bf16": "", - "token_int4": 15.13, - "token_int8": 11.3, - "token_fp16": 7.91 + "token_int4": "", + "token_int8": "", + "token_fp16": "" } ], "Unit": "FPS", @@ -15529,9 +14389,9 @@ "latency": { "Precisions": [ { - "int4": 66.06, - "int8": 88.43, - "fp16": 126.41, + "int4": "", + "int8": "", + "fp16": "", "fp32": "", "bf16": "" } @@ -15542,23 +14402,23 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "glm-4-9b-chat", + "Platform": "Intel® Processor N100 CPU-only", + "Model": "efficientdet-d0", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", + "int8": 15.44, "fp16": "", - "fp32": "", + "fp32": 12.75, "bf16": "", - "token_int4": 18.48, - "token_int8": 12.91, - "token_fp16": 8.64 + "token_int4": "", + "token_int8": "", + "token_fp16": "" } ], "Unit": "FPS", @@ -15567,9 +14427,9 @@ "latency": { "Precisions": [ { - "int4": 54.09, - "int8": 77.42, - "fp16": 115.66, + "int4": "", + "int8": 66.23, + "fp16": "", "fp32": "", "bf16": "" } @@ -15580,23 +14440,23 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "llama-2-7b-chat", + "Platform": "Intel® Processor N100 CPU-only", + "Model": "mobilenet-v2", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", + "int8": 296.53, "fp16": "", - "fp32": "", + "fp32": 183.3, "bf16": "", - "token_int4": 21.97, - "token_int8": 15.54, - "token_fp16": 11.29 + "token_int4": "", + "token_int8": "", + "token_fp16": "" } ], "Unit": "FPS", @@ -15605,9 +14465,9 @@ "latency": { "Precisions": [ { - "int4": 45.5, - "int8": 64.31, - "fp16": 88.54, + "int4": "", + "int8": 3.8, + "fp16": "", "fp32": "", "bf16": "" } @@ -15618,23 +14478,23 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "llama-3-8b", + "Platform": "Intel® Processor N100 CPU-only", + "Model": "resnet-50", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", + "int8": 48.77, "fp16": "", - "fp32": "", + "fp32": 20.13, "bf16": "", - "token_int4": 20.0, - "token_int8": 14.57, - "token_fp16": 9.82 + "token_int4": "", + "token_int8": "", + "token_fp16": "" } ], "Unit": "FPS", @@ -15643,9 +14503,9 @@ "latency": { "Precisions": [ { - "int4": 49.98, - "int8": 68.59, - "fp16": 101.73, + "int4": "", + "int8": 21.88, + "fp16": "", "fp32": "", "bf16": "" } @@ -15656,20 +14516,20 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "mask_rcnn_resnet50_atrous_coco", + "Platform": "Intel® Processor N100 CPU-only", + "Model": "ssd-resnet34-1200", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", + "int8": 0.82, "fp16": "", - "fp32": "", - "bf16": 35.29, + "fp32": 0.31, + "bf16": "", "token_int4": "", "token_int8": "", "token_fp16": "" @@ -15682,10 +14542,10 @@ "Precisions": [ { "int4": "", - "int8": "", + "int8": 1224.62, "fp16": "", "fp32": "", - "bf16": 100.04 + "bf16": "" } ], "Unit": "ms", @@ -15694,23 +14554,23 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "mistral-7b-v0.1", + "Platform": "Intel® Processor N100 CPU-only", + "Model": "ssd_mobilenet_v1_coco", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", + "int8": 106.12, "fp16": "", - "fp32": "", + "fp32": 49.52, "bf16": "", - "token_int4": 22.73, - "token_int8": 15.18, - "token_fp16": 10.61 + "token_int4": "", + "token_int8": "", + "token_fp16": "" } ], "Unit": "FPS", @@ -15719,9 +14579,9 @@ "latency": { "Precisions": [ { - "int4": 43.98, - "int8": 65.87, - "fp16": 94.18, + "int4": "", + "int8": 9.72, + "fp16": "", "fp32": "", "bf16": "" } @@ -15732,11 +14592,11 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "mobilenet-v2", + "Platform": "Intel® Processor N100 CPU-only", + "Model": "yolo11", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ @@ -15744,8 +14604,8 @@ "int4": "", "int8": "", "fp16": "", - "fp32": "", - "bf16": 13124.67, + "fp32": 15.36, + "bf16": "", "token_int4": "", "token_int8": "", "token_fp16": "" @@ -15761,7 +14621,7 @@ "int8": "", "fp16": "", "fp32": "", - "bf16": 0.83 + "bf16": "" } ], "Unit": "ms", @@ -15770,23 +14630,23 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "phi-3-mini-4k-instruct", + "Platform": "Intel® Processor N100 CPU-only", + "Model": "yolo_v8n", "featured_SKU": false, - "whats_new_model": true, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "whats_new_model": false, + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", + "int8": 23.65, "fp16": "", - "fp32": "", + "fp32": 12.86, "bf16": "", - "token_int4": 31.5, - "token_int8": 25.32, - "token_fp16": 18.29 + "token_int4": "", + "token_int8": "", + "token_fp16": "" } ], "Unit": "FPS", @@ -15795,9 +14655,9 @@ "latency": { "Precisions": [ { - "int4": 31.74, - "int8": 39.49, - "fp16": 54.66, + "int4": "", + "int8": 43.43, + "fp16": "", "fp32": "", "bf16": "" } @@ -15808,23 +14668,23 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "qwen2-7b", + "Platform": "Intel® Processor N100 iGPU-only", + "Model": "efficientdet-d0", "featured_SKU": false, - "whats_new_model": true, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "whats_new_model": false, + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", - "fp16": "", + "int8": 33.69, + "fp16": 30.91, "fp32": "", "bf16": "", - "token_int4": 21.22, - "token_int8": 15.5, - "token_fp16": 10.78 + "token_int4": "", + "token_int8": "", + "token_fp16": "" } ], "Unit": "FPS", @@ -15833,9 +14693,9 @@ "latency": { "Precisions": [ { - "int4": 47.12, - "int8": 64.49, - "fp16": 92.7, + "int4": "", + "int8": 38.02, + "fp16": "", "fp32": "", "bf16": "" } @@ -15846,20 +14706,20 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "resnet-50", + "Platform": "Intel® Processor N100 iGPU-only", + "Model": "mobilenet-v2", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", - "fp16": "", + "int8": 337.95, + "fp16": 267.38, "fp32": "", - "bf16": 10591.04, + "bf16": "", "token_int4": "", "token_int8": "", "token_fp16": "" @@ -15872,10 +14732,10 @@ "Precisions": [ { "int4": "", - "int8": "", + "int8": 3.84, "fp16": "", "fp32": "", - "bf16": 1.8 + "bf16": "" } ], "Unit": "ms", @@ -15884,20 +14744,20 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "ssd-resnet34-1200", + "Platform": "Intel® Processor N100 iGPU-only", + "Model": "resnet-50", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", - "fp16": "", + "int8": 81.72, + "fp16": 49.76, "fp32": "", - "bf16": 204.32, + "bf16": "", "token_int4": "", "token_int8": "", "token_fp16": "" @@ -15910,10 +14770,10 @@ "Precisions": [ { "int4": "", - "int8": "", + "int8": 13.15, "fp16": "", "fp32": "", - "bf16": 17.56 + "bf16": "" } ], "Unit": "ms", @@ -15922,20 +14782,20 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "ssd_mobilenet_v1_coco", + "Platform": "Intel® Processor N100 iGPU-only", + "Model": "ssd-resnet34-1200", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", - "fp16": "", + "int8": 1.62, + "fp16": 1.01, "fp32": "", - "bf16": 7286.92, + "bf16": "", "token_int4": "", "token_int8": "", "token_fp16": "" @@ -15948,10 +14808,10 @@ "Precisions": [ { "int4": "", - "int8": "", + "int8": 622.97, "fp16": "", "fp32": "", - "bf16": 1.08 + "bf16": "" } ], "Unit": "ms", @@ -15960,20 +14820,20 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", - "Model": "yolo11", + "Platform": "Intel® Processor N100 iGPU-only", + "Model": "ssd_mobilenet_v1_coco", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", - "fp16": "", + "int8": 164.31, + "fp16": 106.85, "fp32": "", - "bf16": 2130.01, + "bf16": "", "token_int4": "", "token_int8": "", "token_fp16": "" @@ -15986,7 +14846,7 @@ "Precisions": [ { "int4": "", - "int8": "", + "int8": 7.35, "fp16": "", "fp32": "", "bf16": "" @@ -15998,20 +14858,20 @@ } }, { - "Platform": "Intel® Xeon® GNR29 CPU-only", + "Platform": "Intel® Processor N100 iGPU-only", "Model": "yolo_v8n", "featured_SKU": false, "whats_new_model": false, - "PlatformType": "Server Platforms (Intel® Xeon®)", + "PlatformType": "Mobile Platforms (Intel® Atom™)", "Parameters": { "throughput": { "Precisions": [ { "int4": "", - "int8": "", - "fp16": "", + "int8": 47.04, + "fp16": 34.97, "fp32": "", - "bf16": 2528.52, + "bf16": "", "token_int4": "", "token_int8": "", "token_fp16": "" @@ -16024,10 +14884,10 @@ "Precisions": [ { "int4": "", - "int8": "", + "int8": 23.03, "fp16": "", "fp32": "", - "bf16": 4.55 + "bf16": "" } ], "Unit": "ms", @@ -19457,7 +18317,7 @@ }, { "Platform": "Intel® Xeon® 6979P CPU-only", - "Model": "bert-base-cased ", + "Model": "bert-base-cased", "featured_SKU": true, "whats_new_model": false, "PlatformType": "Server Platforms (Intel® Xeon®)", @@ -19495,7 +18355,7 @@ }, { "Platform": "Intel® Xeon® 6979P CPU-only", - "Model": "efficientdet-d0 ", + "Model": "efficientdet-d0", "featured_SKU": true, "whats_new_model": false, "PlatformType": "Server Platforms (Intel® Xeon®)", @@ -19533,7 +18393,7 @@ }, { "Platform": "Intel® Xeon® 6979P CPU-only", - "Model": "mask_rcnn_resnet50_atrous_coco ", + "Model": "mask_rcnn_resnet50_atrous_coco", "featured_SKU": true, "whats_new_model": false, "PlatformType": "Server Platforms (Intel® Xeon®)", @@ -19571,7 +18431,7 @@ }, { "Platform": "Intel® Xeon® 6979P CPU-only", - "Model": "mobilenet-v2 ", + "Model": "mobilenet-v2", "featured_SKU": true, "whats_new_model": false, "PlatformType": "Server Platforms (Intel® Xeon®)", @@ -19609,7 +18469,7 @@ }, { "Platform": "Intel® Xeon® 6979P CPU-only", - "Model": "resnet-50 ", + "Model": "resnet-50", "featured_SKU": true, "whats_new_model": false, "PlatformType": "Server Platforms (Intel® Xeon®)", @@ -19647,7 +18507,7 @@ }, { "Platform": "Intel® Xeon® 6979P CPU-only", - "Model": "ssd-resnet34-1200 ", + "Model": "ssd-resnet34-1200", "featured_SKU": true, "whats_new_model": false, "PlatformType": "Server Platforms (Intel® Xeon®)", @@ -19685,7 +18545,7 @@ }, { "Platform": "Intel® Xeon® 6979P CPU-only", - "Model": "ssd_mobilenet_v1_coco ", + "Model": "ssd_mobilenet_v1_coco", "featured_SKU": true, "whats_new_model": false, "PlatformType": "Server Platforms (Intel® Xeon®)", @@ -19723,7 +18583,7 @@ }, { "Platform": "Intel® Xeon® 6979P CPU-only", - "Model": "yolo_v8n ", + "Model": "yolo_v8n", "featured_SKU": true, "whats_new_model": false, "PlatformType": "Server Platforms (Intel® Xeon®)", diff --git a/docs/sphinx_setup/_static/benchmarks_files/graph-config.json b/docs/sphinx_setup/_static/benchmarks_files/graph-config.json index 29fbe714094b74..e5fe953b72bca1 100644 --- a/docs/sphinx_setup/_static/benchmarks_files/graph-config.json +++ b/docs/sphinx_setup/_static/benchmarks_files/graph-config.json @@ -7,6 +7,9 @@ "BF16": "bf16", "FP32_OV": "fp32_ov", "FP32_OVMS": "fp32_ovms", + "TOKEN_INT4": "token_int4", + "TOKEN_INT8": "token_int8", + "TOKEN_FP16": "token_fp16", "INT8_OV": "int8_ov", "INT8_OVMS": "int8_ovms", "THROUGHPUT": "Throughput", @@ -73,6 +76,21 @@ "color": "#00536a", "label": "INT8 OVMS" }, + "token_int4": { + "data": null, + "color": "#00536a", + "label": "T INT4" + }, + "token_int8": { + "data": null, + "color": "#00636a", + "label": "T INT8" + }, + "token_fp16": { + "data": null, + "color": "#00736a", + "label": "T INT16" + }, "Vllm": { "Latency": { "data": null, From c6d8e8228dc105391f1d496d4b03bb16698e8c6b Mon Sep 17 00:00:00 2001 From: Karol Blaszczak Date: Tue, 19 Nov 2024 23:25:04 +0100 Subject: [PATCH 03/24] Add 2024.5 Selector Tool (#27619) (#27623) port: https://github.com/openvinotoolkit/openvino/pull/27619 Co-authored-by: Alexander Suvorov --- .../get-started/install-openvino.rst | 4 +- .../{index-f34d1fad.js => index-Codcw3jz.js} | 0 .../selector-tool/assets/selector-4f9c3c09.js | 61 ------------------- ...tor-b0e2854e.css => selector-BC2lpCQ9.css} | 0 .../selector-tool/assets/selector-Bu10eOtw.js | 61 +++++++++++++++++++ ...tor-8d4cf1d.html => selector-451bede.html} | 7 +-- 6 files changed, 66 insertions(+), 67 deletions(-) rename docs/sphinx_setup/_static/selector-tool/assets/{index-f34d1fad.js => index-Codcw3jz.js} (100%) delete mode 100644 docs/sphinx_setup/_static/selector-tool/assets/selector-4f9c3c09.js rename docs/sphinx_setup/_static/selector-tool/assets/{selector-b0e2854e.css => selector-BC2lpCQ9.css} (100%) create mode 100644 docs/sphinx_setup/_static/selector-tool/assets/selector-Bu10eOtw.js rename docs/sphinx_setup/_static/selector-tool/{selector-8d4cf1d.html => selector-451bede.html} (66%) diff --git a/docs/articles_en/get-started/install-openvino.rst b/docs/articles_en/get-started/install-openvino.rst index 22d889c18f71cd..71afff035b2c81 100644 --- a/docs/articles_en/get-started/install-openvino.rst +++ b/docs/articles_en/get-started/install-openvino.rst @@ -19,9 +19,9 @@ Install OpenVINO™ 2024.4 .. raw:: html - + - + OpenVINO 2024.5, described here, is not a Long-Term-Support version! All currently supported versions are: diff --git a/docs/sphinx_setup/_static/selector-tool/assets/index-f34d1fad.js b/docs/sphinx_setup/_static/selector-tool/assets/index-Codcw3jz.js similarity index 100% rename from docs/sphinx_setup/_static/selector-tool/assets/index-f34d1fad.js rename to docs/sphinx_setup/_static/selector-tool/assets/index-Codcw3jz.js diff --git a/docs/sphinx_setup/_static/selector-tool/assets/selector-4f9c3c09.js b/docs/sphinx_setup/_static/selector-tool/assets/selector-4f9c3c09.js deleted file mode 100644 index 0836ad1aed41f3..00000000000000 --- a/docs/sphinx_setup/_static/selector-tool/assets/selector-4f9c3c09.js +++ /dev/null @@ -1,61 +0,0 @@ -var Xf=Object.defineProperty;var Jf=(e,t,n)=>t in e?Xf(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Ve=(e,t,n)=>(Jf(e,typeof t!="symbol"?t+"":t,n),n);function uc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var cc={exports:{}},po={},dc={exports:{}},D={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var qr=Symbol.for("react.element"),Zf=Symbol.for("react.portal"),qf=Symbol.for("react.fragment"),ep=Symbol.for("react.strict_mode"),tp=Symbol.for("react.profiler"),np=Symbol.for("react.provider"),rp=Symbol.for("react.context"),ip=Symbol.for("react.forward_ref"),op=Symbol.for("react.suspense"),lp=Symbol.for("react.memo"),sp=Symbol.for("react.lazy"),Oa=Symbol.iterator;function ap(e){return e===null||typeof e!="object"?null:(e=Oa&&e[Oa]||e["@@iterator"],typeof e=="function"?e:null)}var fc={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},pc=Object.assign,hc={};function sr(e,t,n){this.props=e,this.context=t,this.refs=hc,this.updater=n||fc}sr.prototype.isReactComponent={};sr.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};sr.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function mc(){}mc.prototype=sr.prototype;function hs(e,t,n){this.props=e,this.context=t,this.refs=hc,this.updater=n||fc}var ms=hs.prototype=new mc;ms.constructor=hs;pc(ms,sr.prototype);ms.isPureReactComponent=!0;var _a=Array.isArray,gc=Object.prototype.hasOwnProperty,gs={current:null},vc={key:!0,ref:!0,__self:!0,__source:!0};function yc(e,t,n){var r,i={},o=null,l=null;if(t!=null)for(r in t.ref!==void 0&&(l=t.ref),t.key!==void 0&&(o=""+t.key),t)gc.call(t,r)&&!vc.hasOwnProperty(r)&&(i[r]=t[r]);var s=arguments.length-2;if(s===1)i.children=n;else if(1{const e={type:"size",height:document.body.offsetHeight};window.parent.postMessage(e)};new ResizeObserver(kp).observe(document.body);function me(e){"@babel/helpers - typeof";return me=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},me(e)}function pt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Sp(e,t){if(me(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||"default");if(me(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function kc(e){var t=Sp(e,"string");return me(t)==="symbol"?t:String(t)}function Pa(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:{};pt(this,e),this.init(t,n)}return ht(e,[{key:"init",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=r.prefix||"i18next:",this.logger=n||Np,this.options=r,this.debug=r.debug}},{key:"setDebug",value:function(n){this.debug=n}},{key:"log",value:function(){for(var n=arguments.length,r=new Array(n),i=0;i1?r-1:0),o=1;o-1?s.replace(/###/g,"."):s}function i(){return!e||typeof e=="string"}for(var o=typeof t!="string"?[].concat(t):t.split(".");o.length>1;){if(i())return{};var l=r(o.shift());!e[l]&&n&&(e[l]=new n),Object.prototype.hasOwnProperty.call(e,l)?e=e[l]:e={}}return i()?{}:{obj:e,k:r(o.shift())}}function Ta(e,t,n){var r=ws(e,t,Object),i=r.obj,o=r.k;i[o]=n}function xp(e,t,n,r){var i=ws(e,t,Object),o=i.obj,l=i.k;o[l]=o[l]||[],r&&(o[l]=o[l].concat(n)),r||o[l].push(n)}function bi(e,t){var n=ws(e,t),r=n.obj,i=n.k;if(r)return r[i]}function Ra(e,t,n){var r=bi(e,n);return r!==void 0?r:bi(t,n)}function Nc(e,t,n){for(var r in t)r!=="__proto__"&&r!=="constructor"&&(r in e?typeof e[r]=="string"||e[r]instanceof String||typeof t[r]=="string"||t[r]instanceof String?n&&(e[r]=t[r]):Nc(e[r],t[r],n):e[r]=t[r]);return e}function Tn(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var Cp={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function Ip(e){return typeof e=="string"?e.replace(/[&<>"'\/]/g,function(t){return Cp[t]}):e}var mo=typeof window<"u"&&window.navigator&&typeof window.navigator.userAgentData>"u"&&window.navigator.userAgent&&window.navigator.userAgent.indexOf("MSIE")>-1,Tp=[" ",",","?","!",";"];function Rp(e,t,n){t=t||"",n=n||"";var r=Tp.filter(function(s){return t.indexOf(s)<0&&n.indexOf(s)<0});if(r.length===0)return!0;var i=new RegExp("(".concat(r.map(function(s){return s==="?"?"\\?":s}).join("|"),")")),o=!i.test(e);if(!o){var l=e.indexOf(n);l>0&&!i.test(e.substring(0,l))&&(o=!0)}return o}function La(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function si(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Pc(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(e){if(e[t])return e[t];for(var r=t.split(n),i=e,o=0;oo+l;)l++,s=r.slice(o,o+l).join(n),a=i[s];if(a===void 0)return;if(a===null)return null;if(t.endsWith(s)){if(typeof a=="string")return a;if(s&&typeof a[s]=="string")return a[s]}var u=r.slice(o+l).join(n);return u?Pc(a,u,n):void 0}i=i[r[o]]}return i}}var jp=function(e){ho(n,e);var t=Lp(n);function n(r){var i,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};return pt(this,n),i=t.call(this),mo&&nn.call(Gt(i)),i.data=r||{},i.options=o,i.options.keySeparator===void 0&&(i.options.keySeparator="."),i.options.ignoreJSONStructure===void 0&&(i.options.ignoreJSONStructure=!0),i}return ht(n,[{key:"addNamespaces",value:function(i){this.options.ns.indexOf(i)<0&&this.options.ns.push(i)}},{key:"removeNamespaces",value:function(i){var o=this.options.ns.indexOf(i);o>-1&&this.options.ns.splice(o,1)}},{key:"getResource",value:function(i,o,l){var s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},a=s.keySeparator!==void 0?s.keySeparator:this.options.keySeparator,u=s.ignoreJSONStructure!==void 0?s.ignoreJSONStructure:this.options.ignoreJSONStructure,p=[i,o];l&&typeof l!="string"&&(p=p.concat(l)),l&&typeof l=="string"&&(p=p.concat(a?l.split(a):l)),i.indexOf(".")>-1&&(p=i.split("."));var d=bi(this.data,p);return d||!u||typeof l!="string"?d:Pc(this.data&&this.data[i]&&this.data[i][o],l,a)}},{key:"addResource",value:function(i,o,l,s){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1},u=this.options.keySeparator;u===void 0&&(u=".");var p=[i,o];l&&(p=p.concat(u?l.split(u):l)),i.indexOf(".")>-1&&(p=i.split("."),s=o,o=p[1]),this.addNamespaces(o),Ta(this.data,p,s),a.silent||this.emit("added",i,o,l,s)}},{key:"addResources",value:function(i,o,l){var s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(var a in l)(typeof l[a]=="string"||Object.prototype.toString.apply(l[a])==="[object Array]")&&this.addResource(i,o,a,l[a],{silent:!0});s.silent||this.emit("added",i,o,l)}},{key:"addResourceBundle",value:function(i,o,l,s,a){var u=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1},p=[i,o];i.indexOf(".")>-1&&(p=i.split("."),s=l,l=o,o=p[1]),this.addNamespaces(o);var d=bi(this.data,p)||{};s?Nc(d,l,a):d=si(si({},d),l),Ta(this.data,p,d),u.silent||this.emit("added",i,o,l)}},{key:"removeResourceBundle",value:function(i,o){this.hasResourceBundle(i,o)&&delete this.data[i][o],this.removeNamespaces(o),this.emit("removed",i,o)}},{key:"hasResourceBundle",value:function(i,o){return this.getResource(i,o)!==void 0}},{key:"getResourceBundle",value:function(i,o){return o||(o=this.options.defaultNS),this.options.compatibilityAPI==="v1"?si(si({},{}),this.getResource(i,o)):this.getResource(i,o)}},{key:"getDataByLanguage",value:function(i){return this.data[i]}},{key:"hasLanguageSomeTranslations",value:function(i){var o=this.getDataByLanguage(i),l=o&&Object.keys(o)||[];return!!l.find(function(s){return o[s]&&Object.keys(o[s]).length>0})}},{key:"toJSON",value:function(){return this.data}}]),n}(nn),Ec={processors:{},addPostProcessor:function(t){this.processors[t.name]=t},handle:function(t,n,r,i,o){var l=this;return t.forEach(function(s){l.processors[s]&&(n=l.processors[s].process(n,r,i,o))}),n}};function Aa(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function Oe(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var ja={},Fa=function(e){ho(n,e);var t=Fp(n);function n(r){var i,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return pt(this,n),i=t.call(this),mo&&nn.call(Gt(i)),Ep(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],r,Gt(i)),i.options=o,i.options.keySeparator===void 0&&(i.options.keySeparator="."),i.logger=kt.create("translator"),i}return ht(n,[{key:"changeLanguage",value:function(i){i&&(this.language=i)}},{key:"exists",value:function(i){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(i==null)return!1;var l=this.resolve(i,o);return l&&l.res!==void 0}},{key:"extractFromKey",value:function(i,o){var l=o.nsSeparator!==void 0?o.nsSeparator:this.options.nsSeparator;l===void 0&&(l=":");var s=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator,a=o.ns||this.options.defaultNS||[],u=l&&i.indexOf(l)>-1,p=!this.options.userDefinedKeySeparator&&!o.keySeparator&&!this.options.userDefinedNsSeparator&&!o.nsSeparator&&!Rp(i,l,s);if(u&&!p){var d=i.match(this.interpolator.nestingRegexp);if(d&&d.length>0)return{key:i,namespaces:a};var h=i.split(l);(l!==s||l===s&&this.options.ns.indexOf(h[0])>-1)&&(a=h.shift()),i=h.join(s)}return typeof a=="string"&&(a=[a]),{key:i,namespaces:a}}},{key:"translate",value:function(i,o,l){var s=this;if(me(o)!=="object"&&this.options.overloadTranslationOptionHandler&&(o=this.options.overloadTranslationOptionHandler(arguments)),o||(o={}),i==null)return"";Array.isArray(i)||(i=[String(i)]);var a=o.returnDetails!==void 0?o.returnDetails:this.options.returnDetails,u=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator,p=this.extractFromKey(i[i.length-1],o),d=p.key,h=p.namespaces,g=h[h.length-1],y=o.lng||this.language,k=o.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(y&&y.toLowerCase()==="cimode"){if(k){var _=o.nsSeparator||this.options.nsSeparator;return a?{res:"".concat(g).concat(_).concat(d),usedKey:d,exactUsedKey:d,usedLng:y,usedNS:g}:"".concat(g).concat(_).concat(d)}return a?{res:d,usedKey:d,exactUsedKey:d,usedLng:y,usedNS:g}:d}var f=this.resolve(i,o),c=f&&f.res,m=f&&f.usedKey||d,w=f&&f.exactUsedKey||d,O=Object.prototype.toString.apply(c),S=["[object Number]","[object Function]","[object RegExp]"],P=o.joinArrays!==void 0?o.joinArrays:this.options.joinArrays,E=!this.i18nFormat||this.i18nFormat.handleAsObject,A=typeof c!="string"&&typeof c!="boolean"&&typeof c!="number";if(E&&c&&A&&S.indexOf(O)<0&&!(typeof P=="string"&&O==="[object Array]")){if(!o.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");var x=this.options.returnedObjectHandler?this.options.returnedObjectHandler(m,c,Oe(Oe({},o),{},{ns:h})):"key '".concat(d," (").concat(this.language,")' returned an object instead of string.");return a?(f.res=x,f):x}if(u){var H=O==="[object Array]",Te=H?[]:{},Nt=H?w:m;for(var rt in c)if(Object.prototype.hasOwnProperty.call(c,rt)){var xn="".concat(Nt).concat(u).concat(rt);Te[rt]=this.translate(xn,Oe(Oe({},o),{joinArrays:!1,ns:h})),Te[rt]===xn&&(Te[rt]=c[rt])}c=Te}}else if(E&&typeof P=="string"&&O==="[object Array]")c=c.join(P),c&&(c=this.extendTranslation(c,i,o,l));else{var mt=!1,it=!1,C=o.count!==void 0&&typeof o.count!="string",L=n.hasDefaultValue(o),j=C?this.pluralResolver.getSuffix(y,o.count,o):"",V=o["defaultValue".concat(j)]||o.defaultValue;!this.isValidLookup(c)&&L&&(mt=!0,c=V),this.isValidLookup(c)||(it=!0,c=d);var Q=o.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey,Pt=Q&&it?void 0:c,ze=L&&V!==c&&this.options.updateMissing;if(it||mt||ze){if(this.logger.log(ze?"updateKey":"missingKey",y,g,d,ze?V:c),u){var Cn=this.resolve(d,Oe(Oe({},o),{},{keySeparator:!1}));Cn&&Cn.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}var be=[],Et=this.languageUtils.getFallbackCodes(this.options.fallbackLng,o.lng||this.language);if(this.options.saveMissingTo==="fallback"&&Et&&Et[0])for(var Lo=0;Lo1&&arguments[1]!==void 0?arguments[1]:{},s,a,u,p,d;return typeof i=="string"&&(i=[i]),i.forEach(function(h){if(!o.isValidLookup(s)){var g=o.extractFromKey(h,l),y=g.key;a=y;var k=g.namespaces;o.options.fallbackNS&&(k=k.concat(o.options.fallbackNS));var _=l.count!==void 0&&typeof l.count!="string",f=_&&!l.ordinal&&l.count===0&&o.pluralResolver.shouldUseIntlApi(),c=l.context!==void 0&&(typeof l.context=="string"||typeof l.context=="number")&&l.context!=="",m=l.lngs?l.lngs:o.languageUtils.toResolveHierarchy(l.lng||o.language,l.fallbackLng);k.forEach(function(w){o.isValidLookup(s)||(d=w,!ja["".concat(m[0],"-").concat(w)]&&o.utils&&o.utils.hasLoadedNamespace&&!o.utils.hasLoadedNamespace(d)&&(ja["".concat(m[0],"-").concat(w)]=!0,o.logger.warn('key "'.concat(a,'" for languages "').concat(m.join(", "),`" won't get resolved as namespace "`).concat(d,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),m.forEach(function(O){if(!o.isValidLookup(s)){p=O;var S=[y];if(o.i18nFormat&&o.i18nFormat.addLookupKeys)o.i18nFormat.addLookupKeys(S,y,O,w,l);else{var P;_&&(P=o.pluralResolver.getSuffix(O,l.count,l));var E="".concat(o.options.pluralSeparator,"zero");if(_&&(S.push(y+P),f&&S.push(y+E)),c){var A="".concat(y).concat(o.options.contextSeparator).concat(l.context);S.push(A),_&&(S.push(A+P),f&&S.push(A+E))}}for(var x;x=S.pop();)o.isValidLookup(s)||(u=x,s=o.getResource(O,w,x,l))}}))})}}),{res:s,usedKey:a,exactUsedKey:u,usedLng:p,usedNS:d}}},{key:"isValidLookup",value:function(i){return i!==void 0&&!(!this.options.returnNull&&i===null)&&!(!this.options.returnEmptyString&&i==="")}},{key:"getResource",value:function(i,o,l){var s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(i,o,l,s):this.resourceStore.getResource(i,o,l,s)}}],[{key:"hasDefaultValue",value:function(i){var o="defaultValue";for(var l in i)if(Object.prototype.hasOwnProperty.call(i,l)&&o===l.substring(0,o.length)&&i[l]!==void 0)return!0;return!1}}]),n}(nn);function Do(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Da=function(){function e(t){pt(this,e),this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=kt.create("languageUtils")}return ht(e,[{key:"getScriptPartFromCode",value:function(n){if(!n||n.indexOf("-")<0)return null;var r=n.split("-");return r.length===2||(r.pop(),r[r.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(r.join("-"))}},{key:"getLanguagePartFromCode",value:function(n){if(!n||n.indexOf("-")<0)return n;var r=n.split("-");return this.formatLanguageCode(r[0])}},{key:"formatLanguageCode",value:function(n){if(typeof n=="string"&&n.indexOf("-")>-1){var r=["hans","hant","latn","cyrl","cans","mong","arab"],i=n.split("-");return this.options.lowerCaseLng?i=i.map(function(o){return o.toLowerCase()}):i.length===2?(i[0]=i[0].toLowerCase(),i[1]=i[1].toUpperCase(),r.indexOf(i[1].toLowerCase())>-1&&(i[1]=Do(i[1].toLowerCase()))):i.length===3&&(i[0]=i[0].toLowerCase(),i[1].length===2&&(i[1]=i[1].toUpperCase()),i[0]!=="sgn"&&i[2].length===2&&(i[2]=i[2].toUpperCase()),r.indexOf(i[1].toLowerCase())>-1&&(i[1]=Do(i[1].toLowerCase())),r.indexOf(i[2].toLowerCase())>-1&&(i[2]=Do(i[2].toLowerCase()))),i.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?n.toLowerCase():n}},{key:"isSupportedCode",value:function(n){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(n=this.getLanguagePartFromCode(n)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(n)>-1}},{key:"getBestMatchFromCodes",value:function(n){var r=this;if(!n)return null;var i;return n.forEach(function(o){if(!i){var l=r.formatLanguageCode(o);(!r.options.supportedLngs||r.isSupportedCode(l))&&(i=l)}}),!i&&this.options.supportedLngs&&n.forEach(function(o){if(!i){var l=r.getLanguagePartFromCode(o);if(r.isSupportedCode(l))return i=l;i=r.options.supportedLngs.find(function(s){if(s.indexOf(l)===0)return s})}}),i||(i=this.getFallbackCodes(this.options.fallbackLng)[0]),i}},{key:"getFallbackCodes",value:function(n,r){if(!n)return[];if(typeof n=="function"&&(n=n(r)),typeof n=="string"&&(n=[n]),Object.prototype.toString.apply(n)==="[object Array]")return n;if(!r)return n.default||[];var i=n[r];return i||(i=n[this.getScriptPartFromCode(r)]),i||(i=n[this.formatLanguageCode(r)]),i||(i=n[this.getLanguagePartFromCode(r)]),i||(i=n.default),i||[]}},{key:"toResolveHierarchy",value:function(n,r){var i=this,o=this.getFallbackCodes(r||this.options.fallbackLng||[],n),l=[],s=function(u){u&&(i.isSupportedCode(u)?l.push(u):i.logger.warn("rejecting language code not found in supportedLngs: ".concat(u)))};return typeof n=="string"&&n.indexOf("-")>-1?(this.options.load!=="languageOnly"&&s(this.formatLanguageCode(n)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&s(this.getScriptPartFromCode(n)),this.options.load!=="currentOnly"&&s(this.getLanguagePartFromCode(n))):typeof n=="string"&&s(this.formatLanguageCode(n)),o.forEach(function(a){l.indexOf(a)<0&&s(i.formatLanguageCode(a))}),l}}]),e}(),Up=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],zp={1:function(t){return+(t>1)},2:function(t){return+(t!=1)},3:function(t){return 0},4:function(t){return t%10==1&&t%100!=11?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2},5:function(t){return t==0?0:t==1?1:t==2?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},6:function(t){return t==1?0:t>=2&&t<=4?1:2},7:function(t){return t==1?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2},8:function(t){return t==1?0:t==2?1:t!=8&&t!=11?2:3},9:function(t){return+(t>=2)},10:function(t){return t==1?0:t==2?1:t<7?2:t<11?3:4},11:function(t){return t==1||t==11?0:t==2||t==12?1:t>2&&t<20?2:3},12:function(t){return+(t%10!=1||t%100==11)},13:function(t){return+(t!==0)},14:function(t){return t==1?0:t==2?1:t==3?2:3},15:function(t){return t%10==1&&t%100!=11?0:t%10>=2&&(t%100<10||t%100>=20)?1:2},16:function(t){return t%10==1&&t%100!=11?0:t!==0?1:2},17:function(t){return t==1||t%10==1&&t%100!=11?0:1},18:function(t){return t==0?0:t==1?1:2},19:function(t){return t==1?0:t==0||t%100>1&&t%100<11?1:t%100>10&&t%100<20?2:3},20:function(t){return t==1?0:t==0||t%100>0&&t%100<20?1:2},21:function(t){return t%100==1?1:t%100==2?2:t%100==3||t%100==4?3:0},22:function(t){return t==1?0:t==2?1:(t<0||t>10)&&t%10==0?2:3}},bp=["v1","v2","v3"],Ua={zero:0,one:1,two:2,few:3,many:4,other:5};function Vp(){var e={};return Up.forEach(function(t){t.lngs.forEach(function(n){e[n]={numbers:t.nr,plurals:zp[t.fc]}})}),e}var $p=function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};pt(this,e),this.languageUtils=t,this.options=n,this.logger=kt.create("pluralResolver"),(!this.options.compatibilityJSON||this.options.compatibilityJSON==="v4")&&(typeof Intl>"u"||!Intl.PluralRules)&&(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=Vp()}return ht(e,[{key:"addRule",value:function(n,r){this.rules[n]=r}},{key:"getRule",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(n,{type:r.ordinal?"ordinal":"cardinal"})}catch{return}return this.rules[n]||this.rules[this.languageUtils.getLanguagePartFromCode(n)]}},{key:"needsPlural",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=this.getRule(n,r);return this.shouldUseIntlApi()?i&&i.resolvedOptions().pluralCategories.length>1:i&&i.numbers.length>1}},{key:"getPluralFormsOfKey",value:function(n,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(n,i).map(function(o){return"".concat(r).concat(o)})}},{key:"getSuffixes",value:function(n){var r=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=this.getRule(n,i);return o?this.shouldUseIntlApi()?o.resolvedOptions().pluralCategories.sort(function(l,s){return Ua[l]-Ua[s]}).map(function(l){return"".concat(r.options.prepend).concat(l)}):o.numbers.map(function(l){return r.getSuffix(n,l,i)}):[]}},{key:"getSuffix",value:function(n,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=this.getRule(n,i);return o?this.shouldUseIntlApi()?"".concat(this.options.prepend).concat(o.select(r)):this.getSuffixRetroCompatible(o,r):(this.logger.warn("no plural rule found for: ".concat(n)),"")}},{key:"getSuffixRetroCompatible",value:function(n,r){var i=this,o=n.noAbs?n.plurals(r):n.plurals(Math.abs(r)),l=n.numbers[o];this.options.simplifyPluralSuffix&&n.numbers.length===2&&n.numbers[0]===1&&(l===2?l="plural":l===1&&(l=""));var s=function(){return i.options.prepend&&l.toString()?i.options.prepend+l.toString():l.toString()};return this.options.compatibilityJSON==="v1"?l===1?"":typeof l=="number"?"_plural_".concat(l.toString()):s():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&n.numbers.length===2&&n.numbers[0]===1?s():this.options.prepend&&o.toString()?this.options.prepend+o.toString():o.toString()}},{key:"shouldUseIntlApi",value:function(){return!bp.includes(this.options.compatibilityJSON)}}]),e}();function za(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function ot(e){for(var t=1;t0&&arguments[0]!==void 0?arguments[0]:{};pt(this,e),this.logger=kt.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||function(n){return n},this.init(t)}return ht(e,[{key:"init",value:function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};n.interpolation||(n.interpolation={escapeValue:!0});var r=n.interpolation;this.escape=r.escape!==void 0?r.escape:Ip,this.escapeValue=r.escapeValue!==void 0?r.escapeValue:!0,this.useRawValueToEscape=r.useRawValueToEscape!==void 0?r.useRawValueToEscape:!1,this.prefix=r.prefix?Tn(r.prefix):r.prefixEscaped||"{{",this.suffix=r.suffix?Tn(r.suffix):r.suffixEscaped||"}}",this.formatSeparator=r.formatSeparator?r.formatSeparator:r.formatSeparator||",",this.unescapePrefix=r.unescapeSuffix?"":r.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":r.unescapeSuffix||"",this.nestingPrefix=r.nestingPrefix?Tn(r.nestingPrefix):r.nestingPrefixEscaped||Tn("$t("),this.nestingSuffix=r.nestingSuffix?Tn(r.nestingSuffix):r.nestingSuffixEscaped||Tn(")"),this.nestingOptionsSeparator=r.nestingOptionsSeparator?r.nestingOptionsSeparator:r.nestingOptionsSeparator||",",this.maxReplaces=r.maxReplaces?r.maxReplaces:1e3,this.alwaysFormat=r.alwaysFormat!==void 0?r.alwaysFormat:!1,this.resetRegExp()}},{key:"reset",value:function(){this.options&&this.init(this.options)}},{key:"resetRegExp",value:function(){var n="".concat(this.prefix,"(.+?)").concat(this.suffix);this.regexp=new RegExp(n,"g");var r="".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix);this.regexpUnescape=new RegExp(r,"g");var i="".concat(this.nestingPrefix,"(.+?)").concat(this.nestingSuffix);this.nestingRegexp=new RegExp(i,"g")}},{key:"interpolate",value:function(n,r,i,o){var l=this,s,a,u,p=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function d(_){return _.replace(/\$/g,"$$$$")}var h=function(f){if(f.indexOf(l.formatSeparator)<0){var c=Ra(r,p,f);return l.alwaysFormat?l.format(c,void 0,i,ot(ot(ot({},o),r),{},{interpolationkey:f})):c}var m=f.split(l.formatSeparator),w=m.shift().trim(),O=m.join(l.formatSeparator).trim();return l.format(Ra(r,p,w),O,i,ot(ot(ot({},o),r),{},{interpolationkey:w}))};this.resetRegExp();var g=o&&o.missingInterpolationHandler||this.options.missingInterpolationHandler,y=o&&o.interpolation&&o.interpolation.skipOnVariables!==void 0?o.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables,k=[{regex:this.regexpUnescape,safeValue:function(f){return d(f)}},{regex:this.regexp,safeValue:function(f){return l.escapeValue?d(l.escape(f)):d(f)}}];return k.forEach(function(_){for(u=0;s=_.regex.exec(n);){var f=s[1].trim();if(a=h(f),a===void 0)if(typeof g=="function"){var c=g(n,s,o);a=typeof c=="string"?c:""}else if(o&&Object.prototype.hasOwnProperty.call(o,f))a="";else if(y){a=s[0];continue}else l.logger.warn("missed to pass in variable ".concat(f," for interpolating ").concat(n)),a="";else typeof a!="string"&&!l.useRawValueToEscape&&(a=Ia(a));var m=_.safeValue(a);if(n=n.replace(s[0],m),y?(_.regex.lastIndex+=a.length,_.regex.lastIndex-=s[0].length):_.regex.lastIndex=0,u++,u>=l.maxReplaces)break}}),n}},{key:"nest",value:function(n,r){var i=this,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},l,s,a;function u(g,y){var k=this.nestingOptionsSeparator;if(g.indexOf(k)<0)return g;var _=g.split(new RegExp("".concat(k,"[ ]*{"))),f="{".concat(_[1]);g=_[0],f=this.interpolate(f,a);var c=f.match(/'/g),m=f.match(/"/g);(c&&c.length%2===0&&!m||m.length%2!==0)&&(f=f.replace(/'/g,'"'));try{a=JSON.parse(f),y&&(a=ot(ot({},y),a))}catch(w){return this.logger.warn("failed parsing options string in nesting for key ".concat(g),w),"".concat(g).concat(k).concat(f)}return delete a.defaultValue,g}for(;l=this.nestingRegexp.exec(n);){var p=[];a=ot({},o),a=a.replace&&typeof a.replace!="string"?a.replace:a,a.applyPostProcessor=!1,delete a.defaultValue;var d=!1;if(l[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(l[1])){var h=l[1].split(this.formatSeparator).map(function(g){return g.trim()});l[1]=h.shift(),p=h,d=!0}if(s=r(u.call(this,l[1].trim(),a),a),s&&l[0]===n&&typeof s!="string")return s;typeof s!="string"&&(s=Ia(s)),s||(this.logger.warn("missed to resolve ".concat(l[1]," for nesting ").concat(n)),s=""),d&&(s=p.reduce(function(g,y){return i.format(g,y,o.lng,ot(ot({},o),{},{interpolationkey:l[1].trim()}))},s.trim())),n=n.replace(l[0],s),this.regexp.lastIndex=0}return n}}]),e}();function ba(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function xt(e){for(var t=1;t-1){var r=e.split("(");t=r[0].toLowerCase().trim();var i=r[1].substring(0,r[1].length-1);if(t==="currency"&&i.indexOf(":")<0)n.currency||(n.currency=i.trim());else if(t==="relativetime"&&i.indexOf(":")<0)n.range||(n.range=i.trim());else{var o=i.split(";");o.forEach(function(l){if(l){var s=l.split(":"),a=_p(s),u=a[0],p=a.slice(1),d=p.join(":").trim().replace(/^'+|'+$/g,"");n[u.trim()]||(n[u.trim()]=d),d==="false"&&(n[u.trim()]=!1),d==="true"&&(n[u.trim()]=!0),isNaN(d)||(n[u.trim()]=parseInt(d,10))}})}}return{formatName:t,formatOptions:n}}function Rn(e){var t={};return function(r,i,o){var l=i+JSON.stringify(o),s=t[l];return s||(s=e(i,o),t[l]=s),s(r)}}var Kp=function(){function e(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};pt(this,e),this.logger=kt.create("formatter"),this.options=t,this.formats={number:Rn(function(n,r){var i=new Intl.NumberFormat(n,xt({},r));return function(o){return i.format(o)}}),currency:Rn(function(n,r){var i=new Intl.NumberFormat(n,xt(xt({},r),{},{style:"currency"}));return function(o){return i.format(o)}}),datetime:Rn(function(n,r){var i=new Intl.DateTimeFormat(n,xt({},r));return function(o){return i.format(o)}}),relativetime:Rn(function(n,r){var i=new Intl.RelativeTimeFormat(n,xt({},r));return function(o){return i.format(o,r.range||"day")}}),list:Rn(function(n,r){var i=new Intl.ListFormat(n,xt({},r));return function(o){return i.format(o)}})},this.init(t)}return ht(e,[{key:"init",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}},i=r.interpolation;this.formatSeparator=i.formatSeparator?i.formatSeparator:i.formatSeparator||","}},{key:"add",value:function(n,r){this.formats[n.toLowerCase().trim()]=r}},{key:"addCached",value:function(n,r){this.formats[n.toLowerCase().trim()]=Rn(r)}},{key:"format",value:function(n,r,i){var o=this,l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},s=r.split(this.formatSeparator),a=s.reduce(function(u,p){var d=Bp(p),h=d.formatName,g=d.formatOptions;if(o.formats[h]){var y=u;try{var k=l&&l.formatParams&&l.formatParams[l.interpolationkey]||{},_=k.locale||k.lng||l.locale||l.lng||i;y=o.formats[h](u,_,xt(xt(xt({},g),l),k))}catch(f){o.logger.warn(f)}return y}else o.logger.warn("there was no format function for ".concat(h));return u},n);return a}}]),e}();function Va(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function $a(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Gp(e,t){e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)}var Yp=function(e){ho(n,e);var t=Hp(n);function n(r,i,o){var l,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return pt(this,n),l=t.call(this),mo&&nn.call(Gt(l)),l.backend=r,l.store=i,l.services=o,l.languageUtils=o.languageUtils,l.options=s,l.logger=kt.create("backendConnector"),l.waitingReads=[],l.maxParallelReads=s.maxParallelReads||10,l.readingCalls=0,l.maxRetries=s.maxRetries>=0?s.maxRetries:5,l.retryTimeout=s.retryTimeout>=1?s.retryTimeout:350,l.state={},l.queue=[],l.backend&&l.backend.init&&l.backend.init(o,s.backend,s),l}return ht(n,[{key:"queueLoad",value:function(i,o,l,s){var a=this,u={},p={},d={},h={};return i.forEach(function(g){var y=!0;o.forEach(function(k){var _="".concat(g,"|").concat(k);!l.reload&&a.store.hasResourceBundle(g,k)?a.state[_]=2:a.state[_]<0||(a.state[_]===1?p[_]===void 0&&(p[_]=!0):(a.state[_]=1,y=!1,p[_]===void 0&&(p[_]=!0),u[_]===void 0&&(u[_]=!0),h[k]===void 0&&(h[k]=!0)))}),y||(d[g]=!0)}),(Object.keys(u).length||Object.keys(p).length)&&this.queue.push({pending:p,pendingCount:Object.keys(p).length,loaded:{},errors:[],callback:s}),{toLoad:Object.keys(u),pending:Object.keys(p),toLoadLanguages:Object.keys(d),toLoadNamespaces:Object.keys(h)}}},{key:"loaded",value:function(i,o,l){var s=i.split("|"),a=s[0],u=s[1];o&&this.emit("failedLoading",a,u,o),l&&this.store.addResourceBundle(a,u,l),this.state[i]=o?-1:2;var p={};this.queue.forEach(function(d){xp(d.loaded,[a],u),Gp(d,i),o&&d.errors.push(o),d.pendingCount===0&&!d.done&&(Object.keys(d.loaded).forEach(function(h){p[h]||(p[h]={});var g=d.loaded[h];g.length&&g.forEach(function(y){p[h][y]===void 0&&(p[h][y]=!0)})}),d.done=!0,d.errors.length?d.callback(d.errors):d.callback())}),this.emit("loaded",p),this.queue=this.queue.filter(function(d){return!d.done})}},{key:"read",value:function(i,o,l){var s=this,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,u=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,p=arguments.length>5?arguments[5]:void 0;if(!i.length)return p(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:i,ns:o,fcName:l,tried:a,wait:u,callback:p});return}this.readingCalls++;var d=function(k,_){if(s.readingCalls--,s.waitingReads.length>0){var f=s.waitingReads.shift();s.read(f.lng,f.ns,f.fcName,f.tried,f.wait,f.callback)}if(k&&_&&a2&&arguments[2]!==void 0?arguments[2]:{},a=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),a&&a();typeof i=="string"&&(i=this.languageUtils.toResolveHierarchy(i)),typeof o=="string"&&(o=[o]);var u=this.queueLoad(i,o,s,a);if(!u.toLoad.length)return u.pending.length||a(),null;u.toLoad.forEach(function(p){l.loadOne(p)})}},{key:"load",value:function(i,o,l){this.prepareLoading(i,o,{},l)}},{key:"reload",value:function(i,o,l){this.prepareLoading(i,o,{reload:!0},l)}},{key:"loadOne",value:function(i){var o=this,l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"",s=i.split("|"),a=s[0],u=s[1];this.read(a,u,"read",void 0,void 0,function(p,d){p&&o.logger.warn("".concat(l,"loading namespace ").concat(u," for language ").concat(a," failed"),p),!p&&d&&o.logger.log("".concat(l,"loaded namespace ").concat(u," for language ").concat(a),d),o.loaded(i,p,d)})}},{key:"saveMissing",value:function(i,o,l,s,a){var u=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},p=arguments.length>6&&arguments[6]!==void 0?arguments[6]:function(){};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(o)){this.logger.warn('did not save key "'.concat(l,'" as the namespace "').concat(o,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(l==null||l==="")){if(this.backend&&this.backend.create){var d=$a($a({},u),{},{isUpdate:a}),h=this.backend.create.bind(this.backend);if(h.length<6)try{var g;h.length===5?g=h(i,o,l,s,d):g=h(i,o,l,s),g&&typeof g.then=="function"?g.then(function(y){return p(null,y)}).catch(p):p(null,g)}catch(y){p(y)}else h(i,o,l,s,p,d)}!i||!i[0]||this.store.addResource(i[0],o,l,s)}}}]),n}(nn);function Ma(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(t){var n={};if(me(t[1])==="object"&&(n=t[1]),typeof t[1]=="string"&&(n.defaultValue=t[1]),typeof t[2]=="string"&&(n.tDescription=t[2]),me(t[2])==="object"||me(t[3])==="object"){var r=t[3]||t[2];Object.keys(r).forEach(function(i){n[i]=r[i]})}return n},interpolation:{escapeValue:!0,format:function(t,n,r,i){return t},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function Ba(e){return typeof e.ns=="string"&&(e.ns=[e.ns]),typeof e.fallbackLng=="string"&&(e.fallbackLng=[e.fallbackLng]),typeof e.fallbackNS=="string"&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function Ka(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function gt(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function ai(){}function Jp(e){var t=Object.getOwnPropertyNames(Object.getPrototypeOf(e));t.forEach(function(n){typeof e[n]=="function"&&(e[n]=e[n].bind(e))})}var Vi=function(e){ho(n,e);var t=Qp(n);function n(){var r,i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},o=arguments.length>1?arguments[1]:void 0;if(pt(this,n),r=t.call(this),mo&&nn.call(Gt(r)),r.options=Ba(i),r.services={},r.logger=kt,r.modules={external:[]},Jp(Gt(r)),o&&!r.isInitialized&&!i.isClone){if(!r.options.initImmediate)return r.init(i,o),ei(r,Gt(r));setTimeout(function(){r.init(i,o)},0)}return r}return ht(n,[{key:"init",value:function(){var i=this,o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},l=arguments.length>1?arguments[1]:void 0;typeof o=="function"&&(l=o,o={}),!o.defaultNS&&o.defaultNS!==!1&&o.ns&&(typeof o.ns=="string"?o.defaultNS=o.ns:o.ns.indexOf("translation")<0&&(o.defaultNS=o.ns[0]));var s=Ma();this.options=gt(gt(gt({},s),this.options),Ba(o)),this.options.compatibilityAPI!=="v1"&&(this.options.interpolation=gt(gt({},s.interpolation),this.options.interpolation)),o.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=o.keySeparator),o.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=o.nsSeparator);function a(f){return f?typeof f=="function"?new f:f:null}if(!this.options.isClone){this.modules.logger?kt.init(a(this.modules.logger),this.options):kt.init(null,this.options);var u;this.modules.formatter?u=this.modules.formatter:typeof Intl<"u"&&(u=Kp);var p=new Da(this.options);this.store=new jp(this.options.resources,this.options);var d=this.services;d.logger=kt,d.resourceStore=this.store,d.languageUtils=p,d.pluralResolver=new $p(p,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),u&&(!this.options.interpolation.format||this.options.interpolation.format===s.interpolation.format)&&(d.formatter=a(u),d.formatter.init(d,this.options),this.options.interpolation.format=d.formatter.format.bind(d.formatter)),d.interpolator=new Mp(this.options),d.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},d.backendConnector=new Yp(a(this.modules.backend),d.resourceStore,d,this.options),d.backendConnector.on("*",function(f){for(var c=arguments.length,m=new Array(c>1?c-1:0),w=1;w1?c-1:0),w=1;w0&&h[0]!=="dev"&&(this.options.lng=h[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined");var g=["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"];g.forEach(function(f){i[f]=function(){var c;return(c=i.store)[f].apply(c,arguments)}});var y=["addResource","addResources","addResourceBundle","removeResourceBundle"];y.forEach(function(f){i[f]=function(){var c;return(c=i.store)[f].apply(c,arguments),i}});var k=fr(),_=function(){var c=function(w,O){i.isInitialized&&!i.initializedStoreOnce&&i.logger.warn("init: i18next is already initialized. You should call init just once!"),i.isInitialized=!0,i.options.isClone||i.logger.log("initialized",i.options),i.emit("initialized",i.options),k.resolve(O),l(w,O)};if(i.languages&&i.options.compatibilityAPI!=="v1"&&!i.isInitialized)return c(null,i.t.bind(i));i.changeLanguage(i.options.lng,c)};return this.options.resources||!this.options.initImmediate?_():setTimeout(_,0),k}},{key:"loadResources",value:function(i){var o=this,l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:ai,s=l,a=typeof i=="string"?i:this.language;if(typeof i=="function"&&(s=i),!this.options.resources||this.options.partialBundledLanguages){if(a&&a.toLowerCase()==="cimode")return s();var u=[],p=function(g){if(g){var y=o.services.languageUtils.toResolveHierarchy(g);y.forEach(function(k){u.indexOf(k)<0&&u.push(k)})}};if(a)p(a);else{var d=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);d.forEach(function(h){return p(h)})}this.options.preload&&this.options.preload.forEach(function(h){return p(h)}),this.services.backendConnector.load(u,this.options.ns,function(h){!h&&!o.resolvedLanguage&&o.language&&o.setResolvedLanguage(o.language),s(h)})}else s(null)}},{key:"reloadResources",value:function(i,o,l){var s=fr();return i||(i=this.languages),o||(o=this.options.ns),l||(l=ai),this.services.backendConnector.reload(i,o,function(a){s.resolve(),l(a)}),s}},{key:"use",value:function(i){if(!i)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!i.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return i.type==="backend"&&(this.modules.backend=i),(i.type==="logger"||i.log&&i.warn&&i.error)&&(this.modules.logger=i),i.type==="languageDetector"&&(this.modules.languageDetector=i),i.type==="i18nFormat"&&(this.modules.i18nFormat=i),i.type==="postProcessor"&&Ec.addPostProcessor(i),i.type==="formatter"&&(this.modules.formatter=i),i.type==="3rdParty"&&this.modules.external.push(i),this}},{key:"setResolvedLanguage",value:function(i){if(!(!i||!this.languages)&&!(["cimode","dev"].indexOf(i)>-1))for(var o=0;o-1)&&this.store.hasLanguageSomeTranslations(l)){this.resolvedLanguage=l;break}}}},{key:"changeLanguage",value:function(i,o){var l=this;this.isLanguageChangingTo=i;var s=fr();this.emit("languageChanging",i);var a=function(h){l.language=h,l.languages=l.services.languageUtils.toResolveHierarchy(h),l.resolvedLanguage=void 0,l.setResolvedLanguage(h)},u=function(h,g){g?(a(g),l.translator.changeLanguage(g),l.isLanguageChangingTo=void 0,l.emit("languageChanged",g),l.logger.log("languageChanged",g)):l.isLanguageChangingTo=void 0,s.resolve(function(){return l.t.apply(l,arguments)}),o&&o(h,function(){return l.t.apply(l,arguments)})},p=function(h){!i&&!h&&l.services.languageDetector&&(h=[]);var g=typeof h=="string"?h:l.services.languageUtils.getBestMatchFromCodes(h);g&&(l.language||a(g),l.translator.language||l.translator.changeLanguage(g),l.services.languageDetector&&l.services.languageDetector.cacheUserLanguage&&l.services.languageDetector.cacheUserLanguage(g)),l.loadResources(g,function(y){u(y,g)})};return!i&&this.services.languageDetector&&!this.services.languageDetector.async?p(this.services.languageDetector.detect()):!i&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(p):this.services.languageDetector.detect(p):p(i),s}},{key:"getFixedT",value:function(i,o,l){var s=this,a=function u(p,d){var h;if(me(d)!=="object"){for(var g=arguments.length,y=new Array(g>2?g-2:0),k=2;k1&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;var s=this.resolvedLanguage||this.languages[0],a=this.options?this.options.fallbackLng:!1,u=this.languages[this.languages.length-1];if(s.toLowerCase()==="cimode")return!0;var p=function(g,y){var k=o.services.backendConnector.state["".concat(g,"|").concat(y)];return k===-1||k===2};if(l.precheck){var d=l.precheck(this,p);if(d!==void 0)return d}return!!(this.hasResourceBundle(s,i)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||p(s,i)&&(!a||p(u,i)))}},{key:"loadNamespaces",value:function(i,o){var l=this,s=fr();return this.options.ns?(typeof i=="string"&&(i=[i]),i.forEach(function(a){l.options.ns.indexOf(a)<0&&l.options.ns.push(a)}),this.loadResources(function(a){s.resolve(),o&&o(a)}),s):(o&&o(),Promise.resolve())}},{key:"loadLanguages",value:function(i,o){var l=fr();typeof i=="string"&&(i=[i]);var s=this.options.preload||[],a=i.filter(function(u){return s.indexOf(u)<0});return a.length?(this.options.preload=s.concat(a),this.loadResources(function(u){l.resolve(),o&&o(u)}),l):(o&&o(),Promise.resolve())}},{key:"dir",value:function(i){if(i||(i=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!i)return"rtl";var o=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],l=this.services&&this.services.languageUtils||new Da(Ma());return o.indexOf(l.getLanguagePartFromCode(i))>-1||i.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}},{key:"cloneInstance",value:function(){var i=this,o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:ai,s=gt(gt(gt({},this.options),o),{isClone:!0}),a=new n(s);(o.debug!==void 0||o.prefix!==void 0)&&(a.logger=a.logger.clone(o));var u=["store","services","language"];return u.forEach(function(p){a[p]=i[p]}),a.services=gt({},this.services),a.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},a.translator=new Fa(a.services,a.options),a.translator.on("*",function(p){for(var d=arguments.length,h=new Array(d>1?d-1:0),g=1;g0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;return new Vi(e,t)});var fe=Vi.createInstance();fe.createInstance=Vi.createInstance;fe.createInstance;fe.dir;fe.init;fe.loadResources;fe.reloadResources;fe.use;fe.changeLanguage;fe.getFixedT;fe.t;fe.exists;fe.setDefaultNamespace;fe.hasLoadedNamespace;fe.loadNamespaces;fe.loadLanguages;function Zp(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,o;for(o=0;o=0)&&(n[i]=e[i]);return n}function ks(e,t){if(e==null)return{};var n=Zp(e,t),r,i;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var qp={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0};const eh=uc(qp);var th=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function Ha(e){var t={type:"tag",name:"",voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(eh[n[1]]||e.charAt(e.length-2)==="/")&&(t.voidElement=!0),t.name.startsWith("!--"))){var r=e.indexOf("-->");return{type:"comment",comment:r!==-1?e.slice(4,r):""}}for(var i=new RegExp(th),o=null;(o=i.exec(e))!==null;)if(o[0].trim())if(o[1]){var l=o[1].trim(),s=[l,""];l.indexOf("=")>-1&&(s=l.split("=")),t.attrs[s[0]]=s[1],i.lastIndex--}else o[2]&&(t.attrs[o[2]]=o[3].trim().substring(1,o[3].length-1));return t}var nh=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,rh=/^\s*$/,ih=Object.create(null);function xc(e,t){switch(t.type){case"text":return e+t.content;case"tag":return e+="<"+t.name+(t.attrs?function(n){var r=[];for(var i in n)r.push(i+'="'+n[i]+'"');return r.length?" "+r.join(" "):""}(t.attrs):"")+(t.voidElement?"/>":">"),t.voidElement?e:e+t.children.reduce(xc,"")+"";case"comment":return e+""}}var oh={parse:function(e,t){t||(t={}),t.components||(t.components=ih);var n,r=[],i=[],o=-1,l=!1;if(e.indexOf("<")!==0){var s=e.indexOf("<");r.push({type:"text",content:s===-1?e:e.substring(0,s)})}return e.replace(nh,function(a,u){if(l){if(a!=="")return;l=!1}var p,d=a.charAt(1)!=="/",h=a.startsWith("");return{type:"comment",comment:r!==-1?e.slice(4,r):""}}for(var i=new RegExp(Zp),o=null;(o=i.exec(e))!==null;)if(o[0].trim())if(o[1]){var s=o[1].trim(),l=[s,""];s.indexOf("=")>-1&&(l=s.split("=")),t.attrs[l[0]]=l[1],i.lastIndex--}else o[2]&&(t.attrs[o[2]]=o[3].trim().substring(1,o[3].length-1));return t}var qp=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,eh=/^\s*$/,th=Object.create(null);function _c(e,t){switch(t.type){case"text":return e+t.content;case"tag":return e+="<"+t.name+(t.attrs?function(n){var r=[];for(var i in n)r.push(i+'="'+n[i]+'"');return r.length?" "+r.join(" "):""}(t.attrs):"")+(t.voidElement?"/>":">"),t.voidElement?e:e+t.children.reduce(_c,"")+"";case"comment":return e+""}}var nh={parse:function(e,t){t||(t={}),t.components||(t.components=th);var n,r=[],i=[],o=-1,s=!1;if(e.indexOf("<")!==0){var l=e.indexOf("<");r.push({type:"text",content:l===-1?e:e.substring(0,l)})}return e.replace(qp,function(a,u){if(s){if(a!=="")return;s=!1}var p,d=a.charAt(1)!=="/",h=a.startsWith(" " + << "Subgraph[" << subm_idx_to << "]/" << port_idx_to); + NPUW_ASSERT(m_subrequests[subm_idx_from]); // prod request is created + NPUW_ASSERT(m_subrequests[subm_idx_to]); // cons request is created + NPUW_ASSERT(m_subrequests[subm_idx_from]._ptr != m_subrequests[subm_idx_to]._ptr); + + const auto& iport = m_subrequests[subm_idx_to]->get_compiled_model()->inputs()[port_idx_to]; + const auto& oport = m_subrequests[subm_idx_from]->get_compiled_model()->outputs()[port_idx_from]; + const auto& tensor = m_subrequests[subm_idx_from]->get_tensor(oport); + LOG_DEBUG("Set Subgraph[" << subm_idx_to << "]/" << iport << " to Subgraph[" << subm_idx_from << "]/" << oport); + m_subrequests[subm_idx_to]->set_tensor(iport, tensor); + } // for(map) + LOG_INFO("Done"); + + init_gio(); + + for (size_t i = 0; i < m_num_submodels; i++) { + LOG_VERB("Trying to preemptively set tensors for Subgraph[" << i << "]..."); + LOG_BLOCK(); + auto& comp_model_desc = m_npuw_model->m_compiled_submodels[i]; + if (!comp_model_desc.compiled_model && !comp_model_desc.replaced_by) { + continue; // Optimized out + } + unpack_closure(i, m_subrequests[i]); + LOG_VERB("Done"); + } +} + +bool ov::npuw::UnfoldInferRequest::valid_subrequest(std::size_t idx) const { + return m_subrequests.at(idx) != nullptr; +} + +void ov::npuw::UnfoldInferRequest::infer() { + const bool do_async = m_npuw_model->m_cfg.get<::intel_npu::NPUW_FUNCALL_ASYNC>(); + + auto prepare = [&](std::size_t idx) { + if (idx >= m_subrequests.size()) { + return; + } + bind_global_params(idx, m_subrequests[idx]); + bind_global_results(idx, m_subrequests[idx]); + }; + auto wait_and_clear = [](RqPtrs& rqs) { + for (auto&& r : rqs) { + r->wait(); + } + rqs.clear(); + }; + + if (do_async) { + std::size_t past_repl_id = 0u; + RqPtrs previous_requests; + + prepare(0); + for (std::size_t idx = 0; idx < m_num_submodels; idx++) { + auto& subr = m_subrequests[idx]; + if (!subr) { + prepare(idx + 1); + continue; + } + auto& comp_model_desc = m_npuw_model->m_compiled_submodels[idx]; + const auto this_repl_id = comp_model_desc.replaced_by.value_or(idx); + if (this_repl_id != past_repl_id) { + // For non-repeating blocks, the above value_or returns idx + // For repeating blocks, it returns the function group id + // If either is not equal to the past_repl_id, make a barrier here + wait_and_clear(previous_requests); + past_repl_id = this_repl_id; + } + subr->start_async(); + previous_requests.push_back(subr); + prepare(idx + 1); + } + wait_and_clear(previous_requests); + } else { + prepare(0); + for (std::size_t idx = 0; idx < m_num_submodels; idx++) { + auto& subr = m_subrequests[idx]; + if (!subr) { + prepare(idx + 1); + continue; + } + subr->start_async(); + prepare(idx + 1); + subr->wait(); + } + } // (async) +} diff --git a/src/plugins/intel_npu/src/plugin/npuw/unfold_sync_infer_request.hpp b/src/plugins/intel_npu/src/plugin/npuw/unfold_sync_infer_request.hpp new file mode 100644 index 00000000000000..76b67571ec4c40 --- /dev/null +++ b/src/plugins/intel_npu/src/plugin/npuw/unfold_sync_infer_request.hpp @@ -0,0 +1,42 @@ +// Copyright (C) 2023 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 +// + +#pragma once + +#include +#include +#include +#include +#include + +#include "base_sync_infer_request.hpp" + +namespace ov { +namespace npuw { + +class UnfoldInferRequest final : public IBaseInferRequest { +public: + explicit UnfoldInferRequest(const std::shared_ptr& compiled_model); + + //////////////////////////////////// + // implement IBaseInferRequest - nether of these are required here + // this hierarchy needs revew + void prepare_for_infer() override {} + bool valid_subrequest(std::size_t idx) const override; + void start_subrequest(std::size_t) override {} + void run_subrequest_for_success(std::size_t, bool&) override {} + void subscribe_subrequest(std::size_t, Completed cb) override {} + void complete_subrequest(std::size_t) override {} + void cancel_subrequest(std::size_t) override {} + bool supports_async_pipeline() const override { + return false; + } + void update_subrequest_links(std::size_t) override {} + +private: + void infer() override; +}; + +} // namespace npuw +} // namespace ov From 0f149e39ed7dba9fae09fa6b56bb9f08f117aa9f Mon Sep 17 00:00:00 2001 From: Mingyu Kim Date: Fri, 22 Nov 2024 15:04:16 +0900 Subject: [PATCH 20/24] [GPU] Do not use usm_host when network output tensor size is large (#27513) ### Details: - For dGPU including A770, when network output size is large, performance is better with explicit copy then writing data to usm_host. - Allow usm_host access for input - Next-gen dGPU, write to usm_device and copy it to usm_host - For DG2, write to usm_device only for large output ### Tickets: - 157439 --- .../intel_gpu/plugin/sync_infer_request.hpp | 1 + .../intel_gpu/runtime/debug_configuration.hpp | 1 + .../src/plugin/sync_infer_request.cpp | 21 ++++++++++++++----- .../src/runtime/debug_configuration.cpp | 4 ++++ 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/plugins/intel_gpu/include/intel_gpu/plugin/sync_infer_request.hpp b/src/plugins/intel_gpu/include/intel_gpu/plugin/sync_infer_request.hpp index cdead8a816626d..916427c280310c 100644 --- a/src/plugins/intel_gpu/include/intel_gpu/plugin/sync_infer_request.hpp +++ b/src/plugins/intel_gpu/include/intel_gpu/plugin/sync_infer_request.hpp @@ -118,6 +118,7 @@ class SyncInferRequest : public ov::ISyncInferRequest { void init_mappings(); bool is_batched_input(const ov::Output& port) const; + uint64_t total_output_bytes = 0; }; } // namespace intel_gpu diff --git a/src/plugins/intel_gpu/include/intel_gpu/runtime/debug_configuration.hpp b/src/plugins/intel_gpu/include/intel_gpu/runtime/debug_configuration.hpp index 465ed898ecb7ec..a020c5d1cd5ef6 100644 --- a/src/plugins/intel_gpu/include/intel_gpu/runtime/debug_configuration.hpp +++ b/src/plugins/intel_gpu/include/intel_gpu/runtime/debug_configuration.hpp @@ -142,6 +142,7 @@ class debug_configuration { int disable_runtime_skip_reorder; // Disable runtime skip reorder int disable_primitive_fusing; // Disable primitive fusing int disable_fake_alignment; // Disable fake alignment + int use_usm_host; // Set explicit usm_host usage for network input and output std::vector dynamic_quantize_layers_without_onednn; // Specify Fully-connected layers which enable Dynamic quantization int use_kv_cache_compression; // Enable KV-cache compression int dynamic_quantize_group_size; // Enable Dynamic quantization for fully connected primitive by specified group size diff --git a/src/plugins/intel_gpu/src/plugin/sync_infer_request.cpp b/src/plugins/intel_gpu/src/plugin/sync_infer_request.cpp index cc4681d2ac3387..00ec52f64750bc 100644 --- a/src/plugins/intel_gpu/src/plugin/sync_infer_request.cpp +++ b/src/plugins/intel_gpu/src/plugin/sync_infer_request.cpp @@ -32,12 +32,19 @@ namespace { -inline bool can_use_usm_host(const cldnn::engine& engine) { +inline bool can_use_usm_host(const cldnn::engine& engine, const uint64_t total_output_bytes) { + GPU_DEBUG_GET_INSTANCE(debug_config); + GPU_DEBUG_IF(debug_config->use_usm_host == 1) { return true; } + GPU_DEBUG_IF(debug_config->use_usm_host == 2) { return false; } + auto can_use_usm = engine.use_unified_shared_memory(); + // When output size is large, it is better not to write to usm_host directly + const uint64_t LARGE_OUTPUT_BYTES_THRESHOLD = 4 * 1048576; const auto& device_info = engine.get_device_info(); if ((device_info.gfx_ver.major == 12 && device_info.gfx_ver.minor == 60) || - (device_info.gfx_ver.major >= 20 && device_info.dev_type == cldnn::device_type::discrete_gpu)) { + (device_info.gfx_ver.major >= 20 && device_info.dev_type == cldnn::device_type::discrete_gpu) || + (device_info.dev_type == cldnn::device_type::discrete_gpu && total_output_bytes > LARGE_OUTPUT_BYTES_THRESHOLD)) { // WA: Disable USM host memory for infer request`s tensors for PVC and subsequent dGPUs, as kernel access // to system memory is slower than using an explicit memcpy (Host <-> Device) call with the copy engine // Driver tickets with additional details: 6155, 10054 @@ -544,7 +551,7 @@ std::shared_ptr SyncInferRequest::create_device_tensor(const ov::Pa } // Create OpenCL buffer for PVC if lockable memory is needed due to performance issue with usm host - if (!can_use_usm_host(m_graph->get_engine()) && need_lockable_memory) + if (!can_use_usm_host(m_graph->get_engine(), total_output_bytes) && need_lockable_memory) tensor_type = TensorType::BT_BUF_INTERNAL; return std::make_shared(m_context, @@ -573,7 +580,9 @@ TensorWrapper SyncInferRequest::create_or_share_device_tensor(const TensorWrappe auto usm_host_raw_ptr = engine.get_device_info().dev_type == cldnn::device_type::integrated_gpu && user_tensor_mem_type == cldnn::allocation_type::usm_host; - bool can_share = !is_convert_required(user_tensor->get_element_type(), element_type) && can_use_usm_host(engine) && !generic_remote_tensor; + bool can_share = !is_convert_required(user_tensor->get_element_type(), element_type) + && can_use_usm_host(engine, total_output_bytes) + && !generic_remote_tensor; if (usm_host_tensor && can_share && m_context == usm_host_tensor->get_impl()->get_context()) { return { usm_host_tensor->get_impl(), user_tensor_wrapper.owner }; @@ -662,6 +671,7 @@ void SyncInferRequest::allocate_inputs() { void SyncInferRequest::allocate_outputs() { OV_ITT_SCOPED_TASK(itt::domains::intel_gpu_plugin, "SyncInferRequest::allocate_outputs"); + total_output_bytes = 0; // allocate outputs for (const auto& it : m_output_ports_map) { size_t output_idx = it.first; @@ -669,6 +679,7 @@ void SyncInferRequest::allocate_outputs() { GPU_DEBUG_LOG << "[init output blob with index: " << output_idx << "]" << std::endl; allocate_output(port, output_idx); + total_output_bytes += ov::ISyncInferRequest::get_tensor(port)->get_byte_size(); } } @@ -817,7 +828,7 @@ std::vector SyncInferRequest::prepare_input(const std::string } else { m_plugin_inputs[input_idx] = user_tensor_wrapper; } - } else if (is_usm_host_tensor && !convert_needed && can_use_usm_host(engine)) { + } else if (is_usm_host_tensor && !convert_needed) { if (element_type != ::data_type_for_remote_tensor(element_type)) { m_plugin_inputs[input_idx] = { std::make_shared(m_context, user_tensor->get_shape(), diff --git a/src/plugins/intel_gpu/src/runtime/debug_configuration.cpp b/src/plugins/intel_gpu/src/runtime/debug_configuration.cpp index 5c3b3ee0c970f9..4a68355e1bc8ba 100644 --- a/src/plugins/intel_gpu/src/runtime/debug_configuration.cpp +++ b/src/plugins/intel_gpu/src/runtime/debug_configuration.cpp @@ -183,6 +183,8 @@ static void print_help_messages() { message_list.emplace_back("OV_GPU_DisableRuntimeSkipReorder", "Disable runtime skip reorder."); message_list.emplace_back("OV_GPU_DisablePrimitiveFusing", "Disable primitive fusing"); message_list.emplace_back("OV_GPU_DisableFakeAlignment", "Disable fake alignment"); + message_list.emplace_back("OV_GPU_UseUsmHost", "Set explicit policy for usm host usage for network input/output. " + "0: default, 1: use usm_host, 2: do not use usm_host"); message_list.emplace_back("OV_GPU_KVCacheCompression", "Enable/Disable KV-cache compression"); message_list.emplace_back("OV_GPU_DynamicQuantizeLayersWithoutOnednn", "Enable Dynamic quantization for specified Fully connected layers only, " "separated by space. Support case-insensitive and regular expression. For example .*fully_connected.*"); @@ -254,6 +256,7 @@ debug_configuration::debug_configuration() , disable_runtime_skip_reorder(0) , disable_primitive_fusing(0) , disable_fake_alignment(0) + , use_usm_host(0) , use_kv_cache_compression(-1) , dynamic_quantize_group_size(DYNAMIC_QUANTIZE_GROUP_SIZE_NOT_SET) , disable_horizontal_fc_fusion(0) { @@ -307,6 +310,7 @@ debug_configuration::debug_configuration() get_gpu_debug_env_var("DisableRuntimeSkipReorder", disable_runtime_skip_reorder); get_gpu_debug_env_var("DisablePrimitiveFusing", disable_primitive_fusing); get_gpu_debug_env_var("DisableFakeAlignment", disable_fake_alignment); + get_gpu_debug_env_var("UseUsmHost", use_usm_host); get_gpu_debug_env_var("KVCacheCompression", use_kv_cache_compression); get_gpu_debug_env_var("DynamicQuantizeGroupSize", dynamic_quantize_group_size); get_gpu_debug_env_var("DisableHorizontalFCFusion", disable_horizontal_fc_fusion); From c801f4ec1191c9c4967fe1b8aa1fea67441178fa Mon Sep 17 00:00:00 2001 From: cecilia peng Date: Fri, 22 Nov 2024 14:59:36 +0800 Subject: [PATCH 21/24] [GPU] Relax UnsqueezeBroadcastReshapeSDPAFusion (#27515) ### Details: - By relaxing UnsqueezeBroadcastReshapeSDPAFusion, GQA pattern is enabled and Broadcasting nodes overheads in paths of key and value are removed, thus improves performance of GLM4 model significantly. - Fix for GLM4V, which has initial state shape (-1, 0, 0, 0), and shape infer failed. ### Tickets: - *CVS-157263* --------- Co-authored-by: Chen Peter --- .../src/plugin/transformations/op/kv_cache.cpp | 11 +++++++---- .../intel_gpu/src/plugin/transformations/op/sdpa.cpp | 5 ++++- .../unsqueeze_broadcast_reshape_sdpa_fusion.cpp | 6 +----- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/plugins/intel_gpu/src/plugin/transformations/op/kv_cache.cpp b/src/plugins/intel_gpu/src/plugin/transformations/op/kv_cache.cpp index 12d961be6d337a..6721d0f9ebd608 100644 --- a/src/plugins/intel_gpu/src/plugin/transformations/op/kv_cache.cpp +++ b/src/plugins/intel_gpu/src/plugin/transformations/op/kv_cache.cpp @@ -106,18 +106,21 @@ std::vector shape_infer(const KVCache* op, const std::vectorget_gather_axis(); const auto& concat_axis = ov::util::normalize(op->get_concat_axis(), input_shapes[0].size()); + // We update output shape with input1 shape by default, as input1 is always new, and in some situations, input0 shape + // has zeros in some dimensions. For example to concat input0 [-1, 0, 0, 0] + input1 [-1, 4, -1, 128] along axis 2, + // we could (and should) infer dim value of axis 1 and 3 in this case. if (op->get_output_size() >= 2) { - out_shapes[0] = input_shapes[0]; + out_shapes[0] = input_shapes[1]; out_shapes[0][gather_axis] = input_shapes[2][0]; - out_shapes[0][concat_axis] += input_shapes[1][concat_axis]; + out_shapes[0][concat_axis] += input_shapes[0][concat_axis]; std::vector dims(out_shapes[0].size(), 1); dims[gather_axis] = out_shapes[0][gather_axis]; dims[concat_axis] = out_shapes[0][concat_axis]; out_shapes[1] = dims; } else { - out_shapes[0] = input_shapes[0]; - out_shapes[0][concat_axis] += input_shapes[1][concat_axis]; + out_shapes[0] = input_shapes[1]; + out_shapes[0][concat_axis] += input_shapes[0][concat_axis]; } return out_shapes; diff --git a/src/plugins/intel_gpu/src/plugin/transformations/op/sdpa.cpp b/src/plugins/intel_gpu/src/plugin/transformations/op/sdpa.cpp index 09513d99153a1f..3988306ba5eff4 100644 --- a/src/plugins/intel_gpu/src/plugin/transformations/op/sdpa.cpp +++ b/src/plugins/intel_gpu/src/plugin/transformations/op/sdpa.cpp @@ -144,9 +144,12 @@ std::vector shape_infer(const SDPA* op, if (is_broadcastable) { size_t max_rank = shape_q_t.size(); for (size_t i = 0; i < max_rank; ++i) { - if (shape_q_t[i].is_static() && shape_k_t[i].is_static() && shape_v_t[i].is_static()) { + if (shape_q_t[i].is_static() && shape_k_t[i].is_static()) { auto broadcasted_dim = shape_q_t[i].get_length(); shape_k_t[i] = broadcasted_dim; + } + if (shape_q_t[i].is_static() && shape_v_t[i].is_static()) { + auto broadcasted_dim = shape_q_t[i].get_length(); shape_v_t[i] = broadcasted_dim; } } diff --git a/src/plugins/intel_gpu/src/plugin/transformations/unsqueeze_broadcast_reshape_sdpa_fusion.cpp b/src/plugins/intel_gpu/src/plugin/transformations/unsqueeze_broadcast_reshape_sdpa_fusion.cpp index d525792ccd8d06..2b0d2ed5eaf145 100644 --- a/src/plugins/intel_gpu/src/plugin/transformations/unsqueeze_broadcast_reshape_sdpa_fusion.cpp +++ b/src/plugins/intel_gpu/src/plugin/transformations/unsqueeze_broadcast_reshape_sdpa_fusion.cpp @@ -23,10 +23,6 @@ using ov::pass::pattern::op::Or; UnsqueezeBroadcastReshapeSDPAFusion::UnsqueezeBroadcastReshapeSDPAFusion() { using namespace ov::pass::pattern; - auto not_reshape = [](const ov::Output& output) -> bool { - return std::dynamic_pointer_cast(output.get_node_shared_ptr()) == nullptr; - }; - auto unsqueeze_predicate = [](const ov::Output& output) -> bool { return rank_equals(5)(output) && consumers_count(1); }; @@ -42,7 +38,7 @@ UnsqueezeBroadcastReshapeSDPAFusion::UnsqueezeBroadcastReshapeSDPAFusion() { return rank_equals(4)(output) && consumers_count(1); }; - auto input_a_m = any_input(not_reshape); + auto input_a_m = any_input(); auto input_attn_mask = any_input(); auto input_scale = any_input(); auto input_b_m = wrap_type({any_input(), any_input()}); From 91a5518347a5e4e55f940b6e3c9b8f00626f09ff Mon Sep 17 00:00:00 2001 From: SYNC <125558396+xyz-harshal@users.noreply.github.com> Date: Fri, 22 Nov 2024 13:27:06 +0530 Subject: [PATCH 22/24] [CPU][ARM] JIT Ceiling Operation (#27527) ### Details: - Added JIT emitter for Eltwise Ceiling operation on ARM64 SIMD - Implemented fp32 optimization replacing C++ Math implementation - Modified ARM64 executor to support new JIT emitter - Updated kernel files to include Ceiling in Eltwise operations - Added test coverage for JIT implementation verification - Transitioned operation type from Math to Eltwise for better performance ### Tickets: - #27498 --- src/plugins/intel_cpu/src/cpu_types.cpp | 3 +- src/plugins/intel_cpu/src/cpu_types.h | 1 + .../plugin/aarch64/jit_eltwise_emitters.cpp | 46 ++++++++++++++++++- .../plugin/aarch64/jit_eltwise_emitters.hpp | 32 ++++++++++++- src/plugins/intel_cpu/src/nodes/eltwise.cpp | 7 +++ .../nodes/executors/aarch64/jit_eltwise.cpp | 1 + .../aarch64/jit_uni_eltwise_generic.cpp | 2 + .../single_layer_tests/classes/activation.cpp | 3 ++ .../skip_tests_config.cpp | 2 +- 9 files changed, 93 insertions(+), 4 deletions(-) diff --git a/src/plugins/intel_cpu/src/cpu_types.cpp b/src/plugins/intel_cpu/src/cpu_types.cpp index e20369c9cca215..3b6440e56c3272 100644 --- a/src/plugins/intel_cpu/src/cpu_types.cpp +++ b/src/plugins/intel_cpu/src/cpu_types.cpp @@ -191,7 +191,7 @@ static const TypeToNameMap& get_type_to_name_tbl() { {"Atan", Type::Math}, {"Atanh", Type::Math}, {"Ceil", Type::Math}, - {"Ceiling", Type::Math}, + {"Ceiling", Type::Eltwise}, {"Cos", Type::Math}, {"Cosh", Type::Math}, {"Floor", Type::Eltwise}, @@ -419,6 +419,7 @@ std::string algToString(const Algorithm alg) { CASE(EltwiseSubtract); CASE(EltwiseDivide); CASE(EltwiseFloor); + CASE(EltwiseCeiling); CASE(EltwiseFloorMod); CASE(EltwiseMod); CASE(EltwiseMaximum); diff --git a/src/plugins/intel_cpu/src/cpu_types.h b/src/plugins/intel_cpu/src/cpu_types.h index d6ac9947a8fb5d..9461526184b0bf 100644 --- a/src/plugins/intel_cpu/src/cpu_types.h +++ b/src/plugins/intel_cpu/src/cpu_types.h @@ -165,6 +165,7 @@ enum class Algorithm { EltwiseSubtract, EltwiseDivide, EltwiseFloor, + EltwiseCeiling, EltwiseFloorMod, EltwiseMod, EltwiseMaximum, diff --git a/src/plugins/intel_cpu/src/emitters/plugin/aarch64/jit_eltwise_emitters.cpp b/src/plugins/intel_cpu/src/emitters/plugin/aarch64/jit_eltwise_emitters.cpp index 17ce08f7159379..355c8fb7f4c4d7 100644 --- a/src/plugins/intel_cpu/src/emitters/plugin/aarch64/jit_eltwise_emitters.cpp +++ b/src/plugins/intel_cpu/src/emitters/plugin/aarch64/jit_eltwise_emitters.cpp @@ -516,6 +516,50 @@ std::set> jit_floor_emitter::get_supported_precisions return {{element::f32}}; } +/// CEILING /// +//Initialization of the emitter, taking node as input +jit_ceiling_emitter::jit_ceiling_emitter(dnnl::impl::cpu::aarch64::jit_generator* host, + dnnl::impl::cpu::aarch64::cpu_isa_t host_isa, + const std::shared_ptr& node) + : jit_emitter(host, host_isa, node, get_arithmetic_binary_exec_precision(node)) { +} + +//Initialization of emitter, without taking node as input +jit_ceiling_emitter::jit_ceiling_emitter(dnnl::impl::cpu::aarch64::jit_generator* host, + dnnl::impl::cpu::aarch64::cpu_isa_t host_isa, + const ov::element::Type exec_prc) : jit_emitter(host, host_isa, exec_prc) { +} + +//This will tell the JIT compiler that how many inputs the ceiling operation requires (here 1) +size_t jit_ceiling_emitter::get_inputs_count() const { return 1; } + +//Main implementation method that emits the JIT code +void jit_ceiling_emitter::emit_impl(const std::vector &in_vec_idxs, const std::vector &out_vec_idxs) const { + if (host_isa_ == dnnl::impl::cpu::aarch64::asimd) { + emit_isa(in_vec_idxs, out_vec_idxs); + } else { + OV_CPU_JIT_EMITTER_THROW("Can't create jit eltwise kernel"); + } +} + +// Template method that generates actual instruction sequence for ceiling operation +// The h->frintp() method rounds up the floating value to the nearest integer. +template +void jit_ceiling_emitter::emit_isa(const std::vector &in_vec_idxs, const std::vector &out_vec_idxs) const { + OV_CPU_JIT_EMITTER_ASSERT(exec_prc_ == ov::element::f32, "unsupported precision: " + exec_prc_.to_string()); + + using TReg = typename dnnl::impl::cpu::aarch64::cpu_isa_traits::TReg; + TReg src = TReg(in_vec_idxs[0]); + TReg dst = TReg(out_vec_idxs[0]); + h->frintp(dst.s, src.s); +} + +// Template method that generates actual instruction sequence for ceiling operation +// Currently only supports 32-bit floating point (f32) +std::set> jit_ceiling_emitter::get_supported_precisions(const std::shared_ptr& node) { + return {{element::f32}}; +} + /// GELU_ERF /// jit_gelu_erf_emitter::jit_gelu_erf_emitter(dnnl::impl::cpu::aarch64::jit_generator* host, dnnl::impl::cpu::aarch64::cpu_isa_t host_isa, @@ -2275,4 +2319,4 @@ std::set> jit_tanh_emitter::get_supported_precisions( } // namespace aarch64 } // namespace intel_cpu -} // namespace ov \ No newline at end of file +} // namespace ov diff --git a/src/plugins/intel_cpu/src/emitters/plugin/aarch64/jit_eltwise_emitters.hpp b/src/plugins/intel_cpu/src/emitters/plugin/aarch64/jit_eltwise_emitters.hpp index e2aff7557f7365..a99e016c9c834a 100644 --- a/src/plugins/intel_cpu/src/emitters/plugin/aarch64/jit_eltwise_emitters.hpp +++ b/src/plugins/intel_cpu/src/emitters/plugin/aarch64/jit_eltwise_emitters.hpp @@ -214,6 +214,36 @@ class jit_floor_emitter : public jit_emitter { void emit_isa(const std::vector &in_vec_idxs, const std::vector &out_vec_idxs) const; }; +class jit_ceiling_emitter : public jit_emitter { +public: + // Constructor with explicit precision + jit_ceiling_emitter(dnnl::impl::cpu::aarch64::jit_generator *host, + dnnl::impl::cpu::aarch64::cpu_isa_t host_isa, + const ov::element::Type exec_prc = ov::element::f32); + + // Constructor from node + jit_ceiling_emitter(dnnl::impl::cpu::aarch64::jit_generator *host, + dnnl::impl::cpu::aarch64::cpu_isa_t host_isa, + const std::shared_ptr& node); + + // Get number of inputs + size_t get_inputs_count() const override; + + // Get supported precisions + static std::set> get_supported_precisions( + const std::shared_ptr& node = nullptr); + +private: + // Implementation of JIT code emission + void emit_impl(const std::vector &in_vec_idxs, + const std::vector &out_vec_idxs) const override; + + // ISA-specific implementation + template + void emit_isa(const std::vector &in_vec_idxs, + const std::vector &out_vec_idxs) const; +}; + class jit_gelu_erf_emitter : public jit_emitter { public: jit_gelu_erf_emitter(dnnl::impl::cpu::aarch64::jit_generator* host, @@ -943,4 +973,4 @@ class jit_tanh_emitter : public jit_emitter { } // namespace aarch64 } // namespace intel_cpu -} // namespace ov \ No newline at end of file +} // namespace ov diff --git a/src/plugins/intel_cpu/src/nodes/eltwise.cpp b/src/plugins/intel_cpu/src/nodes/eltwise.cpp index c2d23bf9adc89e..54cf435009059d 100644 --- a/src/plugins/intel_cpu/src/nodes/eltwise.cpp +++ b/src/plugins/intel_cpu/src/nodes/eltwise.cpp @@ -257,6 +257,7 @@ std::set> eltwise_precision_helper::get_supported_pre OV_CASE(Algorithm::EltwiseMultiply, jit_multiply_emitter), OV_CASE(Algorithm::EltwiseDivide, jit_divide_emitter), OV_CASE(Algorithm::EltwiseFloor, jit_floor_emitter), + OV_CASE(Algorithm::EltwiseCeiling, jit_ceiling_emitter), OV_CASE(Algorithm::EltwiseFloorMod, jit_floor_mod_emitter), OV_CASE(Algorithm::EltwiseMod, jit_mod_emitter), OV_CASE(Algorithm::EltwiseMaximum, jit_maximum_emitter), @@ -636,6 +637,7 @@ struct jit_uni_eltwise_generic : public jit_uni_eltwise_kernel, public jit_gener OV_CASE(Algorithm::EltwiseMultiply, jit_multiply_emitter), OV_CASE(Algorithm::EltwiseDivide, jit_divide_emitter), OV_CASE(Algorithm::EltwiseFloor, jit_floor_emitter), + OV_CASE(Algorithm::EltwiseCeiling, jit_ceiling_emitter), OV_CASE(Algorithm::EltwiseFloorMod, jit_floor_mod_emitter), OV_CASE(Algorithm::EltwiseMod, jit_mod_emitter), OV_CASE(Algorithm::EltwiseMaximum, jit_maximum_emitter), @@ -1086,6 +1088,9 @@ const std::map& Eltwise::getIn {ov::op::v1::Mod::get_type_info_static(), [](const std::shared_ptr& op, Eltwise& node) { node.algorithm = Algorithm::EltwiseMod; }}, + {ov::op::v0::Ceiling::get_type_info_static(), [](const std::shared_ptr& op, Eltwise& node) { + node.algorithm = Algorithm::EltwiseCeiling; + }}, {ov::op::v0::Floor::get_type_info_static(), [](const std::shared_ptr& op, Eltwise& node) { node.algorithm = Algorithm::EltwiseFloor; }}, @@ -1891,6 +1896,7 @@ class EltwiseRefExecutor : public EltwiseRefBaseExecutor { case Algorithm::EltwiseSubtract: *dst_ptr_f = src_f[0] - src_f[1]; break; case Algorithm::EltwiseMultiply: *dst_ptr_f = src_f[0] * src_f[1]; break; case Algorithm::EltwiseDivide: *dst_ptr_f = src_f[0] / src_f[1]; break; + case Algorithm::EltwiseCeiling: *dst_ptr_f = ceilf(src_f[0]); break; case Algorithm::EltwiseFloor: *dst_ptr_f = floorf(src_f[0]); break; case Algorithm::EltwiseFloorMod: *dst_ptr_f = src_f[0] - floorf(src_f[0] / src_f[1]) * src_f[1]; break; case Algorithm::EltwiseMod: *dst_ptr_f = src_f[0] - truncf(src_f[0] / src_f[1]) * src_f[1]; break; @@ -2098,6 +2104,7 @@ size_t Eltwise::getOpInputsNum() const { case Algorithm::EltwiseRelu: case Algorithm::EltwiseGeluErf: case Algorithm::EltwiseGeluTanh: + case Algorithm::EltwiseCeiling: case Algorithm::EltwiseFloor: case Algorithm::EltwiseElu: case Algorithm::EltwiseTanh: diff --git a/src/plugins/intel_cpu/src/nodes/executors/aarch64/jit_eltwise.cpp b/src/plugins/intel_cpu/src/nodes/executors/aarch64/jit_eltwise.cpp index 3f1031255d1775..6da6b63eb94a72 100644 --- a/src/plugins/intel_cpu/src/nodes/executors/aarch64/jit_eltwise.cpp +++ b/src/plugins/intel_cpu/src/nodes/executors/aarch64/jit_eltwise.cpp @@ -26,6 +26,7 @@ bool JitEltwiseExecutor::isSupported( Algorithm::EltwiseEqual, Algorithm::EltwiseExp, Algorithm::EltwiseFloor, + Algorithm::EltwiseCeiling, Algorithm::EltwiseGeluErf, Algorithm::EltwiseGeluTanh, Algorithm::EltwiseGreater, diff --git a/src/plugins/intel_cpu/src/nodes/kernels/aarch64/jit_uni_eltwise_generic.cpp b/src/plugins/intel_cpu/src/nodes/kernels/aarch64/jit_uni_eltwise_generic.cpp index 04286a0c8aaf68..b7fbfaf16e1587 100644 --- a/src/plugins/intel_cpu/src/nodes/kernels/aarch64/jit_uni_eltwise_generic.cpp +++ b/src/plugins/intel_cpu/src/nodes/kernels/aarch64/jit_uni_eltwise_generic.cpp @@ -648,6 +648,7 @@ std::shared_ptr jit_uni_eltwise_generic::create_eltwise_emitte OV_CASE(Algorithm::EltwiseEqual, ov::intel_cpu::aarch64::jit_equal_emitter), OV_CASE(Algorithm::EltwiseExp, ov::intel_cpu::aarch64::jit_exp_emitter), OV_CASE(Algorithm::EltwiseFloor, ov::intel_cpu::aarch64::jit_floor_emitter), + OV_CASE(Algorithm::EltwiseCeiling, ov::intel_cpu::aarch64::jit_ceiling_emitter), OV_CASE(Algorithm::EltwiseHswish, ov::intel_cpu::aarch64::jit_hswish_emitter), OV_CASE(Algorithm::EltwiseIsFinite, ov::intel_cpu::aarch64::jit_is_finite_emitter), OV_CASE(Algorithm::EltwiseIsInf, ov::intel_cpu::aarch64::jit_is_inf_emitter), @@ -828,6 +829,7 @@ std::set> eltwise_precision_helper::get_supported_pre OV_CASE(Algorithm::EltwiseEqual, jit_equal_emitter), OV_CASE(Algorithm::EltwiseExp, jit_exp_emitter), OV_CASE(Algorithm::EltwiseFloor, jit_floor_emitter), + OV_CASE(Algorithm::EltwiseCeiling, jit_ceiling_emitter), OV_CASE(Algorithm::EltwiseGeluErf, jit_gelu_erf_emitter), OV_CASE(Algorithm::EltwiseGeluTanh, jit_gelu_tanh_emitter), OV_CASE(Algorithm::EltwiseGreater, jit_greater_emitter), diff --git a/src/plugins/intel_cpu/tests/functional/custom/single_layer_tests/classes/activation.cpp b/src/plugins/intel_cpu/tests/functional/custom/single_layer_tests/classes/activation.cpp index 307938fbfec17a..bd81bcf1a41c63 100644 --- a/src/plugins/intel_cpu/tests/functional/custom/single_layer_tests/classes/activation.cpp +++ b/src/plugins/intel_cpu/tests/functional/custom/single_layer_tests/classes/activation.cpp @@ -182,6 +182,7 @@ std::string ActivationLayerCPUTest::getPrimitiveType(const utils::ActivationType (activation_type == utils::ActivationTypes::Elu) || (activation_type == utils::ActivationTypes::Exp) || (activation_type == utils::ActivationTypes::Floor) || + (activation_type == utils::ActivationTypes::Ceiling) || (activation_type == utils::ActivationTypes::HSwish) || (activation_type == utils::ActivationTypes::IsInf) || (activation_type == utils::ActivationTypes::HardSigmoid) || @@ -206,6 +207,7 @@ std::string ActivationLayerCPUTest::getPrimitiveType(const utils::ActivationType } #endif if ((activation_type == utils::ActivationTypes::Floor) || + (activation_type == utils::ActivationTypes::Ceiling) || (activation_type == utils::ActivationTypes::IsNaN) || (activation_type == utils::ActivationTypes::IsFinite)) { return "ref"; @@ -246,6 +248,7 @@ const std::map>>& activat {Clamp, {{-2.0f, 2.0f}}}, {Elu, {{0.1f}}}, {Floor, {{}}}, + {Ceiling, {{}}}, {Swish, {{0.1f}}}, {HSwish, {{}}}, {PReLu, {{-0.01f}}}, diff --git a/src/plugins/intel_cpu/tests/functional/shared_tests_instances/skip_tests_config.cpp b/src/plugins/intel_cpu/tests/functional/shared_tests_instances/skip_tests_config.cpp index 6103ecf0dd11f9..764133d52a7fdd 100644 --- a/src/plugins/intel_cpu/tests/functional/shared_tests_instances/skip_tests_config.cpp +++ b/src/plugins/intel_cpu/tests/functional/shared_tests_instances/skip_tests_config.cpp @@ -310,7 +310,7 @@ std::vector disabledTestPatterns() { }; // fp32 floor for bf16 models: conversion issue - retVector.emplace_back(R"(.*smoke.*ActivationLayerCPUTest.*CompareWithRefs/Floor_.*netPRC=bf16.*)"); + retVector.emplace_back(R"(.*smoke.*ActivationLayerCPUTest.*CompareWithRefs/(Floor|Ceiling)_.*netPRC=bf16.*)"); #if defined(OPENVINO_ARCH_X86) retVector.emplace_back(R"(.*DetectionOutputLayerTest.*)"); From 2e3948583c15620258b66b415bc323f3b50ee47b Mon Sep 17 00:00:00 2001 From: "jag.Xu" Date: Fri, 22 Nov 2024 16:13:56 +0800 Subject: [PATCH 23/24] bugfix for dynamic-shape backedge for static input shape in loop operator intel GPU (#26047) ### Fixed: This PR include bugfix for the loop operator when the different shape of input is preformed on different iteration to a loop operation with static input shape. ### Cause: The issued commit introduces a consideration of memory predictor in function named _set_memory_in_body_network_ in case where memory buffer has been over-allocated by shape predictor, memory layout might be unexpected shape. So when handling backedge memory copy for next iteration, memory layout is re-interpreted according to original layout . But in this senario in TF_Faster_RCNN_Inception_ResNet_v2 , when batchsize is 2, the loop is not unrolled for each iteration deal with one batch, shown in picture below, the broadcast is used to create a array and each iteration write a part of that array. with the set_memory_in_body_network function, **the 2nd iteration's input with the generated array is cutted off, which lose the first batch of data.** ![image](https://github.com/user-attachments/assets/0bcf264c-bbee-4061-98e2-f123db293dfc) ### Solution: The bugfix functions in two places, first in graph generation and second in runtime. in graph generation phrase the shape of input primitive take consider of the shape of from-node's backedge and mark it dynamic according to the from-node's shape. in the runtime, the set_memory_in_body_network will preform according to the shape of both sides of shape and compare with the pre-allocation memory which matching SINGLE_SHARED type. ### A testcase is added to test this behavior. this test case can not be passed on the issued commit( 236e1062b290e2d2345f1d1c319e78f15e0a311d) while can be passed when doing the change in the mentioned PR. ### Tickets: - CVS-143684 --------- Co-authored-by: Ahn, Paul Y --- .../include/intel_gpu/graph/network.hpp | 2 +- .../src/graph/impls/ocl/non_zero.cpp | 5 ++ .../src/graph/include/input_layout_inst.h | 2 +- .../intel_gpu/src/graph/input_layout.cpp | 4 +- src/plugins/intel_gpu/src/graph/loop.cpp | 10 +-- src/plugins/intel_gpu/src/graph/network.cpp | 4 +- .../tests/functional/subgraph_tests/loop.cpp | 61 +++++++++++++------ 7 files changed, 59 insertions(+), 29 deletions(-) diff --git a/src/plugins/intel_gpu/include/intel_gpu/graph/network.hpp b/src/plugins/intel_gpu/include/intel_gpu/graph/network.hpp index f6207e25a5ca41..5b7873c1500638 100644 --- a/src/plugins/intel_gpu/include/intel_gpu/graph/network.hpp +++ b/src/plugins/intel_gpu/include/intel_gpu/graph/network.hpp @@ -111,7 +111,7 @@ struct network { engine& get_engine() const { return _engine; } void reset_execution(bool wait = true); - event::ptr set_input_data(const primitive_id& id, memory::ptr data); + event::ptr set_input_data(const primitive_id& id, memory::ptr data, bool need_to_check_memory_to_set = true); std::vector set_output_memory(const primitive_id& id, memory::ptr mem); std::vector> const& get_outputs() { return _outputs; } diff --git a/src/plugins/intel_gpu/src/graph/impls/ocl/non_zero.cpp b/src/plugins/intel_gpu/src/graph/impls/ocl/non_zero.cpp index 44be7824d4b7dd..84f6020e517f28 100644 --- a/src/plugins/intel_gpu/src/graph/impls/ocl/non_zero.cpp +++ b/src/plugins/intel_gpu/src/graph/impls/ocl/non_zero.cpp @@ -95,6 +95,11 @@ struct gather_nonzero_impl : typed_primitive_impl_ocl { update_shapes(*_kernel_data.params, impl_param); (_kernel_data.update_dispatch_data_func)(*_kernel_data.params, _kernel_data); } + + static kernel_impl_params static_canonicalize_shapes(const kernel_impl_params& impl_params) { + auto updated_impl_params = canonicalize_fused_shapes(impl_params); + return updated_impl_params; + } }; namespace detail { diff --git a/src/plugins/intel_gpu/src/graph/include/input_layout_inst.h b/src/plugins/intel_gpu/src/graph/include/input_layout_inst.h index ee59d43bf116aa..a366980aa31e84 100644 --- a/src/plugins/intel_gpu/src/graph/include/input_layout_inst.h +++ b/src/plugins/intel_gpu/src/graph/include/input_layout_inst.h @@ -40,7 +40,7 @@ class typed_primitive_inst : public typed_primitive_inst_base; diff --git a/src/plugins/intel_gpu/src/graph/input_layout.cpp b/src/plugins/intel_gpu/src/graph/input_layout.cpp index 9c60cd187405d0..cc9e1b7d2787cb 100644 --- a/src/plugins/intel_gpu/src/graph/input_layout.cpp +++ b/src/plugins/intel_gpu/src/graph/input_layout.cpp @@ -35,11 +35,11 @@ input_layout_inst::typed_primitive_inst(network& network, input_layout_node cons _has_valid_input = false; // by default input for 'input_layout' is invalid as long as user doesn't call set_data } -event::ptr input_layout_inst::set_data(memory::ptr mem) { +event::ptr input_layout_inst::set_data(memory::ptr mem, bool need_to_check_memory_to_set) { auto ol = get_node_output_layout(); bool empty_mem = mem->size() == 0 && (ol.is_dynamic() || ol.count() == 0); - if (!empty_mem) { + if (!empty_mem && need_to_check_memory_to_set) { check_memory_to_set(*mem, ol); } diff --git a/src/plugins/intel_gpu/src/graph/loop.cpp b/src/plugins/intel_gpu/src/graph/loop.cpp index 15dc768b8248fe..5d842c2a863433 100644 --- a/src/plugins/intel_gpu/src/graph/loop.cpp +++ b/src/plugins/intel_gpu/src/graph/loop.cpp @@ -1002,16 +1002,16 @@ void loop_inst::set_memory_in_body_network(cldnn::network::ptr body_network, const std::shared_ptr& inst, memory::ptr mem) { if (inst->is_input()) { // in case where memory buffer has been over-allocated by shape predictor, memory layout might be unexpected shape. - // so memory layout needs to be re-interprete according to original layout. + // so memory layout needs to be re-interpret according to original layout. memory::ptr updated_mem = mem; layout impl_layout = inst->get_impl_params()->get_output_layout(); OPENVINO_ASSERT(impl_layout.bytes_count() <= updated_mem->get_layout().bytes_count(), "impl_params layout size(", impl_layout.to_short_string(), ") should not exceed memory size(", updated_mem->get_layout().to_short_string(), ")"); - if (impl_layout.bytes_count() < updated_mem->get_layout().bytes_count()) { - updated_mem = body_network->get_engine().reinterpret_buffer(*updated_mem, impl_layout); - } - body_network->set_input_data(inst->id(), updated_mem); + // Set need_to_check_memory_to_set to false to set output memory even if the input node has static shape, + body_network->set_input_data(inst->id(), updated_mem, false); + // Update impl_params.output_layouts[0] to updated_mem's layout + inst->update_shape(); } else if (inst->is_output()) { body_network->set_output_memory(inst->id(), mem); } else { diff --git a/src/plugins/intel_gpu/src/graph/network.cpp b/src/plugins/intel_gpu/src/graph/network.cpp index 37bceb53396179..37152b0d9e3b4f 100644 --- a/src/plugins/intel_gpu/src/graph/network.cpp +++ b/src/plugins/intel_gpu/src/graph/network.cpp @@ -312,7 +312,7 @@ void network::reset_execution(bool wait) { } } -event::ptr network::set_input_data(const primitive_id& id, memory::ptr data) { +event::ptr network::set_input_data(const primitive_id& id, memory::ptr data, bool need_to_check_memory_to_set) { GPU_DEBUG_TRACE_DETAIL << "Set input " << id << " " << data->get_layout().to_short_string() << std::endl; auto primitive_inst = find_primitive(id); @@ -322,7 +322,7 @@ event::ptr network::set_input_data(const primitive_id& id, memory::ptr data) { auto input = std::static_pointer_cast(primitive_inst); - return input->set_data(data); + return input->set_data(data, need_to_check_memory_to_set); } void network::add_default_output_chains() { diff --git a/src/plugins/intel_gpu/tests/functional/subgraph_tests/loop.cpp b/src/plugins/intel_gpu/tests/functional/subgraph_tests/loop.cpp index 39501c67e1bbb7..62952dadb57cc8 100644 --- a/src/plugins/intel_gpu/tests/functional/subgraph_tests/loop.cpp +++ b/src/plugins/intel_gpu/tests/functional/subgraph_tests/loop.cpp @@ -307,7 +307,8 @@ using DynamicShapeLoopDynamicInputParams = typename std::tuple< InputShape, InputShape, ov::element::Type, - std::string>; + std::string, + bool>; class DynamicShapeLoopDynamicInputTest : public testing::WithParamInterface, virtual public ov::test::SubgraphBaseTest { @@ -315,6 +316,7 @@ class DynamicShapeLoopDynamicInputTest : public testing::WithParamInterface &obj) { bool static_iter_num; bool static_continue_cond; + bool freeze_input; int64_t max_iter_num; int64_t dynamic_exit; int64_t axis; @@ -331,11 +333,13 @@ class DynamicShapeLoopDynamicInputTest : public testing::WithParamInterfaceset_friendly_name("start_add"); - auto start_mul = cond_input_create(model_type, inputShape, 1); - start_mul->set_friendly_name("start_mul"); + auto start_add2 = cond_input_create(model_type, inputShape, 1); + start_add2->set_friendly_name("start_add2"); auto count = cond_input_create(ov::element::i64, scalarShape, max_iter_num, static_iter_num); count->set_friendly_name("count"); auto skip = cond_input_create(ov::element::boolean, scalarShape, true, static_continue_cond); skip->set_friendly_name("skip"); - auto init_const = cond_input_create(model_type, constant_shapes.first, 1); + auto init_const = cond_input_create(model_type, constant_shapes.first, 1, freeze_input); init_const->set_friendly_name("init_const"); auto b_indx = std::make_shared(ov::element::i64, ov::Shape{}); b_indx->set_friendly_name("body_index"); auto b_data_add = std::make_shared(model_type, inputShape); b_data_add->set_friendly_name("b_data_add"); - auto b_data_mul = std::make_shared(model_type, inputShape); - b_data_mul->set_friendly_name("b_data_mul"); + auto b_data_add2 = std::make_shared(model_type, inputShape); + b_data_add2->set_friendly_name("b_data_add2"); auto b_data_broadcast = std::make_shared(model_type, constant_shapes.first); b_data_broadcast->set_friendly_name("b_data_broadcast"); auto b_indx_cast = std::make_shared(b_indx, model_type); b_indx_cast->set_friendly_name("body_index_cast"); auto b_add = std::make_shared(b_data_add, b_indx_cast); b_add->set_friendly_name("body_add"); - auto b_mul = std::make_shared(b_data_mul, b_indx_cast); - b_mul->set_friendly_name("body_mul"); - auto b_shapeof1 = std::make_shared(b_data_mul); + auto b_add2 = std::make_shared(b_data_add2, b_indx_cast); + b_add2->set_friendly_name("body_mul"); + auto b_shapeof1 = std::make_shared(b_data_add2); b_shapeof1->set_friendly_name("b_shapeof1"); auto b_shapeof2 = std::make_shared(b_data_broadcast); b_shapeof2->set_friendly_name("b_shapeof2"); @@ -432,7 +438,9 @@ class DynamicShapeLoopDynamicInputTest : public testing::WithParamInterfaceset_friendly_name("b_max"); auto b_broadcast = std::make_shared(b_data_broadcast, b_max); b_broadcast->set_friendly_name("b_broadcast"); - auto b_mul2 = std::make_shared(b_broadcast, b_mul); + auto b_reshape = std::make_shared(b_broadcast, b_shapeof1, false); + b_reshape->set_friendly_name("b_reshape"); + auto b_mul2 = std::make_shared(b_reshape, b_add2); b_mul2->set_friendly_name("b_mul2"); std::shared_ptr b_cond; @@ -447,8 +455,8 @@ class DynamicShapeLoopDynamicInputTest : public testing::WithParamInterface( - ov::OutputVector {b_cond, b_add, b_mul, b_mul2}, // TODO: check with reverse - ov::ParameterVector {b_indx, b_data_add, b_data_mul, b_data_broadcast}); // TODO: check with reverse + ov::OutputVector {b_cond, b_add, b_add2, b_mul2}, // TODO: check with reverse + ov::ParameterVector {b_indx, b_data_add, b_data_add2, b_data_broadcast}); // TODO: check with reverse body->set_friendly_name("body_network"); auto loop = std::make_shared(count, skip); @@ -456,15 +464,15 @@ class DynamicShapeLoopDynamicInputTest : public testing::WithParamInterfaceset_function(body); loop->set_special_body_ports({0, 0}); loop->set_merged_input(b_data_add, start_add, b_add); - loop->set_merged_input(b_data_mul, start_mul, b_mul); + loop->set_merged_input(b_data_add2, start_add2, b_add2); loop->set_merged_input(b_data_broadcast, init_const, b_mul2); if (axis == -1) { loop->get_iter_value(b_add, -1); - loop->get_iter_value(b_mul, -1); + loop->get_iter_value(b_add2, -1); loop->get_iter_value(b_mul2, -1); } else { loop->get_concatenated_slices(b_add, 0, 1, 1, -1, axis); - loop->get_concatenated_slices(b_mul, 0, 1, 1, -1, axis); + loop->get_concatenated_slices(b_add2, 0, 1, 1, -1, axis); } ov::ResultVector results; @@ -507,6 +515,23 @@ INSTANTIATE_TEST_SUITE_P(smoke_DynamicShapeLoop_dynamic, DynamicShapeLoopDynamic /* data_shape */ testing::ValuesIn(inputs_dynamic_shape), /* constant_shape */ testing::ValuesIn(constant_dynamic_shape), /* model_type */ testing::ValuesIn(model_types), - /* device */ testing::Values(ov::test::utils::DEVICE_GPU)), + /* device */ testing::Values(ov::test::utils::DEVICE_GPU), + /* freeze_input */ testing::Values(false)), + DynamicShapeLoopDynamicInputTest::getTestCaseName); + +std::vector constant_static_shape = { + InputShape({1, 1, 1}, {{1, 1, 1}, {1, 1, 1}, {1, 1, 1}}), +}; + +INSTANTIATE_TEST_SUITE_P(smoke_DynamicShapeLoop_conflict_dynamic, DynamicShapeLoopDynamicInputTest, + testing::Combine( + /* static_continue_cond */ testing::Values(true), + /* args_pack */ testing::ValuesIn(dynamic_loop_input), + /* start_value */ testing::Values(0), + /* data_shape */ testing::ValuesIn(inputs_dynamic_shape), + /* constant_shape */ testing::ValuesIn(constant_static_shape), + /* model_type */ testing::ValuesIn(model_types), + /* device */ testing::Values(ov::test::utils::DEVICE_GPU), + /* freeze_input */ testing::Values(true)), DynamicShapeLoopDynamicInputTest::getTestCaseName); } // namespace \ No newline at end of file From f6e0ba02a580cebfb4a4f9305b07a806c5e9509f Mon Sep 17 00:00:00 2001 From: Katarzyna Mitrus Date: Fri, 22 Nov 2024 10:07:15 +0100 Subject: [PATCH 24/24] [Op][Internal] Rename SwiGLU to GLU (#27683) ### Details: - Rename internal op SwiGLU to GLU (no naming changes for GPU swiglu kernel in this PR) Current SwiGLU can be also GeGLU, it depends on the glu_type member. It has been proposed by several people to rename this op and make the name more generic like GLU. Related comment: https://github.com/openvinotoolkit/openvino/pull/27579#discussion_r1846130138 ### Tickets: - 157623 --- .../include/ov_ops/{swiglu.hpp => glu.hpp} | 24 +++--- .../{swiglu_fusion.hpp => glu_fusion.hpp} | 6 +- .../src/ov_ops/{swiglu.cpp => glu.cpp} | 34 ++++----- .../{swiglu_fusion.cpp => glu_fusion.cpp} | 32 ++++---- ...lu_fusion_test.cpp => glu_fusion_test.cpp} | 74 +++++++++---------- .../intel_gpu/plugin/primitives_list.hpp | 2 +- .../include/intel_gpu/primitives/swiglu.hpp | 6 +- src/plugins/intel_gpu/src/graph/swiglu.cpp | 4 +- .../kernels/swiglu/swiglu_kernel_base.cpp | 4 +- .../kernels/swiglu/swiglu_kernel_base.h | 6 +- .../intel_gpu/src/plugin/ops/swiglu.cpp | 8 +- .../src/plugin/transformations_pipeline.cpp | 4 +- .../tests/unit/test_cases/swiglu_gpu_test.cpp | 4 +- 13 files changed, 104 insertions(+), 104 deletions(-) rename src/common/transformations/include/ov_ops/{swiglu.hpp => glu.hpp} (80%) rename src/common/transformations/include/transformations/common_optimizations/{swiglu_fusion.hpp => glu_fusion.hpp} (69%) rename src/common/transformations/src/ov_ops/{swiglu.cpp => glu.cpp} (67%) rename src/common/transformations/src/transformations/common_optimizations/{swiglu_fusion.cpp => glu_fusion.cpp} (83%) rename src/common/transformations/tests/common_optimizations/{swiglu_fusion_test.cpp => glu_fusion_test.cpp} (70%) diff --git a/src/common/transformations/include/ov_ops/swiglu.hpp b/src/common/transformations/include/ov_ops/glu.hpp similarity index 80% rename from src/common/transformations/include/ov_ops/swiglu.hpp rename to src/common/transformations/include/ov_ops/glu.hpp index f03c1ac1a26666..760641978b574d 100644 --- a/src/common/transformations/include/ov_ops/swiglu.hpp +++ b/src/common/transformations/include/ov_ops/glu.hpp @@ -11,16 +11,16 @@ namespace ov { namespace op { namespace internal { -/// \brief Operator performing Swish Gated Linear Unit Activation +/// \brief Operator performing Gated Linear Unit Activation /// This operation performs gated linear unit activation that combines swish or gelu activation function -class TRANSFORMATIONS_API SwiGLU : public ov::op::Op { +class TRANSFORMATIONS_API GLU : public ov::op::Op { public: - OPENVINO_OP("SwiGLU", "ie_internal_opset"); + OPENVINO_OP("GLU", "ie_internal_opset"); enum GluType { Swish = 0, Gelu, Gelu_Tanh }; - SwiGLU() = default; - /// \brief Constructs an SwiGLU operation. + GLU() = default; + /// \brief Constructs an GLU operation. /// /// \param data Input tensor with data /// \param axis The index of an axis in "data" along which to perform the split @@ -28,12 +28,12 @@ class TRANSFORMATIONS_API SwiGLU : public ov::op::Op { /// \param glu_type GLU type, one of Swish, Gelu and Gelu_Tanh /// \param split_to_glu_idx Output index of variadic split, which is connected to GLU /// \param output_type Output element type - SwiGLU(const Output& data, - int64_t axis, - int64_t split_lengths, - const GluType glu_type, - const size_t split_to_glu_idx, - const ov::element::Type output_type = ov::element::undefined); + GLU(const Output& data, + int64_t axis, + int64_t split_lengths, + const GluType glu_type, + const size_t split_to_glu_idx, + const ov::element::Type output_type = ov::element::undefined); bool visit_attributes(ov::AttributeVisitor& visitor) override; @@ -76,7 +76,7 @@ class TRANSFORMATIONS_API SwiGLU : public ov::op::Op { }; // TODO 157615: Move to shape_inference -TRANSFORMATIONS_API std::vector shape_infer(const SwiGLU* op, +TRANSFORMATIONS_API std::vector shape_infer(const GLU* op, std::vector input_shapes); } // namespace internal diff --git a/src/common/transformations/include/transformations/common_optimizations/swiglu_fusion.hpp b/src/common/transformations/include/transformations/common_optimizations/glu_fusion.hpp similarity index 69% rename from src/common/transformations/include/transformations/common_optimizations/swiglu_fusion.hpp rename to src/common/transformations/include/transformations/common_optimizations/glu_fusion.hpp index 18205bd1a1e8e2..7ec71a05027d80 100644 --- a/src/common/transformations/include/transformations/common_optimizations/swiglu_fusion.hpp +++ b/src/common/transformations/include/transformations/common_optimizations/glu_fusion.hpp @@ -11,10 +11,10 @@ namespace ov { namespace pass { -class TRANSFORMATIONS_API SwiGLUFusion : public ov::pass::MatcherPass { +class TRANSFORMATIONS_API GLUFusion : public ov::pass::MatcherPass { public: - OPENVINO_RTTI("SwiGLUFusion", "0"); - SwiGLUFusion(); + OPENVINO_RTTI("GLUFusion", "0"); + GLUFusion(); }; } // namespace pass diff --git a/src/common/transformations/src/ov_ops/swiglu.cpp b/src/common/transformations/src/ov_ops/glu.cpp similarity index 67% rename from src/common/transformations/src/ov_ops/swiglu.cpp rename to src/common/transformations/src/ov_ops/glu.cpp index b3b9e71076aee0..bc3dfb89ab8b9b 100644 --- a/src/common/transformations/src/ov_ops/swiglu.cpp +++ b/src/common/transformations/src/ov_ops/glu.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 // -#include "ov_ops/swiglu.hpp" +#include "ov_ops/glu.hpp" #include "openvino/core/partial_shape.hpp" #include "openvino/core/validation_util.hpp" @@ -13,12 +13,12 @@ namespace ov { namespace op { namespace internal { -SwiGLU::SwiGLU(const Output& data, - int64_t axis, - int64_t split_lengths, - const GluType glu_type, - const size_t split_to_glu_idx, - const ov::element::Type output_type) +GLU::GLU(const Output& data, + int64_t axis, + int64_t split_lengths, + const GluType glu_type, + const size_t split_to_glu_idx, + const ov::element::Type output_type) : Op({data}), m_axis(axis), m_split_lengths(split_lengths), @@ -28,14 +28,14 @@ SwiGLU::SwiGLU(const Output& data, validate_and_infer_types(); } -bool SwiGLU::visit_attributes(ov::AttributeVisitor& visitor) { +bool GLU::visit_attributes(ov::AttributeVisitor& visitor) { visitor.on_attribute("axis", m_axis); visitor.on_attribute("split_lengths", m_split_lengths); visitor.on_attribute("output_type", m_output_type); return true; } -void SwiGLU::validate_and_infer_types() { +void GLU::validate_and_infer_types() { auto output_type = m_output_type == ov::element::undefined ? get_input_element_type(0) : m_output_type; std::vector input_shapes = {get_input_partial_shape(0), @@ -45,17 +45,17 @@ void SwiGLU::validate_and_infer_types() { set_output_type(0, output_type, shape_infer(this, input_shapes)[0]); } -std::shared_ptr SwiGLU::clone_with_new_inputs(const ov::OutputVector& new_args) const { +std::shared_ptr GLU::clone_with_new_inputs(const ov::OutputVector& new_args) const { check_new_args_count(this, new_args); - return std::make_shared(new_args.at(0), - m_axis, - m_split_lengths, - m_glu_type, - m_split_to_glu_idx, - m_output_type); + return std::make_shared(new_args.at(0), + m_axis, + m_split_lengths, + m_glu_type, + m_split_to_glu_idx, + m_output_type); } -std::vector shape_infer(const SwiGLU* op, std::vector input_shapes) { +std::vector shape_infer(const GLU* op, std::vector input_shapes) { ov::op::v1::VariadicSplit variadic_split; std::vector axis = {op->get_axis()}; std::vector split_lengths = {op->get_split_lengths(), -1}; diff --git a/src/common/transformations/src/transformations/common_optimizations/swiglu_fusion.cpp b/src/common/transformations/src/transformations/common_optimizations/glu_fusion.cpp similarity index 83% rename from src/common/transformations/src/transformations/common_optimizations/swiglu_fusion.cpp rename to src/common/transformations/src/transformations/common_optimizations/glu_fusion.cpp index 84c6dbceb39f2f..2b6c2092a054c2 100644 --- a/src/common/transformations/src/transformations/common_optimizations/swiglu_fusion.cpp +++ b/src/common/transformations/src/transformations/common_optimizations/glu_fusion.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 // -#include "transformations/common_optimizations/swiglu_fusion.hpp" +#include "transformations/common_optimizations/glu_fusion.hpp" #include "openvino/core/rt_info.hpp" #include "openvino/op/constant.hpp" @@ -13,13 +13,13 @@ #include "openvino/pass/manager.hpp" #include "openvino/pass/pattern/op/or.hpp" #include "openvino/pass/pattern/op/wrap_type.hpp" -#include "ov_ops/swiglu.hpp" +#include "ov_ops/glu.hpp" #include "transformations/utils/utils.hpp" namespace ov { namespace pass { -SwiGLUFusion::SwiGLUFusion() { +GLUFusion::GLUFusion() { using namespace ov::pass::pattern; using ov::pass::pattern::op::Or; @@ -28,8 +28,8 @@ SwiGLUFusion::SwiGLUFusion() { return out_ps.rank().is_static() && out_ps[out_ps.rank().get_length() - 1].is_static() && out_ps.size() <= 5; }; - // Detect SwiGLU decomposition pattern - // SwiGLU(Xw, Xv, beta) = (Xw * (1.0 + exp(-beta * Xw))) * Xv + // Detect GLU decomposition pattern + // GLU(Xw, Xv, beta) = (Xw * (1.0 + exp(-beta * Xw))) * Xv auto data_m = any_input(last_dim_static); // VariadicSplit(X, axis, split_lengths) = Xw, Xv @@ -60,11 +60,11 @@ SwiGLUFusion::SwiGLUFusion() { auto isSwiGLU = pattern_map.count(swish_m); auto isGeGLU = pattern_map.count(gelu_m); size_t split_to_glu_idx = 0; - ov::op::internal::SwiGLU::GluType glu_type = ov::op::internal::SwiGLU::GluType::Swish; + ov::op::internal::GLU::GluType glu_type = ov::op::internal::GLU::GluType::Swish; if (isSwiGLU) { auto swish = std::dynamic_pointer_cast(pattern_map.at(swish_m).get_node_shared_ptr()); - glu_type = ov::op::internal::SwiGLU::GluType::Swish; + glu_type = ov::op::internal::GLU::GluType::Swish; split_to_glu_idx = swish->input_value(0).get_index(); size_t split_in_idx = ov::is_type(mul->get_input_node_shared_ptr(0)) ? 1 : 0; @@ -73,8 +73,8 @@ SwiGLUFusion::SwiGLUFusion() { } else if (isGeGLU) { auto gelu = std::dynamic_pointer_cast(pattern_map.at(gelu_m).get_node_shared_ptr()); glu_type = (gelu->get_approximation_mode() == ov::op::GeluApproximationMode::ERF) - ? ov::op::internal::SwiGLU::GluType::Gelu - : ov::op::internal::SwiGLU::GluType::Gelu_Tanh; + ? ov::op::internal::GLU::GluType::Gelu + : ov::op::internal::GLU::GluType::Gelu_Tanh; split_to_glu_idx = gelu->input_value(0).get_index(); size_t split_in_idx = ov::is_type(mul->get_input_node_shared_ptr(0)) ? 1 : 0; @@ -107,12 +107,12 @@ SwiGLUFusion::SwiGLUFusion() { auto data = pattern_map.at(data_m); auto output_type = m.get_match_root()->get_output_element_type(0); - auto swiglu = std::make_shared(data, - axis_value, - split_lengths_value, - glu_type, - split_to_glu_idx, - output_type); + auto swiglu = std::make_shared(data, + axis_value, + split_lengths_value, + glu_type, + split_to_glu_idx, + output_type); swiglu->set_friendly_name(m.get_match_root()->get_friendly_name()); ov::copy_runtime_info(m.get_matched_nodes(), swiglu); ov::replace_node(m.get_match_root(), swiglu); @@ -120,7 +120,7 @@ SwiGLUFusion::SwiGLUFusion() { return true; }; - auto m = std::make_shared(mul_m, "SwiGLUFusion"); + auto m = std::make_shared(mul_m, "GLUFusion"); this->register_matcher(m, callback); } diff --git a/src/common/transformations/tests/common_optimizations/swiglu_fusion_test.cpp b/src/common/transformations/tests/common_optimizations/glu_fusion_test.cpp similarity index 70% rename from src/common/transformations/tests/common_optimizations/swiglu_fusion_test.cpp rename to src/common/transformations/tests/common_optimizations/glu_fusion_test.cpp index 75c8fba75024c3..4d879be57672cd 100644 --- a/src/common/transformations/tests/common_optimizations/swiglu_fusion_test.cpp +++ b/src/common/transformations/tests/common_optimizations/glu_fusion_test.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 // -#include "transformations/common_optimizations/swiglu_fusion.hpp" +#include "transformations/common_optimizations/glu_fusion.hpp" #include @@ -18,13 +18,13 @@ #include "openvino/op/swish.hpp" #include "openvino/op/variadic_split.hpp" #include "openvino/pass/manager.hpp" -#include "ov_ops/swiglu.hpp" +#include "ov_ops/glu.hpp" #include "transformations/utils/utils.hpp" using namespace testing; using namespace ov::pass; -TEST_F(TransformationTestsF, SwiGLUFusionTest1) { +TEST_F(TransformationTestsF, GLUFusionTest1) { { auto input = std::make_shared(ov::element::f16, ov::PartialShape{2, 1, 6}); auto axis_const = ov::op::v0::Constant::create(ov::element::i64, ov::Shape{}, {-1}); @@ -34,24 +34,24 @@ TEST_F(TransformationTestsF, SwiGLUFusionTest1) { auto mul = std::make_shared(swish, variadic_split->output(1)); model = std::make_shared(ov::NodeVector{mul}, ov::ParameterVector{input}); - manager.register_pass(); + manager.register_pass(); } { int64_t axis = -1; int64_t split_lenghts = 3; auto input = std::make_shared(ov::element::f16, ov::PartialShape{2, 1, 6}); - auto swiglu = std::make_shared(input, - axis, - split_lenghts, - ov::op::internal::SwiGLU::GluType::Swish, - 0, - ov::element::f16); + auto swiglu = std::make_shared(input, + axis, + split_lenghts, + ov::op::internal::GLU::GluType::Swish, + 0, + ov::element::f16); model_ref = std::make_shared(ov::NodeVector{swiglu}, ov::ParameterVector{input}); } } -TEST_F(TransformationTestsF, SwiGLUFusionTest2) { +TEST_F(TransformationTestsF, GLUFusionTest2) { { auto input = std::make_shared(ov::element::f16, ov::PartialShape{-1, -1, 6}); auto axis_const = ov::op::v0::Constant::create(ov::element::i64, ov::Shape{}, {0}); @@ -61,11 +61,11 @@ TEST_F(TransformationTestsF, SwiGLUFusionTest2) { auto mul = std::make_shared(swish, variadic_split->output(1)); model = std::make_shared(ov::NodeVector{mul}, ov::ParameterVector{input}); - manager.register_pass(); + manager.register_pass(); } } -TEST_F(TransformationTestsF, SwiGLUFusionTest3) { +TEST_F(TransformationTestsF, GLUFusionTest3) { { auto input = std::make_shared(ov::element::f16, ov::PartialShape{-1, -1, 6}); auto axis_const = ov::op::v0::Constant::create(ov::element::i64, ov::Shape{}, {-1}); @@ -75,24 +75,24 @@ TEST_F(TransformationTestsF, SwiGLUFusionTest3) { auto mul = std::make_shared(swish, variadic_split->output(1)); model = std::make_shared(ov::NodeVector{mul}, ov::ParameterVector{input}); - manager.register_pass(); + manager.register_pass(); } { int64_t axis = -1; int64_t split_lenghts = 3; auto input = std::make_shared(ov::element::f16, ov::PartialShape{-1, -1, 6}); - auto swiglu = std::make_shared(input, - axis, - split_lenghts, - ov::op::internal::SwiGLU::GluType::Swish, - 0, - ov::element::f16); + auto swiglu = std::make_shared(input, + axis, + split_lenghts, + ov::op::internal::GLU::GluType::Swish, + 0, + ov::element::f16); model_ref = std::make_shared(ov::NodeVector{swiglu}, ov::ParameterVector{input}); } } -TEST_F(TransformationTestsF, SwiGLUFusionTest3ReverseOrder) { +TEST_F(TransformationTestsF, GLUFusionTest3ReverseOrder) { { auto input = std::make_shared(ov::element::f16, ov::PartialShape{-1, -1, 6}); auto axis_const = ov::op::v0::Constant::create(ov::element::i64, ov::Shape{}, {-1}); @@ -102,24 +102,24 @@ TEST_F(TransformationTestsF, SwiGLUFusionTest3ReverseOrder) { auto mul = std::make_shared(variadic_split->output(1), swish); model = std::make_shared(ov::NodeVector{mul}, ov::ParameterVector{input}); - manager.register_pass(); + manager.register_pass(); } { int64_t axis = -1; int64_t split_lenghts = 3; auto input = std::make_shared(ov::element::f16, ov::PartialShape{-1, -1, 6}); - auto swiglu = std::make_shared(input, - axis, - split_lenghts, - ov::op::internal::SwiGLU::GluType::Swish, - 0, - ov::element::f16); + auto swiglu = std::make_shared(input, + axis, + split_lenghts, + ov::op::internal::GLU::GluType::Swish, + 0, + ov::element::f16); model_ref = std::make_shared(ov::NodeVector{swiglu}, ov::ParameterVector{input}); } } -TEST_F(TransformationTestsF, SwiGLUFusionTest4) { +TEST_F(TransformationTestsF, GLUFusionTest4) { { auto input = std::make_shared(ov::element::f16, ov::PartialShape{-1, -1, 6}); auto axis_const = ov::op::v0::Constant::create(ov::element::i64, ov::Shape{}, {-1}); @@ -129,7 +129,7 @@ TEST_F(TransformationTestsF, SwiGLUFusionTest4) { auto mul = std::make_shared(swish, variadic_split->output(0)); model = std::make_shared(ov::NodeVector{mul}, ov::ParameterVector{input}); - manager.register_pass(); + manager.register_pass(); } } @@ -143,18 +143,18 @@ TEST_F(TransformationTestsF, GeGLUFusionTest1) { auto mul = std::make_shared(variadic_split->output(0), gelu); model = std::make_shared(ov::NodeVector{mul}, ov::ParameterVector{input}); - manager.register_pass(); + manager.register_pass(); } { int64_t axis = -1; int64_t split_lenghts = 3; auto input = std::make_shared(ov::element::f16, ov::PartialShape{2, 1, 6}); - auto swiglu = std::make_shared(input, - axis, - split_lenghts, - ov::op::internal::SwiGLU::GluType::Gelu, - 1, - ov::element::f16); + auto swiglu = std::make_shared(input, + axis, + split_lenghts, + ov::op::internal::GLU::GluType::Gelu, + 1, + ov::element::f16); model_ref = std::make_shared(ov::NodeVector{swiglu}, ov::ParameterVector{input}); } diff --git a/src/plugins/intel_gpu/include/intel_gpu/plugin/primitives_list.hpp b/src/plugins/intel_gpu/include/intel_gpu/plugin/primitives_list.hpp index 27e5540a3786ab..ced915d25610e8 100644 --- a/src/plugins/intel_gpu/include/intel_gpu/plugin/primitives_list.hpp +++ b/src/plugins/intel_gpu/include/intel_gpu/plugin/primitives_list.hpp @@ -287,7 +287,7 @@ REGISTER_FACTORY(internal, KVCacheCompressed); REGISTER_FACTORY(internal, ReadValue); REGISTER_FACTORY(internal, ReadValues); REGISTER_FACTORY(internal, Gemm); -REGISTER_FACTORY(internal, SwiGLU); +REGISTER_FACTORY(internal, GLU); REGISTER_FACTORY(internal, IndirectGemm); REGISTER_FACTORY(internal, Convolution); REGISTER_FACTORY(internal, Placeholder); diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/swiglu.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/swiglu.hpp index 8e9ea5aff03902..1a72e36d471dfc 100644 --- a/src/plugins/intel_gpu/include/intel_gpu/primitives/swiglu.hpp +++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/swiglu.hpp @@ -3,7 +3,7 @@ // #pragma once -#include "ov_ops/swiglu.hpp" +#include "ov_ops/glu.hpp" #include "primitive.hpp" namespace cldnn { @@ -25,7 +25,7 @@ struct swiglu : public primitive_base { const input_info& input, const int64_t& axis, const int64_t& split_lengths, - const ov::op::internal::SwiGLU::GluType glu_type, + const ov::op::internal::GLU::GluType glu_type, const size_t split_to_glu_idx, const tensor output_size) : primitive_base(id, {input}), @@ -37,7 +37,7 @@ struct swiglu : public primitive_base { int64_t axis = 0; int64_t split_lengths = 0; - ov::op::internal::SwiGLU::GluType glu_type = ov::op::internal::SwiGLU::GluType::Swish; + ov::op::internal::GLU::GluType glu_type = ov::op::internal::GLU::GluType::Swish; size_t split_to_glu_idx = 0; tensor output_size; diff --git a/src/plugins/intel_gpu/src/graph/swiglu.cpp b/src/plugins/intel_gpu/src/graph/swiglu.cpp index 127b8645870157..e82e4e974b1868 100644 --- a/src/plugins/intel_gpu/src/graph/swiglu.cpp +++ b/src/plugins/intel_gpu/src/graph/swiglu.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 // -#include "ov_ops/swiglu.hpp" +#include "ov_ops/glu.hpp" #include "swiglu_inst.h" #include "primitive_type_base.h" @@ -28,7 +28,7 @@ std::vector swiglu_inst::calc_output_layouts(swiglu_node const& /*node*/ auto output_type = impl_param.desc->output_data_types[0].value_or(input_layout.data_type); auto output_format = input_layout.format; - ov::op::internal::SwiGLU op; + ov::op::internal::GLU op; op.set_axis(desc->axis); op.set_split_lengths(desc->split_lengths); diff --git a/src/plugins/intel_gpu/src/kernel_selector/kernels/swiglu/swiglu_kernel_base.cpp b/src/plugins/intel_gpu/src/kernel_selector/kernels/swiglu/swiglu_kernel_base.cpp index b3c31f31128c49..b6b67bd4ed222d 100644 --- a/src/plugins/intel_gpu/src/kernel_selector/kernels/swiglu/swiglu_kernel_base.cpp +++ b/src/plugins/intel_gpu/src/kernel_selector/kernels/swiglu/swiglu_kernel_base.cpp @@ -25,10 +25,10 @@ JitConstants SwiGLUKernelBase::GetJitConstants(const swiglu_params& params, cons jit.AddConstants({MakeJitConstant("LWS1", dispatchData.lws[1])}); jit.AddConstants({MakeJitConstant("LWS2", dispatchData.lws[2])}); const std::string type_suffix = (GetAccumulatorType(params) == Datatype::F32) ? "f" : "h"; - if (params.glu_type == ov::op::internal::SwiGLU::GluType::Gelu) { + if (params.glu_type == ov::op::internal::GLU::GluType::Gelu) { jit.AddConstants({MakeJitConstant("GEGLU_HALF", "0.5" + type_suffix)}); jit.AddConstants({MakeJitConstant("GEGLU_MULT", "0.7071067811865475" + type_suffix)}); - } else if (params.glu_type == ov::op::internal::SwiGLU::GluType::Gelu_Tanh) { + } else if (params.glu_type == ov::op::internal::GLU::GluType::Gelu_Tanh) { jit.AddConstants({MakeJitConstant("GEGLU_HALF", "0.5" + type_suffix)}); jit.AddConstants({MakeJitConstant("GEGLU_MULT", "0.044715" + type_suffix)}); jit.AddConstants({MakeJitConstant("GEGLU_SQUARE_2_OVER_PI", "0.79788458347320556640625" + type_suffix)}); diff --git a/src/plugins/intel_gpu/src/kernel_selector/kernels/swiglu/swiglu_kernel_base.h b/src/plugins/intel_gpu/src/kernel_selector/kernels/swiglu/swiglu_kernel_base.h index 73d679c8a643fb..2f5c046690f78d 100644 --- a/src/plugins/intel_gpu/src/kernel_selector/kernels/swiglu/swiglu_kernel_base.h +++ b/src/plugins/intel_gpu/src/kernel_selector/kernels/swiglu/swiglu_kernel_base.h @@ -6,7 +6,7 @@ #include "kernel_base_opencl.h" #include "kernel_selector_params.h" -#include "ov_ops/swiglu.hpp" +#include "ov_ops/glu.hpp" namespace kernel_selector { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -14,10 +14,10 @@ namespace kernel_selector { /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// struct swiglu_params : public base_params { swiglu_params() : base_params(KernelType::SWIGLU), axis(0), split_length(0), - glu_type(ov::op::internal::SwiGLU::GluType::Swish), split_to_glu_idx(0) {} + glu_type(ov::op::internal::GLU::GluType::Swish), split_to_glu_idx(0) {} int32_t axis; int32_t split_length; - ov::op::internal::SwiGLU::GluType glu_type; + ov::op::internal::GLU::GluType glu_type; int32_t split_to_glu_idx; }; diff --git a/src/plugins/intel_gpu/src/plugin/ops/swiglu.cpp b/src/plugins/intel_gpu/src/plugin/ops/swiglu.cpp index 32d2f296670a91..5df2cafd41a41f 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/swiglu.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/swiglu.cpp @@ -6,14 +6,14 @@ #include "intel_gpu/plugin/common_utils.hpp" #include "intel_gpu/primitives/swiglu.hpp" -#include "ov_ops/swiglu.hpp" +#include "ov_ops/glu.hpp" -using SwiGLU = ov::op::internal::SwiGLU; +using GLU = ov::op::internal::GLU; namespace ov { namespace intel_gpu { -static void CreateSwiGLUOp(ProgramBuilder& p, const std::shared_ptr& op) { +static void CreateGLUOp(ProgramBuilder& p, const std::shared_ptr& op) { validate_inputs_count(op, {1}); auto inputs = p.GetInputInfo(op); std::string primitive_name = layer_type_name_ID(op); @@ -41,7 +41,7 @@ static void CreateSwiGLUOp(ProgramBuilder& p, const std::shared_ptr& op) } } -REGISTER_FACTORY_IMPL(internal, SwiGLU); +REGISTER_FACTORY_IMPL(internal, GLU); } // namespace intel_gpu } // namespace ov diff --git a/src/plugins/intel_gpu/src/plugin/transformations_pipeline.cpp b/src/plugins/intel_gpu/src/plugin/transformations_pipeline.cpp index 01696615e545f8..f4ec7afb5c3d1e 100644 --- a/src/plugins/intel_gpu/src/plugin/transformations_pipeline.cpp +++ b/src/plugins/intel_gpu/src/plugin/transformations_pipeline.cpp @@ -93,7 +93,7 @@ #include "transformations/common_optimizations/move_eltwise_up_data_movement.hpp" #include "transformations/common_optimizations/mvn_fusion.hpp" #include "transformations/common_optimizations/softmax_fusion.hpp" -#include "transformations/common_optimizations/swiglu_fusion.hpp" +#include "transformations/common_optimizations/glu_fusion.hpp" #include "transformations/common_optimizations/transpose_sinking.hpp" #include "transformations/common_optimizations/weights_dequantize_to_fake_quantize.hpp" #include "transformations/common_optimizations/wrap_interpolate_into_transposes.hpp" @@ -943,7 +943,7 @@ void TransformationsPipeline::apply(std::shared_ptr func) { } manager.register_pass(); - manager.register_pass(); + manager.register_pass(); manager.register_pass(); auto kv_cache_compression_dt = config.get_property(ov::hint::kv_cache_precision); diff --git a/src/plugins/intel_gpu/tests/unit/test_cases/swiglu_gpu_test.cpp b/src/plugins/intel_gpu/tests/unit/test_cases/swiglu_gpu_test.cpp index 0d96a165108972..11bca6e27ba942 100644 --- a/src/plugins/intel_gpu/tests/unit/test_cases/swiglu_gpu_test.cpp +++ b/src/plugins/intel_gpu/tests/unit/test_cases/swiglu_gpu_test.cpp @@ -7,7 +7,7 @@ #include #include #include -#include "ov_ops/swiglu.hpp" +#include "ov_ops/glu.hpp" #include "swiglu_inst.h" using namespace cldnn; @@ -64,7 +64,7 @@ TEST(swiglu_gpu_test, swiglu_test_bfyx_dyn) { topology topology; topology.add(input_layout("input", input_layout_dynamic)); - topology.add(swiglu("swiglu", input_info("input"), -1, 3, ov::op::internal::SwiGLU::GluType::Swish, 0, tensor())); + topology.add(swiglu("swiglu", input_info("input"), -1, 3, ov::op::internal::GLU::GluType::Swish, 0, tensor())); ExecutionConfig config = get_test_default_config(engine); config.set_property(ov::intel_gpu::allow_new_shape_infer(true));