From 472402bf4e5a8c45c33b030d9a41d54224d556f3 Mon Sep 17 00:00:00 2001 From: yangjianfengo1 <125249383+yangjianfengo1@users.noreply.github.com> Date: Mon, 8 Sep 2025 12:23:18 +0800 Subject: [PATCH] Update sparse attn documentation (#3954) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 更新文档 * 更新文档 * 更新文档 * 更新文档 --- docs/features/images/plas_inference_union.png | Bin 0 -> 34881 bytes .../features/images/plas_training_distill.png | Bin 0 -> 81681 bytes docs/features/moba_sparse_attention.md | 31 --- docs/features/plas_attention.md | 219 +++++++++++++++++ .../features/images/plas_inference_union.png | Bin 0 -> 34881 bytes .../features/images/plas_training_distill.png | Bin 0 -> 81681 bytes docs/zh/features/plas_attention.md | 223 ++++++++++++++++++ 7 files changed, 442 insertions(+), 31 deletions(-) create mode 100644 docs/features/images/plas_inference_union.png create mode 100644 docs/features/images/plas_training_distill.png delete mode 100644 docs/features/moba_sparse_attention.md create mode 100644 docs/features/plas_attention.md create mode 100644 docs/zh/features/images/plas_inference_union.png create mode 100644 docs/zh/features/images/plas_training_distill.png create mode 100644 docs/zh/features/plas_attention.md diff --git a/docs/features/images/plas_inference_union.png b/docs/features/images/plas_inference_union.png new file mode 100644 index 0000000000000000000000000000000000000000..4edc174c10dd76aa1ce434135075443dafe15f3d GIT binary patch literal 34881 zcmd431z40{-!3}JUqxC$kPt)#L@DV;M*(SRY3c56{8K8alt_tm3_UcAfON+YLrFJ7 z$549>zVCa!efD?G-rsk=Yo9%r0@s>np0%D8zjfdD?_Trqjl3iw9u*!00wI)o{YnV} zx%L+Xa&-^)Dkwp=!?eJ!n|7}?93c>VQtbaLkZ*~1A&~nJsaG#l+!EI(UA^QE=~}nZ zbz>3_9vK9FxOe-Rh02C1TwSr$te+gV^D;*&+ybpydJy{g1quDDM^*8g zXJ_{Nl{P`4q=$@4`=@K3^-G@hhf!s64R0tX zJlb*prG_9}^HLWV^{sbrJ#SmrE@=v&)(Z85>JQ`xC7%=AKyR7P6y2?x~<>ad%t|m_xo0Ox;3QE+kv5dAG z`_xF=p)$FXp5ftPjY4{%L=o>2g$Vg?Umsgqu94Hh9UUA{rH-DXx4Sx9vcie~fWT#4_bDhhDL2O|E&{0=gotVAM9y#E~7 z?L1olJlz6+SdYn9oXj1su<7z3EUEGCL};}V^E^|8en9YUzAbWFNH=#pxY)Iw^dKY* zo~-m3v+G}ewYf-WS*TYPJv~Lg(JQ@lInDgEjVfhPec!~?L+=R;6)klZN~&(>YBs{7 zrL#A$->}lISnNBWl+f}PS*zSNsc4s}{Z&1GGaNmo^9N-48a zVLFxiI%J6cee{46imTWKpRa$IwY%8O4*T@+W62vW6l!dLc>ptC{7?zezu&t;a~(TR zUn?@QMa3SQ56EeiajvdR+P=#hz9(FltGc~oGg+{UHyvili*7TFyc?YSrQ7Pmj$U8YGjFfs9BOT%z~I%9I5idWQ?)ov_>+H2V6c&RI<*7jW6eRr_} zUP=lrL-+B7MacZ?(S5!-H9!NW1T$^wg4W8{tww&lpOIQQb~Gtl8-7>aG1`gYE%6T8zMaSN=izk&zT?(ui@99SxQ~}S-0fvUM8ah10ATA zMOYJf48rqO>Lyy4n$S`!^A35Gl;Gq6YoV=SPXeFb4*f!h`l(CTA zpFU}O5Z_cp(m24WqY!+46eTJl;^}HVXbvwKiBkOhxtHhLNQK0B`onQVOrUsm{gM;W zWehR;+&-Xgeps?;{Pga@BgRL<1m5p*Js#b<)k{FZ%3@skML3CgO#aW)KPQjhQ85~G zSP1o?ov1PWp{eUhdrQAETdjTTPL9eG%HS*5u_<}Ic*D&2^UL>F+l6{lgi5_TTPjD7 z+PN0rYG|x@hSQ8voO9Qj?-H-^S^YrEZnn>HTu`eQ>Qs51EQb9ZnD|8XfJHskAP|q1 zc>zeZ%0N(%woGhtg_%^?;p$x%jJ4)PcN~rqONn@sW>82_;l1#% zu(3MBgx->A_GGa<^zmuPOn^T2;W>O6@tYLcAH3YWMtKljxU6q&%^FY%A_NL4x;Bz8 zE&G~-=KJ6ZW9Yq=wbG%YUB%@lSOT9HW{kwVFGW;_DS|pCI@(BIU$J!fB>WowJ&`i? zwEpFh;0gTIiOjLc)Q1ug2`uL|ECTfOqDjWBOpkEsZKikhme%IhN?CZ-qK*r(t$@6H z0Gfd~7w*i?(mj*FNK_oKW~^J7ZRq8Nekn?3WYo0q6|(Bf-1ognUz;~_YTj`BkaHn` zXA&%^_{cMy@h*`O1G#_$qoVw4yepW-Yi(ElG?XVVWtqBRqV(QGSeu*Qu$gS)*J( zhKADcSyXb5AN4<^;xR8k)C<~9ovPN>?w@UM+Xn@z9_+cW8=ihIj2B~<{SeY=i{|+5 z%9pk~j%^cU*Yxi!DckAlV#frN0V&P8V+5=7-61(;T27ResQ5?-Oi-)Wh20zGq zQlhHp8o-UhG@U!u_m+iz?{;-xR?LxVCB`MZIIgcMoEQ6K!^YH<+HUC}C+Z?m*yWd< z9}G76E2nf7X`ARZ{zE*3l5N;_G~Khe9^>-yi;ZD@ib17I_v)SZt~Pk|!gYD-2l?L& zo`ofpPt;h}lpUetqcl!tUKQVFDB-_c&A%r*4>-JzekM2FI7lxq*Xs32Ymv8eU`w3U z)T$8<3YlY4P?+=gioHm+{ngrX=D7Fnli}vX0iX6B!bLm_$>^)9gjwi}6B``A8mS}e zq%xW&sjr`^9|5Hc6eaMsyJ%=Sd8XK33|`;9j`D{wN~C@K_(|dQmd4!S3xBfn>)7!R zY&+mM-EGY1?^k?rr6NU?Fe22g09ntXQ5{<2sZlYoY1|pZzOtCyQch0(q^bFKL531_ z4ziwrs1jy7y@wdiv#i-0ij9oi;@Eq!JzKDHZXTL(@W~K@?i$=;0y~JP_s&uO%NsV6 zwKl5`puR{hBhR}9T7^EJe>8Jdz)+13k{-UK6LmY@$*A7|du9#BbLE>}hC`8So3^zF zxrK6lHsza28H(QSucv1@q>^04)(wM$6V>J2K|lOxSom24@1^-oWVRLPmYt;YLV z``9Sr-LQsyhEj%MGzoN~hMEN~mOX8@cSKhL%jU~2wfo59mw)8h8Kmzo+P$|(*Db(c z_zc5zHSPs2L|4~kXmRn20==Y|AH922k-)_i$L>y76)zWiga|Y<-ubRP zqNbs6+Lny$uGxSl#7Hd3re*$SdkvDD+{VUOx;ln!b5*md6)v92m%#{#)0#BW#*aN{E% z`oQ8%-50eJejMOdJtB~ll$6>Sw-sf;f4)h2Ynyvd|3lg6cl%Ng08rctUG6B@Y6%HN z#e!YeFOfbjK!4;mLxzjp&y5eJGvU{gWHoR3Ss5KAJKSjfJ8#&bkOGVcCu7{i&g$Yh zCTECUuU>nvQ^9s}ey4d?L=aBoyThL#gA-Yo&*GjfguRvpdrKvoppZ^-cHAoJXp9|w zz|q1|JW~Xndwg_scgE$G(k0J!v&nsD-qD5m0jmWZl|zb&pG>QUkkd7Wx%w#_j(OntKDZ~JQmXl?H5&(HStTeOVr0LlkAKg5Wr34}$7CBrn`+O|C_i4hJ- zN?}gHD)!)rE?e}wQAdDHh^a>=t0vjk6|?J^*mzx#JIxzfJOjU8jiFHRwNZv+VTqN) z=8!gSQEuMNum<~WduF1LkPtp?**4Ta0l+Eu%J1)xwB+wU{c@2OMmFUXw%1p*&iOu3 zxXM`<)xCWGQQ0(%hPSPV>r`r#0>=ZN{u3E%EFZ$#?x*$2-cD#0f}B}X_*nS;m5MO( zwPDLhRB(`(`<%0`LQ|76&B46=D0Ne^iTOVsYF?NtF*35~-4sh&PmBzOxTNvoyq$Kw z$ru`+&~x#ef5H9LE2;#5)aq=`f|v_D$S@qgV-e8-TICkw+ufbH`_RqnXTqjI`d|ai zc=n7r<+HrB^hD*-0Xlc)gWERrI=1;wAM*LhfWNu4)AAJE( zq!lb0xxlEV!6|xEtkn=EHQ_okF)oE~a~!~~TkG8T^2UK~otJ*zbmmV#t)Me?cDVYVW~cLPauJon@k?oJh%?DtqFC?{B)>50<2`YRJOL2;ix&Fi1@&DJ^e zpV1@wAnQUk)`9X^RKOQ<-q0VSBeC-w+G@x_lG2cE4R+-~ap9VimFAtN2SlwAw8;X_ z&`qve$;via>B`5yyowA_XVd)<{&9ONdseYI51JwE;^H0^ zQK*}yX7|f)I%9 zpT<>L zHBSmPTBi6dl%|x^RnFVdiHD7&?EEaKp+KY2)(tH%4#H2lWD`UXrYTqAr)uSPF|PhN zhCI)tq@*y(f@r?CYjGJ~;jSM+gjdwf1p9!1Ys8yeyQxr{#(01iBmKoC>-zXmF6#ps zTI@_rrqo(mXP>p>%2^*I2d<6y@Y!n)lEVT>P;u-y=!trVu!a?wDTuS4K7htWj;~4A5lx%!LQ{q zWU`3ekOYQyDLz9#fEjpq2gwJ`;M7+A{`?9vLEID7YT2W-Ce%0ct`AZ0^NeJUOthi@1}0%DVQgrU$(Ra zC|tHDE9GEnmIg+ZWPKdN&D)-K0G8-=_)nx6hx)Ote#=1iw=IOD zl(T`!8`G&4B4{{bjsuYm!OA1=)*JjIyVowNJ&t#pg6Y*_hm%$7^3?KXRu*&$pc$d^ z&Kn&WCx@GiXm<7DFP`xZ5=l(w0$wYP$4}$fbnD%w+Q)KA)Oi%x(O?tN8XtX>GNZWc zAGYRo#tX9@C~K~i8Vn@)-1~4iU)O!F?R_vkJ$$-wy3%|%NbcL%nDLSGL&*2PuyfsS zWY&Nusx?Amt)_A7&Ub)h2KYP<>Gsa%DTgWD)rO~isL9zAO^3_@7oH4Y4$|j;Fgxb@ zFc^*6WZIt~zFF^fo=;+MOo#8QTa;d6s_KnUJJ~rZZmJi3dayo`%U)uT(EF+3JXojM{Hr00HAi*}t? zF(5=W<2F)_U=#z)L(vb3?a$ zV%;5qCB|pjTv_3+7K1GGqM}KqV1#siO)7s##^~Ho@ZmLjs~`6u2nTS*U|)ePsnImB z2)D-Fi%d4Ek2mhE4qI-m%`Om9@gO7mE#QWdL?h;K=!a+13YzsEhH*9`8I&$oliW5# zc9N}s&oT9my8k}s{xb&J8YZK|m!7mY%*8Cr{T=#W?<%wv7hti~x2F=p4 ziJW;rX*kOT)b?=my7AE(#BU-TJK66$X>Lr=Wi5|ekGqz`OS!1tSsQZgC0s~_IGV_Q z`rsCOkm%`Zvo;2ogL-+b9VEq_RngnlpSHKYs{4>AYMw~)!vt1ckReSCb9Q1;$tj5| zbKCD=$kD0%5HeISt7_d8I|=BrZ(WA;zG6-IfRfu$RGG{*$hFzai8b4mLz+sAUK{7J zM9SOCj?jvj$|t0M{CFE`#{CU266f^+R`|^k3S^DTM5DdEYd3kYQKGb$u|g?;0muCgxm+3vBvAPc@p4~Q9;C*~3TE5v($Cb=Y5m7My&j|v*D zbsf@8D2RTSJ^rL5cPrHJGK{}yuTU>WJ#GNH$*QYxJ>ka2Frf-gg~3%Soa z!G#@`zx}Uf91LdVOzCUY2ILLZyYd~u25qK_T1+)GZF#>y-HKjN-GJ2MT&@EBobpIi z1oWjcwOZNRo1pWHWIh?L)=oe7C@vx~*f~NxNHtLa-z`sPL^^snA7 zzXa@k;FKN$p?r?rgGr1#R3lMB71nohCPGeze%}+?Z2Hk|3b$ z69Vh+`1OkQPw0mgu~3B#$3PNCQ@NAr4}}BUX%NUj;N^s@t+jl;5$XA2sW(Z=el)68 z9}}brvl+{ErXm#-B-gCAs9W$g{lcCo#C3eq-yR&prXyjY$M4!=J6KI-TH|=K7{rtJ zjrW4XTZ|C$djq@l?z?^pL%!aqJgO|a!Dls8R+3dwR%ySX$4n&Ta`e4^TYrrRFcSjx zm9j$lRcQscg4qQT!_BMaeucdQNKu(E#{5}TA|s2pW_v z_hJjY6Y!N=(6<^|zI-z`(%{?ng(a@CvSmYKaL>YI?;Fw~q%EQRKI@S)YUM8Oj0y>c zqg;-w0aKHx!UGMDmBy-&rQY*{HHEM>HE%bubo0)LTsO6tAaN`=t2`Q=7gJO+_%Re7 zHu#7R0>Qh)KvjM4r*X4{J=as@cgIu!TjRAJFAk}P4X%iy$IoIfoXt1piX;bEYv!1` zA1m&JWtj#}5P~fb>6nURGc7Caaqm^DLb6(4yT|JYWwhWT^)$VXYhicA$af)+(R<{lRjZ-p?*_VUXUSA6=} zxj9h_j8B>gYo4kvJ77@Vt1&?I4j@rBIiIMRHXUFb0Xv2F+G0mWNP6<<+wSa{mmaU>(JNC^_FvOnvHP-c|Ifo@(4yC+cVSybt9+i zd~sfX2zgFxW?>4+gQ=`EmeR3<@dp985s@2*)~Q$B14tB7Ivqc!M;Yo;c1BeIC7?Ia zGO7cgC`7*XZ7Hw!4u2EL*F@=zYOggPAJ5>S>tIHTdB^s|KU)w_-;P0seJeX!T~p+- z9N}5dzeqN1tNTutwc4L|0mxt|4X+tsV$pd?XPp2O$)wcGAL^OPC*4odAI?+E+bj%G zC*yKMY>(&>jDG2GEWhr3>ZQ&wUBY)6TNVdJYyU1w{kcnYzteW#GvQWA3 zT#6DNT6poiia6U-Jt)q@5fZq zrPe+vg=_ziLpydXfP~gKvAg`A(ud>J!#33fmE<4)M*a|famhUXSE&f(f5uh*(-+*Q z4h$3x^`g~ZeFA~BT;hwd*@ez@n|qqb12((OP9fvzlmX>D*nIdk|-zL4i*!6WHL#sEx z_a-C~{}MN=SiqaV$&IH7yPx)c_6HhFUtPQn;;v|k%OvrqJM5pmUYb(G@g%s4_>f@^ zhrAQbiUj`9sCzr#W=OCP_?Rpd{z@>fh16vTE$wQ_|z8_i+#GMBgwVDea|J{ zthppDB+)=3#SKA6-J+v|ME}WyiYw=+ z*gq9&{0B6%MA%*e_Eb@$FMZz3m zhWi9KZyv`;?{jm?$L8Rn#&PMB>t3(PWv!^UHN?J5k>y%y!UyzJF<6vx|M6Y}m@qyG z!+ho_gNgJN=!dqYTb62t!XEQKn<67o=n>nAGWRCN?)7!0^Q-7-{HdbhLt6x)wU86# zGY>C|l%3x%+7|bHb?Us1XPQW!%2@X1PO0W0xAu0})Kiss?_7s~=0G5K2QBny#au>5 zOq-LFwD#jF)$>&}aP8;&&gsuQEw~HMvv1Lm74^6p165qTaN6LmkY2s4pu_S{irRLu4S9N{5v@|+Ed3WCa?FbQFfkvHn)*vCJpuu!; z>5Ei$B3i`#y3M11F`QzSz$*{}>=q9R4LkN3*g;a)IIS`7ua8!n10^Rs{2JILi+6u+ zlTw_DomqV-bLnSyZ1!ClLbaHzACe+|I0Ha(=>DU&)ZALV36*H}l z0lmzSS3s}Is1-0Pl~wxK&qiwiu7QsS`27cuTkdF^H&T4AXSwn^p1AahiAk>33i|@P z)FT(pM?Y!lU%g;jdhZ`pUo4+NwT;-O9yz;n{zw+ro}J$g-dl2>;`@2O5dyh=ndDE; zx4T7=qtl#+3SzCv_{khV@&qZlp__6-NbGA+>pt@!r#pYpV(FY;eA;Hbz7&>})DN+w zPDq_TRnSc2GE{o?iwiqMmm-dmv9IMDDa;GKrt-(U9|CC4JSlQcH`R#_DS zrh~`u6j8bT5%M!2lEy`X<}M*(g1l=a%bAiJQ> zr>118+B@xen)|LwRFKEl{`3l1y^$z@QssIXK{9C?pNI^ql6S7_5^K`cdE%TyfB1J# zicr*S5mQ9d9wE>gOH|ifRqsI_U;XoOkbjFs-8fh$;B_-_{8WaDGps+8##QWVull4e zZ5re(IO)4&<&26}n5w5uSid7@YqhgjH60Z8O^uhIq7IABd)(KzUU<(n4d0`|7i?F( z3-QD91BZy9umq&-=qt_jk+eY_|6pF~j~=%KtlInl$;YQ>JmnZ1?qNIry1e{2=N<)J zg4gqZAmO`UQhC>XWIPD#R<+pwie{1t0eXg*gBhZKk*`2U)cy1WNn-~JQ*%?S?d?A+ zi)kNR666)N$m^Z$M8XSh!PVv;8dU3;|M4o$y zTY4+w|H9qI#T*bnlD{cRZ~#khsfyGUiS*B@J1?C1Y|`^G1dk z>uTw4dtv6qZr;3!*~Ym+e2>rmo3yo;$8YnaDC&{IQ-0$gL!=JuX6tP;K!jn{oq$J1 z4Fc`AC*|Z2D9#yI@RzzBST#BZ^DK_>Xb)d*PSsI!AB@iopuYbUGL$5=oh*2%il#as zDx5MG{trNKhdZ&SOxGaI4?x`a)6PgwI0^T@$k(l!uh8=uFf#}s(S#kWF5m-^KC&fS zC3kp3=x|Le8^|uq@|?zvUs)4|DV+;;b*g$?7rwJ2Y$ofKvxeouh8Y7ifH1;Up@_Z&wQeR_yl;y(l4CKd`y1wo_;C#T$Y<{tM@5B|| zS7<$y-mI<{!I{eu5;%rha34Rs0g--jxn9E33>#9XLuvOG_^wo(73$PEh|Sx`Iyq^3 zd8I-FKaoG3QA#&!mZk-YhJs;`dq`}zRvAm!l?MHO^Zb1s1Zz@8?$D}eiqE+eS^=aT z?~u7kf?Rw+LAqtmPK@w`blm4UFtP!c)0hc>Rq2>IU|!&KrnfaUH&+FTcftMDglZDV z8gY3*KxCW7Be)bG# z%P)agz6#xP0Wr#)_&%s06}RcqSi!Qu^AR=Aud+Z)q%E@k?C({k{$uVCZiy ziB5*|*O*Kr&RLTmxhG_LmoIfr#&1AcxflVe1sbPoi zJ^=FR@>wVPjbEc$!`p#6_vwRiPN->nFu7Yp$A?@tm{7wSn2y~dXx|$bi!^1q&c^f)sb;MNM2RjAH=L!?G z`f|(uClX1>={(g6-IqZbm5Yg;noUOY6VQLiQw_%$*7h z?w_1f@mSutaczAP?u{d`u6b7+;W_32{Qy#^g=d4NP1Rzg zq__8|E#TFvofHaGe9|5v?Za|w6*ig|O`%oZ7-G)+86cD;jh7GodKF{myvAquT16## zItbxneMk!Bwm@;>>zQ_74p+a#bb}n|_QqFqNZey)J#mQayZs<*I&L$o)hG8$6Jvsn zeaQml^u#n4`}bpvsSFpjb+4&=R%LdCGljOP0-ps|1t`E~_hJily998Xo_7EzQD|6* zkk8&$_Kg3&NNcZ-dJYo$LDDJp7j0M9?&&rD4 z(KEpgGNxOcr-{zAaqZ7m7v6iAqrn=E`Fduu9_%Uoc71Yk#WsAyg_hVA#`tTQY~1qaHcNqsRE38@IAe zrk`($oV2`>REX!$^d&0Kb?wHof`iuPSCWM5gCgMZj1|zvz6DPK`RMm^_Jvh@&1eIc zAij^DzGa*wZmOD=6YvXd83I5Jfgx0LXbE|YQF z5E5tsswAg2>$5$e(tT4BxZCUEwJfDK>G1?czgfGFDUSbN)LO1Jdjfz^BPB2GiLbW7 zE8{vfhuoScQYk)S-O1#n`%v6xrY-5=IyFLqH392+r-l)Gx%yDU!lra-ix#m1>0D~daq;urXPXwhl@C6 z26NywJC`ge>`6vNh1v31_76TpPuEeQVOuhFppa~ws8)Qe43V~aff*`53#ynK%W`++Jz?1L7B}(gzcLE=8$TeBuSiuEI4UstRcm3P}@Qg3pKzCy#ZmRR8 zmBKw><1T%{`at-zj8jgW&%A)Mi=hu$PNlL6M8Lu{GB=NzE&BZv;%(TSYit4EwseNU zU>Pp+yGz&b1#Z%_unc-66h}ps*59H##5__>Iuru|SN`?uJ_~pn;&`_Aj*LY3alK;H zA~eHdJTWg`5rr^Q9qpA?G4txy!|*7u>K<7tLj^98aN-t@zzq1Kdcy{G=mS;mD+n_hq z`J?75fbd?s5W3>Y&i}aiS!`_K`ThOzLa~jhVjg&J_3rd!EnopAKZdxINi54&gXxy; zima^x$dTeRVE#NM;^Bj2li9Q@kVpVn;!Ey)Da06WMt}vtSTd8k28pD?P8v0}LivL0 zH*RF{wsdbGH6{$2b(Cp}W((!8Z{QMBpXTi0K7BYKHTV0%Cc2vusJNt=T^LVvKNWnH z>VR&vwA3>=;zydU(OMP`#6e_-1F{PsI%oS}r`B}euUF!t5wGoK4F>Y!&SIY=?PLta z*bADy)75 zT?f<>p4vwzU@9;m*xNAkz>5g5CI>0lA)`7}^B=(v*HOu{UvC_~+zXSC`#;deNCmo$9z@eOb&u22J(3=(v_&F(;uthYP2vL;Vvbhew`Y&i3*(|nTy zB+SyoWrQ999W&u*od^=Y>I&qw7*v zMA}HUP3+$c5yhFPTy3IWDk1e+071t#7DW%>T>voGk?1JodrBH zYdLSZ(#eef3G@TV69d5Kv%{Y+UxxvyqW(fb--DrT!{E^J$!c?dQHul2o@3kt@r?6d z0e|HrMSsoiO+>Kj7^8n@qfgz3xzmEpdCZ3g@-zv(wMa>ku(@Cv3U*vivRt$P$Ztom zSwrcjz{1WdlhR&ab7cf0WTukfbXDNlc9^PQQjh5|orJ%TlgGXi1Dc9w;Itf=I{dhI zwh}3$Y^N$sKK-~9QeMjdwKnH$GJD4N1V+dGeJLDqMuW$XN8jQlChpOS{y8;yb#vm& z^@E8G)fWCaY4F0(g= z9Im-Bbkop6omIV5nlfU5ZBhu1SGh2~lXgG{clR#AH29O`+`FakCFA&Z8OQq}(5cc? zcb8 z9n`Cqq_M`MJEwFp2WfknLg;%tv;P+^{Y0nQSKc*KZ&O*>p>kH>Df!Ayn80g3apu`z zUrd!cI7x`7U28YBZ>heQcYq$Na^Cf5nr8`E9)vZ4{QXt*1ehmQ8>=zk-~=gjC|B9` z_wUrPT^<}rv~-ph+(7D+r8a;TyB3hgSVj<{Xv{v@uj4Pck$KvKn*H?(!wW^G zrAAD%ViST!aCz{AzEJO|%y2D}cq)(6c%X9bg2o1Xw1s#sLsb*zauj*KZ>bg@5{5jS zZ%@$68ax9@SGiSH&)(9mueJz}b76y@-`V4i@?)m1UW51%I8_6>dII8M`-q!|s%>9- zJhR2s@AqRf*&rOQ43iTIiFLGgOKJwtTF>|$5QZgifL&9k)Lv5CYJGoA9k>{bjEy&d z$OzOO3|C8#yzc8`o<@%ZSDM#`u;eUtxS=WAG{P5+T96^86Md{)kSJ-)&U}51RkK?9 zgKADU2@QD?DiYS2 z?BJn><>$*Ol0&WmUbmtI#N@IYqo^^}Ld86fFwHUDPtvN5aFv@QN+k+b=r_-O#VcN3 zkz}`(WJj--_yXcOYc1t=Hmnnvh?iAH32FOysZ4JXeGa(t_0nVjnY#0Z15$b^vHTQz zar^o^`AaU}=JQA&ViJT^L;S2HK(WuCVtH)w$3MkUpp9Df52Wt;-Mp0CBSi*e8`n-< zzJQxYX5`=lvEjK*blR69YXs|#?2rOOukdxFJXX(+r}OWgo+NT|E@6`)f!I_Co8#0? z`{k%Ri`vNoBPLILS-#Pc*|iR-{@ze|qWbX*!}P`XR5-kQTyiP<5yA6#Y+HUthtr~b z_xgO4)!*;sz8!O{n`ZM2zG_a`@m^~5LN}ddSH%ua0i7Ulr|-17BO{1QKda^vY0OI> z0LTXYt6Bv~4U@r(Nwor?pU6GwO}sE(fNe;;tHi=f;ST;zo|t$b7rbF(Sij$W+7=3O zGIM=5GG~1^I_MB*oDN+9Dw6X*v5j%_BL}DXT=VnuWp%EWSTyvOD(Ohxz8>j_Rfd1o z%qcc^4l&#xj|{jn|2RM&0@>Q!TNV25b&VJ_oWe7htL7@o0?Cvt*uoVJp>GgC}6GEC?yR6i3j}Fqm}>k&c|swSmqH z46;IaGvN`zebd>?9IO#JxOey;aU~Pm1S4z{AVxHxnCOo}a~({Ed9Odke&OJw>c4>o zg$?RJht%eGWpoz<7x!FR93e)kK!*f#0IMH>Yc!PV|8D)(E%dq(;s9bNDB+9%cL>Jn zijezJ*kZOn#r~jJ5_BjiZo(D|UKV3>3{kaF;JtsUOBoXr>-T5~J+asPnW0L?`sQ%6 zl_yv?r9n5!Sql5kpTsGo^x%bm3sa8{!fsP9_-Z)Pves1J+<5g92dWjP&uZ+} zEa!E;0}P04Q9$8>KpuyK7AunGg$a%&14!^s*b}c=${}{PjGgC z6a73x=~}ROLN(rR9m5F7qd3w-+zh;>?q$Zyge15V(c!<7$NLaxTn;5F|6>@4m&4Tu z2}j&pSQF=%)rs{j=+`B6CU4J04Zv*=_NpYX$!+;?%5#6gNXsJ0Hkvcq7uY%ZN4V?y z%M_c$Q4X)tDQ4BgHlZ{>#2$^lX>S8fg%4d@0J0+>STo-XX zODM9xIS8Itb-6PcEe4A&o+9Jjfe97F!B3aD62F0F*!ulWVP5aE0Fui*tK3Df;)Unu zk}k%8?B5pb0hN?H(Acpju}+c2!tTIzq1=ebKhLYVb(am83veSidmQA97eUmBmboeP z+L#ve)fA9N>R?f@5~zs#F5S)lqn!KyZe{-ex#$1cu?$J_Oy~g6Ge+@}BkHl{p{jQ9 zIAhw&jCN<{PS>$s`Inj~ZRHgw!5C?V5v#>e(9@~>d+jvWKsW5Fx26I=dHkg)>-Qt) z-zDL*=0=H^r29{r`XAGqGnUELTFG7dD6TuRQ2r+9Tr%klrT8WJ*Hec0;26xGfC=$q z`Qs)8()NGdIp_cH$B_Tc9sCkmpE36jF@R}$f2o+;8Gu6lC&)DyqhF<>lR~u@FPf;( z$b-FH6H8Omjt+2DM(EIKWJz)>Ci~g43!jg`fie98pIa})06W~>ng6;2> zFNaD9x1;$^2!k(1|$x9`0TP-jlYmzngx@>0Etx733tqzV%MmVRrNTpHu_~!TrMz zAHzL>k#4;|t*EF^GL`rx-GuMamXDK@Q$9E)hWyoHVZih4>vDF$Q9z6(@8K$HcxeCX zA_EgG1_YMNeFa2EdB#Q#G}gL-jg*)B#s8k51I~k+u2NyEg}7z$V=bHi;ZybZ4Pu!= z=U;jOz^DIDox9j4`%ipNz`vRO|J8RW?&@2vi7+gI0gnfGai;zE>8<~>Vn8AeFtZtU z1oYDlY*4BzAp5Pr$XGQD{BB|R*f{52A_b0RUB@7dSp}(jThtH zDtDACzUC6ICCqmdK|1{1M4Znx;;3>o;KtWoxiMSXoUud6`G!b#~gdZNY z>rw2nMSphvjE|KkpT9sS@Ik*J3-vkfrhmLdZjd6Q3y#xeeWUJ<4B4!80k3N9<4m#2~1sXtJ%W1yp8!h_CBhB7u3{4l&L4ropE# zH}J{!bm8X}1tK2t@}c43RDwkcLxW7x>T$c3)r)Y~%kT7v9Dhs~q@$z5Rs8`}&^3l{ zfy^-#+(sE+JWHEWE-RyH?^k>;ORx}`AVu+`OR5+;%ubi+er8 zq#-U&b$lWVyC$0)_b5m`52@$Z*Ar2*^e^6rPyncJ;{LakM;wn=&KPha=AIy>(;!mw z{+`NAKHF<8@L1!aoH(^JlaeE>1r_4wlD*7rE|u0I*PRKZZj`i8nmstsnS|o5qOt35 zXh?mLmU&OmnX7L8NW!cyFKOIs7a8{;<_0s}Xhn@`l%SBS70+FQjLzsar0eq~8xb9y z-PevO!am$SU6TGMhaVzBN~@2iCVeYx``_)CVDrV{;o&fpv)4Y{2S{_VDJ;%=Tj%O1 zo}{ylva)IP$BS@o+qa&B7@q6?4WRn*ygI~Jewgb;!$89p(3_G4?YTE-$&R_Pjeo8@ z|wQvXEu zlr2KH?si|QI8II@Ic%I=uT(0%wpG<_bR$^@HOJe|YCq?0a8`)t-F9TP}W(60z(`%yiZ9!Qd` zdrejnoah5z_V73Y1XI~lgHRG^)?oLsd2vXyVb}>V&2WLCsXMSHwJSK*^XQzGMx=<; zSH9i;a>iO9VKY#cq26&-{wqx~@Lb&8KerRei%8&>dpogF^}2Z05Fu;-*lj1EmqnpM z_k0)1d=sBOsGg^h1^gD?1^Sx9r`O8lVubUY5wsFE}W6B3?fBD_XPlZ6TKds6~ zkwe`)DLm}hp|oHwe^E7?@OiW za&piuRAHOJt6u1ut(uk0ofsYMc5obLqZ(hbu;Ej5c3L%Psm?ZC>7xquIt3%Wou|Q+ zCK3=ldG0(|?I%Ow1Rbf==#*gRVFuqxVEyTuZYa-CZqYbj9BXnRI6rZ+^EAWqFUWJp zp}Rq(q)}a&U#AA#n+L=Po@>jl1NlGyz;46BZ^aBmL<#>F)lZIUDBE4jEC%uek&}B82RaI-ocV_*oB05PdD#K7t zhN3$`^f)9S;IBGe_JGl9_c{`+JJ`1NEZHIED&>}eJNA6Sf~z07 z`^TEaMNw9nui6JJeJ4ME{rY`mZQtXDJ0__}%hUCOAtIJlk3NiI102`>)hh{(xyYn} zZ;Rl2`O>>1Hmb*3x7;mxqQoh_B**okbSz5}DxbxNYQ;P;gpi8YtFLH=@1_5=yW{s2 zpH*V~SeNyQ$@X@sWTn2EzHprz;BeS*f#x&!Q!{su5VZ}Hvq}y)9cPJLa;?pVkc-V^ zdDD74d!@6x#bQtL_Qqa2^aGf6A}$lrM@N;wq^5A>HKa}|T0`x#RJyHvwDQ+j1dj?i zjgxo7#26Sw{o^AM0M_p0;x}D?IRG%6Y?j+1`+dDQYL}DP({W$0GAxkCdLEdeHK%0S zWax+QYa{a??>teF_GDi9>Yp>16`u9Di_4cPq^7c3tw8f^uibDb`sYterMvaFZd-Z$ zm1dM9n;iPBSpf(7;Y&tmC>56v$T|22UT0G(eZ!7j zR3>XnXhPzDtM0v{n(E$l(I6jKkfJoDil_((SSV8Chf)LqrAi0sMS78r(p02LQ#w*2 zgeDyVK|rL$fb>pi0YVGCL(WY6etYbF_Bi+MaoQdC-;9;4l{Me_mgjxmXJ&SSY5J?Q zOHXL_b9)O}#hxe_zp5@MkBYLng!ErgLJh10)4lGZomT=D@wr>+n(mSC6<%|fHxIg} zulG0@6qrBu@*F^vY~Q0=&e60<|FCMSpa4xh!d|l3L$w2v!Vtz|Wu?D_xH zk@nvC=Hf0LEl^$;s-&7i8y6XjiF$kArS0f7NWQN0YI^R>yqh6>Rn%*q%+0#s+1%@3{3TB9eT!qTBDqd+cJV6sak__Q~TZ0;|_gWWiKKw1c)zw)M9p-eTEX>IJXLm|h0cO?fu? zkC&@kQ*0cc-kYqNswckU7}2_!MuNj=|BsG(06$gKez(^TzVh7HS&ydf7xcH!J4uUGKSo$!&O*qm<-u zrb9ht0=2DFz=85!Y6*R-*Hva0ZpPxwgp|}@cykc?N@WdAU$uYnveb|{n!UI0{7Clg zUF^qRdv*1mI!>gIY5II;%Hn8NtXr6Edfe_yBc%Bh6|?buN7Z^;Y&LuD29`gmvvxK> zX2pUN`ox*1+El2_K!zg zk8p7Uo~uJF7a4AjPYvfQ&~gWS5*e?O7r_0LwdjZ!OZ5TTA{pQ9EKoTIfjJ0Id>b(+ zx-Uvg;>ry=tnR)fyzJe3r(w7`t1@G#c>Xc(P7X+7zcalsdx1Q$J=#cTzK^Kx%QqA% zPWCaM4GQpFIr1FrM6(Y3GOYe$5Hg#td6jc)3A4#aAkHcv`;QN3Sv>Y8PcZ)Dd!xmy zsVS*q$0uqkc53v}C62qSc8*E zq70gXpH0_47B_YQuMpv}3c|Wk%!`%~y6eiHp=G;ac%Xyu%b~oYhbV`QAPoLKG zc4<%nM!$0(!m?mOj(aP`_sAN{{C#)mqX;3cj^`KYIXQ)@0$iP-Hc+3wq4j`e87b$* zDoGD^+uqDrx~p6=NaJFiFJIC=)&BsDamt-lCT8Z*GEai^X;szq?dB0<&w}A{bR$=@ zmB~ay`Vpb`UPJtRFcvj0NE;UVm#!$pB_X9E6u2#Y4Vm-F6aBoYAhliIwY9<(RhA0f zP%Q@OjKvIx^x>z-lkNG+K_B;T-V=_K6>##y9Xi>%qmD8wO$kKx*77)}96d+f@Z|ID z0b33ukcaokZ3fe=NVxe|R+nwU(p7H1+(hN)P(J*KE$wM{KlC7QM|t4m4Lktr6bw;Y zj_e&e!hZgEq`T7E7ppMmdDPJXBU3i5Y8EuE{qz%BM#!-oAe3&5;bJXNTAvUmy070% z$eyX6nCc%q@Do0u%KLk=0;SB<86O&SsyKBIUm^_VG|Nu!ONfitAD-N_xxd&xgCa|O za@gQ~-DE2ae<|W;k41+{y2zkNR~hR(60o)hF~@P;VyvbcW)Wc(VV08O;^GoAl3v$b zqk_rea`HqNAdsP?4b%I4L8g14F@$*N4L2U^LY2DA%3=B8ja1*`dRVu#rFf8EVYRlU2A;k$cTJ=jY)5L!hY~F3 zxE@(MO{VA?J5H>H;~t$p9VWh+=(d_qGpjc%3wh7+YC>@n(9VcZ(@2>zDBWs4j(cXJ^jLLzH?vO$b4f<*AoBbA*?7O zNfhd0k}ieC7)tuM+f=>69$f6gUtoWAyvRy^_?MBgzo-ic3eyx&FigL@ah(9Bn!R7m zb%6rvo|Z4%b9IC}f)bt}kPu*TyUc2^6QD7&Z)15*e4L>Dl0L==mgu;+g~`bU9fZTM z3*(zp#qRiF1(^_|GgGUpnS)C?+cyPo$fx;l48=4M#sq_%Ts#~w>x^X%n>9Xtj$rkt zj&T8H-mSC!#xlVc9VUuOzW!b{tX*!e&;9F7n_mJ1vAuPK`+Y0cu zUcK`E+0r6i&FOqR(w{2nzuVx{S>Sw_i13#>C<9mr>{u3**TZ$|%)Qrm5%eDVpV($z zV%FnVdDX5l$=0p!v|*|okp3-4jdfrt(VY~A)%F#``@dx07D*dP2JCEgQTfNo0}5cR zyZwG|7aSF_=d(Dhp-NyD6aRE8d8_{ykQ(}Als*@*?mJV9?6>X9 z*M&QL&k46uWiLCjFdZ1wu=JA#s(p^_`H7OAT?a5SjR+Po_Wh{^VU`pLFR2Q{mC5f` z1h0W2gBMkac|L&9<# zrEiD!Z(YeBaTs_Y_J=TopyneZDiDosZ908uw>c9M&d~mJK2YFauk*nr8fqFTU#9@T zxU2EG#|63cxJ;^AAJ* zIt_;J3`Vp-ta@JIpv-Qk=ENwgnLmv%+nuVS+&+7*&QjuddjB41p~r;!!TWFOjwncs zT!Cv8PeqG`RXOxNi%}z2I_rBPy(;ml6wI;<*$QUkRY$szZtG)jYA}wYwZkU2`|<{_ z2;cu*>KsTYQ$E{~sH`(DbPc+sd}e*N-3)b`jhU5))`yudyDj|G&c~Sn!0t1#I~P2a zr9czGE^;?D0+d=Xs}m3%nQlFALpWuQxGxflO|$Zm{p{?iJ>T5!^62NgFetz5nvy*3})^knnR?cu>xE zHzAM`5sIcYJHOL)1D=5wTg;z_53F<=oufWWQ|mPKYyTcBU0!bgKzp}vRj0;Qt5>F=-(Q`}pdOq^kL``_=F_WVNcIcP zgX81%nz*|;z8%8WTOX5?eIyR(9QMcNe;JE9j}!ol1cQsy1L$O}d~LWc%%MNOKZo0$ z+Q^oTon0%-a;0e8$4k%WQo-GH%F-t%fAieGS@O6{8>efIUv0o#-th)95aHoVN7v!{ z6)VxU8d>WT<4!iWg`a2q-ED8c^{uu6=TJ-2~da~G?5W3fc#X0@zXUrC(Iz{_SReV72SOn>``T@It1SA<^ z!dOKdlG0?z`aAwvu(U16&4)6XSJpa$)xb>_sbV5C=zg185 z9khN$EC+S{E@r&PtqatCq85ru6E;N#IZ0AdOUZe8w}9wSLSiFqt^!G(^V-kn1Sr`( zxzlAWRZcLrSzC$W%qe^Lz**1eA-XLrF1F|R%tHVGP&VBz7vx*alLAH%?=hng#nI91 z%!|+H%~$bh7;#VErr*x?+@*mErSLr5O`D+|F(5~{`x?A5 zgons}#}KLuf7(F{Fy67s?bNdBGVyw_LA5kdWg^gL>?dCNH~Rf{e&VixezsavA4$8cEX&k3+9O?0B~B`vI!~z#lw0@Ny)Cy4Ud4L@~nSIH52kP_H&@dmyTMMhJtIN|@#r#2U=;>s?O>9H8 z(@BBU`edVDi*nqW)2TOPTs5p-1K51>#1$S138mVN5`&Nqs)T}$rJd!@ zi4ZDgK zVPLQfY(Y7WuW%42kWNPf2^7V8x^^yHtvx?JaCdfvU@@1W+09|p1Utt>* z!63e-OSpQ}Y%nGYCW&EDcjU9afq8FZzkB*fbUdBxr3k3dfz8N|F6tZ1)Y|KXNE2LA zG3?1ujTzji7(Y>_21pXO@HDBR0ibvSOC}pcj^#z`S6-I%FU3AAe7)Sr!guKZvk#Pf z`l(t~{#oeJlgCz2&}ns$3AuM9tlM#7>6tKP` z10(|{r*VIkynpfRydtL7o%^a(on@hfM18#7Wgt2SW(_>on`%x`oa}ldyy*}lkx<@SkirJEz z1jV7|`y{)px`L8tFU2jImo$b1vcjFrpX=|n)0bqAsML9Qpl%BB_ZcJ$bnt6jOSc`= zou&DPLhueH6SmLD9jpr&D>hDCJGYaYwqgJ5omSF;rR$xhl1lUIXW_m9sEluQt!LcM3(em6HoG1-TwZS|^rd5TWc|+_Isp$6Nhw!x;bUae*A~*s*|1 zg^Ey$&3Ua7vCrNe8b^hnOIu*Dv?x_OU^W@Hwi6_Krtr~l^{VlQG362!S$DSbHm$l+ zBwafY(Vij=BO*t(+Y7^>vEO2QSUof(kUW?!?SA)~@S3Hy_3Kj{UWVpn{(1PF^1g+vpA9df9U;C`V6HKSfe7to$)&ioj!fK z_|!yZ)Qn!XPM1gLDfKg5s+ip3nFEbU@0DB*c`SM|8cFl z-8lX18ENOK15N}jqmZuB8B<{v49nO&=tx=$nG0V+g1Grh0nc(iRL^~JMbdk9ES}Zs zlq~dc18(n&_#+Difh@)YY_IXH*wrSyFzE6pKzI7=ez%P`mpz-YgbEsr6v)}-MSyO? zaxCo!%H}eQ4?lV7WfEytK=I%+Q+Qz&bZX9E7DZZBl5U7Rej8=nV3{*)hyEmEv$}j) z_6$hq1|5fS8kH$@P4^lG*Di2IvO}-yV?-fC9I(fLr7`ql5erS1^t-zvdU_ZC7|~cO z!e3;3_V?2EJu8CwLBS0L1(-Nh!oaowf5-%A*`JiTDj*V#FUUT6G*<61Yz)%*9YSz> zM6q5K?k4SNBZTdNELZ}nd4D150GShhW*wd08po(3>;0}xz`;>%J){gw0Vy4*8R>OS z9f9i2DkqGn?UB3(<_&@1Kd5Dr(Ayh)&nuEJfVPp{O*P-8WIEJ)F91xff(}^-U5>Bs z6J}>;cl6R62mAJ;GZz?-``iXR@8v4h)B+Jau-hwc<(kbGp_sb5I!4JLTBIO0^drO6 z(Q|27az!+@HA38P^AA2c=jIzX(zuwtgln0h0p z<%TK;L5)LDcjQ1LF@-&~Q1x^m+k4{M%2027J(%+vSxlQMvlRAZi;k7P%%(X>Zqxq^ zHPAx=CHrLGJHoAGLj=neT4o_5KC0{F4~ zbr&vfE!rKQ4EZe#vLpC4cPi|?+GpFJc%R;(C9^)IKqO*o^6}nz%u?-reNyhF#;b$b zbr@&lp6ekK*CT*Olm+N5>(^VdtOPw-z2!GQPzc(^_w?^VW-lFW04@Ctb>L^CDOcr! zIicS7BNC=etH_VKlz|}mS?&q8o7YV-wj!dAhde7_tnjAM)qRO6{Q*H$Q7hrxC2C0E zd(w=BX1;yRxsA2*_L-iy8D*AF*pJs0ZT2vR0r*4DL}97vX0puR`Rw{xAqP(O_%Ru-33~_kh9tRg z#zX}u%lgkF&W3xEGHm`l_9p2LAeD3)R}^ z@+2AkdE0%&LP0u02|)(=%1I2A5AM*eVq(L9mRX#oK38xx;d}P+Osl0UXpf`{Z|nE+ zVtlu;ffI&0#e4h9xL7ds`iU^(3G}1u{5Iv6c7$|_*O!|nr>}oZH#{2ukoR+*mI+Ai z+RuBaaHls+k0VUiot=U9_UiA_XYLJpfbw!pr~+`Y07DIkohS9}SYu1&HWqTi=X=&o zA%XdSyrM<$IMU|ed^S)&t>5joJ{_j%S;aBd;JH5bd3NXYZcA$`D1nkIZ7_K#WwajK zM1xM6iwPzT!2O>p+mi=h9{l1AR^^G%E`DY=nxN9NR?Ip$5neqC=nKG)5XxMWyJx?; z_!<~A7!{|;tQ+^v6^78Ie_$t!&TRvlP0v_P_?%%q+wb}9zp?z9=c?Uoc7EmMI=<{L zZCOA2F7xlfR<)B_bw>U!+f$J3nKrQZ9wbP4U-DW%8pc%FFZAaG;kL{aXsL0#i=gNO zy@BZHXy1-45Q&b2QpVR0=hBMH?@2-J`GeOQoE)AutR@c>1L%d5GaXztMuF0=eB51@ zSLZdJP%!bdTJf2e65;hjs#nY(6?XCC(qOp0;baeeFW@z`KEamYqT@C2jzBY5V2Fpc z@CVZYxX`fTL`+Rc$ZHi8=JIvoUmv36IgygW!q>iniTRC!A3uHo6-AgC@e~*jDU2igVsVh80trXEi{H^lOCJMjyWE&io<= z*DhR5;)xQ5>xPT+2vGu^wsP&%S|cM0G}A5h@}YymfQhpR_mf{ZRxw%W&G}up7R)!~ zy?6aX&~88mkkQ#(Y9TVaq*%ctbwwq(CBw^ z*Lar2l84PL{qpDUzO*QPQn>|KC<<8(Z6@uI45O4Ae^_1rsqmRf0y!vT^73G#emu^) zB%U?dBBm-adD@RpQ5u^E`{>r;Ofk;_JjhcK5qv`45xxqPBvKH_awIX`8LO&9|4Da< zm#Vuq+7^NP=q_(Kyx*F+YaLE^)j`fv&O6p)BCc>neNtM^n_hM=LFgK=RgO$WM=g|> zRjrf-|2IBOf>pexksxubK}%!a;d96CF9yuzp2?yp2^4A@VF3wTespQz%deF> zJ|xe}$I^!bl_$E-{>ib3jJ4JO(VzUEEB_t{Uf}RJ>~2={(IJC~lanfeR%Ionn(hbzkgjh59g{0x4qsF0!?|(G?3F)@&9&%A z(8-qK;ZcY+WtKbmD{u_Jb)Z@n1eqp-Y`Jy6=#3ke==bSZobi*CojFN7tTN6B|Fq1* zkn7QCWGZm?rJlRSvTrY!&F?O5*1o9_@y^plM5Yo>Tzx?D(i)lm)uam&t?!H`+T+ji zmxNNB^-?8!Z;c6wc;a1;1cwuJBxLt4F$)-b&bociQ~o=(wl3d(9um#(Y)-7G%+9^? zNsjbpTvM8V1MuNsBHU|eVEFRc^KaAIoxPNh=PfbB;^;$rV%NBvuv%Ij&fvDAkr-Dn zA}ow}8lO2yYVL{;&TXd%JO!~{fk3Qj2Z_UKUz-5Q3An-GQm=>bffYc|Q8}}|U^)w8 z<}QBJ@9<{?rI5(W;o6s*+Al%38jwNJzb7M>29A&xGyLP;{!*3(w#6<>0};kzM=n!i zHKSFI_r)a!zv{w)m=>rSvWTHZH4kIF^Tt*^5M^K7Rb}@MOH+yQRzL=u2NIBnW*}-V z4JvAQ994R?IwsfGo%^u2)|;3lj55xcoc3}}5J(e3r|vcvc*^@<8xKJZw_pM9tL_}b z*cvJyS_MPCVU0-l-z$m>hVCz;VmKocZY08=I?pZdQ`A!ld^!ZWT0`9rr6sC{D+twP z;mS-@rcKln;Az($NKk4-3N86;8#?;qvW!%N;UGL>Y1WE5RH=+_qNPf#F# zgRjlSyZhRLPkFv(dj&q%m%*x!ZO!UIEo~UjjWdn|Y2v0(2*pm6Lf_-4Nq* zVX9{#QN!}Q-;!a@In>`B4DCQM%y2>_W+I!Db4J@uCtD17V=et;gNb@Yi;uF6M_wUx zyPWb?FLWJ+#3=spmX#(JcCjdpW^FNP-*Z-bcc~-KlLvYeC&usxU(2K{JW=H}OIe*8 z*&{CSCb{so=Kf<_$FbUba^DAVMyox?u;F_--+Xqj{<>>5)g-5}G;DqQ*MawY;UlF% z9rVW%w^#f1QSyL`7bkqMvh@xK-K}r%Whk0LGW3E?(d}EvifNyoguXJz!o9Te%haoN z`BDjxz;SU&L|Zce8+18rfw)q&6dR+3e+KBwid3XUu}iag9Oeoe6#J9IUwUt^5YT<^ z06id>uDiP%P!fCVtsLcmj%EL}cr)0`mt%3ti4l|!ZOho$jGW$H4LCX4aC-6Lle2A?a3|`eAU$ytyu=73A)VYS z{TYA=<;vtI?VJ6Q*|i$X3~q)T9xiUGg}Qk?IoK(9q7W}}pD~dlpphpdHVpq6&R&!Ml9#|EY^sPHm9_FAs;3Lofy5-I1Xw;SFs z1BPt4sofU((D1-2b>K&BNq+Qhffq_tCAsRO!s*?W3ol%HE$^vuK)ng6rmc}27iE3L z_gM#}yl#z3`5ipsh>QsTW*_}2`U-995BX$t#Jk5v*CcMVOiR@JFYi6xSQzP7-aSU3 z?AO5|W9;JPYGSe%~rYtL zXi!z_2bTxObY7Ho^V_Zf{YAZ%mBoHkdovjs;PdE`6R75~Q~YFeI=sg9AEjCdN4jO) z<>1-yXNAgP#3ZPwbjalTl zR`a7`vLSR}FHr6-0h)v#e6TL|7y4>bm8?}FubQa)uviOVeYwgr~aRVjr zg|cUyZLWYa%xn|=F6;Dx{}I3;|oSu9pMdr8y@agv#l&JQeJF09{^xc zpup9@d_gey(*_zGd)bhuX_|m%fM}9b{h}WO>iy_?S0gxZu!}H-079XlEof5hw7M1I z3d4#5QGbm=9iXFWRQxwLJoU-G%Q672&^L;V%Y2WMu+0j-LwR;l9I1NAXh5YunmwNK zuAhLebq=XvpyhbuGRh@wA^j@v;c3RDQIA(1{I>w#B?m5AptrtR)eDpIXZZZ-Q?=cE zq@kpzqN{$nt=LAh8k+Cd3)3R64dlY+zZrfS= z)mZ>Q3m|RzulFCOx|P5eN}@8BbfVZ~7O>d0hJL(EP`v%NbR+@(W%5atvbpfO3TZy}}n zFMQu%e}MUv`r7g`GY%%%AA}w2d!6AD#Joy* zX917f(JZ+LFI7*wZb6k`i(q)A7Bc}v&9GFw{qZ0ltGMZ^uijFX3?fsejz_Y?<6-pI zh|286u?~J@rVc^dh}te#Yf;x!fERfV?v>MaVU&KQprlPgWY!eI(wG$wo-X66ItLB) z*-}p~hzn^gA$=i0hmw^vS)L&QF0A}BdCdYe6^9sz!2-f32V|inNiTWGIMti_h8m&M zMFMDMMf~~JIr17}ClbPrZZv%KO)V8Du9 zPxM>^y(L~Y<2DdR8l4gbIC1n$p%F6pT8h3iQW(NYw4FdUp)21p6W6c6$2PFaFPXrD z3lJatL8R5J#8gT#z;JDT5%tSRDJaBapiT>s>4;4BU*M4A*c2(ON2zKYTksVVq&Jym05>4f$-Ppc;1gfqm>sPsAl%! zNXC1PXuQgKg(Z08oyn+|ygSP}j$=Qm%Y|QHd*l+lz#tc3ou9{=R@Mey?_a&4yTQAh z&@FeLc#3r(+mptbW{^{Qc!|m7e~d)@EL*(g3$nLkg>Ub-w7)mYomroB zHn@=>uz<@qxvp)IBc@QjwSXnj+n1R$Nuz0-!5Z|{u@5lAe{7dn*=%XG74NV==vkSWO z^-LhkA8nY?a_jMd#jUosHv3|VK&3w)!h=Kq+FtDGbg4Beb{zWpO`7jihWwxP;!wXx z1FTJa34YnNBca$j>I>xS1=0qodBpPgRmUJ^m-Y4!4mq-?yd;Zv2`Z0W16-kztecR< zKYAyTL=~22e}2yXnknQnskD1Q1LSO?#s7S)N&J|!1s_B{0v|I*?vV5<+DgjPc#hD^ zgQpuz!JTKXu@T4EfkA<5{xPU);H&S!Y(6l>)+=YppPnPui-86U+eXFJ)wLstb9J9o zVeseQ77?7jW8Yk>m_=`ZtAMB+=z6PyBalIt7Uyy@mggB-k90X6uoM`{?*0JuWOV=F zD~F@i4k|3JKkMh5{YdcujfQ^#2r0-R1(y;o4gIa%jLs8OCQJ_BW@bP+j zlfz}hU~b}$6kF&i)Jb%x2OOY~ZWFxT+KUtBuHA*c5x4iMR{qs@C1Xo&UD=AcdaNmk z1&FTi%(tucTD&VDMKC;>W_5stp)v%3XbR&vBThxeyfAblTPg0~Vqs~E7<`#ftNePG z0jF|iN*@`mZkR`J`aJw@6_OV*r=OEXU0*utrYw5EojuopId`I~?(wkrq_9q+L0hY^ zB!R&=+a^jfmanIP49-TFLk0wLy7}>=zcoEbN$~fRBcU{IaFyy95$}WSFtgIrv(lT1 z`;GkKJfLQ?jd~B6bs^bLpc0VU8TzAyU<=I6MB~p7(*OyjLeh@N5G3B3q@@mFlO2L1qK#tW%=dTC)q`*-^4kEsM#AT@MFEAW<>OmF>tpp+K&(44Z&XKk|1d>Dw zE&veumx9B;U9e_N)XaErhUz6@3VbTjbT9>nM}EuAR4^ zT&UNn4?dL7QiW;ci!t_CEKq?HVl7ZFOk6GA&z80Dou0M+k2UoOBU24T-|)LS&B)>b zg9mEiD(NLcg3B=hgl7d;4H?&*F33u~VuL9Ni4_I~*3YknuVz4xjV2 zpDVvFZmPVghQ$;}?Ecb3Hk|@;M-CZ)iv_U4|Ad47&q0LXP5#$Yxc~KAIG1~pl?1&> zE7}p{5&&_AueaMIRgdpm9CoBYeNzlRHv$52-ac)D_fAZKx|)~m$;Cnvek+mH{pn*+F{T3V4JQQXm21wA zTnz@@_i;)_Y3}2UOLPZ{F%x`=8+5V;$o2d5C~e-AJd^7QrRvFA>W!ZdEd_WF4fzi% zI?^X{zWco2ngg5v>M=NH;IzQe9dyefSI_AjO<-PxWG!3H$5e>NV7CBpd0GE?&Ybi; zfLplyD2kevtXLeo_Ydm(gSwo!X#WpZ{r_tA{~ufs`3Dn*Xf}eZWi%7`$@g1kY}txp zyug)aYU;cXaQJ+(V88yiZqA%z<$p?92#9~TT$Mw5Wa3GxFe;+Y=Og<3TX`NKa)RHr znM>k=Dr;pz#_!giAvHT8Tr0b+#B^GxC#IR?m(lKP+FU>WLo$*=%sb9`*MdZ4t@|-& zoO=B8oJL1cX72NLs<~Ag9Yy=vc~-7h3ip+?Uhpy#E|g|359aT|U>k*Xwt%`((WIyD z5%F|i$uw)_odil_{~Q&hP4|ya{=d5;{@3@^zkZ>$dxGLSjlpS0^sg5|?j4CQRQ^^Q zT=vRjR#&@@i)(ir_(+XhV%s%61u1_A&HbDUxF+9}3VJ5QlEZQTt~P3;A$ms7vw^jL zg+YPX#K5=8Q`(@B4%RA^`F3oOXw9Fs0x3mb`1sxLPiRI2$RXyiC&8w~%wYRP12|vq xyZrw@-(@!dg?$D|d-Xx(G^y76-)au~&?^6TY4sAAV&Xj>%c(vpk~Mkr-vEcGA1nX> literal 0 HcmV?d00001 diff --git a/docs/features/images/plas_training_distill.png b/docs/features/images/plas_training_distill.png new file mode 100644 index 0000000000000000000000000000000000000000..7b1996bfe9ca18474d526edb922c0d40e3a4ca3f GIT binary patch literal 81681 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 +Attention Gate Module + + +* **Attention Gate Module**: As illustrated in the figure above, to estimate the importance of each block with low computational overhead, we design a lightweight attention gate module. This module first compresses each K block via a MLP layer to generate a representative low-dimensional representation: $K_c^T=W_{kp}K^T$, where $W_{kp}$ denotes the MLP layer weights. Compared to directly applying mean pooling, the learnable MLP can more effectively capture semantic relationships and importance distributions among different tokens, thereby providing a refined representation of each block. After obtaining the compressed representation $K_c$, the importance of each query token with respect to each block is estimated via: $Softmax(Q\cdot K_c^T)$. To enhance the discriminative ability of the MLP layer, we use the full attention result after 1D max pooling $1DMaxPooling(Softmax(Q \cdot K^T))$ as the ground truth. By minimizing the distribution divergence between the two, the MLP layer is guided to learn feature representations that better align with the true attention distribution. +* **Training Data**: Benefiting from the efficiency of both the model architecture and the training paradigm, our approach achieves near-lossless precision with only 1B tokens used for training. The training data is sourced from an internally constructed mixed corpus containing both long and short texts, thereby enhancing the module’s adaptability to varying sequence lengths. +* **Other**: We observe that the final decode layer has a significant impact on the overall model accuracy. Therefore, during training, we exclude this layer from sparse attention computation and revert to full attention for this layer during inference. + +### Inference + +During sparse attention computation, each query token may dynamically select different KV blocks, leading to highly irregular memory access patterns in HBM. It is feasible to simply process each query token separately, but it will lead to excessively fine-grained computing, which cannot make full use of the tensor core, thus significantly reducing the GPU computing efficiency. + +
+Token/Head Union +
+ +To optimize performance in both the prefill and decode stages, we design a special joint strategy to adapt to their respective characteristics: + +* **Prefill Toke Union**: We observe that adjacent query tokens tend to select similar key blocks. Leveraging this locality, we take the union of the key blocks selected by consecutive 128 query tokens and jointly compute sparse attention for these tokens. +* **Decode Head Union**: Given the widespread adoption of GQA in modern models, we find that different heads within the same group often select overlapping key blocks. Thus, we combine the key blocks selected by all query heads within a group into a unified set and jointly calculate sparse attention. This way also reduces memory access overhead and further improves decoding efficiency. +* **Top-K Selection**: Conventional top-k algorithms based on sorting or direct calls to the cub library introduce significant runtime overhead. To mitigate this, we implemented an approximate top-k selection algorithm using binary search, which significantly reduces latency while maintaining accuracy, ultimately achieving significantly improved performance. + +## Evaluation + +### Experiments + +We evaluated the precision of full attention and sparse attention on LongBenchV2 and Ruler (with context lengths of 32K, 64K, and 128K). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Model + + Precision +
+ FullAttention + + SparseAttention +
+ LongBenchV2 + + Ruler + + LongBenchV2 + + Ruler +
+ 32K + + 64K + + 128K + + 32K + + 64K + + 128K +
+ ERNIE-4.5-21B-A3B + 31.4876.7456.4025.4831.4575.9355.3825.05
+ ERNIE-4.5-300B-A47B + 41.0294.7083.5658.1841.0594.5082.3257.85
+ +### Performance + +We selected a subset (longbook_sum_eng) from InfiniteBench as the performance evaluation dataset. For inputs exceeding 128K in length, we truncate the sequence by keeping the first 64K and the last 64K tokens. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QPSDecode Speed (token/s)Time to First token(s)Time per Ouput Token(ms)End-to-End Latency(s)Mean Input
Length
Mean Output Length
+ ERNIE-4.5-21B-A3B + + FullAttention + 0.10113.328.08287.0561.400113182.32627.76
+ SparseAttention + 0.150(+48%)18.12(+36%)5.466(-48%)66.35(-31%)42.157(-46%)113182.32590.23
+ ERNIE-4.5-300B-A47B + + FullAttention + 0.0665.0713.812206.70164.704113182.32725.97
+ SparseAttention + 0.081(+23%)6.75(+33%)10.584(-30%)154.84(-34%)132.745(-24%)113182.32748.25
+ +## Usage + +``` +export FD_ATTENTION_BACKEND="MOBA_ATTN" + +python -m fastdeploy.entrypoints.openai.api_server + --model baidu/ERNIE-4.5-300B-A47B-Paddle \ + --port 8188 \ + --tensor-parallel-size 4 \ + --quantization wint4 \ + --enable-chunked-prefill \ + --max-num-batched-tokens 8192 \ + --max-model-len 131072 \ + --max-num-seqs 32 \ + --moba-attention-config '{"moba_encoder_top_k_left": 50, "moba_encoder_top_k_right": 60, "moba_decoder_top_k_left": 100, "moba_decoder_top_k_right": 120}' +``` + +**Note**: If sparse attention is enabled, the system will automatically load the MLP weights from `moba_mlp_weight.safetensors` in the weight directory. If the MLP weight file is not found, mean pooling will be applied to the key representations. + +**Parameter Description:** + +* Setting `FD_ATTENTION_BACKEND="MOBA_ATTN"` enables MOBA sparse attention. +* `moba_encoder_top_k_left=50, moba_encoder_top_k_right=60` indicates that the range of top-k is between 50 and 60 when the encoder is sparse. +* `moba_decoder_top_k_left=100, moba_decoder_top_k_right=120` indicates that the range of top-k is between 100 and 120 when the decoder is sparse. diff --git a/docs/zh/features/images/plas_inference_union.png b/docs/zh/features/images/plas_inference_union.png new file mode 100644 index 0000000000000000000000000000000000000000..4edc174c10dd76aa1ce434135075443dafe15f3d GIT binary patch literal 34881 zcmd431z40{-!3}JUqxC$kPt)#L@DV;M*(SRY3c56{8K8alt_tm3_UcAfON+YLrFJ7 z$549>zVCa!efD?G-rsk=Yo9%r0@s>np0%D8zjfdD?_Trqjl3iw9u*!00wI)o{YnV} zx%L+Xa&-^)Dkwp=!?eJ!n|7}?93c>VQtbaLkZ*~1A&~nJsaG#l+!EI(UA^QE=~}nZ zbz>3_9vK9FxOe-Rh02C1TwSr$te+gV^D;*&+ybpydJy{g1quDDM^*8g zXJ_{Nl{P`4q=$@4`=@K3^-G@hhf!s64R0tX zJlb*prG_9}^HLWV^{sbrJ#SmrE@=v&)(Z85>JQ`xC7%=AKyR7P6y2?x~<>ad%t|m_xo0Ox;3QE+kv5dAG z`_xF=p)$FXp5ftPjY4{%L=o>2g$Vg?Umsgqu94Hh9UUA{rH-DXx4Sx9vcie~fWT#4_bDhhDL2O|E&{0=gotVAM9y#E
~7 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 literal 0 HcmV?d00001 diff --git a/docs/zh/features/images/plas_training_distill.png b/docs/zh/features/images/plas_training_distill.png new file mode 100644 index 0000000000000000000000000000000000000000..7b1996bfe9ca18474d526edb922c0d40e3a4ca3f GIT binary patch literal 81681 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 +Attention Gate Module + + +* **Attention Gate Module**: 如上图所示,为了以较低的计算开销估计每个块的重要性,我们设计了一个轻量级的注意力门模块。该模块首先通过一个 MLP 层压缩每个 K 个块,生成一个具有代表性的低维表示:$K_c^T=W_{kp}K^T$,其中 $W_{kp}$ 表示 MLP 层的权重。与直接应用均值池化相比,可学习的 MLP 可以更有效地捕捉不同 token 之间的语义关系和重要性分布,从而提供每个块的精细表示。在获得压缩表示 $K_c$ 之后,通过以下公式估计每个查询 token 相对于每个块的重要性:$Softmax(Q\cdot K_c^T)$。为了增强 MLP 层的判别能力,我们使用一维最大池化后的完整注意力结果 $1DMaxPooling(Softmax(Q \cdot K^T))$ 作为 ground truth。通过最小化两者之间的分布差异,引导 MLP 层学习更符合真实注意力分布的特征表示。 + +* **Training Data**: 得益于模型架构和训练范式的高效性,我们的方法仅使用 10 亿个 token 进行训练,便实现了近乎无损的精度。训练数据源自内部构建的包含长文本和短文本的混合语料库,从而增强了模块对不同序列长度的适应性。 + +* **Other**: 我们观察到,最终的解码层对模型整体准确率有显著影响。因此,在训练过程中,我们将该层排除在稀疏注意力计算之外,并在推理过程中将其恢复为完全注意力。 + +### 推理优化 + +在稀疏注意力计算过程中,每个查询 token 可能会动态选择不同的 KV 块,导致 HBM 的内存访问模式非常不规则。简单地对每个查询 token 进行单独处理是可行的,但这会导致计算粒度过细,无法充分利用张量核,从而显著降低 GPU 的计算效率。 + +
+Token/Head Union +
+ +为了优化预填充和解码阶段的性能,我们设计了一种特殊的联合策略来适应各自的特点: + +* **Prefill Toke Union**: 我们观察到相邻的查询标记倾向于选择相似的关键块。利用这种局部性,我们取连续 128 个查询标记选择的关键块的并集,并联合计算这些标记的稀疏注意力机制。 + +* **Decode Head Union**: 鉴于 GQA 在现代模型中的广泛应用,我们发现同一组内的不同查询头经常选择重叠的关键块。因此,我们将同一组内所有查询头选择的关键块合并为一个统一的集合,并联合计算稀疏注意力机制。这种方式也减少了内存访问开销,并进一步提高了解码效率。 + +* **Top-K Selection**: 传统的 Top-k 算法基于排序或直接调用 Cub 库,会带来显著的运行时开销。为了缓解这个问题,我们实现了一个基于二分查找的近似 Top-k 选择算法,该算法在保持准确率的同时显著降低了延迟,最终实现了性能的显著提升。 + +## 评估 + +### 实验 + +我们在 LongBenchV2 和 Ruler(上下文长度分别为 32K、64K 和 128K)上评估了全注意力和稀疏注意力的精度。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Model + + Precision +
+ FullAttention + + SparseAttention +
+ LongBenchV2 + + Ruler + + LongBenchV2 + + Ruler +
+ 32K + + 64K + + 128K + + 32K + + 64K + + 128K +
+ ERNIE-4.5-21B-A3B + 31.4876.7456.4025.4831.4575.9355.3825.05
+ ERNIE-4.5-300B-A47B + 41.0294.7083.5658.1841.0594.5082.3257.85
+ +### 性能 + +我们从 InfiniteBench 中选择了一个子集 (longbook_sum_eng) 作为性能评估数据集。对于长度超过 128K 的输入,我们截断序列,保留前 64K 和后 64K 个 token。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QPSDecode Speed (token/s)Time to First token(s)Time per Ouput Token(ms)End-to-End Latency(s)Mean Input
Length
Mean Output Length
+ ERNIE-4.5-21B-A3B + + FullAttention + 0.10113.328.08287.0561.400113182.32627.76
+ SparseAttention + 0.150(+48%)18.12(+36%)5.466(-48%)66.35(-31%)42.157(-46%)113182.32590.23
+ ERNIE-4.5-300B-A47B + + FullAttention + 0.0665.0713.812206.70164.704113182.32725.97
+ SparseAttention + 0.081(+23%)6.75(+33%)10.584(-30%)154.84(-34%)132.745(-24%)113182.32748.25
+ +## 使用方式 + +``` +export FD_ATTENTION_BACKEND="MOBA_ATTN" + +python -m fastdeploy.entrypoints.openai.api_server + --model baidu/ERNIE-4.5-300B-A47B-Paddle \ + --port 8188 \ + --tensor-parallel-size 4 \ + --quantization wint4 \ + --enable-chunked-prefill \ + --max-num-batched-tokens 8192 \ + --max-model-len 131072 \ + --max-num-seqs 32 \ + --moba-attention-config '{"moba_encoder_top_k_left": 50, "moba_encoder_top_k_right": 60, "moba_decoder_top_k_left": 100, "moba_decoder_top_k_right": 120}' +``` + +**Note**: 如果启用了稀疏注意力机制,系统将自动从权重目录中的`moba_mlp_weight.safetensors`文件加载 MLP 权重。如果未找到 MLP 权重文件,则将对关键表示应用均值池化 + +**Parameter Description:** + +* `FD_ATTENTION_BACKEND="MOBA_ATTN"` 启用 MOBA sparse attention. +* `moba_encoder_top_k_left=50, moba_encoder_top_k_right=60` 表示当encoder时,top-k的范围在50到60之间。 +* `moba_decoder_top_k_left=100, moba_decoder_top_k_right=120` 表示当decoder时,top-k的范围在100到120之间。