From cbf68872266dada567a6b0fc8769d6606aa3c917 Mon Sep 17 00:00:00 2001 From: yuliangbin Date: Tue, 7 Jan 2025 10:54:33 +0800 Subject: [PATCH 1/5] [fix]Add cases of profiler --- .../optimize/images/profiler_process.png | Bin 70618 -> 18089 bytes .../model_train/optimize/profiler.md | 24 +++++++++++++++++- .../optimize/images/profiler_process.png | Bin 49216 -> 33042 bytes 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/docs/mindspore/source_en/model_train/optimize/images/profiler_process.png b/docs/mindspore/source_en/model_train/optimize/images/profiler_process.png index e70db346add0f56e77106523d1e245d4479cbf98..1aa34972b9c2c284e70b7e99a3b80a0adc4e13ab 100644 GIT binary patch literal 18089 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 literal 70618 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 l=-ao{twR;#o7P> diff --git a/docs/mindspore/source_en/model_train/optimize/profiler.md b/docs/mindspore/source_en/model_train/optimize/profiler.md index 1c73e8d273..5dd1ca095b 100644 --- a/docs/mindspore/source_en/model_train/optimize/profiler.md +++ b/docs/mindspore/source_en/model_train/optimize/profiler.md @@ -339,9 +339,19 @@ You can learn about each module through the overview interface. - First, select the 'Import Data' button in the MindStudio Insight interface to import collected profiler data, and then import multi-card performance data. + ![load_data.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Fload_data.png) + + ![load_data_path.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Fload_data_path.png) + + It can be seen from the timeline interface that 8 cards of data have been imported, as shown in the figure below: + + ![time_line.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Ftime_line.png) + - Next, the overview interface can display the calculation, communication, idle time ratio of each card under the selected communication domain, and provide expert advice. - The meanings of data indicators related to each legend are as follows: + ![overview.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Foverview.png) + +The meanings of data indicators related to each legend are as follows: | legend | Meaning | |--------------|---------| @@ -365,14 +375,22 @@ Different indicator phenomena can delimit different performance problems: When the data indicator phenomenon indicates a **computation** problem, the operator data of the abnormal card can be directly viewed and compared with the normal card. In this case, you can use the performance comparison function of MindStudio Insight to set the two cards to the comparison mode and view the result on the operator interface. +![operations.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Foperations.png) + #### 2.2 Scheduling Problems When the data indicator phenomenon indicates a **scheduling** problem, it is necessary to go to the timeline interface to compare the abnormal card with the normal card to further locate the operator that has the problem. +![time_line_on_line.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Ftime_line_on_line.png) + On the timeline screen, select the connection type of HostToDevice. HostToDevice shows the downward execution relationship of CANN layer operators to AscendHardware operators and the downward execution relationship of CANN layer operators to HCCL communication operators for locating scheduling problems. +![time_line_cann.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Ftime_line_cann.png) + The connection of HostToDevice usually has two forms, inclined and vertical. The following figure shows a case of scheduling problems. If the connection of HostToDevice is inclined as shown on the left, it indicates that the scheduling task is arranged properly during this time period, and the ascending device performs calculation and communication tasks at full load. If the HostToDevice cable is vertical as shown on the right, it indicates that the ascending device quickly completes the tasks sent by the CPU and performs calculation and communication tasks under full load. This generally indicates a scheduling problem. +![time_line_cann_details.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Ftime_line_cann_details.png) + #### 2.3 Communication Problems When the data indicator symptom indicates a **communication** problem, you need to enter the communication interface for further analysis. The communication interface is used to display the link performance of the whole network and the communication performance of all nodes in the cluster. By analyzing the overlap time of cluster communication and calculation, the slow host or slow node in the cluster training can be found out. Typically, we analyze performance issues in terms of key metrics communication matrix, communication duration. @@ -381,11 +399,15 @@ When the data indicator symptom indicates a **communication** problem, you need When analyzing, you can first check the transmission size, analyze whether there is a difference in the transmission volume of each card in this collection communication, and whether there is an uneven distribution. Second, look at the transmission time, if the transmission time of a card is very short, it is most likely to be dealing with other things, resulting in a long wait for the downstream card. Finally, you can view the bandwidth situation, if the bandwidth data difference between different cards is too large or the bandwidth value is abnormal, it means that there is an abnormal card in the communication domain. + ![communication_matrix.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Fcommunication_matrix.png) + - Communication duration Communication time refers to the time taken for a communication between computing cards. There are many factors that lead to excessive communication time, such as incorrect configuration of communication protocols, excessive data transmission, and so on. Only by finding these links that take too long to communicate and properly solving the problems, can data be transmitted between computing cards more smoothly, thereby improving the overall performance of the cluster. After the user selects a specific communication domain, the user can view the time summary of each calculation card in the communication domain in the communication duration interface, as well as the timing diagram and communication duration distribution diagram of each communication operator, so as to quickly obtain the relative position relationship and detailed communication data of the communication operator. + ![communication_time.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Fcommunication_time.png) + ## Common Tool Issues and Solutions ### Common Issues with step Collection Performance Data diff --git a/docs/mindspore/source_zh_cn/model_train/optimize/images/profiler_process.png b/docs/mindspore/source_zh_cn/model_train/optimize/images/profiler_process.png index 479480c298970c29d65702ccbd1f7fd19bfd3ce6..16059fe0497c0df6adc1b4fe89916bbad76c3db4 100644 GIT binary patch literal 33042 zcmeFZhgVbE*DkEbqaH!wC|wX#q)G46RisF7(u+v%(o2ANR6rnrfOH5-kRm1Y9yo*= zdhZaC5<&|l5C|oA6W{l}_Z#E)2i!5f%NPujz4l&f%{iYn*Idt>n@Alkm0J{dDK1^Q zbnB(+3%yI1{)Ak*bh-VnYrqvVyYd^rpUd8QD$g&K4zOT>FMm2b(|mU6Qh6NZsr6Oh z`;E7%Cf=7WQMFzCUheWJu)TEYUH;1#&kO=Ax6b0g1}j-45}1^4EGFPqpu84^)ug8g zvoBID{5J8T;h!32w0dg--8UVjCxnpGK^DV!Gak=40x65o84prvqgrRY@B(=T^6 zpH!Y~Zl3fV@XeB%Oxx&#_kGsbt3$gF8m?-rVvdh9_m@aqz;uA0r#HiH|Ng{6tNi=J zTOG#BQMjP?$$DnEW|ynZR)V+*(YX8*qG=-cfuN`cbOG zm=ufrWFSJTTp5A<3%Fcxi2}Ax5vGgfhNyBVT8n}H|8jFdu(cTflFg*u=3bS9u^K15 z_vh|q?7ccpn&!o4d3MWzzS&E#9M%O<*?5#wTI$Z6rQJ87$MYJLu-%l1u_K8`Z7FAM zA0V+mPHuLiypm0(xh9U z6U35PnaXgXg&w?Rurp+2t3GaE$8ps&nw2E$BzGH}WlgLh;>)j(F%pXV_tCBSH5(6~QMPHXJpNsg!7Flq@{w;RxQVQIp z+0g^dKv;e}sE<{scP4lLJy@245+;G&zp2iz>#9|CH4ZoH%_HtW^=Fvwd`;!~Vpylv ztgqY1hK!HTUKGp7{--HSrc6C0>^WhbSL}Zr>y9eDvV@-?1cXBvh3-aMrGgxI>xJ}~ z6w0-0Qf#Q%^{KEGj)SjV6@{kW6(=Qc_qi>7xSm`7%?2(L#2DmZj4ePUwtOQ`e^wXZdUmLZdcD=4bB5TwjWC)Iy=|73KO(3rLxS?_Z9| z)>{g3I||(}11-Oa?c&3+Dj$nB)jm7Z{IDst#Ad1U2E@P0_rbN$HhQJ_Bs1yIF|L$j z(Yjz)4&ev=E|eZY-a0PDRUx}Ox5GTqAp}&tw=*TLHD{QvHP6=z*@qvfSV5CFQW|Xa zt6C@T`_|gAO)RM+8mtgR($NEjXOGPpS7aY)p7}q(6!O?FWg@#tOzTs>)(&SqQotkv zI0ftE--cL|gK)xCF|Ggn>@nx^@9eC#QfbKDKi;UiiJO^AgzODPjRr3Fw(mBnQk3N z@fgw;tU3_itc5Tjq-~175wBXHn%qn^oh{U|5WE$L$Jyb7}r+qcQ&3b5L z+}SXjEB_?UG-j-Hjsp?tEqx0&5z$k)SRyCl^`M3;A&u*3Kw)+8OA`}lu1bfopOu0g z2w?t&jUl^N)r;8TKbVnz&R^>3*)XzenZM$&FI_kqr~3`rO)#Z=DIBJ2s!QYg7lSe5 ziVW8GI|VE~z3k@8UWVqKus|j>h+iyP-m|xlf_>12{tFYG^2YMeRnkrsFylx$NRKgN zj34Tn{^6Jc3+rJ@y~ko&K)t#|+DKtuXaru#h?ylx&Od$D_ZLR?aS-dM;Sf~&f84;Q zs1DfAXO0N7&{(}-0u&Hbm9Cz8HFZ|6n=6+xUpa7BNDN^&p9Ob)L!Z^(ltcr%F+oyl0EPq zjQO3LyFQA*j<>L{6e8hn?PDR0qx7I=BXrU!XP@KqF-pO>lA*pjp&z_E?E~e1e%F38 zC#do*Q6u>DkWPw0`(FI5=2;HDPI%VC2uwl3A zMVlv>r%?`tV^~C@9)@Rfr9dEb+e9$tP-^hrjr{5Ab&ufvKWWe>eE-|)QjVywg*@WY zhJFDP^T7!X4bl!DiofugR&gJZ?0S)$5LR}%0q_zt`g1wj3Q7~E`|U<=^e^g{-Xc;Q zAFgM#d7tsQByLYdR(75EqbPhEaiG=E% z0cEIS!TCeImr=fY=rMM7;>f89Tu_4u>S6oeMp#)%u}a1TV`TQG2SX*M0@PM{t&XEM z=NpZnLF+uY9ox+t?+#WDA|fJI;NV-#5ee`F!$o94>KzW%8T6|hA(0zY{1ry}l&qp4 z#ZeweX?VoCt;9zjNE97g{=OY5fn%>vbg-LrI!O8xEVERUo1}C4h3GGB9jNOJM63)a z)T#R?V?9xBR~8c0w9VIqxuB&YLWHvWYl;KSM;(IKm^Dzv7LA5f_oN@e zoA#pW{TI0q&4dNe%J&pY5pa^Q5hXhs#Qms)R@n(8Y=@)!B?t*J8+YqJTjW4|=<*>5 zNf$~q3$nT-ulR2#Ca%lVbhWjGOvnZ;WG)kmtI*T;w+0& zTkz}i$6`y!?tSyCE6ViBiK8N3!P$2s+S(eNnI}+DL=HWVK|*35N65$;hn{|mn0H5c zIH!}$llyJ3wC5L3EG|jB%)i?o(&jBckydt-LVfzn$wByN3;eU%|0$;s9Gg>6UM@WK zITCZReR+USW<|urY`3v$ybwIAk~FbLPl0qi*pH~}uScqS{JSuHe>QHz`v*h~7cYQi zsY{mXQhUg7J!pCDcC{y{K~dtUCxsSiv|o%s^hjlOKgnpXKt~PQEiJV|faN z(q(yPH^$Dq1_Zt2CJHt^s=*sARsr=P2lbus0mtXo23h2dM@aBHof5HqqAQLqr4}7J zJ2xt5!Z@usXb89D7i`*jUvJdlMX$V+Po-*8G`+;B79XZ7Ya>_j?5w155z84!S5dso z4WUq=?W-Mj8-U$mA?BRlleO>Js0+3{EPh20PdTI#xLVo^n>nb!j2RrBd4B`~LHEeH zppB9}IEe_~TL9tGK*#;LLQxKHyY3t`)vJZQ%^Vb8pig)M9GaIDD-h)`XX32lZ-9=* zm!Cd4o0eNl*rjV(k8SIc$wk;j}Ckq zo^=xbP3VUfnT<;|8i~q*haMDNrISnMhq&riIgdX+#%hD_X2H0#D`=Hd27A9OUMGQ-d{E1)So%0C~ao*3K?2cIf61@>%IyJrMSV+1aih_aroNsBkJV zC_`UFJj+Wmx|%GA4U31H@6y>{rBx={jSR zvOt<&D~IA)S9+;{in4Za#6xZfqpRDV$H;pqULHW7@l9ALEcFdN;bNUMBxBpbtDJ9j5@M-IK<|56EO?IX@dpOr}^IA}@O zd3spJy~rxT>z6&qDgixlwoTJe_pgMOoLAgDC++(VSzJ)fcfX-{TBT-{j0_1AcALTp3AOI#p-CvMxV=Hga#y-(Ufv;GjkioNsAF~$A#N*5>mhvf-d1^vgJAA`cWbfG z9R4TZRC!s!lCR(Y8@~l=#Gx`=2oBV0d0V$NCkOsddk)Q)vC?n3|oD-K!QnYS|2q!*@)|J+pnFJj>B@IQU%1UF zgOt~bQzmS-1H-jgH$N}3*ck@L#Yg8yWFj7A;^TUhe6x3(KzR1D}h}|QE#~1QC z|M{Q@RTK!h(RKW$vwp)Ns6s7SZZLM0$L5SlYU+_ojUVdu1EWRJ(XPELhqE@#_eJe1 z=>vP6eb;{tiUulC&5zz^_9If+jo+Yt6{D@dWhJmWXS3}cn?1#~6-ecufjY?*N|z&h zqJq2n`ueS?fF-5)0fnEkj**zo2zvTj}tah0B* zVia(+O2j*aK{-NZeb*e|#Vr5b&YX^i<3er22iX2|&qq6L)OLeV zxdBV13<n~*`3&qJj(%jO^6M`F^Sb+1#E}$0 zwTjugw5F0Wj6!$hA%w88%7>czidP!ZE6VyJ3GoW~Ckj z6;-@^>0k2~7l-9{Q7Uq&E@Qi|n~CT}mw?M+G{5xaO16s_JSfyWww&5q&zB zE(uMNx0|oU_?N{v1Yx0odn5vu^~4i-6G+63zataXcKf5*=LXw#OR)ufL;$RU?Ck6p zy%x}uG0z>HpB*awILhaIk?s5$Cl^;g(65f>?>K}Vpbkh}TU%RNCRG5?L}@QwGGHg4 z9=~i>Pg*8kXASrlu)-OdG*2Eeiaa7mAohETZATQHuI|{-(ESe|K9I+=|2^IeHTX!; zq{>m(fPNlKI`dlTp(FPzL++P$Ww(nhF6v>{JsH1ltMfgEi?+V&zaQ;B*qF52m?+UQ z@mcP^O>W^Lw{&lu9`Emk2?jrS9OZt&=4{tv$ofH(ZFE1sxmn(%!uF*B{TVP<#ObPJ zi|~cUgMVw>0DZDR$jMQ~Fr$ycPmc$|668iDvN`xjCoLpiG;yLfv%-;denz$kj;x=b zi~tg2m?Z&h0UPc^AY7BYc<}jC@`K&j(fpOt#_gz{oFrbOo-|R1iz$`q{GQUz5*x|b zz4>^xfX~_8JsDU?WEE20Ap48u?s#@x-P}rVjFu>X3BDI(F)8O@aq{b5l!!f!moB}w zCZoyt>q5{5|8WHPD58Mdw8}9akH@Ee1DYTFZhoh%qOuZgb^6ADp5Ln3oXn_QG=KZu z{QBDU>nk3lLl0Pm;~DW_?*vU+xG?3{3#1zBgyLarC{4+E+9V~jTK6RXg}|D4V?~4@R{#) zm6JZ8N3$9YKy4Qb<=qI`ng)gYn8Dul@ghKr^9{aU*b$BkbbbZAATa8ywJ-+D&$Ava za*v}~gLj?R%c@vQbASpf0+)ND$%4fKq$$A`SRuN)RROzi{(Bj`+xxApHcQZ! z_;j78jRC#5m{|98r2|=p9OY18g`KDF4|>4mncoa4n?f;Qb6VBr0cS#uSL0FWloLcUkg7CV1io zy!VWNW=m4)O%Y5XT(0pzv(hO^&im-UHNFej(wyu{be?&%oYe#azCF6< zVMvZk2+{=rK|SQcbYGu$c6F@)TUks`&Z{Cr)bT!sY@2$rcEA2XwvB_r$u!`^foSXz z9C4V=1k`8<)skWIWx7y5-*)#`hpx%k%*^A9je^`t_}v;WpH|Hu<-;1deEUMtUxUbV z|AH#F>H06H22A0pFBy*99}pmdw4JVsO2mbnIw559+pjG~0Bb$R%meZ2e52*O_hR7` z{64^O1f6Wv+KuLE>YDgqviy5~{``6|xDJB+q}tAU5xgf|+$D#+Huf^mr=1t}DgbtO z018UPad;?)|D2}^u!L85t>TM};OXChhH+dtoiYw_cKZPx_4DSz@Xub?AD|r+SN(~h zr|*N;C%)^lo_E%+#7v@h7yQ3nBe#Vv!&fOk680bD-rZBcmGM1}U^Zlw+h233Abk^l z{x}((l_g@sd@WQ6dj|Q7$H?+@F}rUnJUSnJ5UTu#J>8;oz^fxPjt#>1^zHqVN?=X!euHLh-ap;cxII`&)5#|0?}K3{z!aK0Bp z0TXFh3>!Y!c&-Z2iOUsX@wm!|wt3%#yruyr*5r1@(DVPk>V1*8aJ61OY5FTI8kmIVGza}i($x{R-kxFHol80JhFrW*+S4ZKb6 z;v&KY#`$PV9{nOqZU+;3I8ILi+XE)E|B&3pMZgG*^B0Od`bBWuqip@+2S2Uy3NV>f zC2|)R!6Gou?SvZ_qhG|DUt)lKyBRkGaBZLZqRCxcB-$^ed_;3G`bC_{%?yOuH9%Yj z$dkrE?&2a;ypU3r^I~*zjvm;7^xXb$RaE+Z*l_!iFB5Y{!i_;8E*kyy&`G;sq$nRh zWTSU$l%Y z_=zp}=;^)}l_@L#*v2W&t#fI&2x@KD-5#(w>LrA(H~$A)II`Q^;#427-GDh90W|u! zUWg*E_K#!_(H>tWdHKKjHkxV`z~7OB3X&qnzL%Ouu`tcv+*eG zMTm(_N7H}_fR>_l3Rsa*uE)=GuyN^f2Ir4Q0HWMot-pZJynZ>aObm9ac)KzXS2w(a zPYU#IBo}%gA@muOCNl*g#F`0JP0b8^V7QdjaNf2NdkL3pTd*!O{KTlJ%d$#~Dr^6y zQGLMMtRM~X)AtTXE6X26_}RN=a?jcgHfuyM>+h=gek3(ag!*?7o<|hx;t=*5K(-#p zV%4C&>0{w`r|kkx(;#^QMO6=w$NcGCVicE!YhEzV(qq`Ca?2^pZ@nJe zV3qObuNi6)$Rc2|Au8vAk!nI{llcb>a&0~ImA@7T#hJE^nD>J|Eaaa2ly?FJtB$=U zEyYl)x>%I(p#vvOrkP|aEJGyJ#~t*W18K-M>*&=TTbN)8hwu{4Uk%R++PbWL@!rUBCF+(RciIzl9sZ`C&LJ(5dUiD2DN%{`Nks? z-TmUcYtv<-hZdIGDaob>77L?E@@zYgFbx`|skmU) zo%Farh9BYux6;a-;o_y|Ptv@{vymW*a!e6h$21Gtv1X*g;|c;@wg5JW=r!X7yV=_x zMJo8h1(T~N{PxlfZ9h@pHNFQo455nYiaHjqING|F@l$0^9p<&Sf}FJBf%FswQNqeY zrx%(8^`mI(z4Exc{Fi*CQ@NK2yQQ`lX`3ufy%yCHM_g=)qt(5HnxHe&`CFAc2MlRd zY0I97_ve#s_fHcu9d=kXu<_! ze3M7x7$8YU5H`_OY&9G<@uKJ6&MdD+HTq}zDBey8o-ZIBFDNN4X8h6I+o$3E=vbDC zQF|a&?6#c}FduZK-11B&-H>y9V|kA!FL^R3t0) zJ_MZRxs}c`g09y0Bj&vlwX&*GYM`92*nOckaHK-rTHYxH~ zx*_cddon3%Sx~F>!S>u#f-sr_22{rIAKj$qH+>W*cbM9AZ10IH`GQ<~QwE{zLOI?m z$#p6_%6a=drm^95$*kXmj4VHU#N>76_}vk17D57?Mq2&iUISu=WFWE|o-?fj2?N7+`Y34OJ@`S)Z+XA>VYx7+Y>fS?O}tX0J< ztMn7E|cMgfo}QDm)L)Kipc7 z$+$CU?Pc|03_ZHaW?#|LvSSss>SApRlf3DVTPRs53aY%y?O_eTx8GmB&a5AH5Kv%P zpf%&ExZ+r3S!f}+wTfP3%_Is_@IhRkB?v;DUUzKo4+J>TG)<(xs=yc=mX(+9S2)=H z+AYNxuTHsIGW2mdd+~#RVY|y~zZ~o48xAu3s?~<3Yz2kh&QMs1;r}X0oy#!fv_JA( zq%`>haW^Dv!7w0 zq;uQ~L(5SZQ@WLBnC@kzYy!@e!nmbsBe0m9-4aG zuwR=v`5ja_v+%^hlQTwa_jpz7H&iE4G^%4anj@1wf}mdcHeFr1qb5Qe_e zXY_^MO=z9^$avl}@hHm~$~tGb){~ZndSpa(@K=!oZBg6{=Cnn%34lwkd2l-Z;=B8n z0JhI}fxVGSX`TwJ&s=+W&={8D@!gWEOJhV!r{ z0q?xOxj7C)+6^r$CF(vb2Y_`c>b3n=y{%~nw`$P>_wL;jk&|=V#!4l5& zL?hs~6e-VJxK4UQ_daur-zpx*Ic06ua+FvwHG{JFYC-wqC5c;ud6@)Nh8Cdc$&8_( z983CD&RM7l*Z9|_2QdE_`E8^J1Vfodk1+A%?!#C)z#G(tZpD--oIb&tjCPe?))C#hrR$t z*MKy-#<$a7%uCm3br_XEnc^r`{U_f!LqlO>D;lX)dJi>bLPJ%`l#qRh-Hb4$XOo4}DiM+1giME-X6fqP3rRm_IB*Y+DXW=*E9-9^JI6s!VJY z+KW*U?F|-$xZ+QrF{m7`Qh%pc-iCS_jpVm}@$4rdGLD}q_QX+kw9CY-O%_WS#LxC-HJB9)3XQeMqbk*`Acd_l-d&-^Xoy*@9 z_iLB7F0^nWL_+Q}j{AnTULNeN+;C-zpX_Rv3i@!OgR=S97fMKQkkTEIC2Abqjh~7STs#^=s-G8kJOy~CIC^@qq_}I6?2FqbMe^tr$b>VgYOlnKTy0USC)k7e! zplXHZE$#VvdHSon3|6WW6#P{ssDJA`QqFBfDx@>PTM{ozW44|6w^r|q9=JejdA;)o z#M$w4`#;?)0Km~!{LTILS$y|%9*8TzzEWYgx3%O15Nk+PH(&EH41+MGpd4a+4EI@H z)O~6fzEYNzheS9!Z%;d%Z`m8ik;)Ns6S9SQ&qNW}rOzk$Gb)c81h2Bjs`OoBbc?%N z2Ftn;Z{~2+zd%i(?)+iX%v*fc3D+)fe~0=aDFRfJhKTR80l~T?PZlb34C}N%!b|W# z;GwlW#>?J(wP+qBWJippcyJ({fH7;7eI072|8ka5GTUXCxm2n`hk`u=IO&T|2?YZO z`aY|=C|<}p_f|~-rC)7nQo~R5$+E2w6_FD58tS|n-MY2VMibIY?+?9uFSdlb|E>bB z3N;l<^+8Kh#%@6{h;gO23cntMG>-^bfgJPo`5XJ_S#9`A1;yPhl_w=STRb8PBnmf< zJkD1= zmLs{Ks{FBPf)Il-|M`<*sWA>W3-}i#cX@0Q$XsYt@0Ul;vdMLRzUDw9sMAyv^hU^K z=En1KGu(j=ZwBjNaomfIN5f021JAi3uCAUJ9HSKYys6&5CV>LBEIU@ZRETq{Ytw(K zEDY*ySJ$j0IGU`QH1CdYjx*i+LpIRzP_pP?mNN3!u)uXT!`VRRCg}#FmS&0RGQEDI z{y6V#RyF$|-dUg|kcQ66;k1oX&6T<|(@v-KVD$d3-EzWPO!O4%iy-ZP_xcnn6afe6 zT_u!G6_@6^o#HO){e+h92)R0W-e44fj4at{q0HtopDOLyynI_5YBdkB0in02v z()jf{R|7ut&!MWrUbDuz*-EboSH`tl+jA|=5FfGY%=^`ZcB+jVB0$~Ee)gP90NR9i zF3>*n*^@__y+(}FYrhIAD@8XlDLQ~MjT`2*s{XZ1aO!Z;o!4-N#tiq(zA23Q^7~cLG*MOhkEOev4dDM~ofy4eqB7QUfD%r+BDZpgg8d%i zO-VHD?1a!;1aEde7cnrm#v4{`oQ8kxu8QCzbiWmHcc8MSqT&(WA132(_aQ386&)31 zKNCr1Ar|3s4YY&>Z?GxV6k-N_V|g1Z6cTL_tLBZ988P8iZG1E+`CJh@7>CE+Y1Z+9 z#2ovO5o21?ucIcx=JzZdCX8uvp$BJ65u5>J3{o9+~4(-%eDX2B|(7X00f%oF& ztL4m-V+6J7O|5fb80v;6#1!x`!v!-9W=hw!rqvE^dyMfC;*0cRP`)w{Xpg)#+P7Hd zuCbV5?q7+?;px4W?a@H#u`lO7aXJ)8n&w%(o)~5TSYe-lC4qtb+Rvxm6!YBL%OLj0?W(h{({CYJT#uw{ zrlIJy3`LPOi>dG%+NzB7>NfdpF&Y_1f=p>?W=(6@gbA7Pt=)O?59+KAhMP-+;&tq& z9l}lXeV-0mqGLk^M@8zqlZdCudD|kg69|s)e0t@W*q82j%k>1!@}$L|EXupLrt$=; ze{#R+Ogp-{XZH;#4Gyw90C;l4vc)2xV&m4f4l}Jks}OVXq7UunD}zR*L)K)iuvg+^#SJhgyQ_jVyokRA7-m*Valo%=B@XFM#!)nLdcYrjci2Z zOk$?}VJ>8AJHywpr-~Sg4}QRx@P5)PrQ-eT*vY|znP@3+{J?V{2Hg~_xJW8eGK?Xg z@oaq-YjiMiwG&D`4-SiOT%?6GE1F?!OIG~41O=cShXHY!aZnhds|vKu1P%vLKX^4v}ri>%Imm^b9o3#jRa z4KsVlV0hK#_{0vcs2s8$F2;QT>a=6u%1)9joHzH-wXObnTrN_HbePW)Xdi}!)r^Vv zo|CfRBl*$JrJXZ9#*XG%mSGHTlmrJuf>+ZVaz@#{Gzxj)vNecAyF=Mt*_6ODC(mY5 zJAmediq3Q6z*lnMx3s+iOqq-cTR~DZS(9$+JGBQgV|8Xj$3A@^o_$v3Ma*l078Q-9 zV>f~y!qd2(Y>!Spg>;Qq%zRPmFuymuZTofdr9QPvH3Rsie7?uIZukYL=lCE3q!$te z@hWT|ShA%cw|>yQ5=GkG%P>*3Hh8_cQnz(2bKx&v&R^;d{eM;~HH<%(3XVx@w^BUp z)8ujs8xu{0SXrRvpuPu}Mcal!Hx6c zDf2yG{y^=>Y|e3%(9mUUel}Ih{zDj;gGiig5l{&D z_2zciutDA85BPoh>{#W&-mj)Sw=1BNBGDcjUgGBSobihwLV9fF$3(@@hKNgHgg3 z*v~y{@4~dt3l%o>a{O0FaqNP0R*V+n`wd5RG#cPE0C$hPBr``^a4ud|FH3G-yNW>c zZ(fD@pZRTPe9~vJOQAeATt8*bmvHKpMQ=F~UhT&87Q%VEmX^V?;6?z;8W={TKM#%^11k*qUhi%%s+NwO| z?9L?ptqm6CAbl=9X-%Vu`hG&KwEY>o3FFlz-zxVz&FDAD;2IzbrX0VE!=$kL#j%Gh z^j*15)%_2cF=I9?-XpXm(LXKz`1aTBnw_o)p~#~5N<4n^l7naZc@`O)gp5$oOvskY zTMRRFk`67=SA8q>PNRG&so8I(w7Bg!+<(Ikc6VWhoqcy-E)B=N)m5;mfyyZF(!3zo z`}>h=`EiBuk7a55vMz0|oXK|Cucoc#(3brj&1zGnBGDmuD_iwUg5Xu#Joz^w6f;R* z+57rU+`9qM$Qx7JA=cTVZs9hijQQD;1T_#JjnVRu+@cgc5Zb=NDY`k%IS5)Yx)da) zh-uiDIB>ctELAZDT+MNyC?ffJA8wd^bvi#?L{h>O&IIayX}{$*e#25@r20ufo9+8h zSYEwV>5Di|3+W6mh)1uV9o1xd9cPw3yE-l&<{vpun%}FF(l*%&nidVPJlsf{lNM(! z!j=qVX7EAMYrHb`Ia1x1+JbrSabhX4RYzK}YtsdjS4YY#ubv@kn!`sDYj!h|9oSAh zj(gU*5OLLiSNa_rO6j;-)AC0rtA(@?-^TU-tm&)!!UGA<)zpM79yuIp^vG-_B}bN5 zdR6sSW&}Z#8kn}Mm*=21SMK9_z?+A`%y$Z3p2+OiPx9ZO_B_xOJv@yf{-Paj!Uw<2 zApMy;IqqdNZ#A!tvzyM?`24T=FeV!G?-woSVCRj&;(~|><_wHZB+1!)GkB?S5RnxK zyz*?Y0m_gk)DeW~-~28~pLj!fiiboD*M%;~-E^?2d$78xL=2d*+&j1P-(E=#JteFl}UQBWL%r@C|xlx|*7GwTy-FT&#Ebn}tjRpI%!+&lX-;T===#$YeCD zG@B6@PQQyAOZQlaO$B3Rw1z+$`RbbK0he5FqJ-g;0U2Dfmwon09T zd26-#_mh3g#}yIrAP`ZErTLnFTGA0jr4c#$uwZtbjrH^H!`_D(Kh0YYuiwPbQo<@! z*i2v^laXxS-!#WL8ZT6##;3gVE^mMn5j{;LDxFJ4x!3>b75#wLy6H=2%V*3LDXZx9?W0ph748_ZMl)g!Jf$jVPW$hbQr%ax^R^|kT$d@`TR211;e zM7h4jU`FmZ^lg!rN>D6Ze(ARzNNNrBt?{jLOy0&;hdr6Nhz)An>X z+VXNVhZ{>K%4Wv4WGvs~QBaqIsDMoGT6+(ebJa7!XdT7u-5v0&dS)+JG2-rah`hK5 z#Q>-rpezf(U8^r!Edk!r=1Kh=dkLYC@MG1ikZWjw2_%pU08fHLlkk$gb??o6*wdLN z;tzo^e6Z=f3h5_$<`M50{&wk=2B)oRu){(x4XCL zm5Zyc@E{w4E3}RiF*_p?_BmE6#c?Opl=`EJz!c1&kFY31?eSKAxY%y2prC)U&nExl ze*v?LbnYSL6gzvUNxQHNfDz@}(k>M83ih){9Cb4Nh}n41hT)X>p^oP5PHihnaMS@R zz4%Ssne&?j5dcwenpnhWJC*(@Db`Oemd#yM9>{#qU^M^I@@aapj)xaVJAXIK<}Fl& zXA+IVw;&SU2gw>yQn%s!kmmg?Twk=9q~!H%b)LeaBHmJ=pe3-K?Z26SBZjctU4P7L zmY#5gr-d1u?4wT7rm$O8GmcFl6?^|lZ-?)2F!vK}J)iTkNM0`yzdgiTBjf5jLiXVq zgtY1$5#jIhl-1AH%wK70w)p+CDnCM2Yo{VJzjcnIV3ihlwYV2l=$DQ-e zeTQ4Kh-~i%!zmL2LDaC<@`bCT*8vi=Q!u3YM~Slu4Xtt{W{4N*e3efcj;fS-j~hK6 zW`Ag=6JM@7m>L5K?2L&Y!o<^eCQB;+4DUzm zF(`+H2%aB2BZ)|{Fz6-Q_`#24_pf1mS4>j=f(}Z~&(8MQa4G<9d2*Rv86_vwM#unX zaV7>>FEg|K5MCH8{j`ZbRoe~IZSGy4^}ae@h#N2=?Zm;Pr}vAItNUSmqMMPWOB-P{ zTz&MrT#bkZO*l*l_Z`3g05kCFn+(QP z4v|k)a#&x^=ClullqB<%vKSK4nf}cJ&A;jML0b?Gw-@7$n{3YRpG^^O7zJZwDOEAT zzqojO-oP!BQ{QPHs5%S{t)`a2BN`j8bMYCH1WJX{2b!193(Kw!G({|XN07A4teIqL zEc*@oP<|F~N*3}Z-Xqgq&)6}w4dxF`X0XcX8y9dPYPhDGfLg=vwY5g)06z>r0#p>x zxp=gaCMwJ!&sFu_gBsv2`nsEuoMAgT!>)1{)>Sk6CZc6jV(6*sMnI zsP#HXJT6f$*RtvJ6G`hYU%WQ@-uZMTccCzqMo(O@61~z6p?SSba$uCF0IWC_x72*Z zkv@-?D-O>WQ0PA~S~BqnM!XJwYPtc0oR_^Tg3(R9T}S$=^m{MiZt@3(+NgMTmG{SO zVF{%Pt7%l3xDM|Qb7uYf4El^=3?90@jZyJDg5Lr@#%;0?AU`Rbd#q3^_)q~OGkP&ApQVE9 zn#KK~UtfwVEPRVT0}hY;-U7WWNlD>;~?xM`Hh^5qLJNY9tfwvO%$sIE%vr0nTwCc)vTF3y%tx#_X*M- zE(03<6Fw_2G|Kstg{DUCMxDtM`d5tD#G8Vq4_%;;Ecn9>xkuTvl1swEEoJN8;`nt! zi3985NK3CD>gC`~p;HKDFhZ*0Z%TGE+K^Sz?D(awxLy@DJNu~p93ddS3<3G-+AdTI zywxg5YCGBxHd5Vdjy(#mk*n>Nvv9ubb}m!?c63y0eulpSGp#H213Vr{EeYp;;wpG3 zDJ^R9Rf(6U-^?~KlugqtSLv)V)Wx&wbHqLqI()YP&x%ceA-3U$&9v1K!+!w(C*pf$ zcEGP2Y3V(E9#M$m=7oDQPXvvHEIT^0+FQ8rVHBG}iDjFvI=mjx{hQOd?mHR0_GxU4 zbJkMHqPy+dv4~<5Dmx2hBc+m4s%;Clg)Vyd0^MtLxKdANcx<56?y)`*^eQ`Bz7URh zX!8a8RjjvR#DVX;rE-_=%9hV&n!^kDs}`-0?C0?J_JV(W_L?fzsyfA+V}-r{%9{Tg z%kS_ZP(9Z3L6?K6D!rF=E{2-;s1>OAgC1|_2^Qhfs5Xz-ShnAU%k;_Itw@>XM_r^B?>%eZVdalnJ1jN%rCP*1DcJYVMVM>QJIub?Ok|KDf-MWcq0pV3oanp zBuoJJYV+#X;EfjRKAYnKCl`3}z0-n>0Id_Lw5_RSB{!cDwEj8ZLyhR@m3dH=Z=(`6 zLL;pgy*=U;&+d)<5cDWk@kt_{;BWNH@}hQIT4W#1va$VT)V&GeV}u$9$kcw<{1;2( zSGW6mAnogUmMLRQ5#7&aipDhTie)!fw#;d*hmuI}_Rh!URtE<(VXXjCK(`#}?J#c@ zZGc?TXU;wN1Vqt-7Uz7qNL4GubHS+;0gJ~9N3GNsuOW+plXM4=-Pw50k>7hh#$8JG zQAAB?@8%y(#V=>ZujTXWXBvN-f9OJAG)qGXZ_OeaWpPwsFMHqkWrJ<` zQ)&sWR##L3Ev*>rNb*xPolx@?ab~a7O|fphX1iKh#>@KM{QE7DsY~3pE9hL0F5>Gj8RJ-UfSq&xAT8ZD?SB8LCj-Sha{TmzSe`}JP_WkUz7j*e zYOoPBuyCG|#~1dH72q^m)>lmxM2yabL6*cx%DzZa2=8&>lD4&pV_1Ba!X~-}Edx#s zw9bXUE}D>OY`azTHdCZ63pXcMwpJ z8tElKzyP5H0t6B|XA=HJbUuvSWQz8gYiCwplnUjNwNp*3}_u$g9gQInz1C?A39ecC2E!=LcgB3>i zFKovMfRleh4?nTRq2QWzt=8h;lk8-uYIx_)ee90iw3S8^CdX<1<0SvPX!QpFpq=&0 z#a-_vVk+vw1rXzSrO%S>YY!co{f((t)|W~SFSML(GLY)^ zH2V$9ZZ8!|d?OeVXSSy4+i~=V$>mq%#+XuUFczklxA2TotE=U?XgVz~sW-v*Sw}mQ zhK7f=9UQXvz{&r0a*qs-mY2YC<#D6;;%)-2BG(+9B_mekfSj7N^$bzQ^T91DgSEXK z--KOK-^30tM@GrXj6`BRZWhdY_0=IQM275(vMrF)eurYFsn*(MFQ%WR@P@S1OF5gY zL^YI&2#iJ-LDlLpoej7(TOQDxRqrEz|5Z>qDM{`z9_NA_iX_u?2XnmeQkE$SJwzW! z`dZsx++MY?nB(-S&QijhO!{EzPlqvwj%mhciRYayoTp(bUmqLic^Qz@B~^4P7P%ug za5DLzm+vN`ThZ711Usgqp}Ko=m7dD5DsFp15_Gu|eQ@UGiCS6Qo(O_@RU|B(}x(1{lzEMlX5WAqfee=Wp=1uk+$aTC>q6=Fr$U&Vg2M8sL;_&mz zzAwvme6oiH@Xn5rq><>l7es@&wo@03vYVp<)J)FPr6?53>UiF(u>31q$NK>N@~r(+ z_};}I0C-_#CQICoi_foSPp-G#N@-zo45{P;6SJ>}0tsNmO9mYxUPOziE0W&t?_xVj~BWO5A(J+&1h6 zZ2eUyBUx_4Dofp$>&-sx68eioW%rb@laKgI$Mly56~u|0E7`vM*k z;vdN<)`t|t`+tqXb-&db^i5Nisz0AhP>+~;sve>;Pgu_nl5^->9tpoadL3!_+miZ; zi!?I+GS2IEJj@VT45Ac2R<1pXkUHGGmMc-h;k>iGAvrbT=$8{z)??oggrm)vqYd(5 zCm{&at?>>ufn#J5c?qqP}vx)*1QVyuzJ)J_86rfmt@@v z+pfd+X2!_<#uVa!H)7Ms604PSAUH0<=(ZZF>g_O0{(44O z-S$EBq>8?x$hlCZ^M0PE>K**f5&dIG^$7$NJg)9A@B%wXU;g#6jI#x*Tv_kojc~Dl z;{Bbzd_Cua`*i#Gz>Cq9KF0%o1)o1tWPXFYtCWk3$GyMNBkvTf?+16~v$kKHkDvIs(GFH6t6Rso79%^MJ5=_cc(~fGBC7zc0jMBcusO2u3hFL(k)%t42b-m zuW3W{!9daoGEA7V=<;=s!XG7$p&MhvDNnhryQTw3=S0o594^^E!u^JO>94h{6b~Jf z!^>}7|52Y{>CK`ZczVAez7h7AOu8S0hAIwwI}gdxKJ2kCx)`TA)JHERI8W3-$1)se-e6_$h z)0cxke~12v8CtyIhk9U-<*?>&<~~Iv6xd+nSGucpoCkL4>3ivADx`>=mraUnd(M^$ zD#pX5?=>PHnQ0}(spx@RqKsG%m!bR!!))Dno?xKxmqf+05Oy9Z9&GX?dsZ`Y(?G9@ z_eHuKWVND!&UI#f5+nvd-wyC|n;?;dzt}JvE_LXn^dWw)KUrjb8WI~UHdr7Hwn6j< z=;o~<^L`bqU@t>yv0bisle`8`CmjlwP@f_tkn0i~AwQXw? zaAW9JJ$%&A6yy3LW=HF44WhXA+tMH5NS71xZpU@Ux%Tf=5BNVz&VMZUMy}eL4>slA zBO2@CUi8=Aul_8v(RDILcOsA`17!tOd1LmKK;Pz8kM_g}m7X)|*VC@_NL~5R*ehOg zdo7XmFz~tv@3g~B(Tm{(T5-*Mq{>$22wBAK1FC%#ef1tT0*^!9ls&iHkguJ38ZG);8P>Lww0Xg8<@1-m+Utz?EH37#^Y#3>zO4=u5e6{R>_(V6~9U-{ncJZ zWXz4z#-ND?^RGI$%|@q^Jg&$v#3kt_(Fn)9z-1PHqxUL>i~19?pG-y()Ah7U8a!%w zxS|=}URCM8A_dZ0LE7D6jLN}U_?-235jTc(5vb#mGAu6CQl&GgNYX`lN^^+p&Y-EY zJNba$YUOm0UoW}ebo}bBUM4p?m+fn;b{u{|d9U|rs5kxRHj_@*K))}wN*}j*a;(J3 zfg#9vC#{RKbk!0&fNNq;NmFNmY>VX~W47LoGPN|%Y9Tl!OjhB_b_7}Lq_qbH>1Vy$ zQ-=6WZBVmz29>V$Wg|?50?#(`EUUH0o`mqC+vsE2Qk1qfB+4gP_I`5X3sRIU9D0}` z>5B>y=y)fS>WbnbIk%$Rdy%O4(IvUD;wupwdFw zPK0RcoWOD2+;*%AO;uVm-f|%@IxSQ&qRaJW`%Fv!Oz>fps68hY!f1O|R7{E!QiC91OeNtzHOzyCyFoCe8UNgTFjI#B^;Z)0_Zd%0N5GkV=6mXv%d zeR5`<5L_j9ja^;o#6+L1&yGxn%FhbE7bCxd-yaQgf`8B@0v?1ESS(Ex#G39;mw7(E zwR5sit{PzV$qlM;JKc&BStz-S#arW!j4<-O_lwQ5vZd!;FR zxEh~(YCtkas!g)EsyWAa@o{IHC%gk>AjsL&!&Y=)=1?{Q{x*v>;eM~l10$rKy;9Jv zn)LeJb$l@MH%soY9$wbuehCGs?FNd1p@x>X^tiDB{%*uWz&&z+idvgdQmOuOGR$=942 zFk$VIKa5sRtw@#uD<9VhA-0bw(HMlotC*_F%i*>P~D4MBArOLo)L*8v8P)Xo2>8cg0+S0i> zb#BZ)_&r?ggCmso3;W<&-L1Mi=TJ1=Z`nx3z+u>FNG0{>&^JH#*YuoMY7W@OR9>dSF{xl zam<#Op`_KabPy=?8k2&gUH^nLN2jmB_Ct_|$zD>}WA2ww@{F0?u;_*vcfKXx^8Q1ZLhz)s>#b2Q;pL$>(BqoF@)#=6fUIVlCjUakW5ow2j7jOA$X39&4`$oIk zVQyVsBc|=uzxi3p`})k(9oLG(YkL#k9@28ox_X-aoOPa+7=bT5@_YCv9C;rX&?p?F zVU~Iw>ld=0`QyDF|4wAp%6>Pknz5w7Z3bOO^V+-Y#7hP&_^@o5&sz#h?yG+E+@`f`awQ?QqjT0g$vPjCGj(X@xo6 zjD3qzK(su~vcqpY=aly`F7yv^0H?GMpf($O%H@n4R`g@Ch#60Fl2&5-H#;deiyp)w z)6OD1%-lA7M@)S^`cuH{{_KdHZ`!;yJSukFr1!*-S^4b+ONgDo!;|Bq*VL6vl-s}U z#YsfjsjWwDS4UPTnh5P#h)hdIleb?GD!z33hjSWn5Xj4PMQKG*JTI5m_l9LiTkby}7)7DcB^q49NCR+H9{#w(PMg;H5#Q z)pxYYCk#S1ghzh{-1tyifR$gE^uebp>z4io{`uZMh+!^8*G-Vv}U%n+9%pa*z{cyqW%0@AhWnXSZ5LAr#;)S-Jo zJb-Dmmb&LyFDdO<#53%pm-aE8F-3dgB zjt!a5Pe=o-zkUY}XuTa$;GrMiy>1q4A#a~ESh<`5Fm^aqkmTL?LEnEq zMZm7*9qIDn`ZCgwQ2FuYN6L*E;?Y1&yc($d%19NIf(4}j#Ral%n;*9dwC#gO+cMA zGb4H^yc6pEYK~O*y($M-75U8Grk6C-$}LhI2=3ccG;xOP%Ok}tRBb&ywGvP;*pFO&IL>;i%DcRMI zx%O5o9l#W}0g2i5HPH2U9U+foe@ysdmho;I9U?_>Jm3y6ItmQq>)A4=e*SFfo$un$ zsN9LJBf5g@2-qk{?wfB@IVh%55M-%s>UuF_N8W4%VVk2pf;6n}5m5@6y}k{^OO&=h z@}b7MD@{9AOfHiefdtCkj$rDKV(JfemUNxG5BJHP6cH|^g5!SF0KmQ~5bAh+C!U%Z zu?McekWpYGs-F_(s^TLq#i@Fe-q^;y*&OMbmK{CbRdF?>GhPU zm^&(X06PTZQ6c)y=PA{~yn9sa-iG69l>c3uiLwQl}>+55ThR9o5T2fnnl6t@6L<-3S z^v2bx+mtSInF_12zDqQJN(;|W3tNVJtyeLqILIR_-=x_4Q*GPdD zDwY#W052)gyC6&*8z;p4CGix-7nFoIrL^-ube~h-^j_Edt^Jz%cmrU9B&cDz9I41g zYTQRR#)HxFh==;SJ?91gzl^S=GC4tuo(CU+o=i8|znBzRU5bVPZc?lqo6NCebf+jS zI#$Qe&!16UEhiinBW^7w-msNMsm`1fr8>tlb^vJC4%d^c@03Brm!c@}jYkbf@HeZS znPD)YkXI%s9Xu|a8oK)*nFMryVD`E(cQYv@7-r6jlb|$iYH7@PFcvfOEvhAj!<5O@ zs1udHf$2Ax(ie}ZRR?T-MgYbKn2IPIkq_J|?v(m(AJt!NmqOoa`)~pjJkLmx5gz7#>#7?8WR)VA{o>tERs!e`~w)8yKJ`s3GfE1XokPgGrpc(14BRy@Y8@kS6)G(`{%a$ zMabdKW+&7eotL3Sp`g&FGXe=(kPnq&b~oG_?Cf(Cy4I_H#^2qNA}d~-2-wX;S9J3BUK?(2)KUjrCjXWPyR0`USKg)LSGmcbt zPq*{iD;!A}WXLbfx!Pp3c8_CA*q`~2!FHQFzKuL(L*3AeoBan&XjD%z;qX}*U-$%( zr(~OfNuUe$4RV^T%gjmiLsC)Q*swiIdOTFr8E zF+71MKJYSO8*t)c*izHN&kOMX&2|KpL$w`Yi!@dWpOBwni&1ED@N+WKZNTs9?)?{I zQI@h)4G2xw3)<;lpNZ1z;P9xkS&2uArQ$Id1hIR4DbhEa!F6#7ogpsF zp>tl}XaFO?jn44M+>HAiVK^-re*HFJF`og>|Ge) z5g8zQ1e9P@_O?vfH1QGFAJe6k)7U;d%dw>L%T+qdAvC|2BQK@-hsnkt9QXj<8!im# z&z$s8jR@T6h?~twOOAvO=Wz8xR^kiS@v7p#nA&3lG!jHzB~RGz!5?6EPLONQNCxQW za=FI@?E8ksbi7VhJy<6K+Rgl(&(+ot-QCtF$y`pgwU9;bn^z_#r$MHwg}oWD-w^Ff zM(Esb_WEKEYjlXyGP${IM+;yipH#O%-Sc^9W{a`Goo>k$f|dS zW66>BHH%piPCZxywXb=VsNHbqd1wzEGa>KRU?&XDzJu#u3Jay&? zsbrNILLnEA&94lF^l$&;WD*YE8V@do^kQoc4gneTzL;f=?Mi&X28?x7X>7cH(OZnm zw5WBEuf*Ow{0vQqo^I#&gWpS>;-9&dmpn$_GWKFay%N$e`=Ez%ME&LG#ipz~#-$^~ z_pbYG#nhT4Kq$z;E(^Y2tVrHu5SPXcY@~LU*2pYuUXqswfZ2jUf?IAtU@)g}Os#~l zcTvNgf0*qOgjwMa?v49C+oZ}yQB_sdxyjVBWGuprQ(IMm3Ue z`pT3F{BW-ixm(~GpjhhgrpI%g*a`4lCVXzgG?&5bw7JO<;QWoBcvKnD!pHK@GDASm~T-< zZG~L?w8rC9FkGad$7ZXYsRq0rU!2FGw0d;eJSI+g5r6UbWk8r%QBES`}(75X=25(0%KjN&z5Xak4h}q zqkHDJyHcTNbykRmtlbLK*VKm}!Ga#CX>M-rdHP@mlH8M~7Ft({d#7AY>eo{d&1&%le>Ey(L`5PeU8X~fU9p*pz?FAV0{v=c96+GVsPacd#l zt}UPI@1IVEnxZsqqzTkD-J{$6v8Z7<%?%lulN=_qZ&%E}hTOOz z+ujhkd%>a(`SefIjko4NjZvcejti~8f9?JrwmgVkgBfB^xUygKi!8o(7cVmk7u&W@ z3=0|yjfB$kVxDBFgcD$^iUh~TvXdd}gBtZ>UuYY4Oyi1IWO5m3?E@M2E&Je2O0o|< zf8;;w8RBBAK8I#%?_xsWxQPy0lRzzK_79c$Q5`^wLO161DGMjy$AUa9`%bIt;>wOa z&|?mIri*L2^7>^3M@(>B-ma3;`Oqv_kaJq*6%Z6s1YD89`g8Eh!5JgXf_p2E!_RYA z@7ujC5(F&zsPvL-9%5DdE=qdZCGQ&-#O~UANNv~Ts~ZM~tIywGG`%o-uWsC~hda}t zQFSK`CYOua(uLLP?j@<)r<^<6nOO0HgaFCUM_V+{)p-Q!d!m2Qrr#@(c@a8!%CMLt zoV2JOnqa$I@eON*jETTaMBT-86N^=igpH}Ho$4sSLAu9i7oznrhB>P1rqbhgIcF7o z?7|XzH2df}M)UK&upEw+7y|8tNLI6fFh!Gd;F{<<0=H^KVlFCp7rYr!)e|VxBvi!3L19a|#=sv3|vdZ<}*|Lhse9R7yzV z3WQW`DBDrje)y^2IJdtED4*X83Jk30^jm)vPse-cw~RcAzo{fzAHYzy8(`ZdVN{9C0$2AL4g!Wx zWMH|0cz89+igmk#1%vyz&z9AC4_R}IL~jy47?Tb#?m02C1}qfXSNrE|vP&BO)Em9f&b zhb+Mnnx45{@E6Nd*Gpxklbh$At7x?BRpXj-9=5N^vzfn>k(KQP9u6WzlT@JNIanK0 zIqTQD@a_VnA6k6)T&__MJZNO5lyWz|1#`iEEtr{3B5v*UY=@?Em;$%0{OovkrzJ8& zIF~j-^b@B&is3=y-(Dzk)>JQ)e{lQH)f+%A_6KWg%f)2h$?HMW!oD`r>79$aTqb%&o-jYR*L}J8dxL=2|CI|9S|l121uYobJ7s3gx9sU-e4Nkn-BB zya!eMZ{{b+;{VP3gkl0lrLI#AY=+D|;^8~p(W-r}eRSzFlbj8HBn#oE>53jUw(g~< zS^s-DIRR8BDd1`Cq=ZQeHNm!%R7}ed9I?xWPIJVzhMB^d`MTpl0a}7m*wgR2M_gEY zXKf3%T^EOdruxXQLg`3MsY0Z>mN_)pWa6hWGPvoxR2>GZynb2U58JYk1d^z z{BOCSoy&OytihZN$A9&xt8~19D=}av#RzyAsl>x)d|GJJ-#W#A33+9)5}~u$5D(kF zN+5{5ryYGmbiF(`A}GFhUjhTElndALoDbdcU5yheT3h!YWwJP-TVDj5GnlGT{A?)> z*VVDZsDK$}0GIVRG_AE2LLrQI{Tz3iyShBby8_PsZBdek ztLz_}xwSR6oZ{L3jgA+dSc6?%qjw^(hPe~#F{{)(z|M#2hN}m$1duIkj3^rAz`zom zwtIe;#E;9~n8)+{!($evatlMKW-EP~o zys*i0`(`cI^f|td;?7m`0Jx{o7aIj-n}cLo@IuglRNK)q+?Tw-ITz^{1~SPpRJ1klK884lTj}uF0e%P>;BC@}|jJt1Zlc5K>bWg-QgZ$Z{s=J!E`$4Rf zp`_Pl9p^jxY`M$odfP?Mfsa*sT9hU0S;8PZ%r&B?$&Fif)sVG$&=xfXy1}M&>c$zjB)A!!(^56~=SW1F14e=}O0A zek9EO4wZh^jEjv5$&IT+$kgb?l|rvqWa|akd{S)sBAycE6q_zlGtMiz6A1Fhte$$`L{-AsilLQWl9P|qhIT`3%C zp8r+aZDZ<97L$`p5jxfqbtjSVFgwUdET92XTTu&zIl$H8AaQ_8^8~+!tRE zS++aEC~{tP&-T4XW`QzoRn|r}GrBLQiMv_anD$0PU2pD2eB&f~Wi`4>!txGb8LHg4 z;uv192AU z-uXa)x;^^W@pr)MWv{vXlQpiT#VZnS`UkxC8|mCBNl!i)(u@2hvV=P_OPu4G!%J6r z<1H@8#qgXkv?JFhhm1 zC`$!WNUkd5Gc&qMm+(CUGTk@$)aY_X(7PT{r|^p*qn9WXC_FK1t`3|*T50+ zD5GRQn0e{{^UHhNWXM7_C_B1-6%tn{xagXrgR1AWe&m914HjU&J)IN*|N=Qfwh=39b5;BDJC?Xw_(jkpfL-$A-ARR+D0s;z1hk{BCAt~M6 z-SF*EI4``v_qx9G2c8S&dG^|CuejH})}FTta^iS6lsIT;Xn2wmPZZJ6Fd=AYm%^~F zfZuG!`*DJQF2NMVAEV{9-kd{2qeYW^@<`c9XK@HKPNjSQWX*s127Nje#T+HmJ1=&=_EgwB#U@X7!CV$@=_G710pgM<=TmuitdrLtT^|Mv&5AkJ6*FL4Q> zv~(C)5aMy3-xB}leh6uilNA5QKEcc2KH!fsZw8*+xqj{gvNL-;LK0X$Cg#t%y?ezf!$*O*G>>Z!Yw2(e#Z&2OD0_UePz^ zNrFixq9+X+T_GQJ`=3YwXfdJ} zB!Zh_5gI=geZbxJC>jy7Bc$U>Ek#S3@1CUHcZaa4P&67LwDTtC_67UB1q|?(pEV{H zq%K0bYC<(vgF(P?IXpu)_SdHkAl?HD3??}VxIzLo&}8LLF3R(^7%B-wL@XQkZ2NLR zEUJk2%p+LTcv|wGe@W4DUHWRPApAOXjQ71Z#p%Qwx4PW25cEpnZf*5bv zpwWm~M~;Jj`Dldu_FIQ3v(Ajh-L(m$);PX|j1tq|wHUFvnkA81Wwv62sMoz=|AieY zMH_D7&jHD@6pBBuJopn52_KFPf7St`x@zx^uc{1*KiFG!^{aOjQu*mt3MW>d&20?b zE-SEAPwZ{yajS8z7};PNKMG1~@j-;lrcZy_m~IK1>&%Q5iRF34iM6*r1xYsc$EQwv zmikn`&WA|C*FEG!;B)V8*b48Raubi5J&U$yX1p&$>?|}?murwa2P$d3K~WRrmVcPs zM|4?NhIMqC$eLNIwc?hBJSR)-JYT#W^w4)Mn@5HUSFHDqFWD{(G`H-Ck7)I-REN0y zHPWZqEo&Ez)Cc`7p|Qu_j4DN$VXmOHgRGfO>w*6WR6oNn656B)3&Cg-68eo>y8oz`3pWlFVs%y*0v_jMGxJS`E{ zChmNhiq|RDe_o+@ICSFbzfrkF71=}*W3IRR`*n@?@@t{tE4fsT)Y$vaD_-~(xvfjC z6w2zE@lr|YC^NMX51N-cAN-kG|0QcLt6TMIxK_rBaX62{w$5AdpE*bbP_L(CvQ%y@5)Q3iEgb6i>kbeauu23e#w!wl&hSU zlu5mP!(<=@=Z1IKb>m-X+?euZ4oe#HpUVt>Hog-d;%a}{nGv{`uWEIrAH)mv_~zan z?gqE{iLdL!)LXJ*DFO|JD(~9d%2lUx2VAAlZYSoMyuz@e3ywx zq*T^9`9Q+!J>{dHF#zE!dz$5I!}v&tYUpr)#tq;;o_>r#JpOT~w{ zb$eGiU47#uhbx^K);rj!pmt3SF>xV-z_BpM*tAT^MjtvXMjMhav(BmEzdPVis#w5B zi^r(0mBAxQj4jdH=gzZWzP}W_KCqw$flvCVP|18WWfA7yJ+y9NRB~6R-DxD4EpIz~ zRl(`rLQ_-1(Wz-P9ca(&S}XIa_k{>+$U$4SSw8}cO5gbQVEPa9iN(G`q3_elqW&@y zogE!%FX}%qb_uRjZn!zz1u^d?sbhC?uASTbyty$}k)JCiXMb`hrCaq{3u9t(LO#!* zCTU&KoK$M#ey<*F=eahCpgD-m*UbK|vV1%idHLq3dr!7hDE1RonaKTbBd^V5P2M=4 zEugfR7#_Q0SLeEOq85j%1~#{!MBq+3r4A6^Ms7N~qT@kI=%$NBzvF!=68(`%YTQ3B z?`V{9C2QEPX2CvQ-$YP2hSGRii&y&C{h3Xnmo$i2EuQh7ulF=K4x9u$@7DiJrFpf^ zYCZbx5`xPt)NOw*GiBpt|56;RHH0O2DwJ8wJX-C#-~5mx}5MnQ)M%eQ~P-Q9}Vi z(Jb)2>_S?&6!nc<*Ntvx#It5`q-JCzev^zq`sv)h4V5wfOnDLPIoqzQ+P6LCS65%% zrFc1&T9Q23+9V^CkI%is)0W;^lSLZuKqGK-s5cHlscIgbB{~`pd%@Tg48wzL$Sfxi z<`*hl?$N93Q$X)FEuyQ)%j|8*dj&$~ddd ziT!a4iIRi3?`(Fd_0G7vZeJgSHp%P&-}ieb(6+K{!SN{LRmsxHJJzcZ6>I*Po88$m z+IQb_Kth>9UtHK9oSt-dHZ@2l7!eW@lI1_AR(YGkxB17bXfrCRy8+1TCK*Qsvw@kL z3Ck8VRzZ>RZAx`W1l2KTPVtU#P6oEjg!{3KCZaD>>^h&vVQJh$o7%(PJ*Mb<%)+3O z4S!p$(CSZxpEUVwCs&mRuMmH{QYinhyO@gCGMw9@r@;@8O3BhQtM86QVyjl#)x*0!PLmlZVC`xnM>I9-3T6%y_L&^^W}y{q_{G;gf( z?qlrQEaWxu=oc5gkq~p(bw$W|GDIBtEHmCAX7SILI+))J>XGY>A$J&Rk$Tf<*NQni ztFVIeISLJr-E`DAOL#|9*3$*w<1-jUXC1w>@6HMs$PQJbZIyWF#)vd1E>SX563q*cYc@xsn{IJK@f~ zVVH%qV>g)mgzW0>vX@S4LO#KUq;A?u^>vzxmEgVb##Z+3W9l*=kd5VO%&$3SmX2bJ zh!=2lSr!|s^%XmLd4B|`I!(tYLtDsgGSGgi)u#Dp+3E+^U5B(fb!fYGIe^^R%pX*SnvN4yhA5@Fhr%S-K5-`27AWGZ0ejo0fLnF{^+-ubQ%2)6x z4R6@}PUM44H>8NYPqUf$W&AAAxFx2sBy%L5Q{R}21tJ;`>10DogQvHK^#PPIVOfV1 zkL`-M1dD2>V0cGloUxA^b?l1KldEZ>%6oFS(Pq?FV3d#_b@y2@rcD8c$0HtagHF5LE@W-)l@cRz5x||dcHFR^9eekO>X7k4 z(XJoM+0ZtZv+>p?Qu#R-d%M@SGQ!?RhqDE@-9IcmYQGL4sgeqLt;iv7iKwtQ8O%4# zTk7S5*h~B9Pv6@m3;wJZ&S;)k>HruY#zvaxE1t&F@ zR;?QOJfV^R6iUh*8h$NZi(9?YPvh(qH__f;l#? zYFpzsCgj%#Y8Ll{?TDG)_*dJ~Mf%hEY{%Mc`Olx4XOccxA}B%&t_mEU{!ugnBe+ze z>zHS(L+hC5CGT@U>2e5=k=RUqSBt9ge7iH=bAmLQs7ta7uKS@9IS30+EXZYHqD4X| zbY?A{-#*)It6Ocog?GfT|Dd3mjrb^)G@3y=a??5E6At9n@aT+#9YJWYC60%~5CcMH=Akc|b>3d6&tt#s?^u$5QGsu0KR@Ay`Z zw=8N_^7*@#rdfCCk&~>K&m(X`2|D=ITTajn8N}`Kn9ukRR@#%jE04AZ)+fW{DSdT4 z_I@gxnwxUG{KHYU5KA<@@RrE9I9sa+!`s((hEpXlb4o{+=$h%Wj3ePC#60JQZR%@mKj34w`}A&u(LA4 z-kB-SyCSwfGy6L=;c2|gXe-h`ocAn&v>>;k#|Z2cHlYmQzg;>%YZmBo`dFnVx{G_0|6FHvGk0 z%B2?@wg{G@*SW~94MAS3vP}!EUL|ZZD|h+`1pkiFNm;Xy{Ie<|G1=X$M<1yT@*bJq z9WzfBEQ6@L{55b#Dw@K|k^Xo9w)p1(f)AF#^lh-pwIuVm{d`x*_R>HsGm?_q+-DF0 zlKJwLJ&nnyJGdDjLNo7{sl4C6c6F$?XQNG{xLH{M z8t3Im^$-SP#Pg&ooLzSq12Gftm@wBuWmQRc`N}nplNzTrgL|rm_dIo zD8m@PbulCNx8(7?@g1A9Ih4GA1d$!G9@p0E)grC;%~&4FvnRBftWw-X+TlY8x~}Mo z_Fbl)SvhD;vYj7aQp}NgRCZDjhMUqC$N?eJ|6krcuBBJ!hu2ZzXr*3ioos3phR@pj zS&=u_r6XHrXr_3;k~m%()*Q*&QDmlc@A>DX`?}SGh3M9m{smAbU2)ViH^3}G%GFUonrd6@R;T2@C)8ow@q|7H*8iHH~ zWPpD~@Qqiq08&migw#O-1j%wyjKa??K9g~rzvUg{vU|qV`NIotLFa#><&8vTyr1N{ zFJB{zin!!+ieC*FXLFwHFR<=4s`{vf-z_$C#_MOBD}dL?WjTq8p-^kTR1MQEsmY z7=op$hdWaxFdjQQU_tJLOg}#lbS2c`Ry9XG7~%W@mD&{!#-`2*g3g@Iv%P-!)aKdA zJ)hL?fNGs{q&I(V$7OrbO!Z+VC&Y**^^JgBG{pltrZ*|jyKrR^_U5cm=)Xz}+w!6I z`FsTbL>evZUXIOauQF;mRNlDJCgLe|na6U_G@H|LdGH=eeNzdp%WI3Nq%mQPvZ0v? zE>bR=vw*MoTEd={_cR)zTml&rAeN$ySdCA={EYN3H4?xq#B{!*gDVq$#x)zXsi*G9 z*A>av_89XepZwaZ1A!UNYav>f$`|s&Xgm*}{R*JC!>U$c|Gm96rg1ER{yjM*w3jX>w+gO}d`@;e9-~v%$8xO@c0)AFtiufR;P1BxH##^yWw5vXw%mBA6Kfp#d4W1MDR> z@*B!tMq{IVWKs4~yWE+Mb!snO(+cP91^SJ3_0Nl-MuC;eJ0Q$PfDP}FB(2n(=;YNL zyO?!-43R-_`f`Mc-@Og^wl}*EA2y*Ft!LF-nbOw(C?kxTJ}#Q`VSHR%Z*BZ%2D4I$ znvSy=zvHr-)C8kUG%bP1;pZZ&5glNPG53%Gi3#nYPl*2reiTdLMr<=Cd*P*pezvf? z_a5W5GoToeDY4&;E*#k&=J7`2Ndw3M>?+yHAy(CUzbyQ(;@`Ym=T8tdT;9-a$Oz<7E<~CAl=*{P?$lZV437i#`ZJf%CrU1tr0- zJ8qVX=SM)yp7&+QQstXe?F_q4g~rsClMFJn3$Yg2ICi;2h7d%T+ z%h%z2)z8Iuuvj=X5hT+3E7IERbU{t9VA%?L)df$xf$Mg()oa@+%Ztbfpb^p0DAH4z zyAcL+K|KT~Ap>mjSgd^S`GSnr7OrVkrBb~+jthCIHS^u@^o8(0*o4NvS|cGBz;-Au zGLBElvSNv+vzb767a9XfoE7b!!}?jYCMh% zoVeuzPi3nHT5#q$uQfC{8v3250l|O-`Mvn{AN;vtd@6e|9$2K$tCit`1>0aaEdJ5Y z=Hz|VProzdn7BFD$z($*Fa7UB5}d%f=qr-#E&$XN77oJ(LJC2r&yz@mQY5P;BPI^X zn`O+0RHx!&utK9LxJU)g6Y$V%?3aB7Kb4J+k9J1Z+eHZ^^L45e1HF#_eTYyENM~a& zV0yuBeuRDd2ES~yyE>-$S?|%_QppHCNUm#Lg8i@m8FUjkpNv7)%)0XjL>TaGe``Tj zWjaB~brNv5;o#pZup0-bc?5b5^Z;JGY0kQ+2+aMR753DpfuTeUQVq4fxWpxQif;am zDR6os;QT4El4|FbP0Np-qn6L3f&grJ=uD!gPPzR8Sv)a}?DX8v@wtyUK4iY(z4$w}M|0g|t8nB$l!#tE{C;a!w~SBtHF&Ba&@qEj2x!>>&C%)K-1U` zb*5|=j7<(ozHc^CT~+q&&GkEJ_6t2J+@e;SYIUFwvprz%SZDkB1GHe7yT&Zm6Qf z?4Zc3GtJ{@AG?p>)B-^h4!BpxP)7dwRYtGR4we-n;|0|C?Ph63{jNQ_a=Hg1D6qv# zmPE4WJHYT+9GMs{$^Gpm3psw+v`iKN4g zse$f$pmO<@3%MjT;ktHVcsE^9>|qwl<-ixVeQ&=Z!SwEX8}jt@z*m3xJ%cjNUnv z#(rMLQ58MVr^;XkMafAxiZofSIq^t46Y>&D8LJt;4KFA|cC=efHzG>cL)~_!m33pL zEo%Jddw&P??XwtAigM2P1JFCC@A(^VKmnmyV#%$7*w>9`QkrT04*~rk0U;B4@HFRw zwMoEHSQxl5qc1LbBwz!jzQ4xw77QIalWiEd=ETy6_FLy=dlTc;8j_`g;5V68k{4nS za@l;-U&eR+RAYu!AO!Tp!obZ+Jock`DhI{@fgVjd? zwG**6Q7^qU-)#gc*VVHq6N>tLV_+K9`OjM`jsm$O9G3bKCp0`SqqW?(y4(N%o)|ef zE;(HBJPC8znr}2obiaaowu=zdE{0^v|E1f1CYO!-*Y_QlU*16J7epE&q_b{jEolHQ zau3u&S(SU!v5mj)xd6=dcdwb?IMx+TRsByHk8wfeB5GN4UO77(_UoG} z48G_W0jM0*s?Tb-eb4ePR1ZX?Z%-G`g#0V14Rbp{$9v$pG*BvVnzkoBe8tdmT7AJy z!3jQ<4&Au0lSmwy1VQ!v&AAtOeD?FoX6;FjB6SkqpP6nCE}^k;6`$ILxPKSRZnpgq z+5P9V0KkR;cNE4knIt*23&Itk;WZC`Q<`%c#)`Ymp?Q=kgn1wxGt*wCMs$?yx*#ihK+yju!2GU7O7A7%2Gzp3k}|m`81G{;pkw8_v-O#9f4xF*Y0763g2R+Ll&j09+Z^G02^*vUVR}_cllWvt;{saj)w) z0NTGs!TIDJ$-Ubs#+8I!=O)Feq9q;yBO|Gtv!nPQcm#h!geumx?7LM8+z%Y)dh-)e zEY{mDxBhph`*{XDKj1cF=7q9<7PoSD{5_|^4=hk3g}VWe1d#vtSzRB<*%>`Xg}ooI zQqJ-xYFlX;-#~~r%jVo!9%7Lf+6o8R{0=wWEcdB;Z=hy>Fiyq&i!R@2!a<-@eHwI& zm6Sy_ysywi8c>Ae#kpM9PB&oyoQ=ZuMcxIK>tlUVFZ`u!bW7OnIbiqr%8vIJ>K@|y zpGDaJD;?8^d;|Og+r+QHuo!NOCJ;XmPlQrg&Kw~RgxFHsn->P|9uPkVkOW|Un{l7Y z!}Vs=e9@0Zjkp_UKua9>g3U51>p7dFHNv>%GE0YeXp_Qa+78W-i;v+v%1Aw3W>go% z8YYbYIiO1z<5GIRQ^ZgOc`OeeXan|_Skb60r9L>bQFmZIeI{)Y=QH@X_unoP2+}HL z$b>M;#xz`|aq~LM!?dHp`HVlhIKuGGlwl2`*SgFFVTy5)G2GICuhs8gYZX{& zz$DiSUV4>s>Fm%vfo|3u32S(sc12Sh9}G1- z!s)a+im`&%a$5btpQFkG#VFVXV518Mb>?%Io#j{C2u`DSAO~YT`0pSx0s17kdM*rM z8OB00<>C!N)AK(P<*PUD=^Ot~(uqF)Tbg88n$<{khAxVH0u5z)ZJIg4)3-iR1E*J> z5ci+LQK#~n#1v39_jM|tTb7PpnH#C`3>N=#Mj)gW0HzkeOvH2~aSOZ+O-`P%R3B!S43Nniq%FW+Ir66V*fr{k}-`~vb zv^|5c5|>cXv9!_d`kB1}I??I+4L;j6LC`1<1tkQ6+agl=qXL~y%u|6gBzy_Qag8$m zesXqFKxd(1NnpaDz-Hnps$dh`9rbSPVBJ5kxM8vq1Wt~aqL zetQ03Z@rm4-EOWUOYZT>sY%g30n!nE|3m#h!d(J$rwt7a!2koRftCy-s<#XpM7*0} z))=RXOREHGXc9q3JLfcnu5eWKpyR%!a!)BE0EK)yIywwIpZym>C4mbd>`KD%&-nnM z?kSm8;kXhB%C|;p$HD8mcxl{cQHTSTDPcLLch8yV+k2~nu(n22T?EE3BLVdw4e~2d z;hmzhq0ItqaIyndm+;O709t2E(6=r7Q{w1#bN+EH-mdD*QD zQ{O#1N7~aC!dWc;`=}fCtbxc%^+8@7;1bsXGDAP(M6jNq5;EvXo!bf8rIK&cEwQL@ zG2P5wwHb<p=!raPWPZt#9{-XdT zT;SF22TdrCmkeWE|9+K*-raMK_Ec?#fzYlxq^P)j!vUe=W^G=SVi7b054!SyR zdy1-!S$9&JotffOoJod1NOW7aGxNn}UPS>PUveE&4H3Ip1wcl*zuxvSJ_|gR*iTrI zgT*T!1CAXE1CI0y7X=RGe;TDWiKVFrj(4OrdcAI|p|3g-5OpB_ zpBH*yfUwC5I&5DK7j#cTv56Uf$k&--pYD~u5~^H_yrk6IxT;PibOVotJmi2qhhC%c zSNouk=hIoQH?!f`{MxlSx<~h5y-QosgRW*`&T00f0smt!$MSmJ*($buMp1|w&{?st z?N(9K|3}w@u=hlkHiZMWFq~@JIh$VKG~v;iWZeC}@p6*1eaH*ij*jAxWDbn2Zo2jTwu3|36b+R_OY^h>hNrFo!xa$)|o2O9hxyxtjBm z5uNLI0-#OUhhHW>Z{8?WRz0>?u$?5_+Z`^HNoPFE2eiTO(1l#L!}F{6rPyi?Z7I0T zm6?go3PQp+U!V>88Em1pYv1+?oOiBg>6Cl99e?99en7*6p{N2S$1~@43OTG^N(z^6 zW*QOflE9gs;tt7fyL|MI-Jn&$oNh~GrxtMF8lvH~j5FchP~J)!Im`A`@ZdURMSXra z0r|_Yls#B;z}2>pCS}84)2-G$K1A&}EzLSQda9x|88&7V{kab3N(wae5FFtC+SLck z0%oAg8gS#m?T${H|LV$771}fo*l#~~+wNeoP>6rS4*{yr?F0m*==gB zw0R{K2DS0=*O`x89@8d#A$031BYuiIcG;~?DTLOz_n+6u_g~YdFM~}7@5v{yq`#ZQ zJgeLYCCuTVP5IQaa_wnnePbAtGztrs*Vy5oCY=H`+F6dmlP-HsgPx~mI;o{H^WC(r znl0Ve-@Jh1pJ?9~$sf8?rKuY3pPx-s&zf%bpBg67mj+6r0GT8e#infth_;Z#V90+q z>4EVY9}z>C=R9i{vyuOX$E6 z5R;}?B}2yiyQtC{VUmETj88W?GX`?>N4|&ye442KqiKm_LB6RS@|ajmuRny)Zxvp0 zKNYq_Mw-7&P!x=p8KZ{4Kc2ZdJdLDuK0C*7t|Q&H4v$yj!QO zJ?q*X?p;KDCFaleW`_&MbFLO$fj=ZM6|f6I>ek3J4y)_3eT*RUXHAn_W8|3G5n7*! z8CvVP-ya4=Z^Y;){-DMN*~UP_+iS-FwE{!Byx%a_V=i+-uZtm1n;j>@6_Z=JCs6^6{#!pLb=Y zLLb8sbP{85UVYazcB|C}s0P}A4(1QSyK~f}PfPJ@drtWOrV~ksCfQ5RWJS%@08-@r8~s+w01h4lR9})beq)Yl4W;yjcF95|)m>#x*?J-?9axL``>s z1VgE1M`QlJ+J?5>dDj3@Xe@uT$cK?WFCY8G{MrkI<$c~BoXp1khYhR<4m(ZvC@b(fBk$^=wD>9{|vg*SMY|&llJjiQI!BXZo_{kM$Lrs`I zauhD7iZp@jP%!N~tw?Lt>V;=;6+=;5Z)MCbt8+!1FW36k-V!1stM$=|Hz92>4*FZ| zN}ScjRXt!GsyG4E0;&m4v{0d&wpn2A69A4iY^-T+?9(XM9&rG<130n-Az+d#Ik_`TrYbF2lrqkfvdLML})~0!Hf&U7y%qZ z=rYsDMkAUWMXL8(XNGsnY2J3l{C(k*^3EdeWQ^O+`i#orW-pa7u+ma$qeGd-`Xn0% z89kAeHA1{WA@cM$|o~yN(D4 z#yBWFJJM(2KHi7tUQlL(+Hj#uZE{V+E;ZC9&#ouDm%ylGW#&Akf|T=hhLnxSn3eB_ zN?R|U0B&mit`Fe5De`XCi)nhbRsANDjo%PM-3`lVg*}!pd`=rmZcN4-(fkt*>V=zw zJ{Ygi+vHvkm)_uw6%#YK7Kfhc*jA^Oqsj^f!`}$*O@?(8nzWG+HpH+I85;+}ICa34 zD2f$xgYCC%Rd1a~#*@24PharCE~a2CmwK@>&f)=b=k)ZL#1^w{%n%kdCHMk&`2Xqb0iD z`6j(4dIvS}rF1x!eDH<%&7?0yg{sZ86DfcQy#mB1OXGcSPh7*PS?OsT@wX;RGX!WQ z<>jNmsG`Kvr+#M>LpQ1MQphPs&4XRPW0FgN(S&r+lnMp?eA*A!Jjiu&zH5FlF-Bcj ze4~c}x`Mo*xffVuIivx4uk?WXHRJI2Eh0#C6&*J)@rTm4$!Yl@T=CPJlT(?}tdF%6 zAL?3*&@PJDYM}t1u^8%pc+e+-jv)qiL&XXZz3<4HHZS+;-8|7$rsgpO0M zpP%A^MXEBZ3RJi>2OiFn(6+!w1}=($Ina<4Oxs4LsVc*yDSFnR#xIJ8@NM9 z@uIMk49-j&wb~^!;9XGn>4QclC~bt>4p)xLkHRpOj<@#I=%GK#b=SHyOrWUATS$>s z$=L*yleu|hkr8O=t%Cu^1|$N48g5Cjh`gut3nTW`Kyd_UrT7k!>E!5lrXRwAichdG z@K#ZSyI{hiB{5w(%H_jBZ_P0SnDpmSiQU_nA=r0YrY_uvEH2pN*a)W@D3dsnY4QJ zyEP0Lb?^0*M8#V16{Zo!nmPnc_DR0sfE^sau)Tle6V4jhret(OGJ3CWrDAIOLGzOw zHh=pZhNV`vsZJp<9ZRt0C4UlZKR|$>Qtx`k(C<0VPr>J!s?4SiWgL8_%N(&ggJ&=p z$68>0RBgRn!uQm>QGh*mI3v})!u1dbvA^J822+&;312QFsSRXwo$9`gYh{(g zW+?<#L10ODa81GB!30XjnJZIzTK*uTY8 z48B|s{_&WbyLIlG1Q_n20BlnLm*wDdM)`y|N;D4_KF4J(VsrD-GRqWZOtJ-`{wLbSz z$MdJ-@c!sZKaaOHS&Z*HT{_m0dt#2m{W&}(LE3Dn0!|bT8KtQjWxw?c2`bLIEz~L^Gz!b# zna}twZ3IeVogI|}&Y$azM^P%_&8-i?#a44qjWNMc-W`$dkHh%Gj=QBf2CsSwyCPz^G{xi-RT(ELIFo$ewA6#)F7^qx$(@VqQ=KRN#7Tl?u z*^1ka8H$O-E0+?X-2TGvf3)+W-JV-Wgm7t zwd{V2O}8;bY2E($j`Tg{rAv}sca@f(@X)GnKe^1e@TpMd#JbFz%}!>H7u^NvHGes>YD1bF$jmEP&1K#{ivjRhL8+C7eloOR3L#w<1O7 z>ZjHcBPFuX_a>8{9(z7JtczS)Kbl^;w1Ycc-dI4OZ(K0gxHt!roB;B*rAF=^DDX`7 z<5Fwl$^b3seLN*Y4-c>U>{0wtB_nAD;x#R#oBxMYF*<7or?^~UXUm~QMU$ZEn}vCk z_JpcLA`3I3@@GP!L*HX?y-N;K-fh|Xt=nCANL*w@>+GUtU*NWUKB-K)VG?2Y5yoBt z?&e;LS~SJS_z=PG02|oQ7~c|hsP)ku`7{_|cEjbNe#RB+lf4o1-($U?hzTokNziA$ zx3xgvxmqE!yO%Gc+Z#KM59yRQY-nfaX-IP(m^9tThK*!LvC$HI&Ay#W8RyW{zKAD4 zAl=&=)lgnTfEb%jwajBNdN<9@elyq7EnQl+tW<6~>Gw!o()YQlmAr870sK8Y$jGj7 znBdl$MwWU;l1%l1%suso8D^++4Mi8(On{xPk7tBYyeG(7VZ&iYqe@wS`!FKNC_J{bZxEoN#d zAJ2;H0#3DzcY^DDhGiIow~!Phju;q~1yVG676NU-xEs3?;H*;(H{6@eExn0=oovY{K9VW+eru?u8Jys;X~b=h_d_Xi0AcHL&;k<-l}sT5-VQ?58{7Z zu7NYvYE=6pqGG!-72J)zT;FjtTuZf}9GUm^P@c}XZR=Yfce-;~Sf`HjfL+ZqX?ayG zp@E`mw<3qI0L`(Q@p;sp9X|K3C9pu80=F3*^>WBY&BFG6I__lHBi7c)&h@JzEzebj zJ5d9r@q@h@pY`BOe+~gpEEwOdi$pae8UG;T2X^=wK=fT;LEaA)DRKMimN`O|B=X*3 zbeiRG)Bf{DOzUfJR@V;=AFX&1wSjsb%Ox{G4$)bOfn1%~M&+WOiJ5Nh#+xb>03VfK zH{N$XeEGSz!bq$vNi~KmOQVZeE_ZjqOA9j2%NLmtGI!bXBV9P`O<{@tNNf8umTNSn zpF*>qf@@l90oNcaQw1$oWvnylbdT13r$TyECJ$qN9<{Rbodi|cPDC3OEPQ(~_vd5L zwK)xGmzt6eAH=XQ#(+i7J+;+vf{N`+T3@D;+6WFc%$$Z6q@T=utla5%ml3$ksxX^L zSD^Ys?r@5o!YzI!d3QdWeRC$`h>pBhG7PXNw|N6JLgz|I$EvpuvLiQVh(GEs7yInr z^zDc;t<3Vb720m0yhLp&494M<0@pwf&xI}fXo%ZUgKE`JUlN3n&MIh4JrK==bS78}f6~Jv+hw==Dlv5%j*~{0<_X ze)mVa7;N^(S*18R-p_;^bh~@sZ>TlwWkzjM6nz|nZA41f{IXAX=ob+!i4*>=Tv)c^ ztE0y2Novtk1}?sPc+ zyb+jZ%ZTv4P;nP&`woZpqO5=FfGjy)his@WBxCZ(mq$Uwq|{sD zsJuipa%WaIyZPvpH2A;m8 z!+w2Nl^#(x<}iTjKaUwg`p6%%rf=d}S=w@=m{HNYbvSm8Oyifg zTk>Hu0^O_gnK?!aQd3NvoKILtb>pgaaHg84V0phBJqB+F$?4qLTb~RsvEmbr>AkxQ zE_`0qrXKfr>*tW0BN1QVD>It)eFQ~YZe)`}M7yev##L%g`o^g_S7RtMD7%DbzhFUX zo);@wx?3Q^nM2itOAlnS#*K7Z^d5`gy&^v<({25v@MmS!29K*orwmX)YzA(QHy<)G z$&ux{6z?tUG!fI}M&!*zh5%kP_6Yq|wQ4pK@)~{pPN5WZrnv(J3%*#7)ykZV4wMzP z^3B90#SlxI9T|-saUjH{Pk|R&2VZ{gqwEH{FevJWwo{L0qYjLF;|$rg1wXz(MDqI;)-A8i)gimgdbyU@Ne#v zuc{#CKHcoz39t9ixV@980_kLDcx+~(x{{OMJy@6!e6vDM_0v;}PG$qD4_Al-TyUlD z>}fb?DGlWKVvim3YHY9B-8z~=f;N-P&kQzNL*66b1yVIF{nxU1eD?3@g9~Q1xJ@$f z+p1qIzLTjdsv^~J!iCu5JeqmTv(Hz*w^w&1ygccPc9;0TMD7i`XiU4?;41b`;DzL{F#9xsm0=A8BS=>k)01ijJDj3NiGDzX&2#`>uoZbp_*;WWBB zc168*hBXGJM!jpDxY25?w38pX#PxnG4p0|LdBItqwaU$EW`oy2>nqxsVJOza>qs~M zit)09`{%EmN;7qfHXeM$!Th}1Ngq2`f2M3GSG!9KDJ9=9h4~?(x>)H(^7@VXQ)1Z| zH|NznrOFKUWQ@|aeJdTxUMteE*6iiN^GBiHDi%Fe>gvv4V6ypR<{aQVE`%`-+;j7~ zeSLdY9=bJgc(~%{YOn_Ls%4P&y2mGSK%P5qH%ncjPDs}GQGJ=Gd(!rq>8RacrgdFS zpA;DNCmFlr;@{LdS8yOp2cad|rU&H}8{_N74W%1bKj^7_*&u&@1qZE4w)K@i;wqI7 zC{)in&8jCe6P;qO z7c*99G;*_OXkR1ZME-dF0N-B0H^(K|-hzL9OSNw@hf~QLKeywWGV8|~$E&yYxpk9Y z<0-z*Qofd1-ZWINQ2WHH7ncFKN!s(VZN&e>?lmRgR+JAhW4zmYiL)+ACNvJUlzb&( z8k`>;P1x=FV*##H78v}*QU7WlaZ_NsZ3bT(<7NHZlu!>dPsDJZSgqcl-go$TG#rj) zrJh-Op4Z3okVT$5Tg{hsBgTJYL54_Yx2wbl409rfcxj{c*ZZ71k?gmotLR#qZiP(L z2e}@DFHX4KIkM%toWD09UQHGW0j_S;h5J;*kD{3KqlzRW@16t+mc z7F{lP#WB}tx~>b{QLSKz-Hxph>8vj2%GHs{b6(;tguZXxix%h=fwlbc)#O^0VVQJ4 z_A6u|3rQX_Z!C7NPup1iY5eSlRjjJ_{NC3T#mi6d7`T%b?IkhGvL8tn>M8t2FLP^E zA(Z2oy#}GWQifjQ5naO24&bt8g!)79eK&S$mr*^~!S$YXrRmQyA_@BY(IFw%yB_n+ zXTVfG%so?+B5k#}HUExbJ(h0!m}h3yeMT_7^##{`C&Tp>Td}H6!_lwY@>%HJyb(ty zylok`GTYwxb@Jce>RzyjZPzTR-Gd>H?AV0jca%KqY-3oQ97^mPr;iHkIxmr-;Vg|< zY~#~%SoGY72#T_NT4aX1ykW!9%Xt8<1xC!>AG@NsuT!wnZqv8pS(mouE+<;O(8_9| zgWHOo?an=LeCN}M>Q)^mU>&Fvj zepPvW$fvozNi*o|xyTJ73F3+7z&QAZhm8+$RdeC(9cmJkro!M(xOmBwCO*de{=E?b zqq`MC4+l+{CV$yLBXMVIU+n9okpBJ7kX0m@EQsOTJ(O*wxr^LX?fa+_RBna^7`vmS z{7ab?MAADOq{j0*MKNpp{SijrDyPP+*eXr^5&apwk)QBf5(GR+(}pceUEeq)Dbx?} zy)??n-R$DIrcaWiQDZrtA@UDq{!wym+vp)f7QQ=o^uQQ(`4#6 zd*h{%@pr*8qv4+TOrOMR%L@10*~94K#~M4`x{*$?GabuTJ6~!P*3=MLD>lnJ0Z%Aw zZ{_eowl^6k*~c= zWqy;)3~npFQrD3;9v8aM%k4OR!^7n@mX^U}{PEou1BJbk zHsr@}RUe<&&P_qa6H65_7hR19O59obs5{ z`AUD~%$r`0&H8G$(nHkshN_$uNz4V9@I;v_iaa)3_ zURZ^Hp%Q`usq{;D7{jhK`$}wUnF}sC+e;5g1AkXDZeP?reg_deRuSEkDD0C;JV@_R zB_2z6zAG+-g`AbX*OYkHH_kZd_dwuWrV%qAQwBYTfjR7Cc%Wo2)&l?INzH)o5{T<5x8ujlJI?~kT<7G6^Ry$wE%#QbI%(dFOgFHRb`RlaY!5;W&Rmu~HM*?axr z(1fyvhZBXfbDNPFl@d|<)86syz~+`;b%acJOw!jYiVUX#I?`CUy8SppDw-Jo;XSW2R%I?VXPM zZ%9nWZSe*T+Pr_S7SMtPiRX=KDOR!vbJ5D!c+N;+HQ~< zqp?R0IjhZFRhy2`Ae=%$rQ7hW;$v^g$II5ugxWKF$Dr%Oc%_A`>%Hs)SIFP-Ojjvn zg#W0V(GB<#hgm)>Qlt0qj-Xbw(f6p_EiV^jw=&2&A6J=GRp$LQlrEiSv+u%GP3Wvn zht}--3lyF!RURbTIdL;Dnb89%ZI`xmK^!F(nk;LpoN9YW6OWCEkfmm zBer@XI2NtduoQp3?%y=P8fx$^x}%-K5)!=nCO3dizZ^X?2UjAR!QqwMoy znLN4JFU(zOJdnALv^k?b%OBpP+Pw}$gL52Os&o2Y#q#3!_35kMg^IX*X=;vZ@e0mpt5}bCtoE_l9KC*TQpa6#Q-XJ%;?5dOyOs9} z?9sbJO1KGf>f9+N(^QkJB?k@Dp|ahJil^tE-fhFtTANHKt)fz03tPLY(J`1w{li~z z8e<3I3AHnijd+L8|0)e@9PcM?g+7H?!5jxgu`0D(tzK0Ni-Ju1&65|=7WGNrQ^-)j zmRa1n7%5BgVZvWrnzT=_CCC0*Uta|1U=M~+)H`(uOxs~Wtis@}_@Lc}-$M;O$LH|AhI8pBJvwjwfu6vc0E#Qk+V?_8 z^g52d!f@lvSw#z`@bslJp}w&b-ph?cdNqU%wR_#FW^_r0vP?yWnL(K^!i ztXrNFc+>rk;hg}8@^_~b2oeVUBxV+jPQ&qZ#%XkR3)j=+{9!?lFR=b zdT8SQxYPy%J#JV`|9sHLXBc1BWUGLgxQkt$QgL;(wzV38yP-nOAdLg`JJBX%ie&7~?UArT6;|JxkFtJDb6rmyOGTqA`ehz&;`3(U#my!|0Ip;Nvr! zHp6MHwA2Rf&0yV%kqS!1>%DK6I+TWE-y5cvb~p2G$3s*LsJX9=kF~Mds;VVxgQoEV)iJw7tUl9w%}cH`7EPi!bNhjn?+t0d z@?cp%I4vU;=E`SpV~B>7it(>^y_gps!*ix|G)tDi&?r{oXlXKTJU)yJ?YE0H!jsGu)w-n@XnuR-*( zqK2$9mB0YydRHY=%Q=Iwyu-n_>)E&1k=%jl@XNJ8T6G3N|h-ZY8E~*a~hdisfp;ekfGWU4IaX@v?QLwy)Wtk%R z1?E7^rAlcjFR;_6V0?0XYFMpG!FFbhm%Hlcr?qLr($|{mkNWeVgnQ8`;Q%w2p30T8vIRiLeBJha%)nZR3h_B@9B( zze+lGwe*}nxUgBcJVVvbVu;sKtD(;CYgVwFGBj;4F782)b+8*xXPBPb@>nbP{gG*0 zVX!%5P#U){yAiYaYT4N@$5J=R_4k6mOZ>MywW*@DAsb5`zP5gg>9%GTeG;b+?z1+& zvH1e~CB(Ip62gWIB|6*4iYMjxXN_8O1G({ z@=2(!orzD`go$#B^p`9Z!3URbWrTOS7MZpuEZ%60708DPq>m_#GWB=v!%uVHwOQ+2 zL??K=$zTc%vx!!Lo97=UtZ&rD-MvFPXHWBsZ#jYdlXf)qTpY&fI3pQ*{H1J929FXM z-QwuC2Tz}JqpA}5^AhRsgzV%`$a{__!USjr(Jo0>c3x%kS%bMBx0k@bPQRcbC;+S$ zLT$|KVzKXf+|se$cZIP-o437NnP42n6;zA9je#;gphg^{Y;{lY;>l;?GvA)#Pqq8 zO0rqgUhkni2FFru8{}~XaVnXOEL@*#FRT%5+&g={g%CG(^(^g?P<{aKTCA|*6sF*bv9sN(Ytq(cPUKSK;scy$*-_B}rNSNQYB5eI6 z^ZdZ(pc834tV;_BV5;H1!4xg2mY{>#mv$NGP%p{XnvPCs0kOK*^hBOw};RoG8h_b1i% zT_V4|SaCw_*2%2fWK)@T2cK9&4X52&B_cMLoSvh`Ev|dYefIokG!5yNN{yS&pgf&CTx*&+l#bRC_X4N}kRj&|4xTU=UyO?%l0c-;JNj*PS_o zwLch6N0ld_r=9z(V0^ACQzhfBhj4&qEK>d3`SF@dKA^&RSzMAxDA;PgFSqrw?w3~t z2^Ij*lh-E5sk>j`TS2xT_wijhup_z7RJU$s2{fy_IcMqVRrX~~RycoDMGM)K;4tOA zT|&-_1^OE9pHy+LF^m3hqLY8Ay*hVpf2wUHSGcBa^p>oh4BQm5uhNabKb&)br5R`WiHxLx$7I zFU;E*#qZZ=ENcSCaK=51+`YfQAU;HU_*Y)nhSRq=@n{#^_xgmNL9uf&FSA?c=AzWr z@Z+|Yw?=$F$$KjW;RvJdPZw=yV5na+M{uJqWUacl5s+L6;5?an>y`b%D2!qBd;IDU zhv8(>o2Kb6h-f@?^)hp+3mtN)6CO9n$B#eoml>9{^k{X?l!aR$qc6GLC73g!5pA9Z zOxjr+MXVW=jh0ICB|WPb=Sdk$Y1S%Sv1$50E7S41`z@B+LcY2xdixfxSGxt0`CI2} zD2(Y=j6K6R-OP3W&kFhj+C2NRHMlS^yvqA{phJ}*eU~3;fY7rDKpG$@r2I~jA+t#7 z#Kn)kyt;IQ={BSlUN{`+2%Dzud(Ye!FI#V$>FA$-xQ(f@ipnHCoY)S+jG;#I$*N*1 z>|;puJC;nxYMIR`vt#!OUXiJ7QXOlnFjE0?W(d83lj6kk>8X9pGRS+pg3gb`JK~JkPj0=eO@V`i9tk*;J~?4M#fh__g~YnLf$$ zxt$Y`G<^R;Iof16J+Z2qKn7VnRe z-smT=b$|qq&`dn-NNFU@MqHaSOfT8gLd0AUsL zTQNyjm6m9y1y{uK3Wp`A&q>To<5n*v**~)I$z0~rdTw40 zpBB4v_k=u|N}P6*&t1Rzh^lRw#UGL)B)FSwC_ayZh-bAIDm&*ZPDob$4)Rj+7a#uO z^*Gvfe2{Od!j-MXVupXE+i*;wIh-3;rNK~kDIk}>=lLr|tas7vtH5sMZ|o4{;2W`3 z4-?XG?VoqO_%6??z&CAczK|g*dgq3tJ%w|>MJZuho_Ss}?!yTM{RoS)#3kf>W^4LRt~CHAo&su$PfYKe=D;i1X)dhXGwq4X6?QN%C-0NliwxhB zR7v_mKUd<-dxR%dtoJ%PJIRo(jLB&q%) zrL*wn-N1mNg%VXXn%eP`zO+=7$Iet#!Z8)9vn8?W6Z5#}+I~w(^i6FMk0r8eEe?vB z8T+J;yy4;(aXYu90(W<-DgST<9T@gFB+mVMs6Xy}GNN)IH1Ekof>JnlciIe8rZSe3 z$Ii_V&fCsFq8x1zu(Llmy4I30Z@e=dR@d6mTP^;}F=AGq8^vY8qtFT(IL&@vk(Tp$eF8jDsJuseg*Zq1$ohc9f zSkE2L)&g%cJgtZup1TezX;5Li-To1vh3l$jzp_4kd<@+UkntXJHG8T#s7)4kSb)ol zaj0F!3FYG+3MXQ_H8jF9#PrwzmcA;tbU>D6Z|c7ERqb`m_ocR#2Y0kbH|D=vBl-ks zV^4<5tWa!`mOeYcjB!0yGABo6)OoBJW|hPYpOQ((`6iK}_y%ID(P81uiAt6InOA>m zSciN~>u#|{lQBC+r`wx-uzH4)=wOw!iBRP~x9~8xy1LdOmzO0T{o)QGG0A47P-3Nz<-G7+29HC>#Q)te_LoS0Wz2_K#nIOUt|aG1v*U&hCo12oB{j?AM-H-DEiG7 z3a34Y0&EpR9Y>I7;qxgkQfR{FF8`_#of#om`Cmx6)vk?j3%5C0$H+SC&_3UXuC<4w z3xqw8?=f-N7E-R;%jDA1U9J8Wi=C|h9u`(Gr$e;FjnZF=o370FsMX_b>{ht*IlG<3 z9<#3T@GK_zkK_}Gh^aQ>+;jHhle>{ zIInimwuX7hAnrs@iV6 z5*)1=jd&05CnQdsS>{$TmC?H7bHTXveUT!ne5+_9?v^=$L#0v*pMBT(LGXdtlFf8P z9j??mnH?qWuoXwT>nQh$y&#pGXDvrtS+1!js_vSabM{#d;dl(X_0i_iMCwyTeXO}C z#bKxOb9i8*RsFPhsr`V)W8%;%Ib}xrwLw8WI#b_y*QWYlB@qV43-~!Y@_P#|G-H1t zqA{G6H+}>a)CMDT_?G&fL^TND==D zv@Lr!)juX)@1~^D=j?w5y(IobkA_sAO`9U_G}*-se5aZ{f@XE?lDx{)aiPg?yT9uW zaZwwX3f&x)&SI0jnZt>F*I$7mLXUGXOtXS_c!BUs%-HkT0jnG;U@265D<90LSga|h z4i65~rs@5#R^R=1R&ole)NA)=w5$3yPHx-V|FovSbW5DN(71-QopI%^LzzL{(4C!6 zq-F96uj715r6LdVts|{;5zfTUaVhU&3`=+Kum-+X3V<;uZwqCUcM2Vot`j5V=e*`- z+a9@}VbU=YKOH5|$8~?h$V~~S)vsUb@X??yny6Q0m#gt?&IIU=ZCfUbL1P zxA#1+7Oi}(l572)l^KFwAy;_=)2 z@I`OF{`g~+WXOrrB;nJ9xV&(w^iS6lQt5JUzu7+3Qz>6<(sXfh-10EwglXH($P8!Z zpwd`|oi=WIM@uh8Cpy#LDXx<8_ebvow3ci8sr98N%R<_TN?Beqo^7m3QGL5Z+3o$l ztd;EJxHVE%$CGi}Ir25)P{thZ1c=uT;KWZjt{;v`Ze=&Q+E8p*_PTPUe0>X3 z{(&Xj%M_|UiS8#Neu&xl-v9b$9)R(tXgBN6FG{;sgx!{lYKmo&ns!+0EjCG2^<__QmU)iJXx9%- zXULCI6IPUM_qV1bqu8jloqbh8UH%b2pzqdgb=>9{vs4}m=bs&%$^1vu%TMy{XFr8%=PfS}OWoYY7BrulA_=px-#TLk*p_!D34l4| zk!#r~kF7LSznOO*k44xYlfa)K*XU`rGeLcQPK@JlfB%;nN?_A70o#(>O~@ybd;g~U zs|NXbD)m8B+G+)#f1SzqCQ;MUVVryR49;uBLDhk4JTqWk451$I-- z&yJ~VPZo3P?xtNzZ~N2|I+f_1;#Yx3ChgHGz2W%#x#`VW*8(MO$Kr&-u}tPjTx>+N zPV{U=i%3P~Z|&xU5qlX=F-XXT^N1#H!YdP((8nG&oJP-OJ%fGUdu}vEiUL@SRv%&} zcDM0&OXu9KAIk&8neqJrNqAL@U1!^}rLG%&b2LQTxo4VhyCUT4%zKOUQVky&cIO@@0W*r!CNG`q@U)A~v9ncte2g zdK?PnNWFiyq5mblSu#qNke4-~pw3v?FnxyQVW01Dgli zKHiP`QO;1ensve%)Gr*}eHCzua+{9?(`E#`16~x|No2j`#x1Rky)UpN376_q$)qeTOB=w1F!r`RM^;28w&LF4l(J ztNpHbDG5`^8Yybr=3z^VYROhHscHi;mDJ$}?Q5LF&T0jwo}-#5&i#1BJpG?C91Pog zUqWV*ZN|ngh7R2w&cb%95wf4KNKc+*excyqWzGb8n1*Tl? z#eu2DyTQPw*6Z?f#~9mR{2oTB_^Ij62^ws@xoeoa`B)jk={l}xr^lkULJx3}drx#? z-W;^DL#WK9f^~CjzJMuk7*|8_pMY0YHiJss<1D9Yy2RCU5am(&!-w?op3-lc#ss&q zcx(b@YyafE)`Qchm_mph&}hcK1i8*)w0zk0|2E?kFg*t$3C9yQOEXMxLKQlux$|5P zJr)P&>CCiH)SJ3Ov08PBwKqItf9YW=zZKTqd7k4$_%j@qzqy4cgTh==Vd~h-&g+zL zTJ;Of14PF1wo1PV98d>;Azcaqnf|-aaF-d0%HO+>&2TXadhV8lvuk!qASjovLL;f| zq`L)a9=Z1@1={o#qN!)-7Lul)pOF@Pk5T2rLk_$C=a@0VuHVFXqRT{AZ>~GrZD)xq zNf+O!!)Dq?rM4SMPBjhZpO2@@bXQ*z@#tGPd|0JwtwO*y*=;f?B-eqf+|(bOY+!zk zonrgAh{?oBmi?})6mfRGHM=?y^pd<;hP7qHej%>sV$nT^zA#7bP}BGt?_XuNNBo%E zu@l#rQg5a05w#NWwv^ye#=jJtY&v82y=&?jb-wS$%W?)oG=A;+N^=46XCual5xwfZ z?bG@w!8=5Z4TCpWh)@lh*0N*ggN>M(7H9Ov@$jz(1{x5A5=$d|P3X-Dv&^qiuLW>_ zfmP|5$GShi3)ZUtOr|pGKKZF-;DgFsFG5y!snli+FT4{yd&9}&d8oRr`c0d!&zQcC zH7G>!3((dow#dxHH_P}Q3g6N-z3x?MoIesRkb)tbqds<_?pm?Ojt+HGBFCy;Xj8nw zylcoa(*m>Jrv8?ec&Rqou(x#>QQ;bFX+rUB|8K0*QOQb?(&rr7_V)uy=y6qp+g(B} zQrozmuyHDDp%}BRw5626O)LkG>ld#?69O9a8{KLtH;}KJGhnKug0#oh`w~CPkNsJG!dzd~ zm|Fs$5Z?EA3bgTaflC)onJf(OwDdGQ2_0Tu#5wv)Zkyyd+;K8jOYs>$ZR?pwI!*6g z%q+^FgXUEHIoST5ZE9=w8lQvTNVUSeevbPfM%zrC~KD8(gc5Cn$td zJ-#pS6k3_v-_Fg)#$>wgZ4kItc|CBw_R>miorw(dPwfaE=3saIK8gmn+wLjN{n7ikawk@>=W&wQUJ0iKR9Z`IsJf5) zM$hwS`#gLT3kRDFAd0h(R_eSJ^!oLSlmrbh!b{%$`L}M^SCz`we7hqc>t983&CNfb z+y2}4;3#b`OCD?wxe1d^p92xj z@ETQ~h3KXM#+qVmqPRJs_zE9o?|p9f^b#3 zlw6k((dar;0t&@k#>O$4{`kD^qr6K~AD81QL;EmgGoK2RlWO#qx zZmtDORX4!yT9l5$nOF?q_GV&@8xmB|-W}x5hjMy(DmTCTT$+!s{nWB^F;=90jOX!PvObkn%`QEcLfHELVZ1Q zhl+lvvM%BOt`JzN!E_&JpAhFX!Nt;wsD{O>9P-hn5$lmz}j8x5O|S z4WDL~4x${~Ctlpee%y3jHkrnjGel7_TSY2vUkFv)-kZPcX-pc1`i}C%;LaU>0$&fmZ zO5gsyOR@7~W`BCr&HO_S%Gwc~PQUvTd3u|4Qi{6V$rjh6mNa6nU_t~tw*6rpno*BX ziNh%MYIjtpHIWhX(2ut3!9Jg<_l>`4ojeob0sLr0!l5aY>Gh!SdU~vNk&z1R1Lj(F zx=w|%9AifP?6RDj5wC=g&*L7B@CBZfR4{0-r(xm5UVx1e^gcsF++E{iQluVXmqq;O z@1N5tb_YMsSNu$;MK_h|eQVd@MKNqn&@Fechis=$(#OZU&Mh#pXfn!41e>QO||A z@M_N2nLir|yqiSR>|*N(?KORkvs51`#`a5e_nUCA)Nz`gJR37tP-ZlkV~wdzKn=&7Ec z+%2V{3Q9X&cEN0AxwPoB(bMQ$Ho2+C%=dH6$T3~Xk6+E3fULlm(&^*)w2Ttbvp$MN z56%;%KJK9=&n7ndW=MA-ZH`CovTVl_9eKOrt75nX6vEw2Rfz3dh}XA6C@mQ#wy#f?W7oMGJ{0W~CS|9H`#sZT!83@Tu3^-3AV_*J< zxRzjq-}AlxgaYptpzu!mPXCZPm8vtcbBRB`@a$#A;43~7(s(G-ws3Mfp=f6$+xSkd zz2biu3TZ%u-BXTot^)W~ckgK8kFRH?)1m_j50rcg8}0)l;2{ZsBBb~q4;)DqkY40x z@9RzW_>0E~um@h$&1HiaDq;A`z@TuUF@VpI!>(nZP)hth3H}H>HvrDfd$S@gb*Qvi z_T|i?$%p>OOG4r`Zti?%pxvjt?@gKwX6bb%0bmT&z>YK!h>lep!SqD++LADVtqIhjoH=k_18yWG;oNNqN z=ikVj+dJ9$G=RkAr1EL5K)fG{6MhU%vQan^8Tj)}ci0S&U^k_bKq{-qVOF_fKCcQP zR68nu$^0jTa8s5siMv>K`FzoOqo!tGanZTv_|6ApsYRzg-=1i1Fiq1+Jg7M3L ziXD5F1cv-8W z)}j{%Z`1B>jmCOM)bZy=K4oggZhoN7QuIfQkr$Xd)|^L zuAilz%L+;+pZ*a`C{I;MNEl9^z0%k8gX7yI))XrZkyC>nkzRmAH4!^Ro-u)Y3KkdI znZkym-jq*w(&N8l<#t&ypyo9TK`4)1004d;sbF~Yby&_mtn;c7S*brUeQAHpsR8UPS)eTMDnL0{qi2Q^rYrYZqwhQ6rp8!x1-O9dCwQxha`&dxGJJg$2lTM3p5B zkdhbv@ZV!efU&{!op&9WW-sYUKmQNs1@b6K-1Z;8rmRiAA5S#{zu{M@?044KZAQv+ zyxuWg7H@i?D`CS?Z)v^^#$2)%j(H&|ndH1Ywzm3>0YR%EjW!Qh!fqe!=i6sHa&I}P zqk$=dpn;QX0yF-H3Zy{3OI^EeXlxbNTdc-i{u*tCA`|%&mw|tC`lj35(~&MqOsXPN zQRz5c=p`$Q9Kc=R`vMVH1rZe6tpl73>30Q@BU&dVhcEOQNyEsM!V_TAmhr+4*OF8r z|4WeiTmcIKW^<@NX!RXzmV0!(kLIn|AG&Fp?0O2HYh|#jW({TL;c&nF_+)a=qH+Y4RZ~QD* zY=$rnDYx<5x0fPV)v}_Uiqxb>oCV1K&}11c@Q(XqnA`P2wa0a?nYQUi<_m{MK#u5c zZs@sZJ}US~3Xc~851w>64$JYp%bKVHCO?(kH*P~35=u7?=d$zfD)HG26eN4H$+jN7 zo4hkF^SR|9PA2vi)C91Q#lH&K{_Fpvv|S>?r$t+^jHd5hO5_}5qlmz=rNl&$W*X4n zW27fYpvG0T=s7>sQs-jyq-UcER!CJibyqhDo(v+v)(C=NQvikza@#ofZ5tDBp9>F+*Dd=~iLE-Xk24mWpuY(g=B4!Sk7#sPz`(6kb(uLYVvR z;brDFJzkvgoEJt1z5u;1Q1h^WN#;U^je2sm1w^=}IF1&_gR?hX*HXhdb%(;YKap@X z%5l}4D=lI<^$(q-#Q4Q<`U_Sgbu5H$ZN4o`xk%yyX8)0^Ow={Cy{3-K_;}}Tf`{Kj zw~_sLz+JZaLJKQOc%0Q-Wu5OdBSSf0)FhCO3;6`l=#WFe^EHVVkKW+|Goo~{GvP;p z=uYsMw$V04aV74v$^;$#Z$Li5*-efrRl~hWjH(*bXJT&C36~Wx7QmV6#rm~Y({=t- z<;lU@E$y&aST1s#kwIy@-s*ql!SM{rE|(a)-bs>R#Jy_+FA6AH^kxwpapinY5VXY$ zo1#q<#J%+#zIv8hkJ1hhXZ=$oaiRp0QqL=Jon;f~OZB#Bg_#9W84+(=Wo3hY2rhP9 zoAZ%S#dip9ar!CH2(ewO6G>tz3kOqPD{Vv(3;uBdB9Z-#?jp0!%NTCMr;v7RP*BLo zg~u$RLlj8ECku?{E5H?uKmgpt7uf&%KSWqcI^QH{Vjk;Mp-SC}9yggvWWK7#`W9#1 zbS2)BD%9?@E_dm#g$7(CaLq1A_UD&1 zK1;)$F<$z>k|Bsc_2!Y_)jLByt4#MSby#edewcJ(qOVXbL?#~Gj5O#dayve|{_ufD zOoti%J0@tpIe`#CLDET*RU?l!_Yunx+mI0t55{|<^lIE>DjjBxw-yEwF(ApLb9#SR z`^WHB*(oErReU!jl9arM*updxlqS>MEymQZR$*!)p#;zrc_YZUHAKD0SlZ~I<++b8 zzG6bn)r>aXP_V=2_Scics3vEuzM1T7okedII+{!9*LjGUYo_=JuK1H2$G^;Wzs}23 zv&OAdK9*mhIf{#6@RN%$Vgn^U6Ck=lgLU3@BAY!bYfDwj#vH+6|9S!LRf`b+MQ!>1 zK66St+Pv^rvV@8{eaK)PUE~+-0|7sd+5xkmiv$iz143!*(tfi2l%K1f9P5~lCK3TH z%_8XIKs5fsSyZl}HI|jVdRE=?BLB>rXT1BZ!S1_p5x3rk97)(^D z>@*MR^&rosAG#99PyIgkUM1tr{9HSMOS5y-uM&7`^9L5!9pW{Xg#@qlJq}H zLXLMt{}uy>Z@>#orv?7h5%KMFz69)D69B-20-Fv{7+m)F!y^%U%XtQT!54^0O#cF! z5~XnTcS`1F0441R?o9a#Jo4*qB1Z^p$|t@61#bfIsWA{;lvAbO21H5y;r@1>{s4$h zV;Ip?&es#A7IH9iAWr+ojk5(LYWmNrkR!FBRgU{9_s9k->@(Q4N~B>V_}q99Uc(B%?mY6u|FxEq%0C$EL-1=2rd*D=c#N!gP!Ed$>|rBtc+&uQ_P=BQ z-Ib(b9+=O+QYpUH`1VSQ%JsCr%sZbHh)U>2Jyj99et@@ca|9dK_XMFaP$)vhy$^od zaC0CBp3c<*sJ|mZC+4f5fiVT^$?3toIiT^5u7iIC0;WKk_M`u}tB~Zevjz;g)5yx4 z1lwdWrF;a$m2kiZuF_QyCpd?wN? zw~jY%PZ*^ON=HbP-wUvdvry#CJ;2{{9ACfw`^*U@h5 zAwW=u6&^c9AVI0CoS{g!xyC|?oJJrDgq$A;P8@1E#vp$7f1k+{D?N6SD>MlO7y>gqko6jMY#fDlkp!y^??Ibk=v$4qGUUOx4#B6a3KtB1Unqp`&0L50ozJ0qZRbM3_hSNnZVvI1q-lJ5;Fg9#IvU0KYjR^VT#p+fM;=SH5Qr&{48MG<>P| zlW)U${w`Z}!!`gsnAoX+M6cb<*F9#)ex^LcgS=_~i5_02c{x80R0bM`PO{rR7* z&KQyd#;@q^$RA56;|md!vYzYIc~pZP;51*p0;%EHLAhe-x0iXm5BBaRR=KRc>&ekn zaoB2;V(`2QZz0H-&sE@PUxX8o16mo}Yo4?@{>zo|r~axzor0`R(|<=NR6u4u^t&Js z>QI!aBBDWY6;cF5n}Z;+j4+n}djATl?I49cv}X`|MT%S#L`UU^CB7fs@!Qh{NnFn=I8&dE`AS_AnW$s&vDqmY^LD;}^S-h%aiZ7tW8rN-t8 znn*@ES6==9ocP3|qepiJAB3C?(E3PGrmNc3eti{4R?^Vb*+NkWq<@(Y+lZKB&_#im z6Mh>LjGRY%`S*q2fJld0SKUU}AO>`ebUg&3`;KlL?7IH(Px2>^sPaA>_+VRviy4NH zoEA7(0*+dsXNKUk{w5T77`jzjwM)z{K@^K3Jhc7q8AoNXEb_Qcpa0-68;a<1yL~Hp0RD1gX>?fa9xp_)VffVDW&`y@<{~f#haL;A4#H>dmF}6!1f~a+6 zrJP=-XKszbZ5^PUndh<5DK%Y?2;lS>iFJV69zPPisDF;POOl6(f&ljPGKhLTNj|3V zCv8?g3fEj(^43Bmeg+gJqN0`JZg#d*vnZzqAU+im9llO*(t~4AMc-0MVOTAJ_|F2? zF#uiK>G6{_h>BVHn49HiZ0bJ^xdM>AO84A-8gq281T-Ro29Vl7mOJzfTUHAYS z7@`X`#3n&D_ASEaqTzpR78yVP4G}%70B3Gt^pwTXNk{nrksSKC_em}v0ThD`yR1de z^>@1*$3dcXD1+<$QGix|NQ8)mAzH3(uXgr!*3*FXR|IN{#S1!zf3@s<4&GV94z+`w zj)f!Q_&;YP3NBQcnqrP*HYTq60?l6rU@=#rGH(YXsEEGv-e$i(%my%{wEwsT$Byq$ zslUF!LHZf&(iCV>;Qv#M(?N3OPZiT&!jkgo#)p&VDs*}A9#5Y^24Z4sc>m^n@B5-# zW11ib(Moy%01w*#d8{B&l};jrIXd+e&mjuV7;__C_A3sLxRepCCB`B=*mPkC@-saI zIH*lkcCjIY^Hz@52K`Y{BPG+6z)XqNk)O z@UwI(iog*hphGMOY`*^`laW_&Q*8q5m2$c~wIBrh#x2ng)N>wQ0#C}>!v6iA^W_=- z#<)MY57FfmpjR^2n@yD*>ca8Yb`IQvv?+Ow1l^yzAx6wbkAj=UPzzE>_`TSFIc!C`4-{R%EA*dI`gJU%menK$gQ%{dN9-^}gt714yQ56wa z2uQC7-1Zr?aS?|M?-a`)FU|KCA_XuWcLvs?Z#F(L6=xtZ-X$VXdc2Z4sq@1W~Pn$K*5I22FM0C@LRkpJChg$>-uGd^Hm0i)IkEEmMM zg~MQh#6P(F6QnHSA1@mQ-`EvuTW#~Gs-EaVqo{-=`csSsguc1j<;|d~XO#uOS0x02 zN|z=1=jp=Q2n3^G_<2$dv1bMF+aH@(X^s4EAa2Cf3ofwkO+XIZ4vrlx_*fHv*T3)0 zvylHUCQlQDJepzsdYeaP|`gw=x+lnUD^UG{J0wo|b;h4asIVx)Wr z4=TV%1hL1@?f?mw_SKRHq0zVaeZ}n45{%})$4{JW>`1=DWHVNc$eDlmv&tkG-yo`T z?@{K&u*!f#+g#yEH6Md=dNg_>9Bi7?xdDi)RkPIPs_Absag)Uzj1VFMPeh9d zO2eNJDSFqtNU%dK>Q-Xh7AN?N9tq(}tcKN*;>=k7ty#p=Mier1YCSa9rm)O}6!g5_ zeLT30*`K@jyE%=Re<{w~LafPCJS4GK4O-G@_32mV*{*_$?rHWQjlYf+q~=edQj+D7 zWV{3qo)b}O4tKH3>JJ|CuB)*5+ST|NfVZ`=IIMxFlb=OfO#H@j)j`2G9eq8@Il2Ne zTINuxI4UgEdb*>uRk6b#o}>`z=p%|G5XfJb6gtqX3Z(mXrwb0D06AZfs*!=j#uO}> zt{hDi0=4^56wmv&z99hUMXXJUvRH(x9|&*fli21~JJy>>(0Z zeG6uYLPQ~<(q^;8TO5h0Tm5?RT`{U|Z%wWVW+ul!qCiLv0~wPN%YMZ%??cZWIFnk7 zoXPIY_hcG*`Sb!%?;x~%+)Eo#B9E@K#At0p0jzD$6OKHj48DFtm*)`5VNDr{UaaM# zPO*=N%UWB0?LY}bp&%p-=;vtBvsn8hGiSJd}kpipQ1>49e+ zSh{P`9-w;<9vN$>u=CP0+b$Zs$_?FlH4w0O1&M5=XMzVD`Lm4{23ioDzzZlx@^WaF zYEGqoIc%S(c&SKkU0*UpN7r(C3^t(*8G)o?`f{}u>W2{*+pnOk0+ch~VOL9aW#}T$ z%^F%n6`q}STJu7d%DLn5-^ZbYa-DdeNfX-hZoAU8{|$8isuwGD!Zz_?`tvxzs&Im) zIuGjH<}v!*#23Ld_hE|QbBl{SXG@N1W+=!8UpGv|Qt7#T6v@Z#Z!L{lZjJP$EznSE zMUB}!51~QNm4YF$?`TK7gpcCj@z4}O6;agvl9+X=3Ug_sj`G`TKS z%uIskGaV12^8&>JqNc7(L#1*wyk-XIa0|2f`D0f-gHINKCIgRE`BS-3W>xV#vBJIN z0Zt?Td?Xi8zXa|k>%M@bx8~+|e})kSJzP=3Dt`60&oDIMiU}fu z4=AHmqh|*f-B@!^213-rjjawNLGkhSntboqbGLeT=XDOZ%J#9|5S8t&4X8S>li8Q< zS01L%q#e)T^z7&6RgZ$3${A9sKyFI*NDi*EVcMbHc)#55UoI&QM3`o)#Ztb)k>rn9 z+3E&)GMqzZMVmqAL}$#GGZxY29H@RqX6*|Z ziPA3eI6YdF*g@`&5f8i=R9$MfB?QVh;x!qhJu8l~@UQ~%kZhMK;v4Z(f*G8mL$d~P z7WYk!y1jo>Dk9v&je_{($VV2ww_V)hoUdD@uIII5BIvS`Bp3p_rnA9i!@(h*1GWyq zSqsqW8=&1P28WQ>W-#}Jk3$)Z zU#vpo5YPAIQuZo{FQ+$b=exohHYW(kjyYhzjoJl8*r&{t3$pID$+I zvpI*gs*vvD9F|G><6H%3fQRI=s5t~b^#%^D=u9&jnrl>TnjhcQ;lQLDj2X60_H54` z7o#C|6Hk$A+O&7O8LUV1X0AnHS#DX_emZcn1+$*z?6L%Xs_yjSUL)1*`uiYhW2k2n zF{`O=x2QBX_>fdcI0(*)#G|vq0CMODNNhibt=#`#j_D?7B6bUUN-BUW_y)-Mx94@d z36DMBQa2T89e8q2{DB-em{C5~Y)C#tg=KUI@iVuw7)$@fW_57Rkb(y#QGXKr*<{D3 z^opt279>qyVK+s*XhQBD1EL$`DV5+HU-ad-8bV^$$+BT<)Nr=#zr+U$oS67drJggO zuc!kqYMb!Qr>#Z{cPXR5&ymm}`IXQLQ7)eqEg;1a!HOrNdNhAhtsqqe+I@0Lh!ba9 za?Ce8rHU&(!gS$tc;cti67}ElAa<)pRMj>NDxe16_dPdx7j_aj3m-rov72sRo(+C% z8g89`nen1VaG}x9wqy&qS9f2CWMn|uUS8Cnf`Jpl;H1TQd4j(&a}})2VX0$_5bA25 zqLdzdcac_;=e0+lN_1tEeFhY)5(7>z=lDSqXF%QoFG1QbROpw<5fY|KE zj1r6{eu}nc=l>HXU%Z(G0`_G`(vOo+qvqR0BubG4Xj$gP^Zz1&Y{=JApNB8tLk9hw zk2{FSbMcJ6CDTcj!naVz%dgpr@qqe0_-&_=5^3(-J(GX#d?BPyt{}DO0#K|7Usk;7 zI2SGg2YweMd$ScWy(Yd;?m&7m`eqtHK{o_C8KO1$-+q810W+dj>{8k`xyp%T>k#p8 z(2@#=y4SspWu$H%$RMt_Hq*`!X>r5p)2Bu`SPfHnb^BY|pS&bM zky!F)@Ctz>wo2{J^hKopA+pwZ<=V3i0Tmvm^95*bi}&y44jo>!fU|lQZFZ8Uq0=6n z{sL3uwkdmxt!DmABW{Ck+;cm=9h0zo!WP`F)&;qF;;RyyIa1Iwhu}P9H{M9J{2f$5 z?z8;V88^!EcmdYu*ouHPK7&|X5KWS8JPPfV(Mq13!LkQySGwbq|jJLvT1O3lFEB8pGvcbdrl6= z79(ey2r(oWwUHDP(k+mqQ^7+YD;@jissEocp@hh(XJ@2$w99gC89*e~+O>RtJE*7L z8j411KwRF{xo7>{;d?X&Gje8G%yYL9)OwfiCcn$yzfl9jO-nYjmMt!vsQxWTMm6A< zCZH4?%hC=)EICe>-^N198-`^fpL4#}D3;)g_oZpc>4P!BB*&j(h=JpP;jT(}8kqBh zAgPwMBT4@+2pK?{CiV7jS;0@GAuAfjpDOPz!7`!}ZIST4&IY~gh}v*VUr&-X97O1G zY_QmFBdu%-iUYD{CXvRL|CK}5#r6Ahs+Ny@0Ak_8$$%EEP;wN)#xEw_gMy`)DS9rj z6^Yg%h_Fm>g^Z+R)R&nSj0)6YX37^0YrbCzye`Sf$EYs{wABBF>iun_!>n%g& z5il+z$psqWb=wNc-M#Nk}#&A`d%QaacY&jTd`@DPSLYtE(!b#z6h%Ym4#PIJYD0sbkKuv*t zeK22b2tqh1aPWE4>>njflo3_RM~|F#Q+N*9f0uKISw9j`r;$>ur(LU+n|hwRC9#_M zbl$pgw`Ocmp{X79h-y>~5A{>bG10#d1A(QXmllVmYM45K_Uy8bVCgKNtMcG$AX; zn^dBl1AiopRFoJYzd_jSD)Z~@D?f)-XpY_-Rs~LzHM7&x&joX4ey122snDt)^rY~( zq;VDE@)+pl@VA4rU-exdjjE}eT`*Qene;1R$jKTvcWgcOM13vU4mtJmZ2J|x-#jsB z{br7c58>YNI>_w44z4G{;*@^fD*^tK2RB&ZA7$9wyo_2%EuDMP+8(IYpx=w_U{f&R z#}I(}Mw-I&N?XSvDC<~@oJ)I@G;i0?SWUgYdu;7>FJ-L3ScsS*A%R=WAlWjfb3kF? zYPB~-m*PajK{cyagc=42tmO4RLL4Kd=q9EIWEg+GIQ~7~$Svf96JLfPH!|o%-i0s! zVQ4NtBGX-rX&%#J`LL!xy7mob+`UW06pZdi#OU(qCRYIT&8;{_NamLv^BHR7LAa(N z=z@G7NS9=0E@Ox;gSIu74i-O-I!(9lMUd>vEr$T!V+~DEZKWHYA7?GTOZ4WC?A6 z9iiH$6P@CpVY4d#_zH5DU%ra_zIcb`|e$8U9v3EFMjGCEw9R4L|ny0Uh;bf;Xq2xFn) zJ6N|nxBSpd2V@A0$YZ|Y;<4D({lR)$0BtqhzpEPQFb|x7kI57QJ0UJcDKtqhaVj$s z2d6L<(u5LPu2JI*!ahL*Xp*6#+xs$tZQ)J2zir@HIl&l$8P6&EUIzq)0x$P*1T&|1 zbSX2;v{GhX(Arla`*K3T&CZ=Zy(w&ADLHsaQaLQNq zv73Dw8F#$wR#95?u+7TD4qVX)?!N&iJ&3}PWl3jdOnvDg@&(3AQYeN%=G~KZVpJLC zR|b#5l@a3Ykkpm=A5H-y88?vzg&TC3(1y(8H)Q&_(le3i(}PxP&$ym!auBmnARxcM z#G4FCyQ+n;$28o^GNabG#JR0bkY=#%$8UcOxVnWx03QNVKY%81S3Hz?KJ48(x9Vwa zkp{8R43|)^x(Rm7YXjN71a`pTivc2`0(J+;UX7pxAE$xwuesf>^lz1AhEz{ZeT2$Db0o`Ur1psfj-okQmy4z9V~$)2EPpr z++VuJ3;)LTfo|RE5=jkE_$aFq@*0Tg@>)ETizH7sc zvG9s_x548%R+mq5?aB{g03e*)6z} zyDf?xqv7KDtHc?C0)&*REl>)cdy2G_oK7-ar`d$KQeaOxhbnI@`RaT~^Nf6~AR(oU z5oP7uu;nSiS~fTa@nG}tmeX5Oqz@dCTN5x`f+@Gp8q{2$MglY%I0}>W(G8bJtpNIo67l)i7SWH%wL;J1oCWq}YKc{oJFYGQXeumSD~szh38!G&$S1?>hFH|udT|3!3{Mf=^+vB1&GUa0suQGlo&vG z6HxeRLuUX9M3Mk;k;ummkh!!J_M7G$xeZf}N|QVVumI z`PXP7>Hv)yBm_;|g$B}1a9LbRe9-UNBt<)m_(>$x%=8qHHG06mIf7mB>~SyC0nft; z78Hh(JoRP;?ms?`1L_Fc4dGO36#u*Bh#Q2`Pj(KS1Lke1S551UWbYTnw*p~nHMDRLhFPRXz_JDs6d zdqY0bbQsA7$~&_p>Q1k+6*!zKKVWlxcp{;B(XeSU@AA&krM5r|v@M}Z6S9e|3Y+iR z5>lVG?MX9TT6*65qNTq8eW>8|(v)6lo0P7oC!615{c&i-+R%%t+MsTb+iHuoNNb^u z5*{5?iU@rpwgcZ=1ghN+XPb_p^5sp?#^SbxGe+ zSDV*n6}R4z#~gio1B-5?x~udGK?Y93kI3TrBd^VqN1NKr@#2O4*Em-V6wCG&_g}Zr zwQDLk&~7#XZ72=f^@LuFPZ)x^i#)Jio}#Fvs<@3PK+ws3_@q5t0a;>BErm<%&n`KW zvRbUG4pk>EiN@}&ww)-S2qR_HbXS@95|pKi%%)Y8#`3CfI({dp>-2poy{m&*0nVCg z0EqOqpP1Q%8n0ZOc+q_6Y_GI>*sgo=lGZp=PbZe$-J?oRTHCswoL;j2?shEIG8wn! z9way3m-&!%VspmKlN-d&9JL{ntk8R#@BAskwu>1*Ix3l<-=eBgM7MqV{gJ-&1*>9= z_Pxod&dZcGFY}O(l`rj*`I`8Mt5yehd;i1+PQG?j<99(aBB#C)(H!Kp2x@}y&24!F z`uz-6b~yY8H}o63>~ncen~~G?QufHeYQ^*?Pk(*%6MyVY9etx9Q#qe!CI|uey%Igb&w304Jd8ya|Bw0+sdTUXB@L! zxS0kzgB*}i{Qxzk((hzypqtR#L?cIgwXu%)-6n>oR&`N-{+;5B47F$B8Wia+3QuF= zdvZNBDE>upww`22euBYaN0gY ztvgx@8bIzm*mJq|_)8jSM0WFM2F+WMj)Qn~q72u@j;fY?=CtAh$&^O*@l)Be{#04d zAxKJz4(Pn?Lhi#il`SrBy>UKfcrn}tQ%G+Ydj9rI?b~QlblBZ^>Z9)uc=8#RL6)NL zv?R-?c}5njbOqnAw`<3Iy>jOO2BTG+!*)cT7+>&UlFR~!~hZVWK-{G=OK{5GI zDBDnk$2WUOU&5q}<&e~aq!-UBCP^kbTDaxm^pjok`mXrec-z_azBa$!d}rT^f~i&! zAVP0JzIJ(bQ)l%FbP+f=;&*o(+CRUzBk#p4q9HInt|%t66YJdEI4#*Z1* zaQ(*zI@z1=1R08@yo7p4u`P`yvjR>S%)^7%7S|Sh<1Xf9b+#a)P&1W)KMexnuIn5E z&~tNt+EZ+9t#psikCG#OL5J-t%8K46car!cmO}?4EdL-Vxbu_za%+crJ5imB_0UZ) z6;DKI1{KW>Z?U5{p}v-Uc`8CKaVR=jYXJI;TdXI1F841jGQ{K_K}>~Vtz0(G)QFCt z+XS(6MrmiEuQ&C0kUbLP#&7FWI;yH0R4BE)FGNZBNMch_0UmF4&L*DlF+;fz*xB0V zivTW)kg1iTe&w+;{`5`M6w3wcg79NuU(R{$UdSF=j7MvW$BU)hl-!QRU^Hr`{Wo%( z*JvjjRdpPqDUgMVKxdRW`@2C2vnO~y{o2%G;9b@&zYowabLvuxm6M__Ft9qQwEU%G z%*1qTGLf;kwyU|c z+%-k%d>y}FtxM-DePHoU4SQ)B()Ej7Iz$0_3e(GhyF%)w3^wT&V>(eg5^qLvIVtZt zFcATTlAL-v$@(Fo?UY4GcT@-=I0}r6u=?ODuybQ{IbXL|*+thQm9b``=2-fs_P}&$ zuds0tx=*d7j}<2Q{1#8BEKDj=5096WOrUUMZe+ej@cmVvdd;!kv&H*{$qV0ag%YE$ z1;Y~Z1t;VL%iNMj`LG=uCRT%zx<2%=W6mtMfA@sj7ZMX90!J$ z$HNv#*W`oU{dk$+^PSxnZ79d^dvmvQm`+M^gfzZvD375RS^s|M8(+`hAYLzC$|NNs z5bWE^@w$8e9`Z-FBi7|c2#yJ=69eZj5v<(VZSpHW-+>gV=&2F2id~RVpfBM#%0%S^ zwkwnvCzD6HM`j+q0*ZhF%cPpIJi!iGWBS|Fqw4WK)#D4ntiq4E8_3=!={qChf_`oX zw@-Jv7KHDqD>FYyGtaV5CABYJml8AcX~hqMX#VI*nu3?8S{o}0%6H>&`!@}SY>Iv7 z9JXjK%9D6Qi9GFhCALVmBjx@)?V#o$B<({fHe7MQS+6Q)t9t#KjeL=fMV#9+2U4tN z_GUyhM^OQ>_K*3Tz!-KEa~j?yEqFqK`IzCWX>oqxj0n7+HG{%Q@4QbH*2?O-j4D%b z$IzPmXxkNUds&s!B$e5x9cn)0Q#?iXo&+U=ewyOD2i`Rh4@MYT-P}BiQw19K&Kw{~ zFZ-Iv>Ue+=@!-Wswh1JgS?Wkl)#N#PCiL5%nYvYB`DgI5{Y*J-ohbtE%K?@Uv`CT8}>Ns$~4 zlFZD$s{HP&^45BsvRPGnMQisBn#_e#@|I+kpOe=|ZtIWd+g4X1MF}!VvQxCP$}iqm zios0Z@b7dP42n&k3P=ekNcDOa{jMFA3E*Hfm=dClb8=acc`?kSEpZ}=q> z?MLSBC}}WWQ=3xo#0;WHLbI~vA0Ahp)5?L+_5VhFiMECp(=(nmFhtfUFTeOit z(AT3x^CAKj6djrtcXy(Ev_97f`Zh*ki0=4+VL#djKrFxw7F;Yfu2OLUlmoGN;xcdHb7+!BNzOfn9e!pWQ%yDDk&?4A=Iq zZXF<1?n}lvAHBbk7Pj_bpS9~I?2*WVI}*3x*K7BK8aaqP^B&Fay&(HL**lO^t8f_- z2jZ8P7HoE|?NH){LtxE!5kn!Oi!zN#`e3z+Gj(+K>JR<%6#!4# z0&ENKKiDr_Pkyt{Bs>fU&f9M<4A*`=#Np=NU$HJkO@eY?Rg>7~sw+tw^qRFT zjne>Jkv-}neAxB-Un;I_kC2RGJ7ePymC9D{BZF*VKcW1{y~pY8uGp{c!cF@i+LQtMzIqW1&^R1kdE{q5040f}iRE zS>cn`VN?V97ZT!;xA#K-i?60)W1o-U(9CWTruOyZxHl z{P1OMS7Us^YX{4%jlNG+pJysK>fS6Ceh$BM=#;>E0iE>?63%_m*91s{85NunR^A>- zk3V@1bOX`VT4`&tqP1;Q_nisQ%3$7CC7ThnvV+CwB-~D1*#Hg4T~S`m-Th@D)|aFW zpzGU(@;U2F!#@kP`jcuL%)MIu_uu~aHMh2=8X(9)RrV$PmuIU1Y{J6&+TmXt;6HER zvVn~{5@^Eze?NPRI85@P{jvY$!@OZTWR0J7`7h7@{{}r5=G;?#5g%gld=vcB(KOH~ JJbf|ze*h>JRD%Ej -- Gitee From 7e047f6485d80f1e548fe19a2f0c5682640a9605 Mon Sep 17 00:00:00 2001 From: yuliangbin Date: Tue, 7 Jan 2025 11:02:22 +0800 Subject: [PATCH 2/5] [fix]Add cases of profiler --- .../model_train/optimize/profiler.md | 337 ++++++++---------- 1 file changed, 157 insertions(+), 180 deletions(-) diff --git a/docs/mindspore/source_zh_cn/model_train/optimize/profiler.md b/docs/mindspore/source_zh_cn/model_train/optimize/profiler.md index 0b8b79ae97..b194f81c54 100644 --- a/docs/mindspore/source_zh_cn/model_train/optimize/profiler.md +++ b/docs/mindspore/source_zh_cn/model_train/optimize/profiler.md @@ -1,32 +1,32 @@ -# Ascend性能调优 +# Ascend Performance Tuning -[![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/model_train/optimize/profiler.md) +[![View Source On Gitee](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source_en.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_en/model_train/optimize/profiler.md) -## 概述 +## Overview -本教程介绍如何在Ascend AI处理器上使用MindSpore Profiler进行性能调优。MindSpore Profiler可以为用户提供算子执行时间分析、内存使用分析、AI Core指标分析、Timeline展示等功能,帮助用户分析性能瓶颈、优化训练效率。 +This tutorial introduces how to use MindSpore Profiler for performance tuning on Ascend AI processors. MindSpore Profiler can provide operators execution time analysis, memory usage analysis, AI Core metrics analysis, Timeline display, etc., to help users analyze performance bottlenecks and optimize training efficiency. -## 操作流程 +## Operation Process -1. 准备训练脚本; +1. Prepare the training script; -2. 在训练脚本中调用性能调试接口,如mindspore.Profiler以及mindspore.profiler.DynamicProfilerMonitor接口; +2. Call the performance debugging interface in the training script, such as mindspore.Profiler and mindspore.profiler.DynamicProfilerMonitor interfaces; -3. 运行训练脚本; +3. Run the training script; -4. 通过[MindStudio Insight](https://www.hiascend.com/document/detail/zh/mindstudio/70RC2/msinsightug/msascendinsightug/AscendInsight_0002.html)软件查看性能数据。 +4. View the performance data through [MindStudio Insight](https://www.hiascend.com/document/detail/zh/mindstudio/70RC2/msinsightug/msascendinsightug/AscendInsight_0002.html). -## 使用方法 +## Usage -收集训练性能数据有三种方式,用户可以根据不同场景使用Profiler使能方式,以下将介绍不同场景的使用方式。 +There are three ways to collect training performance data, users can use the Profiler enabling method according to different scenarios. The following will introduce the usage of different scenarios. -### 方式一:mindspore.Profiler接口使能 +### Method 1: mindspore.Profiler Interface Enabling -在训练脚本中添加MindSpore Profiler相关接口,Profiler接口详细介绍请参考[MindSpore Profiler参数详解](https://www.mindspore.cn/docs/zh-CN/master/api_python/mindspore/mindspore.Profiler.html)。 +Add the MindSpore Profiler related interfaces in the training script, see [MindSpore Profiler parameter details](https://www.mindspore.cn/docs/en/master/api_python/mindspore/mindspore.Profiler.html) for details. -**Graph模式采集样例:** +**Graph mode collection example:** -**Graph**模式下,用户可以通过Callback方式来使能Profiler。 +In **Graph** mode, users can enable Profiler through Callback. ```python import mindspore as ms @@ -53,41 +53,41 @@ class StopAtStep(ms.Callback): self.profiler.analyse() ``` -完整案例请参考[graph模式采集完整代码样例](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/graph_start_stop_profiler.py)。 +For the complete case, refer to [graph mode collection complete code example](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/graph_start_stop_profiler.py) -**PyNative模式采集样例:** +**PyNative mode collection example:** -**PyNative**模式下,用户可以通过设置schedule以及on_trace_ready参数来使能Profiler。 +In **PyNative** mode, users can enable Profiler through setting schedule and on_trace_ready parameters. -例如用户想要采集前两个step的性能数据,可以使用如下配置的schedule进行采集。 +For example, if you want to collect the performance data of the first two steps, you can use the following configuration to collect. -样例如下: +Sample as follows: ```python from mindspore import Profiler from mindspore.profiler import schedule, tensor_board_trace_handler STEP_NUM = 15 -# 定义训练模型网络 +# Define the training model network net = Net() with Profiler(schedule=schedule(wait=0, warm_up=0, active=2, repeat=1, skip_first=0), on_trace_ready=tensor_board_trace_handler) as prof: for _ in range(STEP_NUM): train(net) - # 调用step采集 + # Call step to collect prof.step() ``` -使能后落盘数据中kernel_details.csv中包含了Step ID一列信息,且Step ID为0,1,表示采集的是第0个step以及第1个step数据。 +After enabling, the Step ID column information is included in the kernel_details.csv file, and the Step ID is 0,1, indicating that the data collected is the 0th and 1st step data. -完整案例参考[PyNative模式采集完整代码样例](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/py_native_step_profiler.py) +For the complete case, refer to [PyNative mode collection complete code example](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/py_native_step_profiler.py) -### 方式二:动态profiler使能 +### Method 2: Dynamic Profiler Enabling -用户如果想要在训练过程中不中断训练流程,修改配置文件,完成新配置下的采集任务,可以使用mindspore.profiler.DynamicProfilerMonitor接口使能, -该接口需要配置一个JSON配置文件,如不配置会生成一个默认配置的JSON文件。 +Users can use the mindspore.profiler.DynamicProfilerMonitor interface to enable Profiler without interrupting the training process, modify the configuration file, and complete the collection task under the new configuration. This interface requires a JSON configuration file, if not configured, a JSON file with a default configuration will be generated. +This interface requires a JSON configuration file, if not configured, a JSON file with a default configuration will be generated. -JSON配置样例如下: +JSON configuration example as follows: ```json { @@ -103,35 +103,35 @@ JSON配置样例如下: } ``` -1. 用户需要在实例化DynamicProfilerMonitor前配置如上的JSON配置文件,详细参数介绍请参考[DynamicProfilerMonitor参数详解](https://www.mindspore.cn/docs/zh-CN/master/api_python/mindspore/mindspore.profiler.DynamicProfilerMonitor.html),将配置文件保存在cfg_path中; -2. 在模型训练后调用DynamicProfilerMonitor的step接口采集数据; -3. 用户如果想在训练中变更采集、解析任务,可以去修改JSON配置文件,如变更上述JSON配置中的start_step为8,stop_step为10,保存后,DynamicProfilerMonitor会自动识别出配置文件变更成新的采集、解析任务。 +1. Users need to configure the above JSON configuration file before instantiating DynamicProfilerMonitor, see [DynamicProfilerMonitor parameter details](https://www.mindspore.cn/docs/en/master/api_python/mindspore/mindspore.profiler.DynamicProfilerMonitor.html) for details, and save the configuration file to cfg_path; +2. Call the step interface of DynamicProfilerMonitor after the model training to collect data; +3. If users want to change the collection and analysis tasks during training, they can modify the JSON configuration file, such as changing the start_step in the above JSON configuration to 8, stop_step to 10, save it, and DynamicProfilerMonitor will automatically identify that the configuration file has changed to the new collection and analysis tasks. -样例如下: +Sample as follows: ```python from mindspore.profiler import DynamicProfilerMonitor -# cfg_path中包括上述的json配置文件路径,output_path为输出路径 +# cfg_path includes the path of the above JSON configuration file, output_path is the output path dp = DynamicProfilerMonitor(cfg_path="./cfg_path", output_path="./output_path") STEP_NUM = 15 -# 定义训练模型网络 +# Define the training model network net = Net() for _ in range(STEP_NUM): train(net) - # 调用step采集 + # Call step to collect dp.step() ``` -此时生成的结果文件包含两个文件夹:rank0_start2_stop5以及rank0_start8_stop10,分别代表采集的step为2-5和8-10。 +At this point, the results include two folders: rank0_start2_stop5 and rank0_start8_stop10, representing the collection of steps 2-5 and 8-10 respectively. -完整案例请参考[动态Profiler使能方式案例](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/dynamic_profiler.py)。 +For the complete case, refer to [dynamic profiler enabling method case](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/dynamic_profiler.py). -### 方式三:环境变量使能 +### Method 3: Environment Variable Enabling -用户如果想最简单地使能Profiler,可以使用环境变量使能方式,该方式只需将参数配置到环境变量中,在模型训练中会自动采集性能数据,但该方式暂不支持 -schedule参数方式采集数据,其他参数都可以使用。详细配置项介绍请参考[环境变量使能方式参数详解](https://www.mindspore.cn/docs/zh-CN/master/api_python/env_var_list.html)。 -环境变量使能方式相关配置项,样例如下: +Users can use the environment variable enabling method to enable Profiler most simply, this method only needs to configure the parameters to the environment variables, and the performance data will be automatically collected during the model training, but this method does not support the schedule parameter collection data, other parameters can be used. See [environment variable enabling method parameter details](https://www.mindspore.cn/docs/en/master/api_python/env_var_list.html) for details. + +Environment variable enabling method related configuration items, sample as follows: ```shell export MS_PROFILER_OPTIONS=' @@ -144,56 +144,56 @@ export MS_PROFILER_OPTIONS=' "profiler_level": "Level0"}' ``` -加载完环境变量后,直接拉起训练脚本即可完成采集。需要注意的是该配置中**start**必须为true,才能达到使能效果,否则使能不生效。 +After loading the environment variable, start the training script directly to complete the collection. Note that in this configuration, **start** must be true to achieve the enabling effect, otherwise the enabling will not take effect. -## 性能数据 +## Performance Data -用户通过MindSpore Profiler 采集、解析后的性能数据包括框架侧、CANN侧和device侧的原始性能数据,以及解析后的性能数据。 +Users can collect, parse, and analyze performance data through MindSpore Profiler, including raw performance data from the framework side, CANN side, and device side, as well as parsed performance data. -在使用MindSpore进行模型训练时,为了分析性能瓶颈、优化训练效率,我们需要收集并分析性能数据。MindSpore Profiler提供了完整的性能数据采集和分析能力,本文将详细介绍采集到的性能数据的存储结构和内容含义。 +When using MindSpore to train a model, in order to analyze performance bottlenecks and optimize training efficiency, we need to collect and analyze performance data. MindSpore Profiler provides complete performance data collection and analysis capabilities, this article will detail the storage structure and content meaning of the collected performance data. -性能数据采集完成后,原始数据会按照以下目录结构进行存储: +After collecting performance data, the original data will be stored according to the following directory structure: -> - 以下数据文件用户无需打开查看,可根据[MindStudio Insight用户指南](https://www.hiascend.com/document/detail/zh/mindstudio/70RC2/msinsightug/msascendinsightug/AscendInsight_0002.html)指导进行性能数据的查看和分析。 -> - 以下是结果文件全集,实际文件数量和内容根据用户的参数配置以及实际的训练场景来生成,如果用户没有使能相关参数或是训练中没有涉及到相关场景,则不会生成对应的数据文件。 +> - The following data files are not required to be opened and viewed by users. Users can refer to the [MindStudio Insight user guide](https://www.hiascend.com/document/detail/zh/mindstudio/70RC2/msinsightug/msascendinsightug/AscendInsight_0002.html) for viewing and analyzing performance data. +> - The following is the full set of result files, the actual file number and content depend on the user's parameter configuration and the actual training scenario, if the user does not configure the related parameters or does not involve the related scenarios in the training, the corresponding data files will not be generated. ```sh -└── localhost.localdomain_*_ascend_ms // 解析结果目录,命名格式:{worker_name}_{时间戳}_ascend_ms,默认情况下{worker_name}为{hostname}_{pid} - ├── profiler_info.json // 多卡或集群场景命名规则为 profiler_info_{Rank_ID}.json,用于记录Profiler相关的元数据 +└── localhost.localdomain_*_ascend_ms // Analysis result directory, named format: {worker_name}_{timestamp}_ascend_ms, by default {worker_name} is {hostname}_{pid} + ├── profiler_info.json // For multi-card or cluster scenarios, the naming rule is profiler_info_{Rank_ID}.json, used to record Profiler related metadata ├── profiler_metadata.json - ├── ASCEND_PROFILER_OUTPUT // MindSpore Profiler接口采集性能数据 - │ ├── api_statistic.csv // 配置 profiler_level=ProfilerLevel.Level1 或 profiler_level=ProfilerLevel.Level2 生成 - │ ├── communication.json // 为多卡或集群等存在通信的场景性能分析提供可视化数据基础,配置profiler_level=ProfilerLevel.Level1或profiler_level=ProfilerLevel.Level2生成 - │ ├── communication_matrix.json // 通信小算子基本信息文件,配置 profiler_level=ProfilerLevel.Level1 或 profiler_level=ProfilerLevel.Level2 生成 - │ ├── dataset.csv // activities中配置ProfilerActivity.CPU生成 - │ ├── data_preprocess.csv // 配置 profiler_level=ProfilerLevel.Level2 生成 - │ ├── kernel_details.csv // activities中配置ProfilerActivity.NPU生成 - │ ├── l2_cache.csv // 配置 l2_cache=True 生成 - │ ├── memory_record.csv // 配置 profile_memory=True 生成 - │ ├── minddata_pipeline_raw_*.csv // 配置 data_process=True 且调用mindspore.dataset接口时生成 - │ ├── minddata_pipeline_summary_*.csv // 配置 data_process=True 且调用mindspore.dataset接口时生成 - │ ├── minddata_pipeline_summary_*.json // 配置 data_process=True 且调用mindspore.dataset接口时生成 - │ ├── npu_module_mem.csv // 配置 profile_memory=True 生成 - │ ├── operator_memory.csv // 配置 profile_memory=True 生成 - │ ├── op_statistic.csv // AI Core和AI CPU算子调用次数及耗时数据 - │ ├── step_trace_time.csv // 迭代中计算和通信的时间统计 + ├── ASCEND_PROFILER_OUTPUT // MindSpore Profiler interface collects performance data + │ ├── api_statistic.csv // Generated when profiler_level=ProfilerLevel.Level1 or profiler_level=ProfilerLevel.Level2 + │ ├── communication.json // Provides visualization data for performance analysis in multi-card or cluster scenarios, generated when profiler_level=ProfilerLevel.Level1 or profiler_level=ProfilerLevel.Level2 + │ ├── communication_matrix.json // Communication small operator basic information file, generated when profiler_level=ProfilerLevel.Level1 or profiler_level=ProfilerLevel.Level2 + │ ├── dataset.csv // Generated when activities contains ProfilerActivity.CPU + │ ├── data_preprocess.csv // Generated when profiler_level=ProfilerLevel.Level2 + │ ├── kernel_details.csv // Generated when activities contains ProfilerActivity.NPU + │ ├── l2_cache.csv // Generated when l2_cache=True + │ ├── memory_record.csv // Generated when profile_memory=True + │ ├── minddata_pipeline_raw_*.csv // Generated when data_process=True and call mindspore.dataset + │ ├── minddata_pipeline_summary_*.csv // Generated when data_process=True and call mindspore.dataset + │ ├── minddata_pipeline_summary_*.json // Generated when data_process=True and call mindspore.dataset + │ ├── npu_module_mem.csv // Generated when profile_memory=True + │ ├── operator_memory.csv // Generated when profile_memory=True + │ ├── op_statistic.csv // AI Core and AI CPU operator call count and time data + │ ├── step_trace_time.csv // Iteration calculation and communication time statistics │ └── trace_view.json - ├── FRAMEWORK // 框架侧的性能原始数据,无需关注,data_simplification=True时删除此目录 - └── PROF_000001_20230628101435646_FKFLNPEPPRRCFCBA // CANN层的性能数据,命名格式:PROF_{数字}_{时间戳}_{字符串},data_simplification=True时,仅保留此目录下的原始性能数据,删除其他数据 - ├── analyze // 配置 profiler_level=ProfilerLevel.Level1 或 profiler_level=ProfilerLevel.Level2 生成 + ├── FRAMEWORK // Framework side performance raw data, no need to pay attention to it, delete this directory when data_simplification=True + └── PROF_000001_20230628101435646_FKFLNPEPPRRCFCBA // CANN layer performance data, named format: PROF_{number}_{timestamp}_{string}, delete other data when data_simplification=True, only retain the original performance data in this directory + ├── analyze // Generated when profiler_level=ProfilerLevel.Level1 or profiler_level=ProfilerLevel.Level2 ├── device_* ├── host ├── mindstudio_profiler_log └── mindstudio_profiler_output ``` -MindSpore Profiler接口将框架侧的数据与CANN Profling的数据关联整合,形成trace、kernel以及memory等性能数据文件。各文件详细说明如下文所示。 +MindSpore Profiler interface will associate and integrate the framework side data and CANN Profling data to form trace, kernel, and memory performance data files. The detailed description of each file is as follows. -`FRAMEWORK` 为框架侧的性能原始数据,无需关注;`PROF` 目录下为CANN Profling采集的性能数据,主要保存在 `mindstudio_profiler_output` 目录下。 +`FRAMEWORK` is the performance raw data of the framework side, no need to pay attention to it; `PROF` directory is the performance data collected by CANN Profling, mainly saved in the `mindstudio_profiler_output` directory. ### communication.json -该性能数据文件信息如下所示: +The information of this performance data file is as follows: - hcom\_allGather\_\*@group - Communication Time Info @@ -244,7 +244,7 @@ MindSpore Profiler接口将框架侧的数据与CANN Profling的数据关联整 ### communication_matrix.json -该性能数据文件信息样例如下所示: +The information of this performance data file is as follows: - allgather\-top1@\* - src\_rank\-dst\_rank @@ -256,167 +256,144 @@ MindSpore Profiler接口将框架侧的数据与CANN Profling的数据关联整 ### dataset.csv -`dataset.csv` 文件记录dataset算子的信息。 +`dataset.csv` file records the information of the dataset operator. -| 字段名 | 字段解释 | +| Field Name | Field Explanation | |----------|----------| -| Operation | 对应的数据集操作名称 | -| Stage | 操作所处的阶段 | -| Occurrences | 操作出现次数 | -| Avg. time(us) | 操作平均时间(微秒) | -| Custom Info | 自定义信息 | +| Operation | Corresponding dataset operation name | +| Stage | Operation stage | +| Occurrences | Operation occurrence times | +| Avg. time(us) | Operation average time (microseconds) | +| Custom Info | Custom information | ### kernel_details.csv -`kernel_details.csv` 文件由 `ProfilerActivity.NPU` 开关控制,文件包含在NPU上执行的所有算子的信息,若用户前端调用了 `schedule` 进行 `step` 打点,则会增加 `Step Id` 字段。 +`kernel_details.csv` file is controlled by the `ProfilerActivity.NPU` switch, the file contains the information of all operators executed on NPU. If the user calls `schedule` in the front end to collect `step` data, the `Step Id` field will be added. -与Ascend PyTorch Profiler接口采集数据结果的不同之处在于当 `with_stack` 开关开启之后,MindSpore Profiler会将堆栈信息拼接到 `Name` 字段中。 +The difference from the data collected by the Ascend PyTorch Profiler interface is that when the `with_stack` switch is turned on, MindSpore Profiler will concatenate the stack information to the `Name` field. ### minddata_pipeline_raw_*.csv -`minddata_pipeline_raw_*.csv` 记录dataset数据集操作的性能指标。 +`minddata_pipeline_raw_*.csv` records the performance metrics of the dataset operation. -| 字段名 | 字段解释 | +| Field Name | Field Explanation | |----------|----------| -| op_id | 数据集操作编号 | -| op_type | 操作类型 | -| num_workers | 操作进程数量 | -| output_queue_size | 输出队列大小 | -| output_queue_average_size | 输出队列平均大小 | -| output_queue_length | 输出队列长度 | -| output_queue_usage_rate | 输出队列使用率 | -| sample_interval | 采样间隔 | -| parent_id | 父操作编号 | -| children_id | 子操作编号 | +| op_id | Dataset operation ID | +| op_type | Operation type | +| num_workers | Number of operation workers | +| output_queue_size | Output queue size | +| output_queue_average_size | Output queue average size | +| output_queue_length | Output queue length | +| output_queue_usage_rate | Output queue usage rate | +| sample_interval | Sampling interval | +| parent_id | Parent operation ID | +| children_id | Child operation ID | ### minddata_pipeline_summary_*.csv -`minddata_pipeline_summary_*.csv` 与 `minddata_pipeline_summary_*.json` 文件内容相同,只是文件格式不同。它们记录更详细的dataset数据集操作性能指标并根据性能指标给出优化建议。 +`minddata_pipeline_summary_*.csv` and `minddata_pipeline_summary_*.json` have the same content, but different file formats. They record more detailed performance metrics of dataset operations and provide optimization suggestions based on these metrics. -| 字段名 | 字段解释 | +| Field Name | Field Explanation | |----------|----------| -| op_ids | 数据集操作编号 | -| op_names | 操作名称 | -| pipeline_ops | 操作管道 | -| num_workers | 操作进程数量 | -| queue_queue_size | 输出队列大小 | -| queue_utilization_pct | 输出队列使用率 | -| queue_empty_freq_pct | 输出队列空闲频率 | -| children_ids | 子操作编号 | -| parent_id | 父操作编号 | -| avg_cpu_pct | 平均CPU使用率 | -| per_pipeline_time | 每个管道执行时间 | -| per_push_queue_time | 每个推送队列时间 | -| per_batch_time | 每个数据批次执行时间 | -| avg_cpu_pct_per_worker | 平均每个线程CPU使用率 | -| cpu_analysis_details | CPU分析详情 | -| queue_analysis_details | 队列分析详情 | -| bottleneck_warning | 性能瓶颈警告 | -| bottleneck_suggestion | 性能瓶颈建议 | +| op_ids | Dataset operation ID | +| op_names | Operation name | +| pipeline_ops | Operation pipeline | +| num_workers | Number of operation workers | +| queue_queue_size | Output queue size | +| queue_utilization_pct | Output queue usage rate | +| queue_empty_freq_pct | Output queue idle frequency | +| children_ids | Child operation ID | +| parent_id | Parent operation ID | +| avg_cpu_pct | Average CPU usage rate | +| per_pipeline_time | Time for each pipeline execution | +| per_push_queue_time | Time for each push queue | +| per_batch_time | Time for each data batch execution | +| avg_cpu_pct_per_worker | Average CPU usage rate per thread | +| cpu_analysis_details | CPU analysis details | +| queue_analysis_details | Queue analysis details | +| bottleneck_warning | Performance bottleneck warning | +| bottleneck_suggestion | Performance bottleneck suggestion | ### trace_view.json -`trace_view.json` 建议使用MindStudio Insight工具 或 chrome://tracing/ 打开。MindSpore Profiler暂时不支持record_shapes与GC功能。 +`trace_view.json` is recommended to be opened using MindStudio Insight tool or chrome://tracing/. MindSpore Profiler does not support the record_shapes and GC functions. -### 其他性能数据 +### Other Performance Data -其他性能数据文件的具体字段与含义可以参考[昇腾官网文档](https://www.hiascend.com/document/detail/zh/mindstudio/70RC3/T&ITools/Profiling/atlasprofiling_16_0035.html)。 +The specific field and meaning of other performance data files can be referred to [Ascend official documentation](https://www.hiascend.com/document/detail/zh/mindstudio/70RC3/T&ITools/Profiling/atlasprofiling_16_0035.html). -## 性能调优案例 +## Performance Tuning Case -在大模型训练过程中,由于一些不可预知的引入,导致模型出现了一些性能劣化的问题,例如算子计算时间慢、通信快慢卡等。需要定位性能劣化的根本原因,并解决问题。 +In the process of large model training, due to some unpredictable introduction, the model has some performance deterioration problems, such as slow operator calculation time, communication speed and slow card. The root cause of performance degradation needs to be identified and the problem addressed. ![profiler_process.png](images%2Fprofiler_process.png) -性能调优最重要的就是对症下药,先定界问题,再对问题进行针对性调优。 -首先使用[MindStudio Insight](https://www.mindspore.cn/mindinsight/docs/zh-CN/master/index.html)可视化工具定界性能问题,定界结果通常分为计算、调度、通信三个方向的问题。最后,用户可以根据MindStudio Insight专家建议进行性能调优,每次调优后重跑训练,采集性能数据,并使用MindStudio Insight工具查看调优手段是否产生效果。重复这个过程,直到解决性能问题。 - -MindStudio Insight提供了丰富的调优分析手段,可视化呈现真实软硬件运行数据,多维度分析性能数位,定位性能瓶颈点,支持百卡、千卡及以上规模的可视化集群性能分析。用户在MindStudio Insight中导入上一步采集的性能数据,根据下述流程使用可视化能力分析性能数据。 - -### 1. 概览界面总览数据情况 - -可以通过概览界面了解每个模块的具体内容。 - -- 首先,在MindStudio Insight界面中选择'导入数据'按钮,导入采集的profiler数据,以下为导入多卡性能数据。 - - ![load_data.png](images%2Fload_data.png) +The most important thing in performance tuning is to apply the right medicine to the problem, delimit the problem first, and then perform targeted tuning to the problem. +The first to use [MindStudio Insight](https://www.mindspore.cn/mindinsight/docs/en/master/index.html) visualization tools and bound performance issues. The results of delimiting are usually divided into three aspects: computation, scheduling and communication. Finally, users can tune performance based on expert advice from MindStudio Insight. Re-run the training after each tuning, collect performance data, and use the MindStudio Insight tool to see if the tuning method produced results. Repeat this process until the performance issue is resolved. - ![load_data_path.png](images%2Fload_data_path.png) +MindStudio Insight provides a wealth of tuning and analysis methods, visualizing the real software and hardware operation data, analyzing performance data in multiple dimensions, locating performance bottlenecks, and supporting visual cluster performance analysis of the scale of heckcal, kcal and above. The user imports the performance data collected in the previous step into MindStudio Insight and uses the visualization capabilities to analyze the performance data according to the following process. - 可以在时间线界面看出导入了8卡数据,如下图: +### 1. Overview of the data - ![time_line.png](images%2Ftime_line.png) +You can learn about each module through the overview interface. -- 接下来,可以在概览界面展示所选通信域下每张卡的计算、通信、空闲时间占比情况,并提供专家建议。 +- First, select the 'Import Data' button in the MindStudio Insight interface to import collected profiler data, and then import multi-card performance data. - ![overview.png](images%2Foverview.png) +- Next, the overview interface can display the calculation, communication, idle time ratio of each card under the selected communication domain, and provide expert advice. -各图例相关数据指标的含义如下: + The meanings of data indicators related to each legend are as follows: -| 图例 | 含义 | +| legend | Meaning | |--------------|---------| -| 总计算时间 | 昇腾设备上的内核时间总和 | -| 纯计算时间 | 纯计算时间 = 总计算时间 – 通信时间(被覆盖) | -| 通信时间(被覆盖) | 被覆盖的通信时长,即计算和通信同时进行的时长 | -| 通信时间(未被覆盖) | 未被覆盖的通信时长,即纯通信时长 | -| 空闲时间 | 未进行计算或通信的时长 | - -### 2. 定界、分析问题 - -不同的指标现象可以定界不同的性能问题: - -- (1)计算问题:通常表现为通信域中总计算时间占比的极大值和极小值差异过大。如果某些计算卡的计算时间明显超出了正常范围,那很可能意味着这张卡承担了过于繁重的计算任务,比如要处理的数据量过大,或者模型计算的复杂程度过高,也有可能是卡本身的性能受到了限制。 - -- (2)调度问题:通常表现为通信域中空闲时间占比的极大值和极小值差异过大。如果计算卡的空闲时间过长,那就说明任务分配可能不太均衡,或者是存在卡之间互相等待数据的情况,这同样会对集群的性能造成不利影响。 - -- (3)通信问题:如果通信时间(未被覆盖)过长,那就表明计算和通信之间的协同出现了问题,可能对应多种情况。也许是通信协议不够优化,又或者是网络带宽不稳定,导致通信无法和计算良好配合。 - -#### 2.1 计算问题 +| Total compute time | Total kernel time on the ascending device | +| pure computing time | pure computing time = Total computing time - Communication time (overwritten) | +| Communication duration (overwritten) | The duration of the communication that is overwritten, that is, the duration of the computation and communication at the same time | +| communication duration (not covered) | The communication duration that is not covered, that is, the pure communication duration | +| Idle time | Duration of no calculation or communication | -当数据指标现象指示为**计算**问题时,可以直接查看异常卡的算子数据,并与正常卡进行比较。此时可以使用MindStudio Insight的卡间性能比对功能,设置两卡进入比对模式,并在算子界面查看结果。其中饼状图展示了各类算子的耗时占比,表格展示了各类算子的详细信息。 +### 2. Definition and Analysis of Problems -![operations.png](images%2Foperations.png) +Different indicator phenomena can delimit different performance problems: -#### 2.2 调度问题 +- (1) Calculation problem: usually manifested as a large difference between the maximum value and the minimum value of the total calculation time in the communication domain. If the calculation time of some computing cards is obviously beyond the normal range, it is likely to mean that the card has undertaken too heavy computing tasks, such as the amount of data to be processed is too large, or the complexity of the model calculation is too high, or the performance of the card itself is limited. -当数据指标现象指示为**调度**问题时,需要到时间线界面将异常卡和正常卡进行比较,进一步定位出现问题的算子。 +- (2) Scheduling problem: Usually manifested as a large difference between the maximum and minimum of the proportion of idle time in the communication domain. If the idle time of the compute cards is too long, it indicates that the task distribution may be unbalanced, or there is a situation in which the cards are waiting for data from each other, which also adversely affects the performance of the cluster. -![time_line_on_line.png](images%2Ftime_line_on_line.png) +- (3) Communication problems: If the communication time (not covered) is too long, it indicates that there is a problem with the coordination between calculation and communication, which may correspond to a variety of situations. Perhaps the communication protocol is not optimized enough, or the network bandwidth is unstable, resulting in communication and calculation can not be well matched. -进入时间线界面,选择HostToDevice连线类型,HostToDevice展示了CANN层算子到AscendHardware的算子的下发执行关系和CANN层算子到HCCL通信算子的下发执行关系,用于定位调度问题。 +#### 2.1 Computation Problems -![time_line_cann.png](images%2Ftime_line_cann.png) +When the data indicator phenomenon indicates a **computation** problem, the operator data of the abnormal card can be directly viewed and compared with the normal card. In this case, you can use the performance comparison function of MindStudio Insight to set the two cards to the comparison mode and view the result on the operator interface. -HostToDevice的连线通常有两种形态,倾斜和竖直。下图是一个存在调度问题的案例,如果HostToDevice连线如左侧所示,是倾斜的,说明此时间段调度任务安排合理,昇腾设备是满负荷执行计算和通信任务的。如果HostToDevice连线如右侧所示,是竖直的,说明昇腾设备此时快速执行完了CPU下发的任务,未满负荷进行计算和通信任务,这一般表示存在调度问题。 +#### 2.2 Scheduling Problems -![time_line_cann_details.png](images%2Ftime_line_cann_details.png) +When the data indicator phenomenon indicates a **scheduling** problem, it is necessary to go to the timeline interface to compare the abnormal card with the normal card to further locate the operator that has the problem. -#### 2.3 通信问题 +On the timeline screen, select the connection type of HostToDevice. HostToDevice shows the downward execution relationship of CANN layer operators to AscendHardware operators and the downward execution relationship of CANN layer operators to HCCL communication operators for locating scheduling problems. -当数据指标现象指示为**通信**问题时,需要进入通信界面进一步分析。通信界面用于展示集群中全网链路性能以及所有节点的通信性能,通过集群通信与计算重叠时间的分析可以找出集群训练中的慢主机或慢节点。通常,我们会根据关键指标通信矩阵、通信时长来分析性能问题。 +The connection of HostToDevice usually has two forms, inclined and vertical. The following figure shows a case of scheduling problems. If the connection of HostToDevice is inclined as shown on the left, it indicates that the scheduling task is arranged properly during this time period, and the ascending device performs calculation and communication tasks at full load. If the HostToDevice cable is vertical as shown on the right, it indicates that the ascending device quickly completes the tasks sent by the CPU and performs calculation and communication tasks under full load. This generally indicates a scheduling problem. -- 通信矩阵: +#### 2.3 Communication Problems - 下图是MindStudio Insight通信矩阵可视化界面,可以获取各个通信域下,卡间的带宽、传输大小、链路方式和传输时长情况等信息。 - 分析时可以先查看传输大小,分析在这个集合通信中,每张卡的传输量是否存在差异,是否有分配不均的情况。其次,再查看传输时长,如果某张卡的传输时长非常短,那它极有可能是在处理其他事情,导致下游卡长时间等待。最后可以查看带宽情况,如果不同卡间的带宽数据差异过大或带宽数值异常,那都意味着通信域中存在异常卡。 +When the data indicator symptom indicates a **communication** problem, you need to enter the communication interface for further analysis. The communication interface is used to display the link performance of the whole network and the communication performance of all nodes in the cluster. By analyzing the overlap time of cluster communication and calculation, the slow host or slow node in the cluster training can be found out. Typically, we analyze performance issues in terms of key metrics communication matrix, communication duration. - ![communication_matrix.png](images%2Fcommunication_matrix.png) +- Communication matrix -- 通信时长: + When analyzing, you can first check the transmission size, analyze whether there is a difference in the transmission volume of each card in this collection communication, and whether there is an uneven distribution. Second, look at the transmission time, if the transmission time of a card is very short, it is most likely to be dealing with other things, resulting in a long wait for the downstream card. Finally, you can view the bandwidth situation, if the bandwidth data difference between different cards is too large or the bandwidth value is abnormal, it means that there is an abnormal card in the communication domain. - 通信时长是指计算卡之间进行一次通信所花费的时间。导致通信耗时过长的因素很多,比如通信协议配置错误、传输数据量过大等等,只有找到这些通信耗时过长的链路并妥善解决问题,才能让数据在计算卡之间更加顺畅地传输,进而提高集群的整体性能。 - 用户选择具体通信域后,即可在通信时长界面中查看通信域中各个计算卡的耗时汇总情况,以及每个通信算子的时序图和通信时长的分布图,从而快速获得通信算子的相对位置关系以及详细通信数据。 +- Communication duration - ![communication_time.png](images%2Fcommunication_time.png) + Communication time refers to the time taken for a communication between computing cards. There are many factors that lead to excessive communication time, such as incorrect configuration of communication protocols, excessive data transmission, and so on. Only by finding these links that take too long to communicate and properly solving the problems, can data be transmitted between computing cards more smoothly, thereby improving the overall performance of the cluster. + After the user selects a specific communication domain, the user can view the time summary of each calculation card in the communication domain in the communication duration interface, as well as the timing diagram and communication duration distribution diagram of each communication operator, so as to quickly obtain the relative position relationship and detailed communication data of the communication operator. -## 常见工具问题及解决办法 +## Common Tool Issues and Solutions -### 使用step采集性能数据常见问题 +### Common Issues with step Collection Performance Data -#### schedule配置错误问题 +#### schedule Configuration Error Problem -schedule配置相关参数有5个,wait、warm_up、active、repeat、skip_first。每个参数大小必须**大于等于0**;其中**active**必须**大于等于1**,否则抛出警告,并设置为默认值1;如果repeat设置为0,表示repeat参数不生效,Profiler会根据模型训练的次数来确定循环次数。 +schedule configuration related parameters have 5 parameters: wait, warm_up, active, repeat, skip_first. Each parameter must be **greater than or equal to 0**; **active** must be **greater than or equal to 1**, otherwise a warning will be thrown and set to the default value 1; if repeat is set to 0, it means that the repeat parameter does not take effect, Profiler will determine the number of loops according to the number of model training times. -#### schedule与step配置不匹配问题 +#### schedule and step Configuration Mismatch Problem -正常来说schedule的配置应小于模型训练的次数,即repeat*(wait+warm_up+active)+skip_first应小于模型训练的次数。如果schedule的配置大于模型训练的次数,Profiler会抛出异常警告,但这并不会打断模型训练,但可能存在采集解析的数据不全的情况。 +Normally, the schedule configuration should be less than the number of model training times, that is, repeat*(wait+warm_up+active)+skip_first should be less than the number of model training times. If the schedule configuration is greater than the number of model training times, Profiler will throw an exception warning, but this will not interrupt the model training, but there may be incomplete data collection and analysis. \ No newline at end of file -- Gitee From 54dad02a51628545d19f1cfdd0b8af50480a2e61 Mon Sep 17 00:00:00 2001 From: yuliangbin Date: Tue, 7 Jan 2025 11:03:11 +0800 Subject: [PATCH 3/5] [fix]Add cases of profiler --- .../model_train/optimize/profiler.md | 337 ++++++++++-------- 1 file changed, 180 insertions(+), 157 deletions(-) diff --git a/docs/mindspore/source_zh_cn/model_train/optimize/profiler.md b/docs/mindspore/source_zh_cn/model_train/optimize/profiler.md index b194f81c54..0b8b79ae97 100644 --- a/docs/mindspore/source_zh_cn/model_train/optimize/profiler.md +++ b/docs/mindspore/source_zh_cn/model_train/optimize/profiler.md @@ -1,32 +1,32 @@ -# Ascend Performance Tuning +# Ascend性能调优 -[![View Source On Gitee](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source_en.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_en/model_train/optimize/profiler.md) +[![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/model_train/optimize/profiler.md) -## Overview +## 概述 -This tutorial introduces how to use MindSpore Profiler for performance tuning on Ascend AI processors. MindSpore Profiler can provide operators execution time analysis, memory usage analysis, AI Core metrics analysis, Timeline display, etc., to help users analyze performance bottlenecks and optimize training efficiency. +本教程介绍如何在Ascend AI处理器上使用MindSpore Profiler进行性能调优。MindSpore Profiler可以为用户提供算子执行时间分析、内存使用分析、AI Core指标分析、Timeline展示等功能,帮助用户分析性能瓶颈、优化训练效率。 -## Operation Process +## 操作流程 -1. Prepare the training script; +1. 准备训练脚本; -2. Call the performance debugging interface in the training script, such as mindspore.Profiler and mindspore.profiler.DynamicProfilerMonitor interfaces; +2. 在训练脚本中调用性能调试接口,如mindspore.Profiler以及mindspore.profiler.DynamicProfilerMonitor接口; -3. Run the training script; +3. 运行训练脚本; -4. View the performance data through [MindStudio Insight](https://www.hiascend.com/document/detail/zh/mindstudio/70RC2/msinsightug/msascendinsightug/AscendInsight_0002.html). +4. 通过[MindStudio Insight](https://www.hiascend.com/document/detail/zh/mindstudio/70RC2/msinsightug/msascendinsightug/AscendInsight_0002.html)软件查看性能数据。 -## Usage +## 使用方法 -There are three ways to collect training performance data, users can use the Profiler enabling method according to different scenarios. The following will introduce the usage of different scenarios. +收集训练性能数据有三种方式,用户可以根据不同场景使用Profiler使能方式,以下将介绍不同场景的使用方式。 -### Method 1: mindspore.Profiler Interface Enabling +### 方式一:mindspore.Profiler接口使能 -Add the MindSpore Profiler related interfaces in the training script, see [MindSpore Profiler parameter details](https://www.mindspore.cn/docs/en/master/api_python/mindspore/mindspore.Profiler.html) for details. +在训练脚本中添加MindSpore Profiler相关接口,Profiler接口详细介绍请参考[MindSpore Profiler参数详解](https://www.mindspore.cn/docs/zh-CN/master/api_python/mindspore/mindspore.Profiler.html)。 -**Graph mode collection example:** +**Graph模式采集样例:** -In **Graph** mode, users can enable Profiler through Callback. +**Graph**模式下,用户可以通过Callback方式来使能Profiler。 ```python import mindspore as ms @@ -53,41 +53,41 @@ class StopAtStep(ms.Callback): self.profiler.analyse() ``` -For the complete case, refer to [graph mode collection complete code example](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/graph_start_stop_profiler.py) +完整案例请参考[graph模式采集完整代码样例](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/graph_start_stop_profiler.py)。 -**PyNative mode collection example:** +**PyNative模式采集样例:** -In **PyNative** mode, users can enable Profiler through setting schedule and on_trace_ready parameters. +**PyNative**模式下,用户可以通过设置schedule以及on_trace_ready参数来使能Profiler。 -For example, if you want to collect the performance data of the first two steps, you can use the following configuration to collect. +例如用户想要采集前两个step的性能数据,可以使用如下配置的schedule进行采集。 -Sample as follows: +样例如下: ```python from mindspore import Profiler from mindspore.profiler import schedule, tensor_board_trace_handler STEP_NUM = 15 -# Define the training model network +# 定义训练模型网络 net = Net() with Profiler(schedule=schedule(wait=0, warm_up=0, active=2, repeat=1, skip_first=0), on_trace_ready=tensor_board_trace_handler) as prof: for _ in range(STEP_NUM): train(net) - # Call step to collect + # 调用step采集 prof.step() ``` -After enabling, the Step ID column information is included in the kernel_details.csv file, and the Step ID is 0,1, indicating that the data collected is the 0th and 1st step data. +使能后落盘数据中kernel_details.csv中包含了Step ID一列信息,且Step ID为0,1,表示采集的是第0个step以及第1个step数据。 -For the complete case, refer to [PyNative mode collection complete code example](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/py_native_step_profiler.py) +完整案例参考[PyNative模式采集完整代码样例](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/py_native_step_profiler.py) -### Method 2: Dynamic Profiler Enabling +### 方式二:动态profiler使能 -Users can use the mindspore.profiler.DynamicProfilerMonitor interface to enable Profiler without interrupting the training process, modify the configuration file, and complete the collection task under the new configuration. This interface requires a JSON configuration file, if not configured, a JSON file with a default configuration will be generated. -This interface requires a JSON configuration file, if not configured, a JSON file with a default configuration will be generated. +用户如果想要在训练过程中不中断训练流程,修改配置文件,完成新配置下的采集任务,可以使用mindspore.profiler.DynamicProfilerMonitor接口使能, +该接口需要配置一个JSON配置文件,如不配置会生成一个默认配置的JSON文件。 -JSON configuration example as follows: +JSON配置样例如下: ```json { @@ -103,35 +103,35 @@ JSON configuration example as follows: } ``` -1. Users need to configure the above JSON configuration file before instantiating DynamicProfilerMonitor, see [DynamicProfilerMonitor parameter details](https://www.mindspore.cn/docs/en/master/api_python/mindspore/mindspore.profiler.DynamicProfilerMonitor.html) for details, and save the configuration file to cfg_path; -2. Call the step interface of DynamicProfilerMonitor after the model training to collect data; -3. If users want to change the collection and analysis tasks during training, they can modify the JSON configuration file, such as changing the start_step in the above JSON configuration to 8, stop_step to 10, save it, and DynamicProfilerMonitor will automatically identify that the configuration file has changed to the new collection and analysis tasks. +1. 用户需要在实例化DynamicProfilerMonitor前配置如上的JSON配置文件,详细参数介绍请参考[DynamicProfilerMonitor参数详解](https://www.mindspore.cn/docs/zh-CN/master/api_python/mindspore/mindspore.profiler.DynamicProfilerMonitor.html),将配置文件保存在cfg_path中; +2. 在模型训练后调用DynamicProfilerMonitor的step接口采集数据; +3. 用户如果想在训练中变更采集、解析任务,可以去修改JSON配置文件,如变更上述JSON配置中的start_step为8,stop_step为10,保存后,DynamicProfilerMonitor会自动识别出配置文件变更成新的采集、解析任务。 -Sample as follows: +样例如下: ```python from mindspore.profiler import DynamicProfilerMonitor -# cfg_path includes the path of the above JSON configuration file, output_path is the output path +# cfg_path中包括上述的json配置文件路径,output_path为输出路径 dp = DynamicProfilerMonitor(cfg_path="./cfg_path", output_path="./output_path") STEP_NUM = 15 -# Define the training model network +# 定义训练模型网络 net = Net() for _ in range(STEP_NUM): train(net) - # Call step to collect + # 调用step采集 dp.step() ``` -At this point, the results include two folders: rank0_start2_stop5 and rank0_start8_stop10, representing the collection of steps 2-5 and 8-10 respectively. +此时生成的结果文件包含两个文件夹:rank0_start2_stop5以及rank0_start8_stop10,分别代表采集的step为2-5和8-10。 -For the complete case, refer to [dynamic profiler enabling method case](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/dynamic_profiler.py). +完整案例请参考[动态Profiler使能方式案例](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/dynamic_profiler.py)。 -### Method 3: Environment Variable Enabling +### 方式三:环境变量使能 -Users can use the environment variable enabling method to enable Profiler most simply, this method only needs to configure the parameters to the environment variables, and the performance data will be automatically collected during the model training, but this method does not support the schedule parameter collection data, other parameters can be used. See [environment variable enabling method parameter details](https://www.mindspore.cn/docs/en/master/api_python/env_var_list.html) for details. - -Environment variable enabling method related configuration items, sample as follows: +用户如果想最简单地使能Profiler,可以使用环境变量使能方式,该方式只需将参数配置到环境变量中,在模型训练中会自动采集性能数据,但该方式暂不支持 +schedule参数方式采集数据,其他参数都可以使用。详细配置项介绍请参考[环境变量使能方式参数详解](https://www.mindspore.cn/docs/zh-CN/master/api_python/env_var_list.html)。 +环境变量使能方式相关配置项,样例如下: ```shell export MS_PROFILER_OPTIONS=' @@ -144,56 +144,56 @@ export MS_PROFILER_OPTIONS=' "profiler_level": "Level0"}' ``` -After loading the environment variable, start the training script directly to complete the collection. Note that in this configuration, **start** must be true to achieve the enabling effect, otherwise the enabling will not take effect. +加载完环境变量后,直接拉起训练脚本即可完成采集。需要注意的是该配置中**start**必须为true,才能达到使能效果,否则使能不生效。 -## Performance Data +## 性能数据 -Users can collect, parse, and analyze performance data through MindSpore Profiler, including raw performance data from the framework side, CANN side, and device side, as well as parsed performance data. +用户通过MindSpore Profiler 采集、解析后的性能数据包括框架侧、CANN侧和device侧的原始性能数据,以及解析后的性能数据。 -When using MindSpore to train a model, in order to analyze performance bottlenecks and optimize training efficiency, we need to collect and analyze performance data. MindSpore Profiler provides complete performance data collection and analysis capabilities, this article will detail the storage structure and content meaning of the collected performance data. +在使用MindSpore进行模型训练时,为了分析性能瓶颈、优化训练效率,我们需要收集并分析性能数据。MindSpore Profiler提供了完整的性能数据采集和分析能力,本文将详细介绍采集到的性能数据的存储结构和内容含义。 -After collecting performance data, the original data will be stored according to the following directory structure: +性能数据采集完成后,原始数据会按照以下目录结构进行存储: -> - The following data files are not required to be opened and viewed by users. Users can refer to the [MindStudio Insight user guide](https://www.hiascend.com/document/detail/zh/mindstudio/70RC2/msinsightug/msascendinsightug/AscendInsight_0002.html) for viewing and analyzing performance data. -> - The following is the full set of result files, the actual file number and content depend on the user's parameter configuration and the actual training scenario, if the user does not configure the related parameters or does not involve the related scenarios in the training, the corresponding data files will not be generated. +> - 以下数据文件用户无需打开查看,可根据[MindStudio Insight用户指南](https://www.hiascend.com/document/detail/zh/mindstudio/70RC2/msinsightug/msascendinsightug/AscendInsight_0002.html)指导进行性能数据的查看和分析。 +> - 以下是结果文件全集,实际文件数量和内容根据用户的参数配置以及实际的训练场景来生成,如果用户没有使能相关参数或是训练中没有涉及到相关场景,则不会生成对应的数据文件。 ```sh -└── localhost.localdomain_*_ascend_ms // Analysis result directory, named format: {worker_name}_{timestamp}_ascend_ms, by default {worker_name} is {hostname}_{pid} - ├── profiler_info.json // For multi-card or cluster scenarios, the naming rule is profiler_info_{Rank_ID}.json, used to record Profiler related metadata +└── localhost.localdomain_*_ascend_ms // 解析结果目录,命名格式:{worker_name}_{时间戳}_ascend_ms,默认情况下{worker_name}为{hostname}_{pid} + ├── profiler_info.json // 多卡或集群场景命名规则为 profiler_info_{Rank_ID}.json,用于记录Profiler相关的元数据 ├── profiler_metadata.json - ├── ASCEND_PROFILER_OUTPUT // MindSpore Profiler interface collects performance data - │ ├── api_statistic.csv // Generated when profiler_level=ProfilerLevel.Level1 or profiler_level=ProfilerLevel.Level2 - │ ├── communication.json // Provides visualization data for performance analysis in multi-card or cluster scenarios, generated when profiler_level=ProfilerLevel.Level1 or profiler_level=ProfilerLevel.Level2 - │ ├── communication_matrix.json // Communication small operator basic information file, generated when profiler_level=ProfilerLevel.Level1 or profiler_level=ProfilerLevel.Level2 - │ ├── dataset.csv // Generated when activities contains ProfilerActivity.CPU - │ ├── data_preprocess.csv // Generated when profiler_level=ProfilerLevel.Level2 - │ ├── kernel_details.csv // Generated when activities contains ProfilerActivity.NPU - │ ├── l2_cache.csv // Generated when l2_cache=True - │ ├── memory_record.csv // Generated when profile_memory=True - │ ├── minddata_pipeline_raw_*.csv // Generated when data_process=True and call mindspore.dataset - │ ├── minddata_pipeline_summary_*.csv // Generated when data_process=True and call mindspore.dataset - │ ├── minddata_pipeline_summary_*.json // Generated when data_process=True and call mindspore.dataset - │ ├── npu_module_mem.csv // Generated when profile_memory=True - │ ├── operator_memory.csv // Generated when profile_memory=True - │ ├── op_statistic.csv // AI Core and AI CPU operator call count and time data - │ ├── step_trace_time.csv // Iteration calculation and communication time statistics + ├── ASCEND_PROFILER_OUTPUT // MindSpore Profiler接口采集性能数据 + │ ├── api_statistic.csv // 配置 profiler_level=ProfilerLevel.Level1 或 profiler_level=ProfilerLevel.Level2 生成 + │ ├── communication.json // 为多卡或集群等存在通信的场景性能分析提供可视化数据基础,配置profiler_level=ProfilerLevel.Level1或profiler_level=ProfilerLevel.Level2生成 + │ ├── communication_matrix.json // 通信小算子基本信息文件,配置 profiler_level=ProfilerLevel.Level1 或 profiler_level=ProfilerLevel.Level2 生成 + │ ├── dataset.csv // activities中配置ProfilerActivity.CPU生成 + │ ├── data_preprocess.csv // 配置 profiler_level=ProfilerLevel.Level2 生成 + │ ├── kernel_details.csv // activities中配置ProfilerActivity.NPU生成 + │ ├── l2_cache.csv // 配置 l2_cache=True 生成 + │ ├── memory_record.csv // 配置 profile_memory=True 生成 + │ ├── minddata_pipeline_raw_*.csv // 配置 data_process=True 且调用mindspore.dataset接口时生成 + │ ├── minddata_pipeline_summary_*.csv // 配置 data_process=True 且调用mindspore.dataset接口时生成 + │ ├── minddata_pipeline_summary_*.json // 配置 data_process=True 且调用mindspore.dataset接口时生成 + │ ├── npu_module_mem.csv // 配置 profile_memory=True 生成 + │ ├── operator_memory.csv // 配置 profile_memory=True 生成 + │ ├── op_statistic.csv // AI Core和AI CPU算子调用次数及耗时数据 + │ ├── step_trace_time.csv // 迭代中计算和通信的时间统计 │ └── trace_view.json - ├── FRAMEWORK // Framework side performance raw data, no need to pay attention to it, delete this directory when data_simplification=True - └── PROF_000001_20230628101435646_FKFLNPEPPRRCFCBA // CANN layer performance data, named format: PROF_{number}_{timestamp}_{string}, delete other data when data_simplification=True, only retain the original performance data in this directory - ├── analyze // Generated when profiler_level=ProfilerLevel.Level1 or profiler_level=ProfilerLevel.Level2 + ├── FRAMEWORK // 框架侧的性能原始数据,无需关注,data_simplification=True时删除此目录 + └── PROF_000001_20230628101435646_FKFLNPEPPRRCFCBA // CANN层的性能数据,命名格式:PROF_{数字}_{时间戳}_{字符串},data_simplification=True时,仅保留此目录下的原始性能数据,删除其他数据 + ├── analyze // 配置 profiler_level=ProfilerLevel.Level1 或 profiler_level=ProfilerLevel.Level2 生成 ├── device_* ├── host ├── mindstudio_profiler_log └── mindstudio_profiler_output ``` -MindSpore Profiler interface will associate and integrate the framework side data and CANN Profling data to form trace, kernel, and memory performance data files. The detailed description of each file is as follows. +MindSpore Profiler接口将框架侧的数据与CANN Profling的数据关联整合,形成trace、kernel以及memory等性能数据文件。各文件详细说明如下文所示。 -`FRAMEWORK` is the performance raw data of the framework side, no need to pay attention to it; `PROF` directory is the performance data collected by CANN Profling, mainly saved in the `mindstudio_profiler_output` directory. +`FRAMEWORK` 为框架侧的性能原始数据,无需关注;`PROF` 目录下为CANN Profling采集的性能数据,主要保存在 `mindstudio_profiler_output` 目录下。 ### communication.json -The information of this performance data file is as follows: +该性能数据文件信息如下所示: - hcom\_allGather\_\*@group - Communication Time Info @@ -244,7 +244,7 @@ The information of this performance data file is as follows: ### communication_matrix.json -The information of this performance data file is as follows: +该性能数据文件信息样例如下所示: - allgather\-top1@\* - src\_rank\-dst\_rank @@ -256,144 +256,167 @@ The information of this performance data file is as follows: ### dataset.csv -`dataset.csv` file records the information of the dataset operator. +`dataset.csv` 文件记录dataset算子的信息。 -| Field Name | Field Explanation | +| 字段名 | 字段解释 | |----------|----------| -| Operation | Corresponding dataset operation name | -| Stage | Operation stage | -| Occurrences | Operation occurrence times | -| Avg. time(us) | Operation average time (microseconds) | -| Custom Info | Custom information | +| Operation | 对应的数据集操作名称 | +| Stage | 操作所处的阶段 | +| Occurrences | 操作出现次数 | +| Avg. time(us) | 操作平均时间(微秒) | +| Custom Info | 自定义信息 | ### kernel_details.csv -`kernel_details.csv` file is controlled by the `ProfilerActivity.NPU` switch, the file contains the information of all operators executed on NPU. If the user calls `schedule` in the front end to collect `step` data, the `Step Id` field will be added. +`kernel_details.csv` 文件由 `ProfilerActivity.NPU` 开关控制,文件包含在NPU上执行的所有算子的信息,若用户前端调用了 `schedule` 进行 `step` 打点,则会增加 `Step Id` 字段。 -The difference from the data collected by the Ascend PyTorch Profiler interface is that when the `with_stack` switch is turned on, MindSpore Profiler will concatenate the stack information to the `Name` field. +与Ascend PyTorch Profiler接口采集数据结果的不同之处在于当 `with_stack` 开关开启之后,MindSpore Profiler会将堆栈信息拼接到 `Name` 字段中。 ### minddata_pipeline_raw_*.csv -`minddata_pipeline_raw_*.csv` records the performance metrics of the dataset operation. +`minddata_pipeline_raw_*.csv` 记录dataset数据集操作的性能指标。 -| Field Name | Field Explanation | +| 字段名 | 字段解释 | |----------|----------| -| op_id | Dataset operation ID | -| op_type | Operation type | -| num_workers | Number of operation workers | -| output_queue_size | Output queue size | -| output_queue_average_size | Output queue average size | -| output_queue_length | Output queue length | -| output_queue_usage_rate | Output queue usage rate | -| sample_interval | Sampling interval | -| parent_id | Parent operation ID | -| children_id | Child operation ID | +| op_id | 数据集操作编号 | +| op_type | 操作类型 | +| num_workers | 操作进程数量 | +| output_queue_size | 输出队列大小 | +| output_queue_average_size | 输出队列平均大小 | +| output_queue_length | 输出队列长度 | +| output_queue_usage_rate | 输出队列使用率 | +| sample_interval | 采样间隔 | +| parent_id | 父操作编号 | +| children_id | 子操作编号 | ### minddata_pipeline_summary_*.csv -`minddata_pipeline_summary_*.csv` and `minddata_pipeline_summary_*.json` have the same content, but different file formats. They record more detailed performance metrics of dataset operations and provide optimization suggestions based on these metrics. +`minddata_pipeline_summary_*.csv` 与 `minddata_pipeline_summary_*.json` 文件内容相同,只是文件格式不同。它们记录更详细的dataset数据集操作性能指标并根据性能指标给出优化建议。 -| Field Name | Field Explanation | +| 字段名 | 字段解释 | |----------|----------| -| op_ids | Dataset operation ID | -| op_names | Operation name | -| pipeline_ops | Operation pipeline | -| num_workers | Number of operation workers | -| queue_queue_size | Output queue size | -| queue_utilization_pct | Output queue usage rate | -| queue_empty_freq_pct | Output queue idle frequency | -| children_ids | Child operation ID | -| parent_id | Parent operation ID | -| avg_cpu_pct | Average CPU usage rate | -| per_pipeline_time | Time for each pipeline execution | -| per_push_queue_time | Time for each push queue | -| per_batch_time | Time for each data batch execution | -| avg_cpu_pct_per_worker | Average CPU usage rate per thread | -| cpu_analysis_details | CPU analysis details | -| queue_analysis_details | Queue analysis details | -| bottleneck_warning | Performance bottleneck warning | -| bottleneck_suggestion | Performance bottleneck suggestion | +| op_ids | 数据集操作编号 | +| op_names | 操作名称 | +| pipeline_ops | 操作管道 | +| num_workers | 操作进程数量 | +| queue_queue_size | 输出队列大小 | +| queue_utilization_pct | 输出队列使用率 | +| queue_empty_freq_pct | 输出队列空闲频率 | +| children_ids | 子操作编号 | +| parent_id | 父操作编号 | +| avg_cpu_pct | 平均CPU使用率 | +| per_pipeline_time | 每个管道执行时间 | +| per_push_queue_time | 每个推送队列时间 | +| per_batch_time | 每个数据批次执行时间 | +| avg_cpu_pct_per_worker | 平均每个线程CPU使用率 | +| cpu_analysis_details | CPU分析详情 | +| queue_analysis_details | 队列分析详情 | +| bottleneck_warning | 性能瓶颈警告 | +| bottleneck_suggestion | 性能瓶颈建议 | ### trace_view.json -`trace_view.json` is recommended to be opened using MindStudio Insight tool or chrome://tracing/. MindSpore Profiler does not support the record_shapes and GC functions. +`trace_view.json` 建议使用MindStudio Insight工具 或 chrome://tracing/ 打开。MindSpore Profiler暂时不支持record_shapes与GC功能。 -### Other Performance Data +### 其他性能数据 -The specific field and meaning of other performance data files can be referred to [Ascend official documentation](https://www.hiascend.com/document/detail/zh/mindstudio/70RC3/T&ITools/Profiling/atlasprofiling_16_0035.html). +其他性能数据文件的具体字段与含义可以参考[昇腾官网文档](https://www.hiascend.com/document/detail/zh/mindstudio/70RC3/T&ITools/Profiling/atlasprofiling_16_0035.html)。 -## Performance Tuning Case +## 性能调优案例 -In the process of large model training, due to some unpredictable introduction, the model has some performance deterioration problems, such as slow operator calculation time, communication speed and slow card. The root cause of performance degradation needs to be identified and the problem addressed. +在大模型训练过程中,由于一些不可预知的引入,导致模型出现了一些性能劣化的问题,例如算子计算时间慢、通信快慢卡等。需要定位性能劣化的根本原因,并解决问题。 ![profiler_process.png](images%2Fprofiler_process.png) -The most important thing in performance tuning is to apply the right medicine to the problem, delimit the problem first, and then perform targeted tuning to the problem. -The first to use [MindStudio Insight](https://www.mindspore.cn/mindinsight/docs/en/master/index.html) visualization tools and bound performance issues. The results of delimiting are usually divided into three aspects: computation, scheduling and communication. Finally, users can tune performance based on expert advice from MindStudio Insight. Re-run the training after each tuning, collect performance data, and use the MindStudio Insight tool to see if the tuning method produced results. Repeat this process until the performance issue is resolved. +性能调优最重要的就是对症下药,先定界问题,再对问题进行针对性调优。 +首先使用[MindStudio Insight](https://www.mindspore.cn/mindinsight/docs/zh-CN/master/index.html)可视化工具定界性能问题,定界结果通常分为计算、调度、通信三个方向的问题。最后,用户可以根据MindStudio Insight专家建议进行性能调优,每次调优后重跑训练,采集性能数据,并使用MindStudio Insight工具查看调优手段是否产生效果。重复这个过程,直到解决性能问题。 + +MindStudio Insight提供了丰富的调优分析手段,可视化呈现真实软硬件运行数据,多维度分析性能数位,定位性能瓶颈点,支持百卡、千卡及以上规模的可视化集群性能分析。用户在MindStudio Insight中导入上一步采集的性能数据,根据下述流程使用可视化能力分析性能数据。 + +### 1. 概览界面总览数据情况 + +可以通过概览界面了解每个模块的具体内容。 + +- 首先,在MindStudio Insight界面中选择'导入数据'按钮,导入采集的profiler数据,以下为导入多卡性能数据。 + + ![load_data.png](images%2Fload_data.png) -MindStudio Insight provides a wealth of tuning and analysis methods, visualizing the real software and hardware operation data, analyzing performance data in multiple dimensions, locating performance bottlenecks, and supporting visual cluster performance analysis of the scale of heckcal, kcal and above. The user imports the performance data collected in the previous step into MindStudio Insight and uses the visualization capabilities to analyze the performance data according to the following process. + ![load_data_path.png](images%2Fload_data_path.png) -### 1. Overview of the data + 可以在时间线界面看出导入了8卡数据,如下图: -You can learn about each module through the overview interface. + ![time_line.png](images%2Ftime_line.png) -- First, select the 'Import Data' button in the MindStudio Insight interface to import collected profiler data, and then import multi-card performance data. +- 接下来,可以在概览界面展示所选通信域下每张卡的计算、通信、空闲时间占比情况,并提供专家建议。 -- Next, the overview interface can display the calculation, communication, idle time ratio of each card under the selected communication domain, and provide expert advice. + ![overview.png](images%2Foverview.png) - The meanings of data indicators related to each legend are as follows: +各图例相关数据指标的含义如下: -| legend | Meaning | +| 图例 | 含义 | |--------------|---------| -| Total compute time | Total kernel time on the ascending device | -| pure computing time | pure computing time = Total computing time - Communication time (overwritten) | -| Communication duration (overwritten) | The duration of the communication that is overwritten, that is, the duration of the computation and communication at the same time | -| communication duration (not covered) | The communication duration that is not covered, that is, the pure communication duration | -| Idle time | Duration of no calculation or communication | +| 总计算时间 | 昇腾设备上的内核时间总和 | +| 纯计算时间 | 纯计算时间 = 总计算时间 – 通信时间(被覆盖) | +| 通信时间(被覆盖) | 被覆盖的通信时长,即计算和通信同时进行的时长 | +| 通信时间(未被覆盖) | 未被覆盖的通信时长,即纯通信时长 | +| 空闲时间 | 未进行计算或通信的时长 | + +### 2. 定界、分析问题 + +不同的指标现象可以定界不同的性能问题: + +- (1)计算问题:通常表现为通信域中总计算时间占比的极大值和极小值差异过大。如果某些计算卡的计算时间明显超出了正常范围,那很可能意味着这张卡承担了过于繁重的计算任务,比如要处理的数据量过大,或者模型计算的复杂程度过高,也有可能是卡本身的性能受到了限制。 + +- (2)调度问题:通常表现为通信域中空闲时间占比的极大值和极小值差异过大。如果计算卡的空闲时间过长,那就说明任务分配可能不太均衡,或者是存在卡之间互相等待数据的情况,这同样会对集群的性能造成不利影响。 + +- (3)通信问题:如果通信时间(未被覆盖)过长,那就表明计算和通信之间的协同出现了问题,可能对应多种情况。也许是通信协议不够优化,又或者是网络带宽不稳定,导致通信无法和计算良好配合。 + +#### 2.1 计算问题 -### 2. Definition and Analysis of Problems +当数据指标现象指示为**计算**问题时,可以直接查看异常卡的算子数据,并与正常卡进行比较。此时可以使用MindStudio Insight的卡间性能比对功能,设置两卡进入比对模式,并在算子界面查看结果。其中饼状图展示了各类算子的耗时占比,表格展示了各类算子的详细信息。 -Different indicator phenomena can delimit different performance problems: +![operations.png](images%2Foperations.png) -- (1) Calculation problem: usually manifested as a large difference between the maximum value and the minimum value of the total calculation time in the communication domain. If the calculation time of some computing cards is obviously beyond the normal range, it is likely to mean that the card has undertaken too heavy computing tasks, such as the amount of data to be processed is too large, or the complexity of the model calculation is too high, or the performance of the card itself is limited. +#### 2.2 调度问题 -- (2) Scheduling problem: Usually manifested as a large difference between the maximum and minimum of the proportion of idle time in the communication domain. If the idle time of the compute cards is too long, it indicates that the task distribution may be unbalanced, or there is a situation in which the cards are waiting for data from each other, which also adversely affects the performance of the cluster. +当数据指标现象指示为**调度**问题时,需要到时间线界面将异常卡和正常卡进行比较,进一步定位出现问题的算子。 -- (3) Communication problems: If the communication time (not covered) is too long, it indicates that there is a problem with the coordination between calculation and communication, which may correspond to a variety of situations. Perhaps the communication protocol is not optimized enough, or the network bandwidth is unstable, resulting in communication and calculation can not be well matched. +![time_line_on_line.png](images%2Ftime_line_on_line.png) -#### 2.1 Computation Problems +进入时间线界面,选择HostToDevice连线类型,HostToDevice展示了CANN层算子到AscendHardware的算子的下发执行关系和CANN层算子到HCCL通信算子的下发执行关系,用于定位调度问题。 -When the data indicator phenomenon indicates a **computation** problem, the operator data of the abnormal card can be directly viewed and compared with the normal card. In this case, you can use the performance comparison function of MindStudio Insight to set the two cards to the comparison mode and view the result on the operator interface. +![time_line_cann.png](images%2Ftime_line_cann.png) -#### 2.2 Scheduling Problems +HostToDevice的连线通常有两种形态,倾斜和竖直。下图是一个存在调度问题的案例,如果HostToDevice连线如左侧所示,是倾斜的,说明此时间段调度任务安排合理,昇腾设备是满负荷执行计算和通信任务的。如果HostToDevice连线如右侧所示,是竖直的,说明昇腾设备此时快速执行完了CPU下发的任务,未满负荷进行计算和通信任务,这一般表示存在调度问题。 -When the data indicator phenomenon indicates a **scheduling** problem, it is necessary to go to the timeline interface to compare the abnormal card with the normal card to further locate the operator that has the problem. +![time_line_cann_details.png](images%2Ftime_line_cann_details.png) -On the timeline screen, select the connection type of HostToDevice. HostToDevice shows the downward execution relationship of CANN layer operators to AscendHardware operators and the downward execution relationship of CANN layer operators to HCCL communication operators for locating scheduling problems. +#### 2.3 通信问题 -The connection of HostToDevice usually has two forms, inclined and vertical. The following figure shows a case of scheduling problems. If the connection of HostToDevice is inclined as shown on the left, it indicates that the scheduling task is arranged properly during this time period, and the ascending device performs calculation and communication tasks at full load. If the HostToDevice cable is vertical as shown on the right, it indicates that the ascending device quickly completes the tasks sent by the CPU and performs calculation and communication tasks under full load. This generally indicates a scheduling problem. +当数据指标现象指示为**通信**问题时,需要进入通信界面进一步分析。通信界面用于展示集群中全网链路性能以及所有节点的通信性能,通过集群通信与计算重叠时间的分析可以找出集群训练中的慢主机或慢节点。通常,我们会根据关键指标通信矩阵、通信时长来分析性能问题。 -#### 2.3 Communication Problems +- 通信矩阵: -When the data indicator symptom indicates a **communication** problem, you need to enter the communication interface for further analysis. The communication interface is used to display the link performance of the whole network and the communication performance of all nodes in the cluster. By analyzing the overlap time of cluster communication and calculation, the slow host or slow node in the cluster training can be found out. Typically, we analyze performance issues in terms of key metrics communication matrix, communication duration. + 下图是MindStudio Insight通信矩阵可视化界面,可以获取各个通信域下,卡间的带宽、传输大小、链路方式和传输时长情况等信息。 + 分析时可以先查看传输大小,分析在这个集合通信中,每张卡的传输量是否存在差异,是否有分配不均的情况。其次,再查看传输时长,如果某张卡的传输时长非常短,那它极有可能是在处理其他事情,导致下游卡长时间等待。最后可以查看带宽情况,如果不同卡间的带宽数据差异过大或带宽数值异常,那都意味着通信域中存在异常卡。 -- Communication matrix + ![communication_matrix.png](images%2Fcommunication_matrix.png) - When analyzing, you can first check the transmission size, analyze whether there is a difference in the transmission volume of each card in this collection communication, and whether there is an uneven distribution. Second, look at the transmission time, if the transmission time of a card is very short, it is most likely to be dealing with other things, resulting in a long wait for the downstream card. Finally, you can view the bandwidth situation, if the bandwidth data difference between different cards is too large or the bandwidth value is abnormal, it means that there is an abnormal card in the communication domain. +- 通信时长: -- Communication duration + 通信时长是指计算卡之间进行一次通信所花费的时间。导致通信耗时过长的因素很多,比如通信协议配置错误、传输数据量过大等等,只有找到这些通信耗时过长的链路并妥善解决问题,才能让数据在计算卡之间更加顺畅地传输,进而提高集群的整体性能。 + 用户选择具体通信域后,即可在通信时长界面中查看通信域中各个计算卡的耗时汇总情况,以及每个通信算子的时序图和通信时长的分布图,从而快速获得通信算子的相对位置关系以及详细通信数据。 - Communication time refers to the time taken for a communication between computing cards. There are many factors that lead to excessive communication time, such as incorrect configuration of communication protocols, excessive data transmission, and so on. Only by finding these links that take too long to communicate and properly solving the problems, can data be transmitted between computing cards more smoothly, thereby improving the overall performance of the cluster. - After the user selects a specific communication domain, the user can view the time summary of each calculation card in the communication domain in the communication duration interface, as well as the timing diagram and communication duration distribution diagram of each communication operator, so as to quickly obtain the relative position relationship and detailed communication data of the communication operator. + ![communication_time.png](images%2Fcommunication_time.png) -## Common Tool Issues and Solutions +## 常见工具问题及解决办法 -### Common Issues with step Collection Performance Data +### 使用step采集性能数据常见问题 -#### schedule Configuration Error Problem +#### schedule配置错误问题 -schedule configuration related parameters have 5 parameters: wait, warm_up, active, repeat, skip_first. Each parameter must be **greater than or equal to 0**; **active** must be **greater than or equal to 1**, otherwise a warning will be thrown and set to the default value 1; if repeat is set to 0, it means that the repeat parameter does not take effect, Profiler will determine the number of loops according to the number of model training times. +schedule配置相关参数有5个,wait、warm_up、active、repeat、skip_first。每个参数大小必须**大于等于0**;其中**active**必须**大于等于1**,否则抛出警告,并设置为默认值1;如果repeat设置为0,表示repeat参数不生效,Profiler会根据模型训练的次数来确定循环次数。 -#### schedule and step Configuration Mismatch Problem +#### schedule与step配置不匹配问题 -Normally, the schedule configuration should be less than the number of model training times, that is, repeat*(wait+warm_up+active)+skip_first should be less than the number of model training times. If the schedule configuration is greater than the number of model training times, Profiler will throw an exception warning, but this will not interrupt the model training, but there may be incomplete data collection and analysis. \ No newline at end of file +正常来说schedule的配置应小于模型训练的次数,即repeat*(wait+warm_up+active)+skip_first应小于模型训练的次数。如果schedule的配置大于模型训练的次数,Profiler会抛出异常警告,但这并不会打断模型训练,但可能存在采集解析的数据不全的情况。 -- Gitee From a31d4b3eb9cbed8d82ef5acfcc841169fd733691 Mon Sep 17 00:00:00 2001 From: yuliangbin Date: Tue, 7 Jan 2025 11:03:34 +0800 Subject: [PATCH 4/5] [fix]Add cases of profiler --- .../model_train/optimize/profiler.md | 26 ++----------------- 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/docs/mindspore/source_en/model_train/optimize/profiler.md b/docs/mindspore/source_en/model_train/optimize/profiler.md index 5dd1ca095b..b194f81c54 100644 --- a/docs/mindspore/source_en/model_train/optimize/profiler.md +++ b/docs/mindspore/source_en/model_train/optimize/profiler.md @@ -339,19 +339,9 @@ You can learn about each module through the overview interface. - First, select the 'Import Data' button in the MindStudio Insight interface to import collected profiler data, and then import multi-card performance data. - ![load_data.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Fload_data.png) - - ![load_data_path.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Fload_data_path.png) - - It can be seen from the timeline interface that 8 cards of data have been imported, as shown in the figure below: - - ![time_line.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Ftime_line.png) - - Next, the overview interface can display the calculation, communication, idle time ratio of each card under the selected communication domain, and provide expert advice. - ![overview.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Foverview.png) - -The meanings of data indicators related to each legend are as follows: + The meanings of data indicators related to each legend are as follows: | legend | Meaning | |--------------|---------| @@ -375,22 +365,14 @@ Different indicator phenomena can delimit different performance problems: When the data indicator phenomenon indicates a **computation** problem, the operator data of the abnormal card can be directly viewed and compared with the normal card. In this case, you can use the performance comparison function of MindStudio Insight to set the two cards to the comparison mode and view the result on the operator interface. -![operations.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Foperations.png) - #### 2.2 Scheduling Problems When the data indicator phenomenon indicates a **scheduling** problem, it is necessary to go to the timeline interface to compare the abnormal card with the normal card to further locate the operator that has the problem. -![time_line_on_line.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Ftime_line_on_line.png) - On the timeline screen, select the connection type of HostToDevice. HostToDevice shows the downward execution relationship of CANN layer operators to AscendHardware operators and the downward execution relationship of CANN layer operators to HCCL communication operators for locating scheduling problems. -![time_line_cann.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Ftime_line_cann.png) - The connection of HostToDevice usually has two forms, inclined and vertical. The following figure shows a case of scheduling problems. If the connection of HostToDevice is inclined as shown on the left, it indicates that the scheduling task is arranged properly during this time period, and the ascending device performs calculation and communication tasks at full load. If the HostToDevice cable is vertical as shown on the right, it indicates that the ascending device quickly completes the tasks sent by the CPU and performs calculation and communication tasks under full load. This generally indicates a scheduling problem. -![time_line_cann_details.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Ftime_line_cann_details.png) - #### 2.3 Communication Problems When the data indicator symptom indicates a **communication** problem, you need to enter the communication interface for further analysis. The communication interface is used to display the link performance of the whole network and the communication performance of all nodes in the cluster. By analyzing the overlap time of cluster communication and calculation, the slow host or slow node in the cluster training can be found out. Typically, we analyze performance issues in terms of key metrics communication matrix, communication duration. @@ -399,15 +381,11 @@ When the data indicator symptom indicates a **communication** problem, you need When analyzing, you can first check the transmission size, analyze whether there is a difference in the transmission volume of each card in this collection communication, and whether there is an uneven distribution. Second, look at the transmission time, if the transmission time of a card is very short, it is most likely to be dealing with other things, resulting in a long wait for the downstream card. Finally, you can view the bandwidth situation, if the bandwidth data difference between different cards is too large or the bandwidth value is abnormal, it means that there is an abnormal card in the communication domain. - ![communication_matrix.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Fcommunication_matrix.png) - - Communication duration Communication time refers to the time taken for a communication between computing cards. There are many factors that lead to excessive communication time, such as incorrect configuration of communication protocols, excessive data transmission, and so on. Only by finding these links that take too long to communicate and properly solving the problems, can data be transmitted between computing cards more smoothly, thereby improving the overall performance of the cluster. After the user selects a specific communication domain, the user can view the time summary of each calculation card in the communication domain in the communication duration interface, as well as the timing diagram and communication duration distribution diagram of each communication operator, so as to quickly obtain the relative position relationship and detailed communication data of the communication operator. - ![communication_time.png](..%2F..%2F..%2Fsource_zh_cn%2Fmodel_train%2Foptimize%2Fimages%2Fcommunication_time.png) - ## Common Tool Issues and Solutions ### Common Issues with step Collection Performance Data @@ -418,4 +396,4 @@ schedule configuration related parameters have 5 parameters: wait, warm_up, acti #### schedule and step Configuration Mismatch Problem -Normally, the schedule configuration should be less than the number of model training times, that is, repeat*(wait+warm_up+active)+skip_first should be less than the number of model training times. If the schedule configuration is greater than the number of model training times, Profiler will throw an exception warning, but this will not interrupt the model training, but there may be incomplete data collection and analysis. +Normally, the schedule configuration should be less than the number of model training times, that is, repeat*(wait+warm_up+active)+skip_first should be less than the number of model training times. If the schedule configuration is greater than the number of model training times, Profiler will throw an exception warning, but this will not interrupt the model training, but there may be incomplete data collection and analysis. \ No newline at end of file -- Gitee From a2287b1eebd182ebb7695b5bcd5e5944571f65ed Mon Sep 17 00:00:00 2001 From: yuliangbin Date: Tue, 7 Jan 2025 11:04:21 +0800 Subject: [PATCH 5/5] Revert "[fix]Add cases of profiler" This reverts commit cbf68872266dada567a6b0fc8769d6606aa3c917. --- .../optimize/images/profiler_process.png | Bin 18089 -> 70618 bytes .../optimize/images/profiler_process.png | Bin 33042 -> 49216 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/mindspore/source_en/model_train/optimize/images/profiler_process.png b/docs/mindspore/source_en/model_train/optimize/images/profiler_process.png index 1aa34972b9c2c284e70b7e99a3b80a0adc4e13ab..e70db346add0f56e77106523d1e245d4479cbf98 100644 GIT binary patch literal 70618 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 l=-ao{twR;#o7P> literal 18089 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 diff --git a/docs/mindspore/source_zh_cn/model_train/optimize/images/profiler_process.png b/docs/mindspore/source_zh_cn/model_train/optimize/images/profiler_process.png index 16059fe0497c0df6adc1b4fe89916bbad76c3db4..479480c298970c29d65702ccbd1f7fd19bfd3ce6 100644 GIT binary patch literal 49216 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 JJbf|ze*h>JRD%Ej literal 33042 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