From cb7891a45868c450cbdd4c85d7325c1702107f9a Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Wed, 14 Mar 2018 17:27:24 +0800 Subject: [PATCH 001/130] Add large model design doc --- doc/fluid/design/dist_train/large_model.md | 40 ++++++++++++++++++ .../src/prefetch_parameters.graffle | Bin 0 -> 10073 bytes .../dist_train/src/prefetch_parameters.png | Bin 0 -> 180176 bytes .../dist_train/src/split_parameter.graffle | Bin 0 -> 7812 bytes .../design/dist_train/src/split_parameter.png | Bin 0 -> 69134 bytes 5 files changed, 40 insertions(+) create mode 100644 doc/fluid/design/dist_train/large_model.md create mode 100644 doc/fluid/design/dist_train/src/prefetch_parameters.graffle create mode 100644 doc/fluid/design/dist_train/src/prefetch_parameters.png create mode 100644 doc/fluid/design/dist_train/src/split_parameter.graffle create mode 100644 doc/fluid/design/dist_train/src/split_parameter.png diff --git a/doc/fluid/design/dist_train/large_model.md b/doc/fluid/design/dist_train/large_model.md new file mode 100644 index 0000000000..f82fa6f81e --- /dev/null +++ b/doc/fluid/design/dist_train/large_model.md @@ -0,0 +1,40 @@ +# Design Doc: Large Model + +## Abstract + +We propose an approach to support the large parameter. +For embedding layer, the parameter may very large and could +not be stored in one trainer's memory. In this approach, a Trainer would +prefetch a sliced parameter from different Parameter Server instances +according to the input `Ids`, and then run forward, backward and send +the gradient to Parameter Server to execute the optimize program. + +## Design + +Fluid large model distributed training use +[Distributed Transpiler](./parameter_server.md#distributed-transpiler) to split +a large parameter into multiple parameters which stored on Parameter Server, and +the Trainer would prefetch them by `RPC` interface. + +### Split Large Parameter + + + +**Distributed Transpiler** would split the large parameter +(weight) into some sliced parameters (weight_0, weight_1, weight_2) as the +figure above. + +### Prefetch Parameters from Parameter Servers + + + +- `PrefetchRpc` operator would send the rows index the multiple Parameter Servers, + and then receive the SelctedRows. +- The different with normal Fluid distributed training, we only prefetch the rows + +## TODO + +- Async Update + + To avoid slow-node, Async update is important for distributed training, + we need an design doc and implement it in future. diff --git a/doc/fluid/design/dist_train/src/prefetch_parameters.graffle b/doc/fluid/design/dist_train/src/prefetch_parameters.graffle new file mode 100644 index 0000000000000000000000000000000000000000..067178972219e99add6db5a82db0f104d3517862 GIT binary patch literal 10073 zcmaLdRZtw<@*r^BEfCyo2u^SvEI5O^ySvK(!6CQ@CundD&fxCu?(Qzx@7CS_*4Ea& z+tppw=e(SkemTEt@+c&ze+4Ymxu11fxn$zQ;X`$Eb!U6j8KX#E(cn7AFa)WOO5|wG z^`HhBD-%vy`egU-2TXpMntItyhk?bK5bY{$Djj?9SOgsvN9|2XfN;@pNr7Rqa?bm? z?-R$}JDsqrE9*#5r(ZSeF?q@6-`CB~*W-W$R1@prxe|TslzBSs!9$Yk<5%)<@tRfI z4<~7sVa1!Q+0@(&_AqhTmyg*;WA*b7ev$?E_hkp=+;u_wz z>Klk-Sxf4NeD*;Ze#`tn4~#0-27LJH>hGs`p8;7jsEccOGW&AhIL|0~th`VHB#G7Im(4iSHz@pxfXQptB6~6hoR~F{ z*q!aF-qq)ZRaTQ#XNXF^^?c{CP*C}j*&Yh~w7(DfzJ477d1*vCjdI>V<>o`deMjtq z$)9=SDw1P7RJl?CWuT5r&7voo(t<*HuTH2108nb4OCzF|KW8J0`y8L{d?0VX7m$Q~ z&l9Gz4Hu%FYflb_Z0>tTH71Bl-NTpN2-aoGPrav(tJ-9mxpnP(6lnd>!%sD;+VJKz z(-Gyt%%n6a=gw>}sJb_xk}1TQv_~UNo{C zMNfHZH)1r5Rv**2uZs|t&wH)=YDk^qSS%!uyEC})z0Q5VlcT5qLv=;A7$r!cIuhJe=`7wf3^*zd$PdSWx7$fSj%jOJ2j zt9y2xzY>YPFKbVqg8Cn1&tE1*r@FYO4Q~Q@UZACPNMA=sv!h`$a>$4@Q;r8d0O*8U z&Af;rF7;cYv5;DAJsLFBqioD(VzfXU+xt0yi1%b1T+8c7;rh#3ud%@)0kQ|jKcnDC zK#Bz&4_yT%2@Rz9M!{K(Aν^|RrNdN;fXNPw^4tBFWKSJ^cQ8O4W|-h!P$guxEk;V(FG`Nu*4YTa3sh<8F|o$fkRXWT;V}KsdV@%58UHL`dSYZDMll)kWgz- zBLuNzm9)N9jveOBAb%c1b($kaz(3UYql?=6Tnm%-UCl-Y!AYSC_83j_3n4rzPBdQ~ z5}qlWyUg#@-~(d;VWKZ6vr91j&_zANi8J4AwxXq5e(-m-WXQrY4<6#V!;I2G@-hsx zFm(9z0NM;9!dB}-8jCX{ zq3+v^;m@xTX&^<02|VEwCWAKHH@&*LoncuQDh|-JJKxV zk)1ILK`fF%TG0l&gD;5itI_dtkdy+EEUeKi!vz`n3KM_blCRr)Z$%T>CaNgOiI#nM z*l0DYIDE8)Mgdm)5i0nSdCgeve1}2U)J8TAjEEve-R*Evu>?xDfhx8%2~o0sE;1UI zI|tmnmW4>)zP0E{!zVsLArvOak%{0HlFGRY-3)_j@@(!z2ChxeYm6DCE=DA97D{H8B(m7nM3tT+vDwWBrN`+3Bli01F+WLda_92R6n@N(Fe}Wbin^Ad z#c`wZY9c8Tjix&Iw?6MdJ{)76o|w+ADPCQF7wRKE;Uuk*ZkM_0 zjwjuNuH5DwoD-Fe|4bJgPiqycdz`&_K-9LyZQhsb9X#6dn|D&EYN82MOqNf6c_BgX z_KDNL<|G+^gdp;6V&cg>ekr77N1rD>yE59504TUh{efkMwtfBfW%A)Lh7syZ+T^wj zR&#qwaOBTVsofL6lANtTp$Hc(>0mz}7PDUmDD-6>FbKHu8ndqKEZIjS?#>b}jEUc` zpGV3b4wZQ^D|-_OaBh2q zZ`!F6>@EBf8SlQVhxePekYYO@fE_1>RLUyQIZw&kUV&r{OF3iim-_I9-JrEL?+*WhwPhNk2~G=ju6*3>IaNmElCp{DKCoHy&+58O`rS)LM2$KVH4VQHJF z;%P-wqflljL@tZqIbSjEnTDHh4}Z_NmXlAELKt#O)xcou zKSHP~X3IR$)mfc#)ex2$#cf~m^d54mWQ+t5tC%A-Kohe#CSI*@Jw);a3ypL=;mRUP zC52XUkgOJ`yX}UX1WO3PGd$8aw=hbB(R#C*$}n*r%_$C;M`0ceyObp2>7- zUkHy42A1+66^xRGgriMNJtN=!C-zB06pztXsUM}__*5cssJOJ!kM;beyW!70<(S#5 zVHKhb3w44utAYT$jJ>b;C6`5KZJa^vH;ioCzcjxULVtPnWwFi>=X7Q8!#0}dr8 zufwT}tl8$ZoPqje#qD_(OZU`abnvI+{=ucS;QWbmVLCgzcx)r*GFJNFjHf#X?&%oBI?rs}M{i2>c-hjPoo+;K?%q)O zi%fs6v5g6edKU#`cMcajX3D!6D2-N(OX$2rHjtu9hG7~o!gm;Z7+1!(s-U#}(>8e9 zj2nod*@Zh?$IZjbzt7|DP6JY2P~?=;mo@cwY0@{yOU3XG(t6-Uw>W$bHB6@W*l-B7 z(V;qwq?WxPgfMBU?B@>^Ihk4Wi?lt%u&ZL=a)o9^0wxc5;h57(WcQ7)t(eMFQ0N$O z5(M$d;umyQ4kEmdU;IwavG%;&U`mUn^tP3;O=5eZay4hytpw2uVZVysn|oM8-gGAgiRTD`$VPoK6=n+~ z_Kvw?dBE)a8z%|M&Rw#;hd6vjq^nk%<_8lgW$-Unv@5jrQRhc6tS1L|m;^V0eeu(k z9r_wIEf{~>m(pM3^PfG6_AF~nYl`Jeo|W;?t_Jt^MMrOA2O{tbyq#!d9*hR zWdm$-RgVkZ>zDH$o$%Kp{lJu(_M3hS}SjSDaP)JS(>ZPdbpKe zaRb}=BoO_<3Fh^W7x`=KeElC1f$*wmdL5%lHNrg_bcd}GO8&mX>#ue8}NNmz{hK(E@z#>+t6 zn_)$wpu3#Q?9$oRfX;DLu`vvu+%7tuJ zgOFjeWT5RgjgC}RaK>IwCf`B#x*3Q$5JQOF<(pWY>fer?YD3S_$un}C&J(?7{POAi z(bsvm$4j-FxUbP*2YnPmMG7eb4Y;I zU)I}oa^*MGIXgLZzg1nc;pa5uT{4_a?Q&=bT+;UzzXw#7+qYTJ?*Jt7DSH}kEZZQO ztH$uUR%$3yM`=!rWvi$Bl#ObnruAn1(UEo*1gVSjo|)dHyD2<%;CcZ2OTZg1VSzCC z<&$_qZotzWrdbG=B^$RyfWO6~AKy2Vw8tOE_%jVP*IhRp#+FiT?FAd^i!9j6uJmP$;2o$ueH?-1_&phRth%>QM5tlVP_XptGtVfg(+@ZoPfibJd; zW_5?&%c-DZ=ggNXdqqi*h~qzhULsFJ%hJCDlR#6DqIhoYA*rA0NM_v>W^Nu&QO>6; zkl(C~E+v1upJdHrh%S#6(#^yz)ng8iB8D|W;+N(_?yF2}ouqcp?E~fFVeZ7vxB+4G zwqPktY)>f18lES|%J5mdI5`83C_; zw%+T6)zK#@3apWQh6c>sX0-8Zv1rgMjydJ4az2ktV-@0@07vw4O&Sv{&rUkla6r3NBZf zml*edAx|ax9Kf3nDX{B%)FRD9BZp|-CFJa^=k!BR@1@Rj^|lOD^=4<T8I9PNo^?|gd3uUxhRKjdU~oJCqH@9X}A&;E0U#5l6H*P z2Cf;+4b?YmvqD%OZ+=cXz&}U2?~Je%nQ1;>^LPtkx;gB(KP$WoHmgIXK*>!Y+T?wtEYMRDio5Cd3R-STRTp1=NFoTGl=e*SN(IhTn4dCj^AZN54=&w zV|^Hd8g2CCYI-LOCW@iUrCXY;*4abmJ#q2+>}xOGBoW}W@vftD3MFwZmOYqpRLu8= z*mcYBYHcH2vwn-ZZAo@7;^~pxuKMY&@@?hw<7ov^_eTARVRi)t!5n~5E4Pv&i5zI$ z8PIqmWrp1uW3WL5b?3h@4czXKqRa0AU05g@ZZ`w~!cPn!{>q~qbGQeB;dhnjeqlLW zkFfkt0Jm$<5x#BMEc#O954VxwtXiB|sm^2h=Jnd<%pRJ^y11y`OdodAp>4 zxLq87_cK%JlmguQk9ns_CtN#@7q-G7r;hDj;pka;dd zD6~fIYYSuE33F$Q)ffsy-m)eW8*lzkWf7-HY=QTL0#4e)m7$->4I$<4c=ricZ};zhN!d_Dh9ob3>llR?<3I_0AQ~c9RiVDtd26`DiQSUxevf9L87ciK6|eA*>%_1iq^ zYUdNb>+RvL`N3=XGC3OI6DEKdFU(;|@>n9@qM&c&K+#CI6$kf|2=61Jj9l|7V zLmX_Y{6VexIy4Xba;iV_62nRX8B|;{Tf?413KR}Ya%6G$SDHhV@Kc)8RGJH*GK3`k z>7)vvQKy_b3jV#JMf6TlhME6DQC3aK&`izn6h~9GEG2vYpmTz#`hLoh(pqR(5iRtw z;?t|VPH14*7TH7<#yk^yPTbDbqeepz!7B#FLVlpd z0uZ=(L`Uiy(K|M=U6o`(Y+bh=ID(EO1b5dM&WR~qp^6GMx*)c}O^>2`g67vKf4L@J zftzzmjq6H~WX*vn-Wwgjf{ZmfKWW))`Z=a=J4Xn$2Xc&f_(E+w1~b$<#q;FcX0ZSyjxH6p?Lueg=m2l!&zVy^A)?#LOAfU(L>q2=Wm?YCi5Jzv;XgRs`9 zsZ8U`C|!h5zmFZUfMTQw!EYkJqrOj(H@(0XNWbD855i1!H0c5t0{+R5l%A6c4^?XY z>bXkLB$-(HXhaZ)&CoyY0Q$AZk`<_``s^On%e@jar;npA#uFu~n^?)z+7%(bBrbu% z&X}FxgdVm<$TR4NAj@WRET;l@6Dq4*=nzfDP!|CdVRa# zU=M49ue!c79F>?F4vzvi51j*ud0r>=nye$*4-cMQP*d=(ZDu3F6DH1QA9elhZ}V}z zmo2NovyelDDa)rEoaInr$w7R)*W`LFLW31XWNaA~L=>qV5zCO<;hkmo9SfCAejQDk z$uTMcu0}G(%4cqI@t*87BFkVUN=rCSsGq?15%@G(C+Be+SqH0=ZVpA-iar?SMQlQO zT-p6~#vA@f*hLU?WKt=-4vRD5_%nqeXeQZaSP+ihUz9B;%Q_H zz%SLIemfJQjJY`3cV6`_pT}YCNYH8eQqw}O+B9?G!*!G+>6zqY->91tz79Ej!EFh9 zEmv-e>u?at+d1{$w?zQn4L!8m61F>34Xk@F=ip?e5e~n|DE?-SGHUl|dwg(Ou*MRo zP+mUYW^10F{Tef6uf%)A86h;Vv|`U}RwBBY>5y+D8%3q7Mp3nWc&Op}_eXojN^+>r zB4|U#GQ`wjWg?uxj~qF=c~=@mmnm4pG&-S|AYQ6V))Y~KBkRX1^JTU4zoeSO4mLWY zd1&_FN^L<~s>%5s_j%&sJ_FSg@5yNR{}$>Au??{q5UV66-JXPI#=$w$$nolIAx>tS z?##S+PTFxaF;h$EYR`_P`L1%AAO)kEBa7X+r8$m{ZYl|PK$*(|N3Rd9eJ+FEEl3xR zyIhPVo&1p6aWA{pf3BUoKR6VQRSnGIECC!^PkBN=e?GEbocv`9Kf}+QipOr~(%~6F zq)<8TzQo4VH?1%1xGLl9*bnb8XyoJQ?uy>oF!qw)W4Zq@RD5U1@EB-)zZK(hDfEiU zm@^BmbJ!VN>1(t_=jlAvgpN+IH_<+YSNI>Lw*A;8w`*#8_QjLWYLL9_1I6^t))O;R zQw$sXIlO)9Hu0TTh|CML&(FsEvvIp6<>_}czR{PUvH3CJLRav;xFmew+`P4RnbBot z3N1Fu6^e%E6fMNR;l3Cyfvo}}-_dsLzy_yKF|R78Pe;GeNGo~)$*}4GKEkkVaxf1{ z*JNtP%{jl%taj1C>On`tyg}r};KX)WzVCfk3zmse$JK+HYe0s6BAT)?Y*XLmGs^S8 zHTjoX`}|9-<9YtA)^}uxAq1bHoe^B|Nko(MBJg+@3t?zTDco^X@G)%(c3UYGmtlf4 zdIEQL3dNWMiFWNkv?7eoU-PCQWB=W)tA{v^#Eb^LO4$gU=-(=87_Ll6)R#z?oSrDQ zUVt#7psDY-B4(d%GsH#ZKk1C0QUpf0kLQY{;%J&7g}^VteZULVjt-P|0HUpVMylSbSrSi2Lb5$3>ob3`(G`6{_DZ%JnE&cs<9DsWW!dMt%7GGHj!nIT$C3e=g{ zBF4HZDPRjSo>~mq5U)W6G&hasem)9-$Xmo*Ed9YJ5sS7uX!&O!Q%glSJKt|yF?f23 z$R9;Jus>K|-){2~8D$sLPv+hV6xF5dTNfwh>qidMwrs#dj~y~aKk#;XQW+%Bg(7L( z@zO?0x0%)SE}YVf5qvH$y?&c<;+}f^9=C>`Vco7PR-cG>>Mhg^Ovo8q#+7;Pva{nX z+Ff#U(k(`v2oblG&&^B8_d$*sDBl3~#z!#yN+H~fJG;` z!@L(hg$JK;_8Y4%B*!rRDB38q)Aeg-l`#h&OyFvVNoB%kF^15^n9K19>wnW&5aJHe z_JD6!Bfa0~e)*#qPGIyO1zTuxmMGR$p0p57#+e;SJLsS}h3tO>`*|a-IVg!TZ-4AzGwcjv+!M=qKZbd(!gq$P)k(V(HsQ9u!U44y@mi z@@^D%)Pojj0b?izb?vi#;^<*tT0We^5v;jPryMb+M1MGLi4Vvr34TCZHBY z`uL+Xj%lqqSsIT%a%}!r#-=3=@~vw7?~HwN+Zsw>^u$hyS5EKo9~k@CJEwvpeY!;8 zrY?oc!GbwK>7n~Ob*;!oFtn_~>zSD3Z(|6lBno99mqg)6PcMA-2IB*AZl7MI8F+Fy z1xQYxM%prMo(B`DLJ3lmsBnhuRazAA`K;^bTUI)FMp@z@nNfjhpCMY_ZLL&jlQ>xK zQ#XHBcsWj=64!u+r%*ZCJtG(sH=Vc?=>R5U#Wk2QDI`y4>6i^#tnID4G7}kpq6G|7 z!eHv?{yZd1zjVSsy5*4?xjj3!+?`JO3p4u(IkLWbzcn_ zGChP(w8?wqx!?DF;`i9G(;s#kRO9CwdF~8MABbO%aQzr5!^g-bWMTQpNogyX5W2JC zg_njxTojh3EyMg6TfV7>6B0I$uG4GR{vp;p)CcUapc!IR%qYQaRMY8e2|Y5wN)j`7 z=!c?dP2K^pWh;AvS##JZrccgf@hW;5 z##dBJSjwKrEEX7i%5Mr&K?RaTM<#2&QaCR#4lU^Jxf=xwRAX=mlIt=N=)75|o(a4c zw)oR-r1k?n8H^!EVq-~fyzA_!*ID8v=lqFbUs4ScR$Z9np1a}#D|rQGqSIjACtYo_ z&bdA(6?&Nn@45dU(O#{T+!jQ^2F|5}u>_ys{~6mehW*q;})bNI(FT-XXL}nlQHP7$n5JM@LC^e(pAj z;_GdQ>euP};H)`yh>dMj=9J&NMi$;b43tc=AehX!Z_e|5U=ez)03Ceuj%1PeMS~j< zRvJmK1|9qqtEwr@*-AD2pIF=S@OMW2IUH`)kZBcqSkm$nuO74}&FIS7)=~22+m*2nX_vC#p<1JlDf>K9Si*9PXI8*0kLz7Y>rE^d*rEQt*Z-FB})9&Y1 zDTl6);8Z|y%{>J)eI%jy!qvrX(_TwWiEb1YzaeO>sQ!@}gOyzIsL?6A+dYLfM#%ug zrc01r*8UDl@sghG_GPA&46iY!SAmnYwK`3=Gr^Ary>%CeNw-m3qJ2za23iK5u?x z7uE~K#KoP3kd-j_ezw-lz6~^FM|MADyX%*T9+mB^!uLe&_YvqEu;U9lrB3@~Dwpz$ za@5L`>(Y{%cEWPf=Y`F5X);T23}r=cpu1!c_x!YCqinvI{1|n3*2j~qe{~*tX!Kh~ zwWds6aaDa*2Q81Ox^yrG!YFxm!b0o_?|0Sj$X$3?SXi)At8^44=R-2koNyVnD(eu~ z1rd1)C5q}uI3&z!XiigVq%mbB*hDKj*h!SqLXO$VxZvO`8F%?-X$#*~2% z3Yb`~gYr3qu2N?NhK9!e^m!@1nUITYlcZPH_o^oK-H!hCKEF%1^Wxe^bW7jt8h6MN z=W5bo;8MO=m}Rkjsqwi#b*aJ*(f>Jx_!}yuQ}=+i$r18QpL}{*)X>(RX4oRi@r8k| zDGHy_raGX~DyQw5RfI;M<5fkqWU{0!3d+TG`&o`v-Py~a?9=nTZp5R8Xok+M`27bz z(op_f)tf+OSLX^$<5T#iN#Zmc>Hg<^ea@mCEwB~3#=exx8 z1;f4AjsEN9n0dl;!$jUR}{`gPyxFO_U2Flz>&Wb9F#fVK6nt|l5$F2j;#xnC;~(n?-VT*%dA?Y4GC%XxTX|U)7%F}l zStJ7C7y^!)0za(Ncz|-StJ7qRa?WENJMWEWLpp482bU}Gn#XRQ)#mE4VOdLxKigkj zX!=S1GRHdzfWwi;&m;|Z{?FuM`Mi?`j)4Ha@BC8}WjQPlx4WH6d^Kywrw2T37k}Nu z0omKVsez8-cV}gPd+14ZuP{sAm&~g(m8^gyC{~WmkhCJlURJ&r;+#C>Z1rb%bi)-X z@?N>x@2l1Ig}lBAmyJ+qZ}(hPvZa%fZ5C^ogMaqU{{B!e Lz57)N1@*rGWhS<+ literal 0 HcmV?d00001 diff --git a/doc/fluid/design/dist_train/src/prefetch_parameters.png b/doc/fluid/design/dist_train/src/prefetch_parameters.png new file mode 100644 index 0000000000000000000000000000000000000000..ee54c35272898e0487c1193a85b204774811874b GIT binary patch literal 180176 zcmce8cRbbq7e6;-WE4^eNfbq8rHpH26xn+=$OvT=H|rK@iIS}By(zLs6WLpK_THPz z@7(&()#uyi_t)>&yIbdYc<$c4%YB!Z+uG&^ z&uJkcA)Zrbc+Q+T33r^db+od(;&9T+_QP`ldbh_3Bn;cA{s5 zf8PA(&%ayy^^~NweVcaDV&renlHIV;CQ{8PU`K+>iU)pZ6=7TH9H} zT-%skle4ljwt>d}d3vjZf4}3OcM0=grweELeyz>VUtw`XNric~7h06`VSOqa9v%`; zPD)(O0e`&nt{dGK%;wB3r{Tg!_gM-riJXgMxlco8ME*$R>%L2@UrnF6WqgTOMk>sc z(I4j|)k0EzesnA(YRQ0Luau9$^R>bPueo-oZ!U|I@4`0L*E6c&U(rxTSiWyaNFXB2 zbz|j?kZtuFp*gNnMQLg2(&vYGik5qoV$^Cna&50^D1Nw4NUP}2tuOI~_uAKIj&p+^ zUNQ@Mw>}VtoWDz#u)~|NKmp6Pj~-;5 zjkZ@NIn;zF$CRUJRN_&wmqYSQ>sSS6&bG{r#D#Gi6tpUc%lT>~YyDtng2peu$*~!@D7c`98i`5K$s(oo zUPGbghhGE+9!v}+p=M9k$>O{z>_JMaA{^Qn<)HKa=0QFtj|c~iG=mB33q+TD9`IW< z=Oo14s0lr(lS%yZ1q-811&(t{3k91SYfm_amG8yADNKyJJJnSc#Q#pys{ZOhF_-nW zEDMFp@$S93<8Ld11T5(@-PTZ~blk}fjH8ZIg-gvTx^(lLi}FoT4ncfoS8MppFyB=~ z##+(@g(CJbHQTNX_+wXDoG03$%Xz7joI!v<#JomL*r3Vw3#}%fRY$8qt{hkB-7d!) zeP6xUIn*R(^c)BLyy*E!bxNE?EN^MbX}i9aR>F*JR!Z$}|*N z4YR}$wsfCYbt6C!v$)}H{h_*q-XmD^f!1f^cFaqP7rBlumQ7JFDHd{`$!zA>JTFZ` z>Ak-+b2jsmH(N((pPsko44azB>Ydz??AjLTYR-eBYrb(P#y2TR@$Z%B&a6}~>B}^2 z?p<^=Y`qgA>fEN_`oMEx_z8t*+~p9P2I~k1HSbRt6%ngdhL6p*v;A_4qe8cP-Gg18 zrq3{nxpXMFN>+{v-5C!Eb|K?pa=zwAyefp6j}P7;3K?_i_GT37RflI!(s&n{QB0h3 zT29wo$Qj8dW~hmf^z4`y{G1#b=CWF@AST}GK*1zDEGM#?g7H>^B9#Es(!#LdGnZXS zAH&0#UDxXr#L(61A{5<{O?|OpC5fenLosVh_td?ET@YMMm9$tSIH-G9+&RwVd589xQi(IX&4E@?qAAMy zxxu45bC?(JJ|#6cCYFBqp7*2z_GsPHro6Q)u0?O!WA4r^NZ6eitD`;C7IW8r;c8a! zKhugjd~OysPm#c}Fx;tFsCCFu_`=iuO=NYCRTVR?ewmlZtZ-m_h@jyy(BqNHPcHpY z0V-gB31Ut+t*qZwH&P0d4JbG!=W4NsExO(C%gX@>ypf37zr_ef@Gblv4#1VAb zKaX=-nKfuq&9>?c$6q!+SE?EzL8v&Ipp|ho`p)YgDo)@bgIbjk!>fZ@&eZN5WTziPlXr zU4xfh-BUgA$6DZg{U7aZtFf&Yo!%dw#PYRAkK(VB zi2l3}ZpoP3U5BFuw;unega7Y3gWlX*R$bjycrW|?rf&rW?j*5LN#YyAF}_f<&+?js zGPeir;5KOw2wHUvRs~x$CGy|uK`PsFQ`?2c*)OFHt$dj0-NbpymG^4>0& z^_kM-5YYcyzC2BIzy)n&hiF(-}q_m z8zIJ#B5ULCnzW7X$l+`eBa-3GCyH;*Mx12XF*sxafzwJ+I(s*>sFOpHV)o_r(WErg z(qw0%dJ^%NTxG*yjx;-LTROhwDs&C)S!P;~B)H90v zcAsj*$`q$o{+$$#TVu^Bmzq-Vzqf36nX3{EJ*G^uy*kK5(#9H0wE37R-S%%Fe{3Ge zjeJtRi*4pt0?!z`V8#sBvhFk`s=vEY^Zv}*!kA`)%F%mh)ws)Ej6(I_ux1B_%IxnF zO7$oP`@ZMQVpfExF2|w5#Wo8U@#59dq}ZgMAD+xs4Y6K@CFQ;x3YzGIQUf z`x=zh<>hsUMFgjsl3J)0g?|)qcLeg@0RLb$Y;*labFy~D>yr)cvavb~e2odJ9K5`? z!?h7jNt%KySE%VZXPR}bs{(mT4T9~PLB1B&x;MLwEzK8(>!QFZv9^zlzn~B-fazo2 zj8CLl%(>kMCcc1mR{{Jz9(TR`CG4)E(Zr;UX-~2ErK2}}77?R~j+>YzvGwUsJjLra zHK8JdN+b0#3irF|&O zHC1)q)CC+GmmzaR;FgI%w3)rh`bv$f%W#Az zDJ>_B1K+8k&b!^@dhb5asEX8xEWP<|FI#|FY!~db^EE`rT=M4}daY}v{r39f?!y+E zm}BRZLm0)qiA+EMH|k`VvsM`p-a&7;(h6)^)34B*8`&VJ>xvA~nru6)AzUp`B8h(H z)M9L~Qd3GGm1hbzVe+M5lsp>+FR?byxCO1dNmY=?D2I{=eOma^fP%-O`#FaB-G{C&I0v!E&e~KxX~u#aFku z56;I6aotL}&#n;kjGq5uP0_+rg9@Hvy{W#WMDQ6?4GLFRhQc&YCsnE{iZm6wZU*sN z1gT0KRr5BHtiLYGF5vfu&rBtLHe!~4!keioO)uA`GtZvh=L#(^=0Q}}-Un`}?f+N7$WBs`sU5&aselm)h% z)65sTl;^uGvrc6_ye&Le$vb%B9&6%Kh0Ec3T-~?hxKZ9)OCZ%OL-}HEzV04I0~vHw zZ2GgNf#VnVq@hkUA$P&FL{dpgb{D-vW9VF(E2ctiVWyPX;*N_&w#~pd*d%Y6uIqa6 z&lO2CblhpTybswDMZ4}I=chEs>vL^yoFp;2oK2?`8`={5wCmO<^2I2} zi^2S!Q^lJb!Xfb=(YubM7B1>os1vFBJ=8WO;-F46nBIh=tFo@dy)eDHej1Tt!l)%L zbpFn`QkZ*!_T$snz7m`q@gG^i%qE5DZ>d(6F9h?hcBmoAb{Y%1Dsdd`gl5|}ZB~6y zM4j@D`zdNxG$7w@6A(&33#LQ_%SudIYDhzyo4kGL=HB8tN@`PRaZYT*A#cgreC(0%e?tW z%6xd%t1QuX6lU=<8X6j)NH9;d^XX%aq&bca-7Q}0oc{6Y!E3cx=>w)uz^OW+m0rTh zYg)@fUR<00P$`aJ@SaUEBI)S%hLb&tkFieqT4#P>%uBE<;NnE&N!%s%kpibsC2eVb zZoZ()yz3HAA)jR%pF&I2isNiu51oO7xGK@e@%0k)uFf#41?u6z1<ytSax@Qk$8I?TRdqkpXrS+P3pd=PeFf0Dt=PhPMA2~_jRX)wt zlbw`77nE2wPi|W9QP;X~K=Z3(OVZka6YcYDzeMh2xC`QowWV*~VFGX5eOb=cGxln& zTxJ*OE4z^x|G_?~F&c72?fUY{Sxkf{)7xVDFmHN9aF)>74xyUt{$i^qQypNqO(eBa=a{FdC{2+B{rj$S9}ch&A&*XQ~8ZnAL6AZ?XI zbaQ=9u*=~ZKqNu0x`WcXKWh}C?5n)5SBYLXHviDSe1|sEs^ zvfa8EdyuATWw5HL(@Tac#z);QZ*iBcZfW8Z*U%J?zZ%5(jj^8U3BYgx`a|wS>H!Fu z=Zwmf7ZX%sHuQt_at-!+wTy*1Ul3unlp3!+eav!!^$ z9&oLo(oK*<9jaEH45Y<3GfY=?$a$F~4;`8Ur;6~YZ=n%{Sc8g=$DpI%=dX6BEIyhK z4AoG#?#+#*!BFypXRc58d@yMVjeoILN4%?Q%DP5z)DGY{`E|fwTzk;FE3I1H_amEi zh;{Zx0BCT9O!d!I-#*e=atZ3=lX}L|ikl?}n59L+Ex?o*dm&B_%)BA6@NNd(;)RWR^y<4q`jFY^w@Kso0yoG6CLIL~hIf@++(nW1Hr9r|;^d(^_H#;H-FQ=LTOpW5^9TDPR?7q3m` zhs*f#sXpD;4d*NSGFU1%U=SuPLK%Qs{`lnCeQ&A|EHYc}a^=77ooMQ^T0K6}wl;SC zc}LP5K#XJ8C$hU!1;?sV5u$xOG*_3|>?4Qw=wC-^b}}{xzk3TdEP-1uzeX`unvA;I*gr zgGt_OG16=W&^C0OOEdN6b0T&MX3=DO!smz1n;d#uTrTRoI{((VVl^akX&@L7R3h@_ zL;U#wnz)W>fI=5wiA~S}{iq1Ljm-?-Q>3uUoEuTo`K+vmaHfjiLyIu}^dt z7fa$FTCFhLnCSdYxp+x1GACzlG8hyAwo1l>rRNg2hXXrHJ@jZ*fs&JwC#Sxh{+vLpf$%47dBHh`{ zDs<2D3_+x9+v8>)U@)Cw?wm`~lG-brh<2oQ~CNOVFbe-MaSHo#$G0O#zXP zF=sH_>8j+siCiRBEx|XD^jc}T$ju-GeSC!Qm6LEL6$|_zeOw@TkjbFr^ z2e3)QgI-LvTu)^)du_C?*iZ~jWN9~2Z`>HKOh5XgMKPQ{61u(jrS#ScsHh`F2wL>- z9>NeLpj>zKS?+KTIC@=0l;=0Sf7C_`QmA$1L$(iPxh&?v}c4gBpy&E zswG5@_^r=Yr3Q&z`RESbXoUhhdpA#nP*AAjU?9MZWDG|{ zaTr+W5nb{~8n3cQow$bxQ+^K+n-u+g4W2rS34+3}O<*pHJog^8r%t!=`q7$mJL>Df zM-sc(Gw<9-Ih!}eM_BfRKOuM)=7Z~h>}Z0OhImEV(S3n^d4!%cTz&Vv-1OONRG|-f zOv$f1U%hpb8@(kvINrfeNfKu#))&Go0YJA;mZYn?BBK1?+wX1V<&5qsX=0UvT!^5^Fc;}Va{76KdAl= zpCs@ARyf*yP3O^HyX*D|gk`uY`i}vi)%KTZ6*y$H-LO>6jmX@w7`W|2$L^C{@9*zF*4;+Lg=E4V zu9R{(*dB?UZPGJm)V6i#Pf2#)KkXs$gFaGT!hp*-nu^4D(5h zFDZc2!0Em5!E2ApV{&#PoK$)&M;rul|Fy2aw}cN9cFUAH{|CZJ>`ny$JHejse}7H1 zCoIm$?XaEkhyQD@|9IiZVUPk;#|@poVhL_YVh}fp5}%z@h}#enMZ8=e6_|;$N6`ed zXYEHDCp+`O4$+HOiXb3=kxnJ6g9gZ}I*@k=Fxu*qWo2ck^=nNSXTLC%}y*t?v z(4?AfB>trVpc|!`%7D|?x(Xbx^eKzb>D>|^st%EC;svF!GB;HEHuQ4HIem!3NA#|M zsk;A!Ru4A#4C?&-tsfE)y$)C-!3Lfik9p7}hJroFt&>@%01-l`)seWTbUb%dy{+=B zoZ}rjTB3L&ik?J_0>1gAx4gWZM7`u&%TjG_C@B6L#>Tk`GGft(&e;*$3;8cBJBcr9)Q+|i9=v#K#)8T%Mw_b z{zU1|V>lTbYSo#SW!Aus4cLS0eGd)>7@JvrG%c4#&g0VDP_TVd^>XVKMEngn&L<}#)A%EhDRCm_Ck zrSq=eo&`*~st84OUhrh!?Nk{I^OdkA56c#a^L5S(I%s*P4%c!obmxy`D+wo-{%}cP z62y>S8544xjpkT*bN2Q}h2jgX4uJ7Z#ugtoSztVWr&6KVgVwt!<01iuQ3TZpA@yqe zqA742XAHjL$_FyQ_3(V@F` zQ$XCBm;n}eoDW4!nzdJTmg}6xZ0`277eyS!exsw#{soR$RILz=gqd+ zx_E@A=52Lpp0A1WTJnCk9XvGR#yG7;>nfc7M?4!Q=YtGTHA<6!15tOVg{+QyD*snh z`!G|d!V>UGqUe%h4lNFS%)1(Y6(wlMBUSpANxv>aAEl|uqmlnuX5nlHPg4{`pVMTf z)=?^oFIX?kU$yU_p*g9e#v{dXS>($T+6H)U-|YjWN(BxxfD-2X4s2J8Z8{0g3QdB9N^m6?i?z`TApbiO+cybJ-;+7bg% zwKfQjGkmp{y@)R;QWEizl^Ivpv(g+mXBV&jsprFkBgs!1_99CZ-NJapsP1f=^-72z zhEIv@*;oG1T)1C-5Lk^`q7Y4j`|EFwi~ZDZ2;sB!_S@_@D*TVTkHgU`PTC~e| zV2xqIJ=~x-?o{!>6aWUvK31Ch+uh!$TO#N<+yCV$-3=2HgFD}iA0OhZJN))!wB^E|xlQRqqjzlTPB2td%-J}9tC{V}~x#EfTe8Eveuv<>#@UEYRc z>o0=PW#)DA?cW{{)|Qezg072_Q4AJPXy-HMRoM3RXODsa7PX!w*>N|L|jv4+2ehZ~bDvnuD!h-j|+hxsi;F}-#Ho(Ty&bHG3;yOQE z2Q0=&pe=ym(I9YKN6H7*AE`oIu+(*LwNp3EKqQa!Wv|QLKO_VhN(jp5UQY?W+*iG;-x+oB03#$ zILnw>Zv3HV*z!uq1v}F3OtcY^)A#e&LLl(gOz#&*ktE}a*AIxu^9F+~oJ2QLLNp85 zj-|!5ZbBT8W*Fd<#y}}eG{@2j4vwL$76XQJcEd~EuFQ!a2XdKh`IyCm2lakoj}!>8 zH1%7fjmJIr{mZ3cIY`K<7GIljO~!JL-U&Div#2NE!1!C3>Mn*J1+gDxj$NC^ZmK?rw?M778Mw@i=ygV>TQy`4VgTH=H^ik20<$|Rz-0g4-raxAXfl}MBHXh-coxwu>Z*A zF&YJ{sP>56Rp;+cR^C0DA$0m{g!D51qgp94DT}7vNiT1NIREN0MgRq@MS4z(zF4*jmHFjjvxf&5OoT4qPT747&k4<8r{ME1*?@6N?}u zod-OHw)yZ#9CGY@X}eI3cus6vge1$VDYzY`K!Y`q3?m-i-)Dn%N8Im^9I zJ;@njWj?j}RnFCjZB_|(GYUH>%A_sVPq z&q8J0s}uTpc2OOQ;7kL7#d5YUVER;}sVjMb`k5#KwUiB-bD9RR@`3r2d1F(qoB8S| zOw&}1$PK=u$i|l58GUR%``ElG5%Yu6wN|t9`e?-_NQ)`KLv4;vjP;b(4Y3OR=Y2o5 zaT<^eM|QCWXau-VCY*E6{JH>8`ohzX>!OV*EvI-+>O~k*5R&a*hcFC3_>>T`Qzx z&(_Vh8Vw8(c6_^f3E`c1R~$ncA(1r;5e5+v-95rBJTksgBP7X^>Zr=Zm_(q6MjGr+ z(LW6VR@Dd1o$8lsYd{xk)z)e%f*Ib&_3L*3rDqv=Y zL^2%_94LId!1x|`qk~Ur0;boFM%k+(Dq3wDv#2h9;=*s561s0#8Rj%A*ONwkj~7!< zUmW9ceVr4FV$PnNzO-55V;HDbG}ilviGxp|qRyhIPbiUIyf=CGytww_MEi{}g)dXb zwR$E2_CJ`(#HDJxpD^_5fRj?7($<`88y+N&a)1Han=akg1s1*}Y zke4qV=JmO7#K>iJghOy4e$E73*(;Y&Yy8uU&AHyw5XjCJyakv+wP9|!7)2N9F{YZm zKswyG{hUU8oagqn`z`UdXwK(=lyudKrd*u4kImIXx7z;rBCvtM>~_C zE}k(e!Lv;zC0hipM8h;;VLC)2njm^(PRdUH(g91BAdJs)2Br5HKg)>s6QGB5ro^D8Gztj(V!zch2zY!x#x_|H05Rs{6D(8|76=e(ur|JNn@p z&nW-2rj8#8=deJzF^x94_*Ydn#3SZz8E%@ksET=BnxAObm5Ov_6P?w-wYDv+(5xF{H?P~FS6rE5m_!xT<(kMx&wp+-$3z;jLu9zxZ zy~dM#H+zCGIg@F`JoP{)``qcc;V(CQ4+hkl6OXnMC)f5nFeN5@XA|C}4+tu}INWY3 z+%$8<(vv4*?WuHoGnbbA{zU5%;sS_EUTKf#zaZ~uzu>{iY>BVm!bPASvt~sfqkd3= z|6<6|L+9`C9ra7!FF~mu3T)IeU$+sKWk0!r5hv0=9T%S-gbs`5=3tY+%d>Nh>Zh)L zCZ0QWsSoc>T9W<65VB#*tA%vd>cbr~MroxRG>X*YTG)gPkw#nFwcLn$ribQvq}W)< z74k){w%r8B#(@>^$)&MCF+~!sxCp0g)Wdc-XDUv%idl1`gM{7C#|jcv2G*1Zchv2T52Ax0%h1&W~tWQ zH`4-vCm29+f6v_A=l_aSC$NRzkTZXt>L2j<+pTXJO)lGrv;Bw?h1FemM&)7OTr7I_&fjp^#P*WLV~s3s%c#d9LUWR6z=5 zE{*b*Y4Rx_jKrenv3wCH)Z)0A>$T3b=&Ym&ywSj85Yx;`BCR5j5wExxaBxkjaFyQS zQFx-=)2zu~w zlQd2vMF&;U$`nMTHLQM>t5ldb>yG!K^RWr9<*yXZPQ?}m^~ffj4R{AxMyB<3mp*ef znmUoQYSzC!h?438JGUfp9#2P%OsA+9vZb08UpKcZDb|AlgaB(Rr&St}B=lh%b491N zHS_4H2ttA6N~}{EWRVI{=QlaT!+9@QGR>R5nLm9fk}!76G+#dU+-tzIqA!03voug1 z9096aH;qg6Z5*Rdu4(s`old~ta=(5#!7L{UAp7d3t8B^)Y4@ND--xGkxq?V{3vXJw zb??)0Fos(A&VwP@n3UB_ApTXEvT9*4nceKPP*AE2Wo=bzu)Be-%Vh3Q$E!WM>}?S` z_yN^;BBe`Ya-NO4(+!GZ$Gh8t5QZ)*F(Z0)Yyv=6iV*65Q~POe)n02q?M%}bwpSFN ze?6*3Sxgkl(#oYQ_5o7X_&x%ybJ>##Kj~7XOJnrHT+BlJf|mA}`T9bdDS<3zK2bOLtEW6R7^2i<&{c z@>ZaSyT?{b*ar^Zc4P@Zs1hDG1Rc6(gwMsXh{&^YCk6&W)97ULlzJ5%55Ds_xtgYU zmZ7LZ5Z^(7a{w2eAe24g=H`hQeLO#+X&Fx;N0}z2j*G8Q9Si>=v>=eNLF+V@l1;>f z<*~iIfP6R50bWn>CT0p45X=H53j7=Omv{*GH`tb3^y3_viPxyj68l1N;^4bC(ZuR~ zC-*#JS{l1{XYSQ4UMe<4TB7}zBb9bN@V@i>E2-T#OaPhLnN$c`x-5Rbf$Hn3oa6^T z(FL=L4S&Q2_{pm1VjgMh6PkOxCZibVtaU(;XjvBYJwMNgdiPQp8Ffr_b@)iiC^n_= zu4IZnMpVy#E#pqs{&`@&Ecq9&e{uFUsx=2afeuHA+IJ_^yoWfoIHfNR_=AT~rcK{J z&s(v2VL?X?asl>|4v#=6B3At|6PLw|dX+EOb42PuqiQ@q`(SudKYzqjf$|>38=aQO4{($3&fQoY!^ECDEh8e&rX0`o z{#>`ZnSkp8>2TCzRAyFJP)q($P&`L^5{sN=7Lg>7L6VIR6oHXhWzq~ORQUn1CU5U# zrA`5j+ghyO|FR1HNtIa$EMe)cB1cDQrY&A|r=p(mv0YN4NA+fN=NZZY#LU8sD7upy z=JclgIPRKa@y}>Kx7hbBTqQ5~93dZz-qFbXz?ti108>|`ibRC&a-NsAEC5{Pn3{rx z)$qK^dv;sF{43N!s|CQdMh$8eIjy979O3biijeNo8lvaxe%^K88c-YC(_`^OW6u}_ zFZ(uHT-`Hp!mvnqI=Mfq$(q(n?yXMr7q2Qi$!~SN$AE;AMUfzQsqiJ5Tu`W-D;!^a z^-H|BOQ)FwTH1FwYM{4iCF1-B96KA}-g{Cq3!GF}GzS_gzouXLVF>$&5~pjRIi9KA z-$DWZfw7Se_#*A~F9UxtDWbGo2S5V}#r5aeaD=Ry$6x8eY#!&zPo+C9w9;b^(glm|q~v{ZA_>u7UbboYE&!xCp%KNmWw^O@A`*^7qn*l z`O)4Wp03=2=a78;fivn-z!wutb$#?{)FqvUFKS5|6JT%Dp$c5c7(TPB702(h)KvVc zAUjH#KN1^^;Gj7}_^S5hdriID9@;}ukQuWW#U9f59xzE)$V^LlZ)$`dG}Xzr3dv%) z<9ENGR>}Jj?fO?QhNeT2EB^Aj2x^^ftzrg+BIl1sedQ3~lpmf36UQ`<*HXLrEHmoO z9~&A%5~$sJ-mfczdnS)GHzWb>F-(3w}Fg`h{4x&`5KAe36LvHsjW%kkMFp z^ZVP_XusN|QaCP8KOkCv9;9zA+4On-l0P?XLZGAcCw2gOA_vQqc*cXrbVv$ciUEln zNV|>6+6_}acd{+p1ppBT-ke5)%9n1VnA=;m0L~?5H!ipp$#^pXDOEyAvlOU+k)>%^ zDxe;zq~LtvQWscYZ@SBNH8fB;2>C`$5`4KiVLpC8^!CzJw;@^5C|Q(lED_MUiVo); z8Kj9(uiV(@{7S;BzNLikbG!Q?DgH}Y08Fk9CV8HimRO}1TOE$-&7#P%?%sghD&iBd zZ%kXi?$Ho?IjZ|Mwx+)F+A781rab=z{TO?ruPaDIP!sL^18i#=`5dT9asbytAXcaec=YSUA$$)Bj0Algsi z7vJ5DU&%mQV+_O4!<_w=5 zvc|t@EL?S*KOj>>UY+iKVPg0Q2&q1lIT$>_b=Y<8OiuUV3G*I_+Qb5K{zStE;WIJ; zW*TD))E2ej=sf()vI(qN1IFJZh-KsY+Txj2isjDv5?SF)uhZi|JDl*!ss}pWO(TX7 zTVa}7kH{yrkdIWt&J`#1cpp7qcsGN$@N5|nqnpIcc{Fluj1^=Do|OR0_7=}{g_z94 z^$zu0>&v&7Zm8f8O7IDUX-;igOkN35gP12+AC57Yj90d+ewqg54FmHz+C0VQTN0vx z98!077v@3di96<(>mHaD23zZ^@stIx3m=_F0t1!lVWPi>q(_{8tO6UF_X(H>-xw#F zlKc&i0$Lv-WPWrWPx&3?3N2YyQp@XnyOGFCri%>4D2a*5j@$-Oe%1IOdvCQlcM@v8 z`)q3JOb_Xs(!}GJkCbOC9-;nr>Xf0k--3B=@EFRN;a)3{z1ta5nO(`fY#Oc?pD`eb zZ;NL&mG>(ww5q3<4;Q5^UVIDTs~5xpuHNexT{W_(mrMCywh8T^6Y7x$Z1UgL4!sH{ z`7Sg#;8DO_yTYtvro(VjFmdHrl1ntdIFXA(5u;DiYa-Nu;ONQh(yBKD zRED7A$8I6QN`e%gcfGZ4P7WMgJ>_?nLzqO}`bBX0eR;Nv$FRjI1n^ChA2@$KOiq|S zcNv0{ssh?^Nwlc_X@kMG6OVxnljIcv&M{FF&zGyNEdRPss*KAGu zv_oJqJ?KVdS^SEk=*sobpmEK!Hu&lX)CsCeOgfD_uR2p_zP@KP6u&}0?Ek+L+8{y<}HRHRYy?l9@{pa3uXk10AiKdW=sOe$Iq*1b0LG9?U9@G zo@A{I2`+yqn4!TtZgJ5IsI(&?R~PoP$-1*YVIB;lc+#AnRbh8p z3}L3d1EX2m2ceX2{DMzWgm!Dm-xi8&L-Q=8=a}|E!24~A%bj{*gH2= zvk5s3Q5y^?7c#87MHga5W-{`q)TG7eC=Q8LdtE%ITlghyLkLr=4{wlyXq0k1GVT?4H+9|zI7Z9{xR$)s-UD)Qc6%6JQx3 zfK-j?1*ey(A_UKV+l$DTq2zs#*>w^AV z+yhvQ%#^QCRBPvfe4FNxUD3O<536HvgE`n>_%FZv=O>8m(W-C-umH}o<_2gtV5j@($Y3|6}`{f$1mFxB*4hDPu>?vJ$`f+cNjZ54Ac7%0a<1P zkf_Sb%R9pPDB_&|e=sVq5YP{}&`?lQ9jz2OOtn1`=uDckz|;VGTc$!qbA##j1(-ou zV*D`CIK{ALfx{mU6XRT|mp1}56ardMvSrjVyYsb)LR{|exgo|DPdEr+Xg4u$+u8k;AOpjqj8ySdK^@pOBEk8#PRp z&UMB6HE~4lkF^4#47CG9Bp|(94U`nnb~*|V<5qLPuCpS+H-DZqRB{Rjt;%)+wa-=T zd_B!HRug~HsU5WAoF`_PHbgU6xC^^wVf^zOl??hB#O}ssn+2ZV zz6B=9UuOWz#<+a>IrmM=zJ2&~+sqV@;t;|obUdkpy6tv%!Y6RsqLRUX&Hwy}sQ)(O zp9^whq_ZIu`O5EMYdZDupVokHtY zTmlvpR5wUS*~DM`{jv>gNrue@Bg&oKWKk!;=9n;08s-TeL%v|a8s_Z?8ojwyAELy+5wCB7tiBy1mZ24`hwkKOA1 z{1}QCnFg269owlc9oTysh5#CDLunkP#obzN7FcGI>)J#%*1&^YrpZ+{Qrz8-hcF<$ zZa3A1fpAoPbA?U<8SdCSNPxRWn39sudu-zi#a5O&ydmH%V7 zNIR?qJ?F~W*(uy9@nOR%gmN#|9Te5=W%wyUk&xIRZl{+(i`)C(vIU>epZ9N787cbw z+;@1##hp*Fa3UaAvc1637RqHEP^Y3bME~_2zstKBdmWkUyNUB7D|HSOg8*`L z7ofIfi9c|!f%@5mMeXl?&ii}!Q9aTNM@@3fqT+XA_+{Bh>7ttcf5oqHrb!kb6oX0+ zdp!Y82XL-q=Xw^KAh9uV_BR(1J0c{@3qtUYA$WMxl3Gai>b5xV69-)&l|%MGHgg^J?aMA6(Ui94CZS%|f7#121@eP_XzhrYVbNc*T zsNa8jia~a!)weg$9}5j@ngSJUWXIYS`*sXuTa{u5?fW5w|H7wQvYLng?bn)Unr}*qRR(RxEeU$?~8& z)r%t>e?)rOl1o5nV8IO23<}-7d`h;4h$h$zHFkP{T?N!Lc^^08o!m=k7>t=$#~bqO zEff%&rdA7?l zsA{nsIT8g`U9d@{KLqOee!WUXw+CPl{URqvAPcGH2WIZ5Vzp13#W|mJm_xRI>S#tT zozh+ZqDnj39J;7~$dQlPZy8K-)J6Vui?$a$dx;~7V~h0kSk{Gv)Z=QZO0 zsS?pSWYJUc2uU%AX(L~DG!Xy5LFLOu{5IaUU;A^_Ws&IlL+U7g_gbXl1!piyrpy5C3U!o1j?+xbPWeR?+3|mqO zWWv(sWhpcZPzi2rQYr;B5M|<5AxZ14hB#kf0>k!ucJ>*RfE4X;d-fD?;2^O@4yw3y zvG#8Fa7*^KpJoX{EZB~w49pgp^5Z9_xQJZjY`-}hD z6Ua!?<$e68{^!IIvz`KM6x>-5diJu@Z>eON(9fPdgCa3@6K(vC66`7jD%x(!gb7Y} z%@}Zp_Oq4fQ1H+b?kYCCyD&Og?=K|MemQBcEF&5mg{h8QRb6mvsud1z@AluT%Tj>X zNAi(DnN^Np`3wh`P?c)?f9F$*Yl?Gro3uULp$4PhAt6q>G|?VsdG1KlI~R;fRsmffa|yB+Volm{JoyAS>t88S<{ddR0MAaCRjKXl z_s->zWAVuV=BS66r7w$t1QyxYv6?tv6$#Jq;lJR_d>`5@Z@kr0?0~2Yu=2-qB5^kn&XAz#|J5MO0QUHROflfQU9zNRWBRy#Q0>zI zE#zLvPw+>(R4+;Z>jj=&jHOi8tutGa=|co3aP$X-*vGgt<^~IlrIk*+e{V*DjN01& z=u-%Yw5gL=I$t5RIk2;zI~GPoIUH#5*uX|zBq2C%4)@IdfNpRF?FYf=po`iQl1Cqv zZwn_7KqTrtgqosB1C9P^n5C0&UhEWbYnuf+51Wc@^&P7)J}Z`JLJ}k3KtfgcHUI0bSpnQ|&O96EHb_)bu5blD& zJ^}r1zTCh72?i`4-29Qz&=P;j0ZX?$v&zp{gOuD$3bqLS1|R$0cR)*Mz7i% zd#m10$Zpt&K0f{3+qW;d9T5NQ3v?zeY_&Ek%ZB~vhqzV((uvSXCk+|4O!T4Y2u%*q zW?X?r>BR|I3D4AJtmR$i_RA$EvF+Ft|^gx~xF z%jls^I7kw8LWTKd&)}SeBYOVOKa*E6}+olwQ+=jTb>Bm%FN;pf1t9 z`Qa;fu%)3OohwlP=+8JV&An=nO)QfUYWpUYN_Z}gf9D0(#Jz(t_9MTlan$qtE(C?M z4%n^2Qbo8ilwlpD8+~JrjOJLl%u4Kpj^Y%MPeM*#dsv>akDhTFs$ZC{HL5Cpr=&fu z^0_D<@+*McE?se=op*uCu#;%@*d~<0GVdzL#Xtu2g^B#c4@F6SPbTs&TDQNi3XQr= zInkb-J#Usq672gkQ5EBRxyhVgrd=YhAOlOI%9=AsrwJy;!* z#IecjJpaPax|#d^on34D#^ZL!Vn!)XAa|A#{XGO9c0>^GAP^NAUn>)u*_4I^C3GPQ zN36TDG_OK97owRN)pgM#QPN&2L-kOM52`z!hAdvO^&gb6=g2R{L#kfv$+tFqZpgkp zOs?yH1UI&9jCqhMd@ zLOH1e2uKmqWbe)&8g#MC8@YUTEcqQI*!cV(zTP{Y>i+*9&oM$}Q%OSEr9~lftcD2L zWt37zWs~h_h^|USBI8iW%!uq!XpoiFkQHSo9V)`_{%T!a@6Y%4d;f90Z@25});Z_( zdOjcHe!oBNkB_VhoPS5=ed^>3X@l__z|rbleBa3WJ5&gHla@zc)?_!0iV*d#dS-Ng z2MdM~q&FPBxFSo8^M#u_Wv9+w1Rc^0OZqLGLq9@-L4yrwo#dMTWMGN}3o&tuKk|A< ziht^#Otx=_&^w5J0^qEbs}m*G6t;_jw%s42+$4uaU)8q7n$fBfz;5mEt@c0`6G@x_~uK0kk3aO;O5 zDO|+%nCISzoC0O+7q38hx9eaL|$?>>eu;ex75L)pU4HwM~@B(Z*5=|S?rD(G1%f{wS8^zcy?9viea+gB|>3$&tltEEfED1 zodSr`T67Oec_EBzg-dM2^}!VX4_#(h90@pB!;D~tu|sLEUcM;)#k(g%3E^*J-SuN*h1&v9ombj(_w{gzBu98R;zD79i)! z2kF``6q`GlclvY6cKglC8be1gp`qXK4Wt3pVv<$qTi-Q*&UkoU5tjE!(?iGVqHR=C zA3DQ9vjb?=Xq0MmbYL6MDpz{J5i6qY@HNbl zS8JbMga=I`SR+zrxKi-#z1`R~00gw+dn=JvjcQ?1c5=>%s7%l&fKj{C#n^H!y=lRl z2PX{5m|~S-TZf4q#MDU1q~*g<_1Mjd8f@gXZBD8?yVTN_^@av9KV;AdJz}c(42Tm5 z8Xh8aWV*st$~Hn0^MAN2lUbcH)}pzxjo{0Yxbxn?>k`9Cdm3n{CGs%}NGuOP_)aRB z?u3lD|HAq*`2pWDf|#FNx|e>bpdYP?aB#Y-YBEo2)&(o)-&@6!7KdUkiuG?V;6NDe z+B)5z`(WkB6YDqiD&_T#AJg0goQ)IJg!$t$%yS*kbsV{C>n*CB)^u33)b!ia)t3i2 zFV0Hf$nRQ3K$tz24h&J-RS!%c!GG%?zUZ@#_u!`1t&NbXIH*WLy88E zoN|Wm)qT$uh!C2Lw7Igm3R{W5lqXsPE>hHxb1h3VzD&En03)Ku!@X|%0zaTOT!o0m*)J`eTp!96d-J!2a!`TNLGy18%2JNIJDYRk!v zuPDJ7tUeBKl0HdMuLJ-&c_5Q8pCl)sr#_v|=b))h!@IM|r)a!_oE2D8$xQ^E@MLbs&<$=L-^|Jos}GuXM~v=^3XTmcm1$8V*grH z<~wAgYbEI~?@)~XoOYL!lT*gA(%$f19HMHvW$FH72BT;A0LSA9F7r8`_3w740{&(f4TV?;tO;2xwjW<2GMCF#7!>!HvP1} zDui2$a(DRx`w@I+Bd?d=j5i;7N>y3PbF@)O-XZPYB+jLDDD}XL#VoU*5_E>nD|;Ur zJ#K8cR@IL%DxRCzU=-d8Z)lOXWRzyInoSCidYqU#|7u@wU26TJIkN(z0J zZOdut>Q~q=M!0!3z1%8ennf1h4XHVDb4){0&f}yRZ?Z;m#j9XGhM)uFPj8_v8;H*P?IJ+=tZ$DzcR`GA!1JyeX<9k; zv&8d*vkBB2<+ZnBR>;khFZeGRZl8yAoA%{Q;>u|k&(3RnziXr4bpnSIN8>K9V0ns1 zV>e9cMzijA4yl&A-V*eEvm)YvsXBc|)WT?WJt~<_*|nY9OJ`~0d4HYR<=Z^cbELNg zi?|6Yn`Q~Jz0^$$XPU|vY?IsF3*j?xqa?pojEloRnd&~{mC7=qwZ8N3cY5&AE@L

gczxW`xGde=^$_4dXo%RK{1!oB@LfZ!vE}ok@{8q{8ZcIiy4DV$jyA$5z z^_K@*6F*BEdZ_zfHQk34(F=4F*ZtT0yy|K3QMfl>1oE zzOi&im$c~V+ONTE?bqDa0U0owqZb|37h_uDA+X_K1%_bLGon`{#0@=fvyf!9&e&;F z?Ny^`c*(nayRlG}MWVQL&sFa)75B3-l*|wnXq~^mMN*AXb?VuRe^*RU7H}7Mj7Fy_ z_t)JtIm|*o(pLDx(3jH9+c@$a!=g9!DBdZz%cjcg>nY03mps}M#phlVi$A91DWR+P zJCj5gI7#Fs7X&?`*P>;*FtYCb4s=E_#PyYCtns&NX+~*B#~$`Crk@#ANFPoV+e>AB z2!VL=ZS^*`P>}(b)P9E?7Q3p_v98xcE~0qAple#wUZpx0gnCGPABXd*-FR6d8-8nv z`$2G-vif8SN1jATP~xKf`nRMu?Vq{9>y`RmRY_DRhqSDf##fz06d#0nMuYW$uB#P(=xwuo_;CSv9HrgVks$!u_76zj08#$){7D%u}cYooABftlYXO zlh%ZP?#feSrYp=Cqw^2lJ2`51GQxy`gISWY;m+Y^1{sIK|K@vz={T8uWF< zXoWCl)F`ojO%us}{G@tLD&`OC$ZSog{7CQPa|aI3YxjPz=?pP}an90$RGKPV0x3eg zWq}tXQyCT?p>T=vAM6Q~bnNDkGA(jTd8OLQtkfrAoMFMs-!kB1)7=#1(3Za3#9Z;F zq;&_f7>d9`rHm~^VFQLoCja#cqlKSB#N)E^Z@Blb-6X9Q-dEE4VVzd-k+FxjDK1_r zN3Z4Gt@X3TFh@5Zvw>`@FqOY!Ws;|}^mvVQri7SdZ1W-64s_Q?8{$r!u=&3$Tu8g9 zsQXxXCFB}$AYqhsZ<~p5FTnI0GPcGsyi!m?sk9^?`=m8-_+vNV2pZ}&n>j3RD)GBk zS!A@!Y|yWFgWn8m3NLX8qc(JFS~v8o}E~%>$d+G zLjUO1IXFl-L0(YqxTQs#9#mr#%M6TTvUQ_sal|Y8wB0U`R|zQdNV6(0E49L~#P)!> zlKr&BelXXV(h+QnkbGL%HgGa$6Ul3@Pq$Z^yFNSjYVG8T*Ug#6=?en4uaDe%^ejg@ zHK_LO&j%}H$k7q+Sn_4>v#*8`yUHhGGmory>MM!(zp;JXl^|7kWXw;&y)3m2h=qH; zm?8BpUGxEJ$&|fGtF?}to+0_b${cpH%Zos$w87fBA-46F$DJ?wZMU%Q!Mk(w{sVIC z6(gA|j4!SBd;;2|{cVzvZ9Zwim>MJKu#InXgIHA?9g6TInt1WmEH+Mg@-%*QS$8R; zx7~JLknt}Mu<;pP>TbH;Ea$delPq(j4O6aBemRP!NjMFV5YLb)2FJ$4p!V4oy z_e3`O@*A&(`+=aHXQUlAH|n3%N)|e=VpH@#2siO9tF)+y$zqZhU6w?RsN-4Qu1~HA zjPpYzf(s608R>k%BkJ!{+mueD46-`J)I2a|bnL#pSn(V2qERhH8o-G8B7VDVjb}FE|zQFbPWHo3|i88gwdnsq>u*w^b;p z&sQ1~QMYlCHmn|ylD$O@IcV{6EB{Mgs2K`Dbw5<-wM3s(bdj9S7{2An;$0>-hu0~_ z2Qhf-fPFyn%}XqLQe$^3=q$Fhxt2vgAY4U8;oJu!&6~v?+q44FIj!)^xBq|`EFUkv zWgVQR*XvOO>#6cphc7EnAt*?n!X$VFR6~2Km&x8CUlT0RbJD+>BufLgBOt<8l#fty zY1u}#&0F@}-j#4fCwnln_OP^3s$sh6#uNMiPsPr^{6gRYG?vtAR`HklIgl)=u0Plt z>3zpowK1U0jpI+(OjJ(H`V>_3gU_g58p{$H+*VKuIP~^K0})=O;G!YE2R$jXoQ_GFvCip!!sEh=Me4FSrkuZj``lIHWx!r%q(oYZW6FE~#Ciz89 zeNy#n)xi)f!J|L%VmndW-h}R)u$_^U@@&KancQ?4_>s2lsIB+)A2X;lb-a43Aor~sc>W+D+#x#KmLZ4C z()TBImlT<3()oNk)W7xx@5)}fwjNd`+w9J0-nXfrzcXoy@w5^%b13w)po`F1-B`~m zJdiNIbCut1X~k96^&Y^tbu>22r1e9I#_DcsgX@kd-PTb14KF{>0BY8G7`SHlRa@N% zw=Lq?mPm&Fv;qBUF2h3w$Ogv6c_MG1#Q8GV{KP(_l2?P!{R3k1nJpR(HvH5#387~Vq4v}#IwV1dQS|I8Nr0x&9WlDv~T64V#ER^t_!Mam$` z?LLvo^PO-PZXGLmk#(pNh}-b;qT1jlXl%UTZ8V2?gwK@teo)2ynEz19U2O|%pWS<_IzM(2QvA z$rsXRgM+u_N*gCgEn>Skl}}hh9n;NmbjiQx#j-zq-|n7J*AMk9s;8&jO~$4!zwxlx zuelnFA~UR8%#MQQfxg~1KEF3Eok{-5BmV^FBl);ie{q`8rCqf z8V|>L6FQr9hH`NX^A@rZy31MKO@_t@{QXvboQLnxG{6m9pydqbm8dzlQLFi=Az!|wN?dAJrMhVKh4{3`ajAt zg1jveqUO{PGaF|w2`bx{$2^w5B%qLkf^TX^8x9IZj~n%aeSE?2oXmj-BhY_7P-*ro z?V6vp0;DdhF9iFqF%Ku(kL{W9_5y>?G29%#&GX)mO!O}i0p~SwLVJp95iX&x_U`<< zk5Vzq=@>|w2f<##LDMiqsCA?9DKhskN{5~QEaSXc4A49x;(+9q z4?U(oex(|t@Pw)g^(Js{_&-$BdxUnR(^LsE2o%h%ocmMH0On!jF>jN{h^ZQ*zQ*CL ze-06z(|K+Rl#iA_H9_yougWWki>sm#;yoqh!V*5yh2=GPW`|w#k=@o9a;zX<(iCc8 zVCFsZT70ai9FjHU=t$YAdCW&1WnWVI3d=0pV8NCkk!z=YbZK)KZ}oe;$Ft!h=HPCqly zqj0~w?N$MP0Nm`GMwGM`y|gj?KcyVTFAk6!>VraJ~J~RNc{RYE1$vsz7MUaaw z96IFtcE_R!bohVYlYbxSQj+&{s^*GQeM4%&NjF%`VL6LVJplXSz)xUO>ee+0SAFoZ zlTPKR(%6;m+OtlMz4d`_C<;N>P6ZHTfL!&8N#+sKCLW!XKV`EJnUS_LoJ+<241*bo zMC0yz@Yh#hCQ-70Z8?lQusluO?DjC21QDGNngbm#`r$3%TyBE_OO<=`U&orrawed= zgfL*^O|T3Jr-+4OKr2%!D)IPrV#o(D%&e1Ku{`Ye2Q!;f5blN>;^0f1=4;qJ6}0W| zr%eguV@B^Vht;{j2$wd#?SAhkO$}FF!Y|uM@AvlHTrDcOlUP4u$a)xD^`fORE$`+y zSMN9_D7y9d%MIM(r`|^$!?b!DpjR_xj08u#7acH6sy45FUGrzJB*y?LlskFRd%4D$ zN3;Ki7?{TevYr{da_{qs{)QYdYW#n9Ka3W5)>TE+U;oc#FYE9-1 z(sLw~TYe<{Gj`Xy;FW7R^<{+sHT|n!`1=QBa~?ESJx-IKng?<23bm9fPpElEi0wTx z0!`li;+1&*cXm}`4&#ZY41A&MfoZ!exdVKexDzh@F9resjTClMimx^QS2h3FCw8j_ z>QNR7Y*99?NZn$N61KsI*aKV1M!=eQzJ|@FO{7r|Nf+mrDriiJ7=reld(E!y|G%%^ z#H*L_3e(QE1zQq=23};(&ojrU1ay|@M#~P)A9wP;m8o#|!Mt5EhM?^QiJ2t4UP1+u zy0oLzr@btANSvKtcGo&0FP6ssKlVfl=`ldCQVvodGrrOQ8fqTu<=Goum0+kj_QX$w zBb=1V>4Vn*@Q_Q2xu&7rCpJfn+q8L6hs6OKrj8Riui?x6#k((&&q!6?XDXevc&UuJ zyi<4J1efF)s)y#HPB=h|isf9g{x7cJB#F{H3F?`_)_!A1poL_KjU*4GU7C`g004r6 z87i$K-e0K;m%@5+pH|=3!-b&s7p*U$?*FGvl!;w1UH&2dAkT&@elsGgl}J(n-rO}& zW9&S_{>Z`1?kt?PladSktBXeZ5K~~a$R2r9`yFn8I3B-!i$sLzhIQbR;0|`H?Y>QI zQlJKu^>Pgd5xniqFa(Z`e1|;V{dXL|NxTt%EnKv)1EcFLTP~bHR2E6}lR+AW^Huii z*cT+cu(55re;!xy<}qfOFS+~(uAhN(pFp8*-=qa)ZNvw%i5XO0D7L@_o$TVzA4YMK z-OIpV;e(`(qlV~dw3Yfq3|;s?Z)%;lAj}HwCmjksCKddTf63K(<^4`0#~FBz2f%R$ z#irGg`Sy<=vF@mA$_GC{0&@)Z2Ri$|yWq%=E4<%AMFSeCR1LYSfZK*i_zG6Z(1Bh1d)L zNhZr=^EgV_Y=5yGpEh`?S8x&D&qo&wjACi`D?mZq;(JYR=DNVg6w9tAfkx(SRm>cY zOym!koiwRlLA&|FYhlDTV-b~RBA0(yY5RW)9LhniWMDjkw}$oAp*os8Vr60QU3d7X z{`GmNTBFy_d)tn~-hgmB1aRUkNzGLe+e_^7wUN_fOT4+&QBcL-7YPh-TMk<`0MB*K zd5N;M-g8O!C5M}EuX)59i;8Y}F%cbF(K$`2cWUMqmp&7LVIv1K3~cVQZO+^%AEzFq zPB!S2t=t>(jh0qRv&Bz3+K=a!FZOA0sVj<>(Q=JEUF>YK^#5kVxHxwXmY}xX^VpNHm5FA|kU|)B3dbHn-D3|j zU<5ZR*A<~xuDG#B;y-N7kLXAaW4Wz!vrWm;q?~4}c4&dNs8ps^jqlQg|`4Ju<1uEf+dT2Q^fB zqrp#}6_I$wR(!=O#l%qNDObp^^w`yD+B*tEAbC5nS)jR$9z}FupeIAJQTNJY0p+1$ z5AB@2BDI$EHQuu-W#gX4-Z9tF!-JZH1s9q@%mK7Z1wjW)4Y4JfGJ&`B1+Y$L3K%q+mg(B zi(js&tG{uF!~Bg5?8;<+PhJx1CVyIlo8L9%%qs8BMENJ+)(5lb0ckCu`^fxV+;QZ(eq{M#uGM%VN1d*o~C$TWr^cWBYAHTtAG86a@SJeUHgL)rV)r&0(7}6Bn&c z%?FnlZIXN{Q1X=1moW?Jy;Pmh@p)hn`?FU)Rs4;Up->n*W&yziN@~ zSmOMr?Ofek4crQrC`amDh|`x~45}3SY^*C>Mj#9{y@;x0C65B&M@Zl4%NIjt_D}Em z9R_ZyysOd-Q+j>br5uj)W1r~9pHL=v3l~h zKR<*@ns(T^C$Li~|L1avz<6fU%`8}3I^wkFy;qRbieb)juaWMo)1CI_^Qhq_CAt<{ zx^+IZZ(4mJSkT*cer`5NlU=sR^W%2N?Hv|=;I%MGx!7{=!y1|UD+bTJm*CZR+8#p` zdH5w~SWDgssF^g$mM(i9(X4bDwqT~(({&awAovjt|F@h7Tu5hhNcI2%>R8szL}vcW zr{?GUmRK8V?(lpVn0)&{V^oC2t5EJ6i~PRzN8+(OU{zK$w{SF4c_o{A>DFiCJX3?^ z%)AA(1PG-{R+C90ALU(ne;&X;r;~__^$fB*w%6D5eih%hjBLcJt)d-z*eBlbdBvH9 zhFeV!orW~<1VqdLjw8!1K85MwCEJY-#9Dohs~o52y3cej%52RU9MRFO_v zFXYPdKcBRU*>+7PYs_^C{UBMZ?TsI5LYH9<@4_y8zUeb^;HnLd_!mIPixv~Z{nROV^L%)iuFj-&!}!sq`JOhdtypU zBA1}Nz`#UC#NgA{sjQcfrXF-EW-2)uQ}(U7qaC#`J|*w&=iNU7ckh8fJyqXDuKxe? zO}m)2QSPAl^WK!K-CI^je=n50mH|l5-Q+-CK|MQi@U;_NWfm7}=tmj_s~qKc4$l5J8B=i$ebRda6HY0pF!Fdv_B04R{2c6gwAM8LVNQs5DBkBZH zT*FhmNB2l9NPcWQ_6Zc>icSD)2)LnPjACx!xe39&_PHuQOQAZGsW9Z+qEwa#Mg7Jk5Rx1 z?0u$cll%}|4SeHpux>`4Fdy?$c4H~`;y@dOi1 zdaq6c3fR8EkmIfNe!2yo2_)&_a9+dnW1=q!OZ@ZMf&RJnO+9B=t&cyYFn_fqi(aOg z=z}Km3y|*kZ6i=+NKRo7-zyw2_gxZ0d4me_KZcAdRxyT~THV<+XK+qFr!TP0v7_M7 zNg56=feqK*MB1DJ7EUX-#LKf7MA;O2NRlE@>%S*`i3b(1F!{Uu= z5+4{_eScK}P95R)*UGjJb~3Q40WZ==(OeBMv_>&X9COn4pX&9Gogo9uHNgQ=Z*=Y{f?F zGdYW~68UNWv&oLG5wm;d3X$7PFNQ9FYG4>uynRzk1(1VL+)XqFaeH2L)@C|qf39_9L<1tZLIbp4U}T&yX%&%q3|Jveb7 zlDTFR0jvR1BlgVPDhMxEbuG*I&?3X0&;;IL62(J5+OyYnO4{v0g}^Ru+%n9kA~;^& zKArsG+DjEutj-57*dEEbldI{UQ$l-*g$C$Zn-0`1a{lsdze$re$>Ht(jrqq)-3uq+ zMKn-;s?I{MO6}Vjx%_TiD*S?W3%h_i`6lDYg)fLTXQy_eYxj(S6U--34o=R5sLO=* z9?XwilrxU4`h!s_R2H|)WoCcLZRH}T}j5~scY{asFsv?}9UB}V$jy2p)bQV-W46`{hx&2A5oz`D??nbiacGSW9>hi~ z2vAf{L2(=Pen2HlG5b>M@jygCDXl|$({k0KwYd2B?mR4TEctX!CR{|5b)`c!ODKraAUW|qq8T5LAcy;heH(gT0EZb36LP>B$=U?ISlE4==GCfaX)m zR&t|$srO`h`SC;_-l@OgJ35A--Bfh2HT3Utc6#TeAFI=nxUDIAOm1;)|4G@$!Q>Dw zQNZ9_wVRLCUf0PJAp$6-J0z!w{Szo*hE!~9KD7okM(++=Z?(ODHKFNlS>J+dhnOz) zlIpb}dLKu|z?C7kq2Uwgz*5h|KsOFZdT6nJxvUTImYijrAV-_cs=Km!VM366e*YQf zuV(`vuO4U+60Kb$z{-m`)6tP)GEgl@9ar=!1P4m@{N4une^C`JK+Uh=eV1c`8TDro(vgo?LYGLacus%6wOEPe;?KW~Au%wj{Eo>{ zUWVQ$Pn1`4oS?gSVUVNHHk1e##LUv{;PLt#Fp3wm8fm+Yw&_`m*mSmZJ!vXiu<&n$ zE`Wrt8(m&}&V{dC8O}SMC7nQLqUABoJI}kK!1r5DB>|8t1kCxO46r$7Bxn+>e(L8u z1$h_CnZc#0sd4tH7P(w$XTv#THHB_4$nHzB>cc1^m#EmjPv8V(Qch3nZ&>f5@BbLC zhB$xd=z~(;(f&ohgcukNw;859Q_p&r&}?I4I@)yW394yoNQ>pa4an>o3Bkm+#8R*&C%rj}w13z&%>`2d8xKF0*m&jrXtX73PQ=S99zq zAy=9RuU`k{te$lu)>oyCM=~3799Qj2lvhQ<3cryI|C`k70{azdKX)imzVhfzsniWM zJNR0jaV1jNoQxAL9lqQCyz}{vUH%{HSGqRiyqXt#WYn@j+42=pz6>=jg0J})dG)XM zQ$rv92T#JwB@{hQy*1=o)GleZ6fSNUD(`xw(&{zavt7ysP3L8%Nj#5DJZD*1XMbud zgtjx%4!8q}MkR5+;eyji{4NxKv~a7#5!wp9vD-YOW0LE)rk)CPz14aZSV}L$btd3# z_^!-Vrufu<2IV;@2l<%U+1n2P#jQw)6a;sukX@4zL1;@0X z%o{R#x1}%e$M(+iwc(Q2HrZ&+u>GhX@T4GE zx_FhYBW$IRJa*bY!x{~Amk7fd*(wj4Pk8@lFj}9l@%E9lmw~M85?+HqdasJ<3{5Z) zYm<*|25#CJz8dYO8?K)D*zVsi@Dwokhx2}zA+QX5&&A9TOa>JZchMZ#Ib%GKi<z#NDfW1LgQlk2~KtDm$AOp&FU ztb=iAepklT$T>J#V=Ghk*8Rgs2yqyto4o$JnIF#}4;)=2Y!K>LK2hK;!1}fCf&w%* zkjxn_d5nuoOl+gaGrkNlS6hmKxQ)ztAEIA75-3&;`GcAj)&zsu< zSwqj&roxEs9D~fxz&ijizvB?+IE#kik=gkhjXFQ?6v;x!O`Q>WY2q1u8+ksoXKq%9 zZ1s5BdaB1_FmoQ`81E51FBxVRAJZX@V5)-49-;6BC*ZwJXA5M~d8r_iK#e|FO`7-!7Ez@m6 z!qsV?9guV5=1}G={Mvf=QJoM+0qM}8LprOM@+t#pE#cyp+?+CaNz9M^yt$NddUBOU zDkc5+ZOR*ivA=k6iV$A`aw0TPMlM8si2lvvmBA9G7tIX3>zdmD%Hp{iS2G#D)Xs$X z>WFsS9@$?uE8_>~Y&hFpl`b-|z15?1`ETi1MxtAX%I_0641OjsEiqWiGFP`jc|UJq z3EXE04Iv0cBHArbCwpGM`Bxbs)W}HmqsuFyiOVitl7#Y3oo5r}I0hX{V`3f=3H=qyFb}2_!4Ns!= z7^*~zo1`IwYtn{jfSLM5S!K?}zoJG;;J#Z(rgzB{l2!-jUGeuv@E-yf(aoyfyLvd3 z6{l0h`z<1{OR(a{{G)aJA9keOG3>K0{Uh)UA`5AUR8Iy6MOZ2^7ila-#0p@*4xig3 zrv3HtDw!`BwX|;s?0P;LtK>D&{8W?sIw0kjxQUCGZ~EF0>ni^9i=5Iqh;xV=Y3$yJ z5u9p=rTuDX=c7r}6i`D;8>&|rT96CXBh+POLk8r2Mp|L%uq@1?p{Q(Vr<}d=*_ai`(Y+tpQ`9 z+rZsZd6vmLQC(w%KNS`2CiMiII??{8W_cZ4THgrcNRaXDC zPkwd8zt56moSuSwrShqY8(4vh*LvJ*coLsFqLmPA=uWn&Fdy6TJJJjNrdx#r1M?ZV z*6bQT(wAuMfVRolIuS*4^s^RVfHR6Nk|^ErD`86Vteo6AcdFpujnL#07U-#U%@p6p zS}qSBaSj?Ece*p28@j~SV%^xKJ1db>f4t{$AtzAy=p7MhuYuzg-GUEoVAz+W{YuiM zsbdKCXvAPw+nQlwa!9&~SS|&pKv6O1@chws`FY$j|I4(1vW$h8VdGh`AycYX4qYHr zwuMS&n4;Q_C1Qv`;W8HcIZ1WGjoPG0pC4W7kGHO|=O8p$Am8ial(!`W*%oF4qd9dz z$g#5o?bSSpi23Q^^=KQAio^s4#KtiGC+?!ZsqIH0dZqZqiO#aa_x{~{-o2HC$g&+9 zaxMM*cScL54Vfps2(-+zO$@BGuw%<8)}u^~ppB}W`*+65dOcXyy@_C1v!C=W#x?&) z!eu$tw+Y(^fa^Gh_P?YLUSoeFHa>duM%RVgM)hv|Le005HFJ|OsP zjtF^Q7_W-!-n*?1HEEmgC}=BQ6q`lCm@suo9ANlr{T^De zc~0hLdbwHs#3v_ex_eaet7D0G6vv3tv=y+RJd878 zm~!=lLH1v?GG!TaN12}wibqsJpmEYkTx0cmrQYt0^tnb}VTMP^wS>ih$wg;pPv%i( zB|Y-|`*icdtIqN4XRH^hEY*t%oPRa@eRJ=WnwAjdTz@p%aMXcalQH#>0&ie3M-*$q zx7oLwK3F9Z$T1REa>BR8Xtli7C9FWhezh0bV^TOs|g4h^q?oiTlWCy2aCUCJKd4lyii_FPZb zK~i1Ix{S~xLkRSK1m+D!E-!)F=vK3Zmn5UMA>h*ci(G#>by}}OfU>s{YjQ|$sA2(F zeTk80MHY#E|0@9a2p=(-38ZQ%YQKzO7&Io2pDW&K`u$4h#6WWd%xDy>0%*H}uI{ms zbt0hWL6xmD%X!6Zp?l)uHppudd0KS996qNwQ4pie+l)!T*?Y=?A9q_Gx zY29X1$nFrD-8`GuqY%+Cx_6}aZ$VZhI_oM<@2(T zKk0_h(KUu~qW(JjQiB-=MMpmFK?p{evvEB1C#o__(n%YV&EADgcMPs2F@LxE29dz} za!>;gxVY^s3sZDFk#wD}TsRjYd5}oxc%z&J(+5U%1hoT_~%qF+5hp!N+HO zM~m0<(#hr00#bW;uvyJNfueC4-|)Rql4#`m2_NIFf@i>nJaW6!R6`n3E!b74!_4 zJ59EKLZElcJg>{zy+FriANLSak}Dve7RH>d`}tCcYxilb6RLLrZ)wX4ip%Q|t`AVj z0K?dBtk{jV<@#DPEOt9y!%6tSzNLKfeHZh`UTl0P1^Q#{XIsLfF(0Pluhap!0DSMW z^YD_{iqHe+7F^qr{40njh_k>UAd>ur@BaJ-RcV1oS+M4*mS;udFzPHLdt%xH{k2w@ z5T$mHBeZ&OLuOruNV7>qL@gp28vuq~bpQJ4OXW|EQ+G7lzZQi|abAl$!z|RjpR9RV zT>A#KN@Lop<C#ev#setZ54P=rhc|V zBYIWY$K!*C&jq=JI6X@2Uqy_WP=YJ>&p97{KX9L0XHTaJ+u@G2-*&G(f+7RzTo)(; zP={^z95XlIef395*ThSJJO1wmg_^zgt#m#|Bfj4vaQd$#*kkH zLv-+Y;bWGdhG4-zKB%9>!}PpXxO;r&4~Xn}jwc8O9?yD9-|_B;{P&6Rvn{Y=fgr+7 zV=yFXZ!EgCQqWBBwQvCDN%vay@?O1eFb6AVfb|7A9U-eyDC7-$U2fQh%n%jJ+{i! zDU^qmzSC~Zb;$Z7i8`eNKA=6hkOR{a34!NIS}&OcX23;WBPvFyGzaf8Rr&E2hOaf- z7ZQS^a{0TE&#KHjBY#z~LIn)ro05SnAnJRxud@+&v1`#Co)__Zp@MM9U-9QhEg+R~ z3DI52{9%*MaJK^fPT@Cf;ZKIQmh)x9+O_Gx>QJ|Y`Wjx%ul@P;$U!`1OhIH~+i7e*RPse)RWbkWySTdzugXux7XPNz80JjKa#88l^!)6f01Xi? zR`bQR^8t~-1<^QoBNZGS3Y@ENs;WT+9l5Rfcb|)Zph7|@Qi2o%jdGMxx5_G3Pb6$r z2`7vgfs2>e*aTXC<%>!C7z+dg-YtzBB|;+#7C)Q=&*v<-6?aR!`qC#E%n{KU*a_wI zR+J;^=UDCIW(;>DTy>^)s91fNscldZI{Djj8FvcxlE5|(?aOz$roS8GnxT+5&q&nk zz;yu9VqWeGW;7aZZq00cg_<1)ACpby_`jQq?x`Q9{oC~a1!0_}sm@0bmD52vLRvd# zY}c0l3iP=D{H!M?v}InSBd!SL9*Dbt#e9i9+!8nD zAhWIYLmWdqdPG;u+CAuULnn10*EXR_gP^&7i8KMf9&B-K45;$&RPE=PM)zycc?4i3 z5Z=7l zchVV)ML3vwDGV%JN_>Tj5qROJd$TqB z$HnA0LTZzU1Gvd#);@6Q3**VIvQqb9<21fcNUyT#+cAQGCxXRUCABkvzUxuT$Dll9 zWWmXN=d$Wg&I0RWR52Z}1~|9-ixMUW$HAreY2EpxRHJdrJ`B7OfJe)E%aY{c*6_@4 zSN5P-4_|5;5+a4UxBSxX$G>iQg$XHDmU=2MMJ=8AA%Ggkw?+LXTB2hoXl6;@e;O(%36fM5ULYljD%`T`DozJJ7DZ7vj+G~$ve?mk|Ar+v zb~R>NsobjYJyym~{M&g>d1R7;r<&i+j(XnlefSejMzwfn*Of;^>4qtg5Htodr4?0KULO!==(1UmO`vt>xzWMRv~&Yo`>Yx3MUZ$AZHdA z2d7l`9-=NDcc1`=klxsYzp5c##j#w!nkCNb{qnla$!KJ$?JIJ>TyXDVjX`$>XnY~N zU`wbq9h)#+X=}x?uFiznA=Wh#2dUM3T(@})mBk&MV>X7d84LomCB zh9v$O93P~xlC$@TK!P6gy=8z7&<)yl}r2KOX zcofg(#>9_2_Y>P8??`nyRpB1I0xO4w`1IV2DRc%GOr_B#bHgujD)xiP}g(L3xpIZO)arjB`cMJ&f$xC@WBFE|h^ z$>yET_pajHNdi+d?juVBf|N$T=DpONb&4Q9tR=G$b|5>AVtxo$hK|?_%oX4&y5&dw z#)XJ)Y%NJn7P=lNKwRdprUwD>X=%%PO&n3)kk_S!I||)WYL$kRT}6RivG)0NhvS2U zpEjBmyJoRcsf&4WSvyNV)|e%Hc+Vdgui$#rXH7-ulH{X-^J_|qoZp>uy}l+-!si9_ z3A~*8b?gR$N>ZfIRT2gzIliVBf<*Kc!u;^y&}NrlxUM9VU*xg0MsMRHNe!!J+^wR9l@TUU)Rw zU-ahL9j>Yp9&H5`o%P;fED~IZ4|&HivDg%}a7tfT)JILwLHX&60~gfXm-1}R5;uEs zAR^39=!!?<)+5>*`+IKVHqGy{;F)Y?#5*M`^DEq~{@a zD7D%(lh>-La$EIc+FIRjWubg17`WFebtxR+Bv&jVVZ~M#SXId_RFhdleZNVhSQNpp z`&%QNcX2PGt$xiTV$3faVd7jUeleRTYi<$~la6b3t9yRuDzYA{sk$^5ZMeOG7FHe; zG;uA-04<(9$$JY?UIHdi_~)kaSP;g+q&MoL)c0D(>14&5s-N&d=cs-Zt8$o2JEL+* zedPLhzqKVK`Z15Bw=$sWH8o#rFW8akQszHf`^fpd1zi~4>Gh_%T+F-- z9mk$5Au<^|pWdcKu=QXCEhBC}^$%oHkQ&ZL8@u2Z5_$l4W2Qa#3ca^`lrOq?`qU&- zecOzWlZRXKJdW{Zczot)3>C1|j9~AGRWDO^$e-MwL-f?o~*hG(nPoAL4U`p)SaOmWU6|anDvZxB@@#N$amU3S3?n2A3%oA%$samYu*djtR}=#CfOw$V zX_=40;Jb{o=`tinZ^9yhma`y%wEncK!mkj9=_&@)R4AR2<}Qz-s_6DO{d2x*d~Fs| z`x44`Y@Z6Rd0ci3tuU6_g9*}Ap5#$a7~N!fz~uT(OszElRtERvWO9n!FN2a+|Jra8 z!jJcG-kW!7V+^o*JX!7Dp(C%?yZ-DFLUQ(T((un0E_ak0r8dU0ow&~~22 za!vG%ZI`V@hYh^AB0XKOYD}lL7=|Jb>>q>lJ1D}CdUkArgWpdY&pUt4{5OU{+9mW5 zz=UjzVZhr|MXLpGx90yaGR9gibQp6#m;_m@1yJV5ju%E^1zp&rL~oOooqu0Y7aMcG zg4B@QdbXEA#+`3GgBwt{)1K7E4J3ZwMg;J=4(}GfJDF8&-TkI zy0Y@`AMSVW{gp&28W_1wNn9NGkY7LgqtC4}C07a?O{3hwH+KxaCUGh~P!-Zb*|Ju+ zGaOz|y}O5%-Ik5A&s4(Yozo*o#w9b)Mk!O-gGeoG+vz?{!75GcD777W3i&Qq)cd?h zbMhPpUNL@Z_s{N(vYhDvLpT}C%iEa9OexzP8^AMsl;=hBNy}ns8JJ z$w7jq){YnRBf5~pb=13Se!z$ig-?fa^|r(AE+k~AEhBBxHa?Pm&VIiE0EUP^#p}^XYOD!2N+J>=)8jMt^3RQeD;qX20_B(q)YMxxNt={~{fbe1p zib);#0(@RfY`JuLl6r``n~8Nraw-Kdm?E=)qT8->sjL0aa0Tn6?)u($O?N242`%@o zPkn*htd4}5;P|Ue)r)iG1H6(Ky8xk7^ceXHsn_Q6H9Td4>DwnHniJ1ItO41pqb6*$ zQg4!QIxE~3@~DRZXs`fM5R>AJOt}(GVZ{^GV|&$nDp;U+AIf33`hsVPPD_@fks;YS zlmkjoTM7UOVd*UAcRLIU9w~@=BU>Z!WIE;o1U;9oyURUhXH?U4LBvJ?t{XT>!3^Hm z>3$58K8fyX9&9IZVS;8p-|_sFr8s=(`fHVec?}J5N}X30J4Tc?LB?cBH`;T}kPzgl zgvC-*{zt#%p_!H=h%s5FAzQnNHER*(h5{hui zb`H7F(M{=Z7zJsWjUm_^0M_M<7!Vu2nzUTZHt~}a-KPX#IAMx2MFNA^RhgkTx>b9 zAX$3q1plVY;CD5ViTFqU$u6GBNz^pPbS$G?ppQUI?wlom{8;EVxKEQ=wrUc><*Br5 zTOZ$h=>41_{F&CZ#WcnTPCaVDP+p+dR?~y9hdN>Z{P^sY#IWvXG?>$)I*+?94i0|@ zBI@1yaf}P3(t{5?TCs|GL+sL94r;L_%Vd*sf3Smo?sjT^5W!o2|H5+aPbK5D$aMbl zn#S=MC@UOjOF}q()Nju2UZ)z+F47a@I=dW>+{c@VDvZGrct6fY*s`Q_%TIL!jl ziXQR!{9fn&-63(wNi*5KZ<}3wimowxaVs}aluxcRG zRjqmQmmL|?RqE8&7*gZ!fT{nAI#F9qSaj*Wmqsd|CyOiJF5C!135-WY5d2~gupqrJ zZ&vdBg-Jn9Nwmk59p{D`#!xTVS^Ky(JR(RoH0v_d;BEL#{~uf59gp??zt8QK(Xb0i z_DqG+q}xm)dyiC<5t$jO+_Dmd5Gk42s}NCXqlGd;k`kh*P-J|sH`V!^^ZWhrIiK^$ z>GrY7j(H-cp!U2}`+E_a=!v_`)(`|! zX{n)`T8{|l5`vsBxG6s-o`(G=^rB<(hD=>HNK!O6Kj(Bg5h;B4(QZSI=fM7?wonvg z4hg{xY2liQPW>#3y5ABe0X6zKa}{s%_{6%Zwax&8HuCR1bG(QGA_T)y-Ve)mzhr~D zDpNe|%hB-f6CkfU@=`;O?7ijRvegefYk;_~VNl9azNzrCxiSdwMgzvQr%>c|uFKrD zotc|h5ZqmNb8c~tM?1m{+R&?0`({tx__%E2d##O&Hav!sNRCU&$jzrSFF)-{R!5#6 zUBuEv^-?OxDwW%U|F;`u9leU{KH}slgL^OFMGxDHttX~^pUF4Y&{hX6QU)Muefl)G zx>q$RsJY9s=Q{^EUOBt)N8h%UJ)X3T7t(7~*%Sc!?$8JDi;RL+v{;YckbBa)>Kgks zlGZOJ+gcj+k3ilI2@(=mX6_BHU5U-b2~5(ZD;jGU`q-{Hu}QzVG?`~OX0+p-CtO~> zv3Kk=W-g0QGFwX+wauRj;vbk81TzQBvboU_5yXKB4V%V`w}fOrU}z#`h{q5e`NqlG z?g3ZCfiDEF`rabkVXXOLC%Ex9>v7&K`kNfgpZOAo1HFUkts!R0*n;Y>_X}R51m)!6 zfx_`@wbxb%e98NXA4v_0KQO2qXG zq1p9M?8G$v#g^OC6^31j#pE&hM!`L)OAd>zUmx((O^5U4rBf)y&+^EJZl)G12^XzY zrw!3JUfON%_gNx^`sUBOgaOVxUiY#Ew>wnx%Agp5xCYKK*8KWX-B8B==9j+92LPMP zrHmwQGIabfRct4mKmeGVWTXTg2R#jVUJ2Y?V3q+DPS%~T1Pc`500w<)&wlcdj$plU z-h=c?-0sLP*iD(J2*$er3K>D=IBcNmX~_9n(dWyhZzY3=GM3Z(f`J>IYxipp#Cl$GA22OEK< zi14)%LuRy$P2G$AU&tW`nhnqZ=tD4%0Egb%dw6@-# z0qX%HYksjI|Dm5Kx?vN51U$xh)}GlXP)rxaH*ga@!NLVo<8eI~e1hCDPH5rROp?p`&J-W=zN$Y3cx>|POuhhu?(M`S zF&X;(d6@v~0}@o#QeLq23IplV4>Q?Mxd!d9>A0V_uMu!dFcXh*?{$`w=r}HprX}ej ziF#Ku&7`5OUv3D*1ZaWDnU7?LLq75x5p$m=I4r^>C3!bG%}=m7*PDp1yd`uWb7g!67To1aV<>w&)HA}*G5e`)A`;5Iy z?nm6WbY^(*`CxvEFIIA>C51m#bWANv2|ha5{BWy6$BzbDMshJFUF~!?Oi9sSIQvs2 zrxYRXc=k|#eK9cSyPZdl{Lp?FJa>N2z}u6?&#gH~U0h7kaGaaaH<3_x*EXUQqqEdO zGjd}jacCa2`GZ9aFae9W_2Lpg@fc4Cq`oV)=$+O;RYfdjPZUqt>W7K%_=D@dUwhq8 z2<{07GfYCN1W+id6qc0=02BdxVDJZ4cru3Siwrm2dVPVgXGy!0t6mTftj^5Tbdb~d zbV+xIsobIG0aIg+4>z92=m3TM-*Sa0Ttc`xdUGM zvL}9nqk-s(W}`e10XDjHyn5sM`=wbp95kfv72G?Ze188JSx_sd_Sa9Vc|MiETKWx% zH}FDXGsAlEXBXDJMHvSdDz*!4Jywjtk%3YJMd;!C6hXkr+5;a|wfbbeJc|lW{@C=7JD4mzOmgr9x!ODr165s7eze*v!pmZ_YJxTbCpx__X z`O-syNPY8R-hs?1uD5p#?xhY&hFgijTX1?U0_}!n{@7Q3^*f}lFBu0=DF>(1AJ-5# zOOA_lKw|U1`6l0V-LqHvOswjQ5up3UQ+$Qa7LE42gavUQx+U;Ui#OW7eHwgxRM!3G zV`8*2((NM3X)qIt$rTpBwe_hR9W|3*F9u3bU<4CO&RTbH9IU@+gU0J?PGMqV;opug z=eln1g(rWHGp%?u<&-SkA#$ahAj4y>tnLq;&sr+x6t*Mw-`laBT-gC5;BR^2AWFsQ z3~VF0OQcS%2G^+uG@s|W5%dV@&N%RVDR1B80+?w684ASO#8sSG4y^@A)tBGrS<9XV zP?SA|o;?pl{Ox;&Nv(6j`*wh< zi%Jo(wG+Ece)0d7zVy5x@d}zO3!3|A&jckU98Bul|8U1w~Tt-tl+y14uQ#1+v5jV*_M<)=xXE)oZIs zT832!MDPNUI+!YrGXsVy7kl{qYBLDB0cw=Nq3%L|qSUx( z>wG?l7A)n{OF{T*>EL`Tjm%)&$93z`kC4s(+RrA?vj>gIHlB|8qcg2-Z$xJL(}vscx*6}<6X zyL`a#&|hbD<_~r}|Bz@%YmrVW?Fc)NdAV5JV=M1Sol62>*}^$5Eal7O!sT72Km==~ zk_r(lQD67N5lwL^)zq5G?PF9*CDeI)Y;R{MUfId9*eaA6l=;dNGyX0u>5O-wMvW7# zpEQCJ!F`34Ca8U4+M8GR_AQ^Gn}^FsT_J@S8($kT?remS5?@Vqx1GO$TU&PJCSAcB2@u;p6e}* zAP?M}xXi__N40umWF(*FAkSs*VVTjT7(W2sX9Fq_DisF{3Zgk220o9nzWr{U@ANecUZf}p za?Y0aD}E-NA!bd6&riI<4i2rdID z8;bnEm;!ZlBIDP46IMo1+7|XXlr_e3b|}!Nx`Cc%MX(cvq`s`4J6qqHtzbSG9jzG2 zFsGlmVbSJACH4^@D@QCH_{6-#L4UFrQt++A^;o3G=uSKH^mUn|Avy!1eCg%%BK#-j z!_Md$Ao$l=Fl|LZ4_KGFT^u0Ig)gduY6PemIMA7RBA$zpIMveD2i}&2EMYLV z59Ni{rp(eg*|QvpFSqs!c=&CZr&KUNyz^?m%_@bj3mQ)1mr+P!?#`GpGI5QL&mRb| zEP%hBfa3qz46(}x`nj>U$NHYLGRjf`Pv*K(^H$`%MZa+ZCefE@Ulk2gP$X1(^hJDc zbtvE5FA&lCZumbI$2|tAfcVfI;rh0ukuE4L)Wbh*2^X} zXKk3cDuvVMi=^7eBt-okkX*P50rJwa#&DB;^;^~pn0kp*ku!ZzD{cV3Iz+TdQ^8Ce zg!+B78}az^+3&mxp5Pr{&y%r>F!Joe)sO(*3*7bgQakPq(`PXXo47 zwd`uwMCvu;q&1i8i7;~0D6^@n>FcpEEn?M+5zvax6p{)Llt_1DV%|?V9ZMFq@p#Tt zukU-uXXtzWiyHas*RNM|_#aG}&B!fMGWPy7n6eLVyQfx+sNB6P!k<)WNUY&fq`8@q zlY5VS-YB1i>h2ZtaNgAwt@Q-!Lb@tqB|$@qE z+B$gCnkTV2fpMC9j9ZtoZ4dD_we2$P_;m%e+1E=x*a#d-h1z-NBRU>-qa+Ut{b4gA zBz~3ck2{slz(~PW1k#WNXlRLltruVw-$p%aSC+}N@J9mNWW?WAq&b}8yzkq-RA#^> z?Jl?IqF+W5+z-8)E9}{hUY-Sv`+I{`kBp%Wo-b%kfb~3AZECkyFE&tH!9laLAJ8xT zu?LM~>p1GrIv~Ja1iS;fp7f0p9@7`H7%rzZ-Sv!v^oYRX5sY3I0-f04+^W5+6s0DN z>I{VoZnz=|Vr&>K*mw!xN5P8w*QHl)l;i4x!=@6sl79Yc{O>msW4$n(upxNiE0Ryu zW?wns^zDMv`EP)q3SCC-azEU81?O1*XB@yNzxetT#cG3@0SOFQ51dn6t{f9Xcz3S5 z{qvr79@zWeq%_ZqMVX9(*YAx^{n^8z06GH#2*G=WviUJy4HnI?SucYU+q~0 z>|?h^&qeUO;E2*BPdOjJiP1v-@iBjnv1Qv4XF)YSSF?P(G4t@5%;Qr4K~r!(hsoEL zx4+9&MR68CWBD=wTUjx7+3efZ8>_0f*+y)46f& z=zZ)I)+f+ih9<~scG|D=!F9^P1G-|b{{5_389Av&wA!0iNL(IZm_G#j69SJ0Nw3VS z|D0Rifv6Y8A7UU(Y*m|$Ja&KSraD>`!Pv5@&efCa8yIs7crElyjt&rO2w?3kXsA*B zhU>lN{d$`3uMb@bIc&8pI{j^db+t)ncR9C(`t;i(z+)YtDYiIK;SZ3%>#1$b#C@D4BvJ{ht#+D z3RH&|EZ+4=-XOT}SKJbnm~?r66#)ar(aDH7@sN~12O#(|CFh1y=<$0J3+H=}SR;DG z1LE_$OffA8Rc}GV0{BONcM;}^lOSxAo!SOy4>GQe4G!--fRlBsFB;bi(T!mVwu25Y z1{CiShoSydixcseDfdt;EX}%15q6qslNh}DaVWcEA1B-|yD-DZ+qoTlMaU>H9UaH2 zw)ImE8V#?jflncL*MFwucd~3Bt;HN^F_+YbJhxPvOnB=Kc<$TI1l_Vy--Xx2XJA}keN(pX>hlgCu+B8L`c%P+*&l0O&^Uk&n*cN#Qji{p_Qp{60W$K&ApB=SG`vgY@Y|d z;mh6v9*b>X&tWMeeIvH|J~vJx$eWvEP1Nn>8x5`|sFfEC^SVAXZfCNuPP55>x~K8+ zDk(pgZO>sVa1z)5<#qczm@b7~$drp{cgDX20Z1lthZ(pyA%I5*O=D zb#grSS(|46Demb z(QCfaI>DcJp+D@N^yC*cpK_j)aA5&5e?IvkR`Qu3G1&E6Cak;*$}pGQ?&Eo?itamB zhZ#5jI3sd_o_=OisZd{E&&IV0UFLD*be!2wFXgWXt&*^#7hS=##UpcadQal|cPQg7 z>=L%ikZ1i9(Eq#$BJqI}$0S42F5Q#m65(3)ZT`<$IZ1%eUp)%&mN`UPX|h>Dn7+tR zrcFAgpw+D#%eRsHSJ3 zmyEbBEnBp=@;*;Oj^%GC6oElhFuxO(dgyT=V0q($P^NEgLlU31{Hij<>^ z#Z_K+y?_8+9?Oh)ufC%uYkWfzuEkpvoP=j=u=*ly%fXY%j@%zkj9!_W-l^LUeEB4t z6lRV%i*oqKY*^*;;zDA8vfYmB-&{j*-ki7CEaz(`Di z;x$dvld3f%?voW$ozc28*Pa)}#}Tj1?Rx1`v4~FB@Gem~`+O-7(A3aQ zZtV+51Yd-XWaZsOnmL-jYR&N9I_pkbPB4 z*pR`+WFOs;7jU}GwR-%nIoO@J7j=AV?`*i?C1*?hTSBmoibPwiwTq>MU{e8AvzjNJTG5haM34%AcM z;qL1HMPj5e?G$Oi`M6b>(C5VG_Mx&HCjv%p{UCM?yEu3z9j4DrXlw3X|JBaBSs1K7?xdcZ*1Qya%+c&s=joRL0nX=k7u8vNyGu&C($D& zcdMm0g`>GMn~^>qw9%J*WV3%L?p@ERz?#P&{IjmJ@VF}fQ<8;Kx*&Gr6J}=W|t0=_0NdGj8u#lWTlLwB|S%H`ewI z2{QSLZ?0-c4~r?BtzqDttutPe=Ap&em|4cQ56a?CR%gCl)5uBH5)C@Ka?ie#!S|eL zgk<8L?6ECiY;ck;Ud&^w?OCN)w`LrkKdJ4hFJS3dDQvt}aVjLp# zWu@a5=LV5|_v93|O`+73>MwDBrB@@VyOX)NaJ%%a+nPk39F^%m@!3E?cHf3*#ceF6 zQNvrs4#ss)z)Mu}lYQleeO7;7&fn!M>u4C|(%04>pRbST?yUR$;>PZzwII^f!$PPFfC{N8eT5<*##V zcvC~QfNFTJ63-EuhsnHPF@38j5E~Pc3@PV%E?*Xx?Z2!*pPAXONMc(^jbdC<2Ih;) zjM(Gx^1M)|!)IG383{<)(dgZm*K`WU5G!`zG0F zLZfs1u1VtT|HNPc8tQ;>V6MPaillrH-Xhjr95JWO$IKOof|<1E?8%y6V3qUe3LSViGE6<;pB3cBk@uK?`d zHd6C4ETuuJ2F~(uCw+Ot43(>$>FDsz+slI1sGd1=jlpzZy(UMC!?_yzwVQ%Kya)Ez zd{E)2ORxE!<}-Gy1ho0YUvyvE`x33oGnMBX@JQRD(4cMJ+wbPso@Xp=FIyU#@0NSF zav@6oPA-%+9HZZoweI$;~Fa+dE3X9GcUb9?G^$-@nh4Qgv~o&tUFDT*1pJ6A<=>Pj_er_#Wgo zq>c!FxS3Y)Dpucw?p7J-%NKO(L3;o2GBu9fC{$jmq|` z^&1=k$@xnkRj<`ZIs&}@&fZ3QTzB=bp?dXcWUUAWPk5})K#ik6)2*xmKWqb@7<$Vx-% zHH{}n?)x6xthVXZpLgMJTs0*nGFv(75rLP68qMD5UzVRMka}|Y@4VH;<)3;+=<`%W9-It1Qb}#LsB(&XLeyEVH&i@% zB6g+lBe%~H<|twQ8Yok~Uj8J&^Zw$1 z;?;fl#LFM8-_1o5yjJ1u@S2&k6lB72#BK#>ugBpoKggG}Y;d7ZB%ZjMG_5v$)0AD( z3gR9Dl*h}&EyHy{yj}3P5Y6Mc;{E8_wAE35vs*K?C45GsG&8p`XHwQS&a2a>;xcSGH0lah51M_IwjKk6C?xR_Ni1XTLG zJ#K1#q2)6sw0lp^c(3GY@JvO%lY0IF4f|0*8!xKg75ZVVKqP76JHO3w?p459Hj>cP znPa2N^HK%(kBk3Saj{x7hROz~1zG0*gjN_@AoiEA@+c>@I+l5jVf`|(>*qRK7FZ0D zX#5ol%9^X@u8vuk!$)4QJSHwH3)7e7f1S zs}d7W%g)a`W`7=_e>aGYY9G#UNn>s-DpS1DPgW zz%kxeSjBESV)I$!MUs5Bvt_(tQQ+rMER}}1;mlentE3jI;dLAv>syp&bfd$uXpp;p zZuZBWiqp*B)Ctm`NP!i-zj2(#&!j^sO*gOae@kr33#HZB+c~Mj!Lu7q>R&pn`T#jv zZ`&nWaBVZO1N>+RCdcNoA(_$i_l8^Ff|^kvrc$ z?jv{;{Ix>YWs(xsRe=u6n|B^vC%W}$`2HN)zvu6F@DyrDG`3USnVNo^_O_ny zcikM#Rx)%CY*Np5{f78OkH2l{R; zFUy@qiRm_!4U(cwh@$jfzdo)T6%%rz%Exv<-_Ql)RA8URzeAUjF9sM9(rQ?r@f*gZbWL zt2sS(7BQvxv{+)o{N^IOLmsKknI4A|a>R;tU!(-igzVqPBmYA2N7wsFG8dcXc#)3L z^8}erG${_T>xT^P#*M}1M1NaRzl^ZydtxWVvPhRBZVkt(tzOY>bzojuA2&H{Db6{3 z$f{cbKnithU5`j-{JBef%U<#PyPBg)2uC~h)KWd7+eWl?Z_G#}OTAp^yLPhaRdgdj z?#hD9;9^k5E6-H91{dk;)ZPiqz=@#H%TB}S`@yrMuX`r} zh(D1uc+x9J=P+e4U|K;lm%NjjSrIlsAMLKmmP6KKlHxpDf8$*P({+=CAYh=oICvg? z`23C>f9dL}B?qVU1~T5j|1WzmREag*iv$#PqhSgEo){(Jv9P~gp|TL`k49A%$14|w z<`y~9+zeUxiLYo0DnG;Go?kZfIbOo4QQx<6O1~{svb#X5Pbs3QpUqcYPVy5RV0;~S zSs{A6z8!z#yA2NmhJ-h*5}njDVD5WCXb`@;th}Ag5m_xJ8oGr6W~#rz-rx1UK(qw) z74ySB;%-`S4J?j%3=)avI78le~6okW52-;O)1*y>pzhSwVf82XPF!E@ zZb;cT|JwfZIr_V72?Ge0)z8n1v)ItDIkBj~W z6OyvPICR%&P4hhk{4-bP&C|OCC4z5xE2(D^S4%)A3g{?cnPkK5sk08h&Eo2sQ2K&wScwrdN_7 z62f!s?_Va$T}mL6trX*Wy_*Z)Z3mNtTS-irbNC4bwIwKv){xK*5et5rUY{5hc4ofY zYT{^0__uhLFr+V3@c%p|Cbsb11B=ENJ|BQiiF9Zpb5KLlb3xXlq+dTq?syHxzN*86 zuVSuIf<)ZoRgV7sAsMOvycEHqG&b~U@19D`e^Ae!RM04{Iw5C%`B90AJUu*cCbCoa zIH%6p+&^#d?}Hf5j@KgngR2(~JM>f678F;F_7k6Gj-2_Y z0Q&t6@O!TYHM$+-oPUgN;(AyZb^iW$fFcTKtEySsaI-#enAP}}CXr>23eD}4qhnO# zr=5ucH(|+ab9jw-*rPwUHuw@gDq8puW#L4KM}vj|IB_NSQBgJpHk}^4LEu-WfQSo~ z7N$OIO`gh=6gEQ6lCW;CtN(o?R*AeZy7?={uo%pSrq^>~nkvK-BhDbTU4&xszCGZ} zQ(pW@pfIDu8#ffp2KEpopf>dg-XjsShJ;e-77Hrd#XijCOdXU=k6up<7)>NDr4fhf|LaSlTFDK%cH^T$2%jhWpPz~Q}b-IV_F$T22|G-$qB=8tl zYV$iX=a2giIWMa38>=hM|B8Q3psXe__{RCX^SPpPJ=cStmxmgNE4!pZdGZ+GF|k@6 zUHEcX^TPo)+aZ*HmaXyjDGa^WVO2>lkDQ$^C}8=hb}+HS3n=;VDY}VlOH8V70{+Ej zhx0I`Zns$pE_&&KomshX?YR2cDS)WD%2V(obI?seWH-Ng3HYh{6 z3Kut*`#C8d$6%wftG*jj4mORA+{D5A8xC2+?Mb=i40_);^_wla+cp0}3#=gzYrMz6 zM>0;w%*(d%16$*_8I<)cCMVUQczD&pbofYwM3x#oMqxLdKHxd$C|1vF5LF(B`Z%qtKP6=2EnL@;c7qM!%J7|u`Mkt+G^`I9oeyeCuH2jPnfB} zdq<g5x?@i`8(sPLeR8LOT^J+|W2PiA&M6c2xA6nbp$D#~I?5rEd8?i}Baw03k%k!cfL@IGwABQ)*Y5b@0 zC7xtB8z~nc<=S&6E+4SFr_C{culUp{U+p-1x^p&wV6k&BR8EPJ4-@^v+-)2IPzeNR zO10`?b{#cu2B|8SW{KCKx~d#Zg(Mc*OZmHZ^;Rcsf zySmd2mYBQ1$E_M}KP^OY3w(QGIei$%z{~7&O?uR|-_a_2xQxqTW~j=uuG{y06qGxe zHLCwlwL@!4np^y{_IEGFxQ=S^HEcq_S+WX_r%>WD7b``kND$VvE0e$u6O+1x*xFU) znOrgswt>eJnG_vJj1E6z!96v-I0SZPgIC$U`-_;Q1D+9q4t?&6&{vzIYe56ZRiii1 zJ~xYbtyW4XNI)-$TCUI{%d2(k&}Q#Xaf1=X;U5IE7Rt-t4;c4FmjqD)q0WKv-FhzH zdufa2586EnWqAAWE<1-_fwavicxB>E-g7tW@nw=TRw4W^^Ox=jP0SW z->_;11&(X{M}vc*Xh;Fc_}h#a3{ptoB5klJ2M&<-_)~7hnh*rm3%hFD7h#0ri3Ff4 z+cN#@?c9WguIPVjIE)jgD`0e&ex*B+IW}UM-+Z8EWTt|bfSm{@5e$Kk55l7gqg-}TRx zQVz36U#4)h@fa!}zD=``NjaEmFq@R)(!35|IwcS<9@W>Lj!1ubXV(5k1Pq(S_4!*b zp%jhn@{eyTL_+&y0w5cFqN@WF5!UaGW3|Kyfx8p9RFR=_-(jEEW!yOG zRIX!DOERC~SZL+Z-8@9vu$-RB^X>Q;k!Oq7-}IHWdOQ1$7FeIf9kS+jM0&JJ?ivq}tFVvV-;;{PTc z(%rrj%LLgRUS5r2+2yLfm9{Ez40P$Iy}-(vR|>HN0;&cQw%hzH-F|Vs{zPV>8AauP z*OawMWP{{N+F3Ogw~ypT=K0f|emd~lfP?t8q!{*9(k(6>8DCaex_kKbaqPo@f zQQmD26bnG>hq+P464Fa|(bPs&yeEb_ARNVK*@6uY)mG@Vx|O|w&27{P2Hi~a=-B_H zv%tWWwCOa}wC@)95%;uvz|Y9RGW)nj*D)}}RnlJEFJQedPN6gf+XQ@7e`Dm)QT^rS zZufpgdZOwAB`VM6Gy~_wM}~nHa|8vF8^Nx8dVLlh{`dp@b`A5{4}zR#9QsE7T!>Ms z15dX&*)WNrd-><(W>i~F-2iTZ0&k~^oequ5LQ-vDl*s=KP;LuWe)BM4t!?plWM~e1 z&&Z2|UG9%p5tME47SFBTQDpbZ-QE471>{N}G*YL@biFM0DSBBGi94_c^k^?I>bPlm ztHXJ71BCGQdzwAl%r9)k#h*hN5FOOq>v2MPA`p3$=f2HC5$58JIs7q@hwZct_z$e^ z7B^993L@FicNq#cDW8(j!wye-pB&2@UzTp_VjV6WSUvx|<_{53xCTm7QGz8tF~SxU zS<#tLpZHXwYr&5gg{i2@;IpXD>~Q28L5*qOxX&mw?Ko>=`kjk|9vwx52l8z}Eh8V~!oQ>PcZTgTH-=d2A z#_OKH=>quDFxg88SXR@W)$B-)OQ*zK&5RdXHkgsO^qbO#I65uV+dE*>4wr_^6eNmeT(Qw22GAmMoUpZEyS$n$7)tZvM}S>CvDuq^@LLJAY1U-N|LSH7NX;U4@@H zVQKsNjZG`OAGkLfUX3=PBJ}1y>`ivPxvTog_|KXzYjs}>lpS48n-qjQcF2oY{-8Fv zwKGk+YZ-|Z&XDZSupN!p|FrnHcmOPdi{fpbK>jxeeHQwf594d&|8vI#Y#GfAX{(rh zMHeDS8o5lh3gJD%q1Zv;*!y#}VmrMD%7o2j{OBBxSKx?QT)72JPW%yp*h8njoaSh> zm?OlLy*i3G%@ZR})GR;NpWpe-gQRB@ffrj;>Ii)bxN}j>u;XUn_ocjLfoiwO5<`M2 z0D_i0hL9x&f3vIGQeT*|8+~yrBa!U8H9>`VC0VNA^FR3hw4kjg*Yvs>0fvRxi-^M+ za_~Vo8$26=UKxh3r04QOads(J%0d~Ra~K<7V|McE%Q@*liuH+b2R2~J@k2R)ZOz-E zW_VG4qWIR}ZpyfaWz&UI%cO-(PtDEFg}Gu=d^d9?*N3vqj|~@7OVmHT3LZ5(AeQP%c!{KVAYaE&`o@do& znuw&eQ1+9P13m6s-r}jz|LQLP=|59fNfFR#Rwr^%9&T}juYbMwrF%+_cxyzGYf-<( z$9JqLf9rOCDKTD87(D+bnYW>R6mTq|)P)_uSd%UkEnKd3VS#fuIG<^Y(dte@mW8w5 z4=D~I4*4Jzg9?Ip|8>tXyy(vPcjYh86F`cP&R-I<^?;Py?0pqgBD|FDp|I`Qihbee zYN>jYxV&lnwgan}zlTv0866H4O*6&av3URZ;X_I9l9BP_b1gOBpKpUA>MMwfeJHS; zrHjw}vJvGdT%(`<00S7#y8)O<&@EcxfN}(L2fK;U!<(V@-A>~?CeZzpx#oJ9<`|?)fqy)5Zf^RrWG!L!9iasr;&0--QD8mgQ z1&%zDYLjL&B9cTEg}4{W(m*f4;u6oqf-P)eVVx6z!|VP_(>?I=raW7m22x7*`K`hs1IU zL7b?Vfw=x+eg8id6md$aJ#66sPhJCifl_02jqJeh^9wpn#aG@DS{^1iBYZM8IOF=` z!D^52V?9&`uw$?4RBG9#*3jdmjdcWT;dup;k^1uKy^?8v;!Ym_`fvqZ`<+9k9mzW| zF$cx<9l*erFDIA=j@25jshM|aMk`1E*f@%C+wq*1#l+OGSZ52M5KtD+=O;RwA0=7C zSf#lpwZ~mI~*fq0cE~W9EEB$?=g=X;>Z%NnN)udATg%Pu3|=<+yY%46(w#vT1LA$7TS z&tKwbSZ}(Bh&Fhb(d;C-;rh+lJ+`0JCYeyB&H~5C%Dn%fyyf;Uq%hH9mvBo-l@6dZ zIu&%6?bV}WRIi=||3W15G+#h`K4lBb*fX(yrd7-~MzFo4)y-i71{rt-UFuIJX4$`Q zV_i~z0+AbAa-d*w-)E6X{k$^;+NJ>4?Z*#wW-?-+=v5P z);~H0yDa|*eFDo9!$4uv>Mws$JlfsJ*ng-uBvr};jX8a!ALS^?eDU^QI#-mAqdJcI zL4gLNx3_n@J$qr(!G1zh`?x5E@SE8g#S534n`$eCkS>0z+TxKxz_Wq+)BWw&FtcxV zoP{|U#xNHqIC$Fco<&Q5ZDWZ!B19!7iYrM^{U^%=aA-bnjvV2yS{Qtn?xMIWMEcnR zO@st#A~;p19v30kP3QB*`$F>)-v*IfF-S{5hCBvX0S>wup%@aiee6PrmlpGlol@q; zuvuiiU0pO-;>n4>uqA2k#mU(WmSPkxlH#c&j|hg_YXJfTe!R-3y^P_e*O1j-cR+3r zje0^ukhK2^KNJB`a@mf9VD$ddi-OkM0X*-p{eBM7{P*ZhbE2Mt!?0#R!^LXXMiCXFS8C8$}hy^=Z{gCEtYZ+hc( zK3U|#-;lp>>1(LK6#(!U)eFmVnTajHB^cFo3~Ys4^Z`LgSi{;BkUnr<<=DI6mTO~A zGS2N$N0qvZ2*q+nrRNBNqe~SLU=Z_H<_Lm_U#d#%nABpwjW$!>-ux$ADD%9kOI2&P z$j6_G`&KzHYACve&p|pmIG$pI9RT9G{O3Q_^0JUz%gYbw2L{qHNz^}v@xiX~ceOiD zY5lqC&B1}gMwuw~tSGWVYjl4myA(8*dD)3!PeW4Igi2l}N3~ zrj$5;upt&;cDC;X>KvO-{T8(7nAKDm|&Mlmw*%p!Eu$tNg+;VIEirWdVS|4rc9HQ3TJ|{>lf}DZYkp;+F!>+ zT8OF26G`syK>}2xWO5K|-O;v2`Pt%hz}9B`l0I}0oFn%V8C=0LM#1CP5PVHzn-d6n zNZ0U@;6y#f$6x(hlEEd5h5OQA|lXHFMWepe=l1+P$ zT76Ebc)iR{p&g_h81^XsvV!Zp$0PLB|IYRgc!_KL0;&jDw0a0 zM9A4>S>Pk`6WCaa93C-Yj3CP*Asd)6F(AnV6T{s$CnozK(A@PMG~ZqKAqkO6Qr?>H zAo<4&p#2$libyUsP?Zr4(vKq=97>>E@5%(@RSbq^&B#;Vlt>KH^J0=v|V6R5Clm64VyDH&X`AR^ZN0|M|#@; z-gx`ZzJpm8U=>%ySBU!DJv%c1 z=OPOBW~Y9mK<6zn-$nb#c*HQ9d-SjJZ#rkPWX;aYshK^_XrJog1%68ID@4a{^O z@UL2ag@nb&RSo?-Gy#O+MhWWyy?;lr9R}#?x zCLV3GFuKr#pVa|Dy=9bQxfp}oRWCl)7uPrJTu$5fT~EY6If)`$ZKrRz=YV?R z>4MX#E)q-25bT6Id z8^%wq_>%I|2lcnvuZ=Jf@hJi{DV7)AwG3ZH=!|!I?7xm04e71`7_Zz$3jvawQKF{& zE59Cl5QIklPN{D$5>o|PmM(CWJj6!hPG9CNw5d-@#cfBbSGfKhBOk(G4I9#>m+T&P zv%M;-PI0^ypJNhJIa~nHdIG(ZwCw4^G#aWcD^c%tEk1mY?%_IvcA*zk&N(f~a>b!s zDlEt)UWQH>z*>~*wTAZHF7ZEkMr}303;dy-#D)~EN`_m`p&ACSJrY@V@IgTJvy0L7 z=HONC^!JaA%1yGY=m{2Byo^~%>b>$O^?{qY6PQ9I1PHrJbv|Ip374P9-01p-_TtUS zxtWSk5?N(e4;b-s+?D*_j-1c6oIB)ad;pM2L_E-eEl7kZUl)CkIHOfejx&0XILv$^ zYecn}Wc0TvqjHPe>d;qSdi*oFb`0%HxL|4@m&{deh9DGIzAf9Z@sQAdEhiNoKNg>6 zKz4-nBEj! z9;az>f%B1LOafh&(lc(pRErXGT+DgJ1R$xxJh|h!*YJ77Nf0_4 zc<)P6qPo~;>bKQqyAy}3#_k+K31ICkp-Leas4DL8^;*vS&*2LSC zCg3(R<-KJo_Xrh%@8(*w&Uf#7d&@}sYZ%HRF0ZxTis?8rlSIq)CH<&3j|~;xzene1G?MRNS@!S#fR2By-e!r2WBmf6A8!zh%Fqp*&= zj@^y^qt<-KvjEEwHx+EwT=;LOC1jf&`}A}LhRBSxGA`UBw4#EWp~T8I(JBQjVE$e) z)ps-co{6|Lu@W-i*R(kvf}96L;&lqfmqk|L%!I*Fb%kO|W!jdKMi?AmIWDOvDaBUzR#eTZ4`M%@Sx| z5Xq)!?On$>Q^nfJ%lNl%#+Vy7yy{V<-lZRChUz9MHjH;o0%rxIC1{hlK{}a3G`p$w zDgQmRLCKrl_k*IZHS<=`as_Rdwd9tPrv?X0R!3}q1eFy)9iF#zlDDtio`!?&h-GAT zjC$Y;Q#-|V^Zf==Rt z72?z69*{xqklp_v9OHgH`fX!6o8G*VoCT>btS}SAa<<03u3%=w#ZdOW{+!yuC$pO5 z$DT;}%ps;7%@KJk-%D)DB<5Wz+LDO^x3xd{%+&U+D~aO?+L=0Pl>>18Gniq;> zt0R}mUH^>Db>yk_YITsfGV?esBIFM9m)wk889pW+K8rK1%0#deAS`^eeH8L$cz!)I zY(gd33X+c*BPY#W!$4kfR=rP*RVy5>1VjcY1p7bNuWZRR)Q2)Z5D^`H`WEJ057 z{%e;wKrzx%F}o5EKL_Rr-}A)Voo_^*Wi9c>DN42S8+$GLdf8L++kqdhf7N;_7$0z( z@0)-g-F&hqq8!+3J=2GR0n<|+ur_{t0O;s`B0~Zo|BZ~gEnMWu=i5d$bkpHo+3$Xr zBSzkNY(so)&#fQbz_gR|LnC^!)w3`*=(X#K2=Sm{s%y+S5|6BF#l&P~=rHi)131F^ z%a^(YP4Mk;z9=WCowEJ)_k?p7F*Y!}L3dz>USIgKYPnW_RyZ!z_w2poE*&%Cc`QD<=r^H}f{p{v<3V=lb3Bhzj1G!~6TzeH zC9v!*c8|7a$uY=^_{txBIWYCzGXE31jQTJh#zTm>M$A82%X3o(Raq28lBtmtvbVda z>K5?IN4g7XhA{gxyj#B7ezWPCajd9Sr#`V7decBmdEUl4UlQ6xdva}Gd1_5@>m+3; zb4uZRwxHZDp<083v2G!|%~p~)JDjn_bE^35jb&P_a=>jsY?)mC-qnG){H2F9{@|dI5($O!9gv|CsQ=wDulv>d*M$!5J!)`N%Fmj8VD4l}IyTedh( zvy8ul<$Xtc@a?CBPix0Amc%8ASiR$FO`)NuHLMj%p0EYmCPiv|ph@+p{R@956TCb;`+Jsi2^VYFv2%Ls$h4&SoZw;IF8xqC#q2&KDc+?mQCpBk(zM-@YM9 zHBlBE@#*aX56FE*47{y`gikO(yS_rg!x@TG-bv_*R(k^3-vg zoRiFXeZ8iQZkJ-HM3mUFosB}7f@u`DI8_*`H8Z4m;yXkP>m zg%41-imlZ1t>=(Ud5(t-1C({wLHYWT@2(l(3RIUmpRQOawQdIuNtzJw0*;dpOmctM zB*P`7N?E6+c%@BZh)qW1;K_+wk5b?VxoR`?SrE9~$vbm!&)e)q0A=Je*sMx6#xvh(tTs2zl|jr%W%9&UhQ zgMj~ZkE{uJsMqUua>s^+p%7Nc_vYtwC{rkO;IL;sD&dLY%j5&Q1sRn%50;*R2ma=3 zR4;lLRu(h|ulO1gO-`3315crf@YQh3EZx_zAQsgEa5m=((cu#pF|=y(+NAT6{2}8l z{@(cVrsoBs-sqB3KQ`Q6X<@eRQFl|`*1Et$xJiF&BLZ!cA&r06PrLT~WFf8Ii0R2; z-EU#%sA9srhLbuWXSziU*_sBeuL9oKTHY{h>dVYfxb^hi)Efcq{kd@uqb$2lha8`H{HxSqzF)Xj3w4|&51YyT( ze}}+{Rn(?UvCFrqT&|^Go$3qY;uGDzN8-HB$B?_5VmZ8&=pa+9xhI0L$7RLIjGIq6 zS`Gmyo7^?BLwW*N(>~z6q>HLTAyUg?6ObaDf94SRk*NJ&JZXSnQWo*HqG=MOsfct5J61uG;i(*BX)mSzSOVBy^M)?egGBl-dp$(bG58ck z{gz@Dev9sE#uT#iB87#dN68Ai-cGuCUgC8>Wv}$c(Mwd?O!n77_<@a0ru3}_a9e8< zmKEKt1|nhE(g7cP^Ci(R{A)UQlxi&+Y{t0AY{yZ)o%#`hi4ZKl?sg({jSJh&Va!F* z+$m|30`3wDY2J$XfIUS^B-b`<>Ps|ckWYNrKk?;_+Prept5E?Y#LRf>8z?XBTmw){ zcXRm?dZj#j|4=|G*GF#7FWvdCT%Ouz05n{h7pIOcBbqsV$@aqOL+C-uw$&(`GM^}e z$7N_3>A9!P4dcO@1X= zKt;bA#ZRxFrRQ)M!Gg=!e!uMQVuHE8mTnF&nc z?}=hPNZ{=93qf$E>q}-*M4GR=U7MGX_w-Yb|G86Ej#cA(T9}}cnt$+AIFh3N^K<6t~&E^O{3E@pFD}R zwK9v$vrQ=aER1?ri@=mqT+%LamrdrpMd8F7Oo>!voTbg;nHF<-JnTn`ANra~k;%Pg z!J%{{H4(D69VduNhxeMkfv@(5@r2l89sm6J@Mwk__FsCXp|RIJIrzLuDhXSo>+e>~ zlc8KgTrd+T+vZYrEtlB}SBb?lXqsipGv`(a#jMlj(zoI*so`QSx!}OHMLVms+WdT6 zbwwv2ETqA-@-*63I2-T6XapUKJz&@s*Hz+HRiG>ETzdPW`!FW0mfv{FEXxyd^!!hH zigguX~*EWi#pvg`5H zhv<8%FYLKDSOIT^!8@H6F&->$W6wvwZriqly-A8HnDhEzql)9HaJzX*;h|rjO7Kqh z9A|aP@n7s7>TqN%kxSPh@XOIpsOz?;CTxk79R}kdF5`A>1BtB&U32yB-h_-Bs8S%zA8t9G`43$XstzD#YiCK0+8Z6AfVg{@_6|FO z4lN}BbYN3h<{s*PSWnkQmm&iK0q>WHN_9*X$5hOW*}9mQ-ihlPg1sQOxMs#x zb>d}xa||tEd2sp_9zEFjbS`1J-CcAd{-a^arvBb69Zs_Cx)Zk_R0A0`-^IMvsoMae zNWULh5yBQGU`z0Y=^NA}I_jM9xnRb69vuV+oI+Nny7Pi}1{0dt{2qWffWb;K_o(cO zdo3WVQ`>8o!1oGF2~&x)?9Lw&bdsaRD*UgQME#3i{-@hb)2FTShh31X5Nl=rlOn=7 zqLwh#n_YTST5C_~6njf{wR-^5^F)5FxD&oIJ1SDj zb~ZLX>FeCKH}OG(@Q{L!TaMjVXlmS!KMQHM8Fo)|jSIL$Gg znX<*#Z!WmWSf@K?h_ zT@jr%f#7a4WhAwkP&dX18J;e>Wo#*U{o{s%{Cvsxi~DU^Czad;uW)WVAKLzLkLHz& zLQg|ioNwXYDC5kaAjJpJ zUk!YT@XTE~@3eGxnu{Lm^^%?|kw5(TF0otA(JL58tMqC6qD?b2N}xJe6gX+Tn8YcW zsdpU=cg*+oENkGHoS)s(miOQqj{M=nY(=k+N1oj(PEAcIc2R4&U3Gpxh=Qee!{8lw zP_YIJvHU}ZylZpoIh++@zfjT857|T{#c!W)`)%LDcbhJmdF@zi81mIcsD>+2HjxadGUtGa8lk|h+CSC3j4N~_6}85e@aXq=U%irtgH5dF-**!EqP|l zdcoY^WqDQp3C(BhUS~FJFbH#5+EML$czjuMZQd^wW?vT4XC6sVEw!`*CQHv4Dn<+{ z1o5j4n`R@K-1*SH1y#U?7@=<1*4;8m3IQzg(@|z+IMQijgM!CX1sl(?=?^-|h-kEB zl-R;8GhH&5VvtxL3tu_3jP0mhT!Q8Hmsi<##2xQitMWcPAxC(wTw~ScW&CkuNtY?m z>}onu zP=^4P^or4ZCc&TBxM9fphAlTZ9>Y@a{R<_7^ge%C9dc@0Z>vLdc@|Z>REp6_kiyfM z^-MTII~Hfc#%RW{i$L>gpN|E&eRVx}-N+@Lb#S%hN)gEh%8Z1v?jll*m}8K$?Z!3l zr9Q8)enX#%6+YOTA))ww?ThcvMJmPjPG_c>aH|DHt^WQ?0ULZlq-+iYiA^$;$ z`C4@;3_d0dXh!3PHZ=!6+uuo95MM|;CrD6NzSXuB?KE5qq%*5~T*p zfz!74Kke=^r7GCmWg3s$s`__c8$!zjhk0YN_JZBty)pxGM9`*Iu*zJy2latVP_n^( zJw}U@V&P=xg|_wt#c>~%Fg@K+B!6&k800GyRUMVc#lg_ zVwHs(v#Bqsp6f=Usm|_pI&6g&5#v8=nWcPcJ1)l-w%J51EIYY{He_>)VOY2Hl+=Jr z&Hf{hw`89iEj8wfa?K5qU>C~2x3oaxe3gh(`2Gah6}IN9S4Qv>1u_!wmLrF+yf0iT ztp@Fmv}M^xFTz>>S=RrS-ui5G)i=j8;#cejXF_)co}@iQTpXmfqJTx|xeIegm0mg$;`+134@-GF*0i8y?eE=8d&p${ zPd$yJ-MFQXOVXK2IY&;oJ&Nt)kM}OW{N625voJ4|SR{;r89+0*L>gVz@GGRb64VYv zi49~=hp~h|LW1nDkkOYi$%${pQhkxMzYVPXt~@}CiRoT7A20JD`J434FB9h>@!7?f z+Z4C|Len9~hd#Sujbp8?reBAtL(k7_FTP9qH=9ZEaKN6XpM`oV+}4~6646W%2M}<~ zTS_Az3mp~hGo(5Egs7_ZWz?*T7TudLqFXTAK^ zF4o3?Dl&H053@*B(o;6EPjOl0)+F1lt@oo*xeU-hgj%PS#QilaAkz?GPJbs)#|l z14uv{Pz5a$m|P0veggaE5IU+b4PfN(=Npqqp@KdoL5d2>V@M?iWxZbRhxixelY3L2 zal%4TG?h-w=~%`3#*b}`eOtiJxQ2AC#fx?&oVEz{Agg%bv17CXw%u>)74Nt;-TmHR z+iG*gJImefJy1 z@&T9Iac|E4k{;?R%b4nA-5_B3nd$UVfcrA)KT*qJ_;sFPcg2F}CCWo+qI)FIx4iON zTZvQsws*5*e-)RM(%IGQ&vskni1vntx_g-ghnx{gZK3IoJ4hF=4)IO zNNh2VIQaUwG~fFt8Eo(d^QMmqD!gU1e(BluHfrUL7N${A8SFU5qN+dLy$)@MPJe6O zjAg$mfqWNQ>>Eix{Hcb(<&PT-1hdEx>6K9$)YLVbqcsyGx_wK_G8YJ{G#+&Hkt)Kn zh=oT4B$X<~Jmrp@8E=Kke?$5_!^4iD0{l>wWJ&$k_|WwwMv&p$G3}7t`D&%}{P4fuhue^fTF3|*r9|Fb zZM6-9LS};C*hMzL7MM@ew%(P8XT-d0q7B80@>@n`@z?S<=gI#zKns~6I|n5>-5_q+ zvU`)K@<0{*by<&4Y|t#&Zr`~hxzagyiUp&MqK|%3j&TOZi@$;&@!U5VK?ndR(6+Z$ zdshy;IU#zZo#+i`GjNC#+wG3m24JQwfT} z_ECF_KUF9>mIf*(TttK$INuX06`BI8%E8}vFuMuGKP-v4FDHh>1u1KAp!YbRrmpWW6|U0jpAzr#4{ zI6nGV$TfDt0?a_CcMP1RGbn2A*VhAG^jT*n=3=_)Kk$&&h=~C!F_EIRvNbZ_7g;qrRxuR!w(a>nmfQ8CLhcBxFq;jAsIp`<=nrC z@c|NIIBO$MW@~28(XZfz-}lITbQl9WAPmCm^~cJ2c54ULvmVUw z{o{{SO8cP0S`ZvMdNGhbMgu$POSgv%!Yj%i_OE1lple)h}ghar&!cAp}BP1o1I5HI6Yu(x< zjtU3B9)>uK*#F?EdiB*YK?~Kzp6@#B^ZER>_y7JGG)2~Dpc_LBo}zxZdSSgW;c719 z9ijbkx!o0o#Y@`>r$SmkPplE0BNxQVeW{^#Ww@0}m^%R~*O(kUKY6p`jBB*>p?x|x z{)!7_r5pUi5?1HTV+~KC;cvSLj$8-H!Z@cC zR$)3O)AhiB495zu2u)@fF}XQ-Vn|iV^&K$m-bWhf)|DeCbzjD^W%8j zI`N|pmNL~Bo$fVrWR|QSCj#Zp#WfGzF-8Os8h@jqs=cZ>gJJYR{I)Q6NteHG@Q-Yj z@_<}%Ph@oCcv?=7#O?=o9)~;baduKLNhr;Ph9&($;h&LO_^}ZGwrcmTO}%c|-=l=4 z$mLhZ752I>x41L`A-n^ZnDyimVj`|9Lui2IQ_sZb%9mJ&Z@O^-wuk|_x}7`R38K-S z^`Iw){hHd_TU`R0Dr_sVkv1kpsoO$NVxpu4CWBOUs-XNFy?>QHcuO1_zIhz<8Sd6* zqq>P(@|??WFLEGDYLCd#{ycVS0=ZxNJ4UM40NGY72*le*q_K{FL~O8Js||9QprOg4 z`Lno&|2nI+(6pC%S1V7yz69j=$(HwBGsMCt)=Nd>B}*L*hAx&Fl5n5OY;)TE;hbR_es zgp?(7DUuSYO@b7KXh{?gHTz_qD>qlw$s+`qR8=y@F_*#pg`)GR$2`bkt$z%*o%dpr z+fqR~J*jZdzAkVrwvl<2`~~ST?(L7!%vt*<;r_`o$nocBAb_4{xdGu@%L?J?&ch)3!D$ELierKErUj32>B;Z_K-LIkuhnl&Z$v~bG^#&jd zot}LP$BW>ZBQBcb`347F;2}zSD`am%III!fHiG+gWa&eO!jR*Dhjv<2%i$)x=ku4% z1FSp7cm8kaaplq9o}(WJhRNUuH`3Qlli6X38qAeUmN~$C&Zo$AO7%o6{mm1 z?&NbcKJWS+30yv zz4WF)Z-@&)2a~@226BT*+oT--6=yfklR6k@(FWR|XqMIAvXQbLQ9txvQu;qU+?zBi z&eGSn4+P=gT;a9nWs%YZvK`zhh<&n*Of0+Iw;SsOaLYL|nW&0SE{r@V9hvKm+ zp0>HHNk%uIv5~t^=i8io0&FIbDlVW{b7uB_!K)*VGxV0V10fSYbh=6iA$37KAg1SV zTNcK87aY~5&E=4;Bs1L(|MSyC;j2XLZ(RIOB}0`USGYbZy`lr7E{_-2Y8H>6CTzZI z10LuPA(@~1^eY`Hv*C3_yYHBwS2E;%7;vMqlehH3JW(WIFpEdhu(7DY#Mb{M_!8YE z?PC^;Ke#x0mt_5sm}1i;xiWDN^0nHV+wU}$B>s8OVy8l0?*Pr?5X@ol#BHiQQlz}0 z7z8Fc|4#P%NBJ!`SEldbVfk;l{y*GwT6^rRM?OsB_bZ(pFjLyg`8g&*I} zQsf$+rIztbdh!)+TnQwtRdLV4Yv!hQ4W}E3eSA<;Lx0JJiI>oSr4r0-PSW5p2QG_T zsumU>67>J~n6>Z4Nq^FAQE8I+121g_xzfJau2!wK!`xR1hG;89f+q?Gh&usMK3iFg zrbiKIT5>*d07}Bm3d}_R3A0IH`O6KXW1XEC{y70u$^cmyYx!{9P!;XO{tSExi=j}N z428#Gv=&~X)8Z7-NQ2!)vNU%ULqf_fjQ?=E_NBf85IqyE=`k&SYQ0$4KHLM31xF*L z2-e{H3|Y&($aLmrA{2S^!DH*`g^!!n))_8Om}8R=2N1O~wyM;@i7m=&m2)FyVRWcg zvW94%45|5SD%eVop4G%y@VHoL_u)C5S$Bh245F_KI09x1g!cI~i~%1J&Wduiajw@( z;{0wT$$}M#q@RKM?N0L|$TjAyVz_mwUhtp7rs-A@(?=RVJ;?7*UijzO|NUQSWE8gn zu2VbQWTHZOgr6cjEk#cGwntmR#2(8yQevT@+u^jZFjE|Yg=$mwhoYI`I#MGYI0)Z9 zgkE@xFzNo}LRH`opWNH6Qei*<>=xIAsqNgY*5#^uW08x~;SU$@eS6RLAd|@Ks%f;e z4`hpdV6t#p^Npo#U~tgPSLgogYXX*Rs2#Z_DttqiT2Q%P?CNH?my52Wv$WeVmRTrfFB7tj zL?^w~P|d)AHLrA2`ugLA)NXw@R>E0Mt@-UOUu_)*hx)%BNr)HP zrnC*AxaLUfdB6tKZ_A{urpnA3M+#*l)o90bh*wiPMDXhN_S z;~@G4{F*}-9zUA z)8E`k@8^9Az#K99$uAW5u$|tCD1TDWYxJ;j@c`)A-B6M{b^CQQ?$HB+O$j$Oa&>S3%AV{HnjK#YT{b+O zp)M%P^}xtQ7u-(j(!H()OLv0jSKk4 zny6HPSV(VW7B9Hfd)up@%ZSr+`nssoQ*elh=HYrWyWWfX;F%H94qwRR-5|hI{dipW zn8xI`druq2tT&e{cTz^juTqN=I+K|E$tIf=B6e=u}?0{Moq|Ln$GHC?mab zLpKYmt=zSH-sfYh47x$9>*FcS4_4VqKfE?u4KyT%Bw3!gO=Mo*64Qe9AbF!!8ZH&; zm}MJmu$b8gOSH{*nWhs|q{v5Wj1aT6r_H$NRBkhp_foB)G%s|MG6Z9uU3llBJgP%I zh@9yd^FGo{wkXIBoc1+7t0a3gFLY#bGM7R^@A;>#kYxPG0QGa;!Xt3Z=UF5dK>!gy zF*BD_INH7_++y+FSq3IOk_tt~a}=bTQWSAb)iKs9ar+M*&p86WWB{iH`hY zDK$Ck(hthk;hwpn%f2IyRtbLHBEDBMSHSQXn?p>P;*iX}&#;!+wP`FCfz-^LdzHP@wjPcTkjHUP^Vh}eE1XXLyo~4|ND0K zSA7k3oa+edeNODnB9EvFwL2%?R|I&)$liKe|jLeX-)7nZW<6d=pC# z2^ztx$L{907_>jR8uBA<=CP?}(}4MX8Leh}%9oC0@a%OQarbN~SeBG4;TLTo!!tmx z>~r^T?me{U z{-m*$Z;rlwy*75?q`Le^uOs`7_K`qp_E6`lWHc}3x7{zWxMu$DjWhCP*Tm%SgXE@e z!abyA#a?Db)>}6s)Z>0KO(Nl10Ei`}2gat$k+|A`DA<$6lT`DK&OEfgx=?8+y5@e< zKHI{Is}_UW@4Iu21iH2X?^zE|=kJL9haNvM}_{3q& zXJr|#L91&o-T%) zs+G3PLv6Q~ zf`CDYxS(RYLuw`C#sf;Nt3>UA&(jx7-M zdRl&CU#h+G*0@iJ(?Zwo;}|9`u6d}dj*7)tv%OrL~>wWIutRs1A?L^%9m11tZlT4eRSDl zRtRt}*2DCTffOg2xlF1eY$&Rbs<=p9b)kc1;Pm>5(VctdunRjev=MtG*K}qzBA;Iy z?{R;%VU@odH_L2OL@VbtJ1g{&4W;od&T!)na6uxrth_|`c-nLJ@}6f~^)amgj0T3_ zV>k#t^!NE8^z^D~!6o6IFV-38fO>n_kaAq%ci96ji|4zz5k)SU*7|n-M%9a;XPJxw zTk9EL<&yFa4Dr3qSpkbwIWO+1EV#(qs67JqlH6eI6AAgyBn+6&9G8-CWo_D9b<9>j zRpleJ7JkYl?E9qLBU-osVPEqbPAcX^!B)v4S05+D?96I@GLYA0yO~xZ_(7K@lS2-kQX0a)Djc<`#I>8rcggc8o1D;1b;GJZXSzOX&cx}xLi?G%di(tqFJKgSZofl? z^YP}+As|0n6hsDoZNDDi_w33(lj{J5-~sX4OMpH!5Z z&4mq1`PDUX>E}^5}(R^cQ2e(39P^WYR z>Ltd&sfm3l2ZSOT`&abVroH9Uvo5Je`1H;z&o0bmD#JOhI?H{~Xy({*~ z^R(zz>C5EDYdFN?-}FyE5Hu#kZ_|^na(_1vNh@h!}$#+)#pdXF6CNlW_AMht&S-Ngl%c38bT^^>{)Suv2 zdb!`9BwM<`>x~H2lD>T2bavONeV($7-48Ex`O^*dI=afWdL4Uz-h;eJhzjnM`#7U> zih|TU_qX~Bl~UOTbJ8UJ{Ymb-lo1h{0)}!j70i(SDxBuI*KVN43vHW4^7;hGJ7qo% z0qOM{o4+s2Q2)oLSHl8BOYe29+`R0sysS^0>|0>ws##Uz^zdys7?Zo??CG4IySXHv zJ@lPzzv-Eh)LvRjJ{PyyTZYfx1>0+@H;D`#%w8|Z_gVkMQ0ofG6~NUAt=8T-(Orx&=6yq8(GvEbdxr9Wro%nkF{Zky?=UUyq4W7aV5sE$P7wDyq& zeZvBB1e5W1`7^>y@(EVTm*wC43NU2{OH_=Ant-uC$xp%hox0l}t;4~TkZjW68{-qr z7aNk!bxmemDJ#2ln8mTzvuuSgV^r4DK)1R_@V30J-XU`gFzX1*&dG zI;G^rV(nI?Mf<(jv%vTDq8-M}R;IJljHwtJN6mr7Tr2B&)fbUf>Vg#e)_obf#4+LZ zWy~^f>6_tq8<>K~N2XDG3ve@O)CJubY2LW;caRI2;b~p<2;zJBR(ka>{s(=aLV_m_ zY-5xE!YOMTiCIr-dWdvpI2mQd`hz2xuUX_}FMd~*kq{eK0`6oGK%iAnR6Q%%lMl2BARiQkYP|5m7 zZ_auqL}FLF?GwhT{2;_u@&%rg`tnnLUVRuJq}!kPLA>QFG|+M9w_Z~t zJ7}(Z)+t@I{d)R^Cbjaur-uKjUq?6@J#}PmzQY(bv-lKTx7xF#YV5!sKT;-$DGm%~ zuZy!3{XrR?Y11|?a)HQqFfMd)qvt2EDmo+1s!X3ObVUBzqu3UKI(Au?TCE;1uUag2 z?OyZ?#xCXlLm!V_`R;~kCmMhijPU;x`+1~5>GX;&FMM!bZHIJY`cxJ;c3!ys`W*4B)2%yk@PBzP>Rl6q0TU{41ylTsw7eEl! z2$qkHSzbTRGx)5_^m%kyMm+1= z`HS$qtO1ku?rMv7D~P@vZa0`WO_tf~6E0^ABrQFf$d0n><7YQpEzvt|V7`H*Zh~bO z5F>3id+`QNx_b`%gzb%=#Cfazu?{RuF55Wd$72*FhTkYc?mx8N^`X$cLt>Vz9UB;& zg3PXlV(A!sDx(yIWm3#wBIir9T){lLcI4)#Yx-w9TAMov-^6t%y|A(t)CGb*c1pzI z#@P?HhX{pB!+vt*t75yFtFO28t!?y5UF@KFAghvdCEoCgoR&Ek2HF+Eu^YQ*ojnbF zv6ci%Z?oVd^SfT?0=TSf;`!vQ_UABWr-h75)&W{W6Ryv*bj32;$^veKRgvG?s$t=# zp7>P@zROGXP716{-y}Iit>?T?D1y{J7kq0(066o??p1W9TPYt237w$HDtCVRx(|7X zVAjVhvRxV@qUqJFwnla%xyYVbQWfG_dWGy$t0C2Tk|Yc@E%FukuWY^aeurP|Nb#>QW_BWW53L4$?Hq@KXk6l}L)dx>TH^|cOrPA4yY}U- z;G{-ozP6mWA=)e@Ll%xh9x{=qLz2^h&{iG0QbgS!xk)Zf{cvY&JELtILaEPC{1Y=5HAn>mm_av2?7!ZNC1 z)jXJU2Vu3Ti)KuGM@-z7urHL6HJJ0eb|&qF)83SccmL6lz1(ILQO}pdPit?t#{~{E z)V=-zq~dX-EpWT?@T9Nw>=9zA<_`wG!vqg!K~X;EbNTZjo`y_Ehufk$>#CpA77KqX zFG?tg`L&?JxbcGMOASfh_IVe_A1E8vl6$^cdoz~|s@^s}4D@HMSn{t6HK0HnFO?(2 zw4W8^Wafp9Pn)=I|NgO8+KGlyScj$Txsm|OK@cxhhFy$^<>BbfKG=?J_Sl9Jz4pM~ zdwKeujpF?m|HqCL6len>UUt->(i~UEol{<#_;U1 zcY$?TIC3@T%;`|07NEblXp*4&M2|1eXBv9 zBCu`$CjQFU3dOeWmUJjRx$)mPfhYij?Bf`DAobP2ia(=18p`YC=vMSih_}2M*)CL^!POWV5AM1P! zwD5&WK>U`^In;WxIv=b4+bG~5Y@s*#0|Fd2`G>kDK0eM)1XM-?>aiD(6YtnNr2BS= zQI$D3a!1DI1Ji6cD4WgvyQu#?6(J5jSrqI@=jGm;5zEprSEzBie)_DEsR+A#f6l2h zsr?q24^}Ndi}luJ%S)(wK+MK_e3s2l3hhXuZ%bP3ZhbU~C=d%N%UF6S_}kbeOZwkT zPiu&4K&=R+K60Oh5=`v-x`@9VW+4-0gb zj0zy8_vg>iVd+%q%!2vNfxCCEgaXSEv5RB@Bas3A&8kkkOlpnXS-%lXT7wRmk69n) zbzH(8Z;3I@`bx@Uf;T>L1QV#h8R6-SaGdICt5?JC{Bw-w7O{lPC&NVa-~*}0nb`p8 zW3^-#C=)w|iM7k{?;(t8qAt!~y_y*8&(c%2kq8|yrj-dnQ~;zsyVjyM$BP$Uf6#HV zag!P3=e@sXc|~M?dTeIonl5HbWwO^i= zDY2spfbQGo#3FEzaF0hTC0hQZHyl#KqCi9i8&;6ZssT-dk+fu;7Wf=|lb<05=kyqB zN}mHdu&J|`))7$Q`&}vIB=V3-vOaz*wG0ym|c(3mv=*kQ`W#rm|ST! zg4g(dS&oBjc=?~->L99s3J+5stb^EgDB4B15xkvv-a%VP{RydXRKiR%j6ok_QNYyC zmc)9sNXI)?J}&E>(2Y^W8y-bdYhRg{tf&hzKQeFYU(?hXYAiA`5;Q0{r8v!i=kvp@ zG?==%Kq67bJHX?gj93Ccvf09RM3S^6T_eyy%(ViJCR4q8>-{>#uc;i8-zmq+#q*I8 z(l7%=Z$f0gp*__xaJn+~*|f)*)2o6}5&{9QF3Fi2lrfM)(`ZQYDqtdDRthquY;whJ zDDgAlnF0!B!UJmKt4s~Dm^N)jk$trVlxfVPQToA?L>L@dO7b}Xp8%S3|8e+BJ0DxU z5OG6=7;b)y*?6(;*TAsAo${@7$CiYXMWAKlRlgQik9IaCA?)tHf2SMNr`z&6Sn zFFRJ;+J|f{scTH>jfrx0Y?^7`bNGqZSH|6lqyt}#BPMeF7$}jFv2%f;uBNWwZ19iC zA7Wb0eHa|M|Bedc?FEdV$nZD-&mSkS-2%ZI0s( zyZFEVDwvyfRa2|M@lOty7r4!}XSjo;V+}Za1pCdsUpfAbH|k?}rv3oS1{MGsqr8et z|NSI<7m5T~n^;W-V$b$4-5nis<4PhJhM00+0ie>qs!N}}8fYd;5OtJTcxP~V!p)dD zx9))0TIpN=d^%3HBb5>ls1;T~Te=)u7cTwx|4V6rcUv)T%m%H+Y(V5;>7+hda#CDv2s(9$9#wdjti~_RC)9PDO?R(AY|{A^yE`&KaE&y6tu1ndeFhxl z`xzS5dtZ7fvLP&A2NP#S%iYH4O-oU{nDpt&LUW`tSEKkOSjr5bF|Ro^#ti zbe8mj6e!32{qxHiAYr;E7CsQTqbK$Ir8Lx&Au4);`3Y+3scm0orcL4{46f#Ld46Am z(gHofjKlujrVx8|ppk?4xJRXVdef@O%BT;6m}i^=Rm`)fwwX&rWAhNTHdpxvNXXBt z$g|~@_sIs79c2JR+#X9oX36OMKWl@gj?>W5Vr+gD^b(u|ITmhzQt;J7jZ4@_h@k2L z-wI0OlEbnvZBF3ciYTFe<`F847fO|>izqNI||RA(k@cQNVKP}>oIIV z9wo23)#0AsGSv4Xl&pGWvhuAl>Z)g~qi-LqgWd1<6*oMHcW5ULQ+O5ts}0H_(Q|QU z_U_DZ9~^jpYo>q0PSz`i1k3;gH>T0X$=cdc2x(o51lIfD(~ED=Rfwnu)Ii06xopjOWA=NlAIRWI4&hsZrGmK!;mOZTve;dR zzm+P=KCfT3bGdSqyM%ewPLKti%g^*Dvp*vx8Q}P@;fc&z^B5|u=D`bBJiOA*6#lsr z{~UO8BP!Bb)D8YB#d0-#RYf{@+^3c(H*=hM@EMaVaM3PTkC{y4=%7mN!CGj~+Zn3+ zvT?03Q*NE9`M?s5_)4wIKOCHuQ!jZMk{YO);=>n#50PDWaVh2Wg^h_m)bbBxE0J?wh+u_k*l`cKOgCk7;&M|qlePQr zN*;ZnT%fek=J!edbLSh92xdFb<}Oqc80>FKRWT_%<+)Av&zLeWDMV!wB(S}=QJ$xs zOM|%E?Bq>1nf<4>pFSk#egn%+28?6jzc|3dT6M~E0Et}V=ZDpY6e>X#(Q%9QJae8% zx((~d+Se{|%)umoUPKm;eu`r5&;#WTPWz(G47)ESi6sy#TOggX18uj<%2o9Dm!&zg z!Zogec!>V|h!}M%5U+e@0$Zjq#SoG(G z+!UiSg;ek*cf$9y+s{&w>5Y75;QGmyX-wSv)kj8N>C}302kvo|Zj~un5pj)`Gk-Re zXAm-N*S!luwWxt4d^vv~s@T+*Z^Y^Novk^^gjN9O8r0-+Lhj-;0LK%DpdT)v@AKX3 z9yrM#;aBkI-(QIc2@;TB`2_?lrR}(tC-`J{uGtI8323e2mW3m_aP*52W0m#O!g}?7 zO=;^e2!z1SbMQZZGhmONT7_C;U8$00r{!;`GXXC}^ZLHX1@xH@SeJ2PWgQ4D#1N9; zwmk^xnsxq~y)zO}R~|z%FT-LEGW3H=f~L9bE#5v+E_>NU&RubCY3hlp=*7+C2QZ7K7q?@qM{UbI(Ulf(7{;U zLcAL*k%2R*nyILD7<$;PCUay`IH9t;1OMZ zmOoj)koA&tlbCfFdJlj+PxfU0SAW`xXAZKX>TZ93AH4Q0?_{>8hMQAHH0W@y+ikvo z?AK5++P^F3LV|{d)|3f@h6?MEv|qIYgVi9ippcZ=5i~?zlqQUZWf!~zv7$cDg zhHkFsAoyK<^<<=fu~&X@^sQgR-6T5VK#CGCzQi$kEQfNEoyMmb6nIPT<=%vbOdLe8 zzzLsyzS1wq%GCcB?O|jYeUJST^^%se)Q)ApFJyxY2~?M)Z6U%@a(NE5qN1-pyD!CN zq-kjPo&bScSL`=%j{1`HSZ?Fh@~h@VV@Rd4DS7s67VYs}Ftc2lI<`@kmAr`YNJ-mw z;d4i>9Q=~4NUA`-1Bx%kJdL40G4AiN1^G#mSO+{H zjiqp3kQ;SAI?C~fH7*kVCf;MP=5fyHL*PZ4#8S1uP913V2K&Q1q7|>vsT*U#LcS`GZ9QMuR!W-sYra%*B?1Mp9qOERqIvsYminVy3SL7hcwVe{XS15J6d z1BBz6QgfNGZAn(zjpz%T&g}zt$15e4Nb@^RwG&CBg1;#Yh-Pm+we7|_r)B^X}@3v``>3&vUgi_H?2 zX=z?RcPe|f_xsEnnN=>){39Lwz?WzE+0a`EusT0XtNH%;9>B0*n3LhQW&rwZ*^h%@iTnri_s2iwws~BLu8=vf*XyVdD#!Tm*|B5N{Kn(CS~H;NPL! z-p#Il6`Xf$n(O8uJmzK0vkMZFp3JpfBkM@`@Gakt39AR7s@ZtcJ=hgSydXAyd|4li z0;WXQFeqPuG@D9ko4J!gp2Sh|w64dP1AIN_Cxjz|a`R%xC#nlS1ie^sa58e?^0QMP zobE*V!57zkSQCU$we14x0lxPPJlro>m8gLf(R&u1hU|k1&y!9zvb^@#$9*s0=<13m z1u$tGHTV9oVRo3bl0vnn3s5hS$$^m}4`myLGetfMtgwr%$|MvFdtCZ0x84OOzY@q`NAtBYCy2l z$La_HyUf2FWGMfl%%lI6?QM8|<(e9}$D7S>*Y{eGrD9G%F%9#{I}h$ykc2xB7#mV2 z+_Wh(;+e23SZp$kqbdppX}&CG$^jCa(zdEFEe(`$sJrIDp;5prMofE%d(#(2=HuK6 zzc97rZnTdm(G72+5$Yj1x>(Bk;{xW|wZu;zbv|1G6RtsMvXKb#H zK$|cW`wWpQ(Q@N1mP0&9NqS!*`KF{_&zHTHUcuD-lzN7_hEKQud&LLxkjNLw!PzhW z6P&$+8EfUW8!ofTc)dxTMPseCaimZJ@6z2Io-KmA6r;n!bVo`KTebEYoKpI8-H8{# z?7zD`=QyWiw9r}$(d4R?;;WFGZF2OvnLT&IJl)jrq}lAhrX-UwMevf%doYbuVq>~} zMPo~*O#KQjS1NHcMI;(l?GU*p8%d@Yh{l4IOf+`SuWqqPOklNfm0z|t;gG?@WHlz4 zM~2fqT|ed*9VeI#v+<6?dLrc7qN;VomcpgimEson-<)WY&Io^!@t?$s_?Hd$$)yhU zb=b$YeHH(~l=b(u8n{^dTT=F;Et%X>cA0Iu+!XbMUMYMsLe0R zkPn?eO1sB)`=p?CeHFH>Ws)1CG&aMh#ATUM5jJuEh{ZuJ4W9>!OrxIgnPbd<-<2w< zIVielXT$R+GFCDY5)!Dhu5P#}v}|rvi93`|YXra?1a9*7Blergz@-9@(g5bZ0M!-n zh+O@}3L%0X7ykh*DKQ`h(`9rqgi{-n^#6TV-rB?x7T}tO=hUi3h0!f_8JM1(`zF6% z)n#5*!T>}{+4^_aNps{yz3T)RHzC&>*fRk8N8n-RmKC!SB;|0hGw5HFJ$^785s8*4qdiin_9ryA3QmM zp*K{SAh{z25o!|A^6B?F$HFmLmPyfqp$29zLYuwKfUM32j5HeH{*~LW<`jMPVtm;H zR$eX*ex0dG>e%ZAi+T8O{J10Fa1BHP#VS*8|K?iz(XL!0|Bu78ndB6ue%v5Hn54rkTc6AW{suc@;Q zgbNPvx9!umCmQFM-6A6Z2?M@G>GQw?W6c6s)FXak?TE;aA1QxpgxMC>Tbp{&ggGkr z(>lT8O`j+x6z@&6l}^`_&wc+ALUSN!g+2rg`%u&fU{ z(#-+n?>fr)o%0XQuw49&)lTryVMYcfnW=R~yqsZpn?NdtZeP)p6AZAB#wWDE1Zjgh z0dq0_6aVu_7P0C+zU+NIUptf~?B*aUU|lxGZVsSYDt<$o&n>LvrJ_Q||CoD-xhR*r zzb00n%!VE^4h*gSg)XDjFig_#9O|R85?=%VcIZhf&IR%3eyjWpp!`ZA5YW z<>82a#tjXVt{nDdp$xU>3z!&1q^TmIc=*BK(Lu-7exMu9eOpQH;*Q8lK+u{J<%xy4 zSX#5^H+(^SG<7%Ipu!CRB8gx1KOJYeiE4ffO+p>E7-`)n-egZpIUXL`Veop|1saFov#_*SSGV=g<41RFX&EJ*p>mvKS=+ zkGn@}wT{fprN3T5c?z%!{}(^M9m{n7UMiXy;o`9QvY?A-pAH#X}VD+0oP5<}dZ z#1>*9AbQSGb7cxtjK6ON7jNrLoL&Uo*z@3ClbU?pfSD2Jk|->oG5%uBNxyh;2(98I(+ zn!tPaMn!G@8|R23T8ku#rfvnm$Wjd%q1k$?9ImPLLF4iaZ9q%~khl(%pe#(W%3WdB zkbU_@fIO}_a*WjoWA2)AmN}{Zgeo17tIKr75{HAY zjv@&W>r(DXZd^b29*IjaL88ZER9%MyeRVQasd4u5+L6$k7n`3y#_5O%w-2u)VBQIC z@neg}aNZ<0SdGvTI>8z7!6^bb#d$#c@A0Fc1=ZFDrg#b7;@1EU-n~V0;NVM?!E?NN zL5M*u`@gyfPk#Nz5Ig2{r~55P*RE_bKDM||XO`Jy_dO(B=Y(>K$9xsO;!tfK_wUvs z3``)U*!Ew;$?8Y~PCkV-UVLFh`M$yA5P#!knlQ`gYF5WP=6_nb-?1=`kmAHMEJoDR zRj2dGTKEoixS^{pJ6B7^6WZLJ(*(Pu>OL@I{9Lw{(Y#6ix1g#lMFrl9(gK zksG~nPXyTTvz#HhMt^6It_ztKLJntxLPuS8g9LcQACNZ$M>Gv zs#csU{62$qy{E~HdCUF>Txeh>fx@~CQ<~B?*w%;$+?}1P1Nepy@(naJ{53eHcjS5v zg~7rgqS_1*J6kwIJ>^|~pEn?5GP>zDxhNRzx31WIrgd>B@VX~xBG_WX7HU)E9?n=( zUVNjPcL#XRJ6>0?_$hgUo$u*)fscV1A&Mb#_13^{CXzn1T?fI5|BI0>vd+2zIU#8xP`GNZ39uj66FKTj3c(vEVk;B} zvXSIB-+i*?3e7NmOvi%&#yN`7(y!&I0gChgFZ>T#8;%Nmy7_b2IvaFd|3 zjqnJn^2P`%jB*&{?EFLP`{z76QJm*RSWE_dSX_$l zQUv6Q9}~$%0!}@L9s%Y*7>$W3aX&mS`ZhAXgAoLTAZW`_mK113g0FkSo5e&-^54p- zpM?Z*`gs5XZg-L7AkM=s0Ex@@!I;=y#&_u7{7iISOITtH>XsZ}B|@-?4n^l2f1h*` zz%aZYo+Q0N6x@Oy04XZri2i6bst^kzOs#jALk`eQPFwqjr$Dboy|(tnV|xa@b!ukX zOGy4#@^PJXe1f=J)oE~ZhObA@^Udn^{~La5v?#X*KYH`pr$nd|Pk|H_vX+dfisi4> zz*Ihi28-~pQBa0I?t;kE*t7?yakY(z8K(ab$>7*Os?{+r1o#y=2bl*xTng&DJyOxP zz)7?TI30ci4e4@P5IC9_WpE;*So{uWWaWVaheFoBMG>+)$5C=2ofd}4V;?iH2BqJK z)U+#&;WS>E56BRxN_dM6Z!@{kYm1?LZio0pVpr;k>0yh}i8Z@YUtRUuv|{mkk(Xc< z-4tio)w&g5tM_mW6;grGVs}99t{iijcWijF4J>$0%r3+{2 zPEelwR+xSy=o42$POz!Mq8B83V#_H+h^5nOpgrqBz3KOvKIzPOmxf>IxQbMi4J3}sT5B3= z&{@!VYQyYXXM?}-ewKxXBu8MuuuL(ZN=JQt@V(lktTCbabaqIcEk4 zY+?8(Oqgi)V>>pa*H6xi0*T)4xyISTiUl*femwiA<mBqeAWoa+4N^b(hV*1slgZy^eX4h36~ z)!0Kp+F+7oTV!nX3zJxVYcYu@w)_G<@!L@9U>?DN(@^Nb)D*~p`Nd0#CSm}CTXv&< zo0N7$aSY?_z&jrkK4~r=WUj*hs)C;G;_6$!Cj_ZRi7X8Z-Z->~ILDFJ9a2xxOmI$W^kUNxjazQN_>+Qs zRuRjEFpSjR5{3{8aHrvL3+jVL+q4GllG=%=!+QHK!(7^cS<2}W^^uu`h`hC)P_M{S7%w;QKxdM7K=DvICTw+yIt~zfjAfb!3S88meuj3>8h8$ zDJZ-cv<+Y}Zhkt4I8k}A9OnCb_v%Dhv?`Wugm-h7C@x`5HKF48be_J9| zqu++bzV>Ka*Ba-hz#lgsiKGda`DU`rZyjiDk9dEuH+)U`9zLb6+k>|a5VWJ;)peah zIl^>ivXFmhIsFZ8XW8~qy-Z&XB|db0`=HjlRMLr_7Ymq5kj&J;+A)!`Ze9Ou!K(F5 zAkU)k1PKx!>MV2Aa?cd;2Ox;Z^ENa(BN6o7sj}0dop+T3#!955#UezP)R&=*w1fJE zFpKE!#9(@Gqwn{x4o^~BytpKGe&!#3LMD|LVQ^pk>6Md9Bhty~!Ot9)o7dbNY9PI{ z7rxyU8_N-XI*|ow%~5K6D&6^8RFivmbPmV(X8LOR?S?%+Cr9plM?x@;5%cosm4JPM z)JgS%)1gP0#}@{LTMGZ~t*6p)px>w4%E^nHMO~e?se@I2&1G6Wx5xK(%k86&En&RA zaw$elWio2n60$fhoWv)bHri zu8C*WbH|CbWW2jdT5x*vu36@9fG5+Tn5XyUHUYZ9Y)w+$c?ZKhMhR0v7jez%PP3IY zxGag!s5aaz?#??T^qTtkx|h{#WKSxXd1x_YA0+;}N`WP*ym*4eSGD!6-QeEzSjuB> zXDmvuTAwxItE`beNFe^UG+cgT; zgBmZtk7tFYY^XWa^Zd`^XD>qL~lZkh)-kI~UnSlfNb|G(9fJH}dc14d<+f)zJkPMIuF&aJ42sMC5I7OS`(~c6gO*-cF{b zea0wzak=I;(D0$KM%ax5ACYz4o1|!W;ho(l@rU5qSRruDif%#SKu|t3M@gQ%PF1wkt zGx>#|ps{)|1Df$@K`$G=qog0Y=8_9bK1R8VdM=S+NDaC0>=)o=g91mCb0Jn; zPg#doPlJG|e_;&^3(L2O7i*XN>1%N0euaiiA79fq`tk-?6qk@Afv5fq|IGY{a2!LP z+H@2n?Q#KB8c)`rx}#Bmo!|OKOep5`Ausx1?U@l9@?uzK-!vuLwZ zz4b1?>TG`)YykD=VK;CB8FVgyuTsib=x;rX3h3!#e}#>FmjUp3jJ(4|nJMS^=QsIC z`l5UQWZ&dgiY+pud;3~MA)!M5-1wZp7`5`t#6Qdv91a(eB(;-wuV@Hao#$Mw0|L5> zU~AbFMmWQiti7V1C!#|#xc0xj`}*iglpQ*f*23Z)-RtI;--TYf{LLenot7~usPCwo z^Nh)(xH~b-t(yVmQ(!vb_;rk1F*ls|p(qV@+Z~*Ibdsrb zagq5hZetz6aCu`@hEWHZLfWVwI?K*<4C5-73a_)>j1Za%{jrNH1xyzm(vQjBby+LZ zPjq0keDX-uST~tj;)6cRRUJfKPvBbD}y!b3>M}@y{=SN z&bOZFlkeI+i6*D7YGN}TGnh@(`}bYMOtYk)oD!R$NLv+O`Nclf0KZkb&u3YS;ZE+> zj5lcd2W_~yg&~s^RtIbzlW$`9y+e3VPZYvKT;Zbszk|?s1A_h6!Nx_l=C6=C)OqlC zzjhxq?=KG%@~BJ<$xB^S0O#jsQLg7>fc5$v4ham04i&Gv zFSQ_+cCo&XyqT7Rz&Iv#f<|J*9B&4;EwOR+oJMuspB>)gzF=%&nN<^F#mD$SJgrg_ zL{vq;fyhoX$B-r$qA@SPp2B}?JUa3#Z73IS>-}Nis;y3&HyCtExKC{MJ{<9imqGV3 zXSsls3a7e>{oRtjS8?I}K|JM1zapLryTmHB*~p&~u+9KL>t@TegJ38AVF+ zX3^Kc-5t3mnTTpl(iv94-$mQYDTC4P%Ug5&D^wXtPdAALt}#Pw{9t8mM2)$n6VPeWfp0H)Nu~u z&?$_wr|?0+v*YP)x6mxguOcs}-~6}S#Pt~`;hQ;zG;1^;GuV>$Qen153?9m#Pu z_=H}$Hq3}jA#XWqpiIl)!aYcnI;@dnkdTj^R1=#h#^u@{L8vslzO(JkSCF2H40z*n zXCSETd{bP`>FiX7IMjXRUqK}L`ZMUbskbhFCW^GWXJr2nlYIlzzB})xV3X3Q)o|RV zeMVc0;m2p}dMH7?KKf9gPd*AC+23LI8w(>j+=|cyOWU6lm42_J)hwh>nizvETN%5_ zt-c>~ux0~sWUz<}Xp3HPJy20P(tRp5n18M|2JaPf(@=FM|No=}&kg9z?pJVSsu7)+ z^P1A2pNEwMc3xARM~8fPZUu~bm>9CH&69+0U*8urhu*SLFBSt^SHlJ{XeyR{cUu5e za;cD_@v-#%E25z8r{h;aDKN1vX|uAuYl#3ACC!Zt<{tWn}0 zA-aINn2_mq(Ch9ZDE-ed;-D9QV%mQSJc;m-e|8OW@XutGMH3 zEId*5^)+`Itv?)^dqJnn0Q4s;j4CIaV{SVrx}Yj;+&7mzp6kQR-S=1!eo z2y2B+Qqo{>?ZZF{E)j9c5IJv@Z;+vUi?=pixe+pf7_R%)o0C}9>`XFV8H#XeX)uaO z6hCxg7w4%z!WKc1lY#=>;R@*CbC?A z8OTH|pB1KY%zun;{WyH&#cH|5@UF!|1Fcs2c7^XGH$VLCRhYN?nG65QUhmndtUxtUc)r;KuMU-#0&=zsmkjg5;LZL2n-W9!2>0nRKa^4z@LGeak>WMOM@oW9U+wk&;|b5 zA@_qn2!fqJ%~CGr#vi*pjF{N@)1J#Oym%D-Vq#%XCkbW#pF08KM&t|xD&*?Z?tco} zH*1KU(SssMpdePi9_=CwQM{R&ZYSXpwPz{HlrQNCs0bpooUXdD=R@~rOExtX6biAh z{`9%bA&+?)Qa7|B+Mpw-lt~@ZsEa1M__hB|`^D~kuTPruJNka+OM^NsA}LWtJD1az zws-)DD$HV>cz&@WZWYDsJB&Fg&%^pFk4-M{URhvvC-%n@*B8o4Y-%8FKKwJMb!VaVaV=}*^nPlTCiNVM{WkD2xp@PT>-~W+V^IC;&DSRK8&I>E>WX+q~q_oU=B4`sc_*lgVoEyxvY!fs-CWU1O6xO zI7uMYC5|mCCmNh_D^g!xp>0*ZSdLei>G7|9MUeuVuAAsY2qCnu`A!n2TBe5iDwqfF zbyc!tPGkP4k74G^Wl_BuT5PN>&aT`RT6YN?>;6>;6$&HAtFKCH)_rG@deaRCQ02;= zd<)r&0roek@!{K$!=tEvKsnx8(G%>?8yvCQ+CYkrx5&k@anoQ-?fe;HC$W#~zwb&5 zA!d@41F{B--<6jTS+%F$J}e8yZHZ`1RyL_u*)azG>3BnJ3+OIE7B_FOiI((1J zqdU@_vz+%F-$ZJjRmmHendP6BZEFjfgh>FKHCAeeP>s1`%lcgB32CtV z(+P%I0GncpNC!LOOJ-4*Z=NUgcQ6VveRmn?s=$4L&rI|uC1b(M1xy}@d-*7echjwg zqm&1B7;jCf4UYA#LS@7uKtd65$?NJHA^()M@{_Y4dqC_ax@xPpJj?%zIEZ7y!EBPU zO`F!*dBjEI&q0Uyxi9hD37<~5Woofp3{dP-l6BSa!7awC#7u8rpl1iP+8~o}f5D}w zt6Q*=vWEXD7i6DX%GDMP*jcGp{f%&gG6F>E`N=blNl%zm|FS2zq`;@>{#9!1qAjtQYBxo$Q zr+>a3ZJ#)YA58b7H+Jt6-g)xhC@jVu)ZlXylm}Vodi;xDhEZP@4m2tY9|OC&ea*g5 zH15C~+lzC~t0jo3u3z>MwjpVX)fg}(9E~qUJ)(NqYoEY1GA;u$~63t z)SGYW5VU%lZW=UGM46!@da*_8faS!d2JA$Gt1F8!-_aW@qyKFLsn*B|9DD-9e+t&s z_`u<6qWCl|?C3^`hv!s`8UJcL(yo)31W_S9crFTe&2W)jnx}T}} z=EUSPlo4o{8Vd;|9TPKMRn;V2*JTZj(FNSgcF`X@G_Re9434@_{Q!yZ!iuwrYsZFw zWYn$@=If{^#oqgT_R9Y|4lo0i|7Wj|iXQd$3~S_rcD_xg5*q+7erIU|3htVu*LTaXX{b{a}BF?zi)JEnbfkI6^&vvtscK^*E< z^#aZEYcwW`JMqFQc+{_lf*q za2N>p@%D<+jp>4dPv}*7tNzS&()oAKPph z@!c#-?_J*-NB-;uPHa0tCkeB2m&_MY;JU<*8!Qpi3|&EXW)Zkpc-6+8;Cf2M>BF}< zVbM%g!nmk@zVV)+2YaEAq{;dK(!w3qw#K>)H?s0h<*Z);mt zQ}y8h?^=csuWdj5)*gj!EupGsE#lWL2rj%v+I<491?6jw^ch$lb+=JPW9`Ct>YEKM zOt%zBOSNaG!5nBxB^XOJZIWKUFA!~Vuk z+gOq_PqCcUpd_(06dAVtLQvXW`-(?z6rjK|H_GS#NDZV5RN#Bjj${gJ!_PmwofC?1bq|wX7a@};U%7!% z{9~j3+Z*2Qi~9mHL*Kq`X5r57Y};sBohLI?SSoqlLpg^wm%RvXF#BXPb$tWEwjvqR z7O90=u<-9rciH**5DIPv-L0Gd$L!h{MzeMFEWC>squ+|m!<&vtoy4I+@)$e~jRs{C z%ABOXIhoNoYxLs8ev2!;IIZ0e$)DUA>hY=1oR*?*3%l>XgS55roa8rHX{5;wPHY#? z%RBI9ZB{5aKLptZ752rFRF&x3(km|$v9#h7U?>b(24|9!|DyFMIQZdqPwrW&Elj-J z``XT^Sa9(+(K!8=+0qi`H*d&gVJf=(sZZzJ>8CxVCl`XR&hLzuiVIDB8i3O!gns(q zM5r+(cxjn3v7ZuSx$;yQi3{VN_2^ih@=v}$yFn%>)T7fcDtGTRI|~bls|2N}P_Q6v zeh@H@!%e?O`Eh!{@~RJswh8~59Margbw#4X_JY$gv5!Y@E4(W1FK0bGnUvGVx8gB= z!qbsQM)k%&x8<2%ID>pu5VnU;`g!%m)VsarU~J)fg51>ZT^uygC>baY&t84{@)Ksx zSp=_=gO6UAVw`%|b-wYM+DYr6+`p4H9BU2~UbXCtk+;r?Wha1ZL_E;!E|L0nTN%%S z$Ne)-zHg-!u;s)JJ3gY;TG@Epe<)+WjorHVG4q+_9-ej{2>^p$qS2JCskJBxo%zbE zsA00Ya?;1{Kob}wEihp|6X@bu$yT^OP&@P%I6YT3fkRag>TzMIPB>(x(=c(qJQOA7 z>Zg0z(xIws{Reeqnj%3n$Iirh+AQ0E z_lZPjO=0M3Zv+2yvq=N(v{-ef$UQz%6_u^h^rsy@F{@hG_9OG;SG>K+W6dg)PN-A0 zsAqOsDD8dBen(}>>AF>9XT%~F$=SN3Y!6+NY|B>e^ruFYRnHQB{%xy>F%-6Krla)A zm%UEXRa}%OL6OZd3mlnP{J_nlE%_Om<0~8Y>ZrxO)X_>-h9}e>vu|(T!?*B@=hPHv z6zM6f@t&r~zX62Vq8YDhb$q1nxq>RIjQ{6Wb(0mSvpyY-H$9d$x~#>^%kIf=)q*2@ zB<&6`><|%PcadpzyLI&{Re1B|UV$6RmqTY>je1U*>q{3lf%Av$Voibhq4L%ZTC0xG zCunD)t5tp@;%P6DXi@6mgA)!K0b-?vi)p5m28ATOUmv7Np>W! z`U1dDnI(*mHu&+F-fjljwM_=FNf(#AQA47}jpktwZx-cTM=Ga+GUcAfbgo!yVF$qP2BFoV~+W7n4+oAd2L7$JvFaIY)jd9D_UHYhLOFva5Ir39J zLN;AvD}OW;di*~70u(_C4sdp&Kf&|s{=p6;oOs^4oiCwpc(TmW5EZiF4OBGwv4BHI z6YPp)8ZJ_G*}c6grw^QNFn6{q@yo53dP$p0lrpI=u2@Tt4wZdcLdN>kh4o1mE>}ud zx_|FrO-E-cZe*PPv)oh@BCe}KcciLDr?Qk({mtDMRvLdgE|&kfqx$W{LA; z#>Td0Z%B@+m~kULnkSDvDaF14whR7UJ82JG#-_;$OlC65hJ_4!>utlx8T_i z_&Ue@c=^cKl%4gE$o+woEt))rdM!(3Mwsu7u95NL>RqmJ=S8c-A9S+W9N}O``9<@n_30VodbB zCC#<#hs*#;%-taYzKatevC>H;WW5%8M24(}8PrKlkW#{b6T z1e1xP)jP~nMZHh|OMB12BIXP$)wF>dgpZraJ=hpUmF=CmAGS2o=)G+0-L}4m50{^% z!WAdJ?S3U8hT0uaF)VAIOF65NyYjoGs9CIV{j6kPGHbl3^-b=|p&#f$?KB}e+IsO# zU7NY{oRsl}E(@l;`=7ye!r(N=v(=NQdy_0hZ`+f)nq$J5^C`z%I$M3$rB6=8OeP5? z?~ebys?hRDpkaZYasDm{L@{*`+BO>yeRs2`Z0oCda8PAR6B1_oN~R|m-zC`D?MW)w z&=AJX;Y$lqO?1^2Qaw?_J7(1A?81Jj&1&PIeNybIzt;iB!BK)E<61dUiWfUNCjF({ zJ=dZx8G!o6{WO{^!=JTXsuP=@anoH5uxHs23hBHL2s zt)blZwsg1Vi1Eo>rHe&B_Oo%CtNRI_Hh7g4G0I-;Iv5;#IedTgWO@BYY14~ywcpbM{%M|yIU&X_GyR$3z{I#Y36?UwVZQsfoD_B4KS#Jq z+dCAhDl>`reA+khqIFAIa;x83rc4Sva<5KrrKIv-PB2I#}j=) zHZzSpc}y8nGx;S_M~Va1cMgljX^<_9<(W2JuK&92TGx8Mi<2$#0l8uCm1VMXCR2aE zl(8~@ny7uG8i&?<;m6o(EkEX?p&@VX4BAnaGyD)p`jPNZ`x}F9wBX>G!6bMB{u9`! zbq-*B)ciFS49Q`3zpZ}zVpCxOV-(-I{Q1x5Zvs6xo=oaCb-KLaU6a=!dt|>zU=6pe zu)l#hOYF4yX(2O@os1ZOwqL&|KbI1CQ}Bvvkgf2SjO9bd_i8oKai>XWFD0fK_%XKO z@0Up*3Q3iDUiylyx!LC)g8l1ef%SZ@Rx$m_)*Ta@{m)qo=5`R&(jAX_)=op92U_uou-TZ!uTbw_{%BHJV~??kn=SOX~U18~ELZ zRg){jCCw0Tx|E03%XUtslUcZO-yC+kDNJ}nD4@pddgou2qS9z7x?e_mb?9`*9mc20 zb?>>me!<>>rJ%9+O$|@O+eb~ycXzLfCEOM)wyer*1H;utj(N>!E8sWZ6*NMa|JqS> ziQkgS4CY(l<@|32|G#r&g1I}f#<(s}dwW+F>u@>fte79&JVd{6Wrz9#kz9Lu-|Yi^ zxh26GroKb{*!QDvm3HX6f&JQxAz!V~jJWX1T_^PhbhyB_Tf}+AZNgS*b7<9px2lD{ zrcF)#_S+Keib^#mY?QDj#d=aoyJBO&sm}ZPiM@}>dprTJpj|4Oqgzk#AtZ9+NgUFu zJ&@}HMQF(rdy!7!@s z#VRakWh^+d=4h70(#ZQ0m2!cEWsSb0P1|LN+vwd_EIe7qAGKnGPxT{SuZCF;v~#j4 zHmB*uuU^{F0E&lIk!`l%lg{aN4;wfxU8M?~hgQa`{mH16O)Be(^@Sd;&BVS%>$Vv+ z5RPHyqvbLUN@4Eh!w(B9W;g`~yMv~j^1QPjf6l-|I9ixw5?sVt|G&aiRPM|gB#eeH z2HzZkojvoIstob>$Cs0om#Kj~x_Sf_^Uu@+7C2r{n#%B&o?xqtdH+eOq%eWnbJ(?) z#lQY_hm`$JjPdr{y*BM?so4^#kg%-d@}_BduFrX5)3TpWvG#d(OO(&V2V`~lJc1o- zlHhCmZC+0R&V6jTYKN8{m0wS^--mYK5j*4zb8DHK?s$|-SWoWwf*MP^)iV88Gw2Gf z);DdEel6`%p*a|DmisXW3b(zd%uE(B`Tzo_QqtnL%u!HLT)FTHevhtQZIvH~ z&-_UKFD%S%qd`w;04{ELz`2&U3R=O7@o(IVgxaAwal2b#heh0-e}*9`Ou zt7zqhvl`a;8d)pC6m|_*825V%us5FqE)^#h*a`S7gJm9>+0V=PV!UZRJ1@^(-JwMB zoDX-7LL>pB71`;y6w|Jq{3=#IVwkV~F!%w!k4%R7_~)qp#YAnNz)XJ6K+}g-PtyDq{O>t&iK$+b2HPw8HE%^(4JC489sL(MHkk{CBT1! zZ{1?mNk>1QkKX5&*y|mM*s%4rr))JEVfwVhtE`-Am2c2%gQfj)X}8&rrL`c;fQ0Yw zUG52)NBZ8MgdvNkxv?qzXvpRLfiLHbpJJudQ@Bdy8s?kRi5mK}P&!JS-WnW`Jrv%| z?$$xT-fg;~N-c8u&e-Pjpv+OBuk{#AhylPSV0Qm<8KzRw*plM;DuZwc;2mfx=j&OY zRbD93H+v~T+p0jnD;!hmwOEuo{o^YXIwF`X61a)#y~&XHN@82_jAo>inD`K}ikoc;Wonv<1i zBLBC=%u6}S>@M5Y!-6qnvGXx{56RZo*x$Nha4E;v{hb1bE0n(WOhWwG_2bC?hfgQ# ziY@X;@p{fcr6<;vR&eL$*aooMA05@{-QF2|$EX)9iKgN=Gam3XuX?)Iljrdh&lgl} zju&P{t|P3@0mkaz;^GG=z#*y=nt}_h^_4r+K*bS7NFZJU2MEz5H!B+g!-VyDM?+PF@U&R_#7E2=}+Nf<= zuc}i_BHH0=C3;F=&ujgQH!1xNBxSb3QY*if)^dzU5L#l6bbtTQ8NcNNI#q*b8EMwR zg-jWmb%x~lGrDJ7;`16(cBR_o$G^N{@mJMMyhD^-Yt7UnZ@VE@EH+mlzY}CMrM=JA z9Jn*hcQ{mU0?g7{EDfcCn6XjvB;gvrhQpDs?quS{a0+xoJuJVzFB7|YoJETJ{3}-8 zdZYD>Zf@I!vAglO)$T3-)~j^%+aSUI5;D%SSPf;It0QdvlE!Qu8-ua`mB-bu6r6#6 z85(vx9{${V|D0v&Cn$Jol(|2E1d=8}$=nMlKY^^h?-kb?y;y8^L^NYk;Eewd)JnyM z#k$FJHh=nMF={{9MVF3Id(RR zVfjZu{@|`yo!GR%DWv~zAs6DrRcGFxcw=cg@keA48WNuqMEQZ(i;)Kej+R3aRHx`M ze;z*oK=@p_{7NaBdaP7T3T8(U%u;5zHd1eGx#uTx4$fX%CTU)ia{t+Jl2!1!|1ydJ zDAfRm#Z3Ji;SCjyDY7VYG!~yx`N`O6bY-oLyn=|LuQSrx?x_qxJjjr(%u)xM@LL*F z-!JVd{3~(}xrY5i{hzjSd|Uj+WE!##)-Y@5OO+928H0vod%Vpz1w`xEjSScqIshOY<5Knb~Hk*?28 zhN-;W>L=)aIbc(8EtX{!UYj0=vEN>9ITr{u!2OSTxRae=9`&EA+jlMKF#d4i$(yT7 z`poASL>Fp`kEQ19ym@-3NkgHA%XRa|tsxq#_G;*7X}HS7mzgFDE1~&{-D#gvm@5!Cepra>qjNhumm^waN>wKr_V@yQ8&rKeqkeF+nD7agI z#J3E_2yA*hzdTKg%t7rJrD2qK`qZ!QC4C@r1A3ELyLPAa($!*O{p!SjjY|9_GCSn- zvF%vs+{Yyona!WLium}W26e+a-dIzNrf7I${8>8E8(w0R@QeYJ!GMp=0%NMLo~J^3 zRtD2;8#}dvt)1F+Or(?tm4M^0i~B_fu}KYI-c3ECgF;@I|-89^lkLoCUr&_q@r=$t>kf%>| za3488I^;QHyz>z-i&FBF#CPzSB}2qIe1nbg-FnB`&y&L@e;+Hg?l);wZ@Fu`x8eR# zCo9jzkK;H>0y%w4v?uf-{Z%o1t2hQo0Qz8JkjDYLHh;iLl-MltMTfB*ZP790WNqheUqwIZrypO zH5R%QRvP%S$wFF9{Hh3qQpNA(h#zl6FWxN-n<^~H!oKiyCpq)V7iln?dVBSG+S-4P z2bIFX$jnQAZG({W%HjvDWCJawsiPQri7mwv z7MgUlSvKe#p1i6>N4aii#uVk-hO^r^@vkYeBA;DH*M6|}%v1cq;sd8qc%3cPWA7eK ziNcK}pfl5%kv&kT>umpRaX7`d@vr|jp z5b)-zhc<>CI_E`3BTDMSEU>506Kdph=a047+O~&1uQ=FdxwbWGSzk@L`BHjv=nm=` z4j_t0QD*gfZYf&43dBzmB12tST(}%}(${$R3gS1`oh2EFo&cd{J1p%kV1_&M{$kLA z)I59Fg_i3g=oMAL6d4=gc_Ij6$RIos!Tm_RIR=jmlmNOyPnpM`!m}m_bM=C_z&0e0 z8>&p5MqoG?9%tbtcOK6vWA4#P1A{96Oz$nrJapa|Y*b39Nk^4*o_E;L&;0kifzRvK zbE-P)?9$mIh780TxXfz3{i$tx&vlC_Yl55TSm9<^G?5>Eb^8p*b3ULOb11xJ-b~`5 z5i-<@<&)1}pq$IC+RVES#*-uHYTjRq_T5!fbn-*jy}esB6ioK{Gbri3~4(DKjV45#LW3EkY+k} zBaIXeK0Y@eHUH1CrdHxvQeTM|^j;>7#}{pB`<53giAP(J8rAX@Rij!87C#g2+j<*5 zQvQ8dJ)~6zSwAPAtHG>Fy!561$m03`BHXD&0;OKf>eT-8(|2*5|WNS~O@WKgcuR|D{ z#7C>|m8p7P`Bm}QL{^K+kAaKBJI~yr`?LvsUS(`;2{2CB zjJffsDK&(bnUCNV&~W-akMR@MnVU&n*o5rekc# z!-;zuV-de+RTQhVo~F*h|0Y!!=vuHK|07k)x|ds6Z`;>cnHouFuRS6`DN%> zAQ}!r!B+G%^w<+y?~DXOftvb^CsSRK5?EOfd&Tu||~oLG0P1rfg#zE95P$ zz!D`KxB(RKI)aj|jJDmNoWw+NyE`2cZeCZ`>*;-WWY#?(EPsRJ_93H#Bwl_&!Td8k z#p1exI)1EI9%Pa-CC3C!;2kSF%*bjl|TYTQLb%pvPSJggsjmt4gk> zeQz;RYa5jJPgV^09~eKe6BbS$h4nJ`+lPB@m~)40<`$o6582}+ZzUE&RUyMXs}@_D z58VCnIA!+p9QP`bM}BO7gNgGYdNXuUCd_bc$g!L9Br$v?(4eADt;xK7@-gnfZ8czuq|fY%o|oQJlAz{wU%CXYm3 zI^&$$xj9}x-(l{pgK&MZ7U134tP^$@7D)L^wokQc2F`&x_wo6)k_g*fwLw3tt3*E- zA-VCaGuGgB$kVwq`~K`Mm2ao^aLwg921KU@L#;||H#kr5?!7fLexUlJc`NFC{IM z^xo|eOGjM(?x7Ux{vOKo9@(M$C~p<|2*X#w4`Z9t92<{y97|t+G^g#mAY-1r&TxgL z*l+wz>20+vs}%W)ccN7xoH7MBloTI2MB}1Q*x=;or6eOA)fM1hE4$?<>T~n4n{%%e zv;sf3rW5mPvowu_Hs9miGRCy17)8E<@zWo)xE%^NJYx5c=41Db;{NQc!O?NEWCJe@ z5bh-@=YEXxb(elhm>!&!O$vir;n(NP^Ha*3zrGaOXg8>88nudB(wIm68~Y=@LN*?I zlZ-6XLm>yJC;?*44qXp~kFHR3LQMz4E|Z;(%&=${|VaJP{t61>II8jrC?czIo%GhT{& zwOCKoRg;=!N=FOQ_Yhf_!e%XP!|z+vUHD4fWL$ST~Xo`*{GSa2#t4#&B9WMMJ{Um5zcG`-ZfYn0Fncm%< z-tcwk~6Jlwin^Qh!7kP=?JJl_zqGGS6bM4qifqAK2M?K>IizMh&khU47iBH1 z);X7i1p|C-(bvh{ykP-%-Y>bOJ;DyAqIAmfgsnPHXFT^0eBNNjLX6gBJfch|GTh&j zKc;{`D{Y=8A+;=hP{7|8WF5=ITN4Y`>7j)0^}Z^Za#NY)G-aF*k>iXhg-6B zIzQiL(DWc@kd3(FsMN9W>(bVve#$FVM2o~(3$@uob4Dw9@N;FIyZX+wM{O%B90z5x zitBtivrMf+f#tgFd|8tWt+iu=^8dbcRg!J8z89b8j@&xc4dE$7CRbmR))O+9*4gfv z!KnV`_~-bM$J0NlD+pDo0~aD=;6R*iGo$ToYgtwx#g9*zGp#Dx7`y%W;p`?QVCjTu zN++}ZS$SQ;omKve7w6ub>E-qZh-Kl*w;j%J6W(}`G<{B2OAFMRRlw}sIoQNh5ma#=39Gha4$%=c`~P&8}Ycl%q-|Ax3w9VF0 zI~x`qIwST^-QvUs6JLW5FYD{;tqcBCj<^!Ptm_P7N}82|U$GxC-~Ko~rVHcFq$M&< z6I1QGE-TXfKCZQ^-l;#?`QSIgx|GLVRmU3N-9U#;I$Lb_cAYzWez;sw*lLzY$-`Y% z2X4Emx!-XOm(7q)2air7FRm)9l!X^g(3)>odgdt==P`ZU_E6!cF^MxH&(7P(CN7CT zldWsytYH}~Fnap=tGNi#+;!OwIGpCBxyJ12QQl3)1qn$$Fg}@EX~))C^X-Y3@v#@y z|GeArGa;5#^L(BCEWEQ1uSG2W)?d1s{n7Opj)z@&Ab3qAFYNS!mpsiVPqJR{TCw_f zv`=04p%~3S;>f~r<$|Jz$)2Jm93C{~T)$=mrurlHRK@&}y@%`{a6s3ZpG=Oj$jwi2 zF~*tr>{M*C=@?o%LBHT16Ryv$wDK&e(l+7P-lnx|=gg{S+u9E1c&_2NpI2EETq(h= zwJ>M?1!0@ByPjbzaAezk{I;X}cj}!*uQY*m$0f{P7l9)xMTBH|KD{%7|GWn2 z!zIA5I_;O!^g@dA@69WXEoFL~$bB>e(!&!>dL=-@LA?nlJn8 z8&Z_kNm`4o^lz-u$jwd)(DGU2=3r; ze4}cXpZUHVKd#7rb6a~g+ubV}{h-Yk>KqL`BGJd$$#~z_KGW;j4cc8RfY8G1hB00% z6-3?P@7DKtTBleSa4fUb(ZXb31L_n?hRbvA`A*O@f;3_>A5x*YG!O0lpPHLvB`p@W zMfM=Ay6k3(*Pl@Cn;25{WnDTc;23OxWlXJ?8kx)0UGeOz%nOLN6q5gG@`$Cf=YTnu zOLxJSRW>ok;%-%@8Hz;n;2%(UwJP&}h?&!Eo*vfhHaMTMkz;5bkgcc5Xi)MZ9%-#j z4IGvZGIyq46sa`My5)eiH0i60dn5ei-Z9IpdE*452Za$Gsnl=C(U+@4?RT^XvI9r( z-7aFT+br1UNr=A`-iqh;i9CIrVlVEp_Kf(7#8u9_=!-_UMMTiiYfWYvCYXz<3ZM9T z^Hbq3+DxHR)t?uNOL>l}hu(&ev+U>m1L)OVCRzUGn|By}_Ni~u1_5sj^*wMwp@N+C zr%|$8zOqIzcNQBy?DiEMJWCL7+8t7))8n}pF`?u>&+@%c z$5mzqAAX(NGKemJIJ4cVp7RRpxsfM;r7y=EShwsOFeB?7J1_g0PXg7_6)in80=#Vw zPd_QeZee)7a+Uc?6d{q0R5hN;^0MGP%itws`{?!B)jadjSN<*BzEC(kBMgj}5SN`s z;UO%$1EV@c@1PftjAZVflBf6f8}5(}Sbw?Ypn{p#5^0+SaQe{;$nXW^0DU#t{>9+^ z0r>^yedxrRJ{(APkI%RX0)&O_MQYGDgT72@W&`CZ(2Fjg5gg8H<$Rq%Rx}8^2*_or zccnpV={#Pu$Dmk|MJY;m^pqYlA*UNUj1Ii&3ogXRzeqMS<0Z5yy(mY?A-p z&6~J7+7^hF>3h<(nawpjZIrH7snR~sF%D9Q6fSV&8gNeTJH|geTkzg)?07AFOOo65-ev&tJGa?5y&}*CdIs}4>QC0^xtk5sp=CM6 zr)>FVn83AsB8>7J0Q|pb0X&2+69r?4k-g(5iX3itZMI~&9-7lhXv?g<;g z-!e4wRmnKRW{|pf>D*xz*Utz3+M z%1Mev^uB8Z&JYtkl$~gP_a>Dl;3e%b!k17O*{_scgwp&62*>p zh|ZF9?|zwkx=x<#NX*Ay9y^0@7x&g`W_|!vP?W$F@1-~Y8)#)k=+cdEM*L}wfmu8{ z2HaWR+9`2qbRq2usk6CxEX2O%)MCj9nL#p7bv| zb*M1^(+vGGr%qB7IPK?IPO<))T57rE>qo`7+A zB#kSnO9;}A_#;2X2Vd`z{9S*0-4`K!`vU|Ib>L~f8 z{1%p~55fOjHs5O@@%G%})wTArWt``#5b6oW;Q48*>F^<+bqVQJTi@HU zeJH%$cMdke|nD#`xl0J(Sih zW{%P@Dzb0Y^)gQwT8|Pm!etg2%P>(h^(SPM)JF!=g{l* zetkc`f4Vhv&T~8-kNf?8UDy4(!I;2A?c?I*qSd+ zBqT}Iuum+7sNdp4l_>q55J}X)Hi?*oPSFkw4(WJ)b+A1q3Ls%xSQS}hLOB3jUnKFd zD4`SGm9yal4sOkHP07MjN685#$NcZ7_5erN@-ar1^>|Jz9F{m-NU+q<({ke`6tA7(VWT_pJT9ArY#w_(# z0U%~1CaJrP*cw*=s;hr|u)|!VhQ46wAjCX|1^ArB%Z6y>%DA2|`o}OKdczy@U;EY7 zeTN4gVbuu#A;E9rCHNqh3bVCtJrU+zHtc7J|M8XmEs{DM(@O;fzXm@VGJS?(I>mvQ zRe0OHD1FiFIvUTJmq4oUbT#28c8WZeaMcE4=SYmW#@gUJ{v}D3nOt6p4hP_kz*D4O z{+d4%(V#{?B9jmIfSiKdoG(s%C9Lh`o>r2}F%mrk@-?LLLGNq!5NsT6wW^B&TieJT zOk6g)n z6bzb<_drb1?fpI@s*#blFHjd#;vtho_0)LX0Dh2CnM4gn4)LDkd46R%CtzbSIIoOj zw@hD|S}^AYz#3QFU_}0H*$GRI=98;i*J570&6bN*1b;im>jt6d62YzMGd*HEuc{Z7 zAv}PMf-3Vj@^+`!)agO}MRVa)jD#02ZJHTg?8|!O`;K%b;&E5b@Zv_)v6o*hm>zW! zYe~YPv6+`(C<>@qR{?z2Nic5C%W2CbCg}i>w|6QDBxtDod)~b~=P;UyuzdqVmXTRd z={fRn!M=U_5Si|yEvjZve{^<E~#1hhPAvxd7IjG_oqZ%RI;|?txb>8MiKvj5v*9pITf(d{L zZJ(B#n;Qz29OEH`vNkdrG~1Ijml$V(k~GP&Y&t4e=;is!vX&tDr?Yn9u_8gih?944 z`b3i|_zWkBd$7dB$pQIEOR;O}e)@72ww0u^OF8es@p9+Y?HtD)2Wd~mXLmfJ92}sx zkXq|3?%6iSe_?)W)(O2WB1x0tr_6oeb%=RX?=y`y;4l^LWGw78#@GD934z0f=x-^T zoVoKyQ($CK8g=%&5RjTBjsD^!&)^^}`9~41k=$LAR)%64Y_3k+wYMLt zER&!e39t;>Hllcj0w#rf}Nb?Hf_mMtdIZoEBy7uD}^*#=DmcZ@apN zb}nI!NHHRYCQWp;`nMLio3PUEf$GH==hk%zbFYWslirX35fkb$vrCr>k9Sm<=ks2x zM9c$UUIdN}6j`eFjjxcRNDxa?%`g15e7#kX@)JnD^K2?|@1WIYi$naY2wY`@`=wn* zd1`376<( z|B%^*#V$f3Iu&6o*2se6S*u;XhM?1bTg8J88yF(ACs7+9EJ7w10$EW-^rxIw49S7l zP;S)CkCT;Y;?k10r0y)!P zwkn=kL|#GuLQDNdcnKE*`$eY4@4@^zrYL)5+*>lJu>VN_K`x*0fe#2&85Rd7bR%Tn z+MJRT^cdO@Byc=4+4%D?1jNA0p=@c*M%g^@)BN!5M@;TA&^1lG11WLDy+J!w$2$yUle`>ZeI!!0h`7qQj;R1KItfQ985)nq^DZ)Yr8^m?qp zk+$1ZIBNON9u(ThjiE=8Ox2Pp-a<_s)uyqs4n}yCIvfcIWO-I4U%_GOnqG6KV!3*IFV%{W;O5FDu`YzJh@#qoIxygdx{*djZmOHLfMKnmuBeADY*AXUJ_A%U3z&X;|{EUr@yF)4hAlSvn^A1Ke z$jH(+N9I&)@u$hTn8^>kjrzo6j{*+R(I%QSr1Bi=Qx}|j-`!Y=%(KmIg~?Hd(V_df zJL2mh4M{ogb*JF=Rj!&?r7cmKko;vryQFt{36SkB1_{kAjz=G&?Lt7i_5-75<5ecJ zfJfi51M9UI89l;Ph+I54?QKakF;uzfu-*5?+eRwqzre{KaoNunH`lN73OLnor*d4dMrF-$`LqYhL}{HRzn^ZAmon&;xY)eg_9f7#|Bx|O^=9p85Idh-43rKi(Plj);ey?>=FSB z_)2KEJ8nVgKLI(HbIy_MMsdFD=P|WT$h>-UNJ}NfX`UMj$fP`T=*(U*hDqxl(UU{^ z6Qu^#>w#1;aluac$J?{`;Nz;cMepWD4ejNU>G8q67}aQUZ*k+I1ZrSZLp()IR`gU= z2`Nxvw6Cr^!rXd;L%HlV$_XDBK1~#xF-*ABgm1KAc&Eq*TKc?5yf1avigXbw4C@Sv zMrY1>P8d$pF*xiJ5p`kNm0M29(D#cnmqF=@QDsTVVE-&9yV7U*PA@;;c%8`KwfSse zQ~&T?m*Xa`cXADx5|-s%`bnz!VX&s4lw0;Utf||8eCOZOF=XhGt8e8X67sODnR5ye z@hK5XE`96mUa!Oj@z-5bR9V@}-Z`sQ)cIm-ppbCST( zbeeeP#YC4gr+djoA#(hMC9U`jSv)nJf%1!ORZlD{$ z&S=9MJ-KNm?Leqw29V!A?9ye>Z6uj-g@FLkT5u2uKpJx-_*#nXJt|3U; z6&u#l(v-?Aq=DwfC=avtXf*N@)z0HYPvaFUwi1I;2y=Z694$m}?sH0(_Bf>~n?TAj zKT^=7X&GLy@aEeq%^F(Q#DZLdt_nEq_CfsLty!qEAJzb}WfYdng^#F;@dVLu>NGCC z`C#08!%R=lW65w`bgkWAjbJ(Q;m+^dc4dU`UrVN`_9+*W83b&HZ7ewsJKe>-&P6vO zA-qxvnBjTQiZm(Vqg=K7H$&$@nD;9G8Se&AKP!48?yhq?DqrO%pX+ER=TXiVu}Z&S z#Tg;?G(7!3=Jicj&l3e%1jzd*@rmT|Ra7i`P z$Q=F1d)}PxuYVc?f0?juxxjb!=iE{4^Dj~S!YgU^ir-LdRhn^CT%qkl(!p0}6mxat z36@4NeS&j?UP7%859?ln@pW2zOWD&Mwc?wtKd$hU9+!}?SBX{>x{m?^>gS4Y0x8*fbzQQIszKUU& zqMq{rtiI9+W0C zE$uFv*)N|j#eUH7svXS*olw`c+TGdeZw?)PI?$07lekNwy9DZ{Y zSqkPE%HFl+O%HjSaib$cikKqNH-)l3eX1PL6gq#*htHw@mph}%wxq91Wam};(DO(_ zV~)xSx$c@CZ}q=;F*@S9+~RLg*kl8x2E*YJRAurq_?JWi^%4d1x?N!n)Eh2F8EP-H zni}|4w{AgfefgoSgyZ&}_=9dq{b{v!q*FJ$n;irWJvUY@kYT9#ZBV~5sMPdY(a)b? zp}e5%z)vr@G>?{hvj=2R?CsOV9EozddC6t0V~8hq{!qH~@HzLjL3*Mva*u*tIJ%`A zRsXp^(&@DGz&o0eYlXp$!ia^Mj|YU1u=ZFjDPHO~;AI0hcMMhO$$IL0-*qr`wWS1Q z?{C0SH(|tjqD8H?^p(!jfB{|mV4q85`#lw1iw1hkhaadd?seB)XW&)FG^Ny*t9N)X zKyk5b3B}y;`^8f3@HUHYOgXOEY>=?7Kh>)c}ug|t& zf>l*Uk+Tj9Uu?Wkc2uVQ^iZ(o%MWv@pfyizzRDtY0&}_1bC%XK;k|{JikCWL#N|}OU3te`e@T)OVl?zLb_)$QWu>vO z5?X#u*@pe7a8Bk+GiM4swQP4El+p;v4h^wxfKJ3kB%S|Ay~We|pKUJ;_C!BeoCys4 zHgD~^X9&y0D3QsC%HN%4U79uh3)$GFAix-9vlzPEwTo5)0Q$T~Srx?j0H(&JChczB zi*B{}v(l0oI2|(dym4+w4N`ofdz){x8F4YCt;E0L-mep85XIPlzvZ=PeV>e;A7XOle zNoG#7NZ;GrN#)CRvfy?auc2)5@a@Hp`9KI8>IER|tL@w)WOhMwHG3!t0A#Mi4W>n8 zyZK)l(gDFbDpPy2cAI8mJnnhFfN#GR4Z72WY{a=yLb^nFM;2BLY|Ov9aI#o!s{sA5 z{l)s>{u%x5)^Oveb}!98^7W@)k<{Nd8tx&)<(8tsDZ%{U8Pm?og~HUy6AlY*wDR7tafzXynEgjcs&r zL|gaf;-hgY~dC)mysJ^No`9m~HI-1+&j{uJpAhdQ!e*r6J6EQ$ksh zY4pHt3^t0fVo#kS_O8Y3h(3r!g#dlP=rMcrmrrAlSM+qNQ{FUCmgd_44J@WwiEiZc za9DZ1dg#4DXV=rqL>xDvR4YdhI5d60zuiZm-XQ(w$m3oEqB_UO6pq^Ci-NRk6E9I4 z#arpek#_}KsP~JG4&hN6mKG4=-P~U{z(`P$MV4EI zugtYaKYskEI!Jj;4+r^|yqiz#fyx-z5)1d+PeHRf#$#;aVMmcD6+JltBj$yI>}$a(>UmHF>ZpOZ|t)&~9&muX&A#{kwvceobNsHmvRQ9v%hgWSAQJmYdVt zeCKMBg1mW094WH>$d}Pzj_~VmGsZ9g`Hq*1 z1Ubb`GaEtv=c%r6_h}A}LMsk(O@M@0HG&>ujB^!8IH^}NACWXswu?-=t`TN*rfPbn zf}SDfx0q$Y^w6Nl(KMy2F4#3xfIK92eCX|lnvgmjQq7wDLmc9V*29z^vI|-J+RCHc zsRZ)my@fH{(!jU}(1!NcjPyq( z+{r=>MemxV(w*Ws@z{;C;eIt0?G1!eCsG;@sH(9Ok2sdQk2>ng)QZeUjPjkY;<(s! zksB4p-G$EYH?LcF1U`xbb{oDlafHDR!R$~D@W+e({!Cj*i-?`QpGymda93K6Q-3jX zEi>qPj&=!&1z~3=ktn0W8v&rYY1iYaybEjSC5JGTeNo~b3{NbEK^{HbAZ(B`7J3f& zdV+JxX0$DGq4KOZP`m-~vc1%mO&roo3{JU@{>ftSL9p7`$i|zcjK7J6mWatgqJNVr zsiRytE|~Z@c5Q~5&PE?acuq8M>7TlMKGY$62h6~*AOxz_?#>a$A6C(fLAmXUkFE_P zXjvQ!%<~w68vj6Fg#lQN$ZMg0zsZ9ndj{~Mv_X6&IAH*b zs7*Nz($K3v!M<;5N?f>NU0eT|;c!}Eswy3SYmby=VeKPBp>rduU`d0X0hz*#3B5lT zglF1`7Ck%$YaSpSG8cZx)6QQnju)8yjPcc=HCrpZW{4v<6DOY9w+o;Si8c-3rlVpDxo7mj?5Eh$pZUYJM4tz-Mt0E`9m-x2(w`mo9dz?ghIv`TWZx@ z|794ny1IJbu@)rXfU(=Y75Y~I5!C;&@aN&2B9Ve_#-Y{hYpB@Wo}*3X;5kpQ>Y}M6 z7s~~b0uOLd-6q1kvpbfy{)k^XCD26$Nkrh|rSu4x$OT{K-KfKX&ljWA#cYQ3j^;g? zOFQtqGcZxmD8PR5ftg%D0kfVkdl4}sW82y9b~)cH?jHY0sQm&t#alvmn4$T|R1=zH zjTm7^wb!#Ne(r0ZXnGr{o@=~28|qhOL)#(}1%4B8r8@TQpJQETlC7QyHZ8+Gcuy1_7&@ zfLwxL@OIxxHG0mka{fcJRKm$P-n#&j5!|F>n+0Qb&w^#3nhwW)t(IGmUA9<H0 z3}F=yHV%OK#$vuff?RWR|G~{iKlCZKV?yM)D4$v!5|B!)cl#h?b9|kICyHjzC4JhG z>>tWJTKX63u7jF~TD~X_3II5;E5`P$CSDcV2D4d4VMnQDYxv=)B!j51(bwnbhx&{| z&+IAJr51}Ig6GhDI}6!TmoXAOU7!`WVStk_>;A$n5`9B`5RUH&CQRr?d1b7M*R5Lh zDB}svHAh9Cja;TVmZlAhV_tu+8zvXV6!k8E;f@+h#;RE5#N}(mcH!;b!<2)Gz4J3@ z&Bih$2&Q^;pXS94v>F_tT$=iMttC8OB$TMa?ZknWf0MjMPmtM}ErI^1P7OHFxIgb> zT42r9fTRcdbq_dcifK6RfEwen>FYeOr8ewo!&!$!TC-Fd07cQfJea z%%b3k*c}Y>ITge$3&kJ5`7-8w{9BjCQ>IrpO5Jk=S)aQ*_CF=MR<_1xGiOse#UGc8 z#;?2$s1*dV28hX=3j}3tg(kwgeswaebxXQH3ppVHOf4oFHHXc`CJJmCZ|$PT=gw19 zb%1d2b`Lo@0RivJ&qWEuO2EP*r%~M8#zFXGzMvK~+qbGFGh4EmYxDiy^e#Sghmcc% zd-9DFwGE^y(S!TvyW3d$yme(^HKiO&!|5OR&7P6e69LpXBF#x-;=B~aJQWf$iDRc2 z{&>Fo&3LcO9hmPhhQRY&Hp;Dl&=}6uufBxD&$d>ROoa`Ty*ij2og8@Sm$R9-wxDG4 zj+tleBw-W{SZle1pInZ0ozKOYVePVdzEVLn_3FfXpEo9kCKk_3)dy%u8S^{bw2Yht zbF<+#KclPc!AdfeUo^jN1J7h2pmhlO$Hc*%J{;ZfBx|S#~6PJJWMN&C%6vnv@D& zhZDlXTQ8^4cRjlnb^xj0xt><8QN1~8tH`1=69XUa-Qi31rJB9%1nn5C+tjC^TiDV9 z&ymByl2%~{KE-1cx{lIut~+DgAxl%c7|f2?5(0f`1>3enUq}mXZ28FWr7y`fP=LN? zXKN(nM!!vf58o=6&!ow4*j-4L7FssMeyb*?ce*+|X_mbY5&AGJQ0-h%PL^ShT%3OS{yw^Yl| zp)zBRk|_?1QCRUA!E`DeupXoiNHTb(Zpr^)BfaUObS1Bw3W0`7^H70Jc43p&bM zYpd?M)_$qF8spKDl-cF_Kq{VJzA7?LX7J&FXbb7Vpb-L+dsP(7Q#wLT;&=Ii~KVtaOQn=pN-^^!nk3G zdQBOkUBH=@AHWJ5vS3E!wf_BvAIU#XEQ;=HNDFypXvxesU5lg~1a*OU*uh8iz`dT? z!Yf1sjfM5Fz=*hJo-k@_ui#9BK9FK9W0bv0nLn}j$8QVGY+n_=DWL-nNAFSYt(L8Q zV@EkzbK#R)jLL8uNpEF4SN?gqH71?9r{jp`Q7vL3f@Oyr3YhEuy~>zreGx!aad19e zyh*WT!`J%i!OXMH2l=2w@m|}Ko6WNl6v{frMwz?~R5aVPkXV;&Mw&LBiVEZ+hR?d<*)xTL?<}hhHgK{gs*K#ec`Qo zlW`&D;B_ENxMA)7GW$G#TK(N+bX28+M@#m2C#7K?(}s!B%gNvATXx*fyC`2|E&Ftr zr{T_FW{V`Zala2rom&az+i~t%i;D=2PU07yQ6ld|>FgX+GZzo0$D26s(O+6xokc-B zvv)+xZZru$5JTsh=8#NXQ!Hl!O1bh3`c23ERKkO^No0N(nfmj*1FhSca)hjQ;MCF< z`pHRzF$BYlWC*~{V)dcZ&OQAcy)PX0H5`JAXFf|_Z#lJ`9%HB?AW}lx#hm9DX+WYX z3^`9@G3RwAYm3}0(M!8|>O2l%2E%z}I#F|{82#>vFOK8F#MA+_N^PAWSJD3yNH#$3 z-LH-58^M5`nnhl)c zC)Bd7tqu?XUm+3lwrl+oItMgAxPPZO~(I@G#QrC-@k+^+g`ESE9Xa6;^bI zOoA_SZp!3NAbFkhBnZTRVjJyu=fsF%Ezqf;SUoe+`4I7V!zhk^LmYENk%5Rlk$q?@ zeVxNOCRyiZ0l)~t=_rZ+#=pwRPBVy57ykzA(OOz$!n&OR7Dnz8BbFw|zGTf%&p`MK zBSCi@6Tcuhwt(IF7q{Qvwh}*w_g}*5i^;pHj8QpO+NtaReU$;biP?})3D_vXZ<-{Gd)whA!*YVj0kWKi0j>mp6|6Z^RONbG; z#wk%b3j))$XkT@VnM=yj1@I6mmnQYw;2A}AqZ(J}_bjKc<-7XAvam!0Jm+FV4gYJf z@Xy{NCs9Vd%6)G46w)4X>r^^ff*)#YZC7Tf@ z0Wi22$I5#$xmcQho>pq(e>@=99Qe;W1nU#Y$h9V&KL5xPg*bFZ?G;`sk#e(3p^b3T z_!49Qh3bDUh?znK;wZK&Tx*dMw1jw=h{|^mXy+YSqpL=HiIP-!su9{EK#%7~+tb(4 z&xpAz#>MKCWWRehDJHF6X-p#UAb@`aeJIE-D44q%d=QH0yfnd`_vruSiO709OM-XM zP8SxFc>S+ML>yD&X_e@I%?^yt@hbMVTo6S8LrR>xC{=6LuXmmTk3djMC@9%@rOB2~ z4om2(oq12i`Mpg9p{4RbdVr>FqMv%i(Z_yL zxIyGoMcYO&P|M{UO;D8MNLjUN)z(qlDtbjMY)K8p(mZjQ`-i@1%@Joy%}ko{ z!aui7{EnPXL74!fu?>e_MdE}@zl8Zjc2ZyGc{a(iVe{n|&2!>@J2`5g@ON=gy?I|m zZ^>)5hfK_ZE)!$V0I6yZ)C{`nyWse1HU<3TTRdAj8Bz^GuImv@0xitY9(WlAa&PoP z#uCbZnQq#mfng3VKNZ`Hp+krMxoFf>V;nmtLlY&^*QT%qS@xwiGD;3v zRC_>GFjb8h4lfVSoX>F@FKIuGwvu#VW*bG_|2aR%K5CQ;dC&x$^0!^^w0g164j9Ww z0#->)Kzoi`U&2LjuV*owRoGsU{<25>A%!_6{$t_aM@&EUhS}E9-*Bt@Ox@O{3?*z_ z5+;2B@V(Hhs`GN`(xpU`u7yQp*FFrAI6c)ZPV;0EevAD~e!n8E?0@cwlFtl$UsG4^ zy{*HhFAMFd5XUzmcp6DSuQ!sy@)M(7RW-kOe)fJFT`B-1%wb7ZE~Xgir? zB}{nvLDDP*-2Xoh1nd5q+@m93c5ip2?O9tZLQng)_^8Q3q&n@MzuNj_IhG zAt@@Ywl-^kf{&(2K$zuz%;M*Z_t;@~F+1wqwjEB$T0|JS~ndy$p7q;*b5TDEL2`zHwa zY!?Q6>6reGN%OLU=)dF5TRrcCLC(K+rL+J2TZ#b-iuEpFlOUg#WSTY50PeXhk{^M? z$Es|x#NWm@VE`Ek2?!%lC+n+jVlUC_( zG~PV-A^-17JI!s6mJrDQ@O7H$mAQEV?*FR6{`2#lJE=%@cwsKCkHEC%=31iFel{#o zBgtc5+osyibU3VN@QazlRp|e|Rh0cIn$shki{spxd;V6OxCaUs;csacLwPU$`qXT7 zIs2K&rtOJb=*xR^Oe_ph30&~6cLU97xuFJX|3306n~ce)6$hpccp% zDiPjipgV^v@x>WN^5el&e8<1u1!XAXb5HuI4$>_n=G_bJU63 zdJpjCn{B`LY_0kX6qk7+wH9f7-;6QToCc`#<|pkeq?f{TSA+{(O^NXyCX-3}!t}yn z?EYy~t8W@7Kthb2?8yn&MRF3o@nB&0%rdJY$CNvPJn6f@fvq;_>@k1b&7L1Yd4Xm$ z@WQD%Ihh*tPP4g<`uBT;Ka%)XWixWf-m=Afso)bNW1_1W?KXLyImgZcck@*VCVFS} z8P$ln$C=SNw~DEb|2{nDmg`-^PQ0xu%LCl$jK?l>t-ZQ(JJVo5QPR`%zrMUr%jRwl z!?EEM6sl#;rGlCmh#FFf6fRzgJAEoP$VThb83xC+&V;Lb-~yT}&+WYi1`F)@vjd{- zV48>8?gMteKS0sHDst&;Ou_tVwEm@@E0P848)o)cF6bk8P^ol6e1BwW(EM1sGm%i0Z~%X-K2I8DG3zRw;8M^`Gr9PNkr^V~LP* zc8*YEgaqxFB46|_{SK?ek8fr2PG=?UZmY=^=t64^(O?j33-Wyn^!v{*U}VEkQ&tOf zd?~d)-6y`J?Y!2D?x}{VQlL7g6%Q)!P*(>5WiBcoYbq_!^X7!&vKmd%rdq`XtSsr2 zy`Z2A-~y8Ir>btIN-_@y505`&<^F&+gKM3|`uaq!1Is`NW26b1yqx#OC;G;dm2(p= zBj=E$oW#r(Nw!)#LdZdSL9b^v?v)M}lDBb#N?6S;xm)6UlwC-*L~Od73O zo5S(}#y43imZz9u`PBG1SMaPZZ*9OIY&ks?f>_nL3Ct1kN55(%F*HH}xs)nTeB%=^+H>Y_PIEV?{3S{ckS-1!0nMJc&EKb|DL04c=)(TKUIxFWt~| z_6EIK(uY^0*F0>@n{1)&K!b9x-p%o$N`<)>0OW>Vy(o=VZW~8(89j`DdlxhrC~c(H=ghU z^b_=COY9KZI!jnXYJ&H31TKh_r;-FMId-2Sp*N%rQ|1~r{eedKNL#6?27L6*xY2!d zHRGz&N09SIF_fFr7=&W{R6*7dtzW+ZYRQ>99)(e2@RSJ*-^E3`*{^E{6+# zx7;BcNlv0KcIdfWdG1AtbqOBaq?>5?ySjLHPu70-JqW})n^)@k8%*ci3HvHuS>ezi z=3Mg*Mg9z+Gi0f^F#ZrY0kfg zQ!D{7f`>gD)t<9f_9dmd_c88%{!Vos9DLyA%wFyib!F~I`X|CX5e6l`-L+>h5jcRn z^(2~6leKT?eVgaUkloF9=~!uZlfzMg#@8Ss3j1!KChVC~#?Qb*=J3m_8d=PdA&}+0 z180^43p&H=Dh)Du%jXmN_yaK%KgogkaMj>b!u!u9UblkwviWJ1vfY?Ki_d0FqO)pZ z`J_7_^;b)aTKG?V01?zab;1WecDlxrCX!|LjE1sSj~YXz2*wr3UFW&s!vBRona?rw zu++KjYsv1ScAT^f@Kz!>K6mb2An(T-UZy$!6Zf)lsF-p-+uN1yZm)zL-Ybn>zMLJl zq$SN#!AihkHY<3AQ=j|t^S=?Zvq`zBaRtR$EG7?VU9QgnH>TlU)o%;oCH(8Zx)=!M zH0taM|K#2rr&*}13i*}Jvo$P@S>|ZuO*TW_EXTmXel{p-!9NEk?IF9F+M@KYl1_An z+s%VXTS0$HJhQB0qn6|%ak)^law!mlKN^y&6o%_p=cMb349A`0C94i3fTnbHyK&NrP=S zRTL7B`TQYW8Sp^~fgT5y%saD0pzs(;Y+LEOXMdz~fm&%(B=1 zWbI^2wpEE98yB3Pc4}f6ZgNh;i=Q}&XP_Qc%vJsgxv`$o?FpmQ__up_s-3d0Q0iv< zmrw5=++C-0Wqkr^aF^1sxZVh!gws++QzJHAr-S`>rDtqEHydt&aaET0)l7$)(?BPl zLyR=(UtH3EroS^zrDF<-+Z}2hZs~Z`i$f5+-)LiH;^;{A?&$3 z0sy+mGH>^fX52xP%_%m$Tgo}zmPHoEi@3NA4#pHLS*vF27zuR;(;_}~8!Oi$$+D0F zK?Kxwlak#o%~k7?S)=(i!`gG(e`tj)XjhdINZ{WkrZ@8Gn*Qr3IY|KM)D|5}WYEx? z&pea!&}n$Y%>6_#NOHCq5k5pkYozs$T7j0kmnQ@-O8z{Yyz97pC6I{OP3kSfD0|x$ zCZ<@2<)^*$<9)Ylhx=%XV0$cP5T~^ zhh^SpRfS`Kqsh(&;Z=JNQ4X7y;Z#v-{=hlae8m?=G46@K--h2q228YBW*pv|?U#z< zJ!eGc$k9(QwPvu^ZoAY+Miv zxHRo5{1bCm2W~j>HveIN_!(toq`hMIUjuy2wo}&&IS+TASJ}*I-Cw8erB1R(yTpF= zEL`ghh&r$*QeG7VA!IdaK(F1qRKtN2o|ja+u?1kWT@Z?2naBku4&F&q1Ho(-;5{@ zr({WcbsOd!(@REBjEH4U`9=&s?tvm+xvY21#}1p zJg=ljx$#Pt-|~<}!A*=iQQr6Zk0zNIRzb9?e|pMm)3|?Olu`W7C7E8NTO8eAuF7g} zhj;mtwfhr1^7h>Oj-Rl9wgVkN;n{1S)pxl(1jpGlb@+NDl;v%}yR+9WHdDYuT?faF zvrnOoMCzGNRvYyiL!f0cjdqx07u-xJUiL*t+uT7)o$w6&`u&lR!-*X3mcRKn6sG*@ zSjKW}9|3INMrR3=x4ycVoi~+H^(=HR3;4sYTb^cZBqobi>D` zhrrWWPQ1(hn0>_uNsxJo2SP*+TeiS-DMnJ9@#Ms(D=HPE84Kc1JqT0k1gbEDu z8@)2P-;ceqA1vwc;HBJ>$oj^|xtExG-31i9{yb0OT!iQ=6S6|)Z4_$X7P@FhVjShZxTTh*Gzn&Ax+b+7kV;|8|An+?k6w@IW|TbrL0+ z;7`IaQGXp;>tC8A9NCOoG{*IVYZ@#%_;PcVUDB4%@2vtLjscCPFMkr|7Jfqf$IM?s znYwY1LrE~i(WdQ};q6 zP3~QN^$_;ym3CVSa_cTYS$7?_ErTy+4h)yiPZs~K^0kBMB7zE^g%vKSGro)* zR^PTnSGKQ%+IUVnZ4>h;eD zpF@gMOG_VRncGgiH$A9tZ}bQq5nPG+`kn^&S+$5cq^v3Sqbp~QuI1z9{e?)oX6>=z z$ofFeeE#&yEH+C6#E~PbH-0&kPe1F)`V`{_5HWrA@Hk>Wbe~&v4o9O3v)LPWp|%~A zn}8zXU346*iko@sS*PLzYpwi>$TQJrltB_1zole-wU=7`MIl@CLiY2oX8Sz$gK!(m zbI?cCanCHrQhGG9Ct}a(Nz>&|B?_y3wD(P!Z?i7Ri?dVdS(|f~Wzv49sGlT4vlQ9+ zU5fQtiCbg8z1k*{%LE;mr_WvBI7fM9@^yW@sM(`sY&waUtJ*D|6*#q`!Fsr*LV)UR-!wV6=ddJQHM z>HuMGQtQN?`>*YbIoa4#)Izl9Hq%*#GM8o$*`KQ0)+Sv2>U3|?P3kHAA4f#kxw%t} zd;2mL5)${yS^0s2{lS&8_z9{OXYHpPMC3uObm97=+q!27MmJJ<-r7$dFFQx$uG2o~ zkxe{60X|;^{~7yb49MMVC|UE$fFu#l<{8AP_~+OKKD-!eEe~{E1&Zmb+1UNYf)dZr zAByiC@7@TfwkAkY&kFfg`8F?KB1=Li&crz0oyBcSWW$2VMRrE zggtk|Y7c#r9inA7KF%KH8Jq!^F70gd+XJHGHD_&c6$=Xs-whw~Sl!d-&x!e~I17pn zUnMAjRl34s!0PIIr7VN`P*w&PKHOwIySteSE76vEZ4r06PW*ku<9)M5VYc%g)(TiNaQmU*9CMQM3MwSB~Es#qGQYbe1_HuZ*Eeex zPy;xi&w7Ii70{6i879r`VT_H72gXixcK_N)GkX0kUdiKg{z;u(OBSyLbNYn3n zBJ?NzT&(VQuA9v2n3}dn$|Rj#DR0MXfy2rFdd|M_sLI$MtaV|b@2oTyH_L-BjLRFI zy>Xk}8GjRQW@o@E37%ek0`#;tm>qL*G;Z&Iy2n3}zvsT)cbb{e-ybJ}ln)&8gvWae z>C`>t35&X>=8|RWD-XV{GA!2?v!OqSktAY%SNr)XXMt&pHKu=yuVAjuU#B$N&6wyE zIOPS)LUeMZ=zmp^W*iTsmBAD~M${)RA0IIaG*~S8hv^IE6*lP{w|X^i_DQo)@eP~N zXEYF4Uv<0u>TCpMC!sVqDe7GoFquIY|KKq&pP`~uuxD0$=0By?r!t$v`(F0myuljD zM8DJuzKhj+lWzU%F%oNbF;5@*YtX5O6c{sW7IYl+r&CE3dltg$4r1Vdo)uTGI(V#;~Ah+WSZDe z8$P-3xcKjPB)p%z9|{Ez_;?DeKJ;QCOlxWXT(3(RT-+Zfp0y<9{i67fp?`)G0?Ed+x6-+VO2lYrCBU`=o07&n2w=Xg#m-JVtiP;Qm=GjF@-AUB?WO&1 z#KyRFA_RHo7JL<%uy$G$!8ft3L-t!VI1}Gzmw)8)a!R~n6R1@YWsa<^1vtrH+5}@!s*dw4fViYOQxL1-` zpUI*+0*kzKqqYB>79yC-0u!=8?t3n8J@sbWmgAk3`yTtZxwh=xc^xy`9Fa|7Dv48U zP2`4dJh`8v(6j*>-Y^07sDO2RL&E4*^c*=DC#1e5dRgJdy~ze<4e1l)fyaa=E#5Vh zQ|RciY|DwWv|7yzY@mP72gap#P>(Ux` z9LD!f9p3h?MObb=#o>oTQ)Wc*#LMea(cedl{}65>pnbkPznT0Ly(^AgWIV%L=%jBJ zuCMn(@(>O0e^@MMYeS`QAZ0qzK%}y<84HYPh&e$z=(ukLAZ64Yu;SkiB$*J~J=w&2 zH{)9Fq^-o;^uERzso(kO{)&AEx-Tj`Ix7EoRtG{Qz&=`0Sy@;f`e+{T%xHyEsh;WX zT{ELCHX+M4sAX{zZExjMU#;?ORdsZ(lwD!%>+$RX=yMF>3H1AIBnqduXt_shUWBEB z9>J;y5WgazqwU(ZV(S+NKiOSS3iT>uSle5Rmcu7PwvD~*_%pV}`TB7<-)P97V>x_` zCj;KL>{@=_gF^Zl={~cG#ql`r^H#^(ca@Ug#g=nhz7z za-QiHrK#4~yO8{yz6tHh%{)#q9pG(d)bw=m=^s0-xG;H8_a-`5tD)m@ZI)sAaw}Ud zpwZxJkwd>$jq5n*8<*2iaQL!bHCctjjI<_RKI_j&-L05)6fSu?$G?0${mjtPXV~Tq zm%Yfi>3G=nGUrq9@KByxH@twlWRK+(o?pZ@z%bw`?#67i8D*crH#FP%pzi@ee$DP@ zac7bJ!#GlR(=tK#zLi2Hs$-Z=(quU(*7N38M?1R%k!~^5%+!c}Upv5;g${Gc#q7Z) zEI>ws7Q{@B0u2eyQR?%kovap{ST-MPAF3~S_nD%!VsL2%kK9QGr*e1zY+ku?CE{EA zt^TZhGgf4Ey?AY}{GgP~7+dBxm{W2!yZOc|Y_+fN?r4e@ac;*x@Vw_s*f4qvF-n8s zX~ktwg-kQ(9(J<_BremJT*x}1EmM|!fO+&%E;w6TvR;h*J_%`~Ge7GOm_1ZQBR$j9vQCxtm6WX<{dN-I8zJR`gWF$i4q|#vwr?Bth;-S?@-JT$Az8a*+fJ#(1v@hc%h^G ziPpttlMCoZGqhTDe@{<;R#APJDdj%T4N3FYlLH<^|2i?{s7mrG<_y`mS@OU9#k!U_ z+>$kf%~sqWbU&q|t+8j$1AO-8XPJvmvMjeP)^+N6sVq-$`bb}#ax3w=!!vp=K$LS; z(p>u2V#2ixa$D4PA3#afyaQ9)f6@~W$5?OlF~`va93YO-U3R}D+%S9udX7W7`)d!q zz@vYI6wxE8{ZyffDk!#^PyRSqK^?vHI7`!oQ+aHyx+!eNb8()C$?at9_i1SK2m5l^ zKhHk9&Lv*89g#TL^o>?wCW(7<9t(MAoN1~aB!s82JOUT>-N8qrgs?7kc^R&9s`twN zd8{IR_bSr(bjpi4#{r(oE!~G^URG_OCaG{TYL_{ol0}t0*8Ushp<+{!lexym57nWB zsDr#4{gj~(9p*d}a1qp*)wS@Z_~I7{u5#vDHSg?O)zTB*ytx?gp6IUdW$SGz73Zf5 z*+YLx${vXCihVNI94Ns0-YV z!b?|2hiE1PwG z(2AQ_6_ilI!eDt!@4vruZqXX8CX%F0Qt_Ci5vAX$9q)usx)TK09=`|IeByGMU-}5ezg-4OVrIc!r+~C!?$WU?~7!8lpQ8by{Jw zD7O5Uj4Ll&3NJM0SmCYjv05briS#vn<$ko6nMr>?--N@ukns`Nc#~|XWQbPrg)CE| zK>R^)C2hMXi!+Gb4vD)eQ`$djP}+e&#e4#-_`_#$eNS{ZG5aP{5S?`^fU-3}nJ98& zWqsTNMC1)mVcpp0$q&V_$ytx((<|?s8MgKa)}BP^CZOnortK@=(GUJ`=J#h6%kM8z zuC(T0)_gDJ?x!C_LBJe^fT*MD6zTup$IYDXefGlJYL6!j&aqYSYz`vfyorTNCZswh zZ?Mr^8;w*TjVR49JJ#dG9S_Cr*<(*xxzi&Zjkggx+|vxQ#6mipyyJCWmH$dOpq8h}~_c*Jh}shUe+zL^PIrdfd2kjz}X&67h@L zi!KHRqYrIBr{_QKiT1|~V!rM(SiTOK10CtY30HWsa83Tn!o%JX-EnAezp>3&iDi(J zo7)uU6;3CJ z*SXH+81{bl^L#${=f2my*1Bmr5%L$tz1))3YKIHebt?-pU8Z6Kv9^A&yopr!1>-D_ zMQSNUC*;Bw(oWj|{~~16cCMQj40`sp?D5uhRoin4BGZK7qqO*?W_35hb@1M1bp-%Q5b(l2b`9B@kE{n+~m)^?&( z3zB*sQTt|haw%j5DuU70En8Z{cd7oB04x-Zk*99Gy)uhcuy2juo(Zs@<0T1?zvfE3 z#$xLZ+y_bkGb}pp1C;-BonPR=jcN48f+3EJlhX%mdEQDRHh?IT>rOx-hEZ5~w679T zp$X6yFl1O$5INu?8RnmdDv4o`bExZCIo4>bBv0W2c$eoG(@;AR9lu$P57#m;m3f9X zDDAg3xN<=PMS19h0k%$!k3auD08TT^)PpbVk4|LV{BQ2c$r#7IrY!fZG$-8>Oco%X z>%x`rlW0X3o+t@HZ>R)e?NOvBD-QSkP#H(PbI|Do5^X~1)(Ul$eU%l4Got6U zLd9$DKN<%=zvFcEvA?>eG*VA@TcbuM%26=42D=*$^Xs7Xfn|-63qo7wkBtpJe%$*? ztmY%al@~lCfNo?T)lqYj2fIvwFpxNMB>xfc1i~Hf*YU8u&1u)<5W1OQ&JhtFZZAoA zj3-BX+`_ptpcB@IN^^LyJ9GP(WpBS}2GHZewy29{T(3}ocrFc#L;;K>+3-5rcAlL% zwQqKaTYiC&0b-gr{M&$~x#k6AGBX&*Ak{&!S0f#Mp@L>|Gx-d`3o1L|$=I676!y}>3z|VBImD+PkEe%DA#Sj=nm zTrH|f=Nyz}!<8{*haqNBMqo!%7u!2 zhbwRD(21M7fTD)1eywG`iLQN;zgh2Zlwbgp4rQu3G@+E;3-v{WV9b}3zC&M`criLD z&Jplo+7330MWs!g?P<;InEGL%8*aTBfMgdc-th1x8KDVD)h#$nP0a-^p&#N6P8aIR zp1yRex4;rM2XZfQ{&*z@(yLdsK_;=uuTA|Hkf@8xs#c6%T-sumLQ~~V$A%u5F&44S z2e*v)7PAc%y|ISpEJuI5%cyPZ&ildVBo)==bu~WuH!?DVLcXw_cA@qzKjNR`c;OZ; zJG$8-q;xl>6&MduN&~B^<6=ZIH0PXE6fTY-2ZR|= zwH)t~#hv%5F9wT2m3*(HfTsDZQX?u9K|e^S*hNBar=f=$+n@mm5QDeY|H>`o?df}s*3 zC)@9@JB9LxNum3=~T z_M1fbnJ@lbE}x^U4kzWZ84^CI9xO)1Q=ISnsygY2#u8AIESt? zINmTkp8nJ`j)`l-1wLjA|1npQQ?%!yIQPV=y!4I)=M_064a+%2CH2HWBk5B>B2ykM zb1aKd4dH3q;*-^}8QumNBuu8YKE=MY&-BLfo!3+KTFM{ixuI^B2yOXz$!(Kak}bFW zy}*Gr1{NDvflmG;an&TgPP;L*{{&H}7{=!Ct|0jCLV5R76EL%17Gt`BYMUF`xuhIT z_Bv&cq1%If1m|#nAmV%M)4O-?;=GF9@v>ypq989*WPV*-3`BM{AAwh*<{)NLc|7z* z*aMe1M=wz@w&{Fae0)w&84kZ)6174Mwnqfs@?oZZ+B;G8asY*4duf^X^j*QTBd=r3 zR?FP6I@~~Y-`E_f3FG!PY;X|$#Ex^v%V+5iq|zB%e0GVx!SQo{McLvf62F_%{26R( z1JHbQNL=Z8U1hXYpOss98y8!}5>bPzai~*KB38OFT5xH`vZcj>3U#9oh~XkV0}Iu2 z&!4M%E=`kSVW`liIN2fNxlNRbV%zmHmCODzcW_pz=Tg%71Y1HWzDim_&bp^2GC7Jc zbn+SPUwjA0?2Q|+ydM5&S0cTjKf74G%|}c7cYAs-?061!&Pit?xKrJg$rp37?v4b) ztNk^k%%Pbt&r8_#JNlx3nZ56l;5-1%ZYaPkS%=0v-wzy+J$I`kCyXbB>@M6ksE=|l#E@wJ0rV52>OGV z+IOgM!|MCp6zk9joG>WK(@ZnW@U(Bb5%AITyb$MmH@aLHhQ~w3_ixu zUAF>?Mt{*%O?skRmaHwYE7w|Zagra2UV^{<>H0&54%|00JE(bzRcAX6rjFBc_3oQr zEK+a>`v^{R4Pa@ZB`5p?QV-Mb&)OESOh%XKog}E+IBxYuu43y{FVFdwpOVQPFd~tU ze%$7WqfY_bwGl>dNtqVmr4}C>6mRTP>uz-l`vwz`mh_tW`C!qZf&OhbrZA>9M~$L7 zL%H{+!0%`_e=o9!%G|u4NN04KaFta%qhzxL*E6Zv5Ocg`8`O64*lWf?6K~(iBOdtO zVQ2HIhq^)&ArFCCkff={GVgL>`8?vfsXd&SVzPViT>WIkdE}?YSjTVrFriI+4AvAa zJG^>p6Yi*kg+)jc-_9*lreobe%yBqiYn@rFPKKx5Z!j$EAJC78h-EMhCV8gTe}QF}m|-greM`)atQ6+{P`1rM_TYvM2I~_c*)TgXec0g%wj?q+ zF{PGuiz}%Yo%8bvFNkbfgsRurZ+!X5RNb8uhatmevXIbL{d!ju8w`?$ot!a z-godyOqPX}#>1sMYej9X5BjC=;OROtKW)|Yqa`yi0_Z5Eui>5Q@n@3wQt^g9Yz6=0w!B9q zPQp|MJD_i?FV60Cr;K?Qz8sgi|4KMkLJ71ukcRYIn~Njf_Mj_1Hrnm0uc2X}gd(WA zn0_E4!v*nF)`1vH47q~-(K@PW$aLM!AwjC!uXWS8ReY3IyD;yk0(NxVVclt`lS00F zn9F-2XC?QO2&-(*QLN{h?|q=|n|dx(fvwo^!^bGOJaKr=!^Ps~2Bux|kZ%ZlNa7&I?Foay$qZ8L&uH0%o^ zDsAU@L>%@#F^*7+s8ah_10)~^(W>k@TjnqFlv=+04+ute8$L!>JhrI!9ry0k_WJKR zOQ&MYdxRJiL;K!2p7Y1XDQXM#RC~f1$On%hy^ao@YKFNQsRdw5P=Ut}uG)~kP)f-2EDal>0n?nXY*CXbz zq)mmDcfTok-|2tQ6et8)ux7hhIY2=$_hI}N4}j7vDOnvz8q6j3cb3Gco)C@ygRtaK zLJCw`bO6SBv2HT=d1@E}SN+)e;dQ|Fx;-kzUjuLE*B^at^rP66c}Os(=of07wwjDj zNxI9eUKvkQUxL=twGS>F0Fhwl`w1d}pa$jj&&RM*^vG?^UE&nP*aTU5c7# zykc6=7Q(hxnCO6XIn`4l(>hkSs zl~dV#gtK-IW45Wn#O6B9BCHnknDq>oe8>HDQxgH111KG+fviR&G8&2j2Q3Mjn=;jc zuh>q}FGg0MaQugClr!oCi~MbpwN5g7ym2z!M(Yy49};nml@Shj(f8 zx9Gy|cO^;<-|Zd!^Bq;vdQROJGOH2*32?xRztW<%1!Y4wjOLS6Q*1q(pcWgv%X#+S zj!dHo^#ef1VSrXJG$_~vx&h;t}tu{B*>P~j*$&A)#7C(d_@;9z$TQ*>~4qMQEa$+La-QPhJO|7v#$-8`hyvW zODy)^vIT4$3O|z8{ap%F=S8SVet|H4+eY3kT6voNijPciu@E+W{|p`BjgscuIz!n> zac4oru>cxs!dVjs%G0zTeUs(u#En_8lH(K1oNyALXZuQe^Ir1QO~eNYxC|t-Ekogy z;e*y$I!t*@@&@!epbT=YxU_`kGc@~iPi14wLlRhvg*&G|b_h?d`;RML3R?ej&nTr> z3e4Acs&1RO_sqUjIJa$IP6ncKak-qtpKZ^W|6L?Oi%?x&KAOCA%|sfb%0Xc6NXN6k z591J`uZxTTe_7SV#l^(rYA^twdG^OlXg0ai7l`|ph5nKJ$k;l?iCf|?8uQ|`jwiJ~ zMpi&z4^C8oj%LRciHWb`-%Q-U0l(1Kp7%d}Ns2rx4iY=?%u%W_mweiGb7G4y8&ZM0 z-H1k>wl>DnWE7EUxsrzqX7p6l8vye`Aw-Bn6ADBpmMgOe-P=vZzHg)x6t~(r;= zwbn$tNf8Q}rk*y10vZUcVHVRLrGM{*@ZUSi;SH0KgPT%TE}pTL{(asYRMOpu`6(M8Ou&QOXGa0J_vWg zss>%+EjSq1a!=ML`z9hod|`6?a&bwCXWOZlwVxIsr6CO0KJ zz#ptW+-M}VO@8u8k*_lL2|otiVc>LcTL#~#n0wm z%oRd}JaR+mO8~&&ZC8&Y2_m$@1i6Ptbl?uw0hnt-J1*{J$Co%_h#@W+q+43d9{f+0 z4jq9Gk5L0_#tlB2#>!aah-Ni8La{M{Px-KfkH7pOHdPi(JyktU>rB#`FS^AvA%CMY zU4ck9=bAD<8ylPcN1wdEdz5uYI}~Ib)^j-e)mUF?|JzMvEBw)xYq|a~y42~mU;V0~ zc0lK7XZyl-tt*z<_#}y2b1r9g)?Lr`E`^9yKLO#w?c(@=G3%1_U3o^!SBjZfTdg#_ zI07#fdr61H>Rsql%HAw`CCy?g3l_O+FN|gH-mJ)mu4&naV^?>(|M(V?nu*%h)Ii{6 z>hi9@m#QG{0yV9?x{TNOhHN4i}bxJF4WHX`CEvdKAmbqVYvRK7mDQ2vT8p&)AyJgzbLP>{|B<=;~S+*A>Op3lmdv=x2 zK^)KAa*0q+Y0gDzxMB3=b(!S*W))A>HH%eDnp>g>A8RC(ACdXO3(@gsA{6A_M9fLc zTevLMaYIgPc*XClUB(jWw=~F?+^Aq@M=2aT8>+`RTZ$1cKdfVDTbTN=LZsgXs2;6#M+1{sO?YD$aaeJBMH1JC#j#6 z5RQF=nGNRqb=0Eke)%y5?J^%~v!Wa2|M9wzJa+JE-Bi$=IQt(`vPan*Cer|BZz^I! z%agca1$68^4L zskvQc{P%l28H?nK=(6HD&3TV(+22ISzUEtF(8Q`>|B`%gd!y&(xQ%U!(NFSkehDb~@Tof>MZU&7Dn}vsWauyeV8pjl0)QR4C5re$hv6{HBwL zC3Uu>@ery;bgU1~+x@!xM(4a;YK$OV_tuGz;nN?YVKT*CP=A9&4QBy1X)Ep ze9X8Q*Kd8H5c2u=$AV20h1+}@2c};x$?UFEd0gPLQ^n5H&v%@4)lcml-{mn=7JfYs zDL5j>1|B?4wa{G)QDH`DW@cT!HG+4Y{}7C90m8oejndhrqbl`EaLo_G+jFz2RX@8o z@v8i05Dpc)Vl35*a~R+#L223JZsF?%iCLzQ$8qVsVqS-eJvjD5ud^mi_e}M2F43}zKM^}&^DW)vRJ#{;M zfFgD>9wyvT2b7m6Io9?nTlA*@B(2v@YDv$zcS-R;jl5QGFCvrDORuR>23v~WT*$I5 z{e6^W+Q$IbR+jl4L8lCqVD&G@=hC=SjVtJM*DgU6#hCy|3#E~6f#h{yIG7-Y)Moec zKcYut45&N2H6HegHYgv>*p?tdLbtQ_-X>yBS^j}fJK-Qvxmx$6#?c#eQKo}FBb{=d z@98h!w_Sy~O|l&Q#*^vS-{W3DtPIvr1xL)`P;y^({zp&sl8L9*BNWrg>N1QCP?u{i zKn2)hU+$~aw>^dO8@je?k*r|@U_>wj`EIlwp*u8w$uk5UOFhOPPB`#w_U^5!LGhXK zB4}5H52htR7Z~O>?vt}YK_0#yzD`L~D`7g$sqLb4^R@-5@v?9S3`NCFnvkp#kKtVg zmTmem3#Za_B2~>$c6W%1a{bdY~m1dt<#$iP!W-j@`ZF zbs}$TKNn;2uEloCyrYR=T;SQ=t&RE30Cc7{o5j=Cufihmr8---Zg!ZE`J<<3epLv^ zSQg4IEv;+ccp>MA!mQI3vWpfHBWugLV>&PTcTE}Pvyyy~RoC8}OFyBj)rQOUKz_Kv!MBJEqnfN zBV7;mjhAKU6uip}3?bk)UY_jAd$%e|6w{i{Yzc7+DV4>lAAl*?)D4Lg2zvCaC7& zm04R~%~cR`xWF&7-wW?&n_mk%1pU#f?eRm5Z0zBH+y->Z(vPE|6=S5#HSn2@iuUJnCHDOj=FiId$IW0!@ zx1`XK;##P4Vn3)!YO(WI_mR|r+J~0$vDhSFr0uLKxw~$^LVE9X zU&u`%^!s+DCvw_+d6Ct|?m2PWe#2s97gDIYeCMzJizk(LhgT~r@8%NPb?cV--MAX9 zb=QF~%cd>gvA@ayN#wEbrF)t_a7A3juo?M4;f`N?Rkul;M7K&!#KK$SLY<_*1i4`9 z^WZ$RVc5$n!#Q_icTyNwXUX4A!@Wg4Lo$JT;EI>xVae3rfrsmVuh{6Ovxhz-KR)Mt z_K!O?Z1?ycetP|>5`bQgudaEKRBW=w`{S#U+ zn^v~a*Zg`GXf9hU>{i=ClY76&{lVb6Ri2xh8zY;sU)Q8nE|27#_zrGHJ|&W%%E0RJ%{9U8E5s-pcVhbjr~qsa62BLx$* zf5Sd4I?^};ghTZ9%2@xacMPY15fVA(U?>PgCU+rDYy0-?8{t)t45&^3u)p@;< zzu~pKYah; zFWgsQ6$5-5|6(xm|3`d~EGjB0AtCYqGd>6~76h*y069?lE4qiX&zoB08V_MGS8+&# z;Pw8!D|1M(!gt_!3x~k=C1<1J^{0MH5rzbhIq{*Y)pX`L@htwVafZo|scrCBT4==d z&wen&cR}rB`DMnS$YaJ!S!Nyfv)-?et*`SFa{AH3h~9Ltx3 zrD=HK^uI3*=n3keuiz7XM78;U!UrLAhx2qyyiD;k;pq!SW-m!az3=qNbo9m}a52AD zAM=<+w+~(zgxQZp5KIu+aJYap$BgTHszEtI>aSVxEaj8S^oAlX7l8E*K(eS46dW|p z|AVN`LOs2BfGRX(2u~@RrtbLPhvG+1fO9=b>;CluoN*zu*;UgwY{utwj-jN}mps2T z`7Lq)P1lhTqLzEoWqMUi{vlOk;Rk}l*5B?_m7X!7RYy4r>igY{`7GrMAkzR)*0>_ zyoQ_`GUH}jA764qd+Blu$QE!XFe=I3uJ!NMn)zfo+(_j(wM~-WN_TkZpPssysogpC z_ISdecOP(y+)9y{VVg+SCBZPVtiL%t>Fkv6{^VlN$e8nKS+ZGh`;155bGnFtm5|f} zGaQaz*EZwj@nnov0tS(F-1XNJ)6efQL-v>BNVfl&F7KZmAW}Kdj4+8g^8d1@-x07< zq~}YG8P_oTEg|=s0~tB#!jz1BYD+w&5VZ%ydAE@GV0AraJ+0K%1X%Q%U@v zHSs&~)dgmiyRe-gzv7E)ptaqa+249{D>8G6q8|)XEUB zhW7k(tuy`?nFVO7S1w&Lh@lX$yZgw}X`0uputs}F@PA;mbD5rvuWKb6nstH6yoZ-n4iywf&~;; z+isH1%)3r5B|(9){ao{s?@2Q?G5BjK(p|_@Q_b%Ru9$fRGcJ_aXB^i_9i|-D2cr!C zx#=@jMb9`6hsJGFwa(1YGggo&Byx0vt-HMUmiPc8&r!&$0iP-NYR5kkW_ZZ~fe3?1N9rd}l=c zr+P>$w7fTz+-cv$JFCHH$9yN_u1wd;_`mPVyq${r_*Q%KlG`>h4Kr^wM>9gqie|Y> zU4I`>KpusdJb3>gB&Y*Y{7heFti?H0DdKq+%U!(v_YdSL6zv6Ils}`R-@`oX)eA`w zQWg#dNB{lhf1h(B6LymiI;%529F`HaY*8-srS@*;cTcyQ1y&c4)CF8Owy@87{(gQ9 z3>f^7jK)_D4jB;QebTO;onDG-Sf$d6&KwVwo_?K)OZ@Y7!C5X^{w+2Ay9|%usnIjd z9iRF>)tTEMl42=W;>=4wI(@TAA_f@!Wts`c3C57?e`C+=4??UnQz}w=Ot0Gn5geLJ z{fo;b|L2#cpB71kgNw@;$WabHEp=bgp&7p#!ex&5MWjr;SHwzB%=igT3jroZA)r+y&c-!i4kpZyjSi;hE-;Eh^=f&(xOfY>YXSpI)5Ym6H% z9eF2yB?XUVT>A^9moP&oBZE+a0&Xqkd${K-%GBDJ3=3lyi@r2c?mB*kd zriLi4OKbF9^@nHjw?x^Xd6rkjG~ir6RHNM zI})!oI^mZ(f?zt|ochKFvT7LFcq(cu&w4<_rysH;yP?en4S5}u6qusaK3JDJrN|M~ zrDPtS&$mhbqhY%)qyB!AlgY;aQ(F5`$PAEc7!<(l;V;ufP%8#RD9AxI`!Bg>IBN7a z?FvE)j$|qIQ}dGG(d73t?`h*4)KG3ky89*rL%_8nh{BA%#Affh(Y7^@gWAU}^;Oz` zU#lmN{Y)ALGY>ST%;R*{LldtyWEBHQ7}`2b9UUEqYKYJ)azqNw_7WlTZ?tmeXC9pu zt$Mg&0XbB^(PN_RO$lO!{>`=PvjTTirD^^KZl0qoq^}Z`Nb=`y^31;^e@5aRFv6QK zKJoSeag?^2g<4-sW95DR@+Kx@8O5BakkUSFv76X;%v^LCNk%CKv5Q>Inp{oKO2kgO zs=j3XT=+k9r;bgGUu}YY?fM;Tc#KfP( zl6>Y)E+sOVBx0#6oY+KP;V`jaoUaw3oh_S2*=9HIT={g^9V5gTzQ&GIryUEZp?Bd% ztZbB$@M^?7eDCD_7AA_j(DmE+C1VLuHf=v~7?N-r)wsK!zmT#=X3AcjImu6mb!bR% zjWMhL2`l^mkxs8HL+cPy$nUSiE*j9OOyOl5!gQl2Z6LBabLLF_@={De)AE>5tYPO@ z2ohqGu-7@NdRI2`hk3QPBYy=s>`KRZhU!XmwI6mDe#$Rf{nb+md)Wz2>aUw>YEjL> z-o7Sm%sul5GHD#af1f)RDwMJ1V+*^vYf2BeEs z?{7sz{@R5(NiVYobX008@qeJs)rmc*XnPMpj<8*8a@X4TCfx8_ueMSfp`-{opyB%^ zMFp3r)tjzlJer4zc+e{zc%NP2lWvCw5}xvX$APN`zA)O}h1T&ZwiK1ITXwMj23bb) z9=B(bkCU12rnfJ)`{Gt%kPHf$JKJwRPA6RWRxBpp%epjmw)zs=wAD)HWlhRD(d!4K zS;>tibV}z4Hc$Wax2g2|b}=W!Q(Ur38cyKp0wNdH_pZ$R9I+%hKAB|ZbFV*z`*GDb zPv1v6t;UDF&-mKA)R*jU(;PTqb*~>Hjb~x*CsRva=bBuU{5iKeK4f=Wp3i80cfb4Z z-+6GFlss~7-$=ZN*BQB0J1^FM>d{t$%C>*?q00w+Q5XHE{Yb#RAH%Mj-Sjr%I-EDdf~Dtyio z()k_?P_Hvw;U16vcy@z4Q&{`0sqm)4vEnd!>TtZuo=1Hp7yE}e*Wj;`^=}SnE5QS} zceUQ71HMKk7sqT312uiX6m5mKL2aA!}nc$Ikm|djKmvX zzfvo_s_Dv<%Rw#U3C9RC_^}`{*!(!HkAr%LtL$}0bR44x_1){V%6u)!b)NY(U6&3h zIlhqWAFAh<%(PB>;Bi;6b5yz?k^ZAdh>quA`NlC1fw~fpN9VQsTLSH^+6*-%`&*){ z8rpyM{)#_t*uU4c4)?K7&84or{9%eu>Keelv=;%|es1@^`B5JCFlLn}&b#AcSSkxx zX}=2iBvnph8`qwzF6`T;a<_gYo+qwy_r>9FVIIKXWAQ)rH;Ga7muGzeIBMr;QTfO{3KRB)Ypm z1#{$nYAc~9iUv~7gLaY50u_;4C6!lsWijBb9_$TwY#%G%5YN*P$3cXU_LD8iTOhMrdZdI`E2$GZcLr?n^}H$kp<8Gp`Ne7{A=l_ z9|*!WQrsZ30E+a|{}^IVc(!m)MA@$rF-r*6+@teqc9>rL^D9{1)4`kel`1BR9kSu5 zOJbSK|AH9ky4%@Ks4QnuK0jSCPaZMAI3R+hxntT@pm z+_3t}K8F`x{)t@jmWfLj)FVqs+(xHO;+a`+ujRVm6Bbod2O{x@PjLMlUdJpZ z?i{M{&$Y{rzCWYRQ~a;1GliL;&{1ztcqTqn&>Si{Ig3S2N|&X~aIl)0SGp_;Qig9( z`i?9Yof5q=LitbJCHdWx2XT#5s9A7-=ya(^yM@Gm5Pka4P)AjoY@_JrpEQ|plQ|hW z#O8mjye#Eb{I4#RBFv_arsR%MnG%C8;Yqsr9I7)<3R)ZR3|i018#;gRE2_Lds|oYG zTW`v(T#aaBy{7NSB|*9YQH_N>fm83NOR`-@XUtj=Q2HX6D+S(|#ruMTm#?6oCbbdk ztcN3Lne^U()>h1ve-{6`Zwj}6YSxG>9?Xajk9~c2?b`KWzJKt_Mqj$OKXIm}jkhOm zomF5I$x+Q4&Kgdq=^6z^IU8@H`7nAMg*Nice4L0l>aYM3Y+Tk?t}s6QI`ka}S+DW@ zNa-xx)e4K?t7mu1WGDCuSDDy*knA?Owp~@InUn-A|mj&Z(y&b#cK;7Z$=HarzMxU%@{w)?ee{xAU}mf$YyPHqtPD2nQG1caS2>3J^mE z?XSm}Z~(b_v451mJ*~c_c1PIilO0yvYkKPAFifnJ`dV%4Fh+3g7zx>CTYOTX?dpI0 zyW3Q}e`L9JT6ivn1=HfS_JJJmxhGNr$Z%d1_v){F$Th14g4Lt3uyOFKMqcH48r8h$ zC&|Oqm*(AKeiNPJ5qU@PZ$!1)UNC|-zWGj4_$5DoI%TuavwQ2(DE-N|Spt_XVlyB= zIlEdoASNj2x=gGC7djJ1x~{m>T1tAt9f{;j^-8&FQN)JQe=HXZ-s8g_q?-asA4+8C*mTN5rO z7dkiwdZ(_wQscu8Q0#b~dL_^L-$lyfF~o4{73MeLJf9VKk8Rn%^1ny{$aj|xUN)pX zA@u;ifyKKg3Nw6!)DM0emh>ohz=WZt+Fhyjwn41_8P=9?m?Cs+?20?Rt zae}{n8IEQ0l!FHFrKjDC1Px-k2VT|q0A(R5<8-_(bI7AjpfK1T^ycC#WAMi*Ewm%# zjR~_oPXNf4*Y8jj_>?@VjFl{Il|E;8F=2jUEZw_M!>BQ*c6a4?bDil3C~`XY<`AYf ze|G~VhB2-$Khn0QeQ@W&CZ3k!X?^u37JHd`(_!<`b&>P)dUf9iH->qJ;&b9aU`c<6INAdjlxK?v*tjgj} za)IsJWm!^J{h6R(*SPoo_pcw1ktpXw2!sS1;dafAQ#v>{dt_#O$T_4|2>|h54%1C^ zAA;oRG7iL_el277&g8r`&eX1NwTi23yLWA2UIywRvYWwm-vfgE4iTy%*=h>E?mPwW z;cU-_?A1rX6u``g3MBNPn&k43*My*wRqy>`*D>>>1tGw2*rB5tnB) zc{%QZfTlK3QzlKES=64z1_6!W3J-%eo>Oyagzp775Y;k!y-_+{1Np0mPqbiA)f(6i0p@#S<*fn^By`S#+nW) zRBhkE)~S8>Ktic{?h6mW^arJ2(KH=Bo4HWX8M=hG>kL0YTFHni!gZ-Dhzb1getW^* z+x)g2zcU|zYGdP#*JU$OF=ig(gglzuLZg;ZQrJ2^J?PHbcoQegr;%GZt;=N{_thjx z!aaO+QLDyccyNToY1wwOhDBY%s9-|2&*jN z2Hs(sAtc9Kl7}=g+9zUb4~CD}AN26Nn6vRGd;?O*s!)n5-CR#{qvEv05$^&{BS;(t z?my#3O<>ZPR`_!^{G_78Ed?>NLafmFkE z1&nMlHG<1T)I0T8aB{FOk)o*jgEaW*m*&bwOUe;qj(E#yt&yc4v|*5vgHbeB*z=Ef zM}sahB2t08!sLJQ3MXm`pf1?6DIgAknKrNea@izE>c7$%++o6S$s;<=fLgFcd_7@k zr1ZWMY21MW>7$Dr;PH3|t8LWJA)2~j!yT(7JUq2v2yWv$k$|Fnz^ej4QOdtSQ4t-f z9JZZHnp^ySN-<2_V%P}&xDUq>H4w{h!j}iKGDKZMAqDAMwq?e(<$`(~xjQ)oWT83# zipe8YNjw&xZh@?RR_!{~Y3$YGv3^P2xuynMPK&n$ZC%A~%(ZR3&av|WKiAF5$e2~> zHoRhcazkyxe@9KP5uFY~W4X8;)R#91J-XxT*XXm&6W{&F9V!@B0nF7D{ywaG`sofb zpfso=M!ufr2Mjn==ad;LVqCoJEn@l&41CT#@(oqk&g-k5ZjV7HyKU2zEl&sMS4??~ z6X(+kGKcKm=gcza(e&78y@`FY2Q#G69LwWg_%pJ>bwBkBv$@e{ISnmF^%z89_=bD{EF$xM(-l}9R2CB% zz?UPyMhMvo5D>UVCXZOuz+bXyp+C69pRA0c;G*>}wASWX-X z+t4t;8j3-f(&+37U9=6@KZ^dEnv%LLo6l*&*sx?hXkM2Q=sv>_HSgU3S|Ex1W7h;zZ9`A)gxEt8TOdiWIHhrgC41H7#X=Rm>PaubJ69h3O!z5P zCVj3^w0P1o@8HZ-0ZBtZEY3BlM-DC%W+3_`7`nQ{i**ru*&{mRM1KYZg)i9C2-jBk z_Gzl*Y?fta*i2c@>-5m(phx-#KRC$gIzClJJ5^TP7Tfnp3&a1s2QihW=h5K_FDLRr z5*AXKzc_k&OI3UxRov3?XU5K_tne^Hz>fZagygaUwdkaohdg8 z<%2F<1lN0Ry?oN8ed)Z}of+nUJH!!Ps4&6MAWM<3lTu*c2_WBd?9Yix{{gYxxQ&DZ z3jo}rY|RX222;w$gZ2wE(6)Ot^xrwOc%=_I4d}otrosK&1rU3fa^%)eSpZLF1021? zxjDADT$Q%C$64$j)?!~`{}+4wsH?hFecA`!tA5hw7 z^OX|;FM89`M?PgCc2wNf_T4QldCb$oG1{i07O|>3SvKQnZ(Z`iEoGw1K<(p_2f~ay zNEorc6_qMLAy)#UubjD;YaBEm`;@Q4g%ZQW0iutCObT1+%IsU*4>~+Om@>t(zYAHr z=}2#TaAn`@CHRCR=p9sepxnE%Z*|I^P$N>x7>Qx;fT9SO+G`*P%Oax!UMn3h(el85 zZsiWjMm`lVTY=B!Vt9n^cF1gQ7X&l0FLB1GMVGD>Z~s{x32Er7C5Wk9pnadgsHjQW z9v);soe=-(P?l0QXn$c2$fm@q1ro!ZfyjzkG;`{)wbobu>uE@cP?^t*<UUl0tWLP00W`&p;Pun$}k&T$J~(j*L8hxd9k)a7RHs&pFi*GUZFIz zYQddn#(-4+m@AcJA|;^sF=p2f!l(`ggVAUPq@<>#q(JUv^od9Ak8j<>?xB>kJ{P~q z1=h2edN9!?YVy#Dkc<+}kj<_Nk+<-FKkK)5^Ch7e9tMUjs;x$h34`_L*0*wabPtLh z>pn5?ai83ceOEf7N55b6j*3Fs{AOg;wck;{bzhu4;$;^xC;-70|Ki0-$%lPV=_P*= z@k;SkE(^s$XaDdUSWNp-M!VP{VgkC8ckhW=&=)K*`?)edPs68iZ)&!sE!ZRCF=6rO z!3{v$27#Hu;46%bf`2DbZ4h~Pp={^K)go~BCE=pss+l*0{;REbQxT_uf$okxgz`gL z@VGZZ0f$80f?NLITgQNaN$t716tgnP9KwVnHcrEY=AgHJP|clq>xr-_Yf$`No|j>G zpmQTsp5tTP<6sQm-Yk9kGIN6dO&5t~gU=x6YY@Flk9S6zNo2H-iS)Mi;>8JfyFV+P5j9{__G=VUvz|t3VRPwa z8z8^LY`+i>KNKU!s2GWSpf0-=<>30TbWE)Qbrpx`z#~S-*@1+4D3yYm__W=d@K}8n z-Z@_;(sF0Irg#Y9nxT}qaI#{aNGr$2B}_wy8J}IeOTkDUAE*g&Fa`t!q%0g=6SqNe zH(ajIFaNIg?}c+PL$zi_^cP^mT5!IVM=9ybM6@y|4G(Td*9Y<`N#ov{orf)G4e0l-DVs*J#8zG%RyW)*lTg{Hq)7$XZ+;LK?BSOvm zzCt}{xG{KKH*QEB1fxh3(7hY z?h#~`ceLJ6n@45kGT!T}j8?T??RUj_oLMjsk(8Ce$=g!+dVGA_k@+RYD?BA)LIsGD z8_mp1uGNT*ak6va`)0fK)3MD9oKR$50Wq#R`E-Bk>@(cmlAMB7kYrd8{G-3dVWP!P z&E+VI>}8XD6m#8P_V#mGJR(V?jk`XV)*p0y_W-Z7%m&%V)f;0-le3D`YG3wi6>>6M z=ge5*j%A;bRr3VcLXLOTDmW=5gDF{`=mfFyC_&W$ z=*sv#VO$Y@S~P9Pue7-ROctm9b5|&dW)@DUg6bdP`T8r2dnv{NofBMg#VPe$o?m2t zTGt8hf8s$sccbsGN9~$U6Cqkc>R7YR+xa(MHsBa*{c^;~L-Aer!OZ3M`%leH$lzVX z;(VSf#bD#dL)hU!2W+3?K)xXFvY*xQOMcE7F4*_mpkxeQpe7mZ6>Z;$8m?RC%mw^T?kCVd!b zM#X9zskd1}Uu%?;_DdN3xAIpS=g*^Bn--P*$ypqj?O6S)il-NL>iamAPJAF$Z(2y! zYdpj0Is+7-kh_4RJdYBeAVIoY5fwm$U(M&c5oT&Pz<%25^l4}J@zR?+O>PUgS{)wV zrnoJ&lMb235d6MTw3ui!3C{2P^LZQ2OeJc;HbT}uOW`DC zErIxT_S(sCvhJH@-)Ad-=FnMz!qe!aA23EcS92Gc7kK3K&i|5kY?~~0WpA>W@rBoQ zkwIESseCIgtm{*@gUyCD&iQIw&p{skn0GAs=!kq&#rBLJQh{|BigbI2ak^p}v$m{k z7GzY#L7ge;VcYVn1MY9!aOP0teZjKTFxCpkM1}cPFVX+sQkTw}a|Z)Io|^7|^@X`* zsYqnJcd{<;7QgKByEld-XLd}8@F)r1%0T9iEr-!tpcZi(Z1wE4@j_r;NDS=##EsFp zvd#*RqNyZGnTjktp|8&lfenV@(*sw5wD+L~Gu%DMED& zRd4nfxk53?pmMmG@;eBa*223c<|ZYW=D zFt&7mo^-2Iw#pOmilUCTZ+o~!VkmRGqJ~s=!rXJ2Q}1>@oEh>@?B^2xg0E!1XCG?B z8A@=K_h)b$^ztXC?eaEVFIZu$cVT1A5!Y9BM|ZSquV~-4NdiaGb2Y8KYhyZ-5Yrvq zBFErew&=B?P|A`A#eoxt%XB`aOju%W<745eV^zpxQ6A1_^P zwqD;p_Eg2F(~cteydxz(+_~HOzR3NE@|q_w2udt$b3K}7z+@IZj1Gt_*cv}gp4;dS zI&s;&aL?vF^gK&iOq$ASnRe~V10)=lgWU4V#p#sZB63+hbkjW|WSKI$>gs=*Y5H;1 z%%T5ukGyoDL(WuMI7}mD_3)D-@(!WE$Dv?yOGh4L1!2t3^sQ>t?qKLM8+v%rr|SGV zMv+e!n`^kEVLcbr%PA5Nb94*a`jzR=)oU`YMr&v@WY1SkrDoq$h22Gl@y}z{;zD<> z@#N-b4p=z5p6v~1K{jHaNg53iUJ&lT6*{^aWkE0rF79w5#zoD%e~oM)Y<95ePfC+= z7r8^Z1s%FW!RtS;-Nnf0iv6Z~>c-YERe}nkYA>l>u~Q)3b-7ko!Ws8Yne;bmKvre# zKsniKD#Ijn_u^g!96HAoxffVvWUC?1LOOdVZDU*0@n0j~ZjqX#xym+h!djucurhyF zsl^UXK0dyzq}=H);6&zH#DmZ@^wcR`SZH?%xHhH+4{i3_^ z!Q<(?3A!hcqeh9goLMAnKnc`RCWZsz3{^0dvZ_tr@e3+Ur@Q{5`ZqR+S13x0tw6W+ znrcfOY*Fo_fvZ*qccOV058M=q?*$uyl6vkknd)H1*x2z^*3vwGo$D>>rEpS*_WF7S^~x0>VmTl8sX18Em!X%B{O+SD^i8pb_GEBlSh zKEEvY<3qqYO!H6Vq<&YcyHeC47Zdh;i#HHLoaS!rHN*hXTZEF+rR(#@)-Em8_`%_v z-pz;m4r7!NFy4FvI(l!y&+MRM+DUMcMhN2#H30 z&W9T68KrPmMOm9-_WjRl^XW{>l6PCYhtYfWyn?Qn<*hZMA0Hmi>=j9U0EO-LmxNgY zT<|Q@jO+HQN-y9|vB?j-t%XChnwjbDqB442sAymI;#?HXkUiqH_3nX9&JyD|yJXD| zF5a8?hc)ue@ zCh@e3F<}O-uMW7$`mwySiGjC3Laog-=(sU2WifIryW-cc&ii?EO&RObmhDZ#aO9@P z3KyD(StCDP0s9z=k>zX!zx5)?!9L<|_{z`H3431rk1isp_CnwAW7uk^0{d039K8J> z!>!EG1EHd~&@0C7IP>8>ibt2uI#+bffq!P>=hp5_u3-|s@cnU%uLlE;y&TQax8>f)mLg(dyE%AE>^RB{v*Md zl7ttlo6Ci-Ro*|iGjqN6%9#-hh|f=vqFXQ^Xx>fxz9F0N3nEteK+#|dj$A5d(-!Y} zvU^v>6tHGz++9~3e!M6&(hm7E;UqV|7zrT6b`OL;hVqpDy00Iln0SYJU()Oy|NdA* zHVehZ-%WSZm!f0|e~wjn_3kayUs`gDUeC?jWI=kRnvk%^Hm?nP@MFLx3y*Zspv641 z0zO%SNU8!w57Lg$=esC3nqZy&BVQRYPm7XS^;`PzISkMw^D$yw5RlOqOuL9goUEz4 z?2gi~;j97GS4G8RhF86xID-ad-?@@fGO ztH#UPKq}0rGNqHYojY3v_F)SSAx;;Y?OT9|VPue6Jtb?5!Y2|D|@9lWJz7Xq5bH+Yj)*&`)i2Ri9P_H##YjU?E> zr(h)K-1KlOaA`^Q-~UQPC-&Acz!5%Ub6N?Ou{94}=czhORgsB6KWNcf^D>E*HY=DJ zt`z~@QBzY}-wco|V@H}!3nIp!PfV%<21IZXEtH{8CQ zpcgd^T;Rd8OH1fUbRq_z&|-x33-(b6W>_`o=g!t858b5PNwNjyDpr5IeWMbs_`h?m z2sZ?nh||_e$k?!}AD%yt&lp5H%drX;ASRi2jdW!#jVp zN)m^zpDsgo;oA)3*s1m3VZpI;|2zo9B;h0-?i0r z=9xn&@`Qkl3sROXCQGb{6ef^0C;HegZz0G6j;^QZ8$P zPwvZ+0<;RU?y5>)iMr97KJw@5@XuNp$gk1S&3zwznRq6Jo~wu}u9fAw25M%V0p>@F&Gux`Dv>BrNX3Ql?8Mz0~&G~{fM z+n}nd(klODCJhhcO!UwVEmArDf#t z#%eDv(ECiajP{E(h?@9M(HMcljh|mCfQQkTMI!udyq)kQ-@AnbpV;157th~)U(=~@ zt@WrYF;%|sv;IW;7PpLc^O+fPaRGD28EKq(iW+PB?t;3{V<_$PN`0KWhd7tOXbc$C z)2B}hG4*FCf6bt#H5HU6yV6UlQOpY#G=K(18a(xB_Qqh&C0ebdQ+sJ2OMY?LRz{2n zkdlLZZ10MO3(W;tt_LC~EZB!&YH!|_Y$JhS&AV~nO zJHdC_!Uh0$9dPvpBfHYgrGI^XdxMp4cN1GR;b*^}3oQ~%oh*>-D|tL@J$hlMZ~s{J zxO+<{e9T;Vel1<_;M;6_IEp&84Bm$XMEl?WQ{9&aQn^R(W=F;%krGjvRZ`|5TPadW zWJp3O$&idmrmayKDpbgn%yXG#XjCF(Or|)=9EC)<&r6*{_x|sv`{kZ5M~1!k`@X;5 z`mOb>=Xn;r`s}@6xu#9k$8B99Q`+NeuCSRJT-hefsL4{mNSw-@G>CI&YU8W%x%%po zI5-NgM@td4*LzX%nkSzb8x}26=-Q*Ae29D7u|AvTi6sBS@_*M7Eaym3wha<>(;Ps6Bcs9?FG^H9mihll0g3Z?~}uLd34h+dbvQjCg@`s3)Z zO{`D$E|@7pEag3(*1lonxq+iB2T1jkFE254?79Du_vTp=P6tWpoavzzsbbBuZMxa* zJGX~fsdU*@ymriz2*?U_AXdF-ei^dU=W3`x`=-H`0<`Y7e_k&Jf7M4b!Qn!WD{#9i z_V%Ioxr~v~zCX%|wB@|bz9^}ccIB(%IWpsbwn~kLI3Y!Yt~5l+!@cxvimCORg2Czo z&d#|aw6wHIW*}xDeGcH;!26+zXDl8UQ*x1-kx@mtxmWG@y$EaK{%7ADm z)-Gi}vZW3^nj+KEWsYQl{IOwGCES#1bsD_^^W~nKZ#@waqSYXfTY`0ff(vASUG5t6 zHWCk2uduE2;&{ui1Pd10ZC;RU_oF^1bcPw@(SDi0ob3~@kIRQ43}HebEsCEsd! zio!!Uj{Pl+OV@(E%-1rRLp zJAw@$>Y77R5l!sv*w6K5PtXal+bE6vmk<}=p!IVu%TUqo#UO>l=_Zu?QxgG57SRu} zuqXh#+D~%BTFcjHf5~ACdQAfT3IWhlni8tu2{@hRF=dHb6%$7t5~IV-J;8)!pr^N$ zi&?Y>p@iS8j9o<2N4Zl+TkfPzeZT7*WXx?F(z>s&4d79*{k|#GAsdfmm*>}W2@OTR zzRKD!6LiFQlx@UN;zZy1!*LG8fc5VVBS#Jj+gmH# z7r29lVTr!+%Z`z*qON4el&-X(!8Y40ilaAaiAEHu!V{O*oEW*dBHZ$sK_9!rFVOZ9 zn9-31CYx!>UD^qI%qN&?UH^);D{$q`jWaVm`_IbPpOdR+S+CKNC!#Zz+4puVzyGQdAwPvyQ zYP-SR29{I?Bg)>AH%JwO90VH z+PtbA8GVR{4UEsaB0+tXM=J%Spm@SdFLSdrZLISC6EIuLM0%l~9e`saOwMJ*97{9s z$L{l#rW~8Js>|B?&kR#9$@XTSziTXCBa#}qj&JXseTUr$lfgHGfMhj3T)KazcU&i6 zl=B(7Gv#)du>E?9{Meg$M17)O(h4L#bl5|5rP=E=(@uON=1Oj~$VLzY^TgI?X}7i8 z=lp7iCp)+kBik?Ctow)=;+j{~KR;A^b93EJ$cy8)GjU491I2*cAY&q$_mX4(8|4@5 z%v~azdbZelVSYl76I6Wn>O$m_)oyRu@13+VdBWYzWGd!}$E3R=m)yL<0tbEL0n`Ok z;ldk;obngB#N~10l*(fspBIiC#S^`v=va(Q;3Kq;j}>+mNm?fJ?I=5(wj}WBZrQ#K z*$+RQpNem05HatV#zrrT`To(SxM#}2ehjwQwyowhwWdX8yFck*qL z@bE3U*xZ+BY>w=HLcdO*qnB*o7xG%_djrD`pHZ4uuWd^*3`O?81pFkV3dWx<1@1mUMxhf5e93gt}b08U@yI5@Vb+} zEh$NoW)+)AmEJo2%U$G2wLaBS-F&{5RMg-ab9ya;l%$n=?J;mU4AuVa7~%mZJH2tnScdqg}N#BDA?Q&u2S?*QBZX*i8$}HdMQi z3gb5)uwL8FCYXNHu@{^fz1v(#d}S9;g`X!3!qkP>PVO&d2Y5*dg!lkB{%-r(F5Sdf<$RfC*s6bTrqK!fnoE!oyD;96(W9|f)b+_n2j+j%X(FMZ<05*T5(eK_%RD!mo8e9`YOb})(C{^%YHhgkMmMdTVm6aCnc>H{eZp4G z(ycD^TS$n1v?fKo_C@}C>0pkTlu0>m^9OB#LczB|EL=$qApcd*4!62*bo>H1?_53MnW2Qi(TQy(@noRSo_3U#y0qV z=&bshcl@Zvv4{60U+TM#Z1WApeL!#){-kw(>_t!P@UI{pn!%@_xx};-kMs40Y-y*+FwMos2p~9)mVjV89Dfok%Hs{@m1UDKZmmdBf zk}LkPLeqXEDK%@kdi_JkwPjQ>bit+v0@w9|^?K+Hrucr+KNDvvdg61gYt~V#%zTAPtI>XN$n%mYJNJ;~EimaoclGn$ zY&$gb9?&$&sC#=KcVgrzF1vochqeSMhMwNJauYK6FliAG-Uy>|wu zFFRqb5zMId3bk~DK^V)GTl3bghPKet#+U!j(pTelmdm6S6cqA(eYoXyt2xmD*?j2c z?lpo6V~wWQOU>g>#^}BGVzwu!MY@vm+|3wR(338)-nYfwR#{$Ac+PtHPpwPY2;kyo z#CB66X0d9Oxa2juw8*Tx&^d4c0o-W4UQ(H6T2DKQBl%Wkn=;W2n)l5@WzP-X&x^)1 z0fDsQpIvK8jbzvM`ML*49Th9iIbHKgo%SDn)l#ewIrm?=+EF=0x=Fef5~J0sJf~AX zxIH%TU^yo)$gjM$npC=a=Gs(-lb(};Bn-6CvMT)kPTudbMk&6O@GKll&&9HeLF8Ru)`uL%5V>+H)G@$Kj0_b7cZNd z8Z!L6_Mobk;zy?MsBkjWRMa?fYJp!CszNEiVJ4xfZ^%S`t+YZ&FZF&;My$)| z`~09~t(8|kBFPr*se-1tTz%Po>m-%C zLf$vcGJ;meB8Ags!~y|zqL8#iU4}8G+E7my3>-rFeXLMpO3_6%hLS z32RP2x2SoIEb&lN;>sAh&D99Tu}JRK|EDOZ5j$J0SYk2e6+N-Im_~{qj$|y1QW5P z_9^-6c8?nJLz~rxev63Zj~+xD`J*TO(-_9?QS?1V$5wI7^M)aUaz7tSEsQa?tv$IT zy{2StqJigEMstQE0dITbjO4O!cTT$JMAz-yZ%;6AP!t0Cl$O<(Xh_qW#+PXWev)s~ z^11-G#_^4pvcnAY##{ZZn%@AB7OyPqdHMwZs}W_EEnPm z$E-)AI%3}}omy2GlXvuy7ZbU{vsDwB3_+()K{Y#(xX#>A0~VhK4`~^es4!iCQh%@Y z?!1JHtrHE|EM=o7vcTKD!`U6?mh^&4$n%(;Xits?g*NW-?drnyEklQ+NS7_{_Z~6M zB6XsJ(op|`GfO9aF}>=(j2QAkc!y`@W$0)RGw+c*Y8f{A<06c5MApY2RGGLo<>v60 zlTZ3pvf*dN^sCF}?jP`({k$P#dMO6%ankA~uOu(xN$6QGOKun&y;9J6Om7jnCiXf= zqyo}~9~OPc2q^PO(;MG#N4~x~qbqAP!~;oGSXo5_z%9{bp8~(_3hsEBdiO(+h-yuZ z4dz^PijUsFByDTnW9lPa1zJoA%PpBLv{QLuYu+FfxbKa)dXytm{kGAwbg{~AiQEBa zUW3P4nyrGWI~8wm`MZ~Axm-4GOa7Fk z*|#cCuq@~cY&ile_8ePV8pCX1eD0uwiseQXPTN%DKIYm-WkE0YJn3>`;KV4_Fs)P( znl0;%EGK%tMi|&dRi9?#EO;;RbMkEW{DJUj6zBoXX&imCbu$48F;g#r02BC?<+IM#g`|e_3ee z$3jPFKB-1?XEmSgM@S*X_5D#3fgtJu2hNMI8%;^Q5G@_Dv3}nVY|)@4r=Y)THNP#z zG9*j!i`n&6x~uE+x!Srp3V$a=vpFke5i8w0*xg@A zYUm)DSIu=`N~EbVq~YPz(K-(PFV(H-Mb!!8eV1422x&x4uD�AbxHKZxMCo&&Ojg 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 Y@u9GY^6=g-i}2r`T^cH>J50R(7s7Yq&;S4c literal 0 HcmV?d00001 diff --git a/doc/fluid/design/dist_train/src/split_parameter.graffle b/doc/fluid/design/dist_train/src/split_parameter.graffle new file mode 100644 index 0000000000000000000000000000000000000000..6e2f13727d082dea7d3deaf99a43189dfaf29f3a GIT binary patch literal 7812 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 W^`*A*;iCELkN+QyFaDe9fdBw2K%Nr- literal 0 HcmV?d00001 diff --git a/doc/fluid/design/dist_train/src/split_parameter.png b/doc/fluid/design/dist_train/src/split_parameter.png new file mode 100644 index 0000000000000000000000000000000000000000..1776fb8c4eb0f86aed1cdd67f54d8a08a4e479ce GIT binary patch literal 69134 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%0Au}eVk~{6{Key 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 Date: Wed, 14 Mar 2018 17:30:05 +0800 Subject: [PATCH 002/130] update png --- .../src/prefetch_parameters.graffle | Bin 10073 -> 10058 bytes .../dist_train/src/prefetch_parameters.png | Bin 180176 -> 167376 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/fluid/design/dist_train/src/prefetch_parameters.graffle b/doc/fluid/design/dist_train/src/prefetch_parameters.graffle index 067178972219e99add6db5a82db0f104d3517862..c1a59b901745d81add42328b9995408d32d8127b 100644 GIT binary patch literal 10058 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ν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 Lz57)N1@*rGWhS<+ diff --git a/doc/fluid/design/dist_train/src/prefetch_parameters.png b/doc/fluid/design/dist_train/src/prefetch_parameters.png index ee54c35272898e0487c1193a85b204774811874b..433ea3d612b51f325c8f87a58bb35216667910d0 100644 GIT binary patch literal 167376 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 h^E{{WRP9UTAw literal 180176 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�AbxHKZxMCo&&Ojg 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 Y@u9GY^6=g-i}2r`T^cH>J50R(7s7Yq&;S4c From b382747396e11bae1b38f7624550e98e7d58d39a Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Wed, 14 Mar 2018 17:42:46 +0800 Subject: [PATCH 003/130] add note message --- doc/fluid/design/dist_train/large_model.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/fluid/design/dist_train/large_model.md b/doc/fluid/design/dist_train/large_model.md index f82fa6f81e..9689582130 100644 --- a/doc/fluid/design/dist_train/large_model.md +++ b/doc/fluid/design/dist_train/large_model.md @@ -11,6 +11,10 @@ the gradient to Parameter Server to execute the optimize program. ## Design +**NOTE**: this approach is a feature of Fluid distributed trianing, maybe you want +to know [Distributed Architecture](./distributed_architecture.md) and +[Parameter Server](./parameter_server.md) before reading the following content. + Fluid large model distributed training use [Distributed Transpiler](./parameter_server.md#distributed-transpiler) to split a large parameter into multiple parameters which stored on Parameter Server, and From f839e91b04105565789fc5fb28b5934c2c79de89 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Wed, 14 Mar 2018 23:54:38 +0800 Subject: [PATCH 004/130] update by comment --- doc/fluid/design/dist_train/large_model.md | 52 ++++++++++-------- .../src/prefetch_parameters.graffle | Bin 10058 -> 7340 bytes .../dist_train/src/split_parameter.graffle | Bin 7812 -> 7054 bytes .../design/dist_train/src/split_parameter.png | Bin 69134 -> 78741 bytes 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/doc/fluid/design/dist_train/large_model.md b/doc/fluid/design/dist_train/large_model.md index 9689582130..92daa2b52e 100644 --- a/doc/fluid/design/dist_train/large_model.md +++ b/doc/fluid/design/dist_train/large_model.md @@ -1,44 +1,48 @@ -# Design Doc: Large Model +# Design Doc: Prefecting Parameter From Parameter Server ## Abstract -We propose an approach to support the large parameter. -For embedding layer, the parameter may very large and could -not be stored in one trainer's memory. In this approach, a Trainer would -prefetch a sliced parameter from different Parameter Server instances -according to the input `Ids`, and then run forward, backward and send -the gradient to Parameter Server to execute the optimize program. +We propose an approach to prefetch parameter from Parameter +Server while distributed training so that Fluid would training +a model including the large parameter which could not be stored in one +trainer's memory. + +## Background + +For an embedding layer, the trainable parameter may be very large and could +not be stored in one trainer's memory. In Fluid distributed training, +[Distributed Transpiler](./parameter_server.md#distributed-transpiler) would split every parameter into a number of small +parameters and stored in Parameter Server, so we could prefetch the parameter +from the specified Parameter Server according to the input `Ids`. ## Design -**NOTE**: this approach is a feature of Fluid distributed trianing, maybe you want +This is a feature of Fluid distributed training, maybe you want to know [Distributed Architecture](./distributed_architecture.md) and [Parameter Server](./parameter_server.md) before reading the following content. -Fluid large model distributed training use -[Distributed Transpiler](./parameter_server.md#distributed-transpiler) to split -a large parameter into multiple parameters which stored on Parameter Server, and -the Trainer would prefetch them by `RPC` interface. - -### Split Large Parameter +### Partationed Parameter -**Distributed Transpiler** would split the large parameter -(weight) into some sliced parameters (weight_0, weight_1, weight_2) as the +- **Distributed Transpiler** would split the large parameter +(weight) into some partitioned parameters (weight_0, weight_1, weight_2) as the figure above. +- We could use `round-robin` to distribute the partitioned parameter. -### Prefetch Parameters from Parameter Servers +### Prefetching Parameter -- `PrefetchRpc` operator would send the rows index the multiple Parameter Servers, - and then receive the SelctedRows. -- The different with normal Fluid distributed training, we only prefetch the rows +- `prefetch_rpc` operator would prefetch the parameter from different Parameter + Server according with the input `Ids`, we use [SelectedRows](../../../design/selected_rows.md) + as the received variable type. +- `merge_selected_rows` operator would merge the received parameters into one + `SelectedRows` variable. ## TODO -- Async Update - - To avoid slow-node, Async update is important for distributed training, - we need an design doc and implement it in future. +- `prefetch_rpc` operator to send rows index and receive SelectedRows variables. +- `lookup_table` need to support `SelectedRows` variable type as input `Weight`. +- Async Update, To avoid slow-node, Async update is important for distributed training, + we need a design doc and implement it in future. diff --git a/doc/fluid/design/dist_train/src/prefetch_parameters.graffle b/doc/fluid/design/dist_train/src/prefetch_parameters.graffle index c1a59b901745d81add42328b9995408d32d8127b..abbb7089829709cb5fdc337b7f9521a34f7d131a 100644 GIT binary patch literal 7340 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 SIAQ+w>Hh()#a3&Un*abY(xtKh literal 10058 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 W^`*A*;iCELkN+QyFaDe9fdBw2K%Nr- diff --git a/doc/fluid/design/dist_train/src/split_parameter.png b/doc/fluid/design/dist_train/src/split_parameter.png index 1776fb8c4eb0f86aed1cdd67f54d8a08a4e479ce..d311c414a72517205545649a239882bdce3480c0 100644 GIT binary patch literal 78741 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

o0oqNL~|h~I|13=pNSSXi%P6wpE5H;Bsa40dA? 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 literal 69134 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%0Au}eVk~{6{Key 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 Date: Wed, 14 Mar 2018 23:57:31 +0800 Subject: [PATCH 005/130] update by comment --- .../design/dist_train/{large_model.md => prefetch_parameter.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename doc/fluid/design/dist_train/{large_model.md => prefetch_parameter.md} (97%) diff --git a/doc/fluid/design/dist_train/large_model.md b/doc/fluid/design/dist_train/prefetch_parameter.md similarity index 97% rename from doc/fluid/design/dist_train/large_model.md rename to doc/fluid/design/dist_train/prefetch_parameter.md index 92daa2b52e..ac56502c28 100644 --- a/doc/fluid/design/dist_train/large_model.md +++ b/doc/fluid/design/dist_train/prefetch_parameter.md @@ -1,4 +1,4 @@ -# Design Doc: Prefecting Parameter From Parameter Server +# Design Doc: Prefetching Parameter From Parameter Server ## Abstract From 5948fd27170d91e2728e9366e9852f32dc17fd2f Mon Sep 17 00:00:00 2001 From: Abhinav Arora Date: Wed, 14 Mar 2018 11:21:56 -0700 Subject: [PATCH 006/130] Refine the prefetch parameter document --- .../design/dist_train/prefetch_parameter.md | 27 +++++++------------ 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/doc/fluid/design/dist_train/prefetch_parameter.md b/doc/fluid/design/dist_train/prefetch_parameter.md index ac56502c28..e8ea7fe67b 100644 --- a/doc/fluid/design/dist_train/prefetch_parameter.md +++ b/doc/fluid/design/dist_train/prefetch_parameter.md @@ -2,40 +2,33 @@ ## Abstract -We propose an approach to prefetch parameter from Parameter -Server while distributed training so that Fluid would training -a model including the large parameter which could not be stored in one -trainer's memory. +We propose an approach to pre-fetch the parameters from a Parameter Server while distributed training so that Fluid is able to train a model with a large number of parameters that cannot be stored in one trainer's memory. ## Background -For an embedding layer, the trainable parameter may be very large and could -not be stored in one trainer's memory. In Fluid distributed training, -[Distributed Transpiler](./parameter_server.md#distributed-transpiler) would split every parameter into a number of small -parameters and stored in Parameter Server, so we could prefetch the parameter -from the specified Parameter Server according to the input `Ids`. +For an embedding layer, the number of trainable parameters may be very large and it is likely that they may not be able to be stored in one trainer's memory. In Fluid distributed training, +the [Distributed Transpiler](./parameter_server.md#distributed-transpiler) would split every parameter into a number of small parameters that are stored on the Parameter Server. Hence, we can pre-fetch the parameters from the specified Parameter Server using the input `Ids`. ## Design -This is a feature of Fluid distributed training, maybe you want -to know [Distributed Architecture](./distributed_architecture.md) and -[Parameter Server](./parameter_server.md) before reading the following content. +Prior to reading this design, it would be useful for the reader to make themselves familiar with Fluid [Distributed Training Architecture](./distributed_architecture.md) and +[Parameter Server](./parameter_server.md). ### Partationed Parameter -- **Distributed Transpiler** would split the large parameter -(weight) into some partitioned parameters (weight_0, weight_1, weight_2) as the +- **Distributed Transpiler** would split the large parameters +(`weight`) into some partitioned parameters (`weight_0`, `weight_1`, `weight_2`) as shown in the figure above. -- We could use `round-robin` to distribute the partitioned parameter. +- We can use `round-robin` to distribute the partitioned parameter. -### Prefetching Parameter +### Pre-fetching Parameters - `prefetch_rpc` operator would prefetch the parameter from different Parameter - Server according with the input `Ids`, we use [SelectedRows](../../../design/selected_rows.md) + Servers using the input `Ids`. We use [SelectedRows](../../../design/selected_rows.md) as the received variable type. - `merge_selected_rows` operator would merge the received parameters into one `SelectedRows` variable. From 1b4db80b10056be045702fd4a6078bbcc5a36db2 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Thu, 15 Mar 2018 18:48:23 +0800 Subject: [PATCH 007/130] update by lookup remote table --- .../design/dist_train/prefetch_parameter.md | 37 +++++++++++------- .../dist_train/src/lookup_local_table.graffle | Bin 0 -> 11311 bytes .../dist_train/src/lookup_local_table.png | Bin 0 -> 303842 bytes .../src/lookup_remote_table.graffle | Bin 0 -> 10636 bytes .../dist_train/src/lookup_remote_table.png | Bin 0 -> 290825 bytes .../src/prefetch_parameters.graffle | Bin 7340 -> 0 bytes .../dist_train/src/prefetch_parameters.png | Bin 167376 -> 0 bytes 7 files changed, 23 insertions(+), 14 deletions(-) create mode 100644 doc/fluid/design/dist_train/src/lookup_local_table.graffle create mode 100644 doc/fluid/design/dist_train/src/lookup_local_table.png create mode 100644 doc/fluid/design/dist_train/src/lookup_remote_table.graffle create mode 100644 doc/fluid/design/dist_train/src/lookup_remote_table.png delete mode 100644 doc/fluid/design/dist_train/src/prefetch_parameters.graffle delete mode 100644 doc/fluid/design/dist_train/src/prefetch_parameters.png diff --git a/doc/fluid/design/dist_train/prefetch_parameter.md b/doc/fluid/design/dist_train/prefetch_parameter.md index e8ea7fe67b..952d2bada9 100644 --- a/doc/fluid/design/dist_train/prefetch_parameter.md +++ b/doc/fluid/design/dist_train/prefetch_parameter.md @@ -1,36 +1,45 @@ -# Design Doc: Prefetching Parameter From Parameter Server +# Design Doc: Lookup Remote Table while Distributed training ## Abstract -We propose an approach to pre-fetch the parameters from a Parameter Server while distributed training so that Fluid is able to train a model with a large number of parameters that cannot be stored in one trainer's memory. +We propose an approach to pre-fetch the parameters from a Parameter Server while distributed training so that Fluid can train a model with the very large parameter that cannot be stored in one trainer's memory. ## Background -For an embedding layer, the number of trainable parameters may be very large and it is likely that they may not be able to be stored in one trainer's memory. In Fluid distributed training, -the [Distributed Transpiler](./parameter_server.md#distributed-transpiler) would split every parameter into a number of small parameters that are stored on the Parameter Server. Hence, we can pre-fetch the parameters from the specified Parameter Server using the input `Ids`. +For an embedding layer, the trainable parameter may be very large, and it is likely that it may not be able to be stored in one trainer's memory. In Fluid distributed training, +the [Distributed Transpiler](./parameter_server.md#distributed-transpiler) would split every parameter into some small parameters that stored on the Parameter Server. Hence, we can pre-fetch the parameter from the specified Parameter Server using the input `Ids`. ## Design Prior to reading this design, it would be useful for the reader to make themselves familiar with Fluid [Distributed Training Architecture](./distributed_architecture.md) and [Parameter Server](./parameter_server.md). -### Partationed Parameter +The execution of `lookup local table` is as follows: - + -- **Distributed Transpiler** would split the large parameters -(`weight`) into some partitioned parameters (`weight_0`, `weight_1`, `weight_2`) as shown in the -figure above. -- We can use `round-robin` to distribute the partitioned parameter. +For some cases, the parameter(`weight`) may be very large, such as 10 billion features, the entire +data could not be stored in one trainer's memory, so we need to partition this parameter and +pre-fetch it at the beginning of each mini-batch, and we call it `lookup remote table`: -### Pre-fetching Parameters + - +The processing flow of `lookup remote table` is as follows: -- `prefetch_rpc` operator would prefetch the parameter from different Parameter +1. partitioned parameter + + + + - **Distributed Transpiler** would split the large parameters + (`weight`) into some partitioned parameters (`weight_0`, `weight_1`, `weight_2`) as shown in the figure above. + - We can use `round-robin` to distribute the partitioned parameter. + +1. pre-fetching parameter at the beginning of each mini-batch + + - `prefetch_rpc` operator would prefetch the parameter from different Parameter Servers using the input `Ids`. We use [SelectedRows](../../../design/selected_rows.md) as the received variable type. -- `merge_selected_rows` operator would merge the received parameters into one + - `merge_selected_rows` operator would merge the received parameters into one `SelectedRows` variable. ## TODO diff --git a/doc/fluid/design/dist_train/src/lookup_local_table.graffle b/doc/fluid/design/dist_train/src/lookup_local_table.graffle new file mode 100644 index 0000000000000000000000000000000000000000..180004cec944783468158ebcacd430e14a4fb2bb GIT binary patch literal 11311 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 DP$N6u literal 0 HcmV?d00001 diff --git a/doc/fluid/design/dist_train/src/lookup_local_table.png b/doc/fluid/design/dist_train/src/lookup_local_table.png new file mode 100644 index 0000000000000000000000000000000000000000..e5719f39e5f33fa0dca8d42c9765b3b5b0dd77eb GIT binary patch literal 303842 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

?G?HtU@uzoMnK{Ea` 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%0Dyg%uTGWzXP{sYxt8{&2c6X zmwiy4#sr*SFH?RXA(e{ae$69B>ow5PzIs%1>>a;>`CUTnc2>V;dM!sqldDWUw?6ua zOluQER;99sc1c22X?}ya8Er@yza*;WYNRrFL?4^oXKi=?Y*>3z$K>Zjxw=uX9jqKE zZg%P!>A?V@f9LWeQzfK~>`x2#bJw-Ki9I6caESG9U|~#{l<*bq+I=rkC>i53Odqa) z-g>9V{RyGA2}MJXuv|3K-K7fTUD1QIFQGf*W$T$lEE(XD4Hn``&jcCKuPNQ}>!@kK=1+5lu`u zeWY_+Bu)DzOO~r!0Kj6hdWevAo*laU%*xZUT)&Wz^X9y5cfIO+z*^oCwrwO>=13Pw z-_D1E9yvgiIdttpYYApjTD2RrWz7X$@;{2e3VF?{wn7r5ST9X^?lD42y?1Tw`W692 z7Yu96$Wi7g>V5s-+Z1_^@4Zrj(3pDME0({SE*$wC;y^BKgJ#2miNX&+?<09mAudw= zDyu_=^Zu^t3vyRh=&5&$I`kPEbpUAs>3SfMC|D^sKWjEHs(&iFO9<63O6kH0G{57& z^&MW5f*47a%zYc$1?L(Erw7muMvgwZ!^l(Sec?4`w!C|26%@tIAkV)hZp#1C`4Gzm z)ckvKF1q5vXx$*cr1ShS~>vc zePLdjMC0$6(|MekH$9ZdaHD{uNzEmoS3|xKx?oo}X+&AtP4C>~I||=jLjA$}CUi^( zng@sKyXmrF%$0t&1}C}Mm^b1nN;Ic3;P*^L_ze`8zm4Fs&qDTmuaIl*UTKpW6d<~v z;As}`l9DM(@)V=!U^e!cb5T#i1pDGb^-EM-_^~a;Oo7=)d6x8%7sfz+(VVVLT>F}& zgsg?156iHvv?re|cH?JD=FLtO+`<*UOF0S++lRQeRNZiBIGzrX>e1K`Wj-fB6p6QF zQ+$s{`|5r1gNe*ii?*ghrk(*cMKrgI_mOVH>8Yx2FFYdGu$L<9COo6^+0#5OU>)PN z^g@!@$al5iA?)&mpr0;3=vohzkWM;o)X$2#a~AMJh<&| zi^kQ3o=M$|9Z#7#2cFffK+|{~NrP5C5t|R4@0lxTXWEct#H!!W3N*HJ57cteANrU@ z7qcEfq3!2^p5}5Mp8;DE?qjsZpJH{`whLPVY?DXBc)27wiPV0Wdp}L96x5w@KZc$I zvl4->q!3FC7M~fY0Tw{u?yItXAnzb0_8d&zVL{P_nGE0aW$)-8w_KM0QL&O3U(`mT z@^VS@d@a~|Nt`dl=X~TJ`~dl37+pP5`LnCW%>dzKI4N7{D|AF8SDA}AJnDT~yL43% zPVd!Pq=c6|INt@9b2Bj(1;)RdEKftK=R`4mC;ul!6cNM-D7Gy)306Wz8hcpM-0lJ6 zM8LA#+0V|D!vg@I*jBX5k4P1V(mYghUDm3c^u4|HAWs-wE|6Astu=bC)tnScX)5B- zr!N+Hr&v#J)7!LN4;H}qY6NFM%fe(f$O8zhuW@2iS!4U*!}SWxNfhe>P`VDF9Plspp&Vf zA47o^M$k6XD-?@BGBi-NgVj+3{FaWM$6zE5D~D47c(Mn}*1{P-k!-^Pppn45=grrv zb`L~JXfh*NMA{Bo-B2THIr^K2^A$hS+}$doWYfup=)hrjL(M|LubCx&H#(X_<^dE^ zU$2ck1sj6v`MBoKZH5l{0RPrQn5#IU&X910Ajly1z&E_-rhJ0mouB6O4mwAB_td`p z+M6~I{h!08g1PH4o_U67B5yQL>zqs(2jE%lP+zwSzVF@{Te0j?R*jAIFP3)ypd}or z^&1uPu@dAf4*_egu$8TJz{O(9Xc#V)<~Y{4r_l4ZjbeiQ)4>0$m{@y^Ma-yE@gzhT zM1|Zw28J%nK2;0??!3ADa%*y*3}Crm>amFgWtmI;q$yVRr3&&l+2#y@`}t3xl3vbh zxSWzyp4GdS2(0oo+pY^HB)Y7rcqOQ4U$n;_aD;*;KMYWPaP##5HXYZFZ1>4I!$!8u zszaMs0>}>IcT`>&-B4kc6tu7BU4jtK990POCEyxXT$)yIHQ0q^Q+KOkWU_naO`TG$-Q;K(%+Dk$-c>NqHg#`qPTH zvthJgJMC!m2r6%AF#L=biFyAtc2hT~>K^RNym9qt_wvaSrJWkam7JCBv4&dMir^(> zFz#4Z6};g#yaF%b6iieDznu+_l2YWMu^iX&>&#?Y03X_tGq^s0m7cwoc##SG)vo59 zw$17u;+`j+(g-OZKwQ@sQkk?kYH_>vzBxYO-$@;vu!3-w5QY9vyb=GWD~))Mb;QxCim<4o!_ zc+9;-PH_ILnt>cYKLdjO0Dtgjk6lN_Ha;^oRAs68BDOTGhk$>mvHTD+WYp<8!K73E z$^fVou(H(&W@}=Bn;-xpIrzRLxt$ICW*05okZ6Gaih1WMjk_b6?5rX&KXO0$IjqcK zQkCh_>(`k#*eJF36cIk+a9JkwrTfro#aSL5Jh!}I{n(FWJW z3#Oo6Iun2=gFKKis{%kQ8#j>`Ixr~poHtWZkBQm@x+eCb*71mv6MmTGb$ENq(j zU{-vDJBCD5w~|PS;-_}{3=(zh%pDl0;hCMf+4`3j&HIj;d{rsB_iuCxRVD+o{nc}< zQU41V0@f#?r`|!2h%8>eDdKk+?X)o<{yXn2DwCDsTRmzZDGRu7RyVh(k7T zp>7+cv4j!GY08!>5QifdP(dN?S^+>!vT6}?_yWYHW z#BMhK!}}J1+4dSFLBw}9fN`jYOlsQ??|yE$UBv4In4OgCH|tX?)3^_FN&C73#^1b) zUPD3QA@Rbh!uAX_y~1>U-cK!Rp~A)Ug1mqCLP8V!C!lA;gWu0e32gmr~gdpnm=egJQ=r=OyX&B{fc{pSDeiG@`TEUR9!loEV*b01oZ*4@IE(_YwiOF6SpdEdC z01$yiSUUQw(s$yBt~Be(J(rK}58m$z)>1H|o0*O{b(D;vLEUbd-PAh(pCL5B?>V?U zZl@NgIjK7~$r1math4}?%mQ)!|Vy~nXxb&urrLD3AG-_e~&qBzGN1o9_SNAvu> z>X}R(KxVs|eSlDxTZt^9n$PWpsXF0@r?_!?%33s_zvXR-bz3(XOh5;U;0?a}3bYwR zMqpEI^&3u-TgYLdg9qx>3HzFIo--V z;#?2%fa#8emG|5~hE4x{cf=;Mr06Q`!EUR5fn4prW zSzU2{`)KIfGJa~yfwPUcSof$WuffwRvAaCcXQr3Wl*gR!S9D;)zJ7e&7jCJ_3tU<^ zZ}SI_>7z*+02PX3prPtsocwD3Ien*NjM*8p@!x2jF>U*78;$d+io`XTnx ziEl6o53L}yoyy>=`vEm3opV76B>4{+zGD@w9nv1qf8CH^dRl73scfYPDuyN%>L`Zb zvp0$7*Pu$(xUj5SD1UN5g7}f9n=oLCJP-^$D%9H#gxKHOTG!}xqz4>Ab%@oZ>%n4H zwZSmrYU{Ad`0vCvh(*3)J5DqaGfwjMbZKx*zh1g5mcz{?;XK*-z2qzrxOr`yJ%+FN zZVtVUkP-aSUt)_%`tv}62v1QYAMaSL5f-nuOj*!yI~!OgJhav87-W(NXn5;93ON$D z4Ho-LWdSj1DyV|zJ5*^Eaoe-NmIlt#lI7aZGZD-em!2Qi)o^(K@@uHo_LPAV>t_%7 zVw#4)ehzVfmA&dMEj0p@PCqaRE@e3u98YD!g|=<_bO!{>keqWiKu-lf*e5{p48jgYfhN;tev{x^VyS zXP9lae&>p729lmtzdmaeS1yeB>`sg%#Ffud=v#rFXe5BML%*j-zvWof0FPa8%&~Qq z2C%(36&AhU^K!j6*)hkp?RL9xoSAT|FS1nvmYl*wIr3w;%YFDeCJ6-RO>VY|FiA1C zRP*YkBsGD7OPDr@EZ?3Q%C%W5qZW`!=qq;fpuc-DUCIVJwN2K(aUBTXBR-;lnzy>k z=b~NjVB_ZRrPFUoqnc$6UGE{j5%RjNoMe~3K83Yxw`yN0_{QJ)7tB+{h2PVO~b1aU|}^45$h5hkA4ZI z(}VJr=V<))ym&1A)oJ>4l%{nYrR6@z7O2P0z5D>=P*3H^;MV#uVH>~)0ZtKlUnEtW zE!!j)XDUsthFF$?!(dbeOwJp@Zy+TQr1g%CWy%F*C8|J7#*xs8E8YN$nPjM*rb&a* zuZBxAqp#?PAT#t?3pUclW$$ab7eBt6+g5n-cV+T>6i)q+b@1+qnZ1dSEuhmiihOfil3hO8jh)wg9wKP%Uckk%D}p5n zub!~5`AZjCJ*#%Vg9}&&)-gbVFnq;C{~T7^7l<>$mz3K>LBgXEa2|ruymtzdC@R!9 zO)E$fMf0Ku_A0dZiJ9DpO!0>~y*fVhslhHp2FtvtMxCn(KCsu+3gCOr=IspswY`R#%J!Duin3P?cm5Fd@L#b-2onX#w|! zT7YJm^A!`rYxM{8=d%DWXgD_$|6csm14vHb4(E&a9X>NYF%I+~@R02ZxE8lGNYwqr zU4C*0>pa?uYdWV42t){P#Cg&`2WZ{8!Ojmo%9)IRAX9xZL72o*1tA`OP$q1ryr@%1 z$fiq)$7l#&&)a%e(C?NOi-aFd9?vh-|M$Tm7-En(MLmr4+o=@PiD zEyxy)Fz+A=o*t>~KOc2n>O(DsCHB(6&~K!5paAz+;o|XCn3mBSqqJR2;VkiO+qjF0;45;;2XW1 zB?bjN%vuI%o_qc`&S+4J#aB!ot9%r&27R)nT^de|psTZc*?Nmh`?u1XvF6r8gPnz=MHN70k!+;-t9`q z<-u-(uxvij7|aROd#OU6(=9>plU~lDF}wujf33Z)u5Ri!VUBOG&Pma=hfDg$ zVXX!ODnVwiA7;gPuG}FQU?(-%e2fy$T%58VNZCB}ROr=DZQAq?a}l1-Wq~PB9>dN) z4&^+$SzR5fi55Y5T1M^vfDF1+sGe;*ZF#uq@0D;1?(ThncBeEUEo9OmOMeMw12Br> z-nPaz#J1Pd`YZhb@zAHDFRXq)F-ij3b6Y3qjM!$;-}TfbKj_r*c`t}JhXHg0#XP-t zus>%U5k4Q3-XN?vCUON`&`irvhmwj7J|*mB9Xv!eM|WCQc{UUPQAXGi02sS=k%<-P zP9Uems!~@NzyfN_13_=%kxRL#g(Fa~R;anEDCw`CgQ52`flSKS&)MeUxo zXfmNmmvfuD7b>S1Hpxo3F*vTH13HNz#DT!Ccm9+On=cNnME&+0STG#U*ZpQVPb-#C z?&?kd;S?i@w5?|WUTLzwOR-s6qIh5BF~irGz#ULQv&3e$2nLar2*2Ym#vcWCrI6;d ztol0$WC{*^jL(wdZVL3siD`;^5m zE)TgWY)6d#k1RLE%rq}ipF1IRs?Qa6ASTM4yH!8fm`;BHH9ykk%4?6)A`Zc0i}~|KFm@RHsZoY?%1URX^VnpFuYylE&+nv?<9&#Maypo zA>90E3ujXSN34q@@CQcv(nZf**!B4xSG?*|n59I~O@6&oW)F}~6;wxX(iOy=ny7RX z*J*_;XxAQSRd@(E%e)}QQrkjP#wladdiC+3axn)noNC7mR5rK|)On3i`Z(>4*UJIk zkKj%Mqb_n}Q4s`q1NkNyUCJ_Ak3sX{I9mps$#o^THEHrzho`};frlY_N0 z?dBExYDcP!Vz8knL_lRO&4q)zb>{oZAk^5tvjdO53PRNg5YSH9Q$H6j_wtj_b^-52 z1C3U}|5cRN4E&5V0Ee)nbvXQ7bn_KcqX5!qs>lbyxnG_l?@ta1Gb+RDh+Qw`-HmV{ ztg_-ZMQ{J~V`LKE!AY6xI=W=6XH4v6CUe=gnVO(IEbR!dBU&QVFtv6Ad^W+T-i4^B z_5EF*dPn%8-!7%!2O9_et`w6dIHoz~6j?G~Xh{Mf_}MUOhAv+taCH%g7%}Wp9Ncsx zZG*2L*LConfDu{&J;XT{>x-scUOW`FrV)4ZhY+RgFD@NIRYEk6gI1y2u%v+Xz- z$(RlW0#nbOqQjTODIsD~E?nXe@fIIuLz##$mLYHc7*p`x%rL~uR6?-+;qW$Y#hbvC z9HE)a?<;rIxtE6!^Nigj7_I*=Uy^`hr967UUnfXEZnJw2_g++x*Q1Nz&=>4CI2&Mu z1-3Vti2@*s@s?Evuu>Duk9)83=fguAgGaggG(wWC6?4cUoPGX#?}~DPcam zZHXQ>+CmsRob^RECa4_5GHhBY;&5KttX@*+3zZtj%+hWIrdx2wA>7Bs{-e4+O^t&pv{+W zgfjYw8z*~=0vD#ORypTN>)|WgSw0*>RXtI7cLg9FQohcAFZgwI>iGNdhguceF=yuP zjY5|P)`F?ekC%+u`AyQ4>eSt0a}R_5*d-yG+Z!+=WTOkrIm5Q2<9_iy5a9D5*5yfN z#&s86EbJwi5KAlQ0ba~o*H!W~AK<)-sM!2SdN0^w*~*y2SNRL{PVy~`bqhJf_)TtQ z_&6UB$UMQaz@m3l#c&N1R(i52m0EJSAI506zdX@c;eElT7tI{&Y@RiJnW|9?oLgpc zLN*dW&JL^()yrXKHsUdcsjAnIpzTK_t-^%f9lDGKAk7q--j&=B(;e1%;=WV!EE0hG z{im*>*1|blx(%ObUe`;tM#E>z?tAH~=cn?n8DSI+;k7FI{Pb6}mUH?yP~eWB&9;zqQP?kFgY;!rxX!PW};j!QoifquNCQwsoHb?k9s< zD2Nw-g1qtc^z!})E89`1IRVxFWP_i)MzJ@VhqgCVuW5g(a+^0KR^gk<|6OsSLm%J_}eJ?2ME1Cc3mX-@YMvHh&#K(iXWZ z|IJ=_lnMImOmAF5u(h$-4pfQXx6Q3bG*(mcIl-MK*7FcK{2B&Z(hF z(SA_~U0*td6KXZK3f9yv0Jl$lj;_}Bekm&^Oxo3Uy6HHSmfFsa!VYFEgltxwvJ zURPEa&4juZRul)j15*Jx!Dv1*;vEaBpBDo{{>>WM6ATZ?gKE;`;EeFk|DHogI}>~; zXcHwrTmxdi;Il$R#|;GqVC2l!&m_3u5$N6=?%YwJK7zqLy&~go6!sF*CA1Thy958d zy#(|;x>nMOLlfqOY!Fhb0V6beJS^oW3f_KB`D?zg1iQ{TRzS4(Ep2= zlheUABwhpMaY#24;2&sZUYYWRjemwFVgEJRIBTBbt?I(3$LfbJWtV-C5JwV7Z*y-q zh;moI$DY&*#o}-ca8X@Jh^VIDl;~H^lfL=+G1R$=IpMrJU1RUB;0LzV=zz#+AL+at z?WkE~1Q+3%;C~*%A{ENW>D4KmXnce9GRvF2lq(cK%Z4J9fPe_c$Lb^EsMz&eNwP`o zoZN>jS3b@LbY0L)+=o_GUh*MCa1dVjh0$Kc!d@?C!_tx1eh2V8){o-}yV%g+b@~aW zLyu^6`ijK{Fz0LSn8l}{pe9s1G`vY^%A5qscMgtkM-XDW40pt7+vLH=oN}N1D4I=o zM?l3rWwtsceR5|BW^sc?P*e3f@F^RBF@XusHJb@#=Vsh=D+%164L}n#zD`ozh|kFI z{HtoIdj~L_h}}n4=1a~vK$*7|o&3{kZr&9aY`NR124Uvl9GI$nny!18=h_wiZU5A( zO5^C(z+;^({girbQUL`7#;d^UN}ag(s^wfQ*!}|qTD||TXh<#>B^(R}xR{j?cQgd* z6QTsgF#o+X7JUkBX%$s`?3H#fVXVc~UkJ~DE`$cs+&2V4Drzj>$tog#PxH8YH<2dL zfz{x~xi?*H_AL3QlAb3#xbco1l1jD-Xo33n=^nNI7)=sK_suQ(w|l(?PH$}p1FuS= zX^A*pQT%4vO_0X2fh9X&Mu^;-sF0oxb9}HA0|wrcQ3Gk)`018W)7$M{;^$TW&BGAt zFfORmjvJuo0M|WNH+DYPr;7kjdJUh;-&hRs2HxdfiV5i`iHjyV^<+&~#r&yPci-22 zY>e?PKUDBrKZyMP&^=@byv{cWp(x7{n6F1lQ`v?A$E%gA8z3d%;-ByzI9zz(7=S^* zY>4*?N#YxXZIg<}x?l{xeb+3|eQ*Re*&`~IT_flRv{x_9S9Bywg8kys3b}|zi5H?+ z$e#X4X5r%^mB~d%(7Ag_q<8O@KA|QhcqcsH0vxG-*T(FZe*!s`*`dn|B%)v!B`?Td zTPI;zG6;l;Ap!O(+8<|A(Dav@?j-*$r-EMPp3<4|M!t>bAS=u@ij0i(93F)!!2_AY zIglM;kLDIDF=P_GhA!4*o$_0RHD?M(ADsUi4}=RAjzsCS6#YCHA}Z1-&f{H5m1qOy z3(5`^zkrY3Qvn7%9W;yQHMXT)e-aueKQk}Wcs()| zuAk=%Fl%~lXzDxK?KP7@Y3LTyj308<5t+Q@)!X4t4lP0?U7@+28p69-&{<+bbI^$I%;ZHy~|mE1g^)vje|}3BSHyfCW!NnG^xM{&jMX(24I5ne>uK7Qq@m zAr?!(A=tSPEJ4=Qo9i$M{Q6V})ya$#m7k8?6Y&ElgmHS^t)%ps^IuKrW^8oFf?o() zfQG0J6@1vy5O4*9Sm`cR#{rU{CsxnCaJ16`IE*a_dmh0b@Qy~mGT-}f96FY>eq65+2t;eSU4W_*uf={3 z%Z0TP=L%+bz+cb#XMX%r6@N(YuhNNvgRsJ-b`QML&q4(SAk0p_hXG3`bGPfZM_gG0 zxVI|y$Q zLdB`SQnwP?u2K$&Q>YC?RI;1uqmE`EuBN+>PJWEmk+uYzE%zT&F>;tmF>fO8k(fj+ zn&?pFF~1N-|3HegHxbYPaE%L7bsMSm0$^(0jj-jP$r1>U-;M*g;G#*vD;Ea;aF?iN61-&>qiTOv&tR(rGb+}|D~>jFEEafwen zoNYysiKk2SLDKLM&{>F-WQkKS);xD|Bw!DeGcY~Zgk3xBV$@0Kb3QNXV93Xbg?6#! zr$j336aYx&%Ouk}fn*n&o&Qff)1|yb*H+lWf*lY?0VRl;nb|Rr4QxvtwLU`SWfImB z!DP|N@DlI)hx&ENYg4^lk84hFxK#mSQJWdevRuMi^kTslXz?Fe zV9!zRiA1VLy5}aonVsbN$YOcw-_YQI0bi78t8T=`1xSUEsblr1{R{j#^PC5;P<~9j z5l&EVe%p+6#`Ww)LEts$9R30<&JiGo-3+~Y69y_|Sw|xwGLdkU#~bbkeguQ(5uSRE zu$imaR`x>jf)zRQr^*^Qj`Oljfu%;|_dg0-_(O8`QF&AVrlaUKX_-MuRcO%i|Lnp* zs|5xOFjlahMcYjLRHI#ZhhtuprJjm{3*ZLOMNbr~vhFPU@CGG zfOx0-ry=CMPRlDZ%Lz6YhmFL+em#O^CaXZIi5Jl79n2x0Z!y^i5r>)jMT=3lpD2*s z+w|SctA0J7Oq|4#+C{j=#z)L~-9CL5$u1SAYd^+^Wt+NuulFAm3y+#Km;g9(gwFX} zEi`2X9S=b~`jUQRUzS$TSoO#bM_EN^66$+EA`d_Xe8+Q8+|C_6rc1F$SGqn13xXiA zjvvpdGyZ`F2xuU?w_{5dIMNsi!glq zq_>*@h6o4vxp~X3L1CZ<1AnCppnHP4^g_eMUBBf1I2n}DK80=@phm_F~kYgq&5!J^@;=KH;F`Ab1*%^SR%m$3@*0=A#F#O9dAOYhnNcu zl%tEAW6>wbWv#Wb83)kyB0VQvb{&#M*@=)OF@lDx1O64pzvK6>Y=PU3N)?5b&o7U& zfyI=O$Xkd){n=^x`aAiqw}-s3+HIVE2a!r!eV<>tbha#0^Wygo{tK~cK4r=#TuD$q zeFQhO;~{n)>VDhrYI?j7m-p+)%|!lk0tROQ1fv(3@S&BR{Xv6-)#6c^zWhI)VYn2u z(kJGjV=XFTOjpyfLCYB|3t9#E6eggYk$hOA-YXe43-TC(iswSfzo4PY8gaLoT z`MYE^eSjgl-oOET=Ma0x6WM*<-3wn(03Nvf+Nn9a{x7msy~fYC99g#rfGK+S?wmjV%ASX`oqZug!SJ zA1RUxeTqsj?8U?mg+nO3lJio-Ji-`n)O5o~R6gl%(6@-G~M=lUi&9465g?58lsrWj#R&hKQ~RCNcyGgi?xBc8v2?GKXGJk z#{_;25a%g^<`vWl=c3ZWQdPZoScYNpH9W*=kH)V} zSAGP7Q@TYgpV~bDSIODtfSdSo9+mm`Xw#6*(pML|Xr}o&wPh`KL%$T`6#~i@d6{}J zvVy&gf`QV_G(OR-wYxwO2v5)8ntaz?;VkoK7##-I+VOA!X^jUbjx;^ZWhN>2Z!z_x*mq zUe9q|*YkRQ*8Bpk*)c3I6TPRHlcsNW+sPONh0^h@>zy+mN%ZTWb(WZUW9k2>J!y~s z@!OvoJ!hpkeHmGsTd&6HZ`Lcs$@8m@+QGSwMtK19x+Gg|Z@*7l2~oZ;V{}J(!$HYC zLyIN1N;MG%czroJhVTD-GOUB5oZ4LT_39Va*Xx4}&iRmh{QhKSoIdt?ieLZNR)dR> zEa}4?WP;}3viNW`0`ivfWU&t+W9niZ>OG!=sX{q}T+j@U}@xSE)k#cEY zkhkYOc{^A`C>Fe(SjGf$`R3~5Z z&mF`6eu0DggKC0`YnQ6LXM~OO+hK@!H#74#6nHwxI|`vxIl_kbZvAU=rb5r%!+e;`vF_I4cOd7k#(IpNmuIvrYWr2q2kPn$`rXn{jK(75zs{aR;?<%vOsJMB8Q9WGrbdr7-d_WuOvN}-l! z`{ZE3i}c>qo4<61NW1W%UZvx5lnrA;vfzGe-PH+HwYFWFe;#G^ZXzqsK+0@*z42QX zCS}%FzB4Wl2i>}MCs06`Wr`->`i(&Z?Q9I$sZ6YAn8mVLlVTff%5$i8L_*H!2H!mK zHx*2*4MwIU?ZYY>p?n2p%Cz?}lBgrlyVF(}3@)$PJ74G78P9?+JLkOaCD*$C4 z((`xCmSI4**45jDk23^KZC|zbD-o6bbuv;09wu|}%vi#HnzVf-BH#gR0m;qIfR2rl zna8x6<#BTkF=?~HJ2qGN`uG?qXIQ!v=_%Y9hfE9Z3{g+sE$vHV%yz>o+AB~%FSvUb zEKqhqAS;!P8O^PTfgCbUM)=*ASno<(neY+@lV^9{1SFqh@J#`~g37!*uhphrxYoXj z!SD*krE_o^U(U6gU*8=#t@im>HVD5!#!2PJcEKQcP~~B_gNRsJ^L^2Hk{jfMB8Tx+ zZ8e{s#z#k=yhc^UpwP^@g5jc1V`+V;(YN1kL411o{z2+W$rqoL{pk%YSYfq_xsId@5$h0(Y4IU>_41uiYf33YeSxv!=o z+y11Iq2#1)UlcNQx}wAg-F2r*pxv0xQTgR0D7QH+B3dqCHvFB>yOT!=`_=WgP{X>} z>wT2$LANvp=HMZgO7~%w7xu>-<*|FoL#(_C&d5zP-6Hz`_RG8ybS2HO8c9J7_p%1i zV5RYvgw#z3ZMEa0zAfw-eqP>!97A%mOL!l7qL_rjv4<-}XX$=9fE8Txp-@|Ahz#yX zP4*nMzG~<3#$r&Teu5ZG8g=iz?R-w2T!2zvRZlg+GhA2YA=5*e>W8n>k->Ggl-cmB z5s%v0eYSrjP4$S8GG_?Lf$FJZW8WP&&a0JJ~nOM|kXQ=kUDmI#8V` z-_2o>ACt=%aprWPZVJ_A2AzDvU-A24P#wnN8;ds=?b05jpJRI2@F_m|GCepz84dCP12nOLGa3z_N;q9X*;-GQ;5EgZETvycT6&~ zZjgC^mJLoNTJtmVsh`_AA!v!6yA@IK;5&uC^(z*k&HLh7x;`8HR}q!+1(~^Fi0>gc z$q?^L$>XQG+fQqi9^G!ygz?+0R{3M8WM!SOr4CE9vbwuj&+WzDtY43Z^tc%ntiS5` zbz6ESZ_(rMOxZktujR+aT>*VV>=*p%7nEShQ)6-HCq^7jYNWHjdpw(~7)ME~r7BIc z!$?xeMTWFw7-~AO3DLLy2PY3F*0BucrK5oY@sxe8?`i3wWQe|KX5tp-`Y0=0`;+_^ zjuCUH);``n%)rD(9dg@ffhee)AM`0`@fhSUb#Ci;sGf)91trQ0z9S{TeRT2^*IK&2 zJ8tb@J+B&Ke<-tw7G*2Yo8!~P64FAM(DwoOoxH%u}G z(8^|_5O6!7R>>c*rtQVgcUDC%%3~HcSeT(yH@Z%{i_C<*mUlzQ=YWD zh;sAT$HVU)#3;JGJ9C#YCv-Za=aHSDaz?Lc&K%>lS-1SJQ!m9?d35|I76iWQL6Wf* zW-`fF!x|xDCL3 z+h?qvNO+{C_(GVQn`^eCAeX$;ptN@G!q$3Nnbh@Yr%_6gHmdfR9pB+>5VDRCSh_(X z{*0pT_<}$UJlW(}E44A}FYR$jIbnax5`V!PXcU{isSQ?8ZQ;A`ywTKy;4!p4@Mz!d zfU$jEY1nklU$udataVlH=Xm(%kWggFlQJtCKlB4j;EDR8WSid zB+3F7eQq&8;!qK?$!kD|tWzy5$mZG>J&dlnh-L*~J6(UwZ$l>OdG-Qq6o5_}%3ENOOl-}BQRYZZc z?#8O4s;G!CAEo{I$JFm>l6RMa1eM=mT3@%Zfax8h0hDvqeYcWU`4aY@xyUIq0+>tU z-so!Vj%1OLjFhg|6lI;cMY$rY`Bhwp1O=7y0y>xRk6I@_fH|3#irOJh(w31UY%MW@ zt3FrWOFu2^`zEv3h}dyBkwhGQQav7Xo zy1b?0+xLWL_pf!QNwD(Vs(W~@*OTD%?tu%Vu@GtH!SbuVys|=UUbcyoC#NwIGj<#1 z%|26{qi|+byw5+2HtJQ=P#c9_+FrBgoCQ>K>whdn$quAZoswg`aE#-^u`T`=bl=8P z?28eyd%o|(s#^Ctd0|fm$QeI-U(@iQq>0JgGq^LQ1q7vjA`=^F+FtO;;xmn&tzy-zf zO>=r`eaCNy*f&hA56_8qC20FqR%Eg;!|o7b3#YzHNnI0w%uOAg?y3G3kbEj(E;H~6 zO;>ok<=@_diF|iZr8SUssh_wr=@Q`r9IBM)mRh76e10MsKXmdD>z$f^8z+-;+jgvJ zo1N$59`oa~eu36Ev)6X!floX)A<~W8B%)RdfucfMpmR&>ft0rY?&v{c8ssZSh}sjI z2y}@O&5}o&9-uZNxsUH;9aN9fK02fn@o97+)#f*zvy1k~y9W_Is|A&>S+wqBrj;io z^c>X0Fs^%_;r`Djv=XF`vJ}yIZINK*{2x&@j_vATkf(Q!zIyZl1gM)h@AXB(W`|TEHCnYH= z!9-zx$!nM`G^B@wql5CA09=A*)&BIgnq{$(A7eeN$+t)*5N@hdb|@!I-%HwNq4D}Y z4vAX2JpJ;>@!G|>R&MvNx4UfKdz04?#E01}f*-Ga&8(ilNOx}^v#eR+<+qX; zf_Tg;Rk~_^G505$@9z@_86c=xWfvoPmFQQO_Zjv^w>4YkD<|Wv3&DwGf7)O<0%;Y# z16mH}jvuCH<%Aupp%63;rwO#C`UO27)C@Y{5)i$A6RH|PCnqtk3-8?M*fN4L@4#UD z@D!+yC{CG3^MpIONu9p`6_QMw2uZVUjcW@d7`q-A^Al7w1_1`&vSLm6amaq{e3T6) ze-Iie`^|pM?EJbaOyuXul7}zfNX~i#n4x^o#qV1oed!a}JB86!WK$6q5c@=PW$4we zsFypRJ>#Kr?D4}Tvu$g$Y0qx?@i|+C^<%K=fX8iFXxiRjd*qpCbpYU*EpOg<> zx9$=H6B)sdzJk1Oz&;=-GpOT%u;JQ!uXq0T0?6hS-|MiCL=p5ux883OCxUp^`8{N3 z1!tFYw{lSm&t(zUJiiw7n{8Q%OxJ)(;In>e=aRAi}tSxaX&4*SBNi# zKPu!#i2I!o-hN@im5?ih$Qv=CG45JtLZn}2E!i9&fALlB`LULk=g*(FD1VOr*s}A- z-5375JbRQ*J@+Wu$H5@IgS8z*04HQ-oYH%rO#v3Wx+8HjPref~gcK+a6SON1+%Eo< zG3JVm3~eE2a}?(0_}a%ggW_B$HW>w|mU6zfzOxJOYTLY(T z%BSpkkXeeGA(D(h%R87##J7fvwA~D8t>Os%-7ei+U*5#}`^OnTv?c*pjQkq!dJ z<<2)++adVxE&Q+*|6>pt;jKtr7^8+w{5C(i@#mbB3pzy8tLz$>9PLG+19|0h#Ty?_ zm)q8@{P4;z6$GEXHDH1TIfwvru?r;K$FpKh!~KE~W;}1n#UW{fbFbdd+I`)T;nTX? z;ZrM0)mKVi!#U6HbOm;GJI!)QB-6HY=!W%=>DvYS*E>e_cYzKUUfhkLyn_$J(?5`F zrD7uuLl{GDB8%S5$_GgP#;@x<#XW{v{C%jH5~f%x=0%PNhfsjQOTW;m^@ya}5HQl~ zsRVkGpQ!2Sa=S}EhO)uuW?`r0*4~RMGzJ$!I$m1nQJ&4`6WXk5DI?tB+A6qcD;lRt z-iffR1-*WUSv|)^$qk(*TZPI)B8p0^hd(;>i|Mso+Ia-fPK}>C!?~4bZBE|!NO+r` zzli>&rM1aHyIyds)-2BFw7<80WkL^5*9220{PW$cx=J^glfed=5}dqWuG$0#Ec-NyOkRXm-%9&dLu+Kj%s%}p#d zajLhPE!p?sNN=6kIk&g(G0f|eZ&~lBr3{C9PwPgB4q5A(2|I@itA93}duJ0%^U~^B zTeth$-93URF$zDMdX?2ray4-VuG4#G7 zzsFe9PZ`eGNU`pUW&G_^ojX1ek3WqS%`srEcvj%B$95<`WO_#^6)Q`6H?u>~t8Gc~ z$~iPYC#`sTW1aazi~Q`ao(xKsI1lt{gm7Mbb%Z48NYhqswbi);Y2A%o#45i+cw5nl za6kXTaHj7vSs1Um8AoK$U4cx)Qn18wJHVnGxGe=0$Hio`Go%+BM69HDd;8#W*Uwcv z7w5~U$$8lH`py02-<8EP1~{*0`E_k*d6~Ega5BeG?%ClUpBv(e3^$ZPx7hbH%SJ55 zJ~^Pf1~nSHo-s?2hD)}(Yc|GlkcbA74y zY+>8tdXJ*kU^n?teinC)UDxD)Slp>Hlz#k15f* zeTIE3cS9DC8PjQj=&55KszD)p>O)o$XCQf~QbKu2o(e2mejmF8d-XZo}-t|Zbk$z9<#-yi+9!4@mI)c(3HqANxjxT`u zEUw<(caupo`|E;q){RImr|Y~xxrO9vH*IAm-3LE&Vq*+Ir2Mf4&Ks(GKy>z0p0Hjt!3K@Az;lV$X(-)&(4g^LQatpSX`?Gf&em{Bn?V?G z>qvknpAsZTK9T!5c%{z+Xma8oX#4&ua{&`8bKACPUQz21LRFUaczuVRk=MBak@g3= zTRw)_iM|gHdHgKc$i`40y~a(CA(-^^1~&#HxDDq|gW~q61lWCZXg6>fMUNx96pFvK z-x_XuPsk5m{P2V|<#O&}|6{E^Ts_wmFYZ6L@|uGA>cXPyW|gH@9j71KdH2 z1q?SOjW!N!plDM4bC)N|f(!)Vil9o>|hZ>@I2v6hJAYjqz3*q|M=Pu&G%| zaQw6+J!0CcL5~y@^Q37j^M`AFCSLz|UPF;*bHl)__lqUA!TPV(Oq9y%_ZhGtfZvw) z97`Aw@mIaXC~dLTob<++CN#*|CjqxbFR6_@FK$rBeJ-SY#GOb>PS0(3VJt<+x|@c_ z&o+bgP`d3CR4IXA3!vb>Fecr?^D6++kR$6{Dj@{xQ5yM}OrLFv;)0ei3;H+kfZJj= zc3=2?{&)vJ6GS|Yv5Yx$qfa1Nqr`6^&6QezX>{?JFqRvzqxMld*=t>$GPP`Ay0f3b`Gawi6xQ)0aj@ly(Ug-Vv4W|?o?XWk`7 zOU2d{&iugVDdE5PU`9aD7BVB&c?ZXd+dRLMBk((L1O+YALo}dnm*=?PBc_nS9bz!< z(=kf!u2|+MhtK4t>2`zK>TxqE?W^L$@9Gz2J0zy zvI*%C6Ib&y9csaH+~{vy&a0b;($-U1C;iA=9|obFs5*%h;amok&MAFF52u}W>O(8} zCJB@|=#P)e&%yZX=jLN!x0x~XSg#$YOsl?< zP)r>f$EaUHP#~r`N#^D!U;GK^qJ*P$)_>LsQe98pv+;LIC0&g^X1$;C4$q!p)E2c5 z#sY3^b0>eDar)m@pYb+%a0Bx1@LfkcZel6Qsp5?(6jZ4}B4>??ZTe$;Nr!pqI`zPYMCSh z7S?Tjy)3f5!1|tvxBD1pM05)1o?bQ4BC3lL;-qEaiZ{rQQ@f4W#$!eZrx{h)*|*EHsU9**5y<&&d( z-Lsgdd>uKxU7P)ZKW`Kd&P`7!ndwaJ^6?iuB!Va&1v=?zwsRZp={=_WjzO<~eg2D{pD#EfDMI;P~r>=?O;* z%>3!EzFDlTFG*juiDYlIU7}HRR_7wk;Q}LtOtdiBSt0DW{6j4^w^Zs_TB9#%T}!xw zni)e zY>i!`GT{i5g;saJL2ymlZoqS_K>MHcskS2+QkZ>D==QI7#$_qwB|C5`oJAnAsIe9o z$k}MZtvR$*NK@;yml_m3qHAv)*EbNy^Nz0!IPln^b(S&as#@ZF)S~N z$d9i)H2yP0Fr08HY4WT?pE+$XfBlz#k2UX+ zU|?0k&JF0x?O%RRQpeDhk;ee)8BDp!4fUI?+>n*W&lEugbwRdo9HI4#W{T`w7^+#L z$NMGeQIvEBc`y{n0RQ@NzW#7a!Xz{VB8J&5h-@-cN*sX@TH?k2Y#ijcAxky&z724} z&4-l-Y2grlRl-g+>Mb-X6)MyfPdzWwcqY5ciar)5O@%z39-*Ac@RpezX*k4aXf6j_ov`f_uB>SX*A5q_13 zaS!oRkn?eV$56wqM?S56O^4IhhoRRHQYS4$;&g&0h&>aVZ`Ny-{G642p8UX&`4aFW zp#vd1b5moC`zJvrc2I6m^q*@#b4C;Q`)xy*Qg^zqHFL^fDwnUf7BNt7YWLotkQ~L~ zE!9-i3>$I{E78+mSN6BaVUmw`8x9XR)$sXc!I3}FTdlGV&wTn=@c8o)$uyYCtIc|? zNAJHy0#-)ANAjb<$?wA#bMaa*6$~6$@Ed~t<7fL zY9TGaNV3puDLKcmaSnRr*{5tTv-V+Xeuu-DEQLureScJE`PU_>fJYof1W;nzOpC6u zr%a#(72UjuoMFoH71P^3JLFYZ+XDFy&|c&_ty;OH*LHV1VS!0LQ;my<8Ae8J*gDl> zYm~8%{hk%)dJZ|?2zsJ#ib*3h)<|d%5b2Y3!#5#dsati9o_S8qTvmrrCWZIk%YqCEIM#i@j<~4}zCA$5afTt)&!#-3qoF~8^h27QN;a<$ zUeNJuwW_={M7g}ML(1uQsIR+8@G*N+wJMiuyRgBHiIKNTrzIMN#B8d~bmNk@$*dDl znz8!vw$~70lHKn3$5OpGM`NOCh_v#9v&Hv{XNq#fjI^+Qbwp5JWvA-YgEW@+6}L^1 zZEH|lIX=14Xm}O!^-`$`?|j)gm6fI-DJbuSgTbIsP7FW$wO!KW^v^BZSbpCxH!Wf! zV^^W&X>?*>Xh}8e>!x)l+2v*2Ir#?Tf&!jHj9R?UG~Z#=gk~)CPZnSrCYfj*bqztZ zyNzHQptQVR@?dV!0pPID#Mr#jPckk^ZOZa%{XU7x>^$q1i;oH{+cC$ZUmcdOHUE@t zeU1hto2w0$9<$F&)R3sWs>*Z;_onCgad0j+jgoS%C+(vGy4mR7KDzkY0n>~5>Td_` z|H?#6p5#h5+A%u)O1Idi=GxawWK^FEkNjzlnbk(}o1yOu%q?(V-#9n3d@H3PylH=O(uhJ`MljoZEVSX!AFLOp4g?bub(N{zRk z{xly8jdrrHv5eK~Q;_yu!3sjHiGi!w^6~;=^t~WU)$v5|xT+_;`}Y-RBJ#eZQw&_P zqWa+8xCLW?n7T8txwKcKF7$5>Xi%|*00UFVrcFK*Md*Lux`omX8A#HL#HYPJ{HYsr zHydD4LwVsr|L&1eul}nhN=IMSLvA1)55(%gJw0WypGYQY zS5t=NQgQV+t;de{ymsv#g<%>G1a6fI zyOnl|=(P%>N>aD+NeC&fUsi9ud+Kn1e{@M(rN% z0_>MBq0IHaRf${|7npt0Jf+y* ze_heLEdJt`^as$lkHE&PW6dBOGZMBjax0o)hYmY|6x>MKN zE)YAE*z6?Gs)D_`D=YYsL4SOWgSvh?tEsQvYl_CT)mZ9)io~=u0-15=_wCsyH(%sf zf<7cWUvjR^!(;WW6{wXqlLXJh5w}1GTFLR2uXY5s2HNN2|GY)Y>^itC6`WVDU7ShQ zx|GCL9K2K4@oyPCxF;C+VbT#bQx30u_DT_;{A$JEme--?`2FpJw@Ua+(OZ(BvXviki4_<+XgQ$ zUqF#!6c!FHTYl$FoNki4vr~Z;gUAk2A-3lUX(KS8AcGVY=bQZ@)^n83qquY=8XHca zkyp$FS2_k8CcRjp6o~{1VI|#Mjm@xE<>&kZBmDD~SN>h7@gU50NIT?*_k4_e@H*xA z*Wz<+riB&`ET2TXPGH6?Tle~S?{0>J?p1FjAh1Ib3RvLDF%#}32>ZkkGOK9(5Yu>P z>|(#tky^tujLMJEqZ1tVhqi(#ZO7L^ZXBM+${}~%HRg1y**>AvH9ss5R-D{clR{N*oGMj@v8e+6wzWEaNKj)Gxn2b$t?K5zySh4sKn&7sMM`YLd4F7@bl!C!? zDEmz9egE=(8!)e#8gd^mwW|HaTN+@)lM#SEK;uCy^_vGx6I!S7-P%*AYcPxN!jQ|z zRz-6ShL8Z6p(<$<%^c(%rzN3(VLM}f9E8$EP+FxXcj+<4mXI^EEV#$rIo~PgtKG-S zB>cOx-6Mfqu^GD$U^F?)Eeo$Pza&jLi)6ZM@`%Aj3GVEKgKYOPiGLPooXbG9c^)&{ z@$~8CQU2L3q@&wi(Da`<-mrG%rs~q?K0MPPsT~dfONP771UA(fJJH{D8tP?ofwYsU zcvbq_v>Rnc%Pwvc98onUKD+ef@41-0QHTH8C}Uvt7hJ}fCz3t^dJyKfKC@6VDJo*m zoOpYV=Xv7xrtjw_wW75$(gsQ1B9NNC*Z}|ZbM*51396{T@H9Te>bo%=rUK&Gm!?9| z7?Ue;&iE@aScNnV3*&p2M})(^?p4+p6g#(uE1UDf+)qZ=Eo+E8`&{ni?+A@d7b+p< znK-^kEu07gUSYY$=(_3?MLY>92d!sMEqEG20tBH)kc3o}>2=9U5UM*vptqE+twQwU zJ{i6q=;xsv(SIVCpDFR9eQbx}iaAKaLTHo}+y;YK#w<@)BD_ffSwnAu z;%ONod7}+y8DH>DoXeJ`1CFjAdmw?>d)8Z%ZNdVgktgzTZzkAZ#BekRwL(tZtT?i1dSr`49$pM&wk)(kqf`;X~Z9 zJu6-AJrWTJYUs#ZB06i@jVx(Q1cu}lAm-OEw3OsZJciJF@c}Nj=l5pO&&zQr; z_LssiV#4NAD~R$hSlJ~Qn*T)d5x%2uxbr@1#KXt~kqW4Sp7rS26Tol*ML56Ud1R?X z+PGJBuORs$soF--{mjnefFJ&eTFjJhr;<`}i^~8fL(|V)z>ja*%lYMcC@o=r;SbdykngI)j3a)>v9Z{Y{~Y#~X`EmC?DanVZ~01g zHETRn=AA<5PgY^xFrZ4+W*bUuFVRA=nAqkmBa%&QShlHNcs|1gTHYw_ZOx2`~uX_`7tsx%!HtLTYEsQwqd zRhMP4X|_4fEr_6pT~s%ACf%MBE66?4@$GSp@GHO#KC=^V$rAE(wN*^Hr+Rcc?i*Kp z#fpf2Y?ENWQZ&SrC~8-SPF8#1A}!C|M|nI;Ftg~nusL*&fsfI+M*$Ti&&lM$ih(MR zeS9*|$R<*;TkY#yd3~XK>JXX8s07UD%S5+nQ9o(W`uhxmp|HyWh=&~JqpU7&Ev~1b zb>sMe$Syk+8+~I*coM3_C$C83Qb@hS59+Yvt%V!u!K92bYk#YNYL>2B23OMGh{-!B zN$xOjx|Pf$C;7bA%kk2H#ga@Eq$1HFk;O;Hs=}7hrwz09Gk#`%cnM)%2GA>n6)%!y ziy@LXIS(P;>h%&tJC4Zf<2~i1>B758$KF#&2Acb_E2Hh*p_K2Qsw%JRh} zxmT&bDppt8p{`@_$-kZHK|Rz>M^1lH@Yfky0nOL7vXg%lTjLt2RLv7{tI8z`t%=e3haJiw4Ku)Oi{_Ys2fsKB~*EI^_5Z$=Zff2Gj z-dCfBRh8JqZbGqEl}S%teeoJ<#?8>p!MU#W^F2s}%)S7|OM6Hr5}39FLuu1J$Gp+U zLx=My~GRM)mCxem_Z(y$J;K2++@CXDFboRRl} zLhCwH4>3XfPsR<>r8DcwPL^^0WJqy7w|Ic%IhGyNO(ny(eC^~&Q8H5eB?wueovNG@RA)X#AwM3L+1*W(Zq zu`{)`C`v>SCj-+84nyTCbe{GX0U((bwTN3*v=r_BF^~$9t5k|ax+zBaDwV7weLf;B zp^A4WXpcocL)#wwLGGXIyFl_PFu|e!PrpCNLlCjN=~seHfqfttzl3|FWT9pi85tIj z&pk%-Lh8>~B?i$A9hwF@oMeP#>D-aeZd-oJSH9}@v4d;@Fez*l%4JJ?{$+aXUhl@a zPZuQ*KFnQwmz6URE2VPE3U;cvmWnkdO`5{T1*4l~ zWs6H92ST(q4+UOr7EsG)^al-sMTEDv?lFsFpJ;=_cgF_I3S4LqY4tP; zm$F44>1^4FY2UAXcgw9Q2yA0SuYcni5A6`)`nCi40fjOq)`;Rm}XRR+ZVG@7m$wSBye3Sy=dmL2uTQ%G)zVCE* zPd-&+B^0VJ$_-O-)=5-{xJ|(~*3>VF12~God$*-ko6Emo4$+~a(+mHwYxVx+1Ho{n zTAV*CuyO~lGwWUSxz4eQLZvQ;%ANUDq)s@po73g|wA~ms_48?6&G5J0xk9(F_~VV% z*W-ePhMjwN%(v#;^v$U9Jb)Qtfool_-uejI&{2yRkfI9%=>#Gf1#xkZUk_X6( z>$@0F8Z<|272Q)BBWijv+Lzvm&H(%A#cQUn1YARpon}N&AARB;kEa@`v~gq8```eu zibv7Q4R?1j%kayV-W}xJzDE>{f3*Ss6*%k3m6S4v?2S*lpqW5naRnoA5{CBte;Xe1 zO=*We0zS$gCNX5Oj|q-8+}FYn?Z41~NI$jN9|4wReAgc}Gsx#xA?iSA-KRNdRHIW* zzkJhag5RuuM%cU2W#QX92gh`UX7slD1*%AXQh*|a4Fx;SxD_1xqF`w9&H%)zo=s zB^CJREh3f5<|{NIC@+|33H=-eY1SUmU_3uHY~Ra8PG7soaoLo3neXOkPp zU!I$IgAJyn5s7zFGv2G)y6qyMOYVsB?!T%WxKw?R&8SlQ3DwgWVOFd8I?Li)^!cCC zOo0Tj7o-JI1~0&7ttwuewfE;pK&|Wd(X49=opYcaNT#M^;T7$dJXLbX#MA&m!7iP=PI3+VU z8YCA|LXDR^;UA1r0YNB*i6w1t{*AbL_@77=RJZ&p>ki3t5()#ef3t5iK|XyEc=of$ z>}iA1h7+$7K%pM~CX`!MkJ<*}=b}SLt4zP#CZByC%vLZlcRrruit9en{VL*yOm8tf z4*t5FtMH`;PrziEW$~S=>n{B4EnP_9PJCc{MXs*fq`tZ%+HE13frJnLfhaOr74e|BQ2s&!$V8HCdWiJ`JvX-q|uD z>cpunx`Fc38diy+F;kB@w{ozF(Xah=c7Ijfbiu%mo&(MXL7T4z=2XqtZ6d->lJ=kU zYQ@}*hz+i&ND1>?KLI>cl{p_emdv-Cx=~0-Nag49bVM2oYm6Xo!{a)1t0b|UzrrCS z-aIFqv^GS<<}F0jRULL^Y(nAnj?v3v1OAf+<;w-r<6N=FB=R;+$>20c?$z7q+Gyu> znr*|HU-9DjDxpSw6i*nN&!)K9d?r%fd=oZ&X4wA2paqAoBlUOO;;+i(9EBiW2J-N( zR`kMOjI+*zy#Ii#LY`yrmF{~3DmQv}%a&+!Q&D*iMffS5hQ|YE)?&0fQ@yU)PDUI5 z$ugId^D{1Cyk?X17WYqnjC|rYnBZFPslm9-*;Y_z#sAG*NU2m^)ZgUpwWABw#%k^!-m;|gkC= zl}0KN=K_9l?XE+e-_}cRTmh|rePSlhU;q%pXBu$jfi~`QSM63B{`=Z_RVhiUOF+&J zw^o%G`95TpqFz=yf}$o?L#1mm z2{uap!k}2qeVXZFl!X8PPGFU#(0roq>M)gmuYOz|>_eUfbQ&MMQx#FI@DZ4(HyfOA z`3U{Y1$yZXaB5@m-kGoy=$@6GVF)a$$1Tcve#00u{mTIF}fpbB2F z{r3+S2u37>a~v_A6Cb{4#Mwq(7+cqEPcdjs`ULN*ypz z2msUfhCR-!FZkR05-f?QUwN#tICX(}lR7jb1mCi^^7lv(fVzqbw+O{)_#~iL6E0MR zEyjcCGO9^| z#X#BLsxyelONUieuQsn1g=w$Hb>T~bL(lGhzy$=T0`YhOw|x84heB9f(v@sKh$X`~ zO(+J3d+&Tjl{a0jhAPJ@r423wJqUJqc@<6_%^m*ME?=M7-<99-8lRnu0I}Zv1J4nkAZW5(VJsEF zDU<)j=l`ieMmLysWl}gAFw0%WAa3rla#hwCH5K7b_JR`RUMLkb1~17;6KH2s>Y!a^ zOG&d6RjS}R6O9Qbz-ay5ZBf?M-eR(6o3`QTLy1 z#;zX#M8%39u=%(ht^q|EjFI}VDvr;Y%i*D93RffuKG6P7nx?A@h4Wf1V4lLBbZPrx9cO`6zdtI@ zE@cTE|7cpqVs?oIE<>h~d4OhFQ-C z=i`mb4UBzXSGXj@a<$17)WltI)@#Ip1vsIHWQxs+0ImT{k0c=OIJ;iXZ4jw0=CKO< z25b+>cJxe<3lwv1LRuZEl)9yU#N{Q)#cN8zFttLo@FO^!;mIrD%APENW2XQ4@+R;z z=rZrTF2UL6W^N691n*xG+cQ_|IX89GIFXN7zp2DM}jRDau7nEs#!nr=CBTl2?r_(B~W82J(O zjetdEd+@Ty3PlKy>?YkpL4?Zc zU9O0lR``q!R^`_AabOLc*68ZG4xNrMFQ&=%II_o7D6XLZreT-j3au1OOrP^SeVv85 zbIb%rO?RH)Lop3!op8{`Uj(BLNNSJF!n7hEc9Ax*0xQ0YTSwEUnMk`vOTYVIM+3AR!Jbn|w z+|IOvcel&@Q(J8yLDt7i(8*}%QYh@O)izt%DT#s=pwY1Bdq9T+KBHTeE?)z)Rx_LATyztq_Q)==Z%>cYnn)W(LLzCnNy`SL zSKpH&;-SkImGK_Aix=iOd`Nl_8GZD}2UPOxckFJ%jis< zi|kJE(3iXaE^vd%*6O`%z_uD!TyHJgBMQ&DY<#s}h_)A6c2$Mg{+Y^H`FVm3k?~RD z&Jiv5I^7+rg1MGHz)JJcXK#CAbKlSWhg_@%A8IpZsr97kn{m3K)S3vLp&#!Ytak&d zR)gY=JuI#FL)Bnfaio#NIX$~|HT#1?GFZVDZ%5#U6LCVJ$Wq2r=BlP*t}o4(C5{g$ zmfQSro*Gr{;hZvP4KfM9dIQhtO));!O)_7;+!t|D5id9RF}9mlPvXI=YWI3I4&MEG zA>%y56_-6tDeEw_;r=-n@pNu9ZBl_+2*Ki>ipU)`0E-2&kve*tLo-;}Hs_?#$7Yr6 zIQka*t#`E10R}RlUgdn1dpH0(o)~47cpq3p=eN?Y>3H2tI^+6v4{h^UPh}k8k!5={ z(4+K?HX&_0)yJ&|?px(FWLtqW{yb%=0HHNz-J%uQTG;+8W%*-+lwXd1FFg2ty1pY) zr}dnTHCyX$GGK#fje|WL_za#%nE!L|H``JPnVDwTO;!epREi#`((Fc4RV%Envd&Q{ zfK6VFEZB`juPqczRPHHjO})C{ewolCZ5hI6iTYGdX<@v}r*Aq2kN>c2qjSnz=xpX_ zz3=b46@7jnB0FXW^Vp_J$|9xOZ<@X+Xfw?Aah}Huh_O#1f7M-6j6qxp1(Etgpy+QG zjEQ%iDy#~-A!D+J_6LLAj27gdYuRk=JPu~C8ig3Hb22)rn#fn6ZK3xr5-i%$bj+Jp zw9%PxHJ(a%t2totWF<1x$!|sHF_v(-ie}NeZDIQKK1rYE%(Tj#vGK3ov;(NRnGwBI z(G#Z~*>13(`@d&K*h|b&YEI2B3%8JXWe_XsaIpRE?IOmJGF!4|v3dVihZlp43rXHN z<6|$BpVN`jaYUcCorl2Au5--Ru^z6b7JNZO%2l~__1Jfqr2;*nTxEKKwv!{v)^3?m zT+&Oot=$8a&|x|iD2jUCQ)}-Q~Joo+ol2%VdSE z&Ux&??Vk2~_mJ+CRhF68`u2T{S>0EECC}UGH|vLG_;uUWr2PPFSc6l?Mc^h3bH5k^_{Z%K&IuGhQQVFEfeRJ3obxqm-btw%xsvuv&+}G^+ z$FEIa+z}-UC!_kYzGpO$AaddZZTf-HA$8Snjco8UCp{;Ur{-O@4C{3{d;-NT9H)AU zO5>o%NbBb)adytJynB}$3F%1-@tP;lS-Mx&D(z!CxD@r97JgV60 z!8I^bcpKJW_faj36xy4eaqUZ3#VI&m|GM$bx`H9ftW2{K+h7;>1~gpgTe7G-H*Ad~ z0hywtfts(hW*ls^dJ_y@Hxwd;BVu+1F71^)CHVUZFNwJUhg3O3E&TNQmDyoF>cCWb z`@fTXMBamx1*}K4(!GCj=>aT&m>_9=7^)30z3O-0R4Y=G#us(ybN74VLUcfsGj7sG z-s^8{SO(hABGVC9=T85jIOBu9u-fq)jdf2)73t$?R7-!$_KplFXLzu8H3N|Ec6n*p zFTMai9(Q!S@=1J`&}tGO=5rEac9VXq!de;7-FzI~Z-(FJ3V^ zOXmTt>PqyTDS3$4mA2R*6UP}6(G~#De=OaNHD^ZqzShvvxu1Y|!k7>OII}VLnl_f{z zD+fo~*-|2SAM6k+_8o!FO+Slz&$=ERN1P=K^bdjg!AW_gUrfpitZ2b%+%(8)M&V@a zY8hq?lex?2CRqJiai!71%8gG0{&M;V4tswbRhZNe;W2vYsZoB6+s$n}7~iH6W-qNe z>R`aE=rvJikxA9NK#8NggQf;VXn$KrY(HlQMOhS?+q7Bs9iSyI61Qu_ZiG|=wv(E@ z!AE;mKiDy%>gptJ(9dIBmI!{S=c1O+hy*l^Nc1FAWtT%|T(+bCL(4w;K`-ZgTi<9% z4gcLBmM{;nS;3C^E^#2Ka`iJgnHHy=;2XGA74mRG+IP9XCvc1n{_(I^w1 z_Ylz9*Esw|S8(62u>ok)%yn~`K~^4hbwJtRzFWs*2vyEKw3L9<&%Js(1Q@Gttsead zY64g)sK1yTWl;kiqpd^Lzo{1buPW^;o1ftMa$99PeO$dBoZ`qj@m|Rx6Mx_b`)8KGX*ZE0hF zmo`MdbyU^{onj$h&sHIi&@Y@}CrHZ$uj~T)30whP2a4^rVV(ev$FUzFJ8NJ>N*_)B zvD1e*Fv2Tj%at~9eL2oi83;BdK>D~idOJ! zFb=bp6~3*>s5x3c1gK4Jhy5C$F_lD&^2LtbK<|dEu75vtqqq&quC0E1sE=Ibq?CQU zVdqJp8iwYqY;iaIE&*N?(MziX(0~^+4pKGw4cW!{k%0xEkL*fm$#PX3$5AfYrCmA$ z3`j(&!bR~ayXIhb^cT*4KB?#ur_~i4%u}7xhBso4rd3k1il+5yV&3_sNhA4C7L{qV zgHPvuQin4mb9`g1(`xkA&>-FG&n8WHhweMU*Q|d6un*9~#{+6xV6U#$xY7OkJ{jJz znRl2-N7Y%?r$rqmp`||1|Hk|C#>Vlyhi%9y5JcRlwTufZBg-p_mJ%{^Hv7~6`&kh` zH-UJsy5PKM_uC5~`ja;m56{*I|7cw64pSk#h8>T}FA<%XL$7FN4vHbA~O-wOHi+^;u@Lqk&*M2#H8YB#3S=Na5ki$LA+8FmEy)s4IPhXpU6qza; zkgp}F89N@fiECyB>WNS_$`AFh9~Clt_)~`@D&9tCmV@cS$`9)A1F6_PWg9T~2+OOS z@SA(!ja(l#Hk=dy@OjCl>CY(g;1&Y?fb8UafRxSIKdNNZC*t&qplMf&hH6;&pXei( z6*TtNv-46CDCj-jeAW^u1Xh9w+56RLBLgzg5+WH}3s2ParS8APOwBiyJ%baqCS7H7 z&y9A5{P#rRb9=viaZF;~W}C8M#C`ZFB?jI)uA3IwfvX5lQivQ!ukA2X`x z_BEP+kwcSxbX}0slrSX)4D`l5&NUg}N{dNb_}^1HAD_c?D9g=uUmj_Ox~x-g93U2F zLhk7wPVb)Y#bRy%9}2HzV{vd=Xz`=sW=bY5A36O9JOizcV>~z%`$%A<;M8w6?`Cs}wrX z=h@b)wqLodII+D@8VT79@?V6V#}~L?hGf5{qoEbhw!+6^b+f%hjLrir%H(7(VqrvH z?g_1Bf4ydyPD!r11VStj3PV{V>V>;rSN=T*H!0DtP%gu-CWit&uNq zww}j6JDA{kc?ln0RA`$UJiHT8Le75XA|b2j!xvE5FM0Dv*|laD!S23@^blD*?maUI zhLE0A5DKV0tVKN(RtBtOv;`5t&8YI}^S?>HMIu&4++M?<&u2`&QY@h}2MPDGE(n1w zzR=4P6$`R_;M8%mlgobJmNg4#XHUK+gU?S16io9$Z-#BT=vI22>a z0a*LyC@?u=L&Ysi5yD~=P8T4?s|yv?JiqkU!z$XSyoj!_yX5Wx464JtYgaiSny7%B z!@d*$3b)xCsS)xv*V3)#f2MFmt3tmH*WNXQeSE0vmZE|HHNYK}?G_71tYblF_90cCXH8hZs)ghK?(6U(`h4;Qatv_hJAQ z^Wdwb3+b{iz`24N)cDpv&q0}%5nRj0Ra3x9S!I^sdnp5>;~+Uj33uGbcWFKz5;w4O zR;x#Rk}{*YIuDs4T?>(7{wSQF?Tcq`46N10=yZj>CE@c4swifL&gR(qNYLFd$m3D) z$cyJveHXiE{w>TtU@00BM~Noy*uv4iH^+xM%9B@zzsNAkxNfvct}nI$*>LXST8S$A z_+>46{^!5_Al9)w){0pcm@z6W(a)6+LB%AtLAMfX-EkgpG<)k4g2H8`KYPBJHL01O zv%DuN%IH>WrR(}{moAqm8@UUN09rft1QvHAkNIz<<%_Hw84fMfBWqMS{{;}d|1g=x zf;;|>gX#4{I5Mr-495t81r%nAu3Z#3sK;Yuad4&aKd(E0$&`k%S*nYEHQPdZGpZ$` z)8vn>j>eD(fRKUyC$NNR&+q(XG8gCfCMC>A0USIBQm}3pf-3#wMII@UfGnG9SILB3 zexuEn`HxJz65n&26bMVqgJ%QyZsbotrM zBv^)lj2>Zk58L{T-mKLuU$J$Lr;6`zjYKR@-RM?K$bW4AlK;5ql-=l}ZTJKj7Zk3E zdacz{D3-H%{hQ|>{OoDjNdlLB7vLF9!ZZp~%E?!C%XgAV;J^06L)9)1Ja^nX!Ztdt zuhM4zE0)RPl*Js6=lt^;?~`h^giN(;0f~l@174c*{e3YyB1nLSw|*)RQ=9DEBG5_I zy0{$Vc<#+^RaXeP@guT&^=jJngd%@7BEUXv$pl2S7RrWAe<>S^)=;}>Gu+d@-zN}u9O!>MAMjzvla=9K{i4k9NzGQRr>Ux3 z=!5nm0`H1O@Fa{emIsDby`H}-{7j}PfnU@&nLo|?`~LWRCkTL?74&cCj7pCp|IOiaHL-R78JQ=Apkru7RuFSsyQz} z!$|Wz_K?8*cK~`>#2ah%SOH$%2Q&Cgx=iHm31EJ1JG3reGL`R#*5f%A z1l|^F9Dx^u&5Ow9WPD(9Zdr-Z1Klb?_|T3*Twv@ESfA`dU>F6bZ)6p#nV|*5>F>>o z60ZJ$(HiDW@b)dX%e8M30f%4*7YqG58d2r)7_$CH{?O8UFHpzKh3j(?z7m>3wr>&V zUmeP!k6y6&pE_|jJ^8qEp6$$OG2NG+THoIpR&O8qpg>b4KtA^ivKEOT=oZBZ?aux4 z{1=t$889-zS2mz`e2s~dq98S9vGaq`>wXLzv6NIw9MIO8k&j7qf~u50)tTujPJQak zyXIU>x>CcxI3h=kMyovRfzyXxv8&y?6Bi){AI`bBe3R<^Jx7-$f5U)S#3VbjD*#c! z3s(X~t|w9iI>ynRYW$SskY>}x`+*gZc9aG0ks_cg`b1~3<9|lin##AfogVGs96NA% z#pcIjYR<3a6aQ9rp}Fuhq^}88r{L7c&2s~{}AXQx)ttj>gtQfQQjS%onrp0RU9VCtxozYQQs^U{McMy+TYbC_?H^ySu*Lu^zyM=( zyUAY@RwO@GLFyBinz$OzoO3*jo-DoZv!5eOp6Gj$MLP|#>;1ujLJx^z*vJzy`SojR4dVQkbWAQl*)G#QVD&g{uM9yxKgQRU#pPP{_~yW%#M97}ke$B9ZtzI7z3O zh0+{GWU0L>c;QniAeo(z6*uRY=U2CyCvIo0+Lm@i9i(oK{yY#oU`)5SeY|Stl{L#Aah+&RFNq!^6leYKI677%* zP1RysLv1^PRoQViMaQ0+m3-S`v*@ZCrw5Xvgins>=1av2%H;U-bXgPVUN5=9Jpb^0d`{3Bt{K8q-L>0PL^Ffl z!&4x?)SSuY5RzwpsECnBL~+t@Q9My(jfeT9GlAth0|X7FpMKTRcc+HaK5SaPl{Rd0 z3O%j<&$AFu+5bQmunoCWDk`Va`I%Qf2HXV1rTvf2eJDCFh3b1P33{TI?S^6H0c&Vw zMW)1cp>Iy#9QoMY5nLzh!p9yC(iUh`%@YElyE<4KWA<>ht4cSBIh&$KE_C8yUD#Jb z%#Pp{_-3F2T|2Fhk9|?3nW>%*6e4AX;ljWB!uMRSOFi$O*R7LE!*w$|x~N$-RF6KG z`eRI4mhbnYz?VB|p}d-%@QVR-(e)IukQgeq1eMV!h*O<=OHO?c>$b3a-E_bD`$mgm zMD@EWd^-wPLOfK5QS_R^JCLHEQ6Z-HJeWLe#cY~uZuY<#OSMV9{Vw-1T$oZR{P)AZ z^rL*w4+XvLewNg}lCU$K&?ch<2(ErL1E{#?Fd7><3OZki2$q9!eE$JK?w%GM!rhNm z^4|9e=KoHZhrCb+=+y2^Uc2mC85+#WJSF)#vB=#rADV>~Kj~cuOMS$)A9@jqX6Vv{ zwD6^UoV4!-FDU%3N0B?$u+S01e|Bmv+?Gikq%ZQT(Bn9l{?uH}00v(24m$2wt1lTF znDAU*6y7{fo9L5PK}{pn%fRAPLXYP$7MX@PMhn{tKb`r44=wL8l4{<1RthtrWZ?Y8 zVT3+N&}KWP*d7LTemCv98`Bz)0StG3L@|`7z=+zvqlF~Lx#g2M09ilYnqwRfZ?gIS z$;(5fKDvUIr#d+WcT#wiQ$Lgj2MB%AmqH^|hAQAt|2%82xUhrDU@&QB6jjA4di4Du?j9E|->BJYAF^7O{$uVAA! z61@ntd$-3trhnbL9)3#0jtzFD}kZKOL&e?1YS*u9kB@T(=+vo%czzHK_4WBs;<>62+2U ziZ1V=>MakmIjvnF_gPBV`s2#qi=va2=rmaIAGE)y+OIA_YuPo=a`y*j#ws3Dz69IT zC!zZqD&tXOe!0l0yx)$G7}e|Q;Uto}Pr z{PQQD!?c-SKO?$y-r(yNRHY-}yRV6{mv!r`h%1Vhqu!M&D+Aa_01}ER95rc&<_)l` zsgB6~RJ9ZN+NKUW+Z^@%JBs0Z^aK*9aH$WdT(KF)5&4plgG}fj(L$U?;p1M#12@-n zua8eITVk0-_);T5dZTmWsK_9Jr*;KkS}vTJhF4e4dtnr}06ZA4c-*pP-c(NqsO(?kZ>i7&S5!lQ!Pbu-3+noej&0e zbIN0sObs6lEigmj0ErX8(V^5Q@wj>8u|7ufn%27t{DqXujs20}=33h_-dXo2ZileN zFJoih{4p^jK0m!W&Aa0whzTG`oB$)D6M>2Tk(p+&Y`2*`hR?U{x7tj?psq700-jUsc@rI&d(^vYU z4K6@Z5Yox#D{vkx-pfAX1wSEy}ee_pK`zb$%PW z_ifV}AzGY2)*gd;{u9T6=5u<`-&+dk0n3ZR)EbLPW56$ucztU{%zzyF*CED>>@>6` zYYB=BYew@?21+h01?LaYTh`nPB_p?&u~Yu-LZDxx;M+RY`^j=>ssB4kSUgkbsK(sQt1|8Kw03T)==PLVcT~~>b2o>lnp>&m|4ePg9lPF`jHq?K3N&MZ#B&?kqCFK@}uS7#XZ-xl7pM*g0EhLvZ@w+i34N}8 zgj$~J?ysoZD}!M5EOOH)KyafAs)5vOq3e8PFjczd#}o$G_yUEXz9(r?#!6sX!m+_r z;_3CwSq0bc+j2&o3UGFUl3d<(AcC*7C53PGishB`7nI}G&wD_3gt{EDl)Uc)!~{$8 zw@Mj&qD0p(pwXhS@TwnW4-}Shx?{n~oqYTYr6MG8wS223Z^@G5PN&bHL<2c^o zA{ekr-f+6cmaqO<4(z9*Or@~k(=w>?@^@5@cla+uYnQMoG8|(`lhlBwvJJK|xUj!q z8?>uwQ5HmhgYXD=h*}*_vQ7FuUIBzU;dTx7#5_HKfxWe0$1TMv9H&0xR_Q;nc=q8A zg(-t1OO$>J+f&H>gvOnLb6b$K{jK@O~2 zzfHQ^+GnM-xWe(7k!}NpFaONm=zXXtkFN_`hx$3yy+<|Gby!LHF8%n??=25XI|9R=@)>ljCebr2(yv z;xl3uoO_bi^``I0DKBH?Q+~~O2=hE%zvjc)es(54*%(J555t%1_wwI3X4bp;{;4FL zXk(>c1tDh47kv1n7^IZTo2K1(cjy^l_SB7GjdX>=RUZT#Nl_) zI_WM+WH9lo*64V$I~lZ0ryE@X{$cUE!Ip&O z1-xB;Pk~@2N(EcgJ*PdAUgR$p6=?&?V?L<3O&Ki!`LaCSzKqn$50X7AP~34EQLm+g z;;?5=jo-k)o~`4Y4|x6Uh%t1VL_7JYgh&8J%zJ2<1X_k;HgijmC- z?&gE9BcB6qUB^s7wD( zwdJs^h-IUw`wfJVRmTW-zC=HR$vXPEl4~~;mYo~WFoLdp_~@>70tf8RZ*hHSDae_r zx(HxzLo;H2v~)11EjFfJM~HD=8EaM0lQA#?{AmoYqPTo;In_$)_%W5(E}BaqeRS!u zDOgzdC#8snG2DgU5=1Zs#&Tj^!!_vO!IYDtFfa1FZd|(IzV~82jP^7pa+Hf%ji_M*+Hb!O}vzk2WVt&`- z8sdlS8=r45wKUqO`swzo&9-kg(N{)AJ^m>WS83)D!sTlFlRS9<3gl5K;D*(jN7{Tk zJ7_sx$62mLWy759yR+A=ZI`g@j-wygctTKZ`cmi&Yj>D@Y1#nWSIl0SvK43;%b(>c zy3%x38@u|o>fBO%mp$RuCEq}r`?fC`$X}G}kHI6I*v1E)=>b8`y6^1fb*qV{!%pSs zA`$PT3;Ub1JS-ZEJSPjJ(@bq#e)2WlbuR&G;bG8BBjrAMNaQG_fA6K`%14q#*I+uD zfdY&^wzpd2>bf0$JO^Liv~URXFL(O8Dk83-B~C9tJ9XB7PV?=zg_m-cMt%#>Q~oe6 zlAF54*Q3A@bgwV&ffI&}ev zkxd?)*O0KRlp-nTb7!5TQ+S)B&CaMT@rKuRQ~B-2KuP63&u@|jq5jziB2NZleSO0A zD+0ypR$JxaM=sK^Vr&5&om|&q$-ZUrrU?WLjR7fJow(`Ux5!;A)6MKutMj)z?kFR% z=kEr+@4T+dn@ha25oMbQHIEkcNjvm7SYZ$qF=0%n(%EHjy$S=&T3Rxh+pk%)(?@uM zdPsvWQV&DB_6-3;Msdrm87P$WXQ(~Wy*Urj50i_Rvwrq)I26h~xJxzgT=fCFkdVJd z^hD4zq1Teq-E8Mm{|qhFMkL!_qaBAK~NL)q+(+v@EhVCrya8%WQ=zbwKRu*5aMMU;lWlD}QFm@vFx|#PI1L53=vpw>g}%IBu@=YwoC2~p)|3Z7aU3Z6^OjL680RD zqGV;2)uE35Y!K@eFg@)k}M2+>ZMKj;{_y+EFNTf4lEJ7R;j1g>TS5dXZ!5N=9JU-@6Op( zJS8=6JTO&n60n~>gn>d&6Qsk>Kz?l&9nQP+Lku2mgY321BtwM^lrvyNFx%}e_+8w= zQt1-k)4ID{6B0QG830*ERD1~U_=aSpok87cg^SmeMANqXl!c(g!uk{giw^oAm8rHQ z632*%e$$l^MoDY`VbaOHU+DzV_f`HQ{3L8QPeRQkcA}hl zdIPo0({o!3-Dk8v7;&G10S8jZ(U{PvZnfg5Zao@0!LG{tA~G`4-y5V5>b!cZo?o;i zX&0qxa}~eOcHq%YvZ~ohvr4J-q@9i*Edy#HeJmaK9E})X;vjI-f@pl+F;OUVA?OU` zufH4V8|os2+UN2}9u$iA(=DDFf>B|Q`6(>3Hc+Z;6iG2hW9=l2I?|f`jdtx6x{xk9 z27GJrE3*UJS&qyOY=@T8Xq5M!4~9)`@0RT}i+RHKvxar+?Y1GiB`SLNY<{TtxcBEm zhZ1||>zwyl-qSG3g(@-txlY;|{$9JBu~{OIdMq6A?5@S9D~EK9eOV_~X02l5>kieO zt0Mk8Wxl!eUF_O}?`KxeZu}XY@&0webuIrIL0%Hut9KiD^|jB11^7K$EEuM5&LeCW z%G~Y5pdu$or(T@+>p|(w_8(r^cgy<*UJN`sK5aVqR^~^{lNWM*F+WZ{JPpeX^$^>o z4@5?U<2+4yKAVfP6`lEcCpm~4hzKCSjUp~x_uj9ZsC*kHO|kW}`Npd|)RYoc_3Zo0 z%EXFN7=xBJODy}ov}DCN?AX3cf3JIW0T{ZdejMt1-)6rNBXY=2I!Quw3#JF<;%z)n z!m}k$?dZmc*=|{8tyR))g46|FTTO@fsg2{6t2EY-X~I7?^9Q<%FlwH{N|K+NoBmTq7;_r4zW=gS8@si80#r-m#?Oqj)W$ z(&N?N^Sd4$+-1ab-bW~dCE3aG<+>F^tH%EB^B0h^IqP~3S4Cvhpo+$PyFNdpA!;#W zm&0e^lMb=b!9pVIG|brh>KPcdyD+NnQ6#%qjxy(Q>HcJ$5|ZQZ=uH}23L~;q%cV*B z6zghWww@#PT3<{a$NU0thS^bf+c;sdV13qD!N?L0jJ29Lf;1^e*3fD3V^7oi7ldg)+m1nSC3&S@;Tq$7`$uh zxiV)d^790SmBMHBybpAd9MJ@e4~f1Z&{>S~PScKTJj>Ipb@ghXy@GGS=pg^pJujpv zjB0!BPzCg#Xl_r%tf^&n>cqZX-JFCGqEh+}&#bq!(;$~#!lg^vBT@NN|_BMCq7|> z3r3F!4F2~xKWMspc=z}GvnwvWI@lx1d-!bfs*T#);?BIRjd>wE3zo!j)y<^Ve>WIiABLhjKgJr+8$L4549eln}Mu`gh z-MDMA*YDo>YB^gqdABVveq}xZON+ajs zl|M{t2U8y^qXI65{y4*A;*+^I$L>f86{97FcDI4?N1ZIVbceOXr!;|Lw_WfCCD(8I z6>y^5Q98d;Q%dX8AMa1^wmd&F@UHEQ3hNn%n`aCyJFuUfBDDclV97aVBgVH?_l#tn z`|=>KMBPlHrZ}u)aXi;Z;0}OHeo7$;v+v28<27b+7(q9kQ|ukx@p+d6Emo-wJ^m)=xz2XYO3zf@h zsx9CdzewZTYI*lv44h%!;JIqarMs;g`|idq=$kv%l{#wJHm2C68LXFEnjSz zlPxZRrxENiw=Qg|tXusPJQG2}ulV-=-V^%8G*cD_s`fdgk79609~6Cz=>$_(j=9n1 z#z*&(UulK#Bt6Wj;gvFpI}-$IS0hu_)6-K@>8-Q_0~ePS<~Vca^;n_4NOz^Wp0B=a zt07{0xwN#d*l1%D;i+>X+_f=Si;g`H=!zcQM6jljQs#!M6H1!6?BStm4%_qgCqfx9 z!JLT0S^ls(oiAQoA&*gTyg_D`V8o(H6L`f;iWhcs2RwCU8#=rn4!eIjQj5J36d%84 zpY_^dPbU_Kx;@R@{QyZUKWOP($Av{paKn!}YGMRu0cvzlf_7)l$c-jYM5q%G6bHlb z*S5x&OMo2iSE^9|B*vJJ%q(8FbL3q$avDkD^Jm>rZA*dIyQObMk3}xzh2d)d|J~Zx@J+(B2e~m9;fu}Tj zc~M5Qf7SkE)0m4_ZfEbG3#l+aCX17K=_A|5?;KSu8!=hGXF_~put((~rlmi-4A$FbL03Z|zW z&Niy`rn?Z7&6^!;>f7!$sblaNtU8l(=P~IX35e1&ZY~38(NzUG6-&$1 zukg(?W~8MvrJdk;shHq+ur$Q#PmbX<_X0zBeJ{ z+iGb12`mYjb{WDE|LB*8w1!X08-F${t$h){o7Zc6D2~lm)ZF;lZO*pw9Hx`=-V8JJ zPzUTY6Elk1S!Il=LR!qyiRXLi){nfDsk-6!+h<_5h#Eg%hLsar;!?|Dan$k9LoWzWIg)W-mmQ1q*wTTR@8+!C!Q8Q=Yq5k^RBh?sC8*bqT>}a!r zDBo6G0%cNUc^9yq4@$~O*89**s*(}sn*kN#)uyr~b)P+E4f`DzJbOmRpRg0d#I)n! zkLn2V9C7{3YevshzpW7QcIvmDJ?~{%qzUDp@QSF}81`HUa9VBq06_mI3w`Stx>n0g z&YVhJGKS6P8T4A6dnK(Sqg?Bi^wnB6n9Oxl9c?67G7@P2s>i7hGmLT#yi?`-zWz_% z%OF*krEkbeXQtACn|vE&!|K;P8UCZbM?uOcMT;aNm6ciC>=GudLYKnn?%Z!($xdrn zrGIxCGUn1AMcXmBVXO5tA*BFKOIx*&k(IJE5S)~I_cJ^)$cGb;Nf7!JV^)^q26RH* zCZ&k4gpKY+RkBAsS5HfhlE;XxMTQ(V<58EUFm*70)#_J^5j3%1I?BTA91BwP94?uj z3Rm572BODv7p~0+QqR#&eUHa|VGK9=BFO2k@9HPwPI$@RW}1-;7n;j{YY2l0Y9@Xg z9OXxLZ=Dj(-g^O18^$+M^$asYkG%gPTM*;KEv&Z9%A!iS=?ll7=RRd(xxW>rDpjFK@2i!s19j}Lj-i8>R9&4NQJJ5J#k5_=BBniQV=p|jmiL$P0<#` z=)%2eh>(5#6iM180~2huXvXuDZN7XcYh7hHdQyLc)Z}CS~-KR1nX|y;Te*1Wwt-SWkGbvcq1^0u=hdeXmKZNYM&3HP>(YF^W^{f#6C>4c{YYL zj6@l{hZsXc8oalTtP`L^SbU_Hegg<^3bI91MqL0{!>q9^(yiwnnrjFV((cTKsJga3 zAa?iloJi$MQae&EI*ARr7q~Ve%v|?diC33@=s8yg9j6mTH4JYkJIK}(c zQsrcT4oJ+j5z6W5K$hZcb}Eb9*6cqX@xS4*IUK_!#HaZ<`hPP=(6M{5)%vJTLLQqc zjn1~q%Qt;Q<4I6!?isdWqGud@0Yki?+)cVaTzxT!&Ougy%{6utZT3VY&593%^nbZw z3&>4xp+X0dI07`0IbmqFn+>>YhC-^}mSPXiHAXqIzn|N=xgziuE3EWK2wRsJEMe)o zwK#bHl6Q3=T*j{aFI4|^IR2|j=!-O!-+Ym3w=4a!4-%zgwfB=P%#WHAOQkb0YLhgD z=uMrwn^P~h0-$G@PI@BSCci+27Dc#rdwjL>*q*Y=u<11)D9a#8P{n z5S8H1;X}QYvrAT#{u^G5sAj=ZO`wk9zM~xcJr+MjwZ6MmgYVBSeDt_#rCUuG5Hw+ue{if|U8p#75X5FFH;=vKxE;$8Xt&>nhXf-8mX!Jl^8>XTU07GVu%lL zdHyE8oDFS0IgG?2mYFuh+qgxkv^#^3Fg@Q6JS*g9mp z;^W5Y^7chB|I`x20K(YzT>k!j!x%O2YdrKW8K2=jghs)rRqfht&=>38qoEPCtngko za~I5*OstQ9$8ah*6MFFy_dl0mCWyEYK?f6{l!LN7))bT+rV{->Iy(3XkTp&z(`%_WH%GfV<(}V z*N?!s1$F4TRkC*;2rC$kR{(?wvs7W=1RZ_V<5R+?KOLEcpih>T;Si2=TTP@T$^-jm zK5z@qY3-Vbzxm1Y=WjM?6loI7PyBLe$F$mSV7&B1x!Vc)`1rAbqA*2hq1Pg^D!O#| za6MTpbA{Jy9kIv`?!s!%cA~|xS-OWo8g#Ry&y4EXrt6OoKXZDm%gnT=CvC~eZ>nn9 z05Cw;s#J6b1;Am6-JvU zLGsJRrlTb*Bwy=VH+a)QYvhI#j0Dc(N7Nk7?|%V)offTlN}OONE+`J0@Zo7g;nxZ| zT9LZn0=fu^SF_tSiH9&G?h7`IZPsN~ZA_B!xOB5r>Q5-l$obD#81wJXmw|k%gmLM* z?V-wxQHI3jR4tUh;2FnVr@vie-I4btZ??oeG)3i6`*FO^f8t{}CZ6vRMG4w;M}zC(T4>X+!pa<#e}Bd9EOy(U7(;evR9}+cz=I zK))bKdoauQ^j9c10#lA;(kiiTMD&>5@;MegO;=K&+;PTjip?~FRjiQmM!HpV{i z+FYcb58N|c@L)JQ8e1d{@A$!XzU&nb(rvm18$c3@{K8?XbY^@Aqpf?%Zsy-)eGyQB zr{sbXXLArdi8Tr5Up{!cgc!uq@9h8_1`H4k$~5MTvFp<{EaRu*T6g-WroJxvZ&ZuF zrmD=!AU9mTcr{AjB&Z2cxqu_kg}R+6%cl^zivUKmMBJHgt^WJ89S=#2(;%i(Z#tM; zSYG-5q|w_>HGg!tbEnbqToHMY`FH%BQEg)5zNc9xdUZqk=W1+AnR#>g)(!0aEG&KF zQZsHhOOYxwpc`RG8Z7jl?BD7pfffVD`2u!DGRg1s@nhO#$2bosj^BbZl-Ubq4c}}9f7zope5v#1hf0GQ3M#X&TiG31oZ(5 zCTi`$hkNLBZ*EJY*|cuWycdA_8~DSV9GKM=n5kJKcDjz9Gz zfs-kUHN)sVUdG5?!=Xomxz(Zh#rNkb_I}#;*g>AQIS9cDCcExGgzIM|@DPx`xTOSl z>*?f$IJ{Y=x8tA7f2uyRL~L-?pW;VxE#X|f8C;Y*<1eVoe+Puw>)zo+bk268V<3T~ zue1wRKww8f;_^esGjj?*GvDc5>ymUZN>O``{Gt)r^B7e}m_KD%O((iyLvI~I`VRX% z^HO4UJg|Xa4_x>nJQ&-$Hw2Z+I_1=X*aF&kH*yB>R zbKBv|#`{yflJpf*^EwH>x|_yehSd>;l&>SR@?C6S2CGfvSZxdzko5yKl=aT~ei#b+ z63)ZF(`g(BC22S3?xrg6!>~iog}mp3Tt?P3_e*)OrU#6N6fi(Z20G zU$?~kcn=PqHzeI+wbwUBr*D%nT(?9g!KqYJBL}y`^ALA#yVf_xcF!NN@id0Z_f-DG z%)!ktL3Ce9(R5eAExY#SpTW<@(G%mc+qOFwzz+L6cuO*UCd&hCKJvOpr66Z_Bc@S< z^1f#kzSp;>QE+Wgep!Fow45udwNTP@i*211X2YU0r@+$KT$i!!a0*G0NK(t`;)Gws zV@QNi$`bqBn+=X0v#3HxVi}YVBmCoC^=o5uLMfg{?sa<)hn;j8=KS#6P-o2u$-MJB zm>|6#f>p!6oc&albhG~rzi-!KF?|4GGwQg}JqNY=@aOwq6%}8nSI94kIJVH%-Aqa0 zOeiBWVe1KQFijkq@8Hxr?I~2mNdCqO&_{V8aXh&w07@()4?!MbTW))qYozek!=U#< z_F7*vWVVAi560qtvD-6-RKmuZqdXKGj{dE(OYk!YH_J)8<^o+O=(Z(S+wMjM=*rYz zpWkzKjGV37TK)4VQ5dpKKE@3lb;Z15EEXL^a|5O(Z6`eX@ZWc%uRM~TjkIWyKdbfM#{h+-3S8%UHCsqf0}i(4XJj{S z<;M0L1|9aj|6p?T#vMkPLQRl{7vD?y$KR;hXO-J@qN#n>fIHC7Zt!fLc5uMs?dN|}t zCar8*@lG`&L-!FXKn#h~c5#~9r8gU9?-3NqydSxgP9b$O5{ThJ|0xPqB93mc5?DMb z%a@<^OECF!um?smFCkhvW%#3O3DF%YlWD^)Y`^soSM624xn-eMIVp*bQA1vLpDM9% zFlP4A5^*O$vjdd9`iM0X`w7D&RWF8W`i%Px3Kn3Bl*e%g zf$2-?_0c_oN&a%}>|+jJ_S{Gcmse@{MN=uvam1R|n0?@;OebevKCN7cxNC2+rFU zr?;j|(=qoOSHI-hb}~1Z+4eIGY4S)ncf-+ledjug5;{G;F3Y;$ofIsJ*+e-R{JruN zv6=N5;6jFxbR@I(l2e;86VWas)DD~;6vc%OH`mwg^lLTCw>QdCZmLIoX)ktr?$wH5 zHfp$nXXH4lSj`!W zfBSt&s}1$b5%S$GRZgR~k5s@+=BUiUn@IRNE0et*K~ki5*G5MnR>Im(mgm*2sMdPH zbp6|~5}VA2S^G2oyo+(5Y(7Q7g0I+)8DkN$Rvk?30CHz`>F1+JUD}^U}NXCNj1LD6}bQEa#^V z8a(1hq=v>@FNcv^EK@a9P&%BuE(Y7%8Sd zoSELUJDkC^inl`R?1I3dqhH_)Jy$nqk<8b{_1rXPi_2utZi)ndRf%Vt+P{RJx8g$p z@}frvij82i5H{96^N}Cy=w9k#xD|S;|ksj)+_U)ri~jQ+`~9-#65v5F3bXy zC?1hCs?5Tw)m=JlpceUTL}5hGQE{M62565P1{UHyXTFK5t7#xF4A{@n*oY~5f1v>< zgMv|C6_QL|ec}%GNj>Mc#$bWO%H6mrYWe~9cKESg-C?5GbEbn8URt6GK>To@bX(y~ z;o8E1mlt7y=%*JJ|D9R@sTd6n=Lza1v5=n*tetW5lAM>oiDC7KDL%s(hwBv%<_N@&+}| zd@!EUPeq^yvJJE)T3|1$y*!Htalgi+eX7|_()2rlweb{{KG}EICgkVL zsc{)~hFfhe-1DCw4oFVzrCCPY6KR76awi5#25$vP4H1hxZz)=|tBmxwwX{B4L>M*DMFv-@* z-7-hqK%Y-0R%II)>RbAu>0D1C83aq#srCI^60x}KQ}*6xcm50@Aw%2Uw>zS?Hye0< z7&ybEcq;izV@>N6K-#q2JnoQh7*iVi_}ToBI-IkBBjYPDxGk(mIz0y+)V`6M3*3?! z(D?MJH8P!KO$jT#4Oz6_r(N)xBg7w)7ej zTZco{CU_Fj4kT|jJT(-`9q2@yX%&X927`9p-pcJlsmcD+O^JqTDzSZ~*d(Ot+OA-` zf@T>9Ak@IcW5HsxInR{zeh+ONNJY(L(mPN?`F#2I3;oaa*iOf`epjl}oh{EZ@`ue! zvX=*fc?u)fO^N;EkAG@QLsGG5^L6MQPqt7oJ<4e$1+VNvDY;MOG+SWZQgxL@)k1NG zi~yL^@o|e?yZidd?Ps;Oh%}c!+Vpyv-5yrf;xS06z>}GPLnH5{MWcrGoa^tXI6nnc z)Vg~!8k>aJR%H0X_u05G274q>dd$ab zfz;&1C|-q>iI-n(t-oqO?(qhC_MungM*8m`|MO6x-B^}lUnjllw*>;Cpsx$(_M6-8 zT~CY_^jWW2Zq49TG`3#VIXNkmjlylHFQ?k9e)iBvj|JTTE@@y*Rkb{IX; z3oA{C*1n-F*(l^fX0Yy&CkoXTEK$%7fpDT9!-U$A&-f+?jt0*b1@b~_QTyR4p(E4K zqq%^ZK3c6O^5=8&6$PU%GVK>`itwz3D_hSH{zHr!1~e2>X20SLJ?%wZGWtCArMDIY zp1bxCXw!+>6kg3q>YGrEGe$6eQANC?zKaZT2k1kag$xfvwK(@j9~I{OmW8b^LC^ z2%L3Ut8sB38aN;(>rmjLFK^@z5wLPSH+{*eH81TF;MQvUnyu21spedbu-VWoU$^z_ zV>0nA+F5e7gd&GcMFKc{)h;vwhB!Wn$EjtdR3!E9v7L|aCHiIQXCD`y%E|jktHePp zFXuXbOU_OEK#PcbjVQ**4LPf}>;}bK$>AyL3p;4>w_YMVeKAikj%9B62~y-|DBqxe z1GQHHl=~eSLpY{bK&CE4wg^zAF+5kU2u;g1LL-C9d9ysHKCwJ6+_28zfhgA4Zbs#T za^EaM9gIYPwusxj#;DzP33_segH#Ul|zT% zYqJXxhGX3(oCD->Q{ExprJn0fG+%v3t@N8vsX=>3;2T|x*|V_M+w`pbS?MZ{8jbd%Y3tt-vzi7gfe;H3F+#kZVwN(!AP^KQ8$8^QUaqlR(aJyiAY-aPQNrh;9uB1~g6W)Q+f?Cl89IpS7Ck+>FJ; z&-(myh0B$Fz4^p!pC5>-yI&jdw96BAUr$OlxS~7yWvCo}H7rZZ&TGpwt|q}P5k9x= z$w#S|-HZx<2l9X4e3>9gTjn9$jSfjmXQkDtA$EmdYZnYTZL@ZL(A|l#$19yr+AQl1 zU&dr=y-DQ7hsw%>wnQ@d$^;_vRv;pq>KTC0Lsl5Ar6EKgx`6JbH+Q|-eBJra*p0{{ zEKKAnVmyMpZlAq3*GdIE_b_e#M@vsVqtniH_ORFCJiX&dcd|IW>7ZP%XBSh#{w2ik zGhrw}r-<1m#$N{KMcuX`V2B7I^NZ|WNlU|cb1b+H+hu+qG12eiZ?A z0~#XbiT$dtfKF}OoW=(8-f^sY`13md=TEv!#17W>7Muk$6YM%Iffx!T4A%+!9NA6A znWo7(NC6{Jx(#}kthw*qnkVZ_G#|?lA6%TJZYBVr)C1RU{e~6{p0Rav112pu-?-sO zeRqp9`JZ3)=YNW^6YE{86&_t&VX$!;h$O)fE`4<3jeQ+ z;y}UsATO;lA6z+KdNvtU!4Ua^0PHw011=7*cC#Ic0;%#jr5kA&bEH2m`9B}9Gj}TL zdL#$rtV~~A>0Fo`LIXKGrt)U;mV~wH_r@rZg4Kss(iAe{91()_JqVL`<+<|_flO57H_T%w&g8%2QZDE2On9|FH@SC1YY{7xo5!~HI@biyN z#R|k%p`MRwGdHMWt!EnOP9YhaUK~{%F`z$77|aDElwmOvED`aA72a)zO)Ib?dsN6W z@0G#|;U*I1viCQt^;e9UYm(gvBfIu|2NO7R?s|FnMI?avxt8Z*ZhenY7$LPz6iP zaB>dz$UYzdgc4ol8*Ia0YVO1PtKmB=18k8K;5;}I@5@5%&=BXE11bLhuCdDvWyIvs zST791n?52iV+0YWfCk^~&C-eo{0<(kqa>Jrh`FeFbL75vMrpK~bNObX3G||=GQLjM z`-m7_9PYP)(~%I#V{TVGQ=46~kcKh4F>&MndBVim$WYw|%i9XZcYnu}iZH|~{qZAS z&(s3jQcB(seX+2%BQI#5TN%23bYhLJ{oX3x>gyYOlkeAUAb$T>QgGrCbnF1Lbk-3f z->pYpTQy}2i>-n|XYXh{R^QAXssHyM*&N$rbt}`ek=p1aX^#=@M5#j9<+wSV=HW1oS%~1IKXV z1|03W170O9iSEHdA25VOU7ap@Ce1FU0lY=Z8~Wm~B;W%9hu> zwCWy^i4Uh71_;;Y@sctql}Dcm-D=FXm_$h9$^0k`Lr3J0lkB^@A5_AA<+P>zEOhh# z`)xY3eX$*53MDh!*{x4 z)W)XC^M95WLv)0d1>rgZ#z$SSOUPFwpI{S6xFd`|pRO805^e;v*qR9iB+DyF|G&FEbu)^>ftZ7v8QLp^vFKN zs_cekXfj!K3qB<`K(`M|K~h7}^Za*>hofd=kE#{kI11$aYPk|53m7z*gvOY-PKU>? zo7MXKb>{z#dL3G%s855iyscJjPIzgojL%;77saH913OOapyUt!-J z&-MPkUm`1Irjm@ZBZUgtGpn~PWF5&UR92*rm4*~08E>+)Qba{Y(+F8*MP($TVP*cV zSD$e{=bU_h=a2KyIo139dcK~|`+48jecjh(hx!Odsr^iuwi~py?G4BF>M}7qr~)=M zp`!Ed3ffI%#b;Sap)N*leo_jt;Q!Karv+K&iAi|po&tAW4WRm7u} z=qO55nv1#VK0-=sD8de6_gEoENiI))<5^rq>8D~=`+%6#>8e(p%;a7!se;BfTqB4o z4bie=d;)}k&she$%r3Z$YE&Pw_{@Sz%YJMUnL=oTZYe!+hC3;U{*c0Ms1rMf-UJ#1 zCd6q>Y02*%7L?z;CG@YYv;Y070os(&VKzwHiBE-RJv!+{Ul-6uhm&^*|3!$?4qde< z$%;b6i`*=2FewB+;2uw_PS=M~D))qglUt}jTiHEl?Kdiwwlfp-$ZDr-dh$(Am&8Rv zuk=mo`Gt6-R6^6$s0J^ComiCmZt;|0R6x4(NXEMdd**+T9@5`4)Yj`Pa>)qdoH|L- zZDO~|Q@v6U$FIpBgvu+skD2FMaDuoA>|QDu0gyP2jV>|nerVDP)8(mBAa(#6K6iqa z($`_gYq*Ghq6%pJ%>@+5U{xO_50?04Fnh+nz2W`d-_%&3%U`yGs6kI#C?;*SUiwj> zr6m*@Bwx35V=DT;p@1p;aZsFf%O9?tSqwi@vIm>f{F?xq)Jww4jcd+$QNoNO>nj z@Q@OR5up$IvFeadwj3C3T61aO56P3sC6r$%?=gWqfX=4n$tlnzJ@%$%Y}{qvc(lxa z31C!oU`4q=Z!zy0)@hrvLK&rQ$A7UAW2`#klcZcsLbS}<&wP8v9;a;Jd?|>E{>)^n zY5Ma(>Fj;fSj_h5tDc3s0c0)`({&HkjzBs{&u_vU!0!7qdT5=3wfd=``Akst6e@?9 zgG#c-;i^1nSq&cVfy=XL4R)>E{7*l;Fb~Tfp3Mg`?&7 zjq&iKz&FE~Iy7-_+p)vF+_f9HD=>-&iOwn#vr`!kk3c3uFJMiHLhqJK$03N;k*~9^ zkHz~#V;HCo-Pt@TU)QFvY(D*q2eWqv*7X821U1f`clI9bdu?nRu z)I73jbrjDK63{>|FGoA*edF9$2(qV`W(AUo@$ge%OO1y9z^FdMwNDWHJ`qHa&!1 ziG&}k2!T-@6Oj#(lc|)kmRLa8ZZXvTY9XsqmaGn?=byj;av;}=g>o4l1lufnj%Vh2 zjPxG}dyuoxGg%u7-n*m9JJykQ43}v#ZJ@IzBJjI>@2JEME?@S8(%VMbS9ifVqHKMK z^OFvvqZ$<~U1b`je4qXpOUYpaTI@B==|l|veBHm2ifQ=XbGY14cOmvo?x0J8=--|F z0YL}K(>AjHHVk610xT$@a#85>%}!VEj_Q3^^65E1SM6_pqR(E^f5z6u$dEH`-h?A= z(X@;3G_Gz-G&B_%P;4G0=9^Z8l`8J1GGhOTY)?4**p%RFmGi_nO#0?^4v}y6!8y;O z69N1*>su9R8Xd`VT5B?;P8w&PjWc+kbo%@L3ZW^u7WzX4vGM^hUDqG03zDu&pLCEj zUb}iukKOf-o(52hNdw`u;6nM5g2Mv0-l)dKJW@WzpKX#m{3+yLKaI%1#_$!b z{Rdq;?q3on+2Gbsk1k4IGB)cYrWTL=@!BfmJ|$?*ZSPE&LqH@!8e!^(5aeJEe!!*O z(I+a*g|n|voyQhA5w@P~o;l7ocryLuXu$R18sa z8YE2`Ub4t2b^i#yo3Kt^2OS!3SFOOIwR~G5p}Ri^tZP&U&95Mhsehj3NZyCdzltwy z#k9*X2_(;}qso(zEkc6h$~UQhG~P3=fq3*EJ9e)6TSxBCD$%`65p8FwZm|0&KtRj% zyr!k}j3VdYsrL7~j6{XCEAhaN4)RFHG37cQqM}6S7eh^@E?5>EBrVBs57V)z3k*NH zXO5HQObjS>D>7(jlVzANB>W0lMW*=Tk{Z-4_}HSecpAN`0tFlARu>tTvPe2NeQq_{ zbPkbSBvYdMzV&A@)^0mt55d9UtKrB*t97SS2s_LQ0V*QnFnbPm_^qe3xN*mtZohy| z8X(*+*FG{hkf7~)u9|1rDwHya#Sskvlj|ZZ0n(pw2gbdCokbrY!=OjoPe-Csa6~X0 zNHouShrYPz2M-r^BKS=KV9L39Msym^}q*2Cj0t0lyO-+uC>S5CEa=~H>T?T zKpZvt?6Sw0SNwq{Y6ctu)^PF$sy@dIT2kY4^l2be_8ro1F=B^0wj3e)SU@IXDqQHD6g)`e$avlK^1pdc^TEv*x(tHWg2&`0gx+ zYJax>_K#&F`xYKTkyOO*B+x7!H?Tp{Vpr5xf;jzV>+H0`QZtwbI6F6AgRV=c0!1*p zTff(dp@w|a;h^gg&XZ5@`E2(jfc$*qiOIS4LTPv`!7H}07OFg=Mf(%Z8T3(r;8 zC*8;{g-voY?R(J#f5UpCNozneL7<#4*E8lKX&X~R8Nt@3ZYga0kQlG!z3J%oD;(`h>0Usps2kg6DqukxZS`|oy~5|t)YmxGxO=%0Z7pwQ^>BM=-*JV zgbp6p+x(cZ6-+^zRQ2KOg zs4e$adI_teUBdWxhE@+!SWH#reHaefh*Ui5pH5LCPS*{}3ESkz4bQIYLQg}r<+BQ5 zaIF=5n^L=6@=fC*3EaI<84xcZP!jDwbBeU9{r=5#GPk!nIn-_nQvj*u~5iF+T~mwOaZ z4;3ZTa0OA$~M0a<}@gt-gh9iebX0lRY+v1TvU57(EfZB+41#6vHfj^mc zoqKoNhkha7?3B=iQ51CMjP8D5j^3V(8ZTmBL7o&x&0WIP4`*lC30Fi+aplF9&Bg<( zyLmx^7;wTsu)G+?RU>h1>57??7Yl`FU-X(=|}_%XE?K&!=o3_<%`W5$(X@bJ?sA zJO88p1EGoVIiGFwSM+DcyGonkw+BsxXPlCc+#>ZzhR&o@>^gIm^G2sa0J_P>lOIz> zh?00#^_Rus<)8wNCMmVb=sc%?w()I4`ytk7o6#oyFImN-{*9M5^YYXgoA14&#ekBa zMW3Mt?c5V7pdMwPzDtOI$S4gGhGe)L+eRr|1@8sL(UmBS_#sJ7evk*5_r{4(9vPmI z?E5(U@;k^!2y@ixF`rj4Jt3+nbGFB8O(~sR#6MsXy_HT^^S$r*W6NVTCQq`)~QIi_V!*-hBRQN;)F?jMfamNBb`8GBslGKH+Sj^88RueA2 zEv%NVFk8}Y=-)-XWIITkux?2n`bdidT}=OcI9zHZI{aU)y<#fd(6#OyQ>NfdpzLRg3FnIx=j+d#>fe3S_yT)MY}3qKJf`l08;M>J-7 zEZ%K}sS7swu9FsOdX9bh%+kSbJ4!f+U3-|KM&`Dp1d9E8vxl+__^A9a*WS}n9eSwO z`t$h_>bL(RApZ9^0SSZ5=ao3HlAii#Yd6PT9V9$h(Zw=ZKUDCZk5x2NcnTQ}TBgVH zj8{^{=#$S|ynRcJbU`HL}YjXfQ7R*MZ_EN05+DY4`X(0|Kc4O-Q~ECR2ojayimLY;vQ#3qUG~eoT){ z_LT{XbH=_~)c!CVS7GaI46@O^7m~X1HGv?`Ybr`z#28{NpzXQ@+4eOSQpfKP0`iZ3 zcB+4lyHMV-et+9@k^H`Y&944qV}~;aqKb%}`+m$Sc;=)bTt>-3Yt2)8Fn2+C*4H-U zmd#sDOjDpG0w?h8&>IA=hyJ6e^6^th%~-c3)3Yfg3wI2^!s22*4?^D-A0L*YH2#n< z=QSVB{yBq^c7HD>K8K(1?rzIF(lZA*j;1z!k!XK#uS&YpZDz==qyK~kMeh3eH_#T5K4D?=2aD%y5Gl`k2Igh3Ov zX#P5j&crj5m}!-2NR3#n#hI*l3HdRg*3+ng0FM5c$P3Fo>)VcBiGU{}JZ58V5MGDb zx)^z$qYNhrj!W-73Xm|H2A@%LoyMG*v4rMA5;FS);Wb2;IEl0P4)yx|$KBKGQC2>B zc)VkoLJE6ob(7?a2dDDv(?ltG^%S+IWIc!P!@~6rJz4-;_PX1krp}e?D?N_e19SEr z+WQ3itKkp~77KG?cdymhdNXLp(wSxYJ}lKor_8uV`PHla@x8962()hp8%cT_+bRQN z?mJ60g|{2N5Vk~eSBtJO9HE4F-bLoYzoRC2IsZ-?dwl~D6tdf@(bvq0xsjbq0V>GQQ0HCU{A%nozgl{L5Bp?N(mA`WTY3Y`2?$F{#wmtYV>JJpl=@!|$cO89O0Q~sV>x9m8GFqm@rfXmXjYI+b zRl>a2*nI{Q&8@1(^~f2KLc`~A|K91a&JZ$!(^Oyv-P0HldeVgM4JN4| zZ*K6OGlMJrM}1!o>J{Yp#>CS;r(c^-CH!+y+)ac!$-#7-Z^3A8V`C zYMH?Qe8qok+5o0Tk3ubBLVXPrmktfU8!=WE4eS_fEi~ptlN@mWX(jmSBN1pl*KR43UYfoXm`L$> z=?S`t?Fi$84WaZndKhWUKupP6g@&M{Xx2K6TsE@$z<>hl&J;RO+7d(Idz1BLO8*lG z()gpB;v|D;rF9dB;4UU2<34T9d(3x?V3_u7Cr7qpF$7Jo*p25znyPu!1D(L+OqNM* z+@5u>S?2Ttf&|KiCuo-qw<~GEesBk@mwnGh^pvS>2w@syyE0CLcJL@2a!wdeEns&G z099EV%Z_@&0%ey;i!#VY_<0&R_>U^J@CwvY>%pQZKYgnHuFz#j=?SEBM0n_%f5(g2 z(gafLnX7B1~DIzbmgaydpyDajQ(TB^(_pdEKjj0^!1sd|)tjQM!`C1>{i z|FJ6m+YSk+r9`8(2njk;O0aKUNM?&u9ZqT6riCMsZ&~`GP*%F>3hcq0TZa)G;-2WY z(w+?Q_p+3ts**lYb>3?3yO6JFw9!_Zi<&UyjJY|FPAsH;>@L^ec)#)@)GC$5$dnSq zfY6J~@2d_b)1rw?*plPH2+uow`>@BxdG1;PE2uJJ_b$J@@O#Vz+Xww&!fif8$T4Of z$&k@RG9nlV`D+@+h`RE}9t@Kup_z({I@jV(xgtRWP18!-|E=|o>66nx-^e@-b)kyB zW@*fUerE2zPg>cw#_t+a&4ImwWQoP!vg_KTwyxYkY0LyeuJcFd)sUGPEu+W zsxD}AhXEjKK4Yl+vt@ozKSh<+_^V5FTrdO&7Shc|(MSMT0A zeUFnj@YWtTtr?J1)|x(pSZ#stHk|btyNz*+U_{O1P~Tr`F)HYH8Y~*t7e9~*8|9ek zHz%zX72(msv5ICTkaw33Rqh37*H`N&mKzWQ=@DA`mQ~R3ORf7f^&_TU zdB>~D^jEZpC^7mnrjn!Yqwbukp?4+}TzYms!rW z-y~Zow35UjjC5Fvq!t4zC_Jasjg4C3KDZfWE+PfzZwNGq$qWyz_A_%5Ma2JxxN~Ph z9VLmezl!MQeLfgrPR>4)q8=UEhkS0We{G^1F%hCL)4OV+?X7@TjJHxkQ?_gO9yFrY znto$lNg2;X7y(xK6B_(Gq@w`~85^N8IZyF8-YNK`r3f5tUF4hy-P(VamwQlr^{QLO zsaMoep=2e7HGp4r$y48^9l>k759k|PfNtqq8F~r$k`SwTGe3(ru~~-flne>;>+^%j zBhz%2?t3fUlCpI|4M;~92akVx$yDzpO9DD+oGjq$m{nHIllYLN=%&43j(l9Ve>m46 zhS#cTHK+@1Tb}X8)=>{++HE3Q46|!d6BuO%dY<1MeZY!In$EGYn1T~`je~-WO~neT zoptfj%{nAOaDiAh`#uHW`&}YfmAE6yQ z2FlFF_|AWiw*NHU5&d{0G3x!0&UNKo~9UowI`jeOK@2xbIb8~=*x z#2&3F(IG3$Fx+ir1#6b^Vu1YO1W#t9vOl+ZM%H3fP%wrh?9S}ZT{x;5zQRd_H#i~2 zdzJ8t6yCWASk^)6}U5q7D12_3S}2dK+hzPnH{3^C-Gl6a&X zp7PJAyS1bGq?9C;R6{alLRfZV0(m`hB>N71>GJ^$h45tB44f}xoxK12yF2usmr}q` zHgHr%#lQLWppz;s&;n6lGYFgc_n>fDa(P@$1(1-{sEDcjkRG#u?Jx!co_{UQnl7+$uyK(ONh0sVr{8I#1!G^st*V+jeO+u~gE;|~!EGl-+Cm&r*}#*<1? zt_^FF=NTjPpv&P!61b1<+Q>usShp7e3VSO7UWv?27XIz3 zmkoqaT&IJ!15K#HDZeU$Z5C}qTzrf~UQO*VIkADA@! z(!ypz4s*3#a!Slr4-FDvy-8*m9Ct~`3VBS3#b+5OCxMAjEMvoYxOx>8+8%GriBzY% zxw9A8uCGX({Wh&lPf(HtM9KMH6C^8rDMcpvMO?6K42WhebnC0ngk|_9!Dmr_ErFUa zhhSJln$V)0KiG@v6;-FHUINm%cbpS`*^R*<{=D@r9KA^#mw_+J`M*6bG^znBLKI1F z0ci5DLye;YXc8fb$uQRntixn~IApFAS$<9}B;L!F>W3Rnf$0J9PGROg=>(%P+B;Lh z#u2>0+!NQ&_et9&zGH#HS%F)2M9+p=&%D7p`+JW=vO3r_i%ho;*( zuvREpP7?AZ^##HLVXuwauAz-u>wJZQcpj835pzufH_q%BS*w-w1AQ@XzzASxPAweu zE5!RtoF8u7^Sk?)q0=RssgPZ*9yC)55^!1T z`j%5=IlkwO;f8sAdxSnsll%RaM`(>hnf+4Un+7yYSNoQp5Qv5jhFd#^LY>y{Mq4K^ z@wp!5yjCy14!CTw7zIWiKe~z-ra7N^flHy>U!gN`$Jh6mpBNXBTc*>!wGp(|U-Mq3 zw8%}BZRrr2p7>4YmFZ$K6e%*s+~cl37@vMV3I>6Qfzqn`HG9lBOr)sQj%GHV+p@Nm ztF9SDBSQa)iPpT}%O#2l=~N1S#bk6hh2Qno72&mX;Z9H2XW`Rg{d(GXwZ0rp+N>k| z)|_)F_t|1g*68PxIG!mI^Ch;7D;sRrK_?5yVJ(DShVD7xYV0UpooBueV_YPf1mR>e z*>_*X0tGS6AGe@3nb*^7@!PjHPf~pU`Db6|MyTJE98fe&j)wk_kQ9dpw17|M zV^WL|#=6%aZ`ed#znbXH`}@0l*P4Id^2T_4Y>atyE|w5UC3FH&|1)e5=k9G}?FFPB zg%St+1KwVJwsT|I2K@?@bEp(l*>3 zKhpVy(n`d#MEq=nPj{{QugRppfBSh8#rFfBW#yi5%C7>tH%%+JlaLm~OgY|*tJ*e4 z`PMFNh*$o|=3dR01c0}EebA%)b@wj@OcPA{g9+_Vhr#?@b@>AUV$3ux2E-WR@=xue z1uDL#5xsgS;@3F62UAp$V~r0zzHci9m|+iw8Q^8AT4WSm`V^5C#ycpXkPxTH$XlQO zM%6@XwIF=!wZ@wZqpPZIXnq?A{{`9fDhCoK6A3cLE@o)*A9FJ~yq1_&r3nQO`Q7xr zO92fuXgl_zRG`~LdKW^B+ZSq~21GkoPyCO%YXS{O+dY*b^k)2p2NzY_tBCJTZ8`4% zQMU%|ibht~bVjpD0TnojCkE>-tyAu7U{YjC0O=^M&2JP021L>VyBa{l3ovTvi7Riz z(w&87pE=>ez~J5J+`B0+B&?4Y*ix64f07by#XFnPzeYptu1U4249XTUf^L$?jmT=+ zeUr|Cf>zyrGPrw}{oZ3NB-hasOZ%ejt!UZqzcki9R6iPhP>JPET)il4vv}EHaf!eD z==5apbtW3FmHjmOK7qRg_jZY)_>%!Ga?yxKmX7oi@fw?4vM>869e;9=bOsnn;9U!v zT-8J_&HJlDeCEINyBUSwnx!_nDxefzq`sI+p@2JC2oS8TVrC z@lK-+KcPH9N%a9GGgRlv??Z6I;tUIc7P}Zwv4M$3ow&qiXJWAr@I_n|h+0wWKuTmJ zxMivr*4Lj2KbFLbx?aHAWHr%$`v>6o>%RqXP~9IfzF;lYni^8DHjN9F#%<{ifEvz9 zr5t{W&AtjV;)8~M*a5>|yHF34&kxLmxrCh{)V_wRacRzcy-?fu+e`CTQR$u^ zu)fM!I>#aLzGPdU9zmn3yA}~nowVV7pK#)@N@OO0z}Ap$WgVbiXestrMF#7JNGi__ zlAi1PhT=@c4+QwppLnbzMF_&FuJ`$s^cW&IO{69)1^+22J zb?V4%t{G@$k~N7mqx3F|Br!6@%~(z`o3sQZ6QD7dxR??rPqN-j`KH7(doY-`z?O1$ znb(3p>yr>5Bm)b)ivZozEVZ zJUOBLTjogeXzj);DY1y1S{Bh~{AwKtB*kS+tJc|gRh3eus<2>&GJwHwBln7577D$0 zDbTlm@SU#NregpPC{*;Op*x0tSBu{0H>d+qQIcCNz=;$xtwe zt2dYoLl*zAOr+}bY~lh2o$PbfZJX||b`n^Bd4`mlj!-9F{2>AaD{`SD|VZ-PApbQ2#6W_yojADT28 zx-~obh<$43#)K6sDfV*@9EXXdJjH*y_eVH0ijz|&&rJMA9*Ts71k6P`v1&uLaL4TIY~kAT5mNdO z`2CyJ`EC)vE%shOKvn$b&6GRsW4CF8uXR4M0u#@HPzSBCt&>ak_n&B01R_}YG&U&r;Lwz!Ly z`vV=ymq`c^Xc+Y2iU*DDkWk*M4R{r1_7s2o@dvC{!q1=haA((vL&PRw-(Y+sWlE=p zZ{LqP31Y{Rw&4?bD`iCgy3_x&n2g*c%fQ$bA3$T$vkd|2-M@By{(Ex^i>+CVr$SI8 z&K`6Zi^6hl;S0{0l!!~Dm?J0ysQ6U+_>P}V<{fI{^5 zk0%&Xfytj;zYJxJgGCKpJa7$NVMGm>56ysJ4zL zXU}T6sI^i$rr?suIyPNZ*;?vGYFGV~&JU($sIao!Sdgnj>UIRd`qopPKL8Lm?V*BdA#Kc4z z8-G-2C>POqZ<(3#88epJy}KMcMkt^NcVE|9bDHfr*!)$q97H7h?PU@rVehYPC~Q$TWhp3E%XV#LlFDBSF@(gU0NE!?ZpBge3yN7 z%(SX9JgwT1-hr4b+`M7KOWCjJimu(fmr;RqxgYJY*4EZjkDL&ME4nDrQ*Uo;yUt9D z=9kKmBS(6EfL1ae!fvJcUJZs8d3WyAcIs{oe72pNTo9Xd+2#LuiHtjFZWk)gww}lV zX73=9l}i>R9Mv|;O?#=huD+(gT0Mn{1FGCDdc6vg-j zA^I~`xVd|#`G5lF`CucVH}&o zIdO6E?zi7=52C)nPWr@#$@I}9jm-z01irqcQLT*0ynIEO7KiTKxpU3k9hd@1^cyRU z72-G60ubNqAy>rW6OERQ_KH^zsD z@{=cLhsU#tIjWoaHpDn_UI75pw~nr^c{w@pKNwj+z^D`)tvQ2P#^*0y z9NBQcyjWcK0g3fH9N;+xruz}K%|PcTciefu~vH8my3sqn)SQm4{A=hU6C2l*Td zBRy4As_VkuY6n!Tp;)zQl|ED7;H!R=<=>LNp?Pu3*5UeI;}$8{fNStevvTOq*@yCs z@G5d^D=PBPKh;?7YzE*-Qyfn}7Oansio67Q)CONBT=mE*`1;xG$`J2ReK+`$*HT`O ztAO<3$0eg0UW|WB@3uSCyHsdYwXKawBRrU7Y}{(leDVq9fIi;jmYoR^%RMT$xB^9Y zcXw8avhaPz!-HXAVMpX9vH4S~PMbLMoLF;jOXjLTjs4sX&YEdVyAB4w4S#-ceCKyL z^k{Sr21jccxau<=KT{e)@Z^Z`?=d;(5jVWJl4XfZ~4_~4J3u0mX6Ellssw!bQonl{=V_J?HT2SUHh1}g9 zINPymnxPEIp&mv&j>k3{&>2Lr@z>q+-)FB-rbCB#>m7Ul!12Q$Q@H#_?w&2ATlxVF zS{L^3*DvbYYzn-4_b!Hnwo);r=OGYF)HA)SXJBAB_)IOOOY`vI!(IwW*w^U@KRZ1W zZvFRf{`(Ik<-nYpDJJW1<>?Tk;s(o)AV)3<6o~({#Yx$DN;N%_f#MlUcnvjr6*^48 z(44R@q+xn-UWS+IGKYjz>KmFYFHQ4XUs4t2x@lOAv9y_w_4Jktc8q44fj-?FhuKob z{I?^mzu8{4u&@wf-3FZ>^aJjnI`QggYUJI#ygadaBVT5kz^0}qO&-+&Zq%Z)8@{}? zC^4veS%BL=I{SPC4PNcVU9?ep;TM(r1e&g`2)v3*Gx}nO;&RKnBJde+Bk}-Rk*Dgj zS-#PYXUX2xpB?Oq!*$GfcBk`izOkt&>6JvDJhwH!0C2zvDYw9ajmkAyZhJIpP2Q}o}a;CN8q~ z{n+Izow)7O+}zyOV~pC?*4Ay$JuV?GC*WV*b8||9jbx^eDa+%VsaUxGF`jIPhTRF4Oqy3*Oqq1(WpAR96fG0D2sE#oT2d zsy*c?WHP+rb5DNq4+q%?a$_Rt&o?w2{JvW~KWh}sG7e78OUhLGWM0vA_vP@Ga3@=T zzS2d_8ftjQ(!RJ^z3vNBQ}EC=KQfa2>m^7-nU_|%&n>?XLRiCpZsjc(mnyvSX3fp# znT?DJ(~*0|=ugFHJB)w>rM7UsqoadW>ZR5edx!Vp^wn2?UU0unIdBkRF;OYu^0LpY zXwyTLlA;)wL9Td5mtwJ9|GG_2eyXLOnZCaMp+lTb=gjEh*|++_yrj_5wb7HAn{=6i zg06q2#ZqF~y%SI|LV@f;-?uMmKXWLT84LyNVjqe;kjvZQ-4iCs z_cUj8XOXHs)th)$Dm~38nHMs%FS^#_OzJ!Ad2ex2+eE)yWSu?X{&Z)KP zrmo+MTJ;o396ZFo3L4@f;4HIBy5Z{Rq{npo(|HLreEFl|ul#gwPM3-Z2Bgb{$Mj!H zQg}p~)9ROPCQ=Ox4V~tKMbHuZWwRVHMz)CMA0~2g)|*x^uVXP9fNL_8;`43#n&|!x zz}13D9S!OMS5K`P#T0GxO(3 z%FRTwgJ{N&J@HSD(1hN6xbW}E1N6WuWbj-7_cGv`d&5ZcaW!>OuzjM=> zEW4-vo2Hf5I|aU(Hwr}BoENG(g<78&e_M+JYsjw0>8TdjYFxdS%-G z?UhUYcyv@HcByRFm2d>NI*PeUpkQ7TX~u>kzgicx6+hSb8M!h*ri;ty3ii@PZ=6dW zBs2xJEAv@8ZeeP0jnBWrLy*!c&CyF|^9vO$UIoAD~0s|Keh=jlsP8;v( zaIbx~hs&QXz7>5@QBT0}mdO@@^1jK|<%N(B(7q9&)>f`;_`~$f?kWhLKu+W5SxnI^ zD9Ft9$#ZtUS=q>xBRVAZpBE`|Dn0C?RsNA zJd-tpu**nO>ftU`!iSjg>R_VEE^X(JuKK*N20qr2eep;oD!>C&G-%hZL*xm1J5pmX zxV!if3G>fvz{akzDx~%d`@*_>WHF$l<0=Mw`%9qjq_?D6M#$o{o?*T6msTzn{hREr z^8{`e`Wa-wY`^?|o1cR=$zpx3tHYJ`c#%-#MAfh-dM+UPq`lKG5uAV97vTrhXv*ajTS%(tjYTE2P<2 zoxjfZf^R-QY7)=;)2+YN1AOv#OE^D!fd2lesbG`Qsp%-JMqlu4Ez)L>JDXs{oAF#C z!aU=3&g-6B{RY8)Gsq5!hd4K4XO-rJAo?@``?fj~^`W||qYHSI&bm!kciEF^A^4H@ z>Rl6O=Ba&l%1a8_A$FQI^)u+^H#m zGE;Mv>B~iC#atpfKRa$?2lzY8ojlQ78cNq38infUihjOR1)i~vsS)rrjp3orC=^mA z)(nDz@A2|wg+7l`LY6I9cRd)?kHO7~ljH!k-+FG%UejZ0)5*`Vf31wojnHDY2duNf z!&WBFf>MRcMb;ONF;=hQErcb-E;Le^G4Ti1Ku2+=v&NUE6GmKv#>Bpl{jyLFcZ`LMV4hQI zVTo!XH2r?3kJ{+;6OsY}l93r%K92e6;+KO_n`M zh-x3nKl+Z$O%^lyj#CZOu!q2YjTj3X3Jn$Z6&DIlG_vYB&Gcs|d~wF$HT>W3+dgZk z7UFd8668`ijgdW;5e-D>JuJe7FMWe92HUfRusRcct0f1bKq&5_%zSq!8cD#GI6xpo z5hR0#&WVDpR_DL6mdM*Mk>1e@FFYl~Ylg)e#4QSa0^O27vuvFum+ZZ{?EGP%uFr*gf2v}Ud zsM%SUhFm1dX3fH#KVp-lSCV6uT2+ke_#P-^L9Nf5aO*&I>D|n(+yC$j zh}beylcoCh)wCSRX{N-*42Zo+yGd(q3&)8}J~kA8&O9Jr`~1k}+b6$>@Ae&B`DX%{ zo@YhXI3KTsH?0}@nQXz?@He%DBQ*xm6YDI{O7XA0V8%#j%pC)dMRsD}FpJ>{+$7S6PE6fWFbGZ$bg#+D-W=S)m`8*hL5pfGf zwD!xKZ6!wQ48xU@I{<*9YCGOSWoR`YeYr%;-q#b)pn#s1q{xaQDhko${Gmi;iZcXC z2N-=r+`cBfAL86vmVcbnBBTqKd^vOdQe;lziX5cEQZdlv!k?6=csKl5q<99%fPXsY z$A}?mvh&~ftSKn4N#r9otS=oV=ZElli~*rA#137XhiQsZ5y`S5-9)>}h_tYLTH%shs8FPGu3X4@;%mBbv17Xd<~{VchJqGjVro!VrRqw<8K5`$5>_!8== zC9Q|Pe`UE7mIj*JCKZ_(WWSl`Y8@d^dE#5U=S$3?hoS4{EqneF{T*beJclS+dUs24 z!CcDKDuw`QEnkO&sXC<2i%wk}m3kKq{0`ssmv4qeP=`PuYAcV*uUIJm=%h6B-p?IF zi6?z!?&v`s18#`$rh@Spp8Zn8f1c>rn0;3Xqdcd&Gelm-cvP9d=WjB3`sV0i%6XJ1 z*{~R$*6>gNttDTOYK1Wzg(VzqNp^JRX|+w`L574Fd6omABS2^Hy!wW*2}%}W9}#Q9 zb|XEPtWMHyFg_9{wNMs0DKWjTcg`D=IFzRu`{H^bXIxAMA?0O*NAWaJ>*j;sqdXWN z`KXOuf&={*KmC8Tm%tjWm;|m3eX|*GW;n{vlq;bsVymM{Eb7yy z&2F4bLA^RwH0sZa=k zj(I@L@o)*-2dN0FBINjTswTA-GplxmiQ27{9%Vu&Qco;*pEmGKWIf+Rhp}{C?Gc4w zy*rRTMt*Cld?V9-kdz}Mg0-?Gqy(5wD*RD{B3d37J~e%|%zG$TopTX09$U&-8t|!D zYTQ)LinvkibCyATE2l$FS7Fy^g6+o3SgROr6Nps~2tf&OVMEOr*exG=nLITI4ydmS zlhY3(@!@bjLPQO$;J4rYZcR!Wq3i7gg|B;$L?2*|SG$YN|AN2aq$H<B> z_a2Hf8w?M#sLO=P8{CwijDTY*g8Y5*MkEKsQEeF-`_jRtW@T^D0B!h{2-?z^a*G;=2% zC8+pjoi^G+M#F{=O^#o^X0Sy(l_a%d0B_KOmxo8S&8JI(!%mw~&I&~1qb=nZhOllx z_}N|#1I(|zzr~PqiBF56y@Kn|aYJ?uea0_4lPyq;pJZk#{YVykar9+3d0QlMUc?lh z9!SyU-w}&?`kw*T*IMwe^pOF_!UspZnh(m-KLn4sCZ00~KZB6&pTYb`#$h9Q1uaZf z>`y+oxfybkHA>WvfqO$QcX;~fN3}=g;Nbf0j;G-#|F>S3Mi_Hpe|BF zZ>(Xo1@oAjuZfv2WBU0x?|kN57rG_kpIy7M9xO?A(8^>_xFG$YvVW_&?^m*O!DI@> z-?mWM1;_Sn=O>>=Wc!|0Mu@IGrLBYeJDPdJIrW(B1t03FKROGx;ZoVJL!TQ*D=eN; z%C;g`t!6T)+tKTO0OsDZ&Lk8g#5R1zsgo$|Qet`bPek^TGYAbXWD{OZXFq45qq%gr8NQ?gXB>vaw2l`5 z^|;a}65cd#GV5{!EkgK@%zA+84^

7L z)XNqA_DXcV%NyIDJtTsKXDR#nHG~u)jaybPC~$Z|5hd#5s{K|q_ns1^Hc=Xk^q!|I z+`sEE<(`!0k~P&=_dcY`z(;l5Fdw(OTF9Z`hw-SOZ`Nop2hi~Ye|qwd1JqElvsY_O zf#SfwnK)USDwh7tjRb!|G)jeaNS#5V`zHgOc^L)Yo`A167zADuTzRE!#onT>MMY|j zZ5d#u*5-Ytpmx_$V)~JJ3is`@&|iCJ19D7Om#i|J1(jHtEfry|!gc)h=d73A_p0C+ zcZSa~RN3&Zo8FNcfMW3n z6`ab>W&^>q25Q;;*4fQrNQFCBaZn*>yW^n`nuo}I{bz3Ts-^qh=nmiU04MnR3GJcp z=D>_&tU#mvg8otJ-LG<#H1>z7y{@Bp#pq*9f6WAqTj%nhX@y&nhPet4Ctbt6J!+-A z^7U7Jl}&Z4tprp@L*MG@F~|6a7#x0f#&~^>O9sq6IpiR{Lh5Lj#aWP5mP^TXMKxM( zz&)(pg$C8ZU2crD2`;8!9(|z4 z%0Aj$vj@J)_=gIHDAkd{yJLz74ul6$+*M_I2>m)hSd5tPm7QZJa*qGZR`iu*aw zR2-O*;6KNxbE?CnvSTyv-~YK`_UU;fP~qK_o@CP(Fzs3omD*lQ|-7b z@a+2IqUM$`q_E)g#YMx`)lq^(Yi4+n%0(99wXGq5ZE}O~b;kN``%~k~nub(*TF_fo z2WsdZ324D%@3c4e(ecGV?c+%5sg1*I*n{|Z{EVd4^3;DK$s3Ih+|R5U^bmde>pu64 z3971Fxrs^yz=06CNWrb1nzpg1g;p!$`|+ccj!W8%ZM(wq-o;7__m*z#a)^F@Di!PX zq~dj!73TGN)=-3`m;&Kx9XzE#?<(|}W)FVwneAUPdS&b*fB*GSW(ekcmZQ2+tLQd5~)`AH;Z6gyQ+ad*ZmlA7Ht{xNsw4r zeV4BcxlPWu!%|VnknYQ8Ms*4{6YLDM@b1mkZeWpw#`h@33yh4fu?b_>T1!H$Z-E5f&?I}B)l#v(M9MWi9cA!LU!5dKA_gG?))#9Yx_;9=@)s>^kT}& zGBn=JFeIMry)J|u#^I z-@N&~DY-1!ACx8itS%B5%s?-mL=ysk(kwXti|t^%&I_oNcLkUYT}X8N`?p|xGPHZ- zKYL~J6<8qVWKd5sg}rAP{MkbiR25XP6JXe{H$bv9ux7KD!*-7Yr3Y_McAXU5`}9X} zpA}`0`Tq89WRX1$PhDt6e&ZwN1`WUIdHJtVC-%XU;poRhPk93RHl@wuSn)Y74;z-$ z`to`U?c392DhO0xBvC*DAMm;j2ypCX?}RPD@&6og|5$e_0Jpdc#G0bL)Nx+BVur2x z2jtW_ky8jscM}s8I#hjng^G45EVfp@l2B`)foUpzo0fY9W&+RHK!OU6Va*P|TRa9o zkNpMS17Ccx`qzE-*4^%Lp!JaLS+3FKRtBzszop>MYbTes!${^rjgSHzT0WlwUG{g* z?kujoMl(UTs3W)tY%rp0;W{}rLEG&38;-xhULqvNorP!{QbN>v+o4K1HDIE~hp;EP zr2&{VID@UoLQb7+s88>NoW2GT z$oJeVE_?T^39M7Uf(+55QVe^*_)J&eP_EBb;$^f0myevDl%DOwvp^~J(;xx5fW5ch zEX6?pk!y&{r#FGnUgu{v~`dQDKv^qhIExAh2JtzC|M@vzk_uK1_*3HWQ zOcL69#G~NKGJOTZhZWg6-59I&W*=Aa^~KtZr-OBzj+3e8;m}kkDNbUa*L9<_W1MzD z>`d#F-dR_(@Uzsk(Kal4{b|%uKINdU@Vh!)xyP<9ZmmQuSBhPFsl@0)vpiol>XuUu z+7|UGY&{L~c99kjdz%p?-mG2b@YWc(34KXa8_C2;bcNGH%hB--oacC9{#JYC5~|V^ zkTn0x&TS3Bnh)~Bkt)jg!}kL@WCLSTN#HNdM%Q9ztQ9zhTuA$j>K)A$vo^7AIbzYn z)nxgFN|E03-1tUk5P;BD7~(Mq|`cyuA(bH+(lABg z(#`&lxg{fobg2#Y2$TX;Ize9IP_mJv=XVDN7%s*%F-P<)0*8z1IoFYTYUrERDM>z? z1>^?hLWo`$+%a?WJ1km89|=Wvix#hYGq~~HXgb80NBHb)lnbN-{vXyzA#n{EBe7Oi z3WG1>+;6jWfINqBd^lzLn`+CO&}0DO9eJD_X{<_}@O?_K(+pvSZOI!?RzD zBl6LmopuUt$FU|erS(Fj0jhbBNE03$N~#Q0D0S;fg=Mydn|32ysUX&%tK^SDWu{s6 z!meMu+3tuE^H^_HARwY~Wg~bTYfwa34k+b@$@sqBx(a{o$nd5Jf!qlxmsi#_8iPVM z;9W=NFOWEp`QJ3rR^k8nA2D_JzOfBSpsT3tq*S%d1Haf0L}_dA^>qo_@r;M9K$R=bH6c&H>ey&* zGz{8c#XXKYkFU31DfJ#ror6UGS+DK4bW5ts1w1%eBXTGWzVF*)Yu1&PEjw#yKbP9G zu8cgT@swxaE*+*e(3a8Jon{8z+Ru;=o&Kl*YQ2KzP6cgjd5j$wCjn{DEE6 zCd7*%efWuqx4r`*dnC%Y4I5Qg}>teLW@ycd6=|#ECD#Xv0Sr# zc}s~xgi^*v;u(jzTW!4Wh;#I9EZT_s5w3eKg3My9sXT-$$UZ+_@SR1!q`oj{BbX0k z0tKNAMe2o}g^iW>M0HWRj zuz+Slfj=&4hyNX0fZo>BoaUgz6~qP?=m~-^M_9FNk;x%=s88ZmdgVKnf8>s=+*XSr z!ZzNdg%c7?U`!nChtvAmY>`<+gOqQD6-Isf=^8APJ0^J}rc&g>Hhp>J*XWSO<9^b* zSvZ$k9h)1wsj6@qV!4*Lo~O$64L10YvduhuB-_`FhK;30fGCvkh0^nAW0$$IeRJF|)m)8ENzKv~BS*3KQtyxFG;Xb6^#~8Wm&ewbzx^NNA^|LOSJn34 z$pw;yN+BcYmP$V4;)FT(JLFbb>ng?5D3=;YAVa@MTydKsruZIEj!QBzu&us^*&0$iIqU-W^@)fDh|sR z%kK8&=(he3gM6;jDDAlW!qAqCQKAl&x`GjYBe}G|+g)fL0#MwRxAVGbQiVjHM&}>A zNOb)Fqbx>l+NK6HY+&PC;onl9D!VTeiiuV!1y!h51N=P@Qfv8A&2~&0rzO9Qf)P{v3#<_MPdY8ry9T{O^*ZER{s*EYJg$PAalK=ZKF4(+y z0EFw7Ht($|#vbEUkuCtG%qs9QJS#12Ot&xT=46-8IW+>=35Wkb5e6HM+&!8KTqzkG zSrc!jI=tiW%dWyw>~QI$1DQ1wX(z|1FHkdCh744t@s;lX1RZmBVAMxk0S6|q(9FMq z(-#%Qr|>8q#6LYR!*s&Mt%Q4%rWV5xV5o#`VmyHnbQ+o{ytm~J;Kfs5-x|a+=@{)G z7)gW4KyFTtpR~!tV)OyJT5vdb6lXpmzSW zG;|xwaSf>cZN_Dh2(Kb|BZWhm`WSK%oU$p`sp znj#f^6Fkzy3jRCH0Io^cHzI3-W>ux7`m(=DjfQBuVcw((4?nObci?rmE7vw|smt;@ z!ppC&&G~X)O?Zl#;0*D>4p7pb=R5^&D&tG2N$BmwnN+s=#;=#aFXFDu;BxI5^AI`$ zRV*8Mvk#dUIcG*>Z~7A>5(Ij8nLQ-|l$`<%JvQv3D! zI!`RefxGn;oPsM$8}@B^JX^%cD{D1fM0~P|CFq;kIYdHh3SNUhPrQct?bROBM98yb zYK(a$|4$p&DKj zJmdjpUqTP>%mfMg|BB=s#o-e&xQn~mw}}zR+2pa8#0MIFnZgl41&pU6;$W*rrJxf% zOgsL-)N5LH(3M$JgO<;GI~sLPJcw$Z%`WE_Lg~cJ>l1LtytpXmx-ra+ehWUXT*3j` z*K7r*tfh+eFlqDbee)F3=4u@AXN3s(tADJ<`weH$td;LejG6zIr-e0XqKQX`^&xy1 zO00Xw~u_y&}YU2z|fBwlxJ%eo$b!RO5ULv;R^1K zPRGuBOeYKW4ld`bl1+D_gGYA}aQLsxdQ}?!33^CrGx7Sm(bHChNccb@l_ILIv#q=WzQ0i4@{ms}3PjBkj&?Dy*uE zfw#J|b;pE1j7I~ZpwZWxDnEUUPjLf_HHS#10I~7B)dZBTLe6QDl*S20yDv`W$H$+O zBpW3DJ70d|?kH_A`4z2h%A}0w`E8q|e=EskH*@!6+4Hd*`JzWAI}q+572-X0u5 zL>Q!6-aa>J5& zK~Ek4(&abHon4VpfS9#}37|4BT0|b8^U3NY+9jR4a39;rp~i;x;~93mal>vBbJ3Ko z9`{e{zUzjj?B}-O4Ln(k*>fcl=r( zGGE(VKI88cKI#@NzI3Kfc9}plmO}hvn3MfL1g@E@;od^qkI*xihK5G2)38&z@whNqwrRuzMLVLC?bjlx~r8ios@Vp_OY& zvM!~0)zc0=;{1;yQ2rp*`vN`+|djb8YUaY;b_)fM!?1dZ%>E=+X5UR=!PI zp1l&KdSorRJsq20SVOg-SGwxlNZ#D}S@@+(P8yZ^52N{w^Kg1!A16tXzz$0rO>h3t zLu{XB;{BN4Ner%iRrGRBYfs?fVY?hZ+s9v|uB#Lb!#&fOYtvjRo2H9SKmCd2(AQ_T zTx8}^K~1_X^VOy8huvJkc5t*YcBM=Q-OsFbTmj~mJZi1eM{ydWnmip#l8?nVbyC&9 zwuMTulMw&F6UxSaVbmFGrY=zY&31);y#T9%iDRb{Ug?-8uyQxy8o9#>NDnV6t{Jv(a{7GPAz+_e=i$J@<62pI8}M*ch6dQ6t~0tz&L$!+-TE za-jeG_4hn&4E6r!NM_dmx-7Ur7Uci1url9b`OkO5uks;3<$0)UZEj+Ve7&NXp^X3= z-{FV<`^W!tw7Q? z2Ie;AaIdWlpNN^+=vu+S{`K4cKEdNZ@vraVV?l1$|GIsDpUvS<;o%72@v;2pK?~q{ zcVu42z(8Y&-Mg#cfVnVi??S4$yR{mIC4@_ZtATb}E`R>u9kU2JfgbPW2#P`KF4m1$ zlrQR8G&SBc54f2cPRlgwv?5NpL`Du3oYT{M^NF8J`>&Ta=>K_{dwV*Zdo7ZEJik}H zS8RQzJ?_tn5C$d|5&D>al*yvC{nZN1ybjh%tfyN9!(s@`()w#&YHDk16EC_M6l#$? z2id!cZ2$pqP5cup?eNLRBzsZ&s8P!bWnJy>PbD6t_nOAc|B8My}ENPt7+X@~KO_ULauJS5Sps&eP87JfI8 z^Qt}4b-}_yLRV)Oy@wAD4sJY*ws|6PVy$Ni-(Dd?Q@i03dHQQ@ zeMq}|%rk?}oWx?*s&JW#>g~_f|I@!W>Q469PMJtSTO;kEP1nU9xu3sMl~1c@+n-KZ zDY&7!q%dpc)iiADXxN$9{Hs+0bJm^X&z6=~rb^s^M$4P$9`On7%|tIX@MZm5}_qcklYrFwS!D=*MI|M~O!&)$Yu7r@c$a z2y5Dy8C`D*xvj=(So-@8O$B9{${pdVi`XyG&XXEXT8_WrMfB0>{hdiNmkGBX2KVPH z=qbi>V24~&m*~R^3(8rTu$et)k4lX&6KW?unY!UAx4N;rwOq<^*HzEzU^j?SIWt`) zH?(>x(@%^Ai)e)i^J*KF)wST0#{>^NVzYCyV{II5E(?9E<@~mDf%tMY9v&E_mz3sB zzrMMU|1>8osl{T1I$HD`vwG3vPpnyzPPx;KL5wY$FREMnb98s@AMdy?lV;l4(GNf_ zT*8B=DC{EbcU-)BcwEE^>~Z<^qv3gg7HyLWsQR3oG9N|W!` zkUY7;s74ya`zg<_wVn3tBQ0{?%FNjg`eGi|m{sUczOE$YP!~t$TTtDxQzcI$z+rxM zS_qB07rlM{_^clzMiEl+aoNnYEe)3j^`w6iYH@Pj-82=YO{!A+@(i2IL0&1D%$(r# zX`6T!Q=%0M&x@R9!PUQZ9DjTxUc2M{JV58VROlV^kus%6C6BUo29yr+e6-j)g{#t# z7~NQW^6S_b)x2r3Iw4XQwlR=z{K;);v{H*ZTBeLjq|0i$#Z;tAvP3`hj$vfqyOTJz zbe>_H=Bi$pO(Yi?L@!fN?9>`dzQ6wJU`vj^1S-}}ita)U2uP-|1o(3pmct&@CBMET!VR=T&xie#Wa z72HUq%s($m{IbHM(SErArUu;li#Ge~>-R7)?Qz1n zEUWLuT^3ESzszlQ54$|>JeTXvI^KOoQd6A{r;8#_2(G-vfUu#f3TvS`{#f)DyPJ!Y zyms_I(j9W$7#@<u(E&v8BY{;`svw;y4Sng z+af)|`#81Aa4%OkTC6mVypKqtGUKUNxHt}%*c$hwx6A1AjTT$e<#@iQl}d%|+KEGs zfB03@M1)vW{7&%`r?fc@KIpeobLh7bORPr!ET#>30&X80^V)GhN6a;8}QfWi} zv1Oo$-s0B}F|Y6q)lxfC3yaUsB#8;)F{~l~Gq6OxqQorT5cx*nTqnW|5|eE(lc&8a zn4iJ_PQ!Vm%#rL>=FaaRI+@6Cq1l%)&B>`zi;MPew~v2%SEJA8>WKJqhE=W2b|ziB zNTc5pp7^=IDncTNAqdX-n`+KwOsum-9=~FmAFk4hsrGlg<8OJ-`sBVytQ1<+v7@4* z0yo_Mdw>j-w#m-nAF9WKv)Hpm_REny7VKB_75n^6Sd|mljmh*$E~U!G2$k5(#!>`6 zfv14Jj@qHgHSDBai+}y`oqxJ!;m5aGkFsMM{CYkx15yik%4c_Nj1rDkJ}JN|acr9R zVwsJUrK|*yVfvcLO?Rcphvlo1VLim62f&vZ;jf7t>IKRPr3Yb>*i{+nQEc^7{6+Ko z>teBVkJELAF)=ZTIiAq{|7bxLBIx9?3v^X;TC6sb;f zSL-c6!eI?DMt2NBuH2USIx`I^a`lo{LUBG8Izu(zs5dji>2x~J<(RX){IXC}PK}Tz zzBneksmFY)zC1tmiCH7HXboC6AW!0PqU~Qlb9*$KBY5p!nD!ynwl>k@Y8x%5svuO? z%i|sG0PVU{73JwwF=t~%UVoih=ORb7KwGy{db4?K^iy58IN00%`TY~)TzVf8AvLWx zVnOCfGhH66UFyUo^(}LM=F5G4yFx7;D zd1lmuAE!10gLtNBV|wA(14`o$L8@)cbtit?jO2H|+C<(I$zO`w+Lf+y8>*9Z)N=yl z$*JS3LvGahl1<@;T@&@c#}$FX#+$K^u!`FV_v^_G_z?9u z>F`Id@6VG*YmzZ4by0L6_rSA{m>NaN+Y*lbe-tq2n+!kr+z$qs;YK2<~dFJKAR1fINhOh zIk8Di6bEVWB=FOhWBZRfF_+~;?Q(z?K*-ZkOX&#_ug@{1@(E%`rYWXM0pOfemHW}I6Ci+`AJ_d`n{&PmT}j<=aAe*w9#a7fA-d7a+|(DQLG`1Rg4V-wwa?Vp%{ka9>|Zw zMFY_J1~bL~QTjgv!@O`?kABl-tO~RAfFV7DXV8~tUNKeS#+=FE_R2Z9`xaRqkyvao zGw@u!yuA9)MBdhKIme_*PYRUNuvEBAr0OnY8G%sy>0=+2AtrVtnXS?Sx62r}_*ZYL0F(hTw#1KtZG0&*TW z>m;uXj)ObYW8oeQCSh-;$HpF)M&6K5RQRUSZ)-c>qewKcME@6@>1d6OlskX_$ke&K zSZqD5S!&m8hN30S7#(Dg*S3FIh;xq~@Q2VjyQ{|?g^MY=D!0MG|K>`%dI_W=oy5nc z*_heGj}xsS7*<&z&+UWgIbWqqs+A46BK3P2D@(V5iZ1QeFC3Gho?PU8mF|@d4n5w( zPbI(RR+B;LyEfTR;8O_U=uwYH&*(JUk?_td7UYZ!tp(rvpKhvjJYn&CRTl%Ll&f~S z>zJ_hAjc0EaCK^&{PZwtk-27cbTn{)cEyCQMh!{#QY=Y&)qo3-6D%&COMH&M@}R0{ zl-i|sEo$`EnLJVOz_EGri;e4;FeMtrG8?Vn2dn_W$D&oick^b`<}b;yemKTtzmm5p za*RRjblE&S8?8#W;Z3WvG~x$B5KAWgI=*43v!)_Qe?iFP|^V9?b(gZ#S%d+ z#wGxWeoVDGuwLlPzI?gT|FWRj_m~->=1_JrL)o$`z)}l*`VMQ{%PlxUYm}gt3@wvt z-VC(dg5EGFIUJ?~Glcg5jhSxcMxX)B(Y?Lctb1JCwBQaESqjg#;4!6Zlq%u26-1E9 zwWUUx4i+fB`C=zHc=-5mWyh+$@CE9}S{ennM<64(sDJLZ*eG2ip`Usu~ zUq!Jx#W9a$EYIVkoo0ba2nttqf&0##u7b*mQ!Ev~V|8$UHU{Mmw{rab#j}0o&V>gq zk`X)`d)sRT)X;wbwRA-VAR#Rs-nU6KxcU%|RaTavPI~OIs$ztFXr;rsbQ=SqAoSTO zRb)E0sXm9j!oAl$fnrbpEjWYdz z;_Vh(`gTV^Eu$`Leh;I9FidSXH#WL?B7i=*EEP{bO6t_nK7k}d6%z_1OXwbZOQp+t zt&y(FBmBmamoG<^*v?mMPlc({s1EkHag-@TpWGVZ)$>0FD{|2xOi(u_Wvrm1-Nae1 zCA?VJhaiH-wlS1F4etHlvSd+O<%LgP@#kRIymEi@N5hAL=lZRY8ryAIl?OZ$f_*s- zlN`hb=4HlB7mm%;$MZcI;!ZtI;W05W1^mWc$uW7kv{IqhLG}E1l;hMUdpwMVHks@b zd+>Xb&{S>u*V`pWleXbRvSp3~d4@Y~TEqr}W&qL` z2l6|&cCqnDKmRAhvu|4L{kHrmEECSP3S_S!2_&x12h#bbgB-SVT?M=Sn=a6^BHaUm zuN)uX*-z^4`%!Gv5DEg)Y%Z{dD!k!!00|igsA+KjUja_!gUGZI?8YCdLR1UQA{OsF zOqA@0hm@&NdX7Qi8(jMTQ^N{B*9S4WGF}7se1BzJIL#VVG_`!Agg$HFB5;Sj+f5wOJ*r#f6D8%u^H3cHA8yJgzL{uKr61_+?S;=! zAx|mJ?9_+jB;D|HvOgcXN(t)JzJ!)M*wV_sr4HcQxH~nWi}gSEZj1?K+?%;S@tS3- zCF0__b9&9(&`_2uc9)E^%BPl>%@?26SVMVrZYh6!oR;ljjZ)6iRCEjOaX#2xuFQxO zdw;#1t(D(tonAFBIse0%za^zic?|BaudqxcA5t1i@VYnK=FS3yX$WSGgHOpoWmv?u z_vAi~legf4S~BsSrE(7rV?JD>yCM03Rw_w40v`288i{idyMOOoEukmWJAW#E)wFwB z@ckvRP<#rEd!^Y0e@(Z-C0#QENu@qRP+#=85GUy?Fdam~p(T792?zb2bd^!Z=?H&H z-bCq$fq{m9$-b*HXu~!*i;gFcMEx&iXG()K2IY4{FjXnT2o98q2n|7e)5qtM1B_IF z3z9l(7F#8l7DBEtuFltyYbmUn{^uzX1z_jhTo32AUe~vr{OVWmNd+WYU}n$-yXx!f zAsn)iHqMdHO@3@LdFZs}>bFweF=&IdFyVzdt=6CkshB<7@UO0fEB+V~*;lwVj8n#) zIRn4-6N}bpg)1m#i}Ulwa4|i|#Za)*9XI|7Cy{;D3vBZwAr**20%`gawXcF!)BAFB zqB8!SL2ut;6M(u3Q5og7Guslu`%xHl#NGAT&H_`l#utxhvvcoa@z{lP;~#e=FFbl2 zBH_w`%n)4SdTc8Z!lnyBkT+soVA7u+f$KQglcDyhy4(zUK1^>)?UzHNdb}NX$G$v= zFxc7N?%%&-{sH2Jlr*qqDrj@{b(@ILL9pc_2&Ez@sEp^?jkIhWl?25nfL7c zw$A@vogCPMWRV)`=V)iT&)yL)_9V7LMsVMz1s?PMT8G-RPF9B2F$ic6eAG@&4A(j| zY{%_ix@o0UBXh&0_C5rZ>)+nxfABkh7CNf%=hLr`D>!t~p@T5?SRSpcG+p4PrjCY; zZ*)fVYcnnulZ-pM-4{Vnn+7yNYRIvwH~8B#N#nyua>WNVzG84YitfES3q)uu&yfx3 zz|@#{Lr^Ni%q!Z@wv)4H<}qtk=Iw6GC%G6f8EQkhSOj)8EZykwHy8hr%s{Rn4i9GH z0!(_HmADOnm$)gRGCOM=#eC*_vlvIxdm+izt^XYC1Dv;aSpsxhcq4e?(%6U22F z-(0?!%9_czzt$?qX*v-9Ha90c%0UC~He*9y<838O6Wz}t2Dt?M+0N@1`JC2gK+wmN zFm`Mwp_2~w9itW8g$Y)pdcY2;uM7E&hxgiNU{cAq)^z*n1JUL>IpjXmV&xgtK%BsX zHoEB3Ln3tI6oCmKxY&EIbSC0)9VJ15-d?hXussS&5q(18)w=y2_W?+dOB=Hh8MHN2 z?rd-Rh_~ET7`K*oE`1)ThUtR`51uN=pZECH5y+{YXCRl`m4j*xxvlS??i#+V%(DSE zUrKTZ3Sp_;;=@P#pmfPeN-D>5zQ7ygcCvbI{GDVdwE`ubyK0_y;lZ(|}|Xq{4az zX3H-&UR3IG1pMsFlckbNo0FXT>v_IiPKr`Sl{G+%$-4tvAmowy^n4FIr#xWubW2Xo zj>He)A#|q(u7wHiB5`0&+7=ZLo#WSQmWnoUqMkjFUJ}KJ5mdhUnV1rwNPBx6%W)+q zyb4se{E;<4Wf^nLzSVYfT`4kA0#JCY%x<V>k8YG@+%E(` z0D6)%j`8)hXN6XAoMuDG4rRZFVK8(dQlw!N1U>W3-w8KYR?ZyC3Djeno@vTi3>Tcb zlI37Zk#payJ+_W6%H=(s43#nA#Z1tC?3(=$(e$WHhc4Wh-+>pX<+>516nBT;)x|~A zb)y^e#7PHd_9>`>AoDADPCKqm^?&5Z_aL?9XsFl;xh6_r>@GCe#?}XAUQx41^PNcC zYcfVXp>_t5$TpWEO(YUOVnY?U1v7SNKEsvnqv1Tz;myldy(7saq6A!T%Fqf#_~Y2P zl!U1tQ?(spJ(TdNZtK0Nm@Lq^@<>A3ZL?oL_3q-U+jb_>NGfwPuB2N{jLSQ347-*) zZ3HfbSH-owQwcT5I~xaWD6`hGJl{CwsexB)&|BpK6BR`DKzg@DTotfWsLs4kzMf{f zqV3)No`@eH8r1!sZx)lU&bG+jizaC)pA!Fzvj3ZkQWIbS@EME~4FCo6(R2^nht$0k zwyqwktid*(p2_-vKeI_u3OWO3zZ$2_c77`YMAp*M0?Eox7G3w4?0Xb2ulF<(q`ig4 zap?x#hUP$mVMMn;u!;yb=qe3Vs$6@TG7JCtr)PrMjeDTNumAj{)uW0FSn(2wm5VRW zn*Mh}{QD%6uz?A!0r_C4>7GkTpvkX_&r!|bAIZ0bab&{F8=Ga?H783$rdy-5a7*#{ zKYTW(o9t3!65Xl4>`tHI0_>P!&}@(s^d2U)0tI?x2m-+Skf~Y3d89g(0omBWH}g}8 z5%PL>P4pv+*2qB3R}#QRg703!-0-+K1J!%3H*53-E(w)@i-FTgY;41F5K4KCJ;kQK z{(94c)QT}j$PqhjxwAGO`qqma>yX z|KrEe|K>tNSBcJ@<8b`-wEL%k{ZjY^S?;zBwL&EUn~yhDhOB%Y1aW|?y1y<)A5%~G zJz;Pk0E3{hDo-WHx!PAGl|a|<1Q~HCo!2ZzL#A4zvdR|yE^-bK%uY`yz0t3`oB#E8 zzL=>lGz-92QSJvS<9~n;_7OzhRAIx82}=INsLcFtI94Pw2G;`=4uQ=8UY?xn3T=Z5 z*0a;bAU^(4zIO61;H1g0?+I6qyo2a;JcHG5e-5@PzkK=9qcY!}#;H?_W8OsQwm$RD z=q?PO9pG;E{4|I|d!i_LY-C5QVKig1l}p))f*U1&$qC5Ul`B_ziq~D9cl_E}pZ&n1 zCGcyjNX~WMTJj}O z9VSgtoCv(y)-ubFqbEZ23{&bZ3^%tg2Tjb3i+sl3h4+Kj+tl%6AU z)lq1?iW`|YzM)`Gb^mjqq-O+SrRb&B(AFqpYnEPQmSHUSMZYeRkdo(VbKU5u)_3K! z83S-v0N|`Gt^(!z)ESCAlYTa1S_YrYj+x7DzqMbTrTI6ZD-uBm=tIJa8DCZhqHsD{ zKUd)Q*op3+(xG=!)TD`{PF_J#MlI3yK0B)9VxY1aqT}gBLV^B0iO2_e7Es3bz#AX( z>(w~)nnM#Qa}I4C zM6O5=NFA#M(3s|tcR{MsWP>`C^CRD@iu}o%#jE0jE3Xq}SsFoELMV-J*@rn22Gs7FxXAF9YPT7__!sxld5bm`Ne>;GK5P?;%P{QLPS zLL_o+IRUW>f(N5l(^(3;WU@EkiXE;SeF=YtbJ2d(HHl$pN5UxaED=%k4hiJQm~ti> zl5X`>VCT_dJItfQd2GcEW$@44{5&<3qx&5y9!N3$1CvY_p(uY~Fj1RV+4=puZ1w9! zRjkl5ee>ey#4Yl+#Tyu&Ik6dW-D%3oU;039F(~xG8TVyBdH(EKQ+~Q?ekxcz01uYA|EVa{qFh7R2%k9GOE?g> z-0Ei|%yL3rWoVYGR$3{(yXyI;k>=DuoItYV$)lAcJ~?VGt|Hgn%`gsAwh!_p7Es{V z_pN}%@LQJ1wTQ77DhlzzL?Ey6?Ufq+DA&zK#w=O(JK`M6yva>`K|cGy$2V49gt&q} zlO!4PFdB`yTzX#b4djeNK^1V7jV#nYe?F=egx&3NpUdm7dvociGNU3!$2J?s;Y3^UAMQ}-`Pl%0D6iTUEKD86mD}1 zJlHc3!{Tup63s*%eV>L{EWl?7I*lU!d}s`?exAow9?)iHcy+g;ZhDJ$kxzg~&E>qA z&MgBuog@`Db@`=)G7vv`^|hx-Q4yobUgzn-7(gyEF#%9Gw@vC4XC8F0+yBMZhnT1?^L(9 zNV^T@3q}hwY-%XoKLNLa?%$Ys!F)2i3Q}3iX_kfw(=3w}uxRDMPTIuP)!*-n?;uz& z6AKjO)t&h)nDj}N$0>5I9pD2w1NC+!7*ylpF47wh zCBYmDaC-GmW3do&Mm^Ypr!#z@X3Xi*2!rZ8krd_DvD20<@QI7-3XEUS(}71<#IbCY zxXls}uLloahQ!P%7|Q_8;j^ojlSCx!)It-lj{IjEKnmUqx*yP&SkRB)yZqVT+IfM9 z9?GGh?8yjh-}@f;bvJDa1@O_6i&&Oz9dxk*a4A^Z@pl4-jhg-R*=_%8gNx2$JdA<; zLP?J9`5vP9FijJ=5DRUPEq5Ih*VNWV&0k-;^fjuX5CNQW|GlDZ%?;K8B@Ij0t;O~& zkA^y5w1tHQn3gs=!!tl}eDd|p>eue(CnB#uASI^#>@7y&`6v?L3T!93Q{+Vn3w1#~ zP@QzL(+6qQ)jgQv7Il;pZY?*Wlb6vj|dS2)@8bXa7eGSeROxQpVbJYgh~r zPw~jK-Jo*Ed;I3@pS5dXMiKnlU?4B$*Ca^`Dq+NBKA0C$Ji&ts$9TA8<0F$=(?Vy0 z1gCcO3s9XMe%5i_GQ50hpbhKjcp-XOhyq2jlcLqPH*_Tz?}^=Phb{n|k&A94`NqnK z0pPa^?vU#Irxok6{of@{+F%NWnT&B;wC9D#aHTLWDh0z|+GIN+as+AyPY@w;z`GNRUYv-n_^4*?5rzf2Lrb9CJd_1-7A`D(*X) z2lHAZhLf^~kHNPDlO}$*y`m6Tz~uT(!E*5rh_lLqztKq%*!AqM%n zt7CbY_YY~$Rbm*#@~y}8`BaM=U%M49bU6Ee>`3V>ONp}W07 z`lQ4jk?bD_1r0%N*Y3Z0@b0RY#H8arx}agihaw#%kkOBYg_W*ZULqO7M#XxYcKi#9 zfmaJe21PFo&^8l`K@(&m)~IxIC5&W~M@m|m8v4(iEbbEYtJ%A(OxUqjq!8`ARzDs< zb)S$T!%MYr-qH{3Kjw+$qQptT*7p<45>lc}&B>_XkW-4HVEHC?uAxgj$o!j(VBof)| z79J&xhBR!>bsNLjNt4Yo5wQk2qhmiBcUd0QVgd|CW>9nQXxDNN6R4d2EfKXP58C0tn;>`eaR}>L4ev?X*kA`lpY) zEwl|1{w7HB(lFtu0V4$jGTUa-mkUU3!=iyHArzSQtWk*jnQF!McmM>xVxz$K()_2f;N$?UDS(debo| z_x%lJFFdlANdB~K#gvD-z#{|%p5{2tH0!7y8gGz9EOWF@yJ`v+Tb< z)kv6M>O3T{{|r@8>~&W&kYv(VtbxN7n)II)tZqdn9-WDPxPtQ(8MZEz2{DwYKj*%E zWC~;G22ZQe7IX*jFdi&VmL0a(m&Bfs8yQ-aBdIz$+BM#gVDnoRZ^Ca*or2c4_B9;y z=q#C#M%xxJDyG`N%uDKSfB5s0XC8Vqca^*;6)RqBN-YLKFE9y7V3zRioEsI7O>&5`tnAy^cJN`HK^XgF;`i{&!vLypl2j$UE zflqo2<_LI^D&y0MQeh0?=US^L zrM~Q%yrs^hR+!n&EiW(2>Mt9v!=nsqK<33In#&Ky-6+gGa$SZNTSId3&#;L3j zP7*}Rn(*?7ii&dEBDgFtR6p&$Is`s?w!H_a(OENsf>4Qh)ASlvlA=$C* zdUclOB^Xn_NJ*+hL%vKmhkasDWYA~?#*>fXqs({q9@fCFpp!c0(MRVycOFK4_$+0} zPC>c+HfY4k1!luMngjIL8r7AdVIz|s2S-2kKsp@ynvpI-E*Lw(n21kXya~xCFqNO7 zxYPGp`?-qb59pFJ4Q8!YC&yI82n;hc!@j#_e0@O;c)=1|2O zP;Y}y2x#Fq%=-e$1z@|w**N(8(bvp%-2z5SFcfe**q%n^dq zh6&h7VHPp_me`NTLUC-^esp7FLva}Z1lFljr97wi4?Arv&08=B@w@jFSw6Ylh>+Sv z5Mf1(+s@BRV)1-6xN!dHFxSzfzJ5I(1ag3c>`6x5sogL%Jb^;#95h+lc>~_B3s;Nz z!WD)^Cw&XWZS?~|Y{lyHxt|_qM&cup#`l04Dl|-CfTZMxbiy3~tAHge9uS632+ChU z?FV4}Ic8vKPErKTI=5B8I4B;>io1D+onXVBGwmI(bpe(JjY!P4t+%bw(=L`yiWsgP z<^h}n?HSaaI8 zGC%~AH+DV23)c$Oi@U4y`$eGI1L~e+r0c)%b#^qV-$Dk$NH_GA5xW6PFsnR*11Cz+ zP~l)D;{zy)8p+$D?NIair(<9JU!(Q0w;mm?VBgp2a8EHXdrt>o$g!-jWuY(QzH&FdGUc%KT)EoClv) zH1stXYKeolJkbcR=Fy)AFV`CAU_>PsF7pic=!=JaHaw(yfT#r{KLuxZcXuYqv_gW- zjZHn!T3Nu`ktxKTvXj|A$U?WX#v&VC1&Q3uweuJVUF|BX=$rE((-W3%!W^RDz3U=D z@y|ub)kK*n7-U-oz3!dfgpv16<;-xk`~I_cNq;13RaUgb;?6VZ?AW{sKuX?Nv`1_U z_$5kRwsQs;DKfNrq0ZQSHg96Tc8X`pZQp6|q-Bm27LRlv_l;u;3{$jGgD)qz7sU8sq)-aI2#<_`i{F>ip380_ zIK&MkPX0eUkb=;ww6J5q>3vB!7bNQim{e(8EQ9N)54c#h1L72*A?pFZM`3dx^Qx18<0+zyMUAX69vh8-m zj)A1RIDOaPYMb2_m^F`#l(APRJVCYoR$wgtmLRn9S;n$*CxOQB{j|B)i6_5I+9`Jr z_IE+!ZlmAf;469J=>7*H1?JBPRsisCJXEv_Bh{=kE>AuohS@E>teF9i6nmTtb zIUVGMAaC#SB9|H~3s8VKE_bU=!*HStEOHxA%zAZh+vyif?e{MoO-L4^>OcI@D`G$d8}3 z0h;YpoG0I~ZsjNUxjR#f>l^v{m{OTV(pHiSg^kTvFbT$h{jGpy*GkeXzP~`cD_^s9 zJk2ij#GRCjU4gyAz;Cu=RhU8bZlD5Wsux4^=m*Rg9UV<4t#}Xk3=Aep=QQS7v1uCT zZ?DyAws6SKE`z)ULw!Lmu16B0#(q!BHDS^M0;MQd7op%Dj8K3&GBE9#45H2R$4vGw<4EFi`K7_Ku-0au%TjL{* z4pp7lz`x^uS|N5dsV>q{>CfZ(xXGFM#oBOETYbERpaVe+&b~I6f2Ov!0FDfpikZ-b z!)y+G1}Cww`j)yjUy;y}2IfoP2*79&S%(O?oR!lJ+GpOp&aNHe-Y8r1Kc`$^XJk7K zNSWaLEoxxoJuNdPGqEt#U_6stmCNowk)t}`So@Ng=hMdu0(X00A8}s+xooYi2euIfsiqBlZjic&O)vA4;~;1s`Rl8zay(Y=u8Ke~ z#6C6H*jewCA)Dy#U3GePrP^P5(FE3RLAi=$*8TobF|QQt_rBj@atvA^d@}{x)0a81 z2+JyEZ3U9Wj})I_xANxqG_T!4PmTvTby3aB>$?*08#(>egsX7qamsCGAM&>+?6B^1 zXSj>cj^C1x;O%+&e>#5Xup~Dg)U9=iYCrf{$uKp2@6YePF5kTfLHCg-Su(_0LHi1< zrsbOM`?k&2ZP9mkIEL)1@k$v=OiJrbIE{Nu;9>b*2E5tJlPYTiK0BkH^pu}fy%}mr z6R|y424Oj{TjFOr@T#YqX+(w68QTlPrG?<^M@+h=&g2E4uZ0crXs~UVjp;+ zL~8?+v^ehc$>CRMUNcydJyH&NNrOrD(5x%D9YWex;AfeU_Sm-x|Li+gTDko4|DF%lja71~1&4_C;OFr0i|Ff&L(XsWrU|iq$(xN)-Kfn~n z=3yyL-i>RQ&!0D7FW`{G8o2Y>Zdrm<^xy9Sa2opx7`aJxAvA1*d%en$jpp#8uF1l$ zgG~nN-ZW?@s;xplixks@$#iw<>*?&IYgCTBav(^juu12geg-M8^QR0jy8H$Z#bMA^ z^`&C9G$crDp@F-ty$svwH`=iYC|(w5xS)0g5oVAwcbE3i-Mu!*L~QDuxi#Y4%CToc z*-_mDWW8e$W+AG)8husqY}G@Mj~lC6k&wRZLZ4_3~=_ zJG|G_ukyG|at%Fk{XsglwXxw>6JlX>_$=zN19#HtwlzVKhgeK_D;>cj70%VZy2M-v zaFmUb@~{#As~5fOO4^wV8cJvNUpV(q8tadT_&UK4%9;_hb7|bD)Zd@% z^5Bgh>d|P=v9U3bX)<9XakFqCn>_V#amXN~{iTq2v%>0D8u7qKhXIu(SnEU3MXGqLIBY>&=Y#9>?AB&NiA-F80jPsI9ihL&(yXhp`~_ zHYh3@uQAoGG@TbL+zO8d{HB+qbg%8nbmqFQ^{H#=0+en8KnOadGjdEWx^XnGr^sr| zuV|QTNk$0_Z)W7X0u2R0axOz>ut%Dl1ExYoPAdIX{)9R`K0S0psk){+a~ZGDU@Gcc zZP%&%393$p&`b~At$zu6m{{uPe$S<4LEF_SnU`4vl|`MZ@tyy@|LgSAksTnINN)oV zoxKAUVh>~z;CB?cN$V}`P{@pFm$r!wf>Nb{Jm>*r9$D!V|Eh{CT!r<-00}n*$%1ij zuZ4FRI(?7Ph4HV@*A=RVm);7Gcj{^D5s${Waw>=LjX`Jd z*ow2|s%5DX&wzxS(hPPhQ<>C!?hPfHqKkJ79+!@G7Hn9cVVt9v;B(@e=Vo4MjSG?* zqFC#qKs4PsDr+|Cw?MagS(5Ye+LQb3-Z(a-Tz?&E{}2p4`-s{&V_;x+YxD(JSW+4- zf8Xru3-;j*7bZ3!2@?cHv^rVO@6rgnSna13(atay8j!u|2)9AYWwj1CMHr+3G@F(% z&eoC_FfcGs%P#_i(IVM@q}WB$6vFej(1Tg!o1qlJ5s};04ex36 zbl}HZD=AL2)VYXdkMAxzUu^w_7Tk395a_A14VCaM^=-9h`}uvzgp;%%9o+!Y)NGj8 z1X7!+&(x5m5(l=Nj|-nXe(6g6&IL;x?4qtdC1I*kPg7$0PytrfDcH6QRZzXHpFqlZ zh6lDsrxu}3l9?2sngGmY>r^pZO2t@#4|Y9NQ3qW}?rUyAel{33)|d)~%63*>$OOT9 z#$tEcr)ZPcB~jeg_Z9P@#~Vpg_RIWa9{l>PTT;%{RlQje>*UEPz@9LvbRr!aDz?@m zDqkEf-HN{ZeBtZqGiMZQHPY;j4}dfFgd+eW3aE3WpnCr-Zkx=w0Q3MloZ%UsjdCd;OUR6_!S}3|0v54ir4^S&BjeDlvW5Tjncw)Gv{a*HBWqUhPY7}$H0^7R$u1cG-Y$px$$N~^^D$vrcmcZ zHnacZgN#W{E6&rp3}(vf4x#T5iwoo4X> zo~I9?pfQnd_l;wN ze83KpYOYo**%|P2yM)a^ljYg*e)G@5e#jJ=@eqmh6_+0CV-XrMKRe6l7hO`^DZr<0 zOArTK;?9AR6Y0L;OM<)y;fh*DVmeNq24A1uL24IL3PHaHy`TWB$Vy!O1yWsuc&n*c zg#$kj>sy-~r`>k)REp3H&%5`L)<3?*%!|Wt>RKG&P)*xv8rfVuDLJkV8neN`n<~H? zBSM8i?}1D?SNLK4?-sNf@eCjqs@4wK9q0I*tFS8(uI8N&<{wkJ&z?u42C)7(#6MHh z+n$D7k)dAv&@myK=R_923bcz;1ecO$88=hDnKjj^lq z*syf^(wjq15z#!#NmXJV4Mb|0Cs$k@HsWg12^TY8$$AZHynlo2nI1v3rE%zQY{DWR z>$rZ9P7m9Q7g3bc@*~zD6?Gke-Hjn;)R6yh(E4771Pig7ov;5__#zKFe1n8n zP$=YDvkl*a&BJN6j$Bc@&X0r^wRm6B`xs}xD7H5U4DJUm`91d0u#y7h%@uDZBQ;iXlw1W~ zKwol}%wO$uNU+eTFw}Ikx8&s#pNIYmPWKc_)i`_bcI{C0Pf>^A+>?lgf(gjFhX`sI zx6O>K_vs6$Yf2uhtgi*tf7Db3(r znn2qeQq>g)WFZ^2JTLLuN#2Gj)&aOdVg+@nnBE+J>^Kx+Nf_6+{S6U_E69sSF30=R z|9jiL2$0ry8|b3$b@{sDzz!QE4gn=k@QO9)7#U>s5f{CB4)3St)wkeX2aR8BL*dRS zzy#^PY2p>1C-@14K81F7YZg9o~e}B;aOE%j4o?@*XG z&Yq~@I_Oy?V7a&%xL*KTFt`CG4y)MPXsn8Zoq5p1XWwsRy#(|;-SDA4|2vEdLob#e zdCll5Tu*R}01uI;M98@HwDeUq5JZR8eJ;Dnj-(onz-$48$L-&;*qz!HFNRkTfsRqB z4D{dgIeN_{U}{1()lJT3Qo-dvc!?})BJEuZQ^N(kBQU`q4;6|98ephFbY@!B-RVeY z&X^`xITdbbJaNGfIa!3XZP^5xVN1vpfY zVIo=go6%2A-6C4Z=pKLzH@x7>8xIe!<4-)oI1WDl?Sx}~C`2HK7bB#kvVk!MQmDv+ ztfDcJc5eZ7N#m$nqw@gSxK5IZf(<06(|)a=vu_feJsTVJYD0e76^2)%4wHV5BGJ!y zG~lHbAY7R}{G`BV4X{+)TN+-S@=Rz9<8N+{M`(b5jt91Vp zEPy>(?~neM;$qDY3=!hddR(HZFGRnL`*j8TQb)pf*raMAQ%sf}2OUlZ7*AO-nz_~w z1=ta)_cnNK?j%-LRthkvO7Z!wf}EL^BnF#X+Pj@j#-_n>QyEmR+PqPNmYV%KfSVOw z_)Sb%(I;Zlubu@axqKgUzo57C0Yqzea29BS5Rl=Ndw)cuw>ism?edP&E@96W?C~aF ze+)7d4t{O$0GAWP!}ymK^H?ws#EZO|996CUySO!bS9dgajkMCkrP!|25 z$AW>MejQoUpGc=W@sO5)2o>@ku?!OBEJlJ%dyn<;Qyq(I$5Eg1fsndI9`e|>dtVUzc}M+@G{6&rZ_j3qq`HS#}cIvIkwJh7k=&{nvr zq$iHer4inv-#7>FW(?*ukBp5h5y}uo&~yE?#Kt${i+m2q0{5uXd`4!~Q9Ab(*O1kU)BoIlOma4{ ztMGjbr7DKi2@}zQYq005DxwRo!hu0dmzEEx$4Jfbm-$-1nwWPC9LKsuDm#~pcQ@>7 z>Qb6e8-ZPX$VF@z@+L3)!xmQpYkrS8#Oz?6VI1na86UQ=<0p?;957$zRkw=!E1N2k zxb=7$JOP|7?qoeFLL(EoS3DhQJ?U}U3jtu+)WGCfh%i{hwV~TfN_u)P92v*BusFU-^@Yb z1Ez_*M$lS-Kl(Fh34q7@BS*mQJ};bhzp!*pk8v;k*-Al@g$uG*=Fgc(gXFEpAohss zmPSxx+h^G0Yr9Mg@*Zlji0p7P?w_3q5Ld!rDpsE1K$cb|XoI|6e)n0g$tKHQ(XCLO zw?Kfo_5&tT(;f`}5NozneO!7gSxA1w#A4eI3zdmZsjx631B$~764&Vnd!3BNt z&|)h{$Tzfsr-hwP?m-SDYw9~H3JQu3NxBPMBp`pH0oRf7{f4E`=IbL)^GtO?`J{Q* ztQ*6*a~o}pDeXlmMEerqHC14OB&KqjXaQ~=%mI{N6l7G=w{AM*6o=@tNP`+AKrm^C zTu?GjpXsL-l?JCiG0ng+*fS2b6Z#AGLyR&uykX(}rvc|coi8}s@q`#L2f&A-MF7J& zeNgWiI`;?7E9)A!xy5ec(#vPS&Nm=INZb(agz5(H*<6DCF8MUJdEECjoN7_k~RdN#}^*g9jV}5~EhL??k*g!PU z;27dVfQ!5d4oFgB%Gu~3&PiELin>@2JWEC~S14?$O(xRLAcsKlN~PZd`1Zu|YB)n8 z7R;G7K}Cex7or%oQHi|OiR^R_ligwSTs+jEd6O-0?#&XP;(zlVw&F6F%E4Iy zq9YI6H|WNIg^dRv%19(z{YLn}Z=ZkfD(T!E10w^geh80k>OucX?d`LkZdZxV9M#u> z)5u{aNQ{)&N@V0ejs8B)EGl!q)Bq=tQP~XX-j52|bQI@{z*q?eg)g8_#IoMfn0$yP zD?r}l;IRr&u!&E>08tQ}n2}dZwugiWTx^VlcaLRHKJOFoumbnRzLf(^@_=)!4;W`P z!;4dhf6{yBNO=^Pf(w94aTDJBk+&%Q_ni|us_3*UfPR(r9aqLY6$5#FKLAZZ9k*dJ z_QJ#0Jb;3|(dIWi!H5~L&LSe@O}=>S(6&bzK4vZ;3(R*+2l4<#cR7t%vfgN!jrFh! zgdUenCkRkd=Jq`_x(XEb7`(nzt;LDxKTC<{3sUpb3OsL&A1ps7E`tmm1)*>N_)b+7 zywXiT83g2q*Li_bvXrenvzoo?GI1pbC+}-N%+lVc=A-l3Y5#8hXH!4k@070m3d;Az zjSH{PqKh@i8toA(jfKJ(JVVwm*ApZJz>V*37pD=9_Y~f>AreN0lV|m`rn(y5f500g zwFGa1glaQsV;8>HfPz=xz@SJPVjfo69;?pxKSNfyz#ibZHEf^%cI|_YMUhuWD72F_ z8%O@cm0D@1oEQMGg5bvmR`d~G6?a3o;eFj)f)1{)Od-5o55%(2%AC9m2X6seyks?| z8gunB2RRMoq*i?X?t~HvqX5$?-M~NNwzZ_eG)=sr0XoQ&+~u1p69$e&-04={(e87_qg8I zb-nNG&TMOe^VJhsW|>omxkW{F#R?$GP5jgC^{A`S>)iyh>_a-9piD2qnD-MO4L2HY zpWPT0ylHCKr=d&D&?4YFACgq*g>c>#r1MPGpa}It{l#iDU zZ?BG(D}Ag*V$=$n2Sh8k z3VfCn_AofrnJepB7GtJ{S}Ym_^}RPvh42Hk$Y_#1@q)%aP!9ghM_vw-+Y?2tXrtKA z>Yp4#!OnKXfVn;2|6*&A)1^nS!00viid^iTln)T*0V%}-#>!gR0d%geH+%m_TfM-l zDQt(RMj4r$ys<@S%}xzw&895H3Zn}Kx8y`(3C5`xSH^K!_?ZpxS?K zq-==!FMBe0L*{LQol)GL8=K_-hLj!<-^bGP?)1k+{?Y%%HA5MoN-P)E+t}&n_s4C(EfV7VEq8;B~ zcPRa_IcaAf-2rn;R~pv}&xwI_+S`Qlj9zT`QwP=h7|>-P4pVP=>0aB>6J4EGV#Mr; zmt7uTP=q=7sJ^|uZ8xg~nhrFknaOWsKkj|89Q=IEo2DlQ{yB|8)ZoM!-Fvz6Ok*j% z++LQRk?o5Q@#F2;2hy=6o|GZ&%g z#T={wC>~!3zF+H_8Wsg;aTcn@l^9yQ@2Qmx=A1zW*YEuSlyHxK_l~=rp#u#WlOol7@`^XX-T>BY`o8?;`0Eu8^=TWXB{P~13f)qt$Ol?#1K;Lb(E&n3R#0a|jx z2x_+?@7`6F|5*k5s{srx9PXCK3zlWIxiaoR zgn(iXHg8Ey-3}jfKC^D#kR$bma#_{@c>uXR^z38g`OlQ|?3Gt7)Sk(D5sJgm5?j`| zMN^kDR$6jHfQ`vL3(xtTFD8`Zww^w*W6AEEZl8d;&(E}VNr@=HMyZ3WK&_O)6K1f< zaLAYZjKNhVdok>3vtE0c!~|>-ySMjDkfIN=hOUr4|Y5 zjvy(~PMI%m>e*fSrXq?!mdT@&Dl)sAKpMZ_q;poOKX z_aN&$0J9e%hVa+n4Eg`qQ1S^VHCTi6&4>M zBU+X}dyev7ITp;9d9M)ka<>(%@7|ye06@|CCb;qC9+0Q?OG;k+bl|%C7Z6Wg7pQim z=e@X=dZg$zI?>JaG|W>M2HM@?^i*0WzaP*pDyHdOen>@|S<_m9o?n4qMJkyy>A5`3 zHg-*xn`?U4+;m7fTy)F(!sPwQ7)zNMn$!=W!}Cg(AHY29%AJ%P$jugO{;L&X)}n?N z6w-63gYJzq#+u*lH->h^-FOZM&OKj2P`oz7R8yep3KKQ^!7TfG_G1RdVg-&Jrc}MK zAW#jsG~qx0aTstQ)8IlyIL{7*Yh?diAzq0o)4b2e#V|RWJX`<#(KGe zCuWh;8K@$^c~+f$5+-%fp;~d$G*a@S0>4mY|C{tyF8nTL3xNF< z-M5o|{qN|4M@~~k^%a5%XqxZWc+vDOfkL(l*@{?5TMQQOhklMEoG+%OS5v$twj&XF zGDy|-NKS|jK)jwr08|chx-fV^@^frgPZMzd_S+{4r(x4doSgoUIq|a^Wu`cQg zhy6mqRP2Inc<#v$8zL@GwmIY-uz<0HdZhEHS;%0acl|G+IV-bRArqlyQQIyrU%U`rjn!-D^?gy&*U`m4}Yr-!m9S#P zR(rl%*Era~v}v!dSSB0%@sakg#$hvyaK{P$t@mZ0-{bEW{KKap`79=qgPTWy#Wzc^ zr8tLGSiOCWYF_oH@VbA$<{#9z_;ajkx40A{TB#z>?A<+B(Od-F7Bm8ap4yY{ta(!} zGYGjnT~sSZ@D3(l<-V&$E+L%~WCywR59cW)bfYx6U1doN&&z z``eCd7=Gch(LTC}R*q;=4ZcjEBQMXsaY;E&W=!Su$G@KURFL1#6#0(*1Qn>#&}`q+ z*&h`GA22An&=^$?w8A!z98h2K<;DKr?wXT`KZYasSo9!#th(Iw;HB0(@Vnll%qfuO zv*mr%#4I@IjymP3U3Jh8f!6#@AkcXn9R&6{&8Wp+{NVkg2WP%j5e_7yVK?u(U3qla z!7*ycIK4FdkK>;$ZydAQRCleO7_p@=YUo|qzE_3k1 zNiOEi!JHBgS4leBH8XjXD_AyBS<$|M2S%#Un+8=gRd4jn)9YMO58|=uV>*B$!2M^5 z{9I+M+y%^H)Vfo6X^YxT;~jW4>SJsGA2Qj&#zH1W*2iW8U!ySw31i{PeuIsJ04mXv zW+iS=LT4^!uF{fc*^2p7cLm!q7Erjs7B%neI~tC4`X8!y`?>1lAp=$! z9(a2fl;CDm6Zcb5of2+fKyNEg>!mY&5S;>J5t7nRF((-*SL}eVLHw!L*`kjYi7=k4 zH8_f5SO0}f#66!hF}nq}-^yw_MROpffL(MhqH7Z}eR@uT{HNwRT4=yBj8Bap2prsj zT57s1`)Ne}2GakH(0&SAh`G?7jtE#849l=${uad!4$-FdynPR5_34tnO<; zP!{gRUskGVC&GZgBhN<@#v^Z*pur2#=n4Q{f}rS7W%x-+O# ze;y;Bu-aX4fnZqPS^=+bS9i4t(nB((>>FFXdU(Dml{xSRrl`T^$#M5Q(ajSwBRcXb z{!^b&+zfWO5g=q(UeXM@!j1dS<%}Np={PO>#=1S9L+YcFks~QBf6e!hb$b-Q#)?|s zo-R0`L^|OW_v^qDUy_-+sIZ=^u{l&h^s8nMP1u`57uNEz-aZnQlvPXEGfzo^g&E&} zCzpsj+%)8uo|x3Ujh5oRHilkRtT8vM()>GZO7#i zgC2agtk(dFfMHek;~yr{UaPze>1|*aX8ZC(-$-(V>0TZE2}jF?@>0?`Q-+ozr{z>j zzE*Nddg`*}D|5o<8J{NbmQF5M4@wZa#vp8bzza`rt^nhqUWKH$_-QmEXuh~l5F>z86v3a>2VZz;<7cc z=qqVCWl~eFJ%!gc?jrM7=D$<6a)|u(b$iZYBT=+1+6IxU7E&3c-ss?@i&j~V?&OAJ z>q+6EGZ=Lj8EWhhc$}&EsQPTn7OAVg0p|}gKFQnHn*69qH1m!3Ez8yX>#{j-j*p>@ zZMkLogZRa#nfYn8`yOu_Oj z>{|~cnfX`XmL@QgwLsahc*xDEi(FKsy?gcDBBY0x*$!tF6sHP)4ak+vdruf&%OqJJqJh`v8hA=PIx?Deo3d!-H^v1JYc==JZAJ^rQlpgypM8i$yj;P z!!klA;HM~>^?75YZ?kX<18c8_Pm*b39r=560yv~raQLq(Q8j;{^DBMfW%;q!GzX_- z?dG!Qy_7>|*HQ8e1P`43+y|)62p6mmRjbal>Y&uvytd}qINp%1Kpsq0qP*IaXcDSk zkbg$x|1kxBOGVd{d>amQtz*!9X;)D?NoZn`0N z`u{oTbW>q|Cd;ZQZ8@bw;1KB7Sb^a=QQZu6Nm>eu>{~f&_6&SY#f5QVrTR8vFlBhL z5G*6U%So+YmbJ|avYE(ChP`{*L;_Hf_LY3Ze1iDqHg8_(vB;N=(hdynjFDrvz!i$&iQ6rd7t;+e0;WBa zn2(I@xlBj4e0ui!n#H<=ie}4E!U4PQc=1l@mmj*$qPx^G?Y~;=>f~7+u{+i}AIiHe zHP2ZR|D|usD>HJ*cZh8nLKTiyK zuZ)ofe)SKlN>@$Gh(5p#!p644a>M21;l0Jc^ROF4;rmx;+4zMnK*B`KW^jCvJo_S4 zvHFNyoKcrw7|s4B6~)Xzs5vFxaJ}oYwgz>NH-aJ2mm|0psPonXlmuNHE)J%M&qN*n z*$veeIlK%B-pp%ItljjE@Cn6;N3;t@6R!yBZqZ)yR`M0yo0qj)-q#yiSAbXr0Ad;{ zlG7I;%6{Kp3!e!t$+I8D@ddb#)4+ZA7EC4W`4c`7hA%1V>$lW=rarvm?@-nGoVv^L z9(>4(DiuBx3K7&~pOR&7$6Az!r2~WmB4mkf5J)h(4x5E#HD(^DmFr}irWr>-z8>lD z+wkv;r+J|zZ?-e?)4<^E&mRkSyCz$y0Ujaz+ID2lxnlB~9HM2hgz|~iTl*U(*=+kHJZ7b5=;!kW42cK5t` z`KARLb71*SpULbfqx8!6iw*K1rZKw{E;Ny5gy;|kSMD0WZjJv{_L}yRBEPfs_bcF_ zTi?*5!M_l%Kj(j9o-BNU(z{!x{$q4z>$&j}xwb7TK|9S#j$dH5$rfwBNbHb!kSrHH zCUI?OulQhN__XW1f2wCAU%~Z3O%~g5R1W=5(;TMUTAsEfHP>sJNa=F7&FZE5>gHUK zwvH@1Wl$h#Yt{!bsI@L)OWxYX15);DQGs{#rkLx2C{_FEJ*N~?s|eo0uPaVN&03SH zi3-)#T-m>|U*kIJM(btVt)0kwby6<~70<%veff(oPMK;>?_uc|SZ*Xd?~l3y>^8FF ze$h2c_zE%92rveegdRg()U+y+9#naapC8D#k7*E);e`cXc38EihZi%<_2shv) zKL8p&h(FV9{{q#fraEOTT^?^Ge6TlY<_-Fas}=W^rj@h`c%pL04ur1JYtacyQ}bw# zRGR)O3|_*-&3Sj=%=e$&Wq^IpGZ}+hXXj|gA@Y#YakMVp*Dh~Ql$?Y9_>_Ou9L##u z3v-V%9Cexe`ehB|WA9X18u$qKI-J_Dj*3=`TvWS$du{9{49@E}%QEv2UB2><(%nGE z#7hM*TX0cHeBh$XZFu2DRAP{l^y+lGQmz_<%?#oY0d<&sH*wLm4YQvE0?MY|xcg5~ zTbj5Uw^+-#$s*$<&a@Bm`?F&QSJo!iljcmij=ndn-BYT-+No4=t1rFFbWcsiTQA+7 zHlSz6zUI2#?UI3t1Jw`Ne4CoL7X>c=x{w(I*Xbx8>uZIhJ9U~2_H^}t**v#70psAN}kwnhr^dNLLaFd^20*G>IVo-&aR-<9(AO7f)ry*6V`0h z%Otunc~5<$MTDcUYw*+gz-;a0pbaaz_KmwND$_poIUtaNr3NTwpoq<-{I)GcFEQE9}85C zM0X_o1<3^J;zEdSW@}j?mE`w}a_4_=O-;n!@*8Zk!M(#*G#Bg>OJ9-K7+EL6-6X5D zje%pQ)y0nKU=_1+`X#bN)2i6~;6etU zUE;PPhJ%UN=4QGxPUz-1r#!2!pJa};z*=&hS?2w^d&FQq*$`YnFiZQi(^DDZ2x97F zitUWBO5~ix)meh;+Lr(%AU{Gpz6YtVB~o)Oo9l3G;+2UAF&V3I*fvtGtAFl>Di@>0 zySrri8CgH4X;(!XTS-Sf8?Ba}<~TTWEEck;^{wvt@c`F&*fk%kwi~3{ugJ6Yn>d6L zOIsd$UKg7MKM#f;-#?>$S4+gkyh$I!{Fo9l_JVUgQ5P8j=JQ3;N)rV^nyh#xIa`?masQ?! z%KQv@CwlGC3k}Jtg?!-f-y31`*JSJ|VHOI9AIDYCn)V>&I3=O?*M5b@U!Qt0DosU~ zAxc+8hu?nNy?ygjdRyxUCqF>7{J07e)3n#2n7!0Q7>@v{4U zH#b;4GWYvghn1ErorW2Zh$YW^fp%B6;oO;LFFt@;5G!sU=}^^tAZ`Amuj-}u!*A^>JDR5ahkp%y&&&90^8H`8u=LcdKg;neR{qnZ5g)RISVVQzU=Hbn z^20EmMMX_rqZ5tw+G{b8Q=>C?C|IN$HSB_gxc+J>k4(WsdYUHhuYC#_teh+GE7F#yu zdDuv<@v~zqm-`=N<~x=XS6B`m9(8dW;lH@5RYxywxk7cUFNY##c$n}JZYzdSi@H&|2Z$`!9Wno1a%i<5fPPvpfnRrCf zoI;!A#BpvgubKE;M?t8yb8K@q{fY(_1R$-D$n-~}H~F(6wvm2Y+yHZobO3`ymA}TC z{dlNAuWJAey)I!h7op^t!Fvrt&)WR@`PGFkA--?LZJX2!c|{5OAli^tNeVKNz)i=; z^O2tRO14d*cn}K!HLBm_XNi63vjOb%`LRyk;9VTUkE^d3JUq@rT{ZJR?7sp8&9~M7 zU}hYW{M70I9Mb41gfE*Z`wqYmL_gb|RMnl)J+b00}Ijv5^S!B`AP0Sb2xa%vcn zblOd$!G>ANpXelQ;w)?i_S=*jRb_4bhMOS;!bf{8B2y%W+bEum&xmQhSU{CIEtjdA zuALDLaK&&3>DV|*^-@5E=vpk_-~NUo$=&eI9I}N?;6(g{l*yrub|DPa>~G+{A-q

wOI zG~&wQe&{0w=pF^?bcbkBa>q;Ydf6s?Mesd*@$KANL+Aw}gpBorH?ns(X|XCaU!E+Q z#xrlMYe>7$9-0_+mhIx|-n`1jypzVCUBcN+r5{vEE(MGdaHOXILxl{ieivLgb%{;t8|Sat`kA_Gz~Tv8zYGV_uXHlqn(t_gh|^iJTKEBej6FX!)c zD1GimF_Nx*MdZ}aC%?P^qK!8ck0tJB0DM|o)D3PUpbUjQCUX>Pm>B?Jz|xkiedNPl zqq@(Vfo}5c&+0fFln-CdfLEXx)nsRZk}OrQye3UOZC}|#yX3uIQOw!-WRHi|O**5T z!*FmFW@?Dy$9d#MEa_ADs+(nS>85GLag%O=_km9a%#SlHLiBShZnHmx<3}9zg3%dF zR>qOXbSAdXg8JtCt%G2KVE%dB^DEGuK&`U%{=V^GnxqutoCH2HJGvC3U!MCqHATI7 ztgJxqMA-GX`fy2ilv91j@0;Xh2?ad-64P!IWocg_W%p4y%2)pp$E90rZw^Ah>=k-n ziwAJe)fX4c*q+GX@Z%)1J=VK<%rNfa6XVxh+T5D|Mu zcE|mZldyNY@Ye+^CmY2LiuyAUJ<+CG4m%{y1U{aTdFmBexr$1HC1>-hapzlfIwX7|$nVrZ=NPqZ6xrkeSz zxq0n1`I)IG|K25SAepJDVuR!b&p1F;2n(f?{&guwGKFF>sM#Q7B>LCKr(5ffn9gTL z?p2%F$TwPAZuHvtiPLB93B^?rhY3&<-7^&~Mf=T7{~0&_&V(Z>RGZ(wAZ(`L;_M5D z4~kO5(@KT~D_*R~(#pG%w!5VDo(Q$<_M4ChAa2}01aDkQ^*rRW80g&hQ6s*QlLmf8 zad-cVv?YIslLyt{RlCbQq+mb7Tn9HBW5Q1*KCRVcBpWbzuyiVwc>7YTjM-MzMZLg()EFp^{G=K785BJEI`u+$ zyNVCtMh;>j=EoEVwyE`EHo7p!vLiZddF}w3H=!Fj6=dp#h=)W^UH!}mJW%R=5&uSv z-~Lo~nC7V%^&GJV;{61Y{9u2Q>l1?D^TYVJw<^yqOl3(UWn>`coJbh3G)l_S(vH!f#!{+$tHoZGDD50%l_>-tLa2-;}ZMyI*XPp0MEtv zNs#;r<1e6EY<6gDAD!p@@+PDeKOS`|fZC2xQ%==?Y6|5Ce$QmIBzA(ET-59@xa8@> zVz!{#NFEsdG}phGFa7ERLi2<%W)dR^Tk7^?t6DhlVE0uVloNA~(rW*Hu;;9Q-xb%9 zN~5K9HH)KqN6IjV#G(B*cFnT0@tb<_Zb@|-o z6nnGn%a=6q_iLs9NJpN#T|0Pr>cWa7=ZWEt3n2sr9M?@Nk-4a-}3&A&F z?u${YV?O_*+l%3aYJygz6FG*(e*$}=YX3#O|9(=$mtzj6h9qKdgd8kzbwj_NZ;p|0 zG({kYzPQske*hC)hPAt9pXx~dyRVV?B-KpeVIsa=xp#wg$*?eD=nrw!`^t9T_dO15 z1iKIK49-4-Wf-#T0qP4GW$WThNjVw{E<_|3BghNe{n=5(NOb?d3&fqVv}F^N=Su#C!D5*Ec^kDhwP&3c+n z!TO&E6R6yY4g>&00CU?O71_-8 zUXFExa`lo|sLYa3s1gg7;M0v&_>8H1&_QY242vEVaS1DgDh%Rs+fb&be$vnfpQ_sx5j^> z$KcNMB|{-|3$;5Fc`jqm-UCj!r+9%MU{GR8Ou>NcVd&xpRMVdKFLY`v2(HW8;}YMN zF3j5=AvoA)0hf+(;uk-p6f|zK!Te&&+b(Merl7Uk{W=~KU`tNrV2&eV7;-wroC)pg zfZSC83|~WyM)eZ|NMQ3|_!7%it#g2@Z>iBoC;w@ixg1C2>Y&q~CsNi%6fSXmaBV;1 za}y;P=ILubH_r^ylIaKnKd~j|vn8z@8!e9MN2qYsrhb+lo!yL6KV?QmGTMdnNhA_q zLMIQ1u=%HqF40x7MZ<}gnBO*5#w2z;$`B6&P`whtVX^H|~b^W7KN8euFD{o@HpTtCoWbOjN6vc(M>t@hs% zUcQSkoH&;NM~JyRdw*4e>ya7f%91@Jqg$gx@^9i9v=W9|Oj=s#W)_yvbxZi%wtYjjUTNq z+4|a@qM_^0N~)^>w}-|g%z?PfyP0b~eLzreQpRS?j59UvJdf`iVMHBv$T;)vxGqZ% z4q)p-7`vi=r(tTV5=J=FxX%Qv8Hw1q8@T4CqO;$E%KHeTP;z)moL+7D491!EE|TEs zzyUyGZO&#otS(DgIUBi(#Y*GC5#SU{1*%&@%#tiUAQyz=-J++as5Vq;X4()|6|jNe z*loK1ad+i75m7Z*KNh)Vwg^5ieARMh4dLk>5_vzlZr1^6*Pggp)?MMA879ehwjD|c zm~hKKFdp?2!!OMu$K-LG;2+S;o@olth~#~W9b ze2r?-V;s4{Zrc;CBqHCjXqRnr*fFtVkbOHce zF}%Map5yiKK|$;piUfoym>ZAKYaL0hY!w51Q9lnxs}B}OKywY;{)VgbwA(=@*LR}s z)_1VcH)6w#D6H@VY_H{#v=mCy^4t`GrR1%nG|Bl)>vFylxTu1}PFO!0FFr>l`TMKg zhuYE$dsf8Kkv*QKR4%!=#h;H^^OfSv?0rUrHmT#PBPciU6!_cw!T2B3OX<~#x@^-v z3R&)vqGqQ;<_AQ0lHCG32-&JJq;-Whfh0UmiqikYzB1Z&gx5|kA*O^*>_v`Gm_marb=Oy_C^(A=_tPF)$x*SYM$3I0)P!VpmUwL3t4Tw{0w~zJ1YG zC*m6tgZ?uIaR%Y`g2DR)@EYysAhqXIKDx*-I`Z3Rp(~g4qV`W)n`5?@lD$z$A_ba1 zK3Of~NTmL#O_=-aM_R*?SdqVA)wAoBA@T0B>7PzeY{5&c%|f9Igi&&#Ue2XU9Z^;{ z8<h)-DMsZR;ec8WTS=wU~sF$|8q zL=xtl(hi|23^2IMzjS(Op~jfzC?J@J^dwrKE@u+ALkclD*%udjns)i!EhEc2|mFVc-8Lmo2p;yn$t>-j1Bwe6_?aW8wDpB$DQ1a^`h zOGCdV3|Ae-VL|5wuT6&W>yW?aQtN`t0nDHUwK(U;JfcC?V9W7(-+JSc1xJ?u#4Ce4 zdzP-g#;FP0+NNEoBo2PQ4p}t1ukAg1gs^?H<#_n%R&nC~3NI$NzuSe+yW)-B^p;e7}q?U8!DNj6XxfE<5l$b-9RmhJ9?9&^kpb! z?xRKm4|aw7mT^Rycw!xT;{#rc5sU%PRtM0LbuJQ!#1c=P#z6jX8@c8P{}c8*@RvJ* z7(*?s!`KOjgeRWkHm&mK4dG#-i}I@TmE3?KPAE=~qEK8%!E}4(fn%O@(`}$$eq0_T z)qf(EU|$cj9z*Cup(D0?aCqp)=ur-bVXwmbEKC0STiY~=1fC2?e#N=>DD}kbDPwT8 zdi1#)!j4tz_x=f+9gKsxXSujHg#Y>ielv_8Z(NvI7Qa!%Hcp84_bKadZ4ljkzkDZ$ z#*A=x5A=Qy@@Lh7_{l7w5P~*t9mZ4$dFsjTE8){~247D-K);okI3Y;Q(Df7)IIP+G zwFQEspBuq|btO4BG}R7?994zcjh0}X*(!?p>+8^%HI#51UwRis_8Q2zRlq-mALuxW z05A>&8uL?9{l?()-;C&h-hk3#Q*T9^1jDiuwtS0k=SjRgjqJ=D^Dn=i%in$HU;i3-Q654jHh=vCu%o0V z*~gD};H9)a%(H`ctrq5!i(DqW%r^bsA*{gPA*`tn|z3xvHc5sWzB^-Ir8d93+3E4>R#g(3<%p}Crna^<~A_53{g!zB@i?#8x4+y zXRQCfZ+BRJW`X}@zBo0Rl&BKigh?7QD)!vf>1)e#|DXl;Xg0g!D}M8I>0EZ-DU>YI z?sf|cjl~i_-o9rKkw+B4%5y-3Em!~eIgtB-e9A|8Y?0;cx0+!;DjOCnk?)vEEGLGJ z@*MvtYyPvX=jNmG`MD1uHA;NbCr-~>9^#fG=DIa$s&aGDj=j;j`2+JSgIO73ad}@D zt0|9Vgo)ink>x^ZdZ(p;M7>{jfv>=ua0sgBv{&2~H*x{!I~)!+CFI7m9?R}U`a@0g zv+b@Zam$(MQp)gEp&cZ>!C$W3(DTQKEz}#i8UMM6|8WMmnbXRUyrtdx$jDx;Tkt_G zz9%#(vHIulWP7oN*kV??akaf0-&j zxY-Q$u-sWAyTTc3OaMvRk86bFix(Ir9R4W7l#im zZQ1N?Vvbe{47_;^#C9rUmFn`9>omc&B{Au}bAoykorg5f=6)rfd&D|2B6TA(6W#6{ z)_o@e;AHG7q!O?9__F;&{^1w)gA7^g@;8Z#6$n}RyZMY^k$mD=&rFq`*j(dw-j zN21oQyZh4fG!_@3BXG)(=OW9?mR|X^TtR}ds}^+n^B^%JWUsXNTUJeTKwg3y3`13+ z@f!n#EaxM?a@?{z@qg(p{_`B*)yx|Z?jm@?sD{e{?x@=XjbIOHI@tr7Uq%X;is-`i zPhcFR9JjDGRGXW+{GNS4RaYrq_9}}%_F=kT)Xr13zXhPC&NKZIfj+LFp6pMp7=aeF zJhhK;G=>BJ0_5V_!AWx;4qY@*)0P>STTj1c+dJ?&=@0goG90zlo!3Zu!yk9122Ge- zQ{cl{v}+3xUwg_04!Kq@8VS;=%Wod7jE8kmpV^;fku3hJ)Gz-=3H`mKnY!V}kt#sm zkGchw;W`%57RbKR@52$%2ZTa;|7|H_9f%}&&Fp_ z6mom2mq+zd423=R)A%^_g!YAyW(3AG)dsmeHMuCKS4doYuBWeH*fUtQzN-zryyKYH zy;P$+CP0QC``#dg3tuc)UcGBys6m0&ff7h_;PYU#5n>;tn6^UIF8bPw(;EeE;|ns!JAg0o4oFqy&#~t_w&gMW)jHVUufh%u%>|j>-Q4JMTFE+$L~n zolNJT^p9)@G*NZifp<+Q7}+9%yBH7_|1o0X4_&ec zEKB`G562xbV)uHen|_<*%+EKHNJkc6FVHU^id%cTD7r$&aZOEiIS^^=mA{oxjgcIq zlMO>LWm_Y|{{D7$z#@MbdnzXfln2H2$7dy3lm*H6zr~J_+&mLXrc<8bCK;<5ZlOj! z(IWI$;NY?a98ecmT+sq4R*g#BI8@0q!$7Gv#=lH-A(|jdT6m$!0`nD_>;BZQL_@Lc z*rCq#e=ZNcmA@Y?0`kY?!)tl#^RHk=To2d4!7(mkPSsng33>_XCR(pTYCGU~@PfO& zAl?8f%8#SFQN(%h0N{JoW#>^X0jZ0cynWNW&7kh}b)RNw^O~FtCcM^B*>8UaiFhuT zH)syx8;E6VOunnz$+z$&Kr`cKGkJRMyXL^D!K8_r9}p?$g&lV(kbNF~)%QSe=!!W8 zhF@VJP**;R)U(<1fgXlrP@2*B6iF;B+dNh&`3uDVuiU?jn(_(WO}-Sxas1q_n~Il> z=t+KLhFu}cyop_GDsgTH4WFRjBjsrNRi%w>r+Tf=K8q1te3Ojrcy2|*ShZF{FFI8I zk*q)Bn;42kM{cDOLBh&#b(O(MJZ-Vs9^{-BtIVe0)stRHKn=j)4N^q|M=Aa~*40>w z;SiyqVXs6gp?^K2VB158j!*$z`EvZP(FI+o-^mZSS0X~=Cx#1Cnf-lt{SUvK5nrmo zJ_(D;b%UC=`UO@mjD`@>PT6NfVpUk@hXuFNw;$;Q>QJK zB*Y#>;Ai?Ot@Y1Rh%Hap@Nx#Z8>?e-J)Q-+63bk4RzH8LvOVd+UxK(Yx*nZ`$4;5i z(jE>j5_&az6~0x{Ppki{J^7Ef${NWL%tr5nj<+MF*B~$tI(J9G&`im}sib8}J7Az(2)f0{rodc{2G*S(e=q3I1 z{oXQKjc43V1DkdPyd4W-Iic1%_3u0?PZcGe0bw`D&^^>`BVon+WtGW}=x>*)jUG*d ziX6VvPVd*C6mLca4kVLj zQINy8rAy$JQ1YihGb=BC`0mT$-Ot#*DUAnE@g-#p#)c1%q5iHTL}(^oGb_8*ydIt_ zJvoanl_x><=*TPF06bSV(t*fYN(&17=b2V0okK6uaVTeBJ(Q=}lOW z@eb*qJ-cw_FTEq3nLo+~U?DAI)^eRPlWX8*cKCmInLSmLPiG5Pl!Qo(;@PCW6YGH? zdD#yro+wn1+HyYR12(p}c3s=sqrXXLU}K$735CZsw zb%xlm=}K4B|9X{1a3O)fwwj5u%>DR&VL0IA$ojpfa|Rz=!nMNVGA!hX4*yGGxaFXH zX&H7vr&ZhEj_N!PI=j>V@D}rvpqoYNr@Ybl&Y7$!&Y5kK`~#c9;`Sxn<-tf=j%!Ey zs;cE>YCTX3)Hw~@f4JpY08 zRa#H=SF?{b96vfqvvPyz!OyM0onffLulSaEwmO{T1EO7#vqEqekd{QNM>53vT*~}; z+&HzFY>C?R7k?8U-fc;R!X5sVj|Gvw43MIX`dfN~q|yV53bM7d-g009#xp z-f%k7SdLl@E+5>hJLpfEOsZ-aJR1hw6rjat!8nZ@z-$^XG?IoG1b}$`|G(rdYNN`G z@T?$uYhyzZD$;49#sdk?G)*)9YLqsbeGo|F=P}357!PIf;PG6w+aIjsQXrFPFW@N> z(yL?G!YO8xr28ISi;lX~(_PAPCs=CoYbacv=oetLFQ$?0y+NOYqQa4a3)* zvCVZZZd-%hshUG}0u@70y1eB}$_mn{rq)B(p0Mw2-W`p4kN@+95$O-zlQ|~VgNS-Q zYZ1?g)I}7-{yB8&52VIXd+V;A_OOH~kf%>T^{P?*lHe<_wS)4;(zcvk=xjgk5!}`W zuo-aIo2x9JJD9esg;_zXw%Ky_L5FtT^#J%zR{ z#pR-DKIDu((juxhd^J1}@@K+tAyd_nJ=qf(vdeMB>-bE)%oH&jIB>RNylSJGIbK7# zO2~=fnlh07d0#MURV%|>4vGF}weX3toHFE;6FgLWSJ}4K8`IpE>wKH;g^%eKkoe}j zo&?5TyfZD$72m@^wLtxpelAM$Yd-ZfQ?>@(hL{Px+Tn?tp?Bz955E4(M&rMsH$P)W ztGC|>g!XwnAQwUhdP?uQS}+ScUtQ3jgsVwck6SO2VSi~+THQX>ouYfQtMdXlH0^#s znf4wp(jn$?zhdh5)uAZLZ~KR)S>KS zn$cu$Y*MYJR7;}0!hZ-Cy+IL$02<1?VU#?`>H0q>2LG_T2x_};Q{SwC>3QA;nSB~; zwBO}+(0x0|QPcY2)Alv*Bf8Gg1?m!7yXkG_)pgzPH3$5dKi_v(l;ZtGVE>gK|3)3< z(`d=Nvu-!V>~nrGp$Wti92E|%25eG38xOAHW}mTJC!>oVCPcxY!QiRD?YCv$W*NEm zpVQ2)K#eyT4`krzJz*ZMmsj#F8E$RY#9)MUWghr&*dD!W%&zSi*YgErCbhw>==|0E z6XK_uNc0e}>1PZgw@{d3s(8Lx8+UyeZI zcZ0FV^bP2@#IR|Vn!@)cW5-L>fnqiB@?Y70?^XY4hT4vrBR~Xk1NLeLWjcQxwTKZs ziP$d3GSy?YR5{^~8Hm<)r-IzkM^yYNY4(NT?yZ-J@iW|_bxCo&vjeolw4_|!HE!Sb z*KiDMpYuD*vvQ-9C}`!L*DlH_@Yd^7^hkUyZ4jA-Y4HM$o0PoBfKY{zOwjPY&r>2%9F|kU|K~-l!K%4E)m_Fn@)gz z+{jDISf7-Fa!?iE)&}g|;@20Dpzn#L|JETsnT9KP^qb~~P&(JN-hC|p_tPWT^RdpKlq>5CIsB)V*SJ&G-)W6w%7-#c8%q( z$;(t$875=n^n(cKYifKBmItw@GHj_iLG!2Ul5u5=l6=K69PaG>MGSnA{rrjJz#;QQ zGO6os?Fn!ydV~Bx@W!e!DolG?^SME=on~ho(+k2E9x<=a2_)38!vw~N4tVtwu{>FB zG>x?F0p=oSZQodoP66;VE;R-efu3vcW^?nP#kUIAbhP$eL#lIv!gw(YE<1HKaQ}ir z?ks)(cKU-)Bhc**mJA#QMh99%O!VVl5paC4qK`>hSm787hWQ zS;tn z@rLVpi&`x#!I%^BiR4;BKO!M}xmgtNHe%b{lJ^(E#=_6H^s_rdU4G#sQY0Q+Wwd0yGU?=->p$U4VdGK)i?m45 zLM`zpbj40+5nzbxP&C{`YDFgBI-o6E`yFZg(57ebe@~ z@(T}n&y*Vr+fzg(IOF=Az`7%XPwpDR;hgwsSd3x2HD(dhJ$I`Nun7+ADUo>Wf<-NI z`LnbnME?DU9G48?f$E(IPDTYFEi@69a}u&HXHj0G9T!Gji4peYENKl}Y*$$zROAh3 zYcAK6zZzmM9W45JZ~Z2mQa||~8g$0G80n)3?00Ps6a^QyW}Nkv zp*Icv|8k{P&ML##C)gyQwR){j?$jSpYn`NQ7~Z9PW0Q$1N1;*yrH;lxrV{L z?X0UiTCN@S5Na#-&}dINbjJc+2;2Zxb{r1$a%6B4IP|2+yf^-4>SKAq6@K}07{}%f zy{~z(^L1^N3ZdAVopO$#>UogZ_D7M*R>B>(F4;xWCKh>t@W=y$ge<0Z_@Pe|E3evV z+vrR9Y|!%0;{UEz`xew}I$%^kdtC1svypt(nO8-52?)BLJ8VlwaXGNHEe@B*A*Qku zk_E`Rw1GN`d3^h(KXD0_g49O7zuvCD-~5p*z04-WN3jSH7HoEeU43^?k%q$fNkIJ{ z)y8jCQ`smDG0>tt2QTW?(qqJ$2M|9|Y{ax|Xle5DQRr8`0Dom(LH&;!&lSJzb722^THr|a21`S^r1FsL z1LngTgX!s3p750LoE)-0nq`n3Ga+sEWwOSEy82UFPFsQs<2RmlQm$!l2rKhjeP_plzsge*WwIRO*5+>-^7 zSDTp7)6`_2ZCJph&1fiV`i1XmJ)4#$G%I6?Ny9aGlJ=x;XYUtpxT?bQ6ZLez>-fZ< z?^&O{Wy@`DG}+Lfu79ut+#{;9&*;NB%}TG5rwMYbk=esYR4P`N#)wEey2^q>u=3kJ2@Fp>WsUvC0UWxxIpXGe(&WhW|)%8(`@$q=EG**5G}`>bA}4ZkoR+U-v94CzvuCP*E;L0^Q?8wvG=~e_w~K5&-EGdvc%#Y z_PFaP+WWVJZKnnh+22){H?!mmUHJvs1UXJ8fO_fM*%l#rx-5{cHV?IeCc2;*!!}M?%;{SF6YCiG+QHO>1rDGvi+FtQ>q6JbHv5tTAgR z$7|WrNPcc6q&`dOwmNQ-W#MRoG!66v;KXcO>Ocsjn+`5-IrLO{MGeHifc7X?plN#G z++Y0`I^Q}irX-bw9|6NjMgqm*H$MPYTM;yJFiX@k@t zXQq+djVAUMBPUYcrLWu8oUE~Zda1^YdxIOAA%>^~=SrM*0qx}5?gRjG@xt&RbeKzR zH#+rV4oNsa-l!;k$^c%Ytu1ptLYE5!!%|>5n9zpYU}&d+EVoa?Fwfo_c{EC zST2tCEj4%hdwm{d=06!=?|Cpk4alL|!n)zjpSH9G%(HV0Jl#;gl(@|PfqyI^F|cCY zbK3VYK{ng}9uY@Y<*o@&b!t20b$?z)65!6u z1#y#N@}-WY|3S}>$jP2KgoZB8xR1vUPYecfJe?{gU6Ne?Kdr=^QYZEq${_|=S^|sX z=J0Aw5tB+%K zpUz6Jd9eLHjq^P9ZaTHYsQ9Rm`^fXt!YWOY%2p*<-FZ1`GkB0WH#9X>|7n-WSCl+K z;DgqQn=LHPW-p_zc#EkdUZVtFr9qw$^@>e%zlkhSxI`GrVfi8Uib%)BGJ~U6-gL>| z2ey^G@7K>wGTsKeb{@ZNg0<&hLlT?Su2@SPX-><>i}&#{q>9|siDzvG2=b?Sw$z(w z&hPaHs&Ly!lu=@KIhLu(a!8Nl+4zM*7VM6#Rqki54M{$-M2)r1na?iOa^ZDu|AD2w zs8~s9EN^UgjQkvLQFJ`sC*>x3S~JUz;iOZ8#kszj3sGn`Ql5;W*V7Da+epzqgnt%n z?+BicCLg;sx@EtX!*yBX5_gKlpjYaA2c@=T=TWC_jsQ@U?XyIg)jN6jn=iXg9841? z@R4G^w!_FN$$EmV7taf;8j}!3OTsw)N4>-%C)kH=1^;Iv4_I(2ZAS?qCO)*!WrmI;+WGc|d~?7!F2@@86mfsJ zoXt$T&T(|U{{Ny};zOhoi@!CeZC>^s?c`c)S3ca|d)|is>T%iM`MK_tE{ehr!W;-> zMgI*1zbj7lS=M(PB3t*bNIdy?<&+W9DTuweUBpOg{0;`{1GDHyauCZo|MWdsI*P57 z;PaAFO7m8QNM~a?s6K4lT<-HuIDs5*uJ8jkMhTM>c|_uiwhr^9u9yC8*{w~>vrY1L ziL<7R2$b%$|MhG1^bEa<4IoFyCWx(w4+mug^V;5kM|;lNQFyUFXfLPwF_laUrdQuS<-CaMJ~-1IG9N`h zF~CACb_BwSrNYnzID?QNm;gxvjK^kp-pDbWl#T;f=ae(hl-4^LngTCUC7Hbd4Yk#q z3MI2HHb>lky7LEc0g=chTGm4SF1XoFUBM1|Xf+#DDd=Cp49Y3{@cfGY68cP8UPaUD z@~yXI7qEqc#F7%dv)*>^BN&W@h21E|`lmv_#Ccd}UQm6*T2iwiCl=8mt(~8uy8kfE zuW1+)SC|*o9)Y>bvd4QL&xS;E5L0=nKrQ|Rm{t!8hohf>qo|N2zhq&D(huf>jf))d zB_v)!hwt4AOiECeS-z?XdT6C(G@{%N(!tA`t{+)>mUX6B$|MR2-?PIAsxteJ9XU3vGr7bW6qt5-JN0@(nFDwsxIWfQ zHRdSGrO&@4`w~MEAPjQ8OR0QVo?-EU)QcD^s@=78IDZ2@*Oa#7yRY-ob72)JO=J4g z)pWA17=v^Bsa6_A?1gg}9L9b?uhx59x0A5uJN)EOj@`GT{#f*gTh+g2oDIu)22_jp zpxa-S>+~a^9}Y+ot*fMpE4Q^zZ)^1xt-Z6dx_2==>&R(YjZ|R6IOZd01Hp(G(R&8D z+?z~h8Kv6P)U-aaUs-;&z^o@)!)n_u%z*=Xu^O`%s3F^#kN6ceMpc>fh3B0cg(Hyu ziH+el0tKlb2@-xB=_i%LUc@azdNQ8o_gR?1NUr}8;~1*e<>~P=K6VCzxaJ!ZRW=CQ z=onlA+Pg;yo_>+&4}?2l$P*&*#P^|djldl5o)M`5LWoys3FgDMY#Ddn3HSXli5b^t zu$cZ0`w-Yf?~M;aEQ|JgN5jS5^P07K2w+2j0nZ!q!b>7EsQg0Pk|`l=olQUcdNj5- z9cTji@zGWram(mca_w`CXn-b?xyBdRbT|eG6#so7$M%Cv*|E8ifm6DFFg=WDod%G6 zO-FS&C47s}O50(I`g)_n<=X1qHuM>&=kG|&Ao+3FLaP_SKp$RzQz@CxIQ(&0J@wRO ztAoT4n@RU@=Gv;<)bi3=hyE3g} z7QClgEx_DUKPqW#y?5$->F-2X)G3$R=?t$E(%B6*+0duLuTaRRgoOk8al+!`eGWEBDLckd-m`UG*X1yHVg)G5w3k(Gn9{&< zUPNnlwUg@Oztn$OPL_eq1*m|nU)!#zwB4+ z6ij^uaZ2*TQU~2pn~{RFm=vj#8pKlc@beqGYPkrmZ19rT8gZ{$cLKu1_4(?$5R_zzLpg=YFlm8^pE}Kcymk{ zdWS4g%2f*Jm!0B{%-RqcYwd~WJ6fGEhl@mMwr_bD zC^ac|VPqZM+XSy0J$}Q^;p+7cAFGcGJz7B z2@(4CsqiPH5_M0*rshB}{D*xqEs z{%-uJFE9&Ail!N~4d$ao5*g@GMtjPnYe#=l_pMo^+WPXZt6iM|vTU;-6;gf>J9Le` z(BtiSS)(!6#_04LJV_$$Q8!s_dG33A%o|m_?-_C@?-rpgFR$DImbTFWzQnGrBm(D&k$|R=bbT5oXVR`U)EF?Bdh&{%opYrTZ zo3$8$iz{I$`P@3Y3#S*#gnBQRgjH`oKAQ~%WJH);eg*W~cPd3Q0T;pW8?90#oIKpb zVY$~kti#26%CP@acblEkhce=EohR4cx?41?`b)*yZ{{XJ;=|Xg?$~*fv8}_1XfyXdC{r#-r>67z-Cp^EtyTh<_*=umEG?iYxk=qlqi9HPdrS(q^ zPeMQ6mhOSxbL-e!k?N-$mRSxSZ&~{c<8#Ic`QoMK$_IotrE@ za=0`-+dAyhh|~F_ghv`!@^{<3-pjVCnjZ!c|3|{5{ahLBPsa|=N>2ox5jl>pShk#T zB3}ihD8iTcXa23AUvm%xgDNo9k^(hm%l&J<|6||rUqAfo>ptNwh*IvSlsVw`>LV#{ z`~CHv8vF+gFeDr*+_B5~x-6LU&S#GT#i(kWcqF+0xO1W5#S2`9JNE6XHF*D)WaxBe z&y}*vf6jh!p7IKWIXqvE7p!}q?E`h(kq#e5!8wAJ%Vlu5?fw?hCcDF{7t0AA zKj4eW)ET%V_N4evqVhzDEhs-|lV|%P&THy6eK4widM&lA1qc#$(PmK}XKH7{b$)HU znwz0Jg`TnMCgR{5j3gMAjpUL9U%;Y>Ps9^HQ(Nmk2jXY4VZ`o72X7T1`v?x?@;RW~ z17G+xz5>dsajw9wMSmtgAJbjb^?GDhU~%|hnV~|4ai9w?`HR?6d;jE zIm+Fr*gfS7{U2)3V+%2toO{0}gxloivbz`(9iLSx-l`iswBGkPYfA(#Ahs}ona4Mm z2mgI2bzFo&ud?0wmZvWs%l%TRekigFi^w{e_|#z78wgsZFZM2X?({|cHL=ZMUE1zf z39N^*Vidc3L}_-YT0{N}J%wAi zj&?3ELB(xFEec!yAD#^t^Qj0imDIP8d&xB`KR)!GpbC6>G8*gjBH^s}ify&~#lNon zuhaBDXdAEKQ&fNa3tOyj$onu4#C4@*auIkd;W}P>R3uGrO)~ZhIwy$mW#>|m-;jDy zik%Bo^EVS3iu(_OJ9df?340;iYy*c=jd}qsdIg%ZmP)-=H*YcLL;?pdpvqp(XJle3 z0pip*77qPJ@(&j{J{m{`uQv!`c3L@ph;tFrN0}BA@akr)(_r=sz0cd5-|r~#a>E(~ z6o+V!Q3vk&i=omod4Pi5$H7H z&>_D>eM!@z;E_F!oslOKbgCPAl))5^IoMXiz8p5_; zr`rew+N+vv_seuPuf8JdMgk&0kjgGKl`ehN{_wAC+1HYFpy|YX?BDD_5#+;uT<3Is zN}}W977ok&r;dxIwEDJi6#!2mTxdm=C$;PhWl#2sqBy(>A}(eyhFhNRu$Wlpi^b9{ z_~u|}D&jiYBL$I7xIeF$?E~?fQaAU*E8)w;(6AL{aOGLHBKAN#U$o9}gp#!o)=pMO z{WP7OcnlXWcG=F&zE}WiryJTewZ z4TlccM#G5lZfRjQ-wivNRSTS!5S|8I6u163fZhyMWEe@Z0Dg(!B%(*;I*v*Jo$N*E zwy;p8FSV4k0PTSSY@*Uk|t`gI-Wsm${*|DwKz7I^5 z1{3nq&uj1w$Qm#M!ycjMe}-5-OX3pxNIU|4@MQ`L!fmQgtj@7{T==&*{sWPgHCT~m zR5J5^SM*0(4g9=-+W;t;gQ(_ebPr31WKC)do#r4j`BBS!T4rwi)mpV9v4?V8s}vv3 z6G^<>KSBTgYIr4Nvd-GM5@m7tvtK!{$Enn3N`rGn@(N0Wdc^|QN>Cd4BX`gwQ=bhH z(A62xT~7@&Sz6U3N4=PwMXseS`hdQosgnMgGY$$wrPO7bPz(8UEVIjE{x?lV_u1jO zG~FQPoQzV#hktVr|M%DEoF#@iBH{pVdahj5LjtDeyoVmG9mC<+>`#kp8eDE)?Fq3z!H<2`>1;%vx~Z?=g_P|% zp%-zTMtM!)&8|@#WgPvIivEG1U>xFXrEJTXUCvp}jFyLpMP!Pl@Jl{6G;O1kORL-; z)*aHoBHoGX1FFN`tG4cEkM-=hBXbU{^db>Ovsc&^5sCnUYO#s~xM116wcjb<4C^>V zs_@e*dY69t+u5*Z`be8#c>V)^H|T}(9$rPq!*V|D;aJwe+F~!b@7EwgCIiOxut-Mo5VHCf! zLZ6;mi_)*t56*Z3ZAXhaes!xq?-lRU)g}5RbG9K-*X$a2)Co)332ba%cVOT zP4fvLK{_W(JKp<%?&jF(gp`1^I@*Km)V-VE48JiXkMgg6ZC9N7xi}?{zQGJCUemX+ z*LZ1!S;8hzbnLFMF1%!U*q-}#GWCoS?;nmMf3IvXqzK+G?-9Kl?~*TuwC19!Qq_0D zm4Z#8J~e75X@s(u>k901{`nQ=C?;rxm38f)CK2vW9UH{>p7Jse&;O?`xo?ve1KCJt zCZ+pw#n{Kf(J#+4L}PO|#s}<8Pm8tQG)$xeR2uJpiA~kpk1x*#>weU_-T`W5k>IW2 z;Cq;8n^Uxu#95LJT+Y3912@BK_f2$1lkb6RZB%;GNSQhP{R%h=C-iNoYSgeCke)DD zq>n33H|iP>c97Svw`>@#igHg@l}gz3QnKmRJQPv;6sqAL-GVDhJoxHK0tGMK>Hv}h z%I?%)L-|K$jqik^JdRR%sm7)D@1n{B(>`L0j7vxw+3A40&))@_Z1VHq z*v;)Ju*AB|za*`qy>HlgQ$i6F>i@+fb9G9a3C+ep*6$f>qoevsS4|XLa_#dgjt($j@-0=yKD&qRNMPBulC^{E`7+v4diUb!cLv_DND1VJ+-4y9rq6u)%qlqN ztzgG%CSvO!hid?lsV-xW6m}?`WITLV{o7(5ex23~!qT*-0e(^y*AF)9}Rw zsX4N{Jb0}Je-V^bfF!Wu=2Kk&2qKH;5 z-To!Tbmh)DA}cPkiPw_lf=$A?gle0)XwM(lN5e8}XlF>3XRehIj7L|8Bd<&Bszz}o zG_4OkmacY|;^jK#R&bd3rAkPGov||epg6NijA`VX7}EedwZv8N4)>)a^PA33HEia` zQ0(>ZI{OwQ*0vdenSTS_BER{gUs|NV)ORQ_74 zcdy`w+H299J-+RiGAMBu?Xvh)deGb1nS2Q$=7CMRc~%7#Mw$l*8p*KlYQRekMR$Xu ztZjL+hvYmux5OXZLGMnh@kNW%2u~b%ZdU~8tj_5(Qw}>U%rW9-PElvu)iXZoTVR@gKz` zTU5ox2=9o~drnR3U$CURcfNh$V1;i}=D`FCNQMlr?KEMbMWe@UG)eWJ{oP!2Bn3*lJ4F-Ryv!0ztkGzG-clUH0@)xTmLoWTg-<9^f=C@RaL9f3lHlOG*(Y}*?ghFw<(}ww-4sncTjsh zF@c+Tc$OYrom2Dt^(pp$UBB$(mcGPfF!dPLM7)j!;O;hZFvEyyamhFeop*&Nm!rG zw!i!*F?C@b#)(-R7-W<_=WU*$8tfu_cQYP+ykLWh`2hfMHxV4Ns zqJws3{m5nP*`?cM@%#4DO)ny@CN1`=cdN^uOc%VHv?fDv#(M8Pnakev%tw39Wk()l zcZl~{r>n!Sz11jzOK3dp^-j8cnx_|@r{u0rhxR3%Oud*}aqN71p2~&SMC0J=n6xFi z;m;m7%W#V(|5GRW1B@=TJUv6xnt#1k%~I5ca`fqJD$jE<${s1)>mw^WutHP8BNLyA29ztG}aRnMV}d#s!6JwcnmsHd;nszW#8_zq^jk z>m=pn0^smqmV?YEHXa0*5^RElq&>O=x$kXewWOOh!mO?N+T;6sjg3IGXe=#7a&|!3 zljC>fzPLxoCRz*F9PLJXSLkZ1yiNS*z`j(q0N#lArHz6gVxOlquM(o&V4q)P2H|K4bf;hVZC3Egs`Upj5_ zYrCxdqjO{Wu#1zAex2EmE^H&B!p?@Y0pIk%CVs*c%BN=-8&qo)2V>n-f+x#-m&#{o z+o>kljuCi>)1~rzLL|FzwgqSoHqEL$)CucsQi?nK{6;(MY`u^NTB$JnF(uwQQ|xlb zo9$f}iD{vE#lZP1fT0Gz2ncV8eKGt++AEH>XMz?XU6)S11P`_$VE7InvKfqCPOVRD=Ejq~d4XcS=olV!$HHi|t9Y z=e~#z3t1u=o|cA&8uf6D;CF5p-oBrU9LysaBg`+#dC~~^m>2D$-G@@pBS_6+i##`e zWs?!w(T_U9_Psri47%Vd=f$)0@^upPrLgnQve1!_)(F}>EEO~04JbnU-HY$~3avzH z@{@c3kIx{%1oYS$d+rkGviUkXUc8RY4>SUEYKLkpOTDu9#aT;oTbg0<6bOK#YZOiqs#2WoLNjea=a@&!cX|O# zshr_|YRVI$85Fk6PKGh(bDm$7SlMIr9UGR~*T(pg%JAtMHP*mJI4SIVS{@I6d9fE~ z{oSzt>90+xhu_Ws!~wuDH=TE^TeY7?qf<(@n`?|_oxN!wDMX_m%75rzUj_8xLhoxL z;TY`5K5h3FG;19xolfRqin^}}uY8^bI7p=ICt_1%a(|TA^VEL$n)95MSCGNbCR8;- ztjZu2z$~?!`o4Ql!NI?d^3M!qH%A>kdUWcQ48$_DoAtRiy7t}sGty=k*8iAtUB4JY z!5%0pD-c2mFu``_3;}?{vXB_=f}%R9ox=Ef~Uy;{Qt5#Euq_;;9&60mL+F9IZTQ}5U8hj&h)mL{ddQz)4l@LI-G9P4aIlUohnm zIG5TOO7?XLS}wWzL_Qt3q6MlR4unVd^yKM(|fBb;RG^$ z*Jre&&X^{cMdw*#ZUoG|p?(eZ@{9Y4+(M39Nt=XjJ|-5a|AcuujY%wCDXY7%)iCt{ zOeGDIe&jSCW4}~ieJqB)e%0PJ>QR|Pm8mTGg2EAJgxn9q{MbyP+>r6$0cn~jeai%{ zN;{V(!RJ&R{pUCDNQ8TNQe-811-Z@(-A+AL*z`Gg`d+K9zykt3WIw^sp(Kidx8s9Z zvwQ7`62u0Yy(5;N1jz4ixKG+^cTEl54_VBV6^TcFSA*<0_Zoe=7LDr$5gCd-LK)BG zZold=+P92z1Bn(#2=GygQ(iuk_<~7AJFyt?A+&3oHs}WSNx;aG=2yca7turct*`%v zAg~@(D?ekj2i9mRWD(t|>=iOXo^e0E!Plk#Uh4;Ay=%}kUJ#0DT$fY*k`S!Fs-e9s zv1-`a;i)(+aRf=GUGHoEE4TK4fKhf)VpT0LsC81BAobGxQm=%~r)*RY`#jQ7oZlpS zt8K7l1H<{XZr?J?b85!`$Dj_`y-k0R(=<=fgZ83h^wBMQhPvC@hO)gcM3>QZJ0Kt; z$olIC)3;tQ%xAXjss{$|iMrJ{R3v!@&?~;S^9Pdxeqz`olc?FU!%{NX=wXj3va~56 ziFSQAW^S}nM*EpuSKVdKDgL?`6`@m-6eJEI%6-7BBh4An-L>YXgho`@UP1CxZf(lg z^ntY*Yuo^yl83a6v@1dds>&eIPzTeP02-hz7S__ZmRfOj51Ow%D#UI)!SUgnyB!C1 z>=`okg(mJ9%sVi3>~E$_eFo9E;{M*T?lTU=eNuLsabh|B&maQm7eH98eBdmSFcdiu zo&})LGX$f1C9|MSB{M3njXV1&OsR0X-RDE z&?9s??U%QKtd|&~MV>tYK7-QD`kv)Sk<(?oZP_A@J#I7~!IeUF`U=;`6$j30o4tf_ z41gG8paj1@YKZJ%G}sZt`~_FbVijuKpF42%SY4LKV(-gY@WgdTEm^mb>b ziLe3Pp4{DZf3QgF9LAE>9(5BOzED{py1fMOg?n99D5!h+){TO~H)8nKc%Hj^iU_C) zq%hD=$A+kM$eN!|+fAW;gbFWg1+kLXD+vvWzR8>u^1STS-)+tR1}g(ueNmyTeEXp| zo}cas>6=3vT`QMOJJkZO_j?oET+O|YncX6Nlu2__?dS37^KQr^*~OUY2xX0a>hU7) z!?br8PpLJUOZVx@KtYeKJ7P`fPwbjQ0)*b)@fp3S{#}o9MfXq1p4i*jquwpxgQ7V0 z3Ytj! z*#mpF&J9msyQ*K}p8Iw!aM7q~C=GM;a;m?D8g>9e*1XH|M*SfvnksqY~UYsyCl!2R8QS&zvKn>lJ{iXlO-#`VwH zoBPX}e>8QV6MjceG71fks5J`Kx`hrl!UNRNN?4t~_fyy*Nr?Zjhb(kEVz3AN0E_cT z8?GM(_sG0DQF0|(t%Oil%AH%ke@hU0i_WtoIO|!p=h1cI)l=4p(?k3L(W!AhI?mU!R)147RGSuBroD?FOa zOljw@Do?x^NxZ{;e1tQGuwHlJ+VSZ-AXH4>4`f*6E7+53#V>$3nQBy0w2obL>3d+T zrF5;KpV$tJG{s)H!1#=^1@RO!e46uibaAV`n2hI8OR##8|KOb<)UI#VB51A+B~hCy z1731peNpqV56fhxTF&AXeC9Ip=tlXg-feqhLI$9M)qgk)SG0r`aRYiKF@isdh=O*m zgFkkiQzHs#J`>`T)YfJjZf~IHMlzL1?AsfW^;GFl>;}U5Y8gox} zjt3{YyW+b8y_STf4r~;vMQV=3um6erLim^|#!&w7Ht92*k1oTyk9z8E!D zL)!~HXGXH=vpNL{d*Ejb-P3a3KF7T)xKEYwaIlHQB6^9=FoM9Pe%KJT9aoyw^Vn1v za|=$WK05f`T+zMv)B1xX-rcwxG?WB>$y_>Hr z@{mlmOwhkzMbLCN4nOVw{zh@9iq*ey10qafU4(A80oulJpEaj*SNDS5KXU$Y#Z@A% zFi2i#LC;1cz**g3l8KS=8T7TlZU|rR+{&jVm3SBbMzx2;@#h-yewIGDy@^RX!VAJw zYP|NZWhocal;a~#?l^v1HgQx~4<5W(nCn&iAiX z$6GT1>~X>|3bji)ed4p{PnD$kD)|H&p%Qf^w^&Si%!Bbhpw}*s?!lCwNV-AuF@NoF z_%OeEjE_zz!3lW%ylwxpg8`=*w$+CF{eO8t|I@#9hLC2~8L{?&L-N_1Bg5Y$EG&VV zf&Rgvgqg##Il@svZJjy?3IDI=Cx#Ml1Gzv@0EJbr$ongGEtNsTKMwEQpqsPV-7w+P zQ>cQv{4==7T|I+bLK!DC2tPTYdV(7$X;w0vkb&zA#02yODvW%}v{+XiX5%+s<$tyF zD*S?&=_AIevNG9rs|{dvV@f;e_8~{8A9{x?E*9;z7qh92-KZu6v#B=riv59FzhT;e zxXUiNKKVoK?NU~tf=n=i%#_}eo%MLr*iU}VCxNClf;=yFSxjihyK-_23>04A#8vr^ z_O)}8qr-L))= zhh2)&=#*4)K-1wzEJ+fE+FvGxIO!_R*CM03&$y9HwRdRxS|q$e40TcmXPveJ3!l_I z%h4TcM*@_6pg|9z^cu0g7}|Vv1z|^F(eRuI8iiy207$XZEx7irL6gSqN$o*XfM z6EZ0|jccm^!~HSTZ{=$`FXnJXSk-`qBw=pUc6PFzmiw9FdAk1;j6G&1i|z~Q{#`?v z<`i|j9zB5r5+@jwa85CJW1(f;wt4%uvnYS*S&TFO37vVO7xdBHd`K?*>rVDRN8|6W z)G0uku~$tE68!KRPV_FPW_B9tZ=a!6PZcDfp%(sT@KJ~nnn)sT0X@HDFkysy zN!r?zVDJ!Bu!Ltq7s5YE?Rwnejww>1qn)6nV5QmWX#HEy|DH;S5ve!6J&7|1B9wc| z4#QDCaL{h^7Ihl-A-$*e>Dwt}MSAnWjUbJw1MP0c=~WYcZA&LN&_gXtN|hrL(~8Vu zePwqrL6MVm`3k2;Q^$_r0D`7)d0^Y^OH*5I3A{kQ?P)^nEJj_RE$rbWoz<*|#yTH~j zNa#6~!^*p)oQFbbjzTr3Ca;b(LOg(zVCgLVyMV;oAq_1YFjxvcgV&lqGmc9D-3+M%qLWg z#~wvSb!3^{aG%I?t+>@B?~F)8!rx3aU>y6Ymz=dyYP7fo@Wl?L>&MJS8+lDOV(1py zxv5XXsYuU;uM3|OkLsAU7O-5zPVW$rlZPw%{2fhPHeAau%1!& zr5rJGeh|jCsZZLe=;RhmPkr^ld!u!{bdoe5qZ~o**He2|i{euoIkf-zlQZdGi5RrtOQk)|eX0eu)rLIo8#W zs`Dtj{05iW$+y5CkNF#&U2uO4b1(z`+W>_Vq*IF~iSZ)gnc&6Y?x0EU4Ov$7Rxo{O z*RolaCZ3-Z$kx)J*nwuM`TerlrE5EuEF@A>#CYf>kn$%{Zs$JS?(BF9u@js@O=`m1 z>B8vlg2PG{Tp2>FB4O<}`8Ic?HM^WKs?i$`o^DIE>E>&ln^;;OB}(6W)qcHY%0xWC`7B6Ltk8Z2|^SemI=3lSIIIAy~TPff2Ot-q^v3T&G zQn;?mDz}tjGrM|PKDIG5Y1)tG89yVda&yfa@_FEN*hrjiEDt_)d$)_Iwkwt4qQYQK z{hY|wi0TYJXYz6NgYMvo2Q?oSX7vJ`#&^mld%K2@7%tMCJoMgl6?uV9W%q0WnoECy z4Zrj0H#@MJMnvdQuVlz(Wo1-eams~s)<5!7Oy^HjJ}5Mlw(aY&$nBj!ZYNEwBY>!7 z@wzGseIv=Cy@VebDE$Mad+0|~Rn!F1(_GDgTTjeLW0`WM?|a11aBxyq|3Qv{@rvyB z4$Cc_0VJr{YtKJsv2PEHS|x`uTYE@eh|AJ!xy-rmK>~=L2)cj$=psX%#$UCby83PJ zwpTy;sw80whgr0Rmj~nSNfL{7)9O~Jl4B0#*vl5Wjz#TEer-wFMcJVz5W%7#G&ks{ zPjru%KB=py%@q&!$Gd-xjB5Ss;Hre;Naj}9sSQqq>fg|f zwR{5`e|y+kG-%IhAv_ zUTyd~U1jm%O;;^?x6T)xmRmSxz0Z9YKbQX4TX0i`&Vb8rQTd?j;5%I4$g>2|{ET}* zYOF<-hoY5_3ccm8ZP);7TG8=pO|*FxcnfkDQ{PXq!h~1XWmOwjhEVy?To(@e`(! zzzKfr5c(`o8+oujPDMn0uL<%L z8rbkTSNq)Qh!P3KOK*2>p|@OlzfT%lWW%!0gF9IIHnFxoo-v$L&#kq)=z{on&ht%b z(&r851YeI|q-GmL^qg=?eT_t~bkg%P>7UZldO5a6thrAHvClO_XST_1vvQ#B1eN1J z$L}tucHio=q{d*~{dSY79DV+BW2e|irNS|0JZJ>L8=S_}a(LaRCZ1J-eX;FARn%{# zw>mduv;Nxb{pA5~_CJ0N;veUfWF@wNM4_Xg&NuZ?U+CpTwd5H8S`CIZ3l~fhnYV25 z1*>-g_8j#*<9K=Mbbp&)x13zy&O&=i*m@Q1SBPzB=|)+;n|0h-BY{IQN{jq*(`Lm_ zIwoT&x2r}Ik554(xFFy*qCQJKBg4mU41vRLaJ|4c4LQ~29u^2A`%>w<~x;YM-jj_d=O1un8EtD3{Hpzzs$^kHSwl}9dtPA8{IL@^sOfQ zpARdOu>QzTuTHD~grDQqd(B4`3cTQQjrwG6KB}XeT5Yq{dUhYrD&dq=%OWxQ(_yCq zYc9!k6?r4D6tFoStdOVD?j-nP&ofd-k&Tj-3pJ&A-9+9h1?iUtpPH?XADPf(pbMlb zPu}641MMsHQOfSijoz+p#wThp{SyG8ll+6GL$2;R8g`RcNAn}imnX%$1^U#m^4DDg zATh%=1Wrh8e|BVs^hJuQ?1Efln!eWMrZ#V$&)X2@c-lzd?IMz+tHLqP{F5bx%06vL zxnf2R4i31VZP`FR8h7+n-r5eK3Ryzy>Z#PdtjAb4EUeG!eRl_YyU%Xepy!x7hQ>H8 z>(xuGzC17)QFSRUbjhZKlQtF#H^S0s!nEaCGNih7>T%iLUOCnI^^x+?$Hve^cwT(r z$CSrX(xH@jkj_SD&bc_V=}V5g<;!}p`)$0q3cjqXE#W~Q%d|A-n_tf<%05}qaZFFc z(-GYTOYJh)1INhm=WhRNoI&3n%Y@M{-o!Cp@fN5Q{wxsc(a$NptcfigIJ(3aye-Sf zY0M7-ayn2aM*K>f&a9YBEp3mg6 zZrCsEgDlF&v#kv+rJUy@;)L1bDpV2Z)(NB6h$7^oYRXPKtz?L-C4)vq2I_4Gi2@VgC`AN?yDO@HvK^H zZSpaz>kPLkI_UR0W!YLVN*~F4Tu1poUI4vD1Ue5{QJwZYMZq;UH$|jdBjsbB%OP0Q zg6_+<>G0Qr>@|m-KlrZ`Xf~~nUHfS5&Qr;^Bc?X*Gbuw0TIov-H}o%VY%2POo&Ars z494Wz^8rB4n+;HB&r+Riao?|iE8Y6m_ zB6-xtfry_CUfNU?p{(Qq7~a|V#y0D|6bzPALyb0&5C(f(Yt~5=wTkTOsvR@(1t7he z=OBOO{^TP*qczMw1)RY|a0VpQr~l@C5T`(#-lHZ~@NS=f9*3P!ofZ%_TcG6wBK)5d zXT>qVtI*l7JB`k1lxD&ny*Jit><- z#l-u*-TLp+;xo($P0?mf&ItfJ?I(w9Mv+)w3TM!~^7}l;V!Q?$&+Rc1CUW`Aj)ZWF zDAr|Jo;rsW=$)Hy6?(pI{A(bDpn71KT5`|rO{jUc4{4T%R*&JpUPfTC)3740nN71+ zvrm^$3cRM@m|6epGjw*4Dz*%E6cebm&GR=}jq3DY#9AxWI^DJAR^4`tm8_qhUpDsl zqx_a}@3J84z+<{KV_&>H4vndj?BzrP@Mk$9H0KHOc=(yrf4oszJWralke`S~>GdXyq23 zHC6swI`>SL2qK5#<|?<^LGz9+`-!zvDBsC-Nl9)4=ZSATLbfRV?=Slw?5B_f=KKK8 z9H!h6b_hb&Zro@9B<3&T$R4QW3tK*jzo;jjT?XqF>IN(gi2o*Vpz~|82IY72Sah=g z{pxCK1GkJnhO;H=xkhF`-hKDBr`#dMjDfPnC!>ZJY5W(~5-Ub^^;(dYZSTL7k-xUm z3f}=-INMzWA-GJG1QM$~S|a!knH8^-4NXrCN{g4vL-VG6$CAF378V=tw9MtNugf^2 zFPcT64vET}{je*+0XB{%f+000S=H7HpB>)_a5QRB3H!K`FP1o1>RABC1?a!;ry4{B zM20RbwqexqpNpuIn{oA>(7at+I!@3*3aj9JtDmyph|Aj{Jm$cP5@Dv|dFzljL~+#sBW;6l{^ z7YOweb%GW1EoVapx8r~6JSFg-Kgqi-rY!r<;VK;SOw%_Qw7#zQMiw>e5u~T9ZT>-Y z!}BNRGKaQiJhE85-3VAt)jJT!`X9=l)Bg8o_6b=5vhWxrL~d}|1fR|Fm2FFzLYLCn`2FLyi$FY;N5(kyErlr-LwDTnBJk-EeD_l| zKuD+vR{*i(gVb>J`33jzfWLn?{cq@zbQj@O2{;-OF$u$i`}V0XF!J~4C*-Y=kn9@Y zN5WI)=p0`J|7D*g5eqaFCGwNZBrJ-~q5Z>iwhfUH2bc3_YRxAp9obMj&eML#g3I!W(K;U-1_Qet5yx3aD;%%{!OjK##Wcl|YzAh>QI}U6%3#KU0=sDeU znV6y`Gi{sPc8+fxp8n$?H@f?0fbK(yf4u`fO3ZVB%?*p3aOyKRsla3>U?q3l-D}u# z5OiQ%fgx+u=L%rh!-fQp*tPBN8C%<~Vm_ugS2XjgPb}g-cNRp24iyv$+49^6H$m%xoME#Xcl*5R1)v z5Kwh*wtkPVykM(*SMoylF$l~zO1`oY`t}_Hm52QAU?wj&77nfY+8{6qvPdnlt}(=} zPIk*(5_LhrIdAe#svTDNu^|vSL){c~{Dh`icC#&^EK%Xk77d2#NL)th2; zT$^0xXPg~xhD&;Z*+I6by1iBYT+K^w93P)qMoi>M>&Gz^N@GO|d9u*4*oswvEF5_1 z9BZVw-j8Rm{Z0gAh^HDYaSarJ(t{TfaU^dqjCX}~x_sJI z=@NTe#cXR1drJ6r%G0kzCqzmxw-C+o$q{QD*rS{N*pH7zflEMh$NxDBPvOhq6;AVn za7#$8xm6XsnKhA<`ZO73^m{A0NEddzS`_L`dr^%{`7FThVuu>A` z@Ou45XIkGv>z4gmLmcJ_oCdpF_QGb?wNUQ-R(Y2gKog9Oq|_HHhY1R{+PQS@!sF}w zNuqZ3Lj9!sPQM+%M6QlsLny_fSUW{Cu{zJ*--#$xuT${65B2tb{r5*yA_WB!jRd4& zS^Muof8&I0JU>4_+D>oA7up=MW#G;VW^0aedf@kS$vNpD6G}6Amsq1IY)UK2Lc;P# z1xiLcZ^8C+8=xn~#elmyUOk6Y4^Cj0-bam#LXbc8?W+a&UvXi?kW}g z9J!VYQexG_Aox1PC;Z61!fHr2O5DDi4%h&tN(PgnZ{1_OV&$e9LAA|s%YEN5v-<|$ zTr<1KOMiyw059V`!QBT};0GP?m}sa!h~&7u0AdRY=!^D)*i;u^bSW~uep}^w9W3jZ z?MNalCx=B^{~x}-103u24cmAKC0iNUAtT8MDUWQSWTcH`6d{t3C|PBuVb4-hwzMUw zL{_#UWJTFY)OY@$PN|i;rwK{o&Q=5&LNuj;*^CXV`+)WDs-I-F`2F*QEUWGMD4bPxWxOugWNrX@>&ZsPlyfj~l4ZEK@KHynMj7F&NX!qw?pF5ge zSA!b=oN^L~X|Xk%<};d%u4=k_ouOc{-{#4&@^6n;&)8BdcQDVdf7Bf*xpXiyu6;MX z0zkIniwn<8i)z-QVUs*}Zg)NiV&iF1@u^t`CoV=BGNEDRyrnKwFInyM`!^pU`0osK z95RlX2g)H&IS8ds-qAv{H0-yvY_<2_WOZ6@c{5As^w-HGq6>0c$}-gPfo0>_buY+b zRK~2ZDOtUCF?IXbnR9wY?S`|EU|^0$+GAOH&a9I+3ZU;uZCp%u~u6YRF zi{>8kYtq0$o%qdX-1k(W$S+g9bXfU@;@NvV*U=t+YfEPmVwA&-?hJ2~sP5xp^)bRtvb!QXU$xx0)lk^ZICLnxA9+RP24YrK=f(<`UO+3fA8_N9NTy7MOR=8 z%XAj#F6P7c@brFd>}!M@0%35XUv_v76yzV61Zn!Uace(oqm^V~_HAI6Dx+{y5oN!f z%)s4xoO3dUs<90$y|m(Smhu z%p83N90y^P8rfYf+N=zsjn!vuF{=I2xZ+y}Hq-u%X1R)|214O zA<#z0c?QFV8)IRdP4MK|ofOZFjwBH&0zV1lyll^c5S5=O6=o;toSVSF-9Z@`soJlf zRgef4$LMqhKV>JeDtK~)|HjGvTiBJL-aw8nYH-!%>*sxL@3EGS13N-H7wnMWYDw3% z#M&^V(tqRq`CdQlYi@qJm0$R|*mz5Bd`0)JD~7S_KcYJoc>Mdc)42qv9X%*tSA81T z|G>l0|FDxS6%yBZ=XLiB$1^w@r?W$3G4nh)uM`Y@!_b0n7O;bJCuI_2lGengB<~JO z;{L&6F&6WM@Ctg=9K-cjL!LZI6Z7f%IW;87)&&-Ye1~z$(=zcTfGskRd_|a`0c~U5 zzOo2=UDQ3xD_25xA11_*=of(rTV_R#QO9N z6d%q@am6FeS6ctRVjG&t)jg=mfXy5yMmHFsve60So`OJcq2=QT{A_Zd?jQoCtcBtJA0+FJ$nbK@RyLx&Tf&+6i)&1|pKyuL* z$Fw)t$lL8m&1S1dkW|KdeGgUn)NFo8M5rY>laSvD)%t#~mvj9q^3Ld3!nkVpyOUV0 zmxX~Gpu&MJQaXxaVYm5cTS6lisuDkFzsmmh#x6M%x9^&!c6;_f!mSXE3>EU?ZH>6;`avb~ubXVT+}^1lL2uBt`co@@r<3C|}D#r9Zi_c_5mkA1#P9+)Q%2r}94oj*}27e*=gz%^KI zo7r}s!E09_Pl`sKdH{Ah0NvC$YlXgI2yM3Bj7ip=9nKd4{l4J4lXQRmnp;7RePuXz z%q*+=th1;_p>#{AaL4O06O13(Ieu;bMz*kGwT5e3?M|fl`<-SOkWqP|ThNA=^a!bq zhJxwV&b*b6Ij!_!#OpL7te23OJ#Qe(4r0ywJG+^QAxvXpK4urL+;|J1eK@y57Gm13 zW8)xI=poqseaFcVw-eebLi5hC#K$rGy~3*J(Pmg40A8wJn(?=gGC0D_T`kYm!clNo ze$DgSCxRTq=R?WZimxvFLQtZ6$wMSbT(gh5c6Oz@5Brg`iCmjQ z+vslxcs}V|*oUE1g3EJz_&ChG(9J;0b0p@R?M6`Y5F5l&{0@PHds*hdottYWiD}3v zF=yY)pE{<^u<{80CN43tDb$>y@Sw$RCS(MMPpk_Aqn>|xYt^Tt$&K?%Kn}Vw%h`_gZr46crSf>#h2*vD-Z-2)S!uM6YEu);Z?Nn^2c(CN`Q^xQQ^?ZNQmwobtyC z$tFEz!M}E$XQUrP&0~!6#7-$VLMf^j-3u3uK{Slu*sN-wvWx~*6WIMQP{0J7#sqIT zUqh6)rDJbU!Tl{{D@8M=rasR+AcTlC4T0Ahw?~|*4gY?18Zz81E5@2kkoy$M4q^(D zxZ7JtWPY}W9kmxGHSzvlgZ^9V)vy1#dD}Z-tFzU!N2JI5-zLi6m(v)-`C*v5OKs}$ z>U+xLfx{uN^aD;x5xe!@Nf1&gKOPeMF(7mw?7kOWe;fxRsaB$YOW7Al>8eMZ&L61& z7{3ilx;G3`ej^l&SD5^lR^0PrSbBuuEI+D8G%(F+5B%!5e-N=|WOF#9w9@V8nMKMT zS+`GbK;@ld-+5Z2{^wlt=C`vAM&BoxDd+1BQB{S?wpUMrsIF4QBP>KV@p$}bLz&{S zzN(v!Kj^}{*C1Mv2vBuYVjb;Y@j3VqB}a#Os}o0OasO?U$N<~WMf{a(-lbs=B!+^= z9)$N2sKPz%6Nfy^1q1}T#v-eyuLcesZ_h0}DD1wGo;03BaX)?)TK!_=A@tH40~3S~Y-q0&1i%+6*}k&C;l|#F`4g*7 zq=!+UDT3VX{C=qg+w6ZoXr>hwkGzfpi-xe%;Y2lN@F87Kg2;0b1|MBQz~GWw&DMl~ z#2$-d;S7m>&Z?yaF=-qs!GF~=??&6wj+F5;BK%9Veua7{yUXA(1?mv+u34f()x&Y&dMY)TkJgVW@c+ zB~?}pN}2;S-)kiKKgLSvW=p%rGM`Jvs=v0oQc=`tNFqK6TP}1)zfHXz+d;U+@MDaV z&+gS%I10_%Zu!Q+^6KpIo5H2;UixOty*aF(1aqFLsX4YQx(9_u#~MCV_8NR`w1N@k zm8|WahwmnBDq}*Jgv8eJ33WZAnrr>=OlGYK(VzJz$XI%S6cZ)qIogF&;XO#!Rl7Rv z;mDVY4lk%V(<^BD2naKPb-P6#(*M-^gJgjnRQE&F^E8~SKHrYn^}?^Pjj$s5Pz7<{ zO>4KSOH@3D_&=u$#vimJIn96Pvvt`mID~*N2DrZH=~RQ`hoVht7jUpRUArnN;;5K8 z4gS1ggzu2qcBNMBm{mL~id3%#HeI_LaFjjw-Y|p2#~L!%zS22U#0+q()K1~Tj28guB542-1C-@h^boZz-5r``?z z&XL)iksws9BC?(>5 zK9K)FvV}E5ORG7&yOfklQ1LCEk;D;IvY+g#uO(TuMt9ZIMh^dCs3zfI`glPjOEU%fy6+=+5x9S@4^JXza!JG!pP9csZ7@ki5X)2Nn} zF76#4`;R|h*M$;|hKA<0MPAwGEAWm(hfxvU_KSxfu|Sws=wkAAc%*c6kLewkt78tw zCDI(%hfFoxbSyG?a(J)K__5Dz(g+z(u9fre*tyqF!e_)Zwu6*374x8?<~WhY2-QAZ z^3S!lu=GmfNsxHH1>l3)`RzuIzf;L1PmoOuo9wGE6IJ1(_&9?H@w$9WEg>RA zW#)ilfMLtb0DCMaRi0?d%pD0M6L*y+vN8*vCbPaDox3=z%HMYg?a*a;I1WJ3bL6J( z#zKh582L9RSe&Ox1v=v^nTtDz3gN)LV~5ag1HSz*GR}PvIi4^@Ky|Sg$TxO&q?L{Vt!K`p1VR3777s`rqBRnJcAG zVSv0R115RnHM|3@?* zH2$Pjp8s!jZmu7J7st72#y5D2T~5d3S0J%3FN#Hs5bq9~N_@MbjoWZ4PP4^JE!l}~ zviJNw!hh=DyKGK47eZ8A*ijfh9*bGK&kN&s0g4qbzOH|SVbucykNcUT7G{b3>r=q& z0blGU77(^;(T9FyIrcOINLZPDr$00&-u!2|>zBg-0>rHxsfoWrP6G|B8=ElCQ~H3{ z&mX7cnil6t6d-Aa?ZVh(o!sVsTn*l&e=f42ple(B|GKI2Yo$otitf9)xQrrjS085; zHE2OM5o;Y2GdHizsk--{3Z@&(N%xM~V;=wh3LHZ&>?K$q=$f=b&<;?y?FWkVH3Eq+ zgf4wSL-;+5C3&WSO0PJ#7Xk^O5%Z(Z zm;#bd%@x^sVdu*EBjOF%CIS%J37F5;uG{|i#R?ZG?G8A6^w#(^vh8Y9=>CB(zXz}e3*Xt9-dJL8B{L5d{_-b81XZzkPM5@u z(^`}y`~O^LHxZBazB;!5-hfOd@MW)<|^n8hfoiC=%ZP-bouf- z(47AI*wO98%Ye{e08EIsi4d`*tDw%81^6U>->&HK`-yyAT7Kdu^GeFU*6>UKv8rMQ z=78+AkGkQQLs3&`^^CTxX7d<>96eTMVkz>W$q+BN749Qu4x;- zYRaQ==PCJu{^}}|gG-S+VeHu>D0I3JPy$83{zt>yY`r^5Lh{1?42~{EEWiW>Zx}$Y zBAN`K7!3v{i6{Ce{#h{_81UeQH(&WLPE`7d=4eOB*wZEa%Xk!r(Ww62mvAB{ zc8|*=WAzYo#m}ClvlS7;gBLW8qgBL%!+> z!cv+S?erf-Wyf0P&Jp4Nak6)5QGxbHfYQgt;rWK+8*#j&(1GoPos8EiE(zrDDSixF zi58%(ZPK}TGW`BOey<|Z4>1?8%CXDWv}7yj8#?0+#?Ze* z^@*e9r?cAbg@;c$6+1OS@L4(Jqm{f#(z4!w$geo^O53-OO~m|MUtLHG1D?AgOGAu0_wsCPBe z`RJqWYX^VxQ<(!PPQM87-}1ME@k)QdM=)C~0tXY$mc^p5fvt_M!PYAHbsVKh6Tleo zFk&E!9TDB&M@B_WoqkI3|GL?CtVMP*B11|2=kffyqf!kT0(uZ?M>=!2N75p<3(zIU zn!H~hZY|^j+!c4gr+iFPOb@6vVlSQ)_eHj20KXPbPT;3ANBRH$Y=Fvagxe7MVOi$4 z;ZK74jM%$y%rls2ZP+hGjDUDANvw2iWE_}!CUkUkS2uYV>$`Y=abNjo%$y|{41J0J zKBbAT{>i32FJ;MJ9#DKjF2Hb+$}ZzmZOPWkG6r`m2b+DU?tTW}dfkOYZ{|WNBsoxg zxydDBsTE;hhTZiF&EF5V28Yu3Z#;g33v+q@k!Or1w) zfvk=Ez+#0b1amm>6H#g-!o8S%^?$LSE^Xpb{0|S45)&e^-u>Z1QLK8iWi z@#_RTF?;~kvL88t4&ym`z*PymXyUd5=h8v{?}F`*ejb$&OMe1$(THRL8x!I1oSH!* zNN!uv^;2xqJcqT@?N9gdP|+6z{pH(u~Yf((}50KXFH{{ zoaVVJND!vc3CYL^V7W;k1p2Gt}oTsMx zY|r@bZO}<|f5Yb;FRusZn`kg;oXFCNKU14jVSA=&EzhMN30tAO%8E3kbZDsE*1o(T z3Jkd`VUbHw8$Tgx=f?m6N2%rf+j}Q0VSXV@YTbIU~7ZZlErm zWw>uLMyQsM@d!z^@ty3ATE{cQL`UbM5=qd;5Eg>TYB9m9{tA3v{wO(6fevOS>Otd= znDjnHo%&baM;sKvfqrGl3=;eZ>WH*fftMRkf|aFIX{tE*q;kv<%$b`9S2apB{fsF! ziY^bln8+O-W&8cD#wFgRC)!^Y9?Wbj?rfsJ%Xo=7!sa{L%#~C-hn2Y>W^MA7usQFk zQhCjT!Kgj>I8HZMCdCPA&^}^dNe)1^R@#YZ{k>iCjnAKRcrjYfZ6$Nnpyh$%z@rTZ z7(yL^!M?Q56D61h{z@F%U3C5P0_eZ3S2T)MKH0$_F6srF-*d4ew)|PChc;V(9G~qe ze|x^zES-P1{%&sxU0%tZ5zjAPwKy)7w65DEme)S>{>M;*_@q&Wt2*Oma$>DGcs&o+ z-Xiqt=h6y*CntNzF%bla_x_V$;W8~9)rnwwQewdP?{f>j;HH(wU`q`$e9-}!tfuab zUmiB#!%oG1YL++P!+-6P>i3xvv#i55`y-HM`=}GM9t4>W5mcaC7u*I`V#S=$irLoh z;wO}kiuJhuwc}ZH*{j@h0-veN3rnW3+h}zc9YPl<|HWLtntnmkYwrDR_t#v$(>5rv zj&Dr4$m{EeNa?C~lXjUQdK;f-79bDDw7KZaXPW4N@e^%PY8fGu|DGfOa%TBPVI{`} zt2yl9YPMMq0xQ4)Ssg3a|HR|tLPkg4%Ro32B98VMrJ!*P!l~NYoQiua!P$P}<4gfX zgok~8=FC@Lz#_&m#)1{2)>Um!spT&H+(iGxJEN_qa$ghY(<*?23`3&&x08Rqcz=>s z*SPS=cU@)?VdbUb`fmiH%_6h?f<-7<=xWCZ zaJ~I9Tm1em22woSxUpfA+t-M9LqkJZnRk+6Ki?5M`EgXychvr7`oPnY?U1C&`0y-S z?kQi*b5wZa@tKM&7D^VE6_gGs?~XqbxlI@B_un5)4NLGc2~%^sjB-HwsN{;F)~HLk z`AkTF3O}1y`)#uX{UL1j9$3++4JRGG4jGWr#7bX$LDxvT*}!`FE%)%hw+UPbxv6A^5D=e@k!kaqsWXd6sY zZ)v)*aJ@oZ8>o=h%lV&omE8+!y1SUKFn=8NhsQpE9Wf(%v{@p)?k6!LTXxBrJ{ffC z6eDt6k0?IStTHd{y?Sxk&C51i>)N{M?85GyHPiK`^?ac%wtg$!!#j6_oRU_Jj|oTl zbJ5MqbB`@~rf41Et!T1~q**FR%JBDic`kD0;zRq_pUfwyP!AnJN0iVSWN0=ljb+DC z`4cwYKrQ7z&kq?a+@!xJ^9_^C<$~fnt{W(y_`J8!YivL-Gqm)lVCe{-Azx)5lI6B1 zz0SoEls_|%Yi?}O2#D~#V7{#`LOAW(eNUE`%*7niyXAdk!2K=u{Z?Fh&?%s<>zilt z@^+vZU9BAZXYAAXy#@p)u24O>n}2y!Gb5jl6yPUcOZoJUx)zzF`JbQC4J6&$8?4KN zp;l-9Sv#p4S%re=>!;=j&ydGl8jluNQ+Wu*P-M@Gh;#+x*>Mmw;0=T;Bb zT-!bHf!d^L;MpVS)L1`!UH?+0;&ydBWhOl3X=)orL1JP4=jXAQ3vw!0k`ZqCaAdsu z2*Wf3a@%LtwQ_ST-WioH#p>iqAIjb@6{%wk?^YE@@ip5g(wpA(GgC{P^z7J0E5{OE@caE@xo8xA|{z2QW?hwNQljFG^5G(0Ix>t-w`t}v=O1m^0P;R=Gq5EFXn zw`ZRJDe_E0pRE=Ho$_HA5xqF(P{zw4(a>Go1~x=+=`81Y)L z_1Gj5bsnd}Z@^-;b4&`c`i-!k{#>Aq<=38W){kBTK>&GEwdZakM|wrGk*5-c25#~_0`!e#h+bh;u_&*DgJr) zoIakmF>4onY!}(Fn4?p3T#tuo5Y2-zLxT1Wx}zgC!|>6i?T&{)-42szo6%!)BzI~q z)uCYtzKo4iC$xk5f4pD1b(A}{bbnNZao>X-6|*}*;hscncr7AdVs2& zRPpT?2yI9T`()@7M;?8DV)*bUG^EuPl-C8MuWS$)IZu8_&%FP;f9`F-rq|`%>oW?* zmg)Mb6*ennmKB5aRq^)Vsx$j^TYnyn;rROg{8bOF(u=sZBzaTLzoI8Ir5#HNS}Dj; zL0=-oEPGyYD;%B#Nc|4UY_T@YVkn|u73jCeTMfBZCF6k{hDtmna5)|2`VHxhwi=%< zEd2;@A&vR0?h`E9vb_4ki5!C)81|}&P|<5rB+5UfZHZHKIvkkGGHzIVW|U<-q-Wlw zMG>k(qkH{H-k{wcnydrUQrP_Iz7y{*k?XVeu(${lr<7--NWq^)_WKvIF0%zRXXq-s zT+1&wbn*yBoB`3uSCCkYK%~nQp>_#FwVQ>sQJ;XJ#c6R;{ysmQr5p2g*B=p0-$48@ zUKR)cD7Kf_@R$+qHzXN4jjI)6W~M6te229-wl2huJZ)dYJlhi2VyaX~nBXy4#XCS> zKMR;QC9=;o@rmZ>@|RNbH|Ugt@OaejC2C_uU#bR$DoloU zo!n_5x^TVZQhMeWmk!vb`)c2|fJw67c@aw1Go={ZT7<#S>BlSTl!x}dff@CT^VRqH z_8GNXR|n`0nUFLE)ae0bza)JooOY|p8P5R%KA_L7$$1JeNtFifk!2^W;%{nFI~CQ< zt{Np>J2t=^Nvq<1=Xlv0cRX#7%uA)jt%8id{E9Km!z9mVNU3%Byod8FlW+8iEv!uD zHU5A$APsd!$Fb>!5R_5a5+k7P0-F%pWVqy4G*$QG??P59fO{Ydz`qx<{KucQJ z-+f1d(S6zWn<2!4Aqi5}Ye&C}6=*M?lxx@;E%FLFDNR=UL&3|+KHXju;zw7KTnbTg ztxEh!!gvFD-{)i#-5S5PWBw zRIK7-Q>vFl?2hvpB^iw-%+y%51I)kKtC=3!C-X!^b=14qbQkGNpx@?Jb+o7-|uV$6DV{;0|!|RS=;P&3k3&$W|&Gj!6)aVqQ44N{vYX z`OXvAPcY%02^NWxzA8PN24TlQ-WO2Gb-*s$AJ${+A3|;fhjL0EJ~+g=cCW>~1Yy!O zeHOZ1RA0|IA($@(;JrT^*B7&HAxr8 zG6;2fAO=5}XHYRBFmq)iQF`nZ9J!-vKT#yGo~0C%7;};G2Ww-axgx#j!rw)@kRHQ5 z3_%M1tj)`fAzD#Q1u^9C5!1yi&V`+_Y`xmo4mVLLH*DX{Fjjr=`TlETR{g8ubU02} z4i&h%i#{mGw0${|4K+lRa7g4m$BsCZBcD&29wHuJ@C6F4CWdoPfXA*^;}0-zt$f`| zP9=b|oP;?tjT}}y3KsWcB+NqjdD-h7L;Y>m-0a#x+{|Q|p5x!4x|yw%KMi=aluB!C zZ{?+>GWTKHt9#KZb}^YW62=IfRLHzpJ9m-12U3HG(PtnWDI4m(>e2EO7e=2^@$nm= zJ0Vh&reMQem<@UYFjhURw=u$lNT~#hNuMEdJ2PD{)*CU%`nj&}Zt#=x&&7`b8Y~HN zP&6>UDP@r>;AQW7{-tX5#xqXW&(M{eLwq@UZ$~sX{eMz20Z+OF$Yf9d`~k{Dfn*m7 z%`w%gEYfT;hp7khRK?|CfHB|VyFt&Egbpku_jH3!PO za8gZ_;j65Z+oyZMV#v46T7l!je}=8JDyEaS7&5=8_r#*Og) zlr(g7l-+Apd5UFK=&6G1!X&s83wNHO=(yhc{?ylf>uYeOL-iVaec%r5N-9Nx{fCBY7 zWOQ71q1u&+LKb4w)EhJ!g?2gt%pQjl&jVQY6K_{*wxp8nmpN zK;)+}o5a1<92ic%V7ao@a?dkGo0pLw(Tv60`lP?&W+uN# z!pR*c&<-e)>GbltqeRZ?MSEJEy{29zNGF3EZ^e#PK!)kbZbtiEIT;p8RCb(+Om~C|15iRkSPM3Ps;hlRYIR45wKzUq$A3O6C+|2XR z^Cjfr{{pH9{oP~G~RnA@D!wqXfk1QwWm>xKw zFKVzMGjd&7v9UU7&VbBquSVVM@+af|^GoU$ze_0?;_CxEE#S4Bo2dDFG>m{lp15aq zt}=)`!Hy-!K$Mxn;pbxYu@#9fbjsDs@uE+qk3%pFvXAzcW4P=|bfIjM7 z7!q=Xzj$n724<`*={)Bq0eZa>bh@88dc36xaR~hNlpt-M>YQtztsj@>Y)%ssV053n z@OI1pSisi06dcdNkq7C1!yqE7KShQl9SqtD`hondZ%mtK1Wu-e1P(F0 zdM7DTIM%N*R>f)MVYgNjh^xzqJ3Fq0QdQmmx@GGz-0A@qa{68gM`1mZTB=BxHiuzH zFb?*1!F2;x$beS%<)YWE#ZjGe!*`1`KL_g>#9DfFvr~Up8v#Q8*ek5pFFjwi@f&QJ zQ@w3Zz4(JNa8i*Jv>F_?#77&g)X7H%)GS^0z{sfEk>|EtDBG40&sWJJdaS&)Vbq<} zOsZYSO&=^SuRw~ZyZlSrbyvC$x5)bLq!-QuJc#r^jur*iYCUEiS~Ep$EcAOc+etn~ zSfa_oWWgz(N-_PSY&jv6#bC-epE;Rat9|#UMwO zsT*}hYYyb{`&ynWUg`B(6bg5N%W-5zsr|+rqH|bx>=PR=kGh8fsFA7`sFQY%){PWM+llX~%osAD?4c|pf`3m7JuE8kH*aZwk>6GWn;z(TAu{LmRu5n@>| z-lt}G5_aw^U?t9#6agamKp$#^?hMqxiflp&`-qf2(0uQMl#;SI93SLhR(oWQ=qJXi z25KT}<_eM1VArI=n&u#d%y*xc!OW#Ev4v&Jr)o8rxc0pij!;b-e#3cwp=xH{K!pJy zhgTL`4HRIk-NCN~Zv95>?RRpW!1*N234ASwr|enpLSJ9J_ik;3*Amx;U4NeF4}n@_ z6o5LA2b>>1LSR`;LFM&q&a_DniQ#z`8k-R?^TU=77kGI9DP@p@n*-Kb05J;)aF2279&v3$-0+uz0SXMs|Ub?4c$e}LK<*P_0e{XPuqi5BW0fRVE_4D6#;{X_Z- zn^Ita-o-l(y-XhGhfmAG5~W@x>3uVx+xTY_Zl%W*v{S(N+frQCMfgt^#&@>?YO)7EK(0;_jt}))!?pSh8#e+L2O2_Xk?K)InORNZTpMa2a!Po=hU&QHh zfP%Qr#urU)J*#+QtsahjMTgDikA6DH_E%Ox3Z!sQ$cuS#ptV2G054g;*r@4Jw_+ZW zdn6b05Mdz=VN7{L>v4R!khTQ zwNXJyG-ubJghwfXJd#`OzXj?Y#+!~!+m`5yM=j=;K3gf;ex%0q>)q=P}ReH~?v=G}5hfK@k>w>J}({_1o zF;P}UG5<_%G5cA(fbw99^HQ>hGqo2t+)+^%ocY*o7gox4qcLX72Xzy?of{!MbnAWj zp)Xd?@ssl z>v#9vqx%3FoG{#8FDj0!VPnrxArf5TX9XLfcWC<5)F6rC7Rhf77+C!=gmE=e(>9Ki z`3iTBG{3pUn22$yNoFCKWxHyI;*|BKkAe}N0@nI@&sJQKfwkIlTv?;#_(={XNfQ}I8 ze3Qs%5GiW~{jSx)?5GK}CG=NXcc~$_!!OdtX#uwvZyC>hOC&{(BbxN;UorQIGiOk8 z=ZzK2BMYZkJH6-4G{ZagJY!U5@`?`}(ZtYVdY7iPl#}A!=0mUePZOzdaw<~y#V_m< zsf9}!$ZcM4MnLw!!=1>s+V=x6+i13W&ygdweaJ3Yitad#zLt3ssoMu*wKyeLA=_xE zE$;?7`m5{ZIh6l~gnnUu~!PUeAte-$t=TXEev9L1RP z#QCVGRcjaxo4l)p4qxW@aqQjN^z=(=E?pF1=ojrpNnGwxY!IKg z@kE;CVp=_Kd&^wfCmnO^3b5Fbv3;=IhjA2CGvM#F-Ks%8)Ic$zHw3D|>mlvJ zr+14RX(TW3{2!1PkiQkNEJ2{;R?3JRq}w&(y=`4)ft+l*)1J=bKQg@ z1DhJ8*%nX-0eiX>gXdHPn*)4!`Z&GS<(i&aXBy#5f0Ai@IC{1wqmU(-LI&;RlU}O8kQ7k1#Py+U~ zfDa*jB*P0pD#dHr>xMYy(wwqs7o)=uF~3vyx#Z1H_z3L=5%sd;6(TtbDB|EzkYwkhe7tW5iNhwQZ`Ro{1R zUEEnW=qemDrf` zcvhkxirQ5NTT70!cGy{ISAAm2qIv)2q3tX~6iQm^#W2=t!OW$6Ok@+YBJUN2 zTfWz6`}+WI>a;8CAK5k~Hxjo08)$$iE5E8Ha&Vq;EMN(~G>dH_Z!EUbRYTnDy zZdy1ClIblsD%e(CCCFr|EZXxIXjp0WKri9N9JaSLzK?mijfl-Yr{OoC)1+U7%J>J@ zTj_KcJCSNJ^$aLf^mNVel`aq4Mn02ig!Q-p3FKj25lj_8gwuXadEssxajPCLeJG*;^ zEo9mRh3Dv0l7i|Fug^Ow6dT?qU?#<<$OR+_hj~OPx?Qr;Wpe|dE!ukY9_m^?h3J<5 zlFw(N@d6Rw$Rq*3R43#OGh1T^QV@yRI5qq>3V3}4^f$gSednX2?^J3EOqXv) z{9n?k@cSDzORtb#rW>3XxLRGmtR@^95&eszj7KI>6@08k^fD+^snJ}9D!iNd^sbCx zm)DVk&rqE@OrVE4v0-yO*V1ZAmR#ZCCDNV&Q^l-S5U16Kvw0`v#}+jkFUA@=5+hN5 zrW_aW5%-w2-9Z#|Yh6*^V}`MNt$_&}Fddvmbld!NPEFAIUu*(5Y@GvRr)b7uPxbFG zT7Pw2vl54-=&oB*XU>@3G9N($UvQQ^{7B1}xD(eR&!jJ;-F|fC{$v6>HhekKQ&6+{ z7C0af*BOeHe-gDg0n8DJ%{aU+;wMkK4jjl-N+>;@FQT$nKV%X3Cc>CFm6HFpZOKWb znw4efqrUIG2#k1xaWm}Os)nAy7o<+_B1>z-R)RD_XHZp-!f(U+SG!)OP%1`5DFjnh4dUzmf}GdLr}(Af!)liU;ZJDqgAI5=%Q2atY^mDsE$rbR*ywZjM$OHK=vT~W z5O^Hkor{t`dYUjjd4$Z|d_F;HS3W@Nuv}iOpv$wZAFgccUcjc9=z%s~`5F~zrZ#a$ z9&_iiLr;2=Bv$ozp zpRbN<;ZeHVB^MSti+7T0u;yytT1NME`wXiWV0G*x)&MfL&)^D1`K=QcFPd){pB3*= zW$z{`gvZER+}_HOHayUlG*GmUmy=Q#S^B9EaYia?T`gvmar?$>0HOnPx}^vBYq+v!i(j9I|8 z5%u48X|?&u2GPvus3HF)d@F&uz~(;qUNuiLo93lui-+D*9lrn_QfHrS`GJA}`##<9 z4B%uRt76%525{!nc9v^6Y1fm3+Blkhel_a_nn+2W-SnmpTg390J$(goMz1pvk(sUB z>r^iw2i7lMSK}Km?@+cjWIy!0-MhZ*sz~t#pHK9Bf!!&`*Qmm{RXx|)RVQuw4x~l% z{3r_Z{MTotXfJ^q8|)M$>)>3-KG5adQSzbj2Smx3!2J$Vo`*vOO@r7j7F3?9Jzp<; zmD^ma9SukT1BOG|gC0Jh@^+BFzqnLS(~YK;-_i#`yku-_IUEw!$gK@gmfcuUeD%tj zqcO%AJH{gtxEEg=c1jm@b=j(=X9-#Q`-k6*LVN|Yi~ilR@0@39TV4iR#-%t1=QFiTJ>@9qqe}HHz1H z1Tpe7UE8{1+kp=N@O?3e4e6m5rlEv9l7q&@`|_Gdv$z>&+jQAW%f>oGfBx(=^-6j! zL4WwzVPd8qNqKJ}xb1$gL|#?R@Wk$a+7~3+7GdWcGs4Wfe%3LE7Lg{6*0>Hw$OqIT zEM?)Nw=V=oC)pg^pJ~5yAyx})CxNpPEWD!0*kU;s*XUTB+UXxSKOafmpjw?;@e4-v zC#@dENjI?vM=yr9^h&C*XLdzC&()AR$nY#Tz5ju6jY+j8-6@4ebJ&}0k%v_H z+Rrb50>#2vJ^P<<{QRk=7+u~}Y-e0*n=J4FW3!B)$!*bcs$y75GuZ(+A!0i^JUrZtqAKa ze)NkhK`BTSCaPe~a!8m8B*n8(u&v&)4{^J>qm4@F676qL`Uwjjn-1J}QDDN`gsE(M ztE;S(s0y94ijs!g+ooGs(F;G6g5(R&0QVl0$Dq9(s(VKLWvwIkMm*Qx6g*iV+wi<-{SrkT&*nFoYQ43;xj<-|J)3`7o>(zmJC0CF zbI7y|Gbc)J7t*l5vSAlC*iaJ;yzc}3F}%9ous)B9RP3~#lf^)<-0P>=`PM4ioDh~2 z*?M`|UB{esi%&hL4J^%K7_hST-8;5g-~Mg=Kt#^I2iga}_Z~LVbQ&J)NRW5fapX(H zkCw|029^CHdeNSYFV=1*wb(`*Od?#0Hp**Q7V8}~X0>J05uaQ0D}s;mP!5L%7aD^l zag@P!d)ocHnK#?ypDNF^evKF5)?Hk;U8LZCWsJazCeiF=J`<*?vY|*}wJN;F8n3Jebr4;uaH0vL$`4 zk-y>zyit_#dC`+2?N@>uP_U@$9Fcs)aJx(~=4rNTr0udEud=}|){&dtQ>rvYh5bhz zUrVJ#_FSx<&@7wD{dAoAum6~_rl`XdU`yTsnRjb5#UZ|+uuT!@_XfZRJ zBl{JFAak*N87Y{gEC8_rSGOGwvt}kLd%DFeQinx=kM`-h;P<-#+(RIwtX~|!9QeHp zstEMbHEa!Qew=iDW>Ac&0bX`v1tNTeZ?Rm z10x0LkD4!aE)g%SYa5jX3(G!g8M|A)eYBd{io+kT`A+wrt6g}dUCdM@y|PP{4_R7z zUo4NR?zgt&CRz#Ohw_D-8*6N&4#SBYiw%Rl2uSNw;`9EN#?*yCMJ{6zh~y|XnYjg( zczg!ya9kdt*@WpxbT=b@c|5y1VdaqWQG}^*p1T2?mU>r#XCPOBlxr;8IxoqdI_Bon zC2{@F16J*S^sDYC=Q0aiqv4FwY_AYvWz@_y*b13D(X$s_2ap7ytLk#OUagxz`2e5h z>#f~&CR5U&H;*k;BS>ZO>;Wl3_licadYY^(%X>PsVFsqTv_yZR#vvwPjq?K=XbA92 zTb-JPnIUHN+qziy!H41H8?#5hqOVdi8LWZLmW3RFHF#Gy?t-3(v&_LTSLMzy}Y;K$Yi*&L34 z)(PLYzcSIQbe2K-41#V)1n3$vlYO~k6mQN16dipRr^Js7tXR^vSG}H(P?Ki(!X8^7 z)M4E|^Is{IKny*zMO5z7jxHier7l!=1&Rf=OGHV>!+Dko;h1kqPM<5OM+zm!)qM8Q zF$Y2YeN+C^4)Tq6;N4v>4Mo+vy8KlLP@{KcnkZ9O^}S*aS8&M!)4^E&vQcgi8WZ;blm_`P( zzk|TKt#;`xUqWvMP2akpD@3lmXCYT6Z(*B3(GNSJL)up7?!z&Kep6cKZ2xjXP6C4c zCM>n2Av?|vy`j6%^C3IZn;*XWI@NzMUQuZgs5j6}G>X1stpRX4^jyHf9SQ+Rv{dmB zEuJ^!Z@SSXNfZbiddX96NX{B|BF%oJQXM56bTgH)lRqcD?RPf9EavCb1K)%#yl1X2 zkl2ojlv=CYaS+{>8O482ehr7q(Qp?PSS$&(e*~I5V!XwL&7-|nI{(tIIwwHXA1Gtm zaYZ*VCU=_?Y|T&ap@b)Tk(-AGrw71?(ufT{fq>k@b{s< z_{$w(a);xV5U-GVsN2wCY`Mj{^eaHmbferMyZSxRH|&wu?@;s3t6%8G;EK`u26h>< zJ;C4!V9abyG5y}zsT#N@erTL8rDn8yH zL-?q)dH!w;{exCf5>65F0JJ>T{f-6@iOx@1mx*?H+o!n7$KD?d+Kt0h<-Ig{4L{1hi+iHLLZUji4AMQ@#*Er7YuSN zej_oxosN^N*|(haq^A?gVQsfBo46u}=sd<7386=(1I?A%1=En{$ z5-p?Pj9^_1N|Y@@6#fDC9Hzk}gN>toVwjv5LlNOF`>ij2?&D`Y?!j70)|Oa(>Qxp$ zST2Nz$L{6}v9O>|UXy4i8Xl*}l8`O&3!M3dRHMpd@`qVmnr*njdzz)3*)Ubbgj6Zc z$amiWonAi#R@nis!PP=p=a_gocI{kXv;bD{qJo{)jeQS_UE9efC17CS89g}B)G;;c zP56VNh#rx;Y78E0$ST&uN6uoXJClm%+>?>OD?H8Iw4qRgSq-0-w*Q`W0)dwb@shcoeHl zz9vA@AH50o8&5~}zmvTuzLIU2u02@xsOcNeyYUZ`WR*94XdA6P^F$%On%4S-HAk~V z21@!1^LsJ>B{#N!@fVM4RE{!f$*8BOKTX{|xU78xgF%Sm$p=r}gPjJsM@`?Ry6l{i z^Qid%#zMx2;Pp%~+TmzHH*BRg3{w_iEEHaQDd5lhT>K>%9Fb#rZ&kt)3 zqgIh%;LWZ+z|+aoSW->fy;?9_<7JKQC$85w(vakaY`O0_);)f=z-94CJYnf-o_W6F zK(F!#AnvPVt;@kSSs9mn;`8l+)K{O%jgPYVUKGoqjizmLy%Mi9rF|V(2vVYElg)># z?l|@QBDMYVVYtvxvJ+nNWcpPa4k5=w>R=UE{Y*?E)QaiwBFzp!`+LuxFcfm}^sHh% zv35zW?`&M};FH(Vi^4L{@thrH|4Ez@lZkMFM?(jmfJ+G_IlPy$f~vjV6?S^aC=e%~mh-!ti)T8TDnmM+^Oge@5*tPSmw*KHg}V z$*x#g;BFLh(z^&096UI>RaD51EA(GgT_L>+$ntpC@nm*LvgtAWat^K*>y*1Eft+-u zfp1MqG8cFmguU@q)3Y9xNi??mVE8&0Xxy;-_Qa;I9X+k00z~|?V`z6dI?d{LK~S5A z5Qzk7F?ag!ZfmfLThG8$416uxP0wsU-~ybcsbRMH_1fNJZx@aV5fY_u1u^naDxPp6 z&);`-u9oy(V8;edN1V9Pbp_6OTZvTS@nBfQ#*kV(LnzE|Ao#=^$P|&>ZFK`f_?zXYJvFoqhc6avgt=7~z08K@miq7TN%5c*gh_4R(!l?XkUw^Qzd;`(OTXDXm zqr5=A%|0RZ>qvXh&caQhGE--A!?>?I7uG?{>k0CsBhNx}2-w;gin}Wf62^j(kX*Xn zL*RTZ-ok_wi}kd9;juYxvGNkZmP{hi9q_5$6(g9oG;a_NXF>aDW%rAlJZlg$Uund? zd;Ma?@+Z&*lif);)3&VbAJ~18{|V|A@D+eK?fXLAw%EX+v!b$}qARIR<64Hk4^B(o zrrM6O9{guuQ>oK9(1^ylgR~CGdz7Nn?mdI`WmsR2aoXT`g#9#03xjk(p$=Xd=}D1( zQW^*G_CW7m6?6Lbs>!;?=>hLcTrsP$a6G`b$U;|#K~nK>EqMb&d#N?gZ*7qqRj+Tw z`%mXq?DvGzNUmpJ=2gLUJXyO6M7izvrsV~Xe@jVivP#_x#>ZvrWeyvMZa#`oT|Kv zIPLTvd*g|u4q`suIZ4s;Lu2TD2#w~OsTI%>^t3aI7h~%iKl!eZ*^iP_R5CWh4vD4g zJ;hCpHKaJmc0B?4UL`mfvI4N##LkMx)NG7VzamtJRu$p(xbe=gzosYTiX z4A)a}Gg`9CPgtoAfzCP@(dZza_e-!65CkiH_E;V zj?GLj7@pn%)HI-#voq&CLJMd#8mugQuV-FUix2e!?%HT-9kTjYiuOauWq$VfFx#%I zmk4ISZe2qjxb_4-p>0-LOx;{XN<)W;K&w^%;>P!nnnGGy@3eImFJnspMcfQHm=Ms4GZC*+(P$!*dQ&AAz|0Byv;V%ytJ81gH%{&A+pj*Ud8*?oFA>8vGUAtrIYb6wK*rCNPk!Pi5{yB^%{n| zZZhIqhY;agFckwhk8DZlbhTD$K*D*m=*9g|l0Z>O%-N1^c9x5PuIepl1IfiH$_*50Do4*Oib_hSKwX6DIxn zk((e8FFVR}``$eg>6=Ka$g7BV-dcpJ5vmLy+p>02Pj8r<{OkBTNhzn-GV)t0ve#Sg zee9$Bp#+P`AkAJ*#eqxDx-2k9tJ7-R9E`MPt$9_sL?wxWZQ9-R4M8$@9jd${BQxbzmT&$`i?CLZe0{^)8t}K^ zBGL=TAiC|^vAhQf$H}d>0Xn}<)`~BQVN3k{|{a70Z(=R{*QB< zbdJ3@*@R@1y;o*RlZ9BvHiwI#l1!=llEqACLQU zKkoZ;-?!tu$Mw3d=k**1K|^6j{n7(8-BnH|46rTLORq%rM|?9X~Z%s0GpMY>7xW+9e!pg@to3_9gU zCe@+hR{D0EAdnn`YgOnqtJ(mQWS#2qWf3PcxD!*{!IPrtijXX%0_Rz;PTdL^>}Kf@ zOw@)2tjXu+iVetX+$TADNa12p#56)avJn2g>qM(C&tdIrdnisCg{|O)s8BdtZvBDP zNf9txw`lOOFz+-oJWjZTxv+ASG-9 z6=01%^m)0A3)lr}1^*)wdxs|TCn7g(vSRLd<2>v=BCg@~7qZo3RlIvXe=&}dOS@Iu z1%S_ocv+P8JoMP-NfC)q4i0RAOD;`Pi%T!Z9R`f0__Y3TWA4F9r(6AU+eCCi!FDbp zT(kU4sd{(bEx^{I{R90yhig_~V3|`^tS&*}Kq14hD|G(LPE z2b3|a90#V%)u`h)4`4UrC++;UxC@kxVKxof5!lB`Dh8*Z-as~0By2aA+!eByinAJt zR-jQypm?9vtckbUv%+3}^sB<3>(NyhQDAmBcX2NJ^bD;l10?QKsq$xRMzP`sJvY6T z7>0vQ8CrP=Y#$Z?;<3malu}qf?1K(;GHCZy-UZJ^gL{8Z!$}m#0`3BH4^HdqN*D=jNo>K^_}5ezDT;3`wR%X4>QHweyMOWF zr3iAoeq}nV%yzot>&2~He&4!y9zM89^?Nbt@ZAAp(Dlu6;D|py`}FE0%LB*0`94iP zg0(oLc=UyfY$GNNi)8hSe=t{&&!phQL;<|QdSfTpr!*2^BNm_e3C^e3pM~VWo$*N7 z6ai8dTs3~PTA|_j;)^@*Xld1M!MZ=yIW{wOPU#C^|1f3)QlM?$Y8hU9<_~sB9Rl`@ zb>K%17#;h5O_m9kg#2t;@(xJ1uIo~3I6Unp1)34G_a1ZLry2+zuNyw?v*|AZU{uHl z7y9eEe5his<}+C}=!W0WnXj|Enicv_z(SP#goJ$195ZRClk?%$V2T$p@;eEclzE~R zAsh<1vNT~!FirpU}Rk( z1lU>Av0h*n)?Z-C2{Lk?;Ta%WR^8g1>#}j}lDm9g;Ljnq#@=}9Dp*jI;k$)98$XC1 zk6x)F&iRr~KmDRtdKX%}=sj1vz9crhQH-HNQFzU5K4gp{Otqllt-_}R880w+<9a7Q zSTUX{1`V+VG@^>p_dE~lBQKijw0R&r*n4vn5#yQJ@T5J0on~eIHv%iYb3mv{dy>#! z445jZT<$+y1PmmN@p{LiK9nI{#KmjkFXH_HwRTdmsW-4S3xNMYEj85@z2vZ0W=4B+ zD1SmM{iy1mMJG{zgE&(z$JAs6&zV+c8DA!8Z$}`~Oo$f&2{_7+llL@`oou)?Zhry> zq&+Be_%4@+s-W(YG|^{^m2e8O?V^?H$X)G5ek>LxrYL6PlaODq#$I?u4>DHui%uj z5x&t&RF$(TjvNi{N3NP;YFw4z6SkkaR;9&b3k2dGw}p_d4Pr~%BUw+Wi+^50BrdM9 z3FWCUGKRi8-GC5y5(0MDKwYUEK>+0@2-u3Q@s|m9e5U8)^dC}ZE*cdx1wmlO*SgOv z@CEVERD9ne{ePOd&WHRsbIynNFQApgiquIEt{~*lIq4kw@g%8f z=-rF=LReY1yjaUzbn;;|9l4)BJ9^TWPTPS_KT`S%wy;i|#hEvSpgGh%&o#)i=?#6J z0;CFTQq%o>QM)%{kd=6T;gOL->iNux_q9EjwnX`EeP4t(9MpfYL;ZTYU(~oso9qpO z06C*83gOh+e?3dzZwO(l_FCqQ!9q z#bGjRD>$Wyfc3OuZlonN`!D@A3X3?gQ6aE(H3#tLlPX!9PXFQ_35zV|&BPVc{JO3N zU{?7JfN@wO8F#~Z&~#=JT0O^FSo40N;O0iIz5FWg%7Il-0IB-jJ{&yk2{)khV2O&U zEJGkz#I_#`NYD~pn`*=jvhQkYGL?NwCaWu$4&L=xSFM?i6zxkSodUxf=l8g)1aNVU+afBP!1GovU!!Z*7F!5&>R|1Mu zH2jNi=}1tLw){X)a0T1H^DR)36=0rHT1JLGUuPFr#sJMf0)v0x+y`JKNo1q@q=wXu2MFV#1LA3tNU><|?=63E^T zWSv+CbHF>n09rdrHG&z2ldgh!qE*WJ3Iq<1Su&|Y_U5iVICZWV^+PeQ zSNXmGvA5yJ$uzlQ`L?nJw@Zh9X6REuV_qAJ6H<%ye8P}h z$Ix}%f>iPjmVgRa#-e(O$2dL zgY$bnFLsFrRRU&+C2kh!NH2alM#;Yq<%h$pzHR`R$7>%dPpGp1;os|n>XCDZR6dTC z8s?-3phv*@XFcVqfmvuK&fq!znegjnbV7)`&>tx5 zmFN(&xog&@1lv4t`L8cP7DC1mT!;;)#?A)&I`+#_Dd*bNb|1Z5yGBc7+&C!qq1*_o zn-EL6zC0A|SKvNW^fI>ItGLY(dp3oKi?fr{rDG-_s>M4Y{794?8j15Dt(Dekq^clm z5O)2*1XH(Pgof)_FH=!2=6@;o?~!SOlYrrlrWNpKn*kpNzytF-4IQ`*Jw&l?&hW`l zZIb`~opCd;o?((%DUjrP14#3wp(~qU7>eOIxfEh1`2^lnFniChc#p-Bn_;RB0+*Fq zTQ2>)2_LWI#tk-uG6S}hTQCB!uqm1eH+N#6R};T? zqzU_h5M#d9+aWLiaTz8c>^O=-i@6ND0`*H@ZY%A~FKEWRIG|sxLa)(HpHwnBN$fpf zrmg!|Ew3Dbd_9@b$F>9fe~D$V~*9;{pX{tsfk#0$@iOy1{56>%c-84 z+nX@W&;GgtwqW5*5(U51JZ&`2!b{LDIeFUMTXj`lsig zZV)m@|Ll2bi%)T=sWnq!1w7YpFo`~!juREX<`17w7e$^uF7Aa%y$cXMI!EtNp@IE% zP`n`kuBFDs*V_q{8jzF;Fqr)*HGkez)-@#4JYFlp6V#srk~u%q_%E)(a&>v6x@hIG zJmb&k=Q?roFk)5Z@EWqqT0q1`0c~0BEt9Ynoj5)rjWTd?&!TB+N46X!(=i%zzcP53-r zQeZG$1`;aZ{D9a~e3r)xV1MCd9Ssr#dSU30H{tlC^f^<-?&R%2p_whV1YC9Clw9Co zF&~63`GxOlwrI)i^M~(^FGBUg(qPeXC2cq^T^GK=t_!y6DY9Yi`Ir2D0EDe1@Kj%0O7gX{g3?(W-6B;c3oNrQ@ZjwbvPp4Iy z)rF?bFkUBKj^#mXK95$X(*8Rz6gAuziII6qi~%4BHne3Q@AocYx9X zRzucr1F$FlG^sv+xU2x1N=MI(74=^7yKAe#h!?9{D`Jg?&Z+1_COhCknJwQgE z@PzP|Lg|B^K;189g>N2j^~G84kbhvvzk}}2Uo<{Mu0IR}a|<}XyO0dNAcN|HLI$s)HSB=gFDeunbv$7@xaRi>(jDQM1&ZmxiBsDNngVM8d@=q6j+zqd zjqN_Ql*2xgA7z=OF?SpGN%T$|>vJKtfG<8GlfT3^kH>t9UHnhc3AxKI1YY%bvlF=w zU%~&m^-wxNbY{{JSV#U7R;4!pH`zNaPonOpFj?!_Li7=4aV+T&?#F&c>vIkYbH8boC9bI5)?Jv*RJ}=mnYx5xKZi^a0n4k_Eq^!% z0pa2#*aid=aLG57p3vpu@!r;tOvfMNp?lwTKmjhKpAOc_jsT%4I>eilsm!x%O8<2| zS-sIj%+lY1%PX;|@p@~*tN&-#F+)Mqw>ROS=&e;fP$x{#ugP!I#7ut*+|*@yquUSK zLO3w3l;aBJ!*YVFuap@-9D{Y0VK~T!u_iSz(xTQ(U3?FJT@wT>ivh`yiunvQRX}VL z9ECwpI(t1+BMndrq;bto+#}wJje>h#|GzgJ{4Z3e0MTu0>kxy2@$gi~qOFCP^vz#l z_d#L6JunYlSeVN1xa=xeBH_OUl3&l8XQzY96Ad^mXP(1GA)^ak|2haKUsP5m4_`Q( zviG?RKnvK9nZUw4(8+-x$+E@Cz%$u_cW-JL{SnAxf;Z97j1T-&j;sieNoIMRVNUr^ zBmwv;PZjKU;5pB78ZI-mf$eor-Z$7V1DOU&9lfZayE^1NDvvHW2vbZur0(G_&+Y3sGQGpjboT2;Qh40`LUbFUN)9 zliKu!oy46#JYrTXpOJkUcy~5VkLL)^{T~$KKNtY2`q+RZEKY)u&;=2{detJQ*4{E* z*yJWWpUy-5FxS~xT?f`#Q$Y~E6Hq`v`Jx&^ubV4<+cIy^g5nuj2ml7BEtcJ!S~YO{(^A+UF&3n$26k+DsW~Oaz6bYj};r(pMN;`Uk}^A6$W-t zN;|Zu02Bvy4c2erp#~c^Q|K;!4}|l zMG!kDQg8S}UT$Z+#0otAVuH8#v)ZRyqPjCqzXn;Ys9BDLTjxWpJ@rA{TD~F3qhI^3 zUTQ~F&RpG%^4E+%2T%+Qi`geBzd&!X!X|$6Xih?$#TpPm541G=Fo)a*AbXRXtd9GQ z1T-y!a8|SNic|h~EB2pl8Ri(A<}yK>y^;&zK>h%3JqHa>N9D;k_Cx*LGS|Qo9ZTbZ zrSSyN#Wz;on>tWZ`vYlGy%cLoQTxI4n^yK+Rw2g$*3i$Q)J$K&RhNp&>n$ht1~rN! z{UZHgOa##*hfXiqFKE4>JH7;_=ltA&FY^nghX1cF@jrewNpd=6u zgr?mCJ{C9&gphZgc?I1)IG6l%^L|a-S`Tq|T^^3Z55v+X)jue*DYHVT(THSbmvz_l z3xQ&`YguBthX6mA|I1jvu^rZUsXGPzwI*>yG=&<>DfPudl1xTzs ztj%?>IRUVUASthNd5nEffOZM380_+mfRvFG#mWo(mByX8P?gqL10tup9Ib`g|3`QA z_k61*1D$j)yf9b$u-+E;fI*aDZhfl{UNJ1MA4?ZB>bl)|$qk5%)|07(eIu|81lk(e zcNoU3>Bo*yoK^imp_$6v3z6WCtvq)cTt2fkVQWU?M{EM~HXJwD{AGIvc$wfeSOWGL zvkbq}UFHBM&dmR-Q$4(LwQ-HWRAP{D^#gmjId0JnKsj|5n#1$jVVI`-aK8h5%wK|u z2B2s>-)lpbC;Og49cky_Ge~iqFkpquKiW;T_WRiM?*bvaUPEkq&ZLQxdKbv=kt00n zHDHup2(tma&E9v*FhD{Pt&A=H*Wmxh19WulGRPark4Kc5qJah10Zo$$-&P9~knKp# zLO}=Q+TLuD%G3q&-|sC0xb&fAIat)1er#cp7{kdRrixnkaR<6j))&}#s@M)^mtw!S zR1(e)MG*fieth{n8LR)L<~NoFSAIOT+xTN4v})}Cdl~*ekJK(|>V!X-Ma;o>-hw3r z@L89l&VUWj8%_-|8z9VrC7c!%>mMxxAq>_q5%**dPMaMf!v&ryF^cfw_XY}oMU_YY zd4$9eoKtkLW`pkTYMw7j!3frF@D)a#u7L{wDL=daze>4J8UoZEO1y&uqY~!-^;~IC zfCe8iU5O@m1qcOJY^2nV&ASGyxZ;(FF*ND0>B24;72+62*cx4s&`xCE3cYjOw}Ig! z8VR0b!rm;JkAb*|rN%08b{$r~0-d|i=fZvoa!1dQRUOQFI>I@ZfM6$nS|k`1{;$#9 zQ9#0T35Kuj5LMn^oV=^hG4ou-PtiQbUj(YhvR+%tG zg~jhqPP$7zN09uKBf?PyBI=t{C9(|_P%ps3_)buq2;j4}wklW~#1rkrJ7mzHONv0e z2FFyhW-u9B65M;RJIU-C)3?O*TzPj`kQ^vrifw{bxUM2qtId3P6)(7Y_$HKrmFee8 zniT)8-cp046lm>pt%qcxX)7LCE>dqY($n*;xVf5wmDuk92Mf`M5IIJ^) zh>G+IvpNyjKVh_4yWpP%!kUhR{4#@Mlo=}ep9LowE-s~3Bp#Hr>&U2C!waC}g~=<2 z1P)b-@jS>w94OUgeC5-To--D!_!OyW7VguD)mF^jX)d9e?C~_tON{0l$AYilHMmW`gn`r@AmJijtR?ERm zT4)Gq)vi&UYB>Q+bO8seY*$HT5Aracz_TZY&0vH82O^mIG(h#_F|lpckN!v<|lW8633Nn=4YKlu$>{=h0zJPC*9*)YEgd6f?N= zR$)>X;nk%6fJ@QV_Au(m>4Euj0L90)hsSe)-ay6{0_-T3BC>{Wp!gTuC<235EfkW; zs7k{hWPTj7TqL)Hb_hB)HMmJq-<~}B2zD}Qq=5n?_HII5)j0#8o4}Jod7|7Un`#H{ zUD)%zupWj<{ufkSZ2z9BHu71-Cbkg|CR3gz`g!+?U)aDKzR!Sxk_X08LUdH;q|^v+ zhsOYDjGaLh2`lTcUeRY(Es=2kwyu8Tk7EKqpPD0|!HB*Vfdcw@phekGq4x*X+{a%dGY_%1BN(`9aW zD^UJUzYM2g!V=|$->}X`DNJp$4gJv{OrYkvGp<4rM$WfucJdYg7t8huPwT^ezq}F{ zS&(Iabbe3=l{12cQ%OJmbXj1ZazSv~NuCXYwb-`LB>DGyl^#fg^MC0pecZvn=%ZL< zjmbsD-uLS;^_J9W8#6D?#ri@P*-*bG@9q^=5J@32ZhrH2hgk=B2zm`3<`*A$9$p$4nJ)m8k52Ao{Dv)V5>#U_TUQ^t zS?tyMnS;X`+NcTsmOMOuEy%Ep)<5`x#`Z;SX0x5Z% zVPGhI0R7No6Q`HG00mJA%2zXY`!bFr#x|g}u3Fc1RrGC_Nd5J)jw;DZ3lWVwk&zSMad&mf6)&~sC!e9 zYVOyuS2L)!-KaQec~883t*PFkv$)YIL;V}J+rvS|QDpB?3A9|&UxaTf%j!}5 zU&=&5*1z@|1aCy%0e@cB1ri=a+3))g-`#j7zE}p1XP8SLBzE9720>Q_Ntu|5izkA1 ztis(Bh<=T^RE`?)uBWg(#AjIT!&2fv5YnIN#5?kdWW0h1JlQ~LQ||CN&5--qp|eK0 z2G&`lz(M)lLdl~wfVoIL9Or=urD#KC2&DgwFY)J}EiM74*r{Lpwi+lAv4L@r-XtoW z@6n*m8&@5*l@?{@?wIzfAuil?rh8>H?t4#Q_f9E1sjb6BUHfyX`U5nZZO?Ce?#vX` za;-dB4N(SvQMv0UQz_*4B>8J>+CKC5khZ~|zVZ1dg7&YCSZoCRl89V>tbL4SKjBDj zpON@8F>Y1XI6}&-QtFmOoaIIV`GfNE>Z2Y}6usX08=MZZ?;-M*e;0+o?wGXc`NM6| zL^0WMsZ@RCvuy!c^vzco7EP?I2ATL(9*O9isRk@?baXSTx6Af@1WwDK?=g0P`~D{L zXqud}0^GtH2|p@EBpT6v02Iq6ThBzB;?zXD%3giRrEuN#v&-0KIfnwG z4-Zt<5Y*jpd#!i81z?Y&r{^eJ;CWp8?sVazF~cJ7)F1XlFe+ROYX>qFril?MbS=29 zg=K>CoW|OwDs6^;79QgmMh!F=*o;keWAtK+EkG-PrP+ex**dK(^m5=+*SY@Y8qTLw z&cL?o0}u4Sc?{wl$SxZ$Pc<<;td_l2SSgatCh!>R)F&xHKvB<^e`ERNtZV$X18^vy z-CGf7dfBPdCnWZ+B3F1ADs zZ=t60x*Zt3V&F*&xr($Prg1Y&d(7L;z!Ym2IA}8Tz@&NxO6kwMOXVj0TsfcMhwaEx zrUu_I3tD;qAgVOg_Gzs2N#AlS;3SXa|C(I9ceCeBz zJ!8~qOX?<#w2OuTnB(0r=>bWv^I~h}P&k@$ao|^xC{6pD`m^5%x=b?dCINIb4z}bo ziOg%CY!XvCl1POH2XBPi=cd{*rJI_N%#Wf|1r+pG1=rH-J7FCCKdk}jn{tdRF45#S0Uie6O!E`kwOkaRXITWYU!ByZLj^M1=3BNZqy zqr>4Y`fZw)%^k5Q03*60`M?JSgE<=!K^oVIubmxAvoK8p6<(Ixq3s^=b(6em|E0T> zdlu1GRdG^wyy>>;bcj!Vy+z&dJl9|$nL{}XaQprMgYYPXd6y_fb!8zn9-iHoz4~nO zieo$heAr5yVC~k^y#NCZ%3p2I;gS5+8h~ zn%?4h75gDN?`1vXH&j%)_mH-GtBR)H+_Q`iI;zT(aW{GFbGh-Tl!EJ5K+=kc-p zr{aHjIH=k+_PfYJus%r$1<2#+I#7z}#;*;I`qVfcyDp zV$A88Mb$%lh7|{X)@COe{tdk@tdkT;~|M2RH68?gqm~TD-nIzeaIryIh39 zab8Ec#2e|tIrA>NZ_l3gH~z*wTes4GI%uLjX8dAizD!U>=1C+h9~REo(MT)BoEsKU zy1`K4ClL#$!)MctlO1z6{C}L->{s7&@=JK|M=r~VwtUl0DWYBi9o*)dLCUD5yO-5I zFh-=)ezXD-oQZOY*H99;qjHiEpbIGVR9w?mJTqet^sA%8_Y}OJa(wHkb`9{^owmhnQay%Jc>bUNkkG!*`PPX;nB# zLngHLn;9L$dD`n!%+4>2CVtR=@r;Lt*C3e8tT>H9?uOVmo4QVo4=lvlh=nD4!5>=+ zj-{p1hp&4QIqNWL<2jl?v`&F0+%{|hKU>s6@3pQGgX8OhVZ}ea|CBZ&d|d6FO08&7 zh<(9vJU1Hhs%Jd*mBO+b3cVAUJU0i;#}048_qdEQqRU-Kvk=|K7bCUQn`aDV#Rqu9 zl4IWU=6oIY60ml8GGS>wcVjpp-L!3eqNHamq`XOQzzA>kz0OPaDR#up_e6S8?)t|1 zr1g(YA<^%p16A3(A84%k0y}r-(caIt?awA~#MnHRss%?NVq95Q9T8WW0gmpr#e)-B znP#U0j@fLDVibsF+${-tm!gFdw-vTAjoO8ShoDeDGHynKApWY3*h^I+Wnmp}vWg1p zxAHL()dX|hE-2DdLEH=B(R6*{LDGRd4eV0 zEo5gLYl!0TzRa-2=(p=`0R^So7f!!+lsvK65Bm0kJ3q5W)O=_Dh!X*!Ay+b~v7=At zIgXg}+-#zY_thjPUY9D-tZajY3UT%iRHBFISlR_~7+U&`z>aWe&%U( zGH*!)Dz_vsCLtIyV4Nf9_gOR3i87$aC07Z9r9n6eF3atkg&Xn8VT=#bghzV zFwbiVvb^v88f9S@7A3_&4zQpQ)8oHhjl+xH%1<+?Ug z8z?Y7Aa9_;j>5GeLw_9oD^XQ~&MBnV#%Ba0D+fW4x<0pY;lS`a2eCJm$DJTdBB81N z&iAQjQ{JXr`A2=A3mU+3aX_l;9cC(Yv`?k#gD>GHsS^U`^>oBoD+6%j;k@nl(Ko$< z+O!fx_vc<78k9YWb@d&-i5oD|Io4YIDc>US zb$lBsDnUj^0ajnaAye%V!UwLk+3f&@cB)6WyzrTrwl1jgoaIXGffqBGT=Db_zwSf* zUj>wLSJ+dHw<2*)A8W6atWT#smiNBO`gFu4;lP~EzIgptgPzhq5u+x<+)s*9)#7tp z!Mmd|Ad@us!;-D1gt%eg6F;Xd>FzJzrcYkDPqpk|V@79{lX;#Y=jZFZC~s2sJj-%)ob+v0#49Goo1K(t zTbcdOl@o66PqQrpFLO}sg2iC-m-kHU<64rWr9Tv-}y9+!t*( z?kMAZ5zhq~tnlI`XU0=(K_;6)!ukr!Jjv0)I2P4usb!Y;K2HOEBbR>9vX)pVo=lU; zm)}y$xE>sh6t`d$5_ku@F9v-P<=WQPgIBO0lua5u({FxA#kDP@!^rwOmbXM*vR)$2 z5SRBiyz@ZiPvKW25G)Geo*W1HblnB=?&mxHyz zvA*yDHiW(CRVelz%1H-vC~- z<;_01?VfF-%HJJz;P~49S$_M=vkw8;67gF!mBfJx=7Ae(V!vF5$~-~eP&~}cZ@9wI z_M`_Ok)8Yg3;c&VOQ-=vA+TCwo4N8jNUrZ}ml8TxpDHs+kz=e?=vYDQ3fF6ZOI&~1 zck99cGWS68DHrV0rGfNO zuv-P+hF7N<>^ocB?RisU78HUoH;;Wk9Y@&-(iFBf)vuJ|v@c_wO{ZTGc-;v*so~sI z<2FsFgZ%yxbCcnV>E=q*7y6PAF{j-+>O6ZHzN93i&d#SYEw6WJf&t5EJe)tscp~Ji z<3_eFl|T7x#L;?&Tg7L{BznlkxT@Y;CsT-x-ky1pDfxgcq?BeiMp!Up;Y!Laqr5GlVxn`kM2chG;zmm$Uj;K0`a-sZq1)|NemKJFBjhnNGwG z_sXq%!sk*P*d_Grg;EqdI&}wy4ofd9;!9d#=N34889sn#wsi|r7IB|*0QV#F*N9QM zTT3Mwwdx*H?sV#1pSu0$9xK{rWpbUR@jes%xXXPDw(H;<)%qiU^!WF(jeH_A!|Bk- z40_}9@a&a=cJPtYdSuKdWkuO5V=L0^K=1En8fmJ?WG zj1SAO4wxMc=^*(APix%3HpmezY45`G`>0p^n%}C1eD52qLlkVIYqt{N^mNKrmXF^M z8z+^C}Pg*ou&B$i4&)2q(b z>saljw%#KI;Sux^EbrCo$);T5T3CAQl5Wo!=11@wvzjR6Os&DduTeR8hPFXrZ)Jl^ zGHZ`i`by3Xchot7v|E9JC^o65yD6M^k`L$}M(?<5&}mzUQ4G8WiQpDC!Yl~qXSMRf z)JZvC#-EiM4BQzvY0k~JZij&oP)w*ziHK(QyMu_O&cU(Tl+wKSR?MQ=xwtcZ2-%o{_Ounv_OizsCsms>R zetk{riCqj!07~x=T^+8-+N5v_tR`DQzOvna*UR-};c2(>g37jfU&kWxc&_1_F~u4xZphqLtl7)if~`B~H6$5typ1?e3V ztBvwXDo1S>RzH=5vB-oCX=0yNNQj`!l=k5xeFs3`MkB18PsLbVyyA2FE1#0ZZKSlL z_rZe^*lO!&CC#$Ws0}uN@zBA`^cyj|Z`kuzDrm{sQWdWgUAA>UBQa26Q!n2M3b`KT zJ6sv$3PxB@MFBgqOHUT9C@0sx2K!-`}76%Zxm#4r? zbUE($3HB3=GzozZq1Qr)R-TzYg;@~0M*YB@A*l*8;V)wcr%tm9wi#XgX)CX0>!M7)(I1*__3MR&_NMyXz2{&O{E5JHwt%dweE~dms!P?V zDZ-c5R zC|ins;kRi`99Nce)~|=X{;5-I;5QvrX?L%lP1HyE2Y9_J_uln$-K)40eYW}KsRu6V z^G{h+-t=XYeYTS7D9|-FedKm?OoPdNILV&5SyjhECn~^MgCY!FKu`FNyDjEC5%i3S z7-$mNMM!?~D{}BDu5&%lR@LW*3DNK8a&-6JupgFI}yxQYCT-OLfyNd^v}8@6@%{WOVPmowFf} zo&u^#7pgOUCrfZ$x7mwcl1EUZqg0zye)M&ws6#@%n?|Tx=(8?va(=BqI-M+$h*JvZ z<#vuM{m>yf_$c6*yE(6r{8e<#C{oBDgdIY1d z%&9API_QWv<~tC7!X>2UqpE9|d1Ysg8HsPjL`0MMq0Tr8^gBX+n_r`PKw_H%=n@9$ zd|$X&69RAah3_6Jn*8kS+0u(|n(}J5-n6)!yy_Mx>6rA4$=Z)9xm?p4ECx#>fGEq+ zX#X{>rA90C7^z;p8E73QicFU3k~~(w7ha2(4|jVA7p)$j{WG_L+$E8U^H_&E>)VP^ zuH)I(cV_%Mxq|G6FPi(8kn4>PSB)$P-5X&h*J(A6DMu30eUe_4vT=50h&w80ib%g} z8)h6er=?BGb~!Rsd3v6CG8lxFQ>P=P#YK{P9r&5Dgm2yzSy+x{GX7b+({jJXXoGl5 zPU4yA#X9F|MYdpX=gT3Fnx+4)wH48z7vEPbRq3U;d{y@7{ZFh2N+?9A0O+Hzgk?_zogT!+k&f%cpY=~>^NVK({ zB<$4#Ph&kEd|~x7L{YaikwwABvI?WMH7zjbN2%kL?|FVa=3Wwy%)X6N9l~z=ii$=R zR-g3+r}fC#W?yIf(7xgbve&;u6G_4xqa|kEamEkN zTHIw)<>A7K)u}cRT_mcQGEFQ#Y(aVoH*_Z;@W~AK9>9O;H?gSj1##2Qavx_vPYmA-qv{>?f-w^x}{D z@WvAeSrgB(rZBp3yqdsjcb~e_&3nmW-I|D8?m`TeB2QmMh>1;|G;4<+S=(I#3*ko( z`hJzZlcb&H-(oDU zH5t4LDOlH$BC?bblDGEvT(#Ae_|(tKh_w)%lTGjj5Z-Vj($jo`o01m2C1v}AZYQ#O zqe}8Zy`Lw$7@I`0|f99J#SsmcsE?G|ASe_u+A)MA7j^_kKU^YCW0e z(zp|Af0kL?@td%!`u7z+OFcubrwMNLH0#OHzT$kIwbawMQxp913SE2aWqKYeu z{<_44Af-J~?`BgLH7QDY@|0Qc{X^mth7cR~q{6{yQ(8;+&?U*W@`)iM;W=}e$RUZD zD;yunq4S}ju>2j@VpX)%`H5VRp8URAHXcDy?JY4}1m-IxbLxtwJ|DsAri~sMyEV%o zZ61}}?0r=$q7dIEQF6(l{UK}Lkx8!|qY)Q+?;Nwf>UtVN;Z#qGaGCa5k0>dP`?DWA zTu*X1egzi9BJusB-F1iwYw-RFE0MSsd#X5tpUv+s(;eqVd(&Cr52W2zEb91tKN2^p ztJ==&Sg4fv@*MXbn(&z3Xd5iI#NVWVmE{yH_`)2GE*v$DssK$-S=fR+nXcXHK}f$_ z+GzDiqjjd|V`dfm3gVIc4OV$j98-rnd|!#jqrT-_9tW1Qfwy*Og$|CHh!iwfe%lB? z@y0iAog1WXyYA}?&3RieZo=o_DKkW@(6E{*ab;ZOB;n5`4!Gp2JpIDL8D1#Xx5z4b z=uuaJ(6xxFW7yS1PDJb7YZnzYrr#TS=Tj`BoB0D9vA2CqCuUTQvoPPagL0v-eN1&H zJBw|DnPcaC1+o6@5j6~z-3SaAa^+d?@G4qRK&!hi#@Nt#cb`u~N>klv`XFv4>hY>s zBI*J4wUOgW%C2u}AK_n*Y2d5wzyychTf6kkdE*#+5>JrP&p=S~R=)ai$-$t1>V?6n zKm0At>j+@NGlEmS3!NWk-ikIcKv;8N5*(Sn)hIP>(oPGsq5Fld_7!5wm|_p zT!~ZIpM`wzAi=UuxSi!~3JqXbBfSgt{2U%{a_o0>yX ztp!U<4Dsd(9xjdM@6j|-p3M;^P+_+{-R&o>Y;inG(mc6nz^U0=Nr-%Hj8b2=DGqfk zepAQ%7KOcUwq_hzBQ5-%59vvs8fHVgw$qYp zTBZe$?Vnw|{g++p#~IwB7&u@x??2Ouo-s?)Is?(NssfL8vPp({V3e{G?W<*vt88+4 zYQ-6>&5paS?39!wh{+O;^%Oq`uCs;sFGPH@8<0C0r0jyMp2Ycq-?~`USzb>Pn@#?;49EL@T9RSeI$|}E z`62+xQ(1QXa^Cd(5Ijmiud!NEqgbr6B&sE++^5gISWqZD5UUX_Ly3_WgMufp#hSQU)xS!5=KTSqDx27GTh{(@TU3v;fk=sT=*_ z7&jO2$3*1wN5mI?RD0g>dp8vKHWnxSY`azv@DK-5^(w8(EDj(05DbMSTQy8`Aai-! z4Rk^aU=dffnst&5Dm~a3LRnt77G(SFbG!PCRhr_<7ghI6lo<)Xz$F{g;rjEvLFy5L zqa?OojJ27yd>_xkZhxyFkszwagkTwJD~5U$aCpM~f!8Hk{JiDd;D2SdSvT|iPsQVJ>x~2*`)w*#;DHNuHCKRTzb(vuJW;l9&_Jk4bU0>xdH`eOXA8 zKwnMqXw;?&d1^`@iGf>AhKp~C^|dc8z2~5oW7CZsjXLojg}T{vjMl(FPyYAa681j; zZW0M{BpL{wEYmrj6&>wnfLA<|%piHLbR|Y{4sF?(#=owT?0x5YDM;gijsQ_3w8L}2 z;a=xS;q^?ubBgyc#!E}n5=j3bTU>z^N|sC$GX}5M-jGU)^>h1rc7n-7O1dpS)q>C+ zu)Kg(jbk`t41){r!}3Q^j$r}1JofB?)}%)ZF|Q=%PZx`zv}6;$`O7qH&p$_W3XTK1$dzC$mGF6H1WJ5W8zk9i&J{|3Es>;3*HQuL@IPxl99tgcft zq7ifpSTlN_58!FAJ*aV_fcUodsE0kJVgV?iOWWYC??B`fsl$ras4+D98*Of-@?c*D z`!h~1d|hc*WSpGb!TqP192z9&3ro<<61C2UuGH4Iajt1GdRRfeSuH)GXK{*R6iR4k zdHdt_6Ssjq3JwN_;{;CEq{J_}1%*?zW){!Gq4cdS#(>uOuV`GAwH~=HxeHQ(@DDQA z{WQvkvCl0l4a&@KIs$YhSg`{si|h`hX_8rehafs%VjT)cTC!Z&wsBJ928v6%498vI zdV)=w6zK*sv_=R{%Bg0Bd@0Y+2BCgXCHPTE>qZLRfNeXFA?;)CwMe*)xsFr;din5- zI;IiQaIjWq?{+|0LUBx`9Hpz;dnErsss{Uc0Ipj?K+*zdKW*W-kk(zi(0perU%`YD zCQ!nPMf99pSsJP@DT+(HunYDD+N$ca$Q=E*bCz>MHE!eQWeC@sA^T3nrPh%B{+)-~ zPo3Dc8R9j~-gk{Aa~1u~ZEZbg8nD+7cTe9#ytts%)CO!$A!g}#U5P7~l*Xa`9C zICzEHe4IYEd+7z~WxT^93PUmVAu%3nIrx_FbqqGi9=v@y#){mSoQ8qiB-Qp&vX7-` z_WSscyhgM+*;MokJ}+57B~Lw{z_P!Qd6lI!XAq#LvQ`*a5$mFe?12MPvuU%vqAxP4t5Sq5J3jnwYYM58sznK{_`zJ0>T zlnD|>%6rSM5mex$1A3vr6m{W)SKFUNB}bkZlbxwo^O%6ZFBrtJ#B1Oj`j;zu#q-KM zjeOw(+PyGGPKuwGO+##+d}U zP;kx`-cVZrp3n%MSj|G8h<0r7RRjdzdV=484t-i)3&ruF>xnOp;tt4+kYpU+8eAj8 zfAcj3hOxlqP%7HBP@9SQX)w|Qaq`h0f4?R;&@G6^C{PlBB@5;ldp;_UTwzvV?X_C- zdWK}o<*TnCFQVdUn=xVa0MyWoBAq11r^g z5R+JYZ%OXl5n*~s=Pr~*j5*e27Vf;nvy5lnEQK!)P0BPW6zBHfjLu=%k!ua`;tbf; z7>D>T$u&Iw3-`gm`QVn>J1r>`4owc_?5Yj041f|R4Gat^24hAorN*DRCrux7jt_;4 zYsF-_q#V^(5(Ky?T?IC5r=m@c_ds3?XNa#Nu|%{vU9}g=W_F8pnJ)JA&{(?|ebfki zJAXh8H*SU(eW`koo6c*9pq*HhEp&*X8Hc`CxX|Ib9n>mt0ZiUG^Xzg_;GY%`qk)he zjs7441f)B?kGETI82112t50NrHMXKR%FO5e1zIx?CGTJ7PGf&3G7h9rh#%0ndo3Yy zP7Y#?%7}?*Z$d3&`?xVKWA}zitA<^brF;{sm|?Jhq}6-yz{DF^I7=j>TqkO)fq<>9 zfemhQ-}zplZq$ zj-LQ_vpxL=Fv5Ko2XGU;=tb>y^3e}2{`od!A)StfqwOB?`!9a7+V9lHJrNII^l|_t#5v+<~xa z5~!zElt6*ooCZDzC(iQyYSH=(p*=CQr&&HVp!EgqFzf6WTn;bL8AN6c*5Capgu5vc znT0K$br%Z_F6BG=^uvEe5*c@W4O*d!OV0>e7HjFB@fyu? z_2lvWQ-T~lQd76F0~mVf+DD%cc90Y85`wa$pjd-bsc-`%SmNM|uKcRZR3DL<2Om}k z!rm{;2e7V$k9X{xY`)^20hP_$_7tiI4~#nYHw0G=vF_w-8UVa{~}`^&o)*R<}o1ZfQ2Jz|x> zdkhJ#eCyzyS-2(Z|IN&^joJeCuf;cjC-NUJ20KLB3(0eHdZgWp5axPxeTgby0)!m$ zZ(co+nXsn;k#jHJ9iCa#D`-EVm2R#q?c_Xz+du>nJj!#fQs>JIrlHvt02j1-SSJFg za3D})G*^B8(f6_+BT=>ZEDLL^`uQtJ1p8f9D%|OF({ya>J)-^4qJD<;-Hws}{OyYd z{NHa`((j$V|EB_Cf5D^%By<8A-yg$OWr%nEq5Jl_(DI?d)4y(8wNWwzh7<7K?oVS2 zp(+3R?F9oGaecz`c=grzNgp#_h3^9@&nK=CmOe^eJnPneECg0X` z)vgvodmxO1?Y^fpsoKXw8UEkvAB-wi!y#1%ACVF&lAz;6bV@*$lgN8-g^@wIY`K+vWYTM zMn-m$l|3_(tWc>aiirR7P4)eJzmNa#@wo5L-F@GcbKdXQ>p8CHbzRSP9vo0ej?;@2 zLa;=LM^>%MlDJuutS$cyjtlGHR0^bHs=GxZz%gIOTZKz^-Jm^3;oxC}u!6tE@nqN{ zSQn8k82RHlx&Q3{`m_f(kPU^;;s)o_37i2obulG@gSqnBE}%eA0U?2q_2#Wa{!=s& zeqqnK^LsD9J$7yi+uVT23+te4I~i`gGJW@q*>3J_eibx-+8<9!!mvBdAmT@;7iq26 z!h>5aTufsK6mp=&1G$|)Tp~nu(F@B>E6QYOBhTw#1y3IOr1#J&vKc%KpsxeXqoZ&k z(1II(Ogixf>oBmo)){`fgxFpc-B}Zswx^kT+z4mj7fh!>k$YLyRobC=UuGG05APHD zvNv=Pr+b@#0D%rus2IrRXT$xtmDu%XQg<+~gZh;a2PM-}cp0tFD!xyE_7Ygd;!iF= zp|^lKOX+vA~;Znq0>x3 z4E8MLfh2yk7F4I8ymAQ<%aZUpn%MxeF)+nlH{1I~V-Y-j-H#r-K#1v(|Bk1*sZgF6 zYp~XrBA5rVk0!|{x)-i(JY1ey8G5(o!Fa_a071-3x3QzgFE^J2q_ z{8!LMADgZ%w`;L|t9Pj&QU;Hizb+BlmTYqA@BPS{xGw=|b9TbN!SfEx%VxkZ=ePtd zwL%Xxg~v%3K}4V~-+C%g8!R4A7)w6-b2C}+MTpgjH~X78Go+s=qdp&Jzw=KudGMGb z0#L~AW~ha4*J=Vy%p(ucTFec^Wj+Qg2Qb6-T8Qr-1uEi^r8l|6bzkTM$ zBw4Y@GqemHAd{4zJKPY^Eh7H!r$9~w2wvNHR`oxRc9+QfYP5U8cnK_0s}PjYxF^o+ zvkS<3KzcCL|?+O;Q%6qTm*FYzoBQyYPl0p1Cwp{K+Em z{Aft#ipfntY|oko@0}LaGmRo9;kZQV=`8iJ&blERl8+Tn`L;WC-UMX ze82SUeuKg6^|8^>an9h&?0utyumg?9;c(A!l&bLvSB!5qCO??-GnlVZ(n$=|LA55| zhCk~8CR2hhvd_7l(lGw*fY!gr*q7K@wr1izX5yQ9;re81>Ap*61eS`B1U3R}zQpi` z7`puWqDx`_F3?+VpDB3o{*dNZhH$1nE_KSYn~yfcFOx#yit+nI{bvusnF`r6W7h`d zUYfxmWHnVq9pQc)_rYugLqs%#8I)=pC`tncf;Q(60V-CZFYCN2d|i4G`*?mUt%6-L zjNG|8Z-jQFSN2le3nXU1>udt;?Tss1skCfm5b~gN^rZYeM0I8=EQ?Ou(;9IGrxSSn zJ@BH0_wvjQR;4Bvi}vq;7tB*JgH{-rG}zNrvz3h>Q_J{kOzutlFP*flwCW($Z_+pr z%dx2B0On#ZF+@!jjQ=G$>?Pm`FuqiRuUsg`;MRP=z#%kS6=$AWOR7?}52CH)fz`V4sFnPTE`$BreMlo>C#LecN_&mI9rozFOQugGi#?hZBT~k;sX2#_-!F^ zQM+cc;W6)WKo>SqN+j?}^S~g=MAc5FH*YQDr+CIqDqI`@%_=45Q=)72jr@u<4D?S1E$5o+xi( z_mWthu+>W+LAkc}0A|R^wiVDBwveNwi619<%=N}+47#sALY5M&11}Ah(?>JimiTma z8}595L);I|3^5N-fP>&|poZ?J_N99VVZTKl?=w?H-TaY2*bU#5e(ZZihp*kAcKSax z-v_|4_^e*+fSc4dE#4xP@k6%vCT&1DVbG5~U*%#7C7GxW(cez-0{&x?@}Q>qSjpUX zRUZ;oOVEL59h}&cOhdJw<0zWz7Zcf4!4H8|HYueJ>`*zG8%ygxK7w))j4^z1qJ`fQ zID)4a;9DRaF(h6Dy70cWecjldHGsq14z!^xB8TTD%^iU7cb)0;{Kd{%DTUKFnaiga z>*YG}t_ZBjIp87%f?8ksg@bdOh@fj06c%~XAM>ss#Z`QFy`)dEEMTdx^S`QH3`$TX`12EJQ-o>|BNMs&bw;lA#TtIL?8K{*J=ELaCE3t^ zD<4m0W%Gdwqy=aHzvwPpdbR8eZ^N?qfX+N9!*{@x=Do&i zEHAnJyQbeDmU|U3&fx@Pv2Ek4-jIHr zQA`{G*ScPPmRz(SK^E+j#}_OA$!>qHv^igL_pQ5W%(E@Eks|L?(z@Zh#Xqs+pMr4;B+RbZUfMjsCj(&i4cKM*)`vt)kg%-1HAVH$ z5o7l^C{s!RfEwQ4H3~7+pHF4{SthVHS@Y)$x5&=GvbdGOyju>AJDY1oRoq10j@HS4 znNTcbUg*`1n`ntDi}Dk5(I@X*5quAA8=Ei=>iV)9QBnLx5B)}WXKyhsp3_7VD!Y#!smG*nnLAJWC>G;Ub4iM|2Xc<*%pwEv_eM1}Jt7h3>Pt zuR*$abnDbL!aJW}xHw~$*4&>jbNN0vKrVa)x3KN?4=;a-CdalI&@?6i|MuJSmf6+5w z2gslb#|)3v(=uj-gX0?68T2^md~@0soCljE*tDFxNwO}yXgr!6n#xjn*{|ELcAmZf zi9Rrs1W3z#Bcj0$3IrJj;&7U7s3*68dq2pLB@2d*gCvF!~v1i#QAc zEGuu!7H-FuuV5c#YYM$*1b%da>q@i~zrr_Amm~fkFl1Qv+JVxiL=aewr>vF%U2BaU znK&z}vAyx>R5e(%41pFmKl%2^0Hb6-G&z9-G?K*aj61&jzg|-B>wXU<|S*H+kk$pze@0;(Ftg+?^HyC_*4}cjUSRbO25qNt! zxkll(l^43uAO+N1XTC&iMP$EE%l|}0*A50_GhHOVlE1ROJJ)m<#?Hibla39yO!JGLYQy1(j0amZA6jOUk^Ar4a6W_NsA*lA2 zLXmKLie?78D6cO8z~u%nPg(1rK#KL&XdG>O&E>@zDhF>sjblXU^+h~5jgH;qxwHhY z>*)hy@Z{4k5{{W~o!%7S-0`B2c>5wjGFcY4@~9pv@|L@lO6g{tW9-QA4DLyoEC$jp z*L`p@N>+d|%30-{i@2h?|5Ka1lAnQ^>{-x5fHR1tj!tgP6DGLG1U&jXy^>4Aqt|x+ z%={`Z59X36;TLe<73*|vOm^6MzzimT0ai(W);w_s$Z%nt&xPM3I~1Wh6Od&u6U6WS zoV-PPMnk+)hCb%pSCBkg^!9Ul#8Rq-;#ZVGc%Ds6(~N~CZhH7N9Vv~8H@O5m5b;}Y z;$eA<+0???2%g<$(0+&@HeeY8!=O6;54!t_7ej^O-HAriztPQo2|Iv#C(@jAGDVXA zuMsM4j~o-kY`F;ItlcxG+4aiIUx3@&)SV)oKPNVV5&x8e+^yeW5wRSSQ)X~)5sYa( z-x7=nz0PR2Er+#a0$9;5}Wi<6s#t-KxdRq7TCvV!C7BfsYy%qfDz|XK1^2Jh((6$k zyhCQnGHnW2R2~`6pmQjJ1;g|qfu;DWJjMXkpfbTXX#Pg){GYE$cn2^2nt?(Zwp&gg zaj(_WH#y;$H(M<2^qP0r0Q#<%V~?(=aG?sn_$Y~|oWN&&B0}%~#4F1$@f?aTyC>1Rb+nZYRxrzPI~klJ_YAo#dfmCCj_Widcz!#%MC}lJXOx*@T!a1#!jL z?k_Ifw}g|t;fBULQU*?bN`R3dBwb@54#~7?+u{LKz6GcfsU+#r2L$kgMsR{`tOQr9 zQDOZmMBioJYRbSTPi~GUPe&Co76lGob-^DgnG}?W(bz8t&)UWs?5EeycOys=@B--NO--sKz-&5!x)MYvY>Fb=Jxyp-DpW-f&b!9-E`0myHZhNzuvQ%9>gYt#;55%>AQEX;4=`(~|e~L9>jg`z3zm=^zGN2F!U+ag9?-=S`cz3yH zG@W?N`I36Qme!0Z8SEu zC~|mja3~}H=wIkWf}#+CZUeUnyJdq(avfm)@q$EwV%fWa`{Thn)PLC0e||BAhC+TA z+JbqB8UV%-p{!(iy%tG^kt$7VKbRUs;m92bSyqpuxGycWj3fXv$*-Xt|17Zn z10o<7iOdMSN-+f(8E}n-c{2_{9M}dmW9$=V355!R{NG>TQV=V|dw|XgQ|-`! z;WOXe(9_6ltzAnJ?gf+;w}}Gj4-zJp5KTC9ZFAK^EeSRz7L%o|6+4P-e{;g}AT=%u zKUp8@Q<+1^Jh0Ls$w3)7P!W&*G}Zt2m?JqnviXlQ(eOAFJ<#S+=7+Nm^}swutsc>? zo1RLzFjBbxC$Yh3g}76{LB+qj{cex6Z2CqNI7$tUu!LVD8$I-hqPGb}pK=sVFj_GO zCWiUBCM+tblZ?uv|4+k4Tp4)^%<-TsQ}=?3SNdCM+1Zn+;VVCK-?~SuNjn}Oo6Tk@ zh(HV?_GGfl&@XHnb!eABx|X``ci89a^xK4!3DzRpQJrYyV>U|@jT6j*VS4W!;ypvG z-M`R?yjP(0Ap#{jz1G(zgZBRd5d5M=Wd>*z&))oonjuCOuW#U%+cTQa;a1Boe+j!< zgk(V*kbo=QK>>o91oXWdm^qYkZJ0-L6{VQ)0%R{37jqMFD7pfLf9q;Sq6>kJC~39Z+a7>1-BXSiDcAD6<`k$ zVa_?%XNC^Iq;i1~l?|@w&6jCSJ+eefC_a~B@ zsea@7X}F*tkmM|w?^gKJXl*Rh*b>E%r3DRA_d>(IekA7<(q3R<36Z^Ia5sK)yf+_* z5v7gJ9IUW-J{NV`xB^^gjw7qZugdySOMUBPg}?6tu-riq4X$>FsqXMxe(cwKb`1DG z1A3=hhcz$7BFVV&V%Xx5Q+^o0oU(e6u?k!)J3r_ZANByX2pQGC)`dp~_($~Y25^3= zJm0H4CWNl@rg+uTp_aWS=dbYpJusu4B%f4e%kdaiKlfrd)nOQzhyl?5LvnT+&xUE& zH%6EP1KL;YOozZ^E&Ek2e6|e$GGv^_cSP(5us|ja)?@v5xX8gKGtS{B(91~Oj_`&G zgu*UH>E3S?6!!DThOp90z|*KWWs7o=dH)Z=K#pHCMa^>VZ5SBXXI!>U9<0Vq7nd)q^O#py7=R~K z&lenhD+5M#5>CvO$W9}2JO*ESDi}%n!Vz=fqbS^nV-y#Hh|;H)Wb1Wkt3;UT>~A=L z5?*S*;H_7`WHoPvve5F|SgD!j7;pjEEIe0}a5I7M@k$u_b;meX)pxq?Hi}=(+96HjTE@*WaC|(;7L?+yVul%EDK=_PM z25w4<2kh~JNH=JUL>SzbDo$Y!9;ywO;Ik}z6^(I0H_$qg^%Iv zGe@+T(_7iw>FoZrarzAF9lfDxHwo_}NqJ4nmo6L@R`y;!7l5wlyWa5G)`VKb63$tX z{00ivp+JC(4CJAvd84OV0O##KSy{Jig%*kD*x6+A!u|cV2RU_9Ime@G)^66GTKH(^ zGL2$|&c?x9@o#z)l*Nh;2zs)LkN^qJfFoGzHB7`b#aA!8C>R0v6a?!mwx>j$X>%@((o3L zW8fzX2H7sbNblV}r+9-~VCg++D-;Z*-!YOCMYY{&bm~Ljj#P=xxEQ$!L#8~tu+|hAtH5Y<9bnY_IKi6tkpc0usd7$> zdL4S<3K2?SzO2&tH!_bULhPme)gW3%CJv`hxb#vM&0C_c`$6#m zekV76e=;*js=v~%FYey?AVoN=x&krIj>l4VTmvh8jfv`t=%M{YZ9Y#k3VEk*Rl4(P zIokjZrR)DEC@E2+Hg#Ca;1PoB#nnc!*)e3xO`nibpbP1cvD6vn*Hr|NDXVOI>F3s? znWVFRhC#jYMpaa%Kuqpw0o%Ysbsba;AzkJi@MuzLq;xWWK3lp(DtTDM4tV_`*@nUJTN7l!Bn$YQiD!7t)d~-{Fj;;)C5+q!Eb>rXAriPIdu!Gw@&;> zZiPHanhteZc^?@wvIdyp+$}c;Z3|Z za|rXw=`C0wyz?Gbzb|qp*5}5r51hl2)1gBiv35r-?F&|6GxK^OF?p~&WyYu9 zi52Op31jhYUu4DE*21NCC(%1_xP*nY*?7h7J2K3-+nl;!aYPiclcZg1WrVZ1{PQX> zYcUW7&lKwK?~n%c+J}b=tbQDfoG znpf0!Q3}6kFOw=_=N*?C{T}{oF)zEDk`~8IkPl8Gk7WA_R_HI;owFp3<5E z*iBg{q|;jhpHjo7AXIn@xOL5gasgoyoFPbPF1ZFuJ>6Cpu|!WhV%l?**I`qcXrEfY zh^*7;AW{8<)2vn;#$;ZK?5{5uC3w2mK~2my(D~r}TkDAyl?Zr|PPi7*=$PJR%3al!UGw78HKnWmn|-TK4e;EQ$idduhR)^{V1+`26(nE*T1ar)IT8Zz>-yKMtG zB@t_+1s~j-uq?@0!m^gj&34eD#Pm=9g)t?2FTCer!`@8!H=r15k%)`L z9loHPbn${dx0P(nwd$PxfkVU@)Z+kkYn7=WAOqdYuHU48?o|oZvtWVPGxx>Q`+^@9 zbE1()dfm>7IrFY3d{^`+3LC%{BpcnvwbEccgaA9?hlNuMeR5smE>mh!Qj}a#vWUs9 z1-Sn`q9WA-5B9)xaM?liZdNB3pZ|q9l&rC(RmVB1$S)|W?%`<80$sV*h zdqiI&ry#!+IGQ;`pQ`x#W%5q0Z1ALJG1x_5Q+Rb2m7d)F1__-a3on4NC!rtsWEW;R z83u_UJKpg-w%M;#L6gN@(=p?Iw>3HsR(P~4O*#mFJ~}t^ICr1V)QZ7@rBXF4hzRqx zC}s5Np=G?kckyYy&();Cy*eJyvS3ikvNMUQ{4Z+h1v|&3i@?`jdRJrc1I!4R0#{{3 z4dNeNif+j=FgX14^P8WrdG!Mn{IHB;>oYqZ=ymd<=?B1U8mMYZhPMaIH=P53n45Oa zE!LUA@GJ@?>h7)_^F#ope~;`Qo+Cge<)5{(U~fkOU3ITDP3IL_qYbUDaTJHenTbGj zQf#BE9u(lxxX`feT~?+7-lMu|zaFsffr===ArMX&v$y}coBA9(P} zKB(sa0i$(ADsWRkfx$U-t-U1zb}y78MNe8dI_)QuX{tM|P2*#&=E9#W445H1N8y<} z!Kf_y`l36UeD5}$e45VGs{E>1;5nE^l%WBgjO0A0v1R>CsYOGTqXu2hKqiaOfMj&- zhL0X1C#~+u7}bt%(Va}qJ9t4t_|_!gf@Wj42lzw8dyikjqNj1y>Cw9*m*|k3s3eMl zeHej2F$P~MTv?Kmb(p!p~W%)8zuCEFQH&m`-%{G+0{uuSHy+AMG0+Uw}l!Zxq>01604Q#yQapI ziKl0;Ra-t30F6v1vdJ{8+1!kHjCGuERmBtb!s^`9k*!tUSz&?a1YLv)qYCP`bmC6X z?8sbk@*%q{uD+bKs1mL5(D+%>kXQg3;Ja#%9q!sw_})*oy|`nX`>C~g^Pz2Nb`AL^ z{ck(&Gj_nMlG*7Yus&q3tDYe?sCqw{clyRM>VvE!!GPySU;&IfJb0anTpoymmbdVv zcWKW(2YZ}`RSd4(jPgtL_}UHVi~VlTm~;*koC`%bLUB(R+!{P!hMbUfn`pHH26C50 zuimked{53)m*@5-O`Vp&wEv!n5f=CyI6qD-ZNLtZAn^s|`5%1KcF9fi=fVk{!&1*B z4;%rfHRiX;1A+*)gf|!4rUorKqUFzo=>5Qg7@3(QP$y53uB$@V^m$O@ooW^~j!ybZ z?rK53;o(KGOS*Dx4z8{_aZXugO6<{_6S_+ymF>I7KLtJ@skBuQb)BM(JoKZ>`83@< zAKVX{x*Yx?va1iJ)Js0of`i{Yw~~T!488~p#hg3qZ4cLD<@KZYFCN+44tAp-gONQp z2fZ@=m~CM17O5m(kZXn!^Wr@b^^SCy-CoSQ#fh)b-sE;DOK`ksslydo>1wt(#`Ua~ zqA_&VX+Kd+rKrC44(B8M`n^Ed%2is`DR=ScZ|tRX z4oCJokCiup_XhR$I|f`Bn>!pT1|pGe-&29SzX#P=6v$!g;*#9<9YaYIcdsr6atixg z8O0Z!haL)M*yfcXQ)DUbT337xv&`dWW1~5mF}@!48`R#Ck6=wSSq0ia<4t*jh6}Sx zH&+4&{J;jC56=X#ld6GdU_l9V;*CHFDe|G*HEBVEot>y{rxnZNfBv#6bEU5wZnb_^x zp>a>Er#+fHkMzWf{NRaepKURX3Dj5iazs5@+rI6X_{n~xkld!QPp{PH&VKS>iC;zg zQI~bcedD$8OyOldwJ9Rw?atYjR{^rEO%G2`dsy&P0Gw*#eigeW;TSaPs~SgCg|PI1 zH|SIlyLQLf0ir5C>jed7nq$IQ;XtqR%Q^N-XPURbFZh~*cndhUxHe>M4#y(o{8kS9 z-FhH(+jJ;Q@}{`NQoJCa$s|_Pxt~ry(VGYxN`upvIpbQ zPH+Z%6?@7tt9QzoI6xhJ<>og;-`^4eUD=T0B7xX~G+l3Y# z#Q61M*0p{X4I~n>^HV@|f4*t|0u$C=%k{hs-^aRZTc;R^8TU-C(m{YwgJz{*^Tuic ztMg-`a%E*k`*%KLCTwN2Sc<7?7o*CU@ikwUpXs6=`EPUOi8*d=rlM18#%Ab32kHRE zBE0|PL<4s}r;BCxO-?=0FE07Y=I_D-^g<+{o_*<~jNnuI89R7X+%*lBHD1;UC!t$q zYHKyDfue}XPD{!oqG@FqLXA@VSTt-Mfx z#abvPiM=j|-01L$(^etQUW8}mYL1>VsO-U2Q#)FVVeaD%7SVkNaMQ&iy=?7%WR$hA zdW(eb97U){Z>$h>9E(Z!h0a#C`ena3NiD=v8LeH$uHL|Ym#)MXp#cINXfww1*d0bD z9vF>FY{&%TIqzs$QOp*-n9sZWiDH*;)5X{3;~zGFBlB|=lXzeuoP0r@^J$@V2Hzlvuq%kLantT} zHDkM^=H4Q5>2$TBg?LeY_5APO5iVA9D0B|0omq&c`0M5y4ue}@4rX=bxLuh802(46>m8%wFaygzA1;q`b4d?mnLc^AfVPjo+(ACAHi+CSKSjPRUn9WH5hPO3( zM|djZ3HL$OAFqp!cx|<#F<;%O!FZhM0XY%kBqBP@LB@8*sG3CB9z6;I_6{7Mo4TBo ztbOl8D6-rD&w%m10*6cSs=&97_lLKQvow<8t$_@kgt_?UncEV6mrfR^kfp;yhg9Ek z%f^F?&MQ8FnZkwso+4n;sOvY0+BRK`BHPo&i`>9>k ze*)XlojD{11<712-pAe7U%4NBF8t<|6B3Ctoa&W7gskL}MQIRK-upbVz$|3lNygEw zA(*cb)R&esNGrkW)=t3mTEAu_e=eC@=hu(VPBiaUs&BPf`hn!BotrCG)8r-V5gpqS zOUlKmnsaTABZad(Zkp-~8UbmxmS3i7L2tCc45YXw5#r*5DLfWMi4}+zq1iC9o9cz4 zmzv+W26{XG>~Rg!lb1-tUchAKGc3LXqIp;gHOHU^d1-}|rNfd#j)PpAjSi_@8zAZ) zAD{MPPj?%(r!KB7No^#weWFjydae>F?jVNj7D&%T^E_>Te5e(i_?G~13 zET-A7iOo?p+-C*5GrZ&+rgao%cykVFX~O+Tozeifi(5rZAK!~CS{iBtmD%o)Mu+M_ zk9(PuKRlpf@nEU@^}GXSY4-TrPr#61UZupgOB+TSWm68-AJiq$@mJ4w{%Cx4Ke_-t zsVA1KLo!y__xPfNoXp%7fWY^G#dA{E z@6y`+-4lZoMILZs$|$jW6r8Yvjh#tzduQFh@lg+kknB88;0Vls)+_iYRblM9UQrf> zgg$H?S@T6uqz?z=*y4Q7UFmi7ya0=a>Aus`+N{w4aPji$B>_+6n1)F zJB(gbSpgTU>fUK7>pH)$>pT-S-Sd;lhorLsqI+3-)-o_dx8j6+hSD2Z1B%Ni2uQB_ zp&WResnyZNSOX0r`k3BxM~SmY8($7J(f^S~;gl#b#%-)|QX$Vi1H_Vlk5FpJOLrU6 z&@6j!d78)DuM@mm#_D{9F?Rm%A1DW(8?stRZ;2;@2L@M6{w<{W6|1EpOL!eThRlgR^O9Xl6B`zh z%}^~iaD2nou_<}h#yQB3a=1X#&JoSeGT`H9ba`Kj4SAJ}2-R9Z3o~%r33NB@Sx2gb zl+|Um?B$kY5%C7QI1#>8ET-%y4=MpwWOv7r!U~rRhY;8m_E=9CdEINO;Ibq zU>!!wD95hn+PBFf9nL?xAQ&P9Z4>p*r@DF7sHB3-Y@Cr@mQxFq$c!FikMuqPrRc(y zPas8E1>v|F-E??FNfg&F(4MeO^ThH8>W=JB!y{1m&J1Oan=nfLPz<9hv}?_3i`=wV z1%-Y6D_VlikN>4D0j~@)&E4CtoDR9%>jdEK*__=MMsj`_Agj&+nluj7y|I8uj}z@3 zu%rE7IQ9mJyyI1H>Wa!4gz1G$(=9d z`Rf>M8ISkNVjRo*k_(voK*}x)2-+CchuIj|Hj_;A9#ckJCN%@(lC{{p!<}Ty$}_{F z1xvu*4bkrytWH)z)eM}@xw0-@X&CQFZ#-1Fa}8?dwdn;%o&7=$6m?-rPD2lf0?w`* zfL&;%qgF`tm9HO$5~?B)R!$uW_7Be!Nx*Q_G59M1y@dwIZLR~tPk2l3xpymd%3ytP zPP}hspic-in=Kk?C*wg6li0t6_?9p(BL)bDysaYnc=k>K^|Aoyef`ElM~Ttx zrbn+Pp1EazN)(spy8Zo}Xw_#uspt3Su7JKEo$^{sQ@Ni)O0{^k+VWd*qh=Q>Tl50h zWB!xx9V9j&nDgKeFP@1C&fW>_@I(h{9UO)b7JZ)wHrS8Het=OSTW0%qz)*!aP8}#j zQq_YTOmQ@wWk7-{gLQCr%KId4OfK48tD}!-aANsAD41cSN6lZuI%yRx;>tb%H(23t zzQw`IJNV}VR!Bi=jzr$TUWp9tb%F3!@X6NTh1ajcey5>9^mmiF@%pT6640o}jDxn` zm#A8Zx4EvsE+T`(S8z4`9+B^NyayYGapRlNTVbg#ZKSDX znYwb0)oQ-I(m^wU{1Xgq*l@f3d>A%Opp+|_uQ;(&70~c%; zc0_)rRZ4nU)J@tU&mt_L85S-^UR<#YO@7djeN&HD z3xxoBu-Eqq?85Y6x>hcCmmZc9e_KQb(JDpn0>AeH61x8R4NcXRH?jLtQLq}@*;UJu znh;Sf3x-A5k}D>y&Y@sGzVc+S`47Gg5D(@g(Ks2Ovdf{~V}9#{iXI7J$3!kv_Ge1k zxgz^HcYrUE2td_!zedOT$zKLt7SD=%KEPtw-Q8`sQZvGKWNj%d_o)I>!;Rk?G&Y-T z>ZC?|a+2S#oNiTPn*t;hKL!}DJgxcQN$@{E7HYYWX2d!Rs7>4Ax}XT`Z{eZlLL~mQ znKQ7EHa!aXmKqf|L0+kzCh`F^4q(qv%iYsWQ|cpDmHP{j&|zm80_1PRXrUl2J;NQ6 z@cFn7d*lvJ${OE$CPN0iN3t=>!I}RiiWa42eo}u;&1ta#ytdvA;30W~-`0#mDGdG* z3kC2%0UBjb>?I&eg4~)?Vc9uwW?j+_zPCJ(0u&U0twPRu11w;&-U1Wf3RvI~uYgyg zxcUJ`?5oOY>U2LE3YQJp*E8Un(D+O7*RbPAPv&0%=;PnNz?%#w@tU+U&=?z$Df8`a zCE}f|?^gT%E}}US7eMi?mB8JU$PiEES>DaPsJpsAa4dKA&kD*pyrUgSB+-hBhBKhGK?hPvtzfhSVLJ}?6@>$Kn4=iCQq&0-wvuQILx`D$xa-;CXS97H?70lr-0KAW?3?a4TtB$%e} zNZy%;<`NjH->xL6nK}dG?kP|KK?my(k)d_1`tnGT9ua%CDMHs8mrPdB)&JiI_9l|j zPPJ-<7N3w)R5l_o^aM0NG(8Av2miKhAZgjWTWQ+gpHVUvn__`m3bvNU)|`r612Nzhhk!5##cA|&(CX40?Np|5a)zT&asn> z9!NhNU_ZxS(SbYUsOk72{UxEGibAvrM1vvnlRb9;jsdlAC!R!Z{AkU8sBze6GOVJA zn4wTrAp>j0fPfSch91_lzX4|lgeKR*kcwK~01e$XKwB95O1l#Wmg{ba<(upa8yKHc zb*G&@J!eNcu()c)bu5 ze*2$TxqnO|FPg)<1^kl8^1?{2E7=J>_B6EL*ONllg#5$sKRe8`kdG2})GmNRQaUYE z+YJ7^hkCI4H(%ftLp74p28#(g&nN?TW&WB1Giei$Uh)Yt)WXJ-AN`l0%!Y?w&&#Ww zi>_`;#Bw&DAEo+l@PS{4utA2X#5nCf-=k4^nh7MA`d%EIXI8O)fmmpV9b zn^diQ01gWx4M%`U$RI!oWRN+%nxPHKS!1&6fcEh|SA~Hn@o5-5#S5TUo`SkGthOL6 z;?J34BgRMfqc;HkOV1Q=I|I(0M1uz8Jg~iKbP@S87}PFV3b=O)Dcw-H#&^-Ap^T+= z{hD5CxpMGtp{auJD?rA2zLt-u8Uc!nQx+c&7FHN47x#-%fuzw$h{1`P_=3Gv=ACtV z1+|US49h8XCl4&TH#yuP(A!;#g|s%22-lf8#uxu>qLYco`Y_kh}(SzMIet?mPd zGhX~fNwZ9V9k8VRa&~+=r^rXZ$;EwnfLVh(oHhVVvK}{cs;5~Wozan_un(2ZW{Eck z$ZoQbr|Yo9i!Y`5|5*2`!8E6OGJ(_WX6lBF(_p3|2+qm0vg zhPoPj2NW7vVh<5@gnsc+?LwX!Xgw|!m+TmDH0O^)Go@|bLVWHxd3YUs4G8U*ON{+t zb%B(trT;2@I#jLeL{m^X=;W(84CWGK4}Lu_8c<2G480R|fS9FK$D-I-o`b9v^bo1; zu719v^@qTyAQtx69>4|z(Rph7wYfF}&Nob6l{)}1!-g15ZGwI#0F5{i0%K2pg4*}) zJrL68Hb)kTd{qHauA^1FfkC+T7 zv7s)b_!ySu>Yk+C{(CGg;5W!K2f-J51Dku|$zYRP%XgTu155A+Xa&K~>H=U&tw-+D zffNk5{Lh&g9jZC~tzy3k*L2^MNWEp(OzUHBILw;&1~0i zTT{TXgKAohhOhtX=}zx9-TA;}Ul&gi-VA{kOd~tJdw3G$!oyP2 zIarXJfcz_d91R8+?Qh5v!X9r<^xRXD1&fZ84%7E2(t~X|_kRl%g{?uh+ayFPa3O_l zx~wNV&|#fdK^A`Iqq@ac?PKuBTDkEfv(LL_7=|U4`qXeT?q>ufkEGvdjUXpEyd_9s z16+`oFPG^wCkeyF!KA2%h1Q@dl z=?)YI^7B6#o?XnB1S<#Rhe_hkk7pa|mYTjrKTAYQOn)r`rpv(>dL^3!Mhs%UjKWn~wBWU!7qv@}rVHjl9kue?er z_L~MD6Pt*j1&(h>2qo3uMny1yKWOGCab zu7(q9tV!AZ9h7Pk;4w7SuSkiMyEr*EBoOA`>}F!M`XM3DuN|zKUskLJ6D$+)A0mJr zJTOUcDoYK5yai2`{nTn&%i~-a$ROVdk|Oz~$?6>B5nGapc`Zh3Tg);s-P^Xk1S!3} zca--}O2;S@&Crd?oodlWc6lcyhvXk1;bg8Tn6)T`0=DpOam#XY`k9*h*@KM~pD@E3s~u!i#xKXPneRz#7Bg)${|4r1XCsQU6n_2Huz!$%(n@1gmw z@&Y |Y&y2L6^L5hP$N$^70RoFXb=hmXcn#95A1C2ZP0D$vJoSJoymSI+dDIuDf zZWep9WEZBjX3Gzq*v9$Mzs(7zh$ut)Mia=SQj8ISo?GJvwUN1U%*CXGrl0T}4)Jyc zO9d!@xU_PD9ReVTje7y%e+Do#5??n*P52SNiO5PIDBd-&f4HYLXN?9!izK=a2vTd^ zNuQ4dP&OJIAl0cv{n^seRjI6}MDICU*eU-o$|w+R1Txp%t_+FyuaOmwk1`baA{*0y z?ng#PZ#LEW036i>09)^>NSz;j`^?1JeDC*H z7@ed(qi^wo)TL+q_ie49wcLP}ItG_n0LW?Jag_E$|FMBK7_xxqJf7*tsnHyG<=4oY ze+NPL04>%q>;hluB~eGyJ#7#990m?=4Oyn&_Kz~`9o zdJTlQ&rm^bQRS7{;RnqkX4m?=fG`8s^9!)}i3Np;0`A=UfOtApIq9P&#?{iB37#o; zhcycUml=R+*W*2MAjgVkcx3nor@(%r5SUwn>MX<@T!BHkplM2-R=b~-z=oM@*?YXq zqBH$#{nrZ&vd6vR;XP0+_uW!`*?C<3Jp2`5x0?5JkIOSak7E~CpSkS~zZ||cS1rr6 z40BXrX*qHsd)2A!$Eko;w+iA^`D?Ag5VA9poCv(Z{GlG{do}YT58fUyqzdp57MJ6Y zoDWFB+yLF021-9LesXV%14;GniwE4nhF*xB3g1e)GUBZK(q2C}98j(@+{;m5D4Bt? zY;_a@6s&0k$LqDT%0iTad~Q|1%3yz67T)bazlz($n78&LKDsq4+n{?DxzPSZ8$t+t zpH^`k(wt|At?gC(e2vpde!IPw$MSaQEw_@d5;4Uk3YH;m!bFq`YfP{=>yyNxp<|bZ z*qOOih?HJ^4>&*l{A=KA-;UQSrrRCq6RDDY{=Hv%gvPG--Jd!sbjRZ+*DIihT6ZNo z0B{4*{AukCAv5$&8Ww`2zYr6h<>)1`)C9sbrtj+7~*^4?xxf_o)L#dh=-Da1qhwHFEoF;g%-2q8}`VoQ9Vh_ zmcq&F(6Og9QMwQUYKtkzUa@E>C?#_Z!lAA85HOFwm7 zF6Ho1P5x{0%kc3pNu70_8c)nVWEb)jcUMHrF4vJ%098^bAjGF19PqHsX#J`biOARt+U=<0LIGAPBWZYL~ z{U4gLlhh1)@h#0hP~3X#L8F0`+c!Mp#|~b?seQm(W$KAxML1bJpvqSL0LK=clmuqQ zWko$G;^(Qm@F0e`lVe^Y7M&5F;ArdBNIY7Drsg)i49e?41i0coP)<@%I|v;O@p#Og zP*h+^7O$vZVzNwt@Y*Mz9;5YyUGbdF1OGt^X7Mn7-D}feWv42f8ru%=y0rvFaFQAq zkehKK*^CtD=(bXqw(%F1 zAY#O3Xiqye@*;b)!Qet3#k+=-m@rM`ef1HHmLd$o6yc5y)11Gn$ud)cR#NU#QT$ZD zQV~?wTn_V`E0Hyal4*QiIMZL+{~?%5==cbw4Q)g|H|>8bhOBa7CZDKE6=dAeJ3WMj zefC43kjDHn{O0AZRAq*CRyPND5>Echn=l7R;CL}e!#xlyQhAW&pvakNL?hJGr|FhV zd+J>v|MR>x1{j)hFG7{DJkv0SZ^*GJ1ZvnP(Om|J0GvJg&%D&3;6S=n@7>PigD8*TmX0mD3SM!n{4H&_D&RFF2iUM zPHQHM{89ZkIcvxXYt}&%y3QADf+dFG4UjqM-AoMlC}(eqya0D<901~3;5`?86#_9t z!;0VF2?MZo+|XcOn*2QSjx(Df4>+8EaO^Sm^x?@bOZq?l<|Z>T;6^I|bmL!kBIKEM z!qKyIx`c0i{(@#K${3jtG$8z}y*s($4arKUyu_%lZmeR zl`1zi(hJ-;w}xRQ!#`e$S5e@{Vhb&>`Zhu~-CELnq+8T{RA;53du5cY z?Cia=l2!JW>=7zO35BAN%*>?B%(9Xsq4mG+yzl${_Wiy8<8btPk3)Ix`~KY5IIr_O zFLrYGzwgsO9|yjn!Zg8}N?-^ePFnCxJgnbTpok#`Vk3FM-w)mjRu%VM7rK9vQ#p7t$>`uSR5fg!MIr*oi*-% z9^Zd%oKzA4aY;~?85pf;sT^UHSOdni;}UEwxe69w5d6VnD8#SsRk5t!61HM? z#1tLLy|FQSQY2xrDTwNUNEhwZ6WGG2W4JAL3pPsPUs^u~wE6s(n4XQH3U&}ie5aw* zx68x%oWvHHkcw%wWSRGoG>m8jyrVw>@DMwd!9}ipCu)tGSmytCJzQ8x4~xjcv{p!s z;;_dSRn3Euhjs&|!xx}vH?Q}Ag)V-ZnGAYpm6>BGjef{ol0wLia2S$DcoP$zeh-{S zQIR^RlI_|#&c3)V{3C`yvIh(n*(A(QT(<+w%(sVkSgTVb&th5|x(4KYLG*I*Kn$%X zV&HLh;@!l&?70ZwZZ5+_;UKNx+Qj5S0di;>atL0{^(8_*{6TA0n>LgfAd8p2DQ_}Byda*1Et zTR!=JK1(V1HBat6=6iGzXtR=6%^}}fD3o(;97nKj=Y z4bZvg?p}I~B&T?yY>g{QvRn0J;k5&5v~NMbZ>MdXxA-C_Ba{FHM2ntxEgJpIFDy{4 z1Uz&b+k8K82|}~J`IT})1QaUQ5w)=?mq5-HKoE*Br~stK=@`3OB1}!tuMH0RdD$by z#_tUC-+x-D;sEag0B#JnRJ3L9zWoNGOobm?Mr`6~onZaB0l?2A7mp-<)K8W0k7uD> z;6Ww51V6}pSb2!@J$K=!!MNE&H)pY*K&#M<2w--3OP8a9qZPCe3a;G^fiPd)a3wWg z@SKc@4M`EVEQNcU$Z0S4^|wzyX1~qzrx~3<1`?1<%UGWOY?%Uw+LrS%*Q8ZU=+bW+ zlqLyOg>pxf5Wjh*I>CET>{>Cbgs6C@Owbhkdw)q9w>2@oc26jJ;h14Ddx{zR_ksj!bV>zgpFuB)OFu|P-S2A^K~h1+(y_D>Aq#!#QI3@Q?M0 z`j3FA3Pt#p$_1)ERRZF7NhEjTa6a3NEIPKm3XI=o6B{zcU5!`p>V}z{%wmF{qjeJD zF5`kk%GZJSt|WA;_r`F`LymBl-p^T8znVZ{eWivmlChFj6Wo~WZn)O!N>H3V!5Q~; zfFIa$tvQ{SiJ5bSoHFPp$8i_x?P#AI3Z)1%xcF>sAdS6q;#ZT_HNgT7P0G%WaS8Ow z>w9mZnHp3*paH1oE-#IR?VGN|$|uNUpLvf)f(UeOL=g$@7_l;Z41sz~n^O4Vu7i@d z)ZVQMOrT^0&;rs!b@q?T~M79WR7^k)|9DYFZ)e;GKN4s0`rWvvRXHOsz z7aNgET0M%Lik5(sHGh{`*^YORwPmQp3(I3%Nyq<{===49>X*c62tTr03zlXQZz{aB zM}{jWsPJL$?ymH*^hoaiGsT#Vx;jW9Kx=^*j2IJ~XS;t_zc=94jaaj3?<1|mX3(2BW(pUmN_nEcJnIi8g?8g{E__)Y-T8eGJkdO=!mtNp9t<*? zPX<^W^y>=s6RSj0kkVigQi4aZrFOoNnxdUkBG3)PUKrk#F->RXf4xo_x4y!mK0PI8`bVCUKY3$A~D8UH}}!531|xI8gVUDSf#a7ir|<*)VE=d8oh1)lX0dV zyYTlMZ%35y2i?Z|+K=QYEm-*#mHr{Hi@Uz!R$pWZRJZRyh(zI)`o=p; zfdedE7M`RvJ&l%YNRG#Mp|?IA%1KEMR*Zm+X`7|}3#)8>-O$i6*7V)G5^AFUPy6`a zQGW6i4uXwbr~32RxZ62Dz+aYUaE-fo<9Pz@x}>IPeE4xpBD3shdeLLQWwzZhcE_aR z&#+%gNSw7AmUwK&lIM=dqXX%5`_73tQ-L?$%_6u7FZqT$Z558PVM$Kibw-tT_vtxX zb`OjOm86Re*)1qQmX@XOm2`VUPz1$^IXQ%UplN&uT2JZi(F!9+s3MP=-$^>+_8m%I z06_Q*uB$-M(O6;--py&Eg{=_>&xCCgTKFg-X-iHc{NSKk*o^?STbrT*S`phb-NPgQ zIk^9vU@RpR{RcP1F2U<-|3LghVC-9H(Qd2Wg*#nVD8q#c(+tPzhzZRH!|xB$d3TMj zsm+=H!yJHQY+SrSml;La0#QIzL2OEl$}~O!g(y{G%w-4qAJ)qBuo-}=IqT}dx*J$t z)yXdG8Yp4gcI%-IfaLF;d#r{H0?wKBuv(-_R=nA8!}C9%xW_YqdTdM-v=jyt%B} z;)>DV*@a3^NH~(?NVe>SyJt?dy1H$#pM*lG;EEKI9lWy z-x(JGlgrX2SW17Ti39^!SeZHA6ePM#VhAw(s!;yNV`qEsD8c7uA3Rr005-SdNdmoId_%!M2~yxk;PA773sql|Zf? zUidp5)LRm00uf&zn+#`kID1fRpir55>K{379X1DkWDPWbB9p-p=fd3EKq}Y}5E1^y z@9x>KzBcZBZc{&4Dlv4mTWp5zwcew{qZ(6BF6J#T@g&&9nSUW=5xl?#nM`i|7w`~D zbae^&pNrj*!FmjR11weD)HHI~!XsXkO9}*hmStL3Zv&DCV2VVLMPExSJ%VlDpE^zB zK3GinsAg>7`gN>>9=NG-)*+U`*zu**{p&Hp03qaxs)GZvLgTWx4)351y4>MkPW_Ax zipM2W<2x8j06E#|d>)4=_mPTjYt0qCBNNDjKZ(ZlaGW7P(S7FD%g=8AGTb8P$M;kG z_!ktgaohsZ;&-h&w>pf`JO(;B(@>3_uxQu-22jT~oIJyNI@3=u^QlZ@^R1~0t;x6# zzB|moaJ&#ScM&3`>-h_~0clEcnua(j#|c?j&9qFJV9?cG2#jtx5V9+aJF4_&PhnBn-4$}`VLd5V<<9n z_uKP7pZQs=Mk03wH?AJ0BDzgKkoapcFL0GPaJ#jl26;-TEh~arQG>= z>DM=~`lVFt0JSOJKN6WzQthJw*l*}en1PMG0k$6oe`MJ#ilTOzE#`e zM7X{B7a+rrsUFSIVRW!x|5;Xy`6h5Lwc=TwLy6y;#}(zsso0Stf5LS(UZ?oa)QLQCo6M16t^;#F%^(SmtO;pLxrnrTj6+x69hY&ESKNHCU zK*BLwJgxhN~E2sA%v{hq1?H)n4-bGlJ2&1ZLr~7V{gxnO> z!~IlF{JUeC`UP@2z*$jCgvG+=qqMg53h~dRQwWyPu@&X*QJjjtd+?$vd%Q>bwy*#e zXUF8zV5PABrRj~({B@EHPEHt#s8pqqPvm3}GbC6D0K%jT)?l?zpHCQs37XaML<*0M zcP~yCD@Db259m0x6+_wj6d*Z`o`FP%o@?mMld>u;7tvd+e#cz51arcPb`}Ub?Jp0wgi&~r zA});xL&E7eG^IY>XoeAbG`5I`q*sIb16R~t(JLc#dR$(MJv4eoz@MnfpMVQRR;HK? zw7Xw!Yt}0~^-MYs584V4plU>J0be-#zExA8(wSr!-(+m=0bJ2vkb2}mIUe?fAVdqn zr(G{bcNXMuuUf$(++=VNtUFdE<6hyK7zN^RkEQOKQicSod%0Ovng}mnO2*fHa6pBA z-@!f#GSuZpQE(x{N* z)6%^;5uks-{b4FQ%3Ty{E5|NcEvRDYlU^|sZmALBs2#@T-T^o!0>XC>So$QhSs%C~ zf2#+&%t&fp!|e64GbiAjz-v&|Lp;lnwML8?p!QL7a7YCh-fYu%?ah77)*2X=LZ?9K z_Tk_zy%DEk%xY-GedLp>6cT7(LO_hW+ZONHaf)_P)Jt7On54f$%|9^*zOhut0c+(} zKRk+hN*{%gZL;&ZW<$}BKk2lt3S=q4PblbGLuUfXv-3H05)`(pFQ1IJG$M9Fu&em? zK=e&UUm!F>p>0^EBEmA!LYPCxKsbE62r_*w;t&4vD2)x+3?job>X^|lzZCW4og=4n zCERnxoDJvl;H`8%|2dhGvj>^tboIRsf>0n}A;dr3CROuSo(z;Gq@=iCOwV5NLk`-n zSW|vt8QaN`zwKlGyEAaZ<6uSww}s21yQf+6yAiOgdB~&zwqp^TXd%gg?r??*ZQGHk z$zna<1LX*`#4}VLW5cA^^Fe*365;4e8+-KlICP6)@G`=B0(kP?xkyHBQ; zz@w4i4$oEfCzw}(c?hqWr*Dj#vqD8WG_HsSgmD!*R*m>~ghU5;hVCCfi^0^wtw%$R%=%I?zKVFsnVE87k1u*ARh91h-GzQ(* z)cga1rvx}qv*%j{*&sIaAL#_gUbh6tS*2Ikzw9!z-+E3`cNaS1Hxu-aO;Z-E0BeLa zoDs=5q1mrPCnlW(BRwa{v-X}1q+TneSGdkSTn>W4H+098Z(o?N)MOOHz(0Ltd1>mg zwj9#qiT7}ce(bY&kW zmJ!(+`ICygfBe?e!*3@+CCPow0lLu_c21$7m0<+}xc>@B0gr!c=9U9DUy;O;FqzCTk8!6CNK zSPT}DU4yh^!<9tIdC+PA+%UY#A!rE_z7(+Vt&nH$_K%KG z;86F#arwqk=GHxqjIXTkzrVf;1v{iC`d^yAdOz#(Zw_CIYZ(3v^9N*}e0nOGhJO^Y zBVaL-QK0^n7%d&Y7*w&cIui?bG!{X@JwlZ8Z{bMMX%ZLN|nP4Il0t5=+SA6-%6}-#&y`=<)Iy9Bws^><}_b*Cc7t;TTJZLsBn>|15lYUPe3j2365I8}ntF$r? zw~WN)E;HNAVbsDERh%jKO`Ul#!d&ZexE_m}LdDY>QIu%k{Q@MJ$LGzSW=FTblT%_5 zbx8b_#Wv{l9jFo8hu$yR2V$z*9bv{^=6I8;VqCMY87L6{;gf80;SW@TxFkFOBr+tj zbztBf-2Q3b6%2R#HHFDTFk}6+v-*fvtmco;9LPwRP5@%JIS9F+p3+OjMF^)7w0^;EG@x#=gvaEARfIaA8_E}N=-B5RZup=$p2+yVBU9^0p!EbPRpn1VgqTvG zYKTn5cNijozj_?TDc`?{cP@Z%?Qhu^d=sq}{{Aq>^JWmEK>Dk!c?>3`oaz@Kv|!_v z8S$M6a);AFLu{*Y8e;ow<#|vU_F)O>OpWlUpa76Y`Y4?Yup=?hiD;W(-5yk;rNpsJ zT`rY%cB+}9;`9_L#vV}LjRKm1w6h!eKI<8n3tW2nT_=R?-U7sxpXaM_uITBG|feoO{9PiTa3iz_peuaF&E|w_sBW9r+ z+Fc1;tjpqx`zV+S<&j#zbQ{`479fYfIUGXF4UyeP{6bTG9noNNmwg;sy#*^U47N&R z1AYX<_PWddNY|Pj1s7S;lfL`b0=f+-eb)Wvt(ITkE22mCMClznNA!Q@jJl*qM(gk~ zU(l=Lwa;;vMZufCJl*^a%xdjT3t@r{s1NXjUhnmo#MH5(C~zBd&kxOs!=v!rTX8;v zrW>#8g>xTI&1*~ftEL6niw#9eUB!t)k#Eow!zF;qLFRy$x7ruT*cCSuN#~nF7rUQ? zEfvw)9zQ@8r@a&aC>U_2RiJtR4n=b472jFfmmZk%i21nq4luNTb(52v& zV!EdDJmuI^n2J(2)s0JefJ2oRwE3r10w%lNlPAmC#UQV~_P#XZj*5k1C{eb3i^}jQ zfKGsrWavg~0xdnFHR5sLE0*E=wpF`?$OcB(eH3^#NMygUz-^*=8p2mzu-RRKV@C7q zsqb^o1H6N2ibf2-f#ClXuPr2`CO)~;PRHaP`|whtchs<_JADGwIT4d+7$tE{^HUPt zx$~5&0ZeWn1MFx&_a2p@V=^rMv0~>9bx2#l$En9Lub~EkR9rBu9`l0;zavFE3wrlK z;&NYj_;84hgj`6eYl31OaB%$|qJjPaArHx{?{OT7W{D{g=DG59;Q6oyEwD)^wt;-H z10FWB^(C-G1;QnT_06E(9=^HFD7kjMksqgi2AMvkA*$mT%_+M9q`6%XeN>%P*#(Mv z?rPpk-+VJ8Derk8o36n^FnTYb4ZwaxuelipP*Wg`oq6;$tjhGwh^JsbpvYp<`tD$c zW$n*PPVNo13`zfoS+LD!tvX{GSGsooX(bIIEyYYk2qYw^kP_Owp#;ww5T%H?kjbFB zfipP{9gSeF*|R+%WTtSPh2o}0@&yGmCs)#OEc5Vt;EcNP;P1O*PhJA<)|i>weNHAT{9&$ z0}!jHY4|O;cS?mFP>FCb4L>gE3d8HB;4gd^g1X$Mo9M@rpP*aH>-S5KZ8m&-GQ2}{ zdAp}9Ks9Y)|8xca7*l!W->Tdq&hWNRFbcWOw6!$E4t-X~DUphr&_cs&au2?m4lHIL z!W1uIshx&TlzxIG$8U%;oHRnPGxR)Kx9?xo`pj{*I%cZyVY)!BaT|g1SrGKkJ0~dT z6pd$4e^<*qu3y{&Y}yzydgX&?P>$74YE>qL+YO4+H|}a=-&}y!11I#l=?T;TK7n~# zC1e^4-ZPCr{0QfJ3Oh-~?2<(e#fvZ|VjF}*OmtNr9uWzt{Q-5E2=SCD+h^$3Agvvh z&U$XLRKv5hv`DCi%lrix@6u=!(~+D-)1|k`vduw^9ntgWc9cSl15ROab{{-K5(H?hmE9hI*i3*qgCc(QBv;P z8H%CM(sF#@5|<1?aT7`QHEo=Tm_HpZk<-!bP5H*?M4c(uekU5O6FwpMlwKzf=9K!r ztP9&|a(u)x=>)GplH1})x}kV*v}5zNqkN{_ALZ^08LHhsZSMOg|LOP@lr2aF}y z?8P2Tpn0`GIId&E6a|GY>{yTRPDvqGT@D>RBYo5X1&X2yllyFarp5S;MdIY?G_>U^Omp~DWI!5jRmm2h<1lm;M zu`5#VVCqmHE|~bDjTZkYtL=r7#NiSFKb`drUr-w^35_^S6o8~um+51+bBNLp2e8AoZxuDj`6`dDjOFbsB4PY z@czfX3tzg}BP{*5Qf>c~2(s$~lz5${JJ+?xQDgv;bJvAjcph;78{N#v-Lz3l!dX8- zt|xAbc3-}d7(h;#{vEQ33=ks8Qo6MC>;$>)=JZULCNqflWXcte_K(=4dx~W_lSIPVmYpd6BvQ^W1Vbhl1pA^qa{n?acqT!;^B|x{=y$0eL4dyHUG(rh4O{@4srox3g}Ewm8z05Ruw>*R(rZg=Y8P^yl&Cf z5ZZTw<9!pb5wKf@BjaMkUf*bfi3)N@o2Cq*4*`%G*>o?l%@w6#fLRa?N{i zQxLvdB5lQ*@~%%E+RY-EA_{PLKL;X2^VsRX(x^4X%;?E}))n3Am=R`yj_Vsq{v+g! zhQ(6^rbZA1-=w#|R0;O&_F0*mohbeD7P(?@JUaPOX;!Zhv%4{pfKOu4*Pq5>p&gKj zsJ67LB=bH_7>ROyb^Cl7vf~9B7rF4j`SE4(NAjfA_BK!oa;ef+Q14(=1#DjxPLsHP z0i#?v@!dAYKA=!wdlN8yAzW31PSxQH!SyvLr?DP=2^OR8R5y&Rk90LoK@JB^bTN}B zw2A-}l(oH!qOfSWPa5u!4_(WB!Jc5##rI%CNg0@x`c>}Y-U#)Gm{#p8DJUr1>_Pzm zHz=);SCaOft92c@)%p_^IrE(T2lfZoTsX!$n43qqC&1+tm!Z(9l2*!bXlMS-jC7y`KoMNa7xIq={oK4 zG`;4h&S3+^#%>BY)Sx-jl_gc6=9!cm}x+>>+FtX31-hfj$M*@E62m1k$B@ zURDSo@|FPjZ(K|DHdd@I`HQdknsVmwb7daiZ_m15G57<|x6?mHwITu(ef$2r^!?iq zriBAe1|T!){#^yK^-6d#lRL&$SPq_r<(vB7JKT>l!7kT<2JHjq#8jVppG%gBAm9vv z*y?fMdO$-_!eHj5X`rE&*xVyS$04Ia{z0s7O{1H;@}=9NRWNq$Lp-O&Dbv>||uNzBPi!1U{UBTd?5WxiCDae=^?Te`KpBWXDzysk*mlCO^ zI3owK2mnVTVZ;~{M0l5&)!C;|o>AKJT2{tNL)Ku^YeQBE{9M8``)Kiu9}@@r>K!;9 z5YI{lfHA8ERD4%++lg{(3>XMCvj7Nxtf`f{`V5I=~FFT17$SAHv*Q2 zpPRM351TK?KQ3x?_%~X>CGM8_KuVE}FPX(+@!1Sa2xtnGGvFt>1=g1w7f${J&0e8O zYexyFvRm1p|OYw}DES{y&m)PZQ{bF769Z+zal^994M``^3v>-E+^Jr0q`Z{KBt0DU69{0qPy~(o?@r_Q z_hGu>DwT4r>a0sZ(=)KW@*I{$bPwrvoKwL(y)n<bhodz~vul?UU$2Rj3J=d9{2)cr~62+YvqKw0t?V=FcHfmB4e$~*fl7Fk)2iRMTGin=U}ZtFS9ZzQp?Uk>u0b3jwv zTDa#Bm^lO~?2#MG>%)n$$i%bGGDGz{BpPZrO8}mrzilM;+5$At5>)KMk>)37v`IcS zB=?%WacHTZ4o(of*R*-?PVTLS#1Z$#hGM4bWXB`3S;o1 z%{)UxAEd060#g^dV~vDC7GWLfXF=xRNVYOje{XEi>i^=7tAyvnT_V|_QlBwI0Smj- zVhnb8Rhd$9>2%c|TJbY$^%`Y$hY76lkxU+gNSBH?-7--SH>q6dj^v{5m#!^6 zux3gU*TPkG0hoDx3>88QpJ6?&xcm4P@Hve`>b9YsGawruw|krf`FgYBncL}Yh<;=J zVf#TvK{Nb8A)R1`q~vw9mdcn{%Tia)>FtRB|k?dP5D6Qdn=<1CbC>(kBJl^|Pr z78l__+7D>0`*Fp2>I9+}+_Ug1bNM$0-FdoycnjHDeqC+wH`^3_&fcUFb|9A8>C{C& zv3rmO>ZuT0J0NH6tbVxC^IK2!51DF18g)8%5|*@`f59{BoIh`K0RT)G!#T=Zev-a< zv5(cI!myO~o(8Wl2)7J}_Htu3I|0fu^(nzk2|rAIo1Og)SP~%-=kAKnLIiP$1h)L6 z0Inn!X;i2PKx8^)3iQum=d+gWMpx4N-D%IJPgiyyQBa40%5H#>Usc5*F2ZH`!2wX6kZfZRQr>_$BA2Ql~6W0YG`+^e^%8X&8=R%Ebq4 znx{8n83VswXjj_P}*F#udxwe^TT}K(0qKAXM2YTHSn8g_vwSgx3}Z%|ff-51>YQ8KA}1s-q1T zYJlUCLz=;%IX9gno`?C~Y4+9n;$dRdeSq`_8scl~ZP{TJVewaNPoO!4H}mn^#8k)3 z|1V{hVnc{9x*QhYr7t`}+zfXWc`-oHVRE@lc^>fr4Sb`Z3w{|h&ZyHvt#A3r~+ z3rO2cIePP59{{$NM{iiah37T}Mz&Cs2Ub+2i6$&y9SF{SWg{_cW>;?68!;_<7Mplo zVgJ`raN^^xgE$K$$(e+PH}#qU_198T_Y-=(oq_sb_JrY2Be}m2_m(&`*m*sIULK;^ zH6DXDvTxw_1($}PueY4+xw-qxOWr|GdQi{SAgB0=Nu@-`4;%?k$vmyc__q2H(lgI0q1J&C+S;LhlrsfCsiFFOAh5 z%_wk zfUqJNPX010E*!TE-$K_vddO|-A{AISYj4j(LAUed&gLK&qGUdEn?o;8qA&9{GV|)5 zcQn<+B9(pWvLhxWKOW1{EL(W%+p|c0N}+uyr9pd z3v*+l@G$BEy9{9WU4=q5x->60K75rF`qoG%)-sVBpdF_$rGk2HZqNCg0@3-8eM|uP z`0U!};?Yc)RHyc)T7~GtBoFq7CNrTZkRJd@Hw=%14!9g|1a7WQH$VP-)4MO$u=w1w zGo}C5XkZ$y;jgR2VV)t%e#l#vL5nn8m*B(he3}o^2Nb9nTB%2`nVx351A$(pi1942 zj#gP415%5xyr9>Ga@Kz zQ%O5ozSCXjGn}mVUzJ}Jh&UDQu&Gt=FQ>pf7~#QZ2Lr$@S zA5(U!sF1Q61cFqrigk@_kHN0L&(P-T<%lf8ys%{J_3Q=~M=&nNErm>?$WEPoK!Zqz zAD`lNQn>E$1kwjv;r-LkbzeTVW)Sf*+j|R#@0?K773zp$Qj?;3a5F(qDTnNX75Pfx zTgou^18Un1`b5;p%3C3@l`voU;kOPzzZ6Du|8?PWi#!_gJe1lGp$#`Z?ZOI@`w}1x0X`QPX!(rXGH|yEC15YdlMr10Yl8JZFaML1;gN%|VN4!c zRwxgsxOAMD*b|sv*}$M)e#Gdl_baNxa7lPeZ>&7ze)l?`4Xc0>z=O@L6_k0pk}R9X zxAbS>5zjI{KV-&En0r|q)X5M1lulIligFdV7D;(WuI?g-!kVyo$+a1lWHLo4eJ|++ zJxO97)S4S4mll6h+!}IPAZ;|ZnDx#>#?hU94+*|;jEq~4n|M4sTd5X7vkiKY-K-H#KJ0Vu?@(0yyeydOJKqyteu7fq@H%8K%nP+W#YeDUlx&TiA$5Yc9XwctrrtmL)y6ZMpV?X;&!p7CH z96zzQ)gAb+?_M=!EV!iDK7;rRQz8{D%SX*Hn1(4YC>GXXu`jn($SJow0EkpSZT$%PFED&z@Q>g-VDoXkHA}!x$O_Ac zuT6XwmF47ueD)1t)a0>712A4$fgf(@==%Z76YbnBK!^EZy@J~5agoy4-zH*z960P@ z6jc3tfPp5n$Rl9)%MVb%11Q;_Ej$lW5`;66e18PYnpz6cflU+5As1F!Gv+9d1ny{G zbxQv{!SmZEXHbOvC&cx@4?#26#~)wtEUc>C>r_<(MK^C7Hz>JW0GDs_eSf&|R8TW` z+6jsblYIkh7#on1nFshaqvoO15^RNc2?P*9)v{J38nxWR=zrXWe(8L{DD>uD`R30+ zi3XMD+{(AK5S(^Iz!As3f1O{>sG>E-9sy4d*dj+E3TIzNMM&Ty-hdRjQP6lG0oz4Q zu@Qm-zfAVv1{f_~LBBex8SYH;_)C}^OsB-v1Wjw&(Rx88eK3KPJoO3!?x_=E1ASZ+ z)p{n3^^DhxfL}iQZj4=ync){4@ufnD<^Vye1v2^X<2_y+)>;ub>AZqyrO&lxumvXB z-L3gJ@%ZS?Qyu?iCV^4O$HRdJ3lPamKSQsR_VK`S1rP8RfII{XWtl#CU%bm*eg=TS z6o-$#h25-|xKo8}lwAaYZodh6KIS=0W|iWcdY&;h_w_EP%1u_5D9wF&C*%}mz#lS$ zABq8OU@FOUucBGreQb=w|BC)>S_>jSu;P- zFj8zqi5Nf4d0-07J=_h%JMSX<=ZEaSc#=K;<1h2~h40^uFpcnyPH@013D7?T)yRFW z@7{nKK{$dHM+Q*&9Cz+{I|J<_^Xz-5BBYYPV~?AOU1G<9i5?#Aug1k)P*fUmvs~jf zLl{jbp6sA>hw_RrpTCrq$;TD&9#53f@NlGh@!?agnwBrxTEsJtdh*T5oG9>3k!Hw} za5ocdMAFw}_cny~E)^i9Kb2WmALBfQY}ku4MHG7TB?J@jfZheKH&|Q|)wpE}RHJ-< z;%B_;)MVfXdeSvOLA1Rtx3$<Mta;`1gN0{6E@yuI*VHboGm ze+B>xRzY7lYDOOdqXc2-e1Ja|6cwabuOvLEr+%Aoznu7=a?wo_2R8>@2jXiMUKy>- zUsdDpr73)9ET98vu9$Yai6;qS-)?zB}3ITY>fzGdQhA z?Nm01uv&cVuLW?QtT8Bn&8ZS#8FQ_lX1n$Mi=31GE@JaAe8{zgM(bVG{GkfCxMvZa zWm1uiYt;hb1e4;fqp8^=POmItAUbQhFSj(mCLra^gENMyO{-fskeDuF7 z+q+zN20_uwd^C*=4?6ztR6cSPA0wI$vb4X7X-H}ThEtp!`czyfoRVpZo2xH=-W~&&v2Kp9UK_N0%*IQGfJW z*wI^aI!vNxS%#h9GZidNz|0IQ=vFw4=Arnov<9qc29vNGFh@y^9*bQl{{~9>u7O0N zg-)gB*j=s=G`YugQ=Ccv6=o}wpVJ{9>35NBN|o(3rL;A_?ZM^r!d(=g->h4B57fk( z>Z?U#KXHmgRtM`k6(dBDNJ!nFRV_88~o)P^-ty6a2c^m#0ch#Ia3l2I1A!P7|J+SmY+T7;Ky zqI%tmt6IPTV!i`yg+i4I>X(ash9vcAMC-6A%C-e?5B4JBIbyg4(kRPDA7XB06SO{< zvg4Xn3c1B{PO5N|jNuYxb&I8wR$tvw58lRE0gX|l6hfv#;mV4I?ISGg2@D z=N@f=CgA%Q_M*kV*z4um~U3j(>2 z!y4Bf!gbvKtaLOX{4)kyuEG!wM4PAJhvjhk348QHdTCx{YkyuRDSJtBt$jOLw2R*4 zRjLF2->_xan`WYf?Z6*Ji^P9~HcE5x2Xw9AY{k>HUOVy+1up{p(*v;>y3a*0hs@c(jyeA!w&Tnb50^8-?XTqO}JDa zU?>AC%^vh*_vzZe!WRMR1Pb;mNlbA~6<|9vpwAAEe}{`O%n=a$=kK*2@4oBKIQv(u z*w5@U3@AAXL=1yf9P=Y$L9(Dj0_TKPsH^NaBwJ4@ z>_TJC4o&`7v%GVT+0;(2@4xE$IrNX$bUROSSjBQ2*RoO9fNKeQQV6VRFg<+2OqI|q#jRjH$ z_E+Lr{h6mkL0-7l8O32oyef_8-o55%2H{0iovF;2OD1BnhyKs zJ}=EjJr>-}q)j&mfWe2$Q5^NBAHoJs5r@t=Dw17knDlJ>D2>L4GhzVXppDC18+_+1 zlDh<>=I+R9SXUwWf+dSLol94XjQ^6e&Ie7l`(3WgS;@fIUep%kB?HFPrxqiuDv(=U zIuE^rZqNCs$=w6~0Db9r&$Y~(gn(vB)_Is?wQ6i;4lKcZmG8urdjR(;#2*=(EjM^PN_YwsZPa@hcF?0 zOrSi@+WY~mwuG`do`E-1)tSvvLBTFP3NJ>&9)F6jq0odvrJkdiW&jgWoiCHXlz7ya zh~=_nCR0YtHl3m{=Sq}`?@*t|G+SKglDh;T1>0cuk#m<4xa|U-;w=u268@p!r*LRt(mLa=}m33<3L0fcRrA4JI z&6q*TSQ}Pc(Z3C*@5?@Ybd)7S?bV91+*jx&0E$@Vpe}K0iz#&yj^`WXOcQp`4M&w3sJfh-dTqm`UrGkK^+dY z&DnC|7r-R|MECF!DYd!Rlwps!UtPO@??PJLcN(!EQS==@cIm7~|ECumzzWf`dv~gR z;#VNDN{$U@CiSYqXUzyFkg`h%V);5nFY;@QyZ&%_c>|PTMu|aX)|@7TwKq0j^wSmJ zJX0u7kt=^11!on!H$_hs>1r#x#Rb`>NK)%_FN=+T2K*}7y;2}Y#-ESR?iNeqb;2W{ zWjo>7b`2VXWb~>@Rro50%^-*dB#fZx9fo2Gf(BAYfLBm|agX2BLgP zfx86HBe$^XS$6G6RE$=wM=@ZcfEzpvn;H59y_o$gwK7Q~lCSm9{3kO=_vt?vYD}W# z`H^WolL+d$PXJLlV5cb!bqrlQg`EL#d1XrNCnKzE1kes#;>*?hUlNvV@^ytNDOk&%o=*x}aG%#?(l>>IEo z4tJ08yM3W}#s~T-VJLFI^>MqQg2MrK@+4?~s-tmd6Bkw%DDHHTDg_&k&VgqZW6~(5 zo^G_}y!MD~O|JQ-=sTqppxwU{yTPW&F7Y|5lG16wKHD05xJ0rPHn^?{Z;CobSZ@KM z#MYeWAXY3PG3!*uc1*-xgFrKUsZRgSl&CCULr&M;1nhO`4*~F+j&L?Y`v=^Er0+V; zUbYX?T8O#^wp59aSWJ#HWW?#bdGw%@oRMx|jzBx?u4ye-KBwa2h^8BW6;;a;dRSH# z+lr@iD%R%4m=k@iAo$AgID~=z8x0XNeelX}r?&rO1h8+d{3V&|n5(dQlL=JcUW9}k zRCOeV{br_T(vGHH!X)by$UHd2mAI3NG-k@8w2#2j%?qGAietS&@-VNK%VOx(MFZmZ z%+9GTxoWq|O%d8gIKXBhay8zNBtV>yFMFZ?MSsR8Py+>O*)AAH$;(yV%oRCU_r;uF zh+f3sPSiDc8q5OA{IvBBPl`0iN8d<`%qs=TpXwg@T~m&)cJD#s4`Yb;FpZkM#*1a? zwwZd#TpRaD?S$~l`?&ClqqCdqIp=DBSAM#rh=&ni&-uc3SH2YE0Dr5LxBZl%EALY< z1`~u%WA^`fH{WE3e>pv}mr|ZokhYAZ7aX4WB@BSm%4k{JU!3BZhB_7q&-K{0nMvnm zKs16(;DSZD%5kfZe4AMPg*r4M0^WDxeWeo!Y&lTVFg)-$pQI*P&L{LX_{q2aTu#*d zMrFPZ8JaNf3FZ-uqm{2Ewdk+RiJ~3)^EJy?K)^mvp%~nKs^9UIV^apQ`I~L#Ac})} zR_#jjT zW=i$BVbbg|-oO`8&OZ9cruOyv&fGL1+a3-;a|hR0^<{y~1~Ah@2B&BDFmiz#$V{8s zLTFQTll1?w^%YQ6rd$7TIOqXUDW$s+q`MB?jerV*bccdcA|>4*-5n|jh#(+{NVi3a zlz^0k5{mlYuip9Yz2E;^i{+Y`H8XnN^St}n`&YYukrz8a1OMghwr`^VxSwovrMdf)F6{W9+4x_$Z6q4E%iJmk(3&f- zEM16biTXm1r5U3WE&^}2@V-UBR+xBfEe(AQS;VLCkv8>g}H?Q z)0TLs<@W2}M>0<9+}HYVtym3*9`u8t5FxQo1Gvk215gCcjvPQst;jyO%f4FEdzF#S z^8zl@cZ)&?`KY1QX*2}zM9oS=l3W!XjV?H8^kKo`+KZ2^zON0R!{2(sUCL!p!hfPb z{U!mD2_|iuu4e(ORGJl67SP*#5J17T;uzHR@~zlEGRXA5>=-xV$-0L@k`Yh1b9&jj)K%> z;)6l2B_cD3qS^7-%DHkgDkz`W2e#$_Dgy}#64lbI5@+EOeI-cFotsiH%|c7e*u0S_ z{$?-`Dh7a(iH2{g%r{A@g)6HG3WRSKfy-h4_~_;`;4T?wXHAr}}i$>55 z2?QF{?*gum>vt^0n<>Vt+)uxO6QlZuHl=Pg`6_>ife;+0c9xFc=XNHKze%lps{Lmy z`WMsTjDgAXo@q3cIXya2xCZT#f#4*gRo^tdAUq_J^7~^2bm1Q$m(z|jXz_P}gC^Px z%jh=K1bLI7jX>{|+4(fA05H9y=MPQXa$)1CveS;e@IOrw_kupY1Y7U{k#o4sh?7Qx ze>j4FGSP1>TUym7`=2t*N*?{1=7f;?HqpjoX}F0O-z3!`tW+@baI zUVwjljYMe)kApHxb?{u@W7Qph!WmL@SZky{I2LL{>(AdkMb_ z2+trzPq+Yi=!ZDLu(8uHzX&2=QU?UKJkE*S_IS$^*>MC}YJYu8a}?-9-8q26WWHI* zw_|xY{_6yGv=gvuXOUm;5D?#mf9Flw0Pqs{!n{Ps80M_Jjd)f1h` zl8onfzj2(TNoZGO=$z!OMZ|MJ;0xoC@eJVI&Wi|u?R=nPEw8tK?Q@X>u@!)rB&P8y#7_(U=fc(h8KpY%2_WLd2Ig+o>-|YA5%V4(`X66{ki=}LR{QpXyXNSC1f0Ia z%8TmsfxqfpX_vBx7r#Ks&Vkf7<%=KN@8+960xAf8?>PH)v+LYO71-V1aIfo!<%zpE z(-FN2_5ZeZA2?=s8$Pz&9#P(RFkK7V{SCr-_BI63d>Z1b;|{@*pg zhX8k7BG)%;h0VB+2uejh2X<8Gg%jlewE|Z0$>pz&SVt@SNzYR;;X)Bo#T!J-v781W^&RGgqe0QCYm zL*D~Lpc+T5JXj<`@FEFnLVuP>^%IUaad0d^EG-0+E9Od}=ziV_$faE|>m@xPW;`pp z&Z~F#p|^Y3brHvLwC5Bz^`-;CmAcXkCyBH53+S$fKhrMQ1A!sL5IQ~yfTsnb9$!M; zMh|Cuh`mx%(HIr=7I>IDwJjbDj$Xzhh|?ac3$v(o7y$&XFI%kUi6PD3?j^hfsv)P4 z0927c)~i~e1nGQ&tj>XeHt~Bw)1PGPd_JzUBT(vG2VxBSTY#w@DAt{{I(>fkk(!&c%t%Qi7TphMmOR!8%IeLKy3y zk)(aEyQ`0@_x?M`jY%Ox3!2R7d@W^_iwC z&<+)zl+p~0C*v4~UM(~=KQs5+#U&ka*jAi0nR;GyU)py!ENmVexJ7`8jul^KTg+v> zGf@TA%b++_Sq+TQAO>e%1`JyZe+N2sjlli+dcOC7EHJAC-MB*+@-;IH0+m?+RiD{O7S2x(PyUwX!=;53w;J`zv=oEiu+ zt-byb%gjy3m32=86dVL5aVJ)?%Evl2=YXGs61%9`MF3oh`^#zbO?U}A)#gAt^I&RT z4B^yon!QX3`s2qZuA|% zd+XzGXoTr}N&ZD^eDG&v|avDet zCb=@4o8>iRGofk+txmGfS+gms`NRp-~Rr%;^Wmj4cGO-aq_K4O1;OWEjq+O#v%GOof6pw?&Fw zXgldBoa<7fYd9|Dvk29F56=xEU#+b-KvqZmX0C-a(qC6!)%d>K`<}kC`zKBq!GR&C zKJ7|zE&Uy4_`B9<916C)G7`KypU2q-_(LQrT+{9W-dO66Bq@egYM3yqq3q_j zaB>F|vUi93%t5C2&cqol^VAa*eezTdQ)LMtlTWp02aw}5KZa2Fl$FmtYIC}R;#o;j ze%v}F7({~)JMR5x4eqT^U(fMfn|U15$bv0^A_8m@QK2=s1d{$Rj{V;|hLF1uD&a3U z3BhL{bHHd5|J1Si^p6_w2d4QaPp4e@4I?D1&k=|9IpxF!8Ly!3T;ALPg3-AH)~6T9 z)T?w&6`vL(23^*PUIZ8ENJB4l#|>zx1X`Uiop9E)w`ut2>Vhp4YQbmZgucN$r|A-5P4^B+!_)NA;sC8})xQ)Gf;jloCUH*gD7d?6#69L;0@iqCjC{_<&=k!dnl{N!In9zeb@?gZddPXJWMm2Cdoq* zB;^7Fpq?=+23?|KT~_{rAl-W3$HLVwbOu4=(FTbZ_pG&7S=YHuT}S|J>S>0pj7Pxq zJZ6u5V(}&&Vh2ag5`^1rzK62m0Mx-C&h_;&DbGyK*YFRPUn~N2r=5of`(G@d@Iq=| z$3YU`G9=%bHhvPvSTq2c-szcHwy5vgk_uNt`oh~ec$Gxi3nGR^Wqk$zQO@SbW93fd z$m?6fCEApRqdQ2FQgPtocy8$wd^wH~hZQw*V{_&atvO-Ch0jhd{$vHL(iVxZ-B)=q z4#Cs`U5+;WIOpg2bH4C5GC@K|34*f|4r$_^R=c^(INM(t?(uc#x3PH(?XG}E97*B( z*g;h|rj)cB<$uwrBGIEc5@($?@d4)z0pOmU35!yaQik$CdPJ=2NT<+%VV<`pY1m zYt@w8FXP?}rh7(_gSPDbi4v@ap(og^$*B{W1<#g-5ix~D5>asz*b;KxuNX93ew^xX zc<0*s!K2&lD>?pK%?Ekc^KU-?k>C%3J)3Rs_a;|1+D5)VTJhc0w?u-|)i(opo~YWX z6tYIXGQa)dKJff7t3X|}1|6`@5mkcyGU=VYAu*7R&B^i|NgOlauPFup5rJ zdFvHGl1cfWNmDwcCA%Z?x7&>bnTYVGtl=w${U@41dRV2C*Zs&6lrP8$?S_=I6T{(#fF?<_efMIf(iBKiYQJ$S zC1TgGC-^|g@|M8PD{;*= zt7xHGq|^z45&H-^Q2=mEYMf(MW9(+wBw?*K{9lOKpKcUpl?e>_1!EUb(;z*tK||E< zsIy;%Mx+(HJ^*ne3hJi24{E(tH~?$FaN*XOvwuGHnS{f`0iJU8sSA^FNh!`|S5)F@ z)hD(At)`iL+Z31eQu3`sYAbj-(s?e|L347<3#=JT&?$FrrEee_aNz;S6v}GnfeB8h z!n!G(rMn)4{Cm&VA8A%(u7ScnkR0sKmQvVv_We!bLIXtrBsR{TPo^mC*m@KKg_8jV z;dhMV9dP~p{=UvPO(f=EP(?=hG0=XK9X>Ob&WUNq4k48g6z8hWhd1`xTTFXbjyCiu`$EqL|iFVl6OWQBOYM!A`IS)z^%k0F`V*fr z98zW+J$tR^yERu`SnaJ|ewS$S#N`kZ?c9TIaJ9TtR5=aj%z7D~Rzj`JyyDO$p#&55 z!1?<43+>W*ybR}*7|GEYeotUwP#x)Z=}r3lFYNL`TVTe_NGP3eki61wP*D6yqw=4? zQy3Kg^Jh+d4&<(?mMZNp28h{Sy0CLp6VPf@%)*L2y(0)|0xpZ@2_9Eg;mwg^2PnIY zRhXrb{QTfUSPmn&$T}9!Ant+VOH@7xySTu&%QCjlD^-GW9ff$enkU|5GSJ)UbSb@?n*VAR-Nm?11`E zWm2Q_&ORPIeXHQC@X5jOy<}1hCytzcMswq)Kade5k0?1095(XaLNw2$mrC)at!B=( zs8a-tkwv|N!VH!lBRhv?$ZxzP<6-JB?|e-}b(SvcRo4Sp)iVvGFP@yp4aNlqgNB<- zG@M25pq-Zfm33*!gEl?0<)szja64qwNzo5R4lVQH8>)z(Z8h=g=ss5tJMi?6R`7NB z26;&`-aojkXnbS5^rn;Sxh1}p*J`yE#_F5{VFX`rK7(_DR@#TZFbE3X=dtT$)QNd% zKD+ea=&J{5Sga)rLt)LLNP_kii029FfPzbsm%07IbrLmyS>*;*gZ+ZdgvPlUbr{v8 zYGV9geHgJXirOpwSVZsazbY#u7dk^&MO-88W;(0`jg!|>AyOy1U(ya_u*k|?SXfFW z(3QZn-F~<*SNYPX;A^gN0n=Xb5ff~VH%n&muZr3|2nP- zy-eLMLFnz78F=u)Cksc+nXiIoqVCvxpObmC{q9|btsfiw0>NY5kxYZzGHxxyqT-8< z0Q|tLVq)%nzkZg@_G>#d!SwRqfe8@Q={}??-fu4PpZze$OA_Hy_KlLlb(>j&%znD1 z)M-Y&gL8ED4oe}Aqb=kVIQ~u=2fQxUxXrrfjOSTi1AY3`WrefWKridnhZymO-2ZKUx zZoTjQJ6+w;XNOz<<+R8!#qW=x)M9#8AnEdz6gILmWME`%`^l}W#UC=JqjfKs<$u`kU)w0@ zpM}TcFQgxb^v1{8&=B4^^UujzMMskMnKE5N&92owyv{lnmU8<0WbyYPA4^6pvg_mN z(m%g^2ez1$CUK{(Lewx9NC-?Kj*vHTn$|B9l?64U%V565Ie2v`3wHHk$O**b)T-1SZo@8}Zp2(jv(hA2MO4p)1&PmnEi zhRzTA&TiG$Znl!ASbl&klHu8thp|Pd%O`%(vH!SB5r!R=uy&Rj@CfJLuk%q|V|O_1 zZWcL2|Dx@uMI=+gQvz@f_Iqn9^x%8Xn~yfXm?c=1Y+XT)r>(zEK*la1L~JuPQTM!5qWo0#|2k zQvO(Gq(MfBelwzJ_D;V39I#_jKJw~jInY2l!Nd>4X4{Xgmg0M%-?>l%>T~x^u6f#p zv0Vu)s#-DBl@SRz+=gm#nUQG0e_+Ig&6a&i^y61#?W8DX+>S!9zn<9X5b!oYv(4ei zZx$96btuW4S8j`sjyXq@yQKNdeuVyp|Kiq$D@n}^IJkd+e&A4luI-Wt)EFHUl1INj z-nm{;{~W^AY+`&i9`}F`Z|#AJ#50UqaQvh7(%Jtqslck-49-aC=aq<+U6!8~-Otfi zH=LD2TbGyDcptO1SL&zA*w_i%IgLiSVp38Mn3PnpV!LUjuBUH^jCDVd633VBJc>DW zPy54KyLHo#TH=;Ld!fKK|H#*|Z?hD|K4Abd7zv?I!EkygupRx%?h1bwaLmMiTr?7sSv*Mtci9AhWJ$l>n2 z%>aqrNAd-4f3G0*rxt-nZ1>f(7?wSWA4X$c$PR%Ig^s#g$N}`B!_Cx#_$%J297f

_%yJS$tS}dIX!2ejp_5^2&Juge13htAlIzz|C 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

DoUb$;_{O>rWM6so%r(+e@?6(q6z1@NSn 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 x{iZbQFiK-SqE@e!lA# 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≫P@ciP{~0@#0F98f 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 literal 0 HcmV?d00001 diff --git a/doc/fluid/design/dist_train/src/prefetch_parameters.graffle b/doc/fluid/design/dist_train/src/prefetch_parameters.graffle deleted file mode 100644 index abbb7089829709cb5fdc337b7f9521a34f7d131a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7340 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 SIAQ+w>Hh()#a3&Un*abY(xtKh diff --git a/doc/fluid/design/dist_train/src/prefetch_parameters.png b/doc/fluid/design/dist_train/src/prefetch_parameters.png deleted file mode 100644 index 433ea3d612b51f325c8f87a58bb35216667910d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167376 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 h^E{{WRP9UTAw From 282aa96731d2a23f93f8f0f26a5215fbe809a1a5 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Thu, 15 Mar 2018 18:53:39 +0800 Subject: [PATCH 008/130] modify the picture size --- doc/fluid/design/dist_train/prefetch_parameter.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/fluid/design/dist_train/prefetch_parameter.md b/doc/fluid/design/dist_train/prefetch_parameter.md index 952d2bada9..b3e2210fdf 100644 --- a/doc/fluid/design/dist_train/prefetch_parameter.md +++ b/doc/fluid/design/dist_train/prefetch_parameter.md @@ -16,13 +16,13 @@ Prior to reading this design, it would be useful for the reader to make themselv The execution of `lookup local table` is as follows: - + For some cases, the parameter(`weight`) may be very large, such as 10 billion features, the entire data could not be stored in one trainer's memory, so we need to partition this parameter and pre-fetch it at the beginning of each mini-batch, and we call it `lookup remote table`: - + The processing flow of `lookup remote table` is as follows: From cc1e94931e1b4ca18219df2af7e5743882d41f07 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Fri, 16 Mar 2018 18:56:02 +0800 Subject: [PATCH 009/130] update figure --- .../design/dist_train/prefetch_parameter.md | 2 +- .../dist_train/src/split_parameter.graffle | Bin 7054 -> 7065 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/fluid/design/dist_train/prefetch_parameter.md b/doc/fluid/design/dist_train/prefetch_parameter.md index b3e2210fdf..7cea942279 100644 --- a/doc/fluid/design/dist_train/prefetch_parameter.md +++ b/doc/fluid/design/dist_train/prefetch_parameter.md @@ -32,7 +32,7 @@ The processing flow of `lookup remote table` is as follows: - **Distributed Transpiler** would split the large parameters (`weight`) into some partitioned parameters (`weight_0`, `weight_1`, `weight_2`) as shown in the figure above. - - We can use `round-robin` to distribute the partitioned parameter. + - We can use some algorithms to distribute the partitioned parameters, such as `round-robin` or `hash-name`. 1. pre-fetching parameter at the beginning of each mini-batch diff --git a/doc/fluid/design/dist_train/src/split_parameter.graffle b/doc/fluid/design/dist_train/src/split_parameter.graffle index f020c0291e99f758f532d2611e72003478656750..db1f8dc2c7888d0f71337142bcccd0faeb09efe8 100644 GIT binary patch literal 7065 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 Date: Mon, 4 Jun 2018 10:31:32 -0700 Subject: [PATCH 010/130] Add the argsort operator --- paddle/fluid/operators/argsort_op.cc | 83 ++++++++++++++++++ paddle/fluid/operators/argsort_op.h | 86 +++++++++++++++++++ .../fluid/tests/unittests/test_argsort_op.py | 49 +++++++++++ 3 files changed, 218 insertions(+) create mode 100644 paddle/fluid/operators/argsort_op.cc create mode 100644 paddle/fluid/operators/argsort_op.h create mode 100644 python/paddle/fluid/tests/unittests/test_argsort_op.py diff --git a/paddle/fluid/operators/argsort_op.cc b/paddle/fluid/operators/argsort_op.cc new file mode 100644 index 0000000000..aead4e2e00 --- /dev/null +++ b/paddle/fluid/operators/argsort_op.cc @@ -0,0 +1,83 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#include "paddle/fluid/operators/argsort_op.h" + +namespace paddle { +namespace operators { + +class ArgsortOp : public framework::OperatorWithKernel { + public: + using framework::OperatorWithKernel::OperatorWithKernel; + + void InferShape(framework::InferShapeContext *ctx) const override { + PADDLE_ENFORCE(ctx->HasInput("X"), + "Input(X) of ArgsortOp should not be null."); + PADDLE_ENFORCE(ctx->HasOutput("Out"), + "Output(Out) of ArgsortOp should not be null."); + PADDLE_ENFORCE(ctx->HasOutput("Indices"), + "Output(Indices) of ArgsortOp should not be null."); + + auto in_dims = ctx->GetInputDim("X"); + int axis = static_cast(ctx->Attrs().Get("axis")); + + auto num_dims = in_dims.size(); + PADDLE_ENFORCE(axis < num_dims, + "Attr(axis) %d of ArgsortOp is out of bounds for Input(X) " + "dimension %d.", + axis, num_dims); + PADDLE_ENFORCE(axis >= 0 || axis == -1, + "Attr(axis) %d of ArgsortOp must be nonnegative or equal to " + "-1.", + axis); + + ctx->SetOutputDim("Out", in_dims); + ctx->SetOutputDim("Indices", in_dims); + ctx->ShareLoD("X", "Out"); + ctx->ShareLoD("X", "Indices"); + } +}; + +class ArgsortOpMaker : public framework::OpProtoAndCheckerMaker { + public: + void Make() override { + AddInput("X", "(Tensor) The input of Argsort op."); + AddOutput("Out", "(Tensor) The sorted tensor of Argsort op."); + AddOutput("Indices", + "(Tensor) The indices of a tensor giving the sorted order."); + AddComment(R"DOC( +Argsort operator + +Performs sorting on the input tensor along the given axis and outputs two +tensors, Output(Out) and Output(Indices). They reserve the same shape +with Input(X), and Output(Out) represents the sorted tensor while +Output(Indices) gives the sorted order along the given axis Attr(axis). + + )DOC"); + AddAttr("axis", + "(int, default -1) The axis along which to sort the tensor, " + "default -1, the last dimension.") + .SetDefault(-1); + } +}; + +} // namespace operators +} // namespace paddle + +namespace ops = paddle::operators; +REGISTER_OPERATOR(argsort, ops::ArgsortOp, ops::ArgsortOpMaker, + paddle::framework::EmptyGradOpMaker); +REGISTER_OP_CPU_KERNEL(argsort, + ops::ArgsortKernel, + ops::ArgsortKernel); diff --git a/paddle/fluid/operators/argsort_op.h b/paddle/fluid/operators/argsort_op.h new file mode 100644 index 0000000000..a9fe22c4ce --- /dev/null +++ b/paddle/fluid/operators/argsort_op.h @@ -0,0 +1,86 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#pragma once +#include +#include +#include +#include +#include "paddle/fluid/framework/eigen.h" +#include "paddle/fluid/framework/op_registry.h" + +namespace paddle { +namespace operators { + +using Tensor = framework::Tensor; + +template +using EigenMatrix = framework::EigenMatrix; + +template +class ArgsortKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext& ctx) const override { + auto* input = ctx.Input("X"); + auto* output = ctx.Output("Out"); + auto* indices = ctx.Output("Indices"); + int axis = static_cast(ctx.Attr("axis")); + + auto in_dims = input->dims(); + axis = (axis == -1) ? (in_dims.size() - 1) : axis; + + const T* in_data = input->data(); + T* out_data = output->mutable_data(ctx.GetPlace()); + int64_t* idx_data = indices->mutable_data(ctx.GetPlace()); + + int64_t part_dims_prod = input->numel() / in_dims[axis]; + for (int64_t i = 0; i < part_dims_prod; ++i) { + int64_t idx = i; + std::vector idx_vec(in_dims.size(), 0); + for (int64_t dim = in_dims.size() - 1; dim >= 0; --dim) { + if (dim != axis) { + idx_vec[dim] = idx % in_dims[dim]; + idx /= in_dims[dim]; + } + } + std::vector> in_vec; + std::vector org_index_vec(in_dims[axis], 0); + for (int64_t j = 0; j < in_dims[axis]; ++j) { + idx_vec[axis] = j; + int64_t index = idx_vec[0]; + for (int64_t dim = 0; dim < in_dims.size() - 1; ++dim) { + index = index * in_dims[dim + 1] + idx_vec[dim + 1]; + } + in_vec.push_back(std::pair(in_data[index], j)); + org_index_vec[j] = index; + } + + std::sort( + in_vec.begin(), in_vec.end(), + [](const std::pair& v1, const std::pair& v2) { + return v1.first < v2.first; + }); + + for (size_t j = 0; j < org_index_vec.size(); ++j) { + int64_t index = org_index_vec[j]; + out_data[index] = in_vec[j].first; + idx_data[index] = in_vec[j].second; + } + } + } +}; + +} // namespace operators +} // namespace paddle diff --git a/python/paddle/fluid/tests/unittests/test_argsort_op.py b/python/paddle/fluid/tests/unittests/test_argsort_op.py new file mode 100644 index 0000000000..6995621ba8 --- /dev/null +++ b/python/paddle/fluid/tests/unittests/test_argsort_op.py @@ -0,0 +1,49 @@ +# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +import numpy as np +from op_test import OpTest + + +class TestArgsortOp(OpTest): + def setUp(self): + self.init_axis() + x = np.random.random((2, 3, 4, 5)).astype("float32") + self.indices = np.argsort(x, kind='quicksort', axis=self.axis) + self.out = np.sort(x, kind='quicksort', axis=self.axis) + self.op_type = "argsort" + self.inputs = {'X': x} + self.attrs = {'axis': self.axis} + self.outputs = {'Indices': self.indices, 'Out': self.out} + + def init_axis(self): + self.axis = -1 + + def test_check_output(self): + self.check_output() + + +class TestArgsortOpAxis0(TestArgsortOp): + def init_axis(self): + self.axis = 0 + + +class TestArgsortOpAxis1(TestArgsortOp): + def init_axis(self): + self.axis = 1 + + +if __name__ == "__main__": + unittest.main() From 2c2120c8a269080a883ad4b1eb8022d71f3d2cf8 Mon Sep 17 00:00:00 2001 From: Yibing Liu Date: Mon, 4 Jun 2018 20:25:25 -0700 Subject: [PATCH 011/130] Remove redundant code --- paddle/fluid/operators/argsort_op.h | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/paddle/fluid/operators/argsort_op.h b/paddle/fluid/operators/argsort_op.h index a9fe22c4ce..51d2b89f94 100644 --- a/paddle/fluid/operators/argsort_op.h +++ b/paddle/fluid/operators/argsort_op.h @@ -14,28 +14,20 @@ limitations under the License. */ #pragma once #include -#include #include #include -#include "paddle/fluid/framework/eigen.h" #include "paddle/fluid/framework/op_registry.h" namespace paddle { namespace operators { -using Tensor = framework::Tensor; - -template -using EigenMatrix = framework::EigenMatrix; - template class ArgsortKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { - auto* input = ctx.Input("X"); - auto* output = ctx.Output("Out"); - auto* indices = ctx.Output("Indices"); + auto* input = ctx.Input("X"); + auto* output = ctx.Output("Out"); + auto* indices = ctx.Output("Indices"); int axis = static_cast(ctx.Attr("axis")); auto in_dims = input->dims(); From e896926b9c3c8bed544f92ad82d42daac9fac0c0 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Tue, 5 Jun 2018 15:42:29 +0800 Subject: [PATCH 012/130] add unit test for dist mnist --- .../fluid/tests/unittests/CMakeLists.txt | 1 + .../fluid/tests/unittests/test_dist_mnist.py | 208 ++++++++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 python/paddle/fluid/tests/unittests/test_dist_mnist.py diff --git a/python/paddle/fluid/tests/unittests/CMakeLists.txt b/python/paddle/fluid/tests/unittests/CMakeLists.txt index c33539f6b5..2f2e9c96c1 100644 --- a/python/paddle/fluid/tests/unittests/CMakeLists.txt +++ b/python/paddle/fluid/tests/unittests/CMakeLists.txt @@ -52,3 +52,4 @@ py_test_modules(test_dist_train MODULES test_dist_train SERIAL) # since load cudnn libraries, so we use a longer timeout to make this # unit test stability. set_tests_properties(test_listen_and_serv_op PROPERTIES TIMEOUT 30) +set_tests_properties(test_dist_mnist PROPERTIES TIMEOUT 60) diff --git a/python/paddle/fluid/tests/unittests/test_dist_mnist.py b/python/paddle/fluid/tests/unittests/test_dist_mnist.py new file mode 100644 index 0000000000..e6bc56cce1 --- /dev/null +++ b/python/paddle/fluid/tests/unittests/test_dist_mnist.py @@ -0,0 +1,208 @@ +# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import numpy as np +import argparse +import time + +import paddle +import paddle.fluid as fluid +import paddle.fluid.profiler as profiler +from paddle.fluid import core +import unittest +from multiprocessing import Process +import os +import signal + +SEED = 1 +DTYPE = "float32" + + +# random seed must set before configuring the network. +# fluid.default_startup_program().random_seed = SEED +def cnn_model(data): + conv_pool_1 = fluid.nets.simple_img_conv_pool( + input=data, + filter_size=5, + num_filters=20, + pool_size=2, + pool_stride=2, + act="relu") + conv_pool_2 = fluid.nets.simple_img_conv_pool( + input=conv_pool_1, + filter_size=5, + num_filters=50, + pool_size=2, + pool_stride=2, + act="relu") + + # TODO(dzhwinter) : refine the initializer and random seed settting + SIZE = 10 + input_shape = conv_pool_2.shape + param_shape = [reduce(lambda a, b: a * b, input_shape[1:], 1)] + [SIZE] + scale = (2.0 / (param_shape[0]**2 * SIZE))**0.5 + + predict = fluid.layers.fc( + input=conv_pool_2, + size=SIZE, + act="softmax", + param_attr=fluid.param_attr.ParamAttr( + initializer=fluid.initializer.NormalInitializer( + loc=0.0, scale=scale))) + return predict + + +def get_model(batch_size): + # Input data + images = fluid.layers.data(name='pixel', shape=[1, 28, 28], dtype=DTYPE) + label = fluid.layers.data(name='label', shape=[1], dtype='int64') + + # Train program + predict = cnn_model(images) + cost = fluid.layers.cross_entropy(input=predict, label=label) + avg_cost = fluid.layers.mean(x=cost) + + # Evaluator + batch_size_tensor = fluid.layers.create_tensor(dtype='int64') + batch_acc = fluid.layers.accuracy( + input=predict, label=label, total=batch_size_tensor) + + inference_program = fluid.default_main_program().clone() + # Optimization + opt = fluid.optimizer.AdamOptimizer( + learning_rate=0.001, beta1=0.9, beta2=0.999) + + # Reader + train_reader = paddle.batch( + paddle.dataset.mnist.train(), batch_size=batch_size) + test_reader = paddle.batch( + paddle.dataset.mnist.test(), batch_size=batch_size) + opt.minimize(avg_cost) + return inference_program, avg_cost, train_reader, test_reader, batch_acc, predict + + +def get_transpiler(trainer_id, main_program, pserver_endpoints, trainers): + t = fluid.DistributeTranspiler() + t.transpile( + trainer_id=trainer_id, + program=main_program, + pservers=pserver_endpoints, + trainers=trainers) + return t + + +def run_pserver(pserver_endpoints, trainers, current_endpoint): + get_model(batch_size=20) + t = get_transpiler(0, + fluid.default_main_program(), pserver_endpoints, + trainers) + pserver_prog = t.get_pserver_program(current_endpoint) + startup_prog = t.get_startup_program(current_endpoint, pserver_prog) + + place = fluid.CPUPlace() + exe = fluid.Executor(place) + exe.run(startup_prog) + + exe.run(pserver_prog) + + +class TestDistMnist(unittest.TestCase): + def setUp(self): + self._trainers = 1 + self._pservers = 1 + self._ps_endpoints = "127.0.0.1:9123" + + def start_pserver(self, endpoint): + p = Process( + target=run_pserver, + args=(self._ps_endpoints, self._trainers, endpoint)) + p.start() + return p.pid + + def _wait_ps_ready(self, pid): + retry_times = 5 + while True: + assert retry_times >= 0, "wait ps ready failed" + time.sleep(1) + try: + # the listen_and_serv_op would touch a file which contains the listen port + # on the /tmp directory until it was ready to process all the RPC call. + os.stat("/tmp/paddle.%d.port" % pid) + return + except os.error: + retry_times -= 1 + + def stop_pserver(self, pid): + os.kill(pid, signal.SIGTERM) + + def test_with_place(self): + p = fluid.CUDAPlace() if core.is_compiled_with_cuda( + ) else fluid.CPUPlace() + + pserver_pid = self.start_pserver(self._ps_endpoints) + self._wait_ps_ready(pserver_pid) + + self.run_trainer(p, 0) + + self.stop_pserver(pserver_pid) + + def run_trainer(self, place, trainer_id): + test_program, avg_cost, train_reader, test_reader, batch_acc, predict = get_model( + batch_size=20) + t = get_transpiler(trainer_id, + fluid.default_main_program(), self._ps_endpoints, + self._trainers) + + trainer_prog = t.get_trainer_program() + + exe = fluid.Executor(place) + exe.run(fluid.default_startup_program()) + + feed_var_list = [ + var for var in trainer_prog.global_block().vars.itervalues() + if var.is_data + ] + + feeder = fluid.DataFeeder(feed_var_list, place) + for pass_id in xrange(10): + for batch_id, data in enumerate(train_reader()): + exe.run(trainer_prog, feed=feeder.feed(data)) + + if (batch_id + 1) % 10 == 0: + acc_set = [] + avg_loss_set = [] + for test_data in test_reader(): + acc_np, avg_loss_np = exe.run( + program=test_program, + feed=feeder.feed(test_data), + fetch_list=[batch_acc, avg_cost]) + acc_set.append(float(acc_np)) + avg_loss_set.append(float(avg_loss_np)) + # get test acc and loss + acc_val = np.array(acc_set).mean() + avg_loss_val = np.array(avg_loss_set).mean() + if float(acc_val + ) > 0.2: # Smaller value to increase CI speed + return + else: + print( + 'PassID {0:1}, BatchID {1:04}, Test Loss {2:2.2}, Acc {3:2.2}'. + format(pass_id, batch_id + 1, + float(avg_loss_val), float(acc_val))) + if math.isnan(float(avg_loss_val)): + assert ("got Nan loss, training failed.") + + +if __name__ == "__main__": + unittest.main() From a158bd9173d745b4969e39fcc1c00681a791d251 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Tue, 5 Jun 2018 17:15:18 +0800 Subject: [PATCH 013/130] fix ci --- python/paddle/fluid/tests/unittests/test_dist_mnist.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/paddle/fluid/tests/unittests/test_dist_mnist.py b/python/paddle/fluid/tests/unittests/test_dist_mnist.py index e6bc56cce1..e4d39c8b3f 100644 --- a/python/paddle/fluid/tests/unittests/test_dist_mnist.py +++ b/python/paddle/fluid/tests/unittests/test_dist_mnist.py @@ -27,6 +27,7 @@ import signal SEED = 1 DTYPE = "float32" +paddle.dataset.mnist.fetch() # random seed must set before configuring the network. @@ -147,7 +148,7 @@ class TestDistMnist(unittest.TestCase): os.kill(pid, signal.SIGTERM) def test_with_place(self): - p = fluid.CUDAPlace() if core.is_compiled_with_cuda( + p = fluid.CUDAPlace(0) if core.is_compiled_with_cuda( ) else fluid.CPUPlace() pserver_pid = self.start_pserver(self._ps_endpoints) From df7a1471fd1c2c003a8df1af152cd1da28f7f568 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Tue, 5 Jun 2018 19:21:35 +0800 Subject: [PATCH 014/130] fix fetch mnist dataset failed --- python/paddle/v2/dataset/mnist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/paddle/v2/dataset/mnist.py b/python/paddle/v2/dataset/mnist.py index 9f675bed89..2b959c48e4 100644 --- a/python/paddle/v2/dataset/mnist.py +++ b/python/paddle/v2/dataset/mnist.py @@ -112,7 +112,7 @@ def fetch(): paddle.v2.dataset.common.download(TRAIN_IMAGE_URL, 'mnist', TRAIN_IMAGE_MD5) paddle.v2.dataset.common.download(TRAIN_LABEL_URL, 'mnist', TRAIN_LABEL_MD5) paddle.v2.dataset.common.download(TEST_IMAGE_URL, 'mnist', TEST_IMAGE_MD5) - paddle.v2.dataset.common.download(TEST_LABEL_URL, 'mnist', TRAIN_LABEL_MD5) + paddle.v2.dataset.common.download(TEST_LABEL_URL, 'mnist', TEST_LABEL_MD5) def convert(path): From cdb705d19360cdf2ad4de0bbe4f129a70f6ca28c Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Wed, 6 Jun 2018 13:27:22 +0800 Subject: [PATCH 015/130] fix mnist dataset md5 --- python/paddle/dataset/mnist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/paddle/dataset/mnist.py b/python/paddle/dataset/mnist.py index 6a1b8b5fac..9d05aeeb95 100644 --- a/python/paddle/dataset/mnist.py +++ b/python/paddle/dataset/mnist.py @@ -111,7 +111,7 @@ def fetch(): paddle.dataset.common.download(TRAIN_IMAGE_URL, 'mnist', TRAIN_IMAGE_MD5) paddle.dataset.common.download(TRAIN_LABEL_URL, 'mnist', TRAIN_LABEL_MD5) paddle.dataset.common.download(TEST_IMAGE_URL, 'mnist', TEST_IMAGE_MD5) - paddle.dataset.common.download(TEST_LABEL_URL, 'mnist', TRAIN_LABEL_MD5) + paddle.dataset.common.download(TEST_LABEL_URL, 'mnist', TEST_LABEL_MD5) def convert(path): From 05b6aa180594e379adfa4d5ba44d3e9ac937f5b2 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Wed, 6 Jun 2018 14:02:32 +0800 Subject: [PATCH 016/130] increase dist unit test timeout --- python/paddle/fluid/tests/unittests/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/paddle/fluid/tests/unittests/CMakeLists.txt b/python/paddle/fluid/tests/unittests/CMakeLists.txt index 2f2e9c96c1..32176fc7e5 100644 --- a/python/paddle/fluid/tests/unittests/CMakeLists.txt +++ b/python/paddle/fluid/tests/unittests/CMakeLists.txt @@ -51,5 +51,5 @@ py_test_modules(test_dist_train MODULES test_dist_train SERIAL) # FIXME(Yancey1989): this test would cost much more time on CUDAPlace # since load cudnn libraries, so we use a longer timeout to make this # unit test stability. -set_tests_properties(test_listen_and_serv_op PROPERTIES TIMEOUT 30) -set_tests_properties(test_dist_mnist PROPERTIES TIMEOUT 60) +set_tests_properties(test_listen_and_serv_op PROPERTIES TIMEOUT 60) +set_tests_properties(test_dist_mnist PROPERTIES TIMEOUT 180) From 3bb8699498087b395967a895a9750125ca9219c7 Mon Sep 17 00:00:00 2001 From: "yi.wu" Date: Tue, 12 Jun 2018 14:35:58 +0800 Subject: [PATCH 017/130] support running test with reader --- python/paddle/fluid/layers/io.py | 68 ++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/python/paddle/fluid/layers/io.py b/python/paddle/fluid/layers/io.py index 9de88e2c32..d97b2be5d6 100644 --- a/python/paddle/fluid/layers/io.py +++ b/python/paddle/fluid/layers/io.py @@ -689,3 +689,71 @@ def load(out, file_path, load_as_fp16=None): if load_as_fp16 is not None: attrs['load_as_fp16'] = load_as_fp16 helper.append_op(type="load", inputs={}, output={"Out": out}, args=attrs) + + +def get_test_program(filelist, test_program=None, startup_program=None): + """ + Transpile current program to read test dataset if the program + is using reader ops like "open_files_op". + + Args: + filelist (list): list of test file paths. + test_program (Program|None): program to run test/evaluation. + default use fluid.default_main_program() + startup_program (Program|None): startup program to change, + default use fluid.default_startup_program() + + Returns: + Program: program for test + """ + if test_program == None: + program = default_main_program() + if startup_program == None: + startup_program = default_startup_program() + + # 1. find out the orignal reader var name + open_files_var = None + train_open_files_op = None + for op in startup_program.global_block().ops: + if op.type == "open_files": + train_open_files_op = op + open_files_var_name = op.output("Out")[0] + open_files_var = startup_program.global_block().vars[ + open_files_var_name] + + # 2. add operator to startup to read open and read test data files + test_startup_var = startup_program.global_block().create_var( + name=open_files_var.name + "_test") + + print("creating openfiles for test reader: ", train_open_files_op.attrs) + startup_program.global_block().append_op( + type='open_files', + outputs={'Out': [test_startup_var]}, + attrs={ + 'shape_concat': train_open_files_op.attrs["shape_concat"], + 'lod_levels': train_open_files_op.attrs["lod_levels"], + 'ranks': train_open_files_op.attrs["ranks"], + 'file_names': filelist, + 'thread_num': train_open_files_op.attrs["thread_num"], + 'buffer_size': train_open_files_op.attrs["buffer_size"] + }) + dtypes = [convert_np_dtype_to_dtype_(dt) for dt in ["float32", "int64"]] + test_startup_var.desc.set_dtypes(dtypes) + test_startup_var.persistable = True + _copy_reader_var_(default_main_program().global_block(), test_startup_var) + + # 3. rename reader vars in inference program to different name + # to avoid read from train data. + program.global_block().rename_var(open_files_var.name, + test_startup_var.name) + for op in program.global_block().ops: + if "Out" in op.output_names: + op_out_var_name = op.output("Out")[0] + op_out_var = program.global_block().vars[op_out_var_name] + if op_out_var.type == core.VarDesc.VarType.READER: + newname = op_out_var.name + "_test" + program.global_block().rename_var(op_out_var.name, newname) + + program.sync_with_cpp() + + return program From 6ee22c4f71173ada588772ee2b3e2828320d9e17 Mon Sep 17 00:00:00 2001 From: Yibing Liu Date: Tue, 12 Jun 2018 01:43:08 -0700 Subject: [PATCH 018/130] Add gpu kernel for argsort op --- paddle/fluid/operators/argsort_op.cu | 140 +++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 paddle/fluid/operators/argsort_op.cu diff --git a/paddle/fluid/operators/argsort_op.cu b/paddle/fluid/operators/argsort_op.cu new file mode 100644 index 0000000000..d1fbd28e1b --- /dev/null +++ b/paddle/fluid/operators/argsort_op.cu @@ -0,0 +1,140 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#include +#include +#include "paddle/fluid/framework/op_registry.h" +#include "paddle/fluid/operators/argsort_op.h" +#include "paddle/fluid/platform/assert.h" +#include "paddle/fluid/platform/cuda_device_function.h" +#include "paddle/fluid/platform/cuda_primitives.h" + +namespace paddle { +namespace operators { + +using Tensor = framework::Tensor; +using platform::PADDLE_CUDA_NUM_THREADS; + +template +__global__ void PermuteInData(const T* in, const int64_t* trg_idx, int64_t n, + T* med_out) { + int index = threadIdx.x + blockDim.x * blockIdx.x; + if (index < n) { + med_out[trg_idx[index]] = in[index]; + } +} + +template +__global__ void Sort(int64_t axis_dim, int64_t groups, T* med_out, + int64_t* med_ids) { + int index = threadIdx.x + blockDim.x * blockIdx.x; + if (index < groups) { + thrust::sort_by_key(thrust::device, med_out + index * axis_dim, + med_out + axis_dim * (1 + index), + med_ids + index * axis_dim); + } +} + +template +__global__ void PermuteMediateData(const T* med_out, const int64_t* med_ids, + const int64_t* trg_idx, int64_t n, T* out, + int64_t* indices) { + int index = threadIdx.x + blockDim.x * blockIdx.x; + if (index < n) { + out[index] = med_out[trg_idx[index]]; + indices[index] = med_ids[trg_idx[index]]; + } +} + +template +class ArgsortOpCUDAKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext& ctx) const override { + auto* input = ctx.Input("X"); + auto* output = ctx.Output("Out"); + auto* indices = ctx.Output("Indices"); + int axis = ctx.Attr("axis"); + + auto in_dims = input->dims(); + axis = (axis == -1) ? (in_dims.size() - 1) : axis; + + const T* in_data = input->data(); + T* out_data = output->mutable_data(ctx.GetPlace()); + int64_t* ids_data = indices->mutable_data(ctx.GetPlace()); + + int64_t numel = input->numel(); + int64_t groups = numel / in_dims[axis]; + + // Mediate tensor for sorting + Tensor mediate_output; + T* med_out_data = + mediate_output.mutable_data(input->dims(), ctx.GetPlace()); + + // The target index of each elemement in mediate tensor + std::vector target_idx(numel, 0); + // To record the index along the given axis for the data in mediate tensor + std::vector mediate_indices(numel, 0); + std::vector in_dims_out_axis = vectorize(in_dims); + in_dims_out_axis.erase(in_dims_out_axis.begin() + axis); + for (int64_t index = 0; index < numel; ++index) { + int64_t tmp = index; + int64_t pos_in_axis = 0; + std::vector shape; + for (int64_t j = in_dims.size() - 1; j >= 0; --j) { + if (j != axis) { + shape.push_back(tmp % in_dims[j]); + } else { + pos_in_axis = tmp % in_dims[j]; + } + tmp /= in_dims[j]; + } + std::reverse(shape.begin(), shape.end()); + int64_t group = (shape.size() > 0) ? shape[0] : 0; + for (size_t j = 0; j < shape.size() - 1; ++j) { + group = group * in_dims_out_axis[j + 1] + shape[j + 1]; + } + + target_idx[index] = group * in_dims[axis] + pos_in_axis; + mediate_indices[target_idx[index]] = pos_in_axis; + } + + thrust::device_vector med_ids_dev(mediate_indices.begin(), + mediate_indices.end()); + int64_t* med_ids_data = thrust::raw_pointer_cast(med_ids_dev.data()); + thrust::device_vector trg_idx_dev(target_idx.begin(), + target_idx.end()); + int64_t* trg_idx = thrust::raw_pointer_cast(trg_idx_dev.data()); + + auto stream = reinterpret_cast( + ctx.device_context()) + .stream(); + auto num_threads = PADDLE_CUDA_NUM_THREADS; + + PermuteInData<<<(numel - 1) / num_threads + 1, num_threads, 0, stream>>>( + in_data, trg_idx, numel, med_out_data); + + Sort<<<(groups - 1) / num_threads + 1, num_threads, 0, stream>>>( + in_dims[axis], groups, med_out_data, med_ids_data); + + PermuteMediateData<<<(numel - 1) / num_threads + 1, num_threads, 0, + stream>>>(med_out_data, med_ids_data, trg_idx, numel, + out_data, ids_data); + } +}; + +} // namespace operators +} // namespace paddle + +REGISTER_OP_CUDA_KERNEL(argsort, paddle::operators::ArgsortOpCUDAKernel, + paddle::operators::ArgsortOpCUDAKernel); From 42645ff779dcaea3f68ccdc2e183199857c2e18e Mon Sep 17 00:00:00 2001 From: Yibing Liu Date: Tue, 12 Jun 2018 05:52:47 -0700 Subject: [PATCH 019/130] Compute target index on gpu --- paddle/fluid/operators/argsort_op.cc | 2 +- paddle/fluid/operators/argsort_op.cu | 89 ++++++++++++++++------------ 2 files changed, 52 insertions(+), 39 deletions(-) diff --git a/paddle/fluid/operators/argsort_op.cc b/paddle/fluid/operators/argsort_op.cc index aead4e2e00..2943d409a2 100644 --- a/paddle/fluid/operators/argsort_op.cc +++ b/paddle/fluid/operators/argsort_op.cc @@ -30,7 +30,7 @@ class ArgsortOp : public framework::OperatorWithKernel { "Output(Indices) of ArgsortOp should not be null."); auto in_dims = ctx->GetInputDim("X"); - int axis = static_cast(ctx->Attrs().Get("axis")); + int axis = ctx->Attrs().Get("axis"); auto num_dims = in_dims.size(); PADDLE_ENFORCE(axis < num_dims, diff --git a/paddle/fluid/operators/argsort_op.cu b/paddle/fluid/operators/argsort_op.cu index d1fbd28e1b..eac18ea3a0 100644 --- a/paddle/fluid/operators/argsort_op.cu +++ b/paddle/fluid/operators/argsort_op.cu @@ -26,6 +26,42 @@ namespace operators { using Tensor = framework::Tensor; using platform::PADDLE_CUDA_NUM_THREADS; +__global__ void ComputeTargetIdx(const int64_t* in_dims, int dims_size, + int axis, int64_t n, int64_t* trg_idx, + int64_t* med_ids) { + int64_t index = threadIdx.x + blockDim.x * blockIdx.x; + if (index < n) { + int64_t* shape_out_axis = new int64_t[dims_size - 1]; + int64_t* dims_out_axis = new int64_t[dims_size - 1]; + int64_t tmp = index; + int64_t pos_in_axis = 0; + int64_t i = dims_size - 2; + int64_t dim_axis = 0; + for (int64_t j = dims_size - 1; j >= 0; --j) { + int64_t dim = in_dims[j]; + if (j != axis) { + shape_out_axis[i] = tmp % dim; + dims_out_axis[i] = dim; + i--; + } else { + dim_axis = dim; + pos_in_axis = tmp % dim_axis; + } + tmp /= dim; + } + int64_t group = (dims_size > 1) ? shape_out_axis[0] : 0; + for (int64_t j = 0; j < dims_size - 2; ++j) { + group = group * dims_out_axis[j + 1] + shape_out_axis[j + 1]; + } + + int64_t traget_idx = group * dim_axis + pos_in_axis; + trg_idx[index] = traget_idx; + med_ids[traget_idx] = pos_in_axis; + delete[] shape_out_axis; + delete[] dims_out_axis; + } +} + template __global__ void PermuteInData(const T* in, const int64_t* trg_idx, int64_t n, T* med_out) { @@ -76,50 +112,27 @@ class ArgsortOpCUDAKernel : public framework::OpKernel { int64_t numel = input->numel(); int64_t groups = numel / in_dims[axis]; - // Mediate tensor for sorting - Tensor mediate_output; + std::vector in_dims_vec = vectorize(in_dims); + thrust::device_vector in_dims_dev(in_dims_vec.begin(), + in_dims_vec.end()); + int64_t* in_dims_data = thrust::raw_pointer_cast(in_dims_dev.data()); + // Mediate tensor for sorting data and indices + Tensor mediate_output, mediate_indices; T* med_out_data = mediate_output.mutable_data(input->dims(), ctx.GetPlace()); - - // The target index of each elemement in mediate tensor - std::vector target_idx(numel, 0); - // To record the index along the given axis for the data in mediate tensor - std::vector mediate_indices(numel, 0); - std::vector in_dims_out_axis = vectorize(in_dims); - in_dims_out_axis.erase(in_dims_out_axis.begin() + axis); - for (int64_t index = 0; index < numel; ++index) { - int64_t tmp = index; - int64_t pos_in_axis = 0; - std::vector shape; - for (int64_t j = in_dims.size() - 1; j >= 0; --j) { - if (j != axis) { - shape.push_back(tmp % in_dims[j]); - } else { - pos_in_axis = tmp % in_dims[j]; - } - tmp /= in_dims[j]; - } - std::reverse(shape.begin(), shape.end()); - int64_t group = (shape.size() > 0) ? shape[0] : 0; - for (size_t j = 0; j < shape.size() - 1; ++j) { - group = group * in_dims_out_axis[j + 1] + shape[j + 1]; - } - - target_idx[index] = group * in_dims[axis] + pos_in_axis; - mediate_indices[target_idx[index]] = pos_in_axis; - } - - thrust::device_vector med_ids_dev(mediate_indices.begin(), - mediate_indices.end()); - int64_t* med_ids_data = thrust::raw_pointer_cast(med_ids_dev.data()); - thrust::device_vector trg_idx_dev(target_idx.begin(), - target_idx.end()); - int64_t* trg_idx = thrust::raw_pointer_cast(trg_idx_dev.data()); + int64_t* med_ids_data = + mediate_indices.mutable_data(in_dims, ctx.GetPlace()); + // Target index of each element along the given axis in the mediate tensors + Tensor trg_idx_t; + int64_t* trg_idx = trg_idx_t.mutable_data(in_dims, ctx.GetPlace()); auto stream = reinterpret_cast( ctx.device_context()) .stream(); - auto num_threads = PADDLE_CUDA_NUM_THREADS; + int num_threads = PADDLE_CUDA_NUM_THREADS; + + ComputeTargetIdx<<<(numel - 1) / num_threads + 1, num_threads, 0, stream>>>( + in_dims_data, in_dims.size(), axis, numel, trg_idx, med_ids_data); PermuteInData<<<(numel - 1) / num_threads + 1, num_threads, 0, stream>>>( in_data, trg_idx, numel, med_out_data); From 94e72ea6e7eba2f89533225f57626cfed93c0155 Mon Sep 17 00:00:00 2001 From: Yibing Liu Date: Tue, 12 Jun 2018 06:31:01 -0700 Subject: [PATCH 020/130] Support more negative axes in argsort_op --- paddle/fluid/operators/argsort_op.cc | 20 +++++++++++-------- paddle/fluid/operators/argsort_op.cu | 2 +- paddle/fluid/operators/argsort_op.h | 2 +- .../fluid/tests/unittests/test_argsort_op.py | 7 +++++++ 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/paddle/fluid/operators/argsort_op.cc b/paddle/fluid/operators/argsort_op.cc index 2943d409a2..8a44fd12ce 100644 --- a/paddle/fluid/operators/argsort_op.cc +++ b/paddle/fluid/operators/argsort_op.cc @@ -37,10 +37,10 @@ class ArgsortOp : public framework::OperatorWithKernel { "Attr(axis) %d of ArgsortOp is out of bounds for Input(X) " "dimension %d.", axis, num_dims); - PADDLE_ENFORCE(axis >= 0 || axis == -1, - "Attr(axis) %d of ArgsortOp must be nonnegative or equal to " - "-1.", - axis); + PADDLE_ENFORCE(in_dims.size() + axis >= 0, + "Attr(axis) %d of ArgsortOp plus the number of Input(X)'s " + "dimensions %d must be nonnegative.", + axis, in_dims.size()); ctx->SetOutputDim("Out", in_dims); ctx->SetOutputDim("Indices", in_dims); @@ -53,9 +53,12 @@ class ArgsortOpMaker : public framework::OpProtoAndCheckerMaker { public: void Make() override { AddInput("X", "(Tensor) The input of Argsort op."); - AddOutput("Out", "(Tensor) The sorted tensor of Argsort op."); + AddOutput("Out", + "(Tensor) The sorted tensor of Argsort op, with the same " + "shape as Input(X)."); AddOutput("Indices", - "(Tensor) The indices of a tensor giving the sorted order."); + "(Tensor) The indices of a tensor giving the sorted order, with " + "the same shape as Input(X)."); AddComment(R"DOC( Argsort operator @@ -66,8 +69,9 @@ Output(Indices) gives the sorted order along the given axis Attr(axis). )DOC"); AddAttr("axis", - "(int, default -1) The axis along which to sort the tensor, " - "default -1, the last dimension.") + "(int, default -1) The axis along which to sort the tensor. " + "When axis < 0, the actual axis will be the |axis|'th " + "counting backwards. Default -1, the last dimension.") .SetDefault(-1); } }; diff --git a/paddle/fluid/operators/argsort_op.cu b/paddle/fluid/operators/argsort_op.cu index eac18ea3a0..55ad4ce340 100644 --- a/paddle/fluid/operators/argsort_op.cu +++ b/paddle/fluid/operators/argsort_op.cu @@ -103,7 +103,7 @@ class ArgsortOpCUDAKernel : public framework::OpKernel { int axis = ctx.Attr("axis"); auto in_dims = input->dims(); - axis = (axis == -1) ? (in_dims.size() - 1) : axis; + axis = (axis < 0) ? (in_dims.size() + axis) : axis; const T* in_data = input->data(); T* out_data = output->mutable_data(ctx.GetPlace()); diff --git a/paddle/fluid/operators/argsort_op.h b/paddle/fluid/operators/argsort_op.h index 51d2b89f94..e13745c494 100644 --- a/paddle/fluid/operators/argsort_op.h +++ b/paddle/fluid/operators/argsort_op.h @@ -31,7 +31,7 @@ class ArgsortKernel : public framework::OpKernel { int axis = static_cast(ctx.Attr("axis")); auto in_dims = input->dims(); - axis = (axis == -1) ? (in_dims.size() - 1) : axis; + axis = (axis < 0) ? (in_dims.size() + axis) : axis; const T* in_data = input->data(); T* out_data = output->mutable_data(ctx.GetPlace()); diff --git a/python/paddle/fluid/tests/unittests/test_argsort_op.py b/python/paddle/fluid/tests/unittests/test_argsort_op.py index 6995621ba8..1d0aa82a6b 100644 --- a/python/paddle/fluid/tests/unittests/test_argsort_op.py +++ b/python/paddle/fluid/tests/unittests/test_argsort_op.py @@ -21,6 +21,8 @@ class TestArgsortOp(OpTest): def setUp(self): self.init_axis() x = np.random.random((2, 3, 4, 5)).astype("float32") + if self.axis < 0: + self.axis = self.axis + len(x.shape) self.indices = np.argsort(x, kind='quicksort', axis=self.axis) self.out = np.sort(x, kind='quicksort', axis=self.axis) self.op_type = "argsort" @@ -45,5 +47,10 @@ class TestArgsortOpAxis1(TestArgsortOp): self.axis = 1 +class TestArgsortOpAxisNeg2(TestArgsortOp): + def init_axis(self): + self.axis = -2 + + if __name__ == "__main__": unittest.main() From 98460c009eb6a18339097b8ef9be43a216ce1e5f Mon Sep 17 00:00:00 2001 From: Yibing Liu Date: Tue, 12 Jun 2018 09:31:10 -0700 Subject: [PATCH 021/130] Simplify the computation in cpu --- paddle/fluid/operators/argsort_op.h | 51 +++++++++++++++-------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/paddle/fluid/operators/argsort_op.h b/paddle/fluid/operators/argsort_op.h index e13745c494..7e9112cfb7 100644 --- a/paddle/fluid/operators/argsort_op.h +++ b/paddle/fluid/operators/argsort_op.h @@ -28,47 +28,50 @@ class ArgsortKernel : public framework::OpKernel { auto* input = ctx.Input("X"); auto* output = ctx.Output("Out"); auto* indices = ctx.Output("Indices"); - int axis = static_cast(ctx.Attr("axis")); + int axis = ctx.Attr("axis"); auto in_dims = input->dims(); axis = (axis < 0) ? (in_dims.size() + axis) : axis; const T* in_data = input->data(); T* out_data = output->mutable_data(ctx.GetPlace()); - int64_t* idx_data = indices->mutable_data(ctx.GetPlace()); + int64_t* ids_data = indices->mutable_data(ctx.GetPlace()); - int64_t part_dims_prod = input->numel() / in_dims[axis]; - for (int64_t i = 0; i < part_dims_prod; ++i) { + int64_t groups = input->numel() / in_dims[axis]; + int64_t stride = (axis == in_dims.size() - 1) + ? 1 + : framework::product(framework::slice_ddim( + in_dims, axis + 1, in_dims.size())); + + for (int64_t i = 0; i < groups; ++i) { int64_t idx = i; - std::vector idx_vec(in_dims.size(), 0); + std::vector shape_vec(in_dims.size(), 0); for (int64_t dim = in_dims.size() - 1; dim >= 0; --dim) { if (dim != axis) { - idx_vec[dim] = idx % in_dims[dim]; + shape_vec[dim] = idx % in_dims[dim]; idx /= in_dims[dim]; } } - std::vector> in_vec; - std::vector org_index_vec(in_dims[axis], 0); - for (int64_t j = 0; j < in_dims[axis]; ++j) { - idx_vec[axis] = j; - int64_t index = idx_vec[0]; - for (int64_t dim = 0; dim < in_dims.size() - 1; ++dim) { - index = index * in_dims[dim + 1] + idx_vec[dim + 1]; - } - in_vec.push_back(std::pair(in_data[index], j)); - org_index_vec[j] = index; + + int64_t start_index = shape_vec[0]; + for (int64_t dim = 0; dim < in_dims.size() - 1; ++dim) { + start_index = start_index * in_dims[dim + 1] + shape_vec[dim + 1]; + } + + std::vector org_index_vec(in_dims[axis], start_index); + for (int64_t j = 1; j < in_dims[axis]; ++j) { + org_index_vec[j] += j * stride; } - std::sort( - in_vec.begin(), in_vec.end(), - [](const std::pair& v1, const std::pair& v2) { - return v1.first < v2.first; - }); + std::sort(org_index_vec.begin(), org_index_vec.end(), + [in_data](const int64_t v1, const int64_t v2) { + return in_data[v1] < in_data[v2]; + }); for (size_t j = 0; j < org_index_vec.size(); ++j) { - int64_t index = org_index_vec[j]; - out_data[index] = in_vec[j].first; - idx_data[index] = in_vec[j].second; + int64_t index = start_index + j * stride; + out_data[index] = in_data[org_index_vec[j]]; + ids_data[index] = (org_index_vec[j] - start_index) / stride; } } } From 343c1957bdddfcdc48cb0ebd2ff3c5ab7354e06f Mon Sep 17 00:00:00 2001 From: "yi.wu" Date: Wed, 13 Jun 2018 10:30:08 +0800 Subject: [PATCH 022/130] let test run only one pass --- python/paddle/fluid/layers/io.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python/paddle/fluid/layers/io.py b/python/paddle/fluid/layers/io.py index d97b2be5d6..b59e2dc291 100644 --- a/python/paddle/fluid/layers/io.py +++ b/python/paddle/fluid/layers/io.py @@ -753,7 +753,9 @@ def get_test_program(filelist, test_program=None, startup_program=None): if op_out_var.type == core.VarDesc.VarType.READER: newname = op_out_var.name + "_test" program.global_block().rename_var(op_out_var.name, newname) + if op.type == "create_multi_pass_reader": + op.set_attr("pass_num", 1) - program.sync_with_cpp() + program.sync_with_cpp() return program From 92cfa2be3a29cfdd8bf8ffc7fec76221ba761657 Mon Sep 17 00:00:00 2001 From: Yibing Liu Date: Sun, 17 Jun 2018 01:44:36 -0700 Subject: [PATCH 023/130] Avoid using dynamic array in cuda kernel --- paddle/fluid/operators/argsort_op.cc | 4 ++-- paddle/fluid/operators/argsort_op.cu | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/paddle/fluid/operators/argsort_op.cc b/paddle/fluid/operators/argsort_op.cc index 8a44fd12ce..ca9a884b98 100644 --- a/paddle/fluid/operators/argsort_op.cc +++ b/paddle/fluid/operators/argsort_op.cc @@ -38,8 +38,8 @@ class ArgsortOp : public framework::OperatorWithKernel { "dimension %d.", axis, num_dims); PADDLE_ENFORCE(in_dims.size() + axis >= 0, - "Attr(axis) %d of ArgsortOp plus the number of Input(X)'s " - "dimensions %d must be nonnegative.", + "Attr(axis) %d of ArgsortOp plus the rank %d of Input(X) " + "must be nonnegative.", axis, in_dims.size()); ctx->SetOutputDim("Out", in_dims); diff --git a/paddle/fluid/operators/argsort_op.cu b/paddle/fluid/operators/argsort_op.cu index 55ad4ce340..fc64e51b34 100644 --- a/paddle/fluid/operators/argsort_op.cu +++ b/paddle/fluid/operators/argsort_op.cu @@ -31,8 +31,9 @@ __global__ void ComputeTargetIdx(const int64_t* in_dims, int dims_size, int64_t* med_ids) { int64_t index = threadIdx.x + blockDim.x * blockIdx.x; if (index < n) { - int64_t* shape_out_axis = new int64_t[dims_size - 1]; - int64_t* dims_out_axis = new int64_t[dims_size - 1]; + const int max_rank = 9; // Max rank of a tensor allow in Fluid + int64_t shape_out_axis[max_rank - 1] = {0}; + int64_t dims_out_axis[max_rank - 1] = {0}; int64_t tmp = index; int64_t pos_in_axis = 0; int64_t i = dims_size - 2; @@ -57,8 +58,6 @@ __global__ void ComputeTargetIdx(const int64_t* in_dims, int dims_size, int64_t traget_idx = group * dim_axis + pos_in_axis; trg_idx[index] = traget_idx; med_ids[traget_idx] = pos_in_axis; - delete[] shape_out_axis; - delete[] dims_out_axis; } } From a523b6f49f4048d8c32c4d6c53dc22fdcebfe2b0 Mon Sep 17 00:00:00 2001 From: Yibing Liu Date: Mon, 18 Jun 2018 02:30:24 -0700 Subject: [PATCH 024/130] Add python api for argsort_op --- doc/fluid/api/layers.rst | 6 ++++ paddle/fluid/operators/argsort_op.cc | 12 +++---- python/paddle/fluid/layers/tensor.py | 51 ++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 6 deletions(-) diff --git a/doc/fluid/api/layers.rst b/doc/fluid/api/layers.rst index 1f8f636040..4157faae4c 100644 --- a/doc/fluid/api/layers.rst +++ b/doc/fluid/api/layers.rst @@ -1105,6 +1105,12 @@ argmax .. autofunction:: paddle.fluid.layers.argmax :noindex: +argsort +------ + +.. autofunction:: paddle.fluid.layers.argsort + :noindex: + ones ---- diff --git a/paddle/fluid/operators/argsort_op.cc b/paddle/fluid/operators/argsort_op.cc index ca9a884b98..a2f5a25457 100644 --- a/paddle/fluid/operators/argsort_op.cc +++ b/paddle/fluid/operators/argsort_op.cc @@ -34,13 +34,13 @@ class ArgsortOp : public framework::OperatorWithKernel { auto num_dims = in_dims.size(); PADDLE_ENFORCE(axis < num_dims, - "Attr(axis) %d of ArgsortOp is out of bounds for Input(X) " - "dimension %d.", + "Attr(axis) %d of ArgsortOp is out of bounds for Input(X)'s " + "rank %d.", + axis, num_dims); + PADDLE_ENFORCE(axis >= -num_dims, + "Attr(axis) %d of ArgsortOp must be not less than " + "-rank(Input(X)) (%d).", axis, num_dims); - PADDLE_ENFORCE(in_dims.size() + axis >= 0, - "Attr(axis) %d of ArgsortOp plus the rank %d of Input(X) " - "must be nonnegative.", - axis, in_dims.size()); ctx->SetOutputDim("Out", in_dims); ctx->SetOutputDim("Indices", in_dims); diff --git a/python/paddle/fluid/layers/tensor.py b/python/paddle/fluid/layers/tensor.py index 149e77b524..656bd5bb1d 100644 --- a/python/paddle/fluid/layers/tensor.py +++ b/python/paddle/fluid/layers/tensor.py @@ -33,6 +33,7 @@ __all__ = [ 'fill_constant', 'argmin', 'argmax', + 'argsort', 'ones', 'zeros', 'reverse', @@ -438,6 +439,56 @@ def argmax(x, axis=0): return out +def argsort(input, axis=-1): + """ + Performs sorting on the input Variable along the given axis, and outputs + sorted data Varibale and its corresponding index Variable with the same + shape as :attr:`input`. + + .. code-block:: text + + For example, the given axis is -1 and the input Variable + + input = [[0.15849551, 0.45865775, 0.8563702 ], + [0.12070083, 0.28766365, 0.18776911]], + + after argsort, the sorted Vairable becomes + + out = [[0.15849551, 0.45865775, 0.8563702 ], + [0.12070083, 0.18776911, 0.28766365]], + + and the sorted indices along the given axis turn outs to be + + indices = [[0, 1, 2], + [0, 2, 1]] + + Args: + input(Variable): The input Variable for sorting. + axis(int): The axis along which to sort the input Variable. When + :attr:`axis` < 0, the actual axis will be :attr:`axis` + + rank(:attr:`input`). Default -1, the last dimension. + + Returns: + tuple: A tuple of sorted data Variable and the sorted indices. + + Examples: + .. code-block:: python + + input = fluid.layers.data(data=[2, 3]) + out, indices = fluid.layers.argsort(input, axis=0) + """ + helper = LayerHelper("argsort", **locals()) + out = helper.create_tmp_variable(dtype=input.dtype, stop_gradient=True) + ids = helper.create_tmp_variable(VarDesc.VarType.INT64, stop_gradient=True) + helper.append_op( + type='argsort', + inputs={'X': input}, + outputs={'Out': out, + 'Indics': ids}, + attts={'axis': axis}) + return out, ids + + def ones(shape, dtype, force_cpu=False): """ **ones** From a424f5a0af67d0db0bc1af2de22a30122f654098 Mon Sep 17 00:00:00 2001 From: "yi.wu" Date: Wed, 20 Jun 2018 22:41:30 +0800 Subject: [PATCH 025/130] polish reader op for test --- python/paddle/fluid/layers/io.py | 116 +++++++++++++++++-------------- 1 file changed, 65 insertions(+), 51 deletions(-) diff --git a/python/paddle/fluid/layers/io.py b/python/paddle/fluid/layers/io.py index b59e2dc291..7d10f12a54 100644 --- a/python/paddle/fluid/layers/io.py +++ b/python/paddle/fluid/layers/io.py @@ -259,7 +259,9 @@ def monkey_patch_reader_methods(reader): return reader -def _copy_reader_var_(block, var): +def _copy_reader_var_(block, var, newname=None): + if newname == None: + newname = var.name new_var = block.create_var(name=var.name, type=core.VarDesc.VarType.READER) new_var.desc.set_shapes(var.desc.shapes()) new_var.desc.set_dtypes(var.desc.dtypes()) @@ -691,68 +693,80 @@ def load(out, file_path, load_as_fp16=None): helper.append_op(type="load", inputs={}, output={"Out": out}, args=attrs) -def get_test_program(filelist, test_program=None, startup_program=None): - """ - Transpile current program to read test dataset if the program - is using reader ops like "open_files_op". +def _is_reader_op(op, block): + if "Out" in op.output_names: + reader_out = block.vars[op.output("Out")[0]] + if reader_out.type == core.VarDesc.VarType.READER: + return True + return False - Args: - filelist (list): list of test file paths. - test_program (Program|None): program to run test/evaluation. - default use fluid.default_main_program() - startup_program (Program|None): startup program to change, - default use fluid.default_startup_program() - - Returns: - Program: program for test + +def get_test_program(filelist, program=None, startup_program=None): + """ + Transpile current train program to a program to read test dataset + if the program is using reader ops like "open_files_op". """ - if test_program == None: + if program == None: program = default_main_program() if startup_program == None: startup_program = default_startup_program() # 1. find out the orignal reader var name - open_files_var = None - train_open_files_op = None + # open_files_var = None + # train_open_files_op = None + startup_reader_op_list = [] + for op in startup_program.global_block().ops: - if op.type == "open_files": - train_open_files_op = op - open_files_var_name = op.output("Out")[0] - open_files_var = startup_program.global_block().vars[ - open_files_var_name] - - # 2. add operator to startup to read open and read test data files - test_startup_var = startup_program.global_block().create_var( - name=open_files_var.name + "_test") - - print("creating openfiles for test reader: ", train_open_files_op.attrs) - startup_program.global_block().append_op( - type='open_files', - outputs={'Out': [test_startup_var]}, - attrs={ - 'shape_concat': train_open_files_op.attrs["shape_concat"], - 'lod_levels': train_open_files_op.attrs["lod_levels"], - 'ranks': train_open_files_op.attrs["ranks"], - 'file_names': filelist, - 'thread_num': train_open_files_op.attrs["thread_num"], - 'buffer_size': train_open_files_op.attrs["buffer_size"] - }) - dtypes = [convert_np_dtype_to_dtype_(dt) for dt in ["float32", "int64"]] - test_startup_var.desc.set_dtypes(dtypes) - test_startup_var.persistable = True - _copy_reader_var_(default_main_program().global_block(), test_startup_var) + if _is_reader_op(op, startup_program.global_block()): + startup_reader_op_list.append(op) + + if len(startup_reader_op_list) == 0: + return program + + root_reader_op = startup_reader_op_list[0] + + # 2. add operators to startup to read open and read test data files + for op in startup_reader_op_list: + orig_var_name = op.output("Out")[0] + orig_var = startup_program.global_block().vars[orig_var_name] + new_test_var = _copy_reader_var_( + startup_program.global_block(), + orig_var, + newname=orig_var_name + "_test") + + # for open_files like operators have no input. + inputs = None + if "UnderlyingReader" in op.input_names: + orig_input_var_name = op.input("UnderlyingReader")[0] + orig_input_var = startup_program.global_block().vars[ + orig_input_var_name] + new_input_var = _copy_reader_var_( + startup_program.global_block(), + orig_input_var, + newname=orig_input_var_name + "_test") + inputs = {"UnderlyingReader": new_input_var} + test_op = startup_program.global_block().append_op( + type=op.type, + inputs=inputs, + outputs={'Out': [new_test_var]}, + attrs=op.attrs) + # root reader op's filelist attr for read test files + if op.type == root_reader_op.type: + test_op.set_attr("file_names", filelist) + if op.type == "create_multi_pass_reader": + test_op.set_attr("pass_num", 1) # 3. rename reader vars in inference program to different name # to avoid read from train data. - program.global_block().rename_var(open_files_var.name, - test_startup_var.name) + origname = root_reader_op.output("Out")[0] + newname = origname + "_test" + program.global_block().rename_var(str(origname), str(newname)) for op in program.global_block().ops: - if "Out" in op.output_names: - op_out_var_name = op.output("Out")[0] - op_out_var = program.global_block().vars[op_out_var_name] - if op_out_var.type == core.VarDesc.VarType.READER: - newname = op_out_var.name + "_test" - program.global_block().rename_var(op_out_var.name, newname) + if _is_reader_op(op, program.global_block()): + origname = op.output("Out")[0] + newname = origname + "_test" + program.global_block().rename_var(str(origname), str(newname)) + if op.type == "create_multi_pass_reader": op.set_attr("pass_num", 1) From 7d3d7226b5e54e8f4953d061ce63599c4b7f60a8 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Fri, 22 Jun 2018 11:35:37 +0800 Subject: [PATCH 026/130] refine get_test_program --- python/paddle/fluid/layers/io.py | 101 +++++++++++++++++-------------- 1 file changed, 54 insertions(+), 47 deletions(-) diff --git a/python/paddle/fluid/layers/io.py b/python/paddle/fluid/layers/io.py index 7d10f12a54..15aa12d5d7 100644 --- a/python/paddle/fluid/layers/io.py +++ b/python/paddle/fluid/layers/io.py @@ -259,10 +259,11 @@ def monkey_patch_reader_methods(reader): return reader -def _copy_reader_var_(block, var, newname=None): - if newname == None: - newname = var.name - new_var = block.create_var(name=var.name, type=core.VarDesc.VarType.READER) +def _copy_reader_var_(block, var, new_name=None): + if new_name == None: + new_name = var.name + new_var = block.create_var( + name=str(new_name), type=core.VarDesc.VarType.READER) new_var.desc.set_shapes(var.desc.shapes()) new_var.desc.set_dtypes(var.desc.dtypes()) new_var.persistable = True @@ -693,62 +694,67 @@ def load(out, file_path, load_as_fp16=None): helper.append_op(type="load", inputs={}, output={"Out": out}, args=attrs) -def _is_reader_op(op, block): - if "Out" in op.output_names: - reader_out = block.vars[op.output("Out")[0]] - if reader_out.type == core.VarDesc.VarType.READER: - return True - return False - - def get_test_program(filelist, program=None, startup_program=None): """ Transpile current train program to a program to read test dataset if the program is using reader ops like "open_files_op". """ + + def get_test_reader_name(train_reader_name): + return train_reader_name + "_test" + + def is_reader_op(op): + block = op.block + if "Out" in op.output_names: + reader_out = block.vars[op.output("Out")[0]] + if reader_out.type == core.VarDesc.VarType.READER: + return True + return False + if program == None: program = default_main_program() if startup_program == None: startup_program = default_startup_program() + startup_block = startup_program.global_block() # 1. find out the orignal reader var name - # open_files_var = None - # train_open_files_op = None startup_reader_op_list = [] - for op in startup_program.global_block().ops: - if _is_reader_op(op, startup_program.global_block()): + for op in startup_block.ops: + if is_reader_op(op): startup_reader_op_list.append(op) if len(startup_reader_op_list) == 0: return program root_reader_op = startup_reader_op_list[0] - + train_test_reader_map = {} # 2. add operators to startup to read open and read test data files for op in startup_reader_op_list: - orig_var_name = op.output("Out")[0] - orig_var = startup_program.global_block().vars[orig_var_name] - new_test_var = _copy_reader_var_( - startup_program.global_block(), - orig_var, - newname=orig_var_name + "_test") - - # for open_files like operators have no input. - inputs = None - if "UnderlyingReader" in op.input_names: - orig_input_var_name = op.input("UnderlyingReader")[0] - orig_input_var = startup_program.global_block().vars[ - orig_input_var_name] - new_input_var = _copy_reader_var_( - startup_program.global_block(), - orig_input_var, - newname=orig_input_var_name + "_test") - inputs = {"UnderlyingReader": new_input_var} - test_op = startup_program.global_block().append_op( + assert (len(op.output("Out")) == 1) + train_reader_name = op.output("Out")[0] + train_reader = startup_block.vars[train_reader_name] + test_reader = _copy_reader_var_( + startup_block, + train_reader, + new_name=get_test_reader_name(train_reader_name)) + train_test_reader_map[train_reader.name] = test_reader + + test_op_inputs = {} + for name in op.input_names: + train_arg_names = op.input(name) + test_arg_vars = [] + for arg_name in train_arg_names: + arg_var = train_test_reader_map[ + arg_name] if name == "UnderlyingReader" else startup_block.vars[ + arg_name] + test_arg_vars.append(arg_var) + test_op_inputs[name] = test_arg_vars + + test_op = startup_block.append_op( type=op.type, - inputs=inputs, - outputs={'Out': [new_test_var]}, + inputs=test_op_inputs, + outputs={'Out': [test_reader]}, attrs=op.attrs) # root reader op's filelist attr for read test files if op.type == root_reader_op.type: @@ -758,18 +764,19 @@ def get_test_program(filelist, program=None, startup_program=None): # 3. rename reader vars in inference program to different name # to avoid read from train data. - origname = root_reader_op.output("Out")[0] - newname = origname + "_test" - program.global_block().rename_var(str(origname), str(newname)) - for op in program.global_block().ops: - if _is_reader_op(op, program.global_block()): - origname = op.output("Out")[0] - newname = origname + "_test" - program.global_block().rename_var(str(origname), str(newname)) + main_block = program.global_block() + for var in main_block.vars.values(): + if var.type == core.VarDesc.VarType.READER: + main_block.rename_var( + str(var.name), str(get_test_reader_name(var.name))) + for op in main_block.ops: + if op.type == root_reader_op.type: + test_op.set_attr("file_names", filelist) if op.type == "create_multi_pass_reader": - op.set_attr("pass_num", 1) + test_op.set_attr("pass_num", 1) + startup_program.sync_with_cpp() program.sync_with_cpp() return program From e9ed62bfed91fa86906b805f6cf22c3c7e51490d Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Tue, 26 Jun 2018 11:10:08 +0800 Subject: [PATCH 027/130] make framework.Parameter public --- python/paddle/fluid/framework.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/paddle/fluid/framework.py b/python/paddle/fluid/framework.py index db21b1f3c0..6c6f90a0cf 100644 --- a/python/paddle/fluid/framework.py +++ b/python/paddle/fluid/framework.py @@ -27,6 +27,7 @@ __all__ = [ 'Variable', 'Program', 'Operator', + 'Parameter', 'default_startup_program', 'default_main_program', 'program_guard', @@ -1905,7 +1906,7 @@ def program_guard(main_program, startup_program=None): def get_var(name, program=None): """ Get a variable by name from the global block of a program. - + Args: name(str): name of the variable program(Program|None): program object. From e09ac3df188a8a9ce68845b606ffe301f0eaed7b Mon Sep 17 00:00:00 2001 From: Kexin Zhao Date: Mon, 25 Jun 2018 22:01:48 -0700 Subject: [PATCH 028/130] replace lod name with recur_seq_lens --- doc/fluid/design/concepts/lod_tensor.md | 20 ++++++ .../test_label_semantic_roles_newapi.py | 28 ++++----- .../test_machine_translation.py | 12 ++-- .../test_recommender_system_newapi.py | 12 ++-- .../test_understand_sentiment_conv.py | 10 +-- .../test_understand_sentiment_dynamic_rnn.py | 10 +-- .../test_understand_sentiment_stacked_lstm.py | 10 +-- .../word2vec/test_word2vec_new_api.py | 19 +++--- .../tests/book/notest_understand_sentiment.py | 16 +++-- .../tests/book/test_label_semantic_roles.py | 62 ++++++++++++++----- .../tests/book/test_machine_translation.py | 14 +++-- .../tests/book/test_recommender_system.py | 12 ++-- .../tests/book/test_rnn_encoder_decoder.py | 14 ++--- .../paddle/fluid/tests/book/test_word2vec.py | 21 ++++--- 14 files changed, 163 insertions(+), 97 deletions(-) diff --git a/doc/fluid/design/concepts/lod_tensor.md b/doc/fluid/design/concepts/lod_tensor.md index d606d7a790..748488f6d5 100644 --- a/doc/fluid/design/concepts/lod_tensor.md +++ b/doc/fluid/design/concepts/lod_tensor.md @@ -173,6 +173,7 @@ are transformed into offsets of elements/words as follows: ## Slicing of LoD Tensors + When we use the above 2-level LoD Tensor as the input to a nested-RNN, we need to retrieve certain sequences. Here we define the sequence identified by branch as the **-slice**. For example, the <2>-slice of above example is @@ -189,3 +190,22 @@ and the <2,0>-slice of above slice is 10 12 || ``` + +## Length Representation vs Offset Representation + +The offset representation is an implementation-oriented decision and it makes understanding the idea behind LoDTensor difficult. +Hence, we encapsulate this implementation detail in C++ and expose the original length representation in our Python API. +Specifically, we call this length representation `recursive_sequence_lengths` and users can use the following code to set or get the `recursive_sequence_lengths` of a LoDTensor in Python: +```Python +# length representation of lod called recursive_sequence_lengths +recursive_seq_lens = [[3, 1, 2], [2, 2, 1, 3, 1, 2]] +# Create a LoDTensor that has the above recursive_sequence_lengths info. +# This recursive_sequence_lengths will be converted to an offset representation of LoD in the C++ implementation under the hood. +tensor = fluid.LoDTensor(lod) + +# Set/Change the recursive_sequence_lengths info of LoDTensor +tensor.set_recursive_sequence_lengths([[3, 1, 2]]) +# Get the recursive_sequence_lengths info of a LoDTensor (the offset-based LoD representation stored in C++ will be converted +# back to length-based recursive_sequence_lengths), new_recursive_seq_lens = [[3, 1, 2]] +new_recursive_seq_lens = tensor.recursive_sequence_lengths() +``` diff --git a/python/paddle/fluid/tests/book/high-level-api/label_semantic_roles/test_label_semantic_roles_newapi.py b/python/paddle/fluid/tests/book/high-level-api/label_semantic_roles/test_label_semantic_roles_newapi.py index 0ccb3a39e0..67aa21e8c5 100755 --- a/python/paddle/fluid/tests/book/high-level-api/label_semantic_roles/test_label_semantic_roles_newapi.py +++ b/python/paddle/fluid/tests/book/high-level-api/label_semantic_roles/test_label_semantic_roles_newapi.py @@ -206,35 +206,35 @@ def infer(use_cuda, inference_program, params_dirname): inferencer = fluid.Inferencer( inference_program, param_path=params_dirname, place=place) - # Setup inputs by creating LoDTensors to represent sequences of words. - # Here each word is the basic element of these LoDTensors and the shape of + # Setup input by creating LoDTensor to represent sequence of words. + # Here each word is the basic element of the LoDTensor and the shape of # each word (base_shape) should be [1] since it is simply an index to # look up for the corresponding word vector. - # Suppose the length_based level of detail (lod) info is set to [[3, 4, 2]], - # which has only one lod level. Then the created LoDTensors will have only + # Suppose the recursive_sequence_lengths info is set to [[3, 4, 2]], + # which has only one level of detail. Then the created LoDTensor will have only # one higher level structure (sequence of words, or sentence) than the basic # element (word). Hence the LoDTensor will hold data for three sentences of # length 3, 4 and 2, respectively. - # Note that lod info should be a list of lists. - lod = [[3, 4, 2]] + # Note that recursive_sequence_lengths should be a list of lists. + recursive_seq_lens = [[3, 4, 2]] base_shape = [1] # The range of random integers is [low, high] word = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=WORD_DICT_LEN - 1) + recursive_seq_lens, base_shape, place, low=0, high=WORD_DICT_LEN - 1) ctx_n2 = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=WORD_DICT_LEN - 1) + recursive_seq_lens, base_shape, place, low=0, high=WORD_DICT_LEN - 1) ctx_n1 = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=WORD_DICT_LEN - 1) + recursive_seq_lens, base_shape, place, low=0, high=WORD_DICT_LEN - 1) ctx_0 = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=WORD_DICT_LEN - 1) + recursive_seq_lens, base_shape, place, low=0, high=WORD_DICT_LEN - 1) ctx_p1 = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=WORD_DICT_LEN - 1) + recursive_seq_lens, base_shape, place, low=0, high=WORD_DICT_LEN - 1) ctx_p2 = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=WORD_DICT_LEN - 1) + recursive_seq_lens, base_shape, place, low=0, high=WORD_DICT_LEN - 1) pred = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=PRED_DICT_LEN - 1) + recursive_seq_lens, base_shape, place, low=0, high=PRED_DICT_LEN - 1) mark = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=MARK_DICT_LEN - 1) + recursive_seq_lens, base_shape, place, low=0, high=MARK_DICT_LEN - 1) results = inferencer.infer( { diff --git a/python/paddle/fluid/tests/book/high-level-api/machine_translation/test_machine_translation.py b/python/paddle/fluid/tests/book/high-level-api/machine_translation/test_machine_translation.py index c4b37df3a0..31d756503a 100644 --- a/python/paddle/fluid/tests/book/high-level-api/machine_translation/test_machine_translation.py +++ b/python/paddle/fluid/tests/book/high-level-api/machine_translation/test_machine_translation.py @@ -215,11 +215,13 @@ def decode_main(use_cuda, is_sparse): [1. for _ in range(batch_size)], dtype='float32') init_ids_data = init_ids_data.reshape((batch_size, 1)) init_scores_data = init_scores_data.reshape((batch_size, 1)) - init_lod = [1] * batch_size - init_lod = [init_lod, init_lod] + init_recursive_seq_lens = [1] * batch_size + init_recursive_seq_lens = [init_recursive_seq_lens, init_recursive_seq_lens] - init_ids = fluid.create_lod_tensor(init_ids_data, init_lod, place) - init_scores = fluid.create_lod_tensor(init_scores_data, init_lod, place) + init_ids = fluid.create_lod_tensor(init_ids_data, + init_init_recursive_seq_lens, place) + init_scores = fluid.create_lod_tensor(init_scores_data, + init_init_recursive_seq_lens, place) train_data = paddle.batch( paddle.reader.shuffle( @@ -243,7 +245,7 @@ def decode_main(use_cuda, is_sparse): feed=feed_dict, fetch_list=[translation_ids, translation_scores], return_numpy=False) - print result_ids.lod() + print result_ids.recursive_sequence_lengths() break diff --git a/python/paddle/fluid/tests/book/high-level-api/recommender_system/test_recommender_system_newapi.py b/python/paddle/fluid/tests/book/high-level-api/recommender_system/test_recommender_system_newapi.py index 090c11ce1e..c860f16417 100644 --- a/python/paddle/fluid/tests/book/high-level-api/recommender_system/test_recommender_system_newapi.py +++ b/python/paddle/fluid/tests/book/high-level-api/recommender_system/test_recommender_system_newapi.py @@ -209,13 +209,15 @@ def infer(use_cuda, inference_program, params_dirname): inference_program, param_path=params_dirname, place=place) # Use the first data from paddle.dataset.movielens.test() as input. - # Use create_lod_tensor(data, lod, place) API to generate LoD Tensor, - # where `data` is a list of sequences of index numbers, `lod` is - # the level of detail (lod) info associated with `data`. + # Use create_lod_tensor(data, recursive_sequence_lengths, place) API + # to generate LoD Tensor where `data` is a list of sequences of index + # numbers, `recursive_sequence_lengths` is the length-based level of detail + # (lod) info associated with `data`. # For example, data = [[10, 2, 3], [2, 3]] means that it contains # two sequences of indexes, of length 3 and 2, respectively. - # Correspondingly, lod = [[3, 2]] contains one level of detail info, - # indicating that `data` consists of two sequences of length 3 and 2. + # Correspondingly, recursive_sequence_lengths = [[3, 2]] contains one + # level of detail info, indicating that `data` consists of two sequences + # of length 3 and 2, respectively. user_id = fluid.create_lod_tensor([[1]], [[1]], place) gender_id = fluid.create_lod_tensor([[1]], [[1]], place) age_id = fluid.create_lod_tensor([[0]], [[1]], place) diff --git a/python/paddle/fluid/tests/book/high-level-api/understand_sentiment/test_understand_sentiment_conv.py b/python/paddle/fluid/tests/book/high-level-api/understand_sentiment/test_understand_sentiment_conv.py index 9b61f7a00c..1668ae83d3 100644 --- a/python/paddle/fluid/tests/book/high-level-api/understand_sentiment/test_understand_sentiment_conv.py +++ b/python/paddle/fluid/tests/book/high-level-api/understand_sentiment/test_understand_sentiment_conv.py @@ -128,17 +128,17 @@ def infer(use_cuda, inference_program, params_dirname=None): # Here each word is the basic element of the LoDTensor and the shape of # each word (base_shape) should be [1] since it is simply an index to # look up for the corresponding word vector. - # Suppose the length_based level of detail (lod) info is set to [[3, 4, 2]], - # which has only one lod level. Then the created LoDTensor will have only + # Suppose the recursive_sequence_lengths info is set to [[3, 4, 2]], + # which has only one level of detail. Then the created LoDTensor will have only # one higher level structure (sequence of words, or sentence) than the basic # element (word). Hence the LoDTensor will hold data for three sentences of # length 3, 4 and 2, respectively. - # Note that lod info should be a list of lists. - lod = [[3, 4, 2]] + # Note that recursive_sequence_lengths should be a list of lists. + recursive_seq_lens = [[3, 4, 2]] base_shape = [1] # The range of random integers is [low, high] tensor_words = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=len(word_dict) - 1) + recursive_seq_lens, base_shape, place, low=0, high=len(word_dict) - 1) results = inferencer.infer({'words': tensor_words}) print("infer results: ", results) diff --git a/python/paddle/fluid/tests/book/high-level-api/understand_sentiment/test_understand_sentiment_dynamic_rnn.py b/python/paddle/fluid/tests/book/high-level-api/understand_sentiment/test_understand_sentiment_dynamic_rnn.py index aa7c567b4d..8da89d82cb 100644 --- a/python/paddle/fluid/tests/book/high-level-api/understand_sentiment/test_understand_sentiment_dynamic_rnn.py +++ b/python/paddle/fluid/tests/book/high-level-api/understand_sentiment/test_understand_sentiment_dynamic_rnn.py @@ -143,17 +143,17 @@ def infer(use_cuda, inference_program, params_dirname=None): # Here each word is the basic element of the LoDTensor and the shape of # each word (base_shape) should be [1] since it is simply an index to # look up for the corresponding word vector. - # Suppose the length_based level of detail (lod) info is set to [[3, 4, 2]], - # which has only one lod level. Then the created LoDTensor will have only + # Suppose the recursive_sequence_lengths info is set to [[3, 4, 2]], + # which has only one level of detail. Then the created LoDTensor will have only # one higher level structure (sequence of words, or sentence) than the basic # element (word). Hence the LoDTensor will hold data for three sentences of # length 3, 4 and 2, respectively. - # Note that lod info should be a list of lists. - lod = [[3, 4, 2]] + # Note that recursive_sequence_lengths should be a list of lists. + recursive_seq_lens = [[3, 4, 2]] base_shape = [1] # The range of random integers is [low, high] tensor_words = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=len(word_dict) - 1) + recursive_seq_lens, base_shape, place, low=0, high=len(word_dict) - 1) results = inferencer.infer({'words': tensor_words}) print("infer results: ", results) diff --git a/python/paddle/fluid/tests/book/high-level-api/understand_sentiment/test_understand_sentiment_stacked_lstm.py b/python/paddle/fluid/tests/book/high-level-api/understand_sentiment/test_understand_sentiment_stacked_lstm.py index 8c74be0f08..74faa2e8aa 100644 --- a/python/paddle/fluid/tests/book/high-level-api/understand_sentiment/test_understand_sentiment_stacked_lstm.py +++ b/python/paddle/fluid/tests/book/high-level-api/understand_sentiment/test_understand_sentiment_stacked_lstm.py @@ -138,17 +138,17 @@ def infer(use_cuda, inference_program, params_dirname=None): # Here each word is the basic element of the LoDTensor and the shape of # each word (base_shape) should be [1] since it is simply an index to # look up for the corresponding word vector. - # Suppose the length_based level of detail (lod) info is set to [[3, 4, 2]], - # which has only one lod level. Then the created LoDTensor will have only + # Suppose the recursive_sequence_lengths info is set to [[3, 4, 2]], + # which has only one level of detail. Then the created LoDTensor will have only # one higher level structure (sequence of words, or sentence) than the basic # element (word). Hence the LoDTensor will hold data for three sentences of # length 3, 4 and 2, respectively. - # Note that lod info should be a list of lists. - lod = [[3, 4, 2]] + # Note that recursive_sequence_lengths should be a list of lists. + recursive_seq_lens = [[3, 4, 2]] base_shape = [1] # The range of random integers is [low, high] tensor_words = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=len(word_dict) - 1) + recursive_seq_lens, base_shape, place, low=0, high=len(word_dict) - 1) results = inferencer.infer({'words': tensor_words}) print("infer results: ", results) diff --git a/python/paddle/fluid/tests/book/high-level-api/word2vec/test_word2vec_new_api.py b/python/paddle/fluid/tests/book/high-level-api/word2vec/test_word2vec_new_api.py index ba44f72d9b..02e65cf56c 100644 --- a/python/paddle/fluid/tests/book/high-level-api/word2vec/test_word2vec_new_api.py +++ b/python/paddle/fluid/tests/book/high-level-api/word2vec/test_word2vec_new_api.py @@ -124,21 +124,22 @@ def infer(use_cuda, inference_program, params_dirname=None): # Setup inputs by creating 4 LoDTensors representing 4 words. Here each word # is simply an index to look up for the corresponding word vector and hence - # the shape of word (base_shape) should be [1]. The length-based level of - # detail (lod) info of each LoDtensor should be [[1]] meaning there is only - # one lod_level and there is only one sequence of one word on this level. - # Note that lod info should be a list of lists. - lod = [[1]] + # the shape of word (base_shape) should be [1]. The recursive_sequence_lengths, + # which is length-based level of detail (lod) of each LoDTensor, should be [[1]] + # meaning there is only one level of detail and there is only one sequence of + # one word on this level. + # Note that recursive_sequence_lengths should be a list of lists. + recursive_seq_lens = [[1]] base_shape = [1] # The range of random integers is [low, high] first_word = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=dict_size - 1) + recursive_seq_lens, base_shape, place, low=0, high=dict_size - 1) second_word = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=dict_size - 1) + recursive_seq_lens, base_shape, place, low=0, high=dict_size - 1) third_word = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=dict_size - 1) + recursive_seq_lens, base_shape, place, low=0, high=dict_size - 1) fourth_word = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=dict_size - 1) + recursive_seq_lens, base_shape, place, low=0, high=dict_size - 1) result = inferencer.infer( { diff --git a/python/paddle/fluid/tests/book/notest_understand_sentiment.py b/python/paddle/fluid/tests/book/notest_understand_sentiment.py index 5d9a47c9ba..1df7b99aad 100644 --- a/python/paddle/fluid/tests/book/notest_understand_sentiment.py +++ b/python/paddle/fluid/tests/book/notest_understand_sentiment.py @@ -238,17 +238,21 @@ def infer(word_dict, use_cuda, save_dirname=None): # Here each word is the basic element of the LoDTensor and the shape of # each word (base_shape) should be [1] since it is simply an index to # look up for the corresponding word vector. - # Suppose the length_based level of detail (lod) info is set to [[3, 4, 2]], - # which has only one lod level. Then the created LoDTensor will have only + # Suppose the recursive_sequence_lengths info is set to [[3, 4, 2]], + # which has only one level of detail. Then the created LoDTensor will have only # one higher level structure (sequence of words, or sentence) than the basic # element (word). Hence the LoDTensor will hold data for three sentences of # length 3, 4 and 2, respectively. - # Note that lod info should be a list of lists. - lod = [[3, 4, 2]] + # Note that recursive_sequence_lengths should be a list of lists. + recursive_seq_lens = [[3, 4, 2]] base_shape = [1] # The range of random integers is [low, high] tensor_words = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=word_dict_len - 1) + recursive_seq_lens, + base_shape, + place, + low=0, + high=word_dict_len - 1) # Construct feed as a dictionary of {feed_target_name: feed_target_data} # and results will contain a list of data corresponding to fetch_targets. @@ -257,7 +261,7 @@ def infer(word_dict, use_cuda, save_dirname=None): feed={feed_target_names[0]: tensor_words}, fetch_list=fetch_targets, return_numpy=False) - print(results[0].lod()) + print(results[0].recursive_sequence_lengths()) np_data = np.array(results[0]) print("Inference Shape: ", np_data.shape) print("Inference results: ", np_data) diff --git a/python/paddle/fluid/tests/book/test_label_semantic_roles.py b/python/paddle/fluid/tests/book/test_label_semantic_roles.py index e214ced0b5..d489feae9c 100644 --- a/python/paddle/fluid/tests/book/test_label_semantic_roles.py +++ b/python/paddle/fluid/tests/book/test_label_semantic_roles.py @@ -247,35 +247,67 @@ def infer(use_cuda, save_dirname=None): [inference_program, feed_target_names, fetch_targets] = fluid.io.load_inference_model(save_dirname, exe) - # Setup inputs by creating LoDTensors to represent sequences of words. - # Here each word is the basic element of these LoDTensors and the shape of + # Setup input by creating LoDTensor to represent sequence of words. + # Here each word is the basic element of the LoDTensor and the shape of # each word (base_shape) should be [1] since it is simply an index to # look up for the corresponding word vector. - # Suppose the length_based level of detail (lod) info is set to [[3, 4, 2]], - # which has only one lod level. Then the created LoDTensors will have only + # Suppose the recursive_sequence_lengths info is set to [[3, 4, 2]], + # which has only one level of detail. Then the created LoDTensor will have only # one higher level structure (sequence of words, or sentence) than the basic # element (word). Hence the LoDTensor will hold data for three sentences of # length 3, 4 and 2, respectively. - # Note that lod info should be a list of lists. - lod = [[3, 4, 2]] + # Note that recursive_sequence_lengths should be a list of lists. + recursive_seq_lens = [[3, 4, 2]] base_shape = [1] # The range of random integers is [low, high] word = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=word_dict_len - 1) + recursive_seq_lens, + base_shape, + place, + low=0, + high=word_dict_len - 1) pred = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=pred_dict_len - 1) + recursive_seq_lens, + base_shape, + place, + low=0, + high=pred_dict_len - 1) ctx_n2 = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=word_dict_len - 1) + recursive_seq_lens, + base_shape, + place, + low=0, + high=word_dict_len - 1) ctx_n1 = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=word_dict_len - 1) + recursive_seq_lens, + base_shape, + place, + low=0, + high=word_dict_len - 1) ctx_0 = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=word_dict_len - 1) + recursive_seq_lens, + base_shape, + place, + low=0, + high=word_dict_len - 1) ctx_p1 = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=word_dict_len - 1) + recursive_seq_lens, + base_shape, + place, + low=0, + high=word_dict_len - 1) ctx_p2 = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=word_dict_len - 1) + recursive_seq_lens, + base_shape, + place, + low=0, + high=word_dict_len - 1) mark = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=mark_dict_len - 1) + recursive_seq_lens, + base_shape, + place, + low=0, + high=mark_dict_len - 1) # Construct feed as a dictionary of {feed_target_name: feed_target_data} # and results will contain a list of data corresponding to fetch_targets. @@ -301,7 +333,7 @@ def infer(use_cuda, save_dirname=None): }, fetch_list=fetch_targets, return_numpy=False) - print(results[0].lod()) + print(results[0].recursive_sequence_lengths()) np_data = np.array(results[0]) print("Inference Shape: ", np_data.shape) diff --git a/python/paddle/fluid/tests/book/test_machine_translation.py b/python/paddle/fluid/tests/book/test_machine_translation.py index 372d6ec822..a68eae5bcb 100644 --- a/python/paddle/fluid/tests/book/test_machine_translation.py +++ b/python/paddle/fluid/tests/book/test_machine_translation.py @@ -108,7 +108,7 @@ def decoder_decode(context, is_sparse): pre_state = pd.array_read(array=state_array, i=counter) pre_score = pd.array_read(array=scores_array, i=counter) - # expand the lod of pre_state to be the same with pre_score + # expand the recursive_sequence_lengths of pre_state to be the same with pre_score pre_state_expanded = pd.sequence_expand(pre_state, pre_score) pre_ids_emb = pd.embedding( @@ -238,11 +238,13 @@ def decode_main(use_cuda, is_sparse): [1. for _ in range(batch_size)], dtype='float32') init_ids_data = init_ids_data.reshape((batch_size, 1)) init_scores_data = init_scores_data.reshape((batch_size, 1)) - init_lod = [1] * batch_size - init_lod = [init_lod, init_lod] + init_recursive_seq_lens = [1] * batch_size + init_recursive_seq_lens = [init_recursive_seq_lens, init_recursive_seq_lens] - init_ids = fluid.create_lod_tensor(init_ids_data, init_lod, place) - init_scores = fluid.create_lod_tensor(init_scores_data, init_lod, place) + init_ids = fluid.create_lod_tensor(init_ids_data, init_recursive_seq_lens, + place) + init_scores = fluid.create_lod_tensor(init_scores_data, + init_recursive_seq_lens, place) train_data = paddle.batch( paddle.reader.shuffle( @@ -266,7 +268,7 @@ def decode_main(use_cuda, is_sparse): feed=feed_dict, fetch_list=[translation_ids, translation_scores], return_numpy=False) - print result_ids.lod() + print result_ids.recursive_sequence_lengths() break diff --git a/python/paddle/fluid/tests/book/test_recommender_system.py b/python/paddle/fluid/tests/book/test_recommender_system.py index 937d8dd5b0..6548766ef5 100644 --- a/python/paddle/fluid/tests/book/test_recommender_system.py +++ b/python/paddle/fluid/tests/book/test_recommender_system.py @@ -260,13 +260,15 @@ def infer(use_cuda, save_dirname=None): # Use the first data from paddle.dataset.movielens.test() as input assert feed_target_names[0] == "user_id" - # Use create_lod_tensor(data, lod, place) API to generate LoD Tensor - # where `data` is a list of sequences of index numbers, `lod` is - # the level of detail (lod) info associated with `data`. + # Use create_lod_tensor(data, recursive_sequence_lengths, place) API + # to generate LoD Tensor where `data` is a list of sequences of index + # numbers, `recursive_sequence_lengths` is the length-based level of detail + # (lod) info associated with `data`. # For example, data = [[10, 2, 3], [2, 3]] means that it contains # two sequences of indexes, of length 3 and 2, respectively. - # Correspondingly, lod = [[3, 2]] contains one level of detail info, - # indicating that `data` consists of two sequences of length 3 and 2. + # Correspondingly, recursive_sequence_lengths = [[3, 2]] contains one + # level of detail info, indicating that `data` consists of two sequences + # of length 3 and 2, respectively. user_id = fluid.create_lod_tensor([[1]], [[1]], place) assert feed_target_names[1] == "gender_id" diff --git a/python/paddle/fluid/tests/book/test_rnn_encoder_decoder.py b/python/paddle/fluid/tests/book/test_rnn_encoder_decoder.py index 7ada57def6..4672826241 100644 --- a/python/paddle/fluid/tests/book/test_rnn_encoder_decoder.py +++ b/python/paddle/fluid/tests/book/test_rnn_encoder_decoder.py @@ -216,19 +216,19 @@ def infer(use_cuda, save_dirname=None): # Here each word is the basic element of the LoDTensor and the shape of # each word (base_shape) should be [1] since it is simply an index to # look up for the corresponding word vector. - # Suppose the length_based level of detail (lod) info is set to [[4, 6]], - # which has only one lod level. Then the created LoDTensor will have only + # Suppose the recursive_sequence_lengths info is set to [[4, 6]], + # which has only one level of detail. Then the created LoDTensor will have only # one higher level structure (sequence of words, or sentence) than the basic # element (word). Hence the LoDTensor will hold data for two sentences of # length 4 and 6, respectively. - # Note that lod info should be a list of lists. - lod = [[4, 6]] + # Note that recursive_sequence_lengths should be a list of lists. + recursive_seq_lens = [[4, 6]] base_shape = [1] # The range of random integers is [low, high] word_data = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=1) + recursive_seq_lens, base_shape, place, low=0, high=1) trg_word = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=1) + recursive_seq_lens, base_shape, place, low=0, high=1) # Construct feed as a dictionary of {feed_target_name: feed_target_data} # and results will contain a list of data corresponding to fetch_targets. @@ -241,7 +241,7 @@ def infer(use_cuda, save_dirname=None): }, fetch_list=fetch_targets, return_numpy=False) - print(results[0].lod()) + print(results[0].recursive_sequence_lengths()) np_data = np.array(results[0]) print("Inference shape: ", np_data.shape) print("Inference results: ", np_data) diff --git a/python/paddle/fluid/tests/book/test_word2vec.py b/python/paddle/fluid/tests/book/test_word2vec.py index 75bed06bd7..49bd72c7a5 100644 --- a/python/paddle/fluid/tests/book/test_word2vec.py +++ b/python/paddle/fluid/tests/book/test_word2vec.py @@ -168,21 +168,22 @@ def infer(use_cuda, save_dirname=None): # Setup inputs by creating 4 LoDTensors representing 4 words. Here each word # is simply an index to look up for the corresponding word vector and hence - # the shape of word (base_shape) should be [1]. The length-based level of - # detail (lod) info of each LoDtensor should be [[1]] meaning there is only - # one lod_level and there is only one sequence of one word on this level. - # Note that lod info should be a list of lists. - lod = [[1]] + # the shape of word (base_shape) should be [1]. The recursive_sequence_lengths, + # which is length-based level of detail (lod) of each LoDTensor, should be [[1]] + # meaning there is only one level of detail and there is only one sequence of + # one word on this level. + # Note that recursive_sequence_lengths should be a list of lists. + recursive_seq_lens = [[1]] base_shape = [1] # The range of random integers is [low, high] first_word = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=dict_size - 1) + recursive_seq_lens, base_shape, place, low=0, high=dict_size - 1) second_word = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=dict_size - 1) + recursive_seq_lens, base_shape, place, low=0, high=dict_size - 1) third_word = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=dict_size - 1) + recursive_seq_lens, base_shape, place, low=0, high=dict_size - 1) fourth_word = fluid.create_random_int_lodtensor( - lod, base_shape, place, low=0, high=dict_size - 1) + recursive_seq_lens, base_shape, place, low=0, high=dict_size - 1) assert feed_target_names[0] == 'firstw' assert feed_target_names[1] == 'secondw' @@ -200,7 +201,7 @@ def infer(use_cuda, save_dirname=None): }, fetch_list=fetch_targets, return_numpy=False) - print(results[0].lod()) + print(results[0].recursive_sequence_lengths()) np_data = np.array(results[0]) print("Inference Shape: ", np_data.shape) From a2e43ae5ce691fef18c0e6600dde7c8c4e5d1c27 Mon Sep 17 00:00:00 2001 From: "yi.wu" Date: Mon, 25 Jun 2018 17:16:00 +0800 Subject: [PATCH 029/130] fix trainer nccl2 env --- python/paddle/fluid/trainer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/paddle/fluid/trainer.py b/python/paddle/fluid/trainer.py index 45ab889bea..fc4d7cba71 100644 --- a/python/paddle/fluid/trainer.py +++ b/python/paddle/fluid/trainer.py @@ -315,7 +315,7 @@ class Trainer(object): for ip in worker_ips.split(","): worker_endpoints.append(':'.join([ip, port])) self.num_trainers = len(worker_endpoints) - current_endpoint = os.getenv("POD_IP") + ":" + port + current_endpoint = os.getenv("PADDLE_CURRENT_IP") + ":" + port worker_endpoints.remove(current_endpoint) # TODO(wuyi): use self.nccl_id_var, self.num_trainers and self.trainer_id # in ParallelExecutor to start From 9faf5a39c5cd361fcc50d1cb585a7232220fd20f Mon Sep 17 00:00:00 2001 From: yuyang18 Date: Tue, 26 Jun 2018 17:59:20 +0800 Subject: [PATCH 030/130] Refactor Operator.cc, and clean code --- .../design/multi_devices/kernel_selection.md | 4 +- paddle/fluid/framework/data_transform.cc | 20 +-- paddle/fluid/framework/data_transform.h | 15 ++- paddle/fluid/framework/op_kernel_type.h | 2 +- paddle/fluid/framework/operator.cc | 117 ++++++++++++------ paddle/fluid/framework/operator.h | 14 +++ 6 files changed, 112 insertions(+), 60 deletions(-) diff --git a/doc/fluid/design/multi_devices/kernel_selection.md b/doc/fluid/design/multi_devices/kernel_selection.md index 967317d5d2..c8391787f7 100644 --- a/doc/fluid/design/multi_devices/kernel_selection.md +++ b/doc/fluid/design/multi_devices/kernel_selection.md @@ -74,10 +74,10 @@ void OperatorWithKernel::Run( auto kernel_type_for_var = this->GetKernelTypeForVar(...); if (kernel_type_for_var.place_ != expected_kernel_key.place_) { auto* trans_var = new_scope.Var(var_name); - auto* out = DataTransform(expected_kernel_key, + auto* out = TransferData(expected_kernel_key, kernel_type_for_var, *tensor_in); - CopyVariableWithTensor(...); + SetTensorToVariable(...); } } diff --git a/paddle/fluid/framework/data_transform.cc b/paddle/fluid/framework/data_transform.cc index 5f15e20c78..f52350ecb8 100644 --- a/paddle/fluid/framework/data_transform.cc +++ b/paddle/fluid/framework/data_transform.cc @@ -21,14 +21,14 @@ limitations under the License. */ namespace paddle { namespace framework { -static void PassTensorData(Tensor* from, Tensor* to) { +static void PassTensorData(Tensor *from, Tensor *to) { to->ShareDataWith(*from); *from = Tensor(); } -void DataTransform(const OpKernelType& expected_kernel_type, - const OpKernelType& kernel_type_for_var, - const Tensor& input_tensor, Tensor* output_tensor) { +void TransferData(const OpKernelType &expected_kernel_type, + const OpKernelType &kernel_type_for_var, + const Tensor &input_tensor, Tensor *output_tensor) { bool transformed = false; Tensor in; in.ShareDataWith(input_tensor); @@ -89,17 +89,17 @@ void DataTransform(const OpKernelType& expected_kernel_type, output_tensor->ShareDataWith(in); } -void CopyVariableWithTensor(const Variable& in_var, const Tensor& tensor, - Variable* out_var) { +void SetTensorToVariable(const Variable &in_var, const Tensor &tensor, + Variable *out_var) { if (in_var.IsType()) { - auto& in_lod_tensor = in_var.Get(); - auto* tran_lod_tensor = out_var->GetMutable(); + auto &in_lod_tensor = in_var.Get(); + auto *tran_lod_tensor = out_var->GetMutable(); tran_lod_tensor->set_lod(in_lod_tensor.lod()); tran_lod_tensor->set_layout(in_lod_tensor.layout()); tran_lod_tensor->ShareDataWith(tensor); } else if (in_var.IsType()) { - auto& in_selected_rows = in_var.Get(); - auto* trans_selected_rows = out_var->GetMutable(); + auto &in_selected_rows = in_var.Get(); + auto *trans_selected_rows = out_var->GetMutable(); trans_selected_rows->set_height(in_selected_rows.height()); trans_selected_rows->set_rows(in_selected_rows.rows()); trans_selected_rows->mutable_value()->ShareDataWith(tensor); diff --git a/paddle/fluid/framework/data_transform.h b/paddle/fluid/framework/data_transform.h index dee5d8c7c1..161f1023e3 100644 --- a/paddle/fluid/framework/data_transform.h +++ b/paddle/fluid/framework/data_transform.h @@ -30,12 +30,15 @@ limitations under the License. */ namespace paddle { namespace framework { -void DataTransform(const OpKernelType& expected_kernel_type, - const OpKernelType& kernel_type_for_var, - const Tensor& input_tensor, Tensor* out); - -void CopyVariableWithTensor(const Variable& in_var, const Tensor& tensor, - Variable* out_var); +void TransferData(const OpKernelType &expected_kernel_type, + const OpKernelType &kernel_type_for_var, + const Tensor &input_tensor, Tensor *out); + +/** + * Set OutVar from InVar, except the tensor is shared with `tensor` + */ +void SetTensorToVariable(const Variable &in_var, const Tensor &tensor, + Variable *out_var); } // namespace framework } // namespace paddle diff --git a/paddle/fluid/framework/op_kernel_type.h b/paddle/fluid/framework/op_kernel_type.h index f51a184e7b..c59b232191 100644 --- a/paddle/fluid/framework/op_kernel_type.h +++ b/paddle/fluid/framework/op_kernel_type.h @@ -97,7 +97,7 @@ inline bool NeedTransformLayout(const DataLayout& l, const DataLayout& r) { return ret; } -inline bool TransFromNeeded(const OpKernelType& l, const OpKernelType& r) { +inline bool NeedTransform(const OpKernelType& l, const OpKernelType& r) { return (!platform::places_are_same_class(l.place_, r.place_)) || (l.data_type_ != r.data_type_) || NeedTransformLayout(l.data_layout_, r.data_layout_); diff --git a/paddle/fluid/framework/operator.cc b/paddle/fluid/framework/operator.cc index 122ee1dab3..b364ee2c3d 100644 --- a/paddle/fluid/framework/operator.cc +++ b/paddle/fluid/framework/operator.cc @@ -620,8 +620,6 @@ void OperatorWithKernel::RunImpl(const Scope& scope, "There are no kernels which are registered in the %s operator.", type_); } - ExecutionContext ctx(*this, scope, *dev_ctx); - OpKernelMap& kernels = kernels_iter->second; // TODO(dzhwinter) : kernel fallback mechanism will be added when all the @@ -631,7 +629,8 @@ void OperatorWithKernel::RunImpl(const Scope& scope, // Do selection // } - auto expected_kernel_key = this->GetExpectedKernelType(ctx); + auto expected_kernel_key = + this->GetExpectedKernelType(ExecutionContext(*this, scope, *dev_ctx)); VLOG(3) << "expected_kernel_key:" << expected_kernel_key; auto kernel_iter = kernels.find(expected_kernel_key); @@ -640,56 +639,34 @@ void OperatorWithKernel::RunImpl(const Scope& scope, KernelTypeToString(expected_kernel_key)); } - // do data transform - Scope& new_scope = scope.NewScope(); + // do data transformScope &transfer_scope; + std::vector transfered_inplace_vars; + auto* transfer_scope = + TryTransferData(scope, expected_kernel_key, &transfered_inplace_vars); - std::vector inplace_vars; - for (auto& var_name_item : this->Inputs()) { - for (auto& var_name : var_name_item.second) { - auto* var = scope.FindVar(var_name); - if (var && VarIsTensor(var)) { - auto* tensor_in = GetTensorFromVar(var); - if (tensor_in->IsInitialized()) { - auto kernel_type_for_var = this->GetKernelTypeForVar( - var_name_item.first, *tensor_in, expected_kernel_key); - if (TransFromNeeded(kernel_type_for_var, expected_kernel_key)) { - auto out_var_names = OutputVars(true); - if (std::find(out_var_names.begin(), out_var_names.end(), - var_name) != out_var_names.end()) { - inplace_vars.push_back(var_name); - } - VLOG(3) << "Transform Variable " << var_name << " from " - << kernel_type_for_var << " to " << expected_kernel_key; - auto* trans_var = new_scope.Var(var_name); - std::shared_ptr out(new Tensor); - DataTransform(expected_kernel_key, kernel_type_for_var, *tensor_in, - out.get()); - CopyVariableWithTensor(*var, *(out.get()), trans_var); - } - } - } - } + // exec scope is the scope that kernel actually executed on. + const Scope& exec_scope = + (transfer_scope == nullptr ? scope : *transfer_scope); + + if (!(expected_kernel_key.place_ == dev_ctx->GetPlace())) { + dev_ctx = pool.Get(expected_kernel_key.place_); } - auto* new_dev_ctx = pool.Get(expected_kernel_key.place_); - kernel_iter->second->Compute( - ExecutionContext(*this, new_scope, *new_dev_ctx)); + kernel_iter->second->Compute(ExecutionContext(*this, exec_scope, *dev_ctx)); - for (auto& var_name : inplace_vars) { - VLOG(3) << "share inplace var " + var_name + " back to it's original scope"; - auto* original_tensor = GetMutableTensorFromVar(scope.FindVar(var_name)); - auto* transformed_tensor = GetTensorFromVar(new_scope.FindVar(var_name)); - original_tensor->ShareDataWith(*transformed_tensor); + if (!transfered_inplace_vars.empty()) { + // there is inplace variable has been transfered. + TransferInplaceVarsBack(scope, transfered_inplace_vars, *transfer_scope); } /*For profiling/benchmark only*/ if (FLAGS_benchmark) { - new_dev_ctx->Wait(); + dev_ctx->Wait(); } if (FLAGS_check_nan_inf) { for (auto& vname : OutputVars(true)) { - auto* var = new_scope.FindVar(vname); + auto* var = exec_scope.FindVar(vname); if (var == nullptr) continue; if (var->IsType()) { CheckTensorNANOrInf(vname, var->Get()); @@ -697,6 +674,64 @@ void OperatorWithKernel::RunImpl(const Scope& scope, } } } +void OperatorWithKernel::TransferInplaceVarsBack( + const Scope& scope, const std::vector& inplace_vars, + const Scope& transfer_scope) const { + for (auto& var_name : inplace_vars) { + VLOG(3) << "share inplace var " + var_name + " back to it's original scope"; + auto* original_tensor = GetMutableTensorFromVar(scope.FindVar(var_name)); + auto* transformed_tensor = + GetTensorFromVar(transfer_scope.FindVar(var_name)); + original_tensor->ShareDataWith(*transformed_tensor); + } +} + +Scope* OperatorWithKernel::TryTransferData( + const Scope& scope, const OpKernelType& expected_kernel_key, + std::vector* transfered_inplace_vars) const { + Scope* new_scope = nullptr; + for (auto& var_name_item : Inputs()) { + for (auto& var_name : var_name_item.second) { + auto* var = scope.FindVar(var_name); + // Only tensor can be tranfer to another device. + if (var == nullptr || !VarIsTensor(var)) { + continue; + } + + auto* tensor_in = GetTensorFromVar(var); + if (!tensor_in->IsInitialized()) { + continue; + } + + auto kernel_type_for_var = GetKernelTypeForVar( + var_name_item.first, *tensor_in, expected_kernel_key); + + if (!NeedTransform(kernel_type_for_var, expected_kernel_key)) { + continue; + } + + auto out_var_names = OutputVars(true); + if (std::find(out_var_names.begin(), out_var_names.end(), var_name) != + out_var_names.end()) { + transfered_inplace_vars->emplace_back(var_name); + } + + VLOG(3) << "Transform Variable " << var_name << " from " + << kernel_type_for_var << " to " << expected_kernel_key; + + if (new_scope == nullptr) { + new_scope = &scope.NewScope(); + } + + auto* trans_var = new_scope->Var(var_name); + Tensor out; + TransferData(expected_kernel_key, kernel_type_for_var, *tensor_in, &out); + SetTensorToVariable(*var, out, trans_var); + } + } + + return new_scope; +} proto::VarType::Type OperatorWithKernel::IndicateDataType( const ExecutionContext& ctx) const { diff --git a/paddle/fluid/framework/operator.h b/paddle/fluid/framework/operator.h index b1d75d0d0f..1550d5df17 100644 --- a/paddle/fluid/framework/operator.h +++ b/paddle/fluid/framework/operator.h @@ -384,6 +384,20 @@ class OperatorWithKernel : public OperatorBase { // same. proto::VarType::Type IndicateDataType(const ExecutionContext& ctx) const; void RunImpl(const Scope& scope, const platform::Place& place) const final; + + /** + * Transfer data from scope to a transfered scope. If there is no data need to + * be tranfered, it returns nullptr. + * + * * transfered_inplace_vars is a output vector. + */ + Scope* TryTransferData( + const Scope& scope, const OpKernelType& expected_kernel_key, + std::vector* transfered_inplace_vars) const; + + void TransferInplaceVarsBack(const Scope& scope, + const std::vector& inplace_vars, + const Scope& exec_scope) const; }; extern bool OpSupportGPU(const std::string& op_type); From 480d848eb989d4decd68cc76cf2e34c27dee5763 Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Tue, 26 Jun 2018 22:56:21 +0800 Subject: [PATCH 031/130] optimize doc for host_memory_profiling_cn --- doc/fluid/howto/optimization/host_memory_profiling_cn.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/fluid/howto/optimization/host_memory_profiling_cn.md b/doc/fluid/howto/optimization/host_memory_profiling_cn.md index 9b55a66ded..7fb0883dd9 100644 --- a/doc/fluid/howto/optimization/host_memory_profiling_cn.md +++ b/doc/fluid/howto/optimization/host_memory_profiling_cn.md @@ -1,4 +1,4 @@ -## 堆内存分析和优化 +# 堆内存分析和优化 计算机程序都可能有内存泄漏的风险。**内存泄漏**一般是由于程序在堆(heap)上分配了内存而没有释放,随着程序的运行占用的内存越来越大,一方面会影响程序的稳定性,可能让运行速度越来越慢,或者造成oom,甚至会影响运行程序的机器的稳定性,造成宕机。 @@ -20,11 +20,11 @@ Paddle也提供了基于gperftool的[CPU性能分析教程](https://github.com/P 对于堆内存的分析,主要用到thread-caching malloc和heap-profiling using tcmalloc。 -## 使用流程 -#### 环境 +## 环境 + 本教程基于paddle提供的Docker开发环境paddlepaddle/paddle:latest-dev,基于Ubuntu 16.04.4 LTS环境。 -#### 使用流程 +## 使用流程 - 安装google-perftools From 6b95a8a89cc79da73a9d3c461083025e298638a7 Mon Sep 17 00:00:00 2001 From: Kexin Zhao Date: Tue, 26 Jun 2018 22:57:25 -0700 Subject: [PATCH 032/130] fix error --- .../machine_translation/test_machine_translation.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/paddle/fluid/tests/book/high-level-api/machine_translation/test_machine_translation.py b/python/paddle/fluid/tests/book/high-level-api/machine_translation/test_machine_translation.py index 31d756503a..12c4134dc9 100644 --- a/python/paddle/fluid/tests/book/high-level-api/machine_translation/test_machine_translation.py +++ b/python/paddle/fluid/tests/book/high-level-api/machine_translation/test_machine_translation.py @@ -218,10 +218,10 @@ def decode_main(use_cuda, is_sparse): init_recursive_seq_lens = [1] * batch_size init_recursive_seq_lens = [init_recursive_seq_lens, init_recursive_seq_lens] - init_ids = fluid.create_lod_tensor(init_ids_data, - init_init_recursive_seq_lens, place) + init_ids = fluid.create_lod_tensor(init_ids_data, init_recursive_seq_lens, + place) init_scores = fluid.create_lod_tensor(init_scores_data, - init_init_recursive_seq_lens, place) + init_recursive_seq_lens, place) train_data = paddle.batch( paddle.reader.shuffle( From c45a4b8567ee6b7b30bbe4a5733775970e831a88 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Wed, 27 Jun 2018 14:15:35 +0800 Subject: [PATCH 033/130] use sigkill to stop pserver --- python/paddle/fluid/tests/unittests/test_dist_mnist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/paddle/fluid/tests/unittests/test_dist_mnist.py b/python/paddle/fluid/tests/unittests/test_dist_mnist.py index e4d39c8b3f..450ec414d1 100644 --- a/python/paddle/fluid/tests/unittests/test_dist_mnist.py +++ b/python/paddle/fluid/tests/unittests/test_dist_mnist.py @@ -145,7 +145,7 @@ class TestDistMnist(unittest.TestCase): retry_times -= 1 def stop_pserver(self, pid): - os.kill(pid, signal.SIGTERM) + os.kill(pid, signal.SIGKILL) def test_with_place(self): p = fluid.CUDAPlace(0) if core.is_compiled_with_cuda( From b7c179a87fc370c4a4b176621b5176c0aff5a7d1 Mon Sep 17 00:00:00 2001 From: Kexin Zhao Date: Tue, 26 Jun 2018 23:26:10 -0700 Subject: [PATCH 034/130] fix lodtensor.py --- python/paddle/fluid/lod_tensor.py | 57 ++++++++------- python/paddle/fluid/tests/test_lod_tensor.py | 73 +++++++++++--------- 2 files changed, 73 insertions(+), 57 deletions(-) diff --git a/python/paddle/fluid/lod_tensor.py b/python/paddle/fluid/lod_tensor.py index c417ab393f..b2b3186c1e 100644 --- a/python/paddle/fluid/lod_tensor.py +++ b/python/paddle/fluid/lod_tensor.py @@ -18,15 +18,16 @@ import numpy as np __all__ = ['create_lod_tensor', 'create_random_int_lodtensor'] -def create_lod_tensor(data, lod, place): +def create_lod_tensor(data, recursive_seq_lens, place): """ Create a lod tensor from a numpy array, a list, or an existing lod tensor. Create a lod tensor by doing the following: - 1. Check that the length-based input lod is valid. + 1. Check that the length-based level of detail (LoD) also known as + recursive_sequence_lengths of the input is valid. - 2. Convert the length-based lod to a offset-based LoD. + 2. Convert recursive_sequence_lengths to a offset-based LoD. 3. Copy the data from a numpy array, a list or a existing lod tensor to CPU or GPU device (based on input place). @@ -37,45 +38,47 @@ def create_lod_tensor(data, lod, place): Suppose we want LoDTensor to hold data for sequences of word, where each word is represented by an integer. If we want to create a LoDTensor to - represent two sentences, one of 2 words, and one of 3 words. + represent two sentences, one of 2 words, and one of 3 words. Then :code:`data` can be a numpy array of integers with shape (5, 1). - :code:`lod` will be [[2, 3]], indicating the length(# of words) in each - sentence. This length-based input lod [[2, 3]] will be converted to - offset-based lod [[0, 2, 5]] inside the function call. + :code:`recursive_seq_lens` will be [[2, 3]], indicating the length(# of words) in each + sentence. This length-based :code:`recursive_seq_lens` [[2, 3]] will be converted to + offset-based LoD [[0, 2, 5]] inside the function call. Please reference :ref:`api_guide_low_level_lod_tensor` for more details regarding LoD. Args: data(numpy.ndarray|list|LoDTensor): a numpy array or a LoDTensor or a - list holding the data to be copied. - lod(list): a list of lists indicating the length-based LoD info - specified by the user. + list holding the data to be copied. + recursive_seq_lens(list): a list of lists indicating the length-based level of detail + info specified by the user. place(Place): CPU or GPU place indicating where the data in the new LoDTensor will be stored. Returns: - A fluid LoDTensor object with tensor data and lod info. + A fluid LoDTensor object with tensor data and recursive_seq_lens info. """ if isinstance(data, core.LoDTensor): - return create_lod_tensor(np.array(data), lod, place) + return create_lod_tensor(np.array(data), recursive_seq_lens, place) elif isinstance(data, list): # When input data is a list, it only deal with the case where the base element # is an index of shape [1] and dtype int64 (e.g., word id). Hence, the generated # LoDTensor will be of shape [n, 1] and dtype int64, where `n` is the total number # of words or other indexes in the sequence. - new_lod = [] + new_recursive_seq_lens = [] for seq in data: - new_lod.append(len(seq)) - assert [new_lod] == lod, "data and lod do not match" + new_recursive_seq_lens.append(len(seq)) + assert [ + new_recursive_seq_lens + ] == recursive_seq_lens, "data and recursive_seq_lens do not match" flattened_data = np.concatenate(data, axis=0).astype("int64") flattened_data = flattened_data.reshape([len(flattened_data), 1]) - return create_lod_tensor(flattened_data, lod, place) + return create_lod_tensor(flattened_data, recursive_seq_lens, place) elif isinstance(data, np.ndarray): tensor = core.LoDTensor() tensor.set(data, place) - tensor.set_recursive_sequence_lengths(lod) + tensor.set_recursive_sequence_lengths(recursive_seq_lens) assert tensor.has_valid_recursive_sequence_lengths( ), "the provided lod info is invalid" return tensor @@ -84,7 +87,8 @@ def create_lod_tensor(data, lod, place): "data should be either a LoDTensor, a Numpy array or a list") -def create_random_int_lodtensor(lod, base_shape, place, low, high): +def create_random_int_lodtensor(recursive_seq_lens, base_shape, place, low, + high): """ Create a LoDTensor containing random integers. @@ -95,7 +99,7 @@ def create_random_int_lodtensor(lod, base_shape, place, low, high): The function does the following: 1. Calculate the overall shape of the LoDTensor based on the length-based - :code:`lod` input and the shape of the basic element in + :code:`recursive_seq_lens` input and the shape of the basic element in :code:`base_shape`. 2. Create a numpy array of this shape. @@ -105,12 +109,13 @@ def create_random_int_lodtensor(lod, base_shape, place, low, high): Suppose we want LoDTensor to hold data for sequences of word, where each word is represented by an integer. If we want to create a LoDTensor to represent two sentences, one of 2 words, and one of 3 words. Then - 'base_shape' is [1], input length-based 'lod' is [[2, 3]]. Then the overall - shape of the LoDTensor would be [5, 1], holding 5 words for two sentences. + 'base_shape' is [1], input length-based 'recursive_seq_lens' is [[2, 3]]. + Then the overall shape of the LoDTensor would be [5, 1], holding 5 words + for two sentences. Args: - lod(list): a list of lists indicating the length-based LoD info - specified by the user. + recursive_seq_lens(list): a list of lists indicating the length-based + level of detail info specified by the user. base_shape(list): the shape of the basic element to be held by the LoDTensor. place(Place): CPU or GPU place indicating where the data in the new @@ -119,11 +124,11 @@ def create_random_int_lodtensor(lod, base_shape, place, low, high): high(int): the upper bound of the random integers. Returns: - A fluid LoDTensor object with tensor data and lod info. + A fluid LoDTensor object with tensor data and recursive_seq_lens info. """ assert isinstance(base_shape, list), "base_shape should be a list" # append the total number of basic elements to the front of its shape - overall_shape = [sum(lod[-1])] + base_shape + overall_shape = [sum(recursive_seq_lens[-1])] + base_shape # the range of integer data elements is [low, high] data = np.random.random_integers(low, high, overall_shape).astype("int64") - return create_lod_tensor(data, lod, place) + return create_lod_tensor(data, recursive_seq_lens, place) diff --git a/python/paddle/fluid/tests/test_lod_tensor.py b/python/paddle/fluid/tests/test_lod_tensor.py index b7e7f5801f..f7a9dd4129 100644 --- a/python/paddle/fluid/tests/test_lod_tensor.py +++ b/python/paddle/fluid/tests/test_lod_tensor.py @@ -19,18 +19,21 @@ import unittest class TestLoDTensor(unittest.TestCase): - def test_pybind_lod(self): + def test_pybind_recursive_seq_lens(self): tensor = fluid.LoDTensor() - lod = [] - tensor.set_recursive_sequence_lengths(lod) - lod = [[], [1], [3]] - self.assertRaises(Exception, tensor.set_recursive_sequence_lengths, lod) - lod = [[0], [2], [3]] - self.assertRaises(Exception, tensor.set_recursive_sequence_lengths, lod) + recursive_seq_lens = [] + tensor.set_recursive_sequence_lengths(recursive_seq_lens) + recursive_seq_lens = [[], [1], [3]] + self.assertRaises(Exception, tensor.set_recursive_sequence_lengths, + recursive_seq_lens) + recursive_seq_lens = [[0], [2], [3]] + self.assertRaises(Exception, tensor.set_recursive_sequence_lengths, + recursive_seq_lens) - lod = [[1, 2, 3]] - tensor.set_recursive_sequence_lengths(lod) - self.assertEqual(tensor.recursive_sequence_lengths(), lod) + recursive_seq_lens = [[1, 2, 3]] + tensor.set_recursive_sequence_lengths(recursive_seq_lens) + self.assertEqual(tensor.recursive_sequence_lengths(), + recursive_seq_lens) tensor.set(np.random.random([6, 1]), fluid.CPUPlace()) self.assertTrue(tensor.has_valid_recursive_sequence_lengths()) tensor.set(np.random.random([9, 1]), fluid.CPUPlace()) @@ -38,13 +41,14 @@ class TestLoDTensor(unittest.TestCase): # Each level's sum should be equal to the number of items in the next level # Moreover, last level's sum should be equal to the tensor height - lod = [[2, 3], [1, 3, 1, 2, 2]] - tensor.set_recursive_sequence_lengths(lod) - self.assertEqual(tensor.recursive_sequence_lengths(), lod) + recursive_seq_lens = [[2, 3], [1, 3, 1, 2, 2]] + tensor.set_recursive_sequence_lengths(recursive_seq_lens) + self.assertEqual(tensor.recursive_sequence_lengths(), + recursive_seq_lens) tensor.set(np.random.random([8, 1]), fluid.CPUPlace()) self.assertFalse(tensor.has_valid_recursive_sequence_lengths()) - lod = [[2, 3], [1, 3, 1, 2, 1]] - tensor.set_recursive_sequence_lengths(lod) + recursive_seq_lens = [[2, 3], [1, 3, 1, 2, 1]] + tensor.set_recursive_sequence_lengths(recursive_seq_lens) self.assertTrue(tensor.has_valid_recursive_sequence_lengths()) tensor.set(np.random.random([9, 1]), fluid.CPUPlace()) self.assertFalse(tensor.has_valid_recursive_sequence_lengths()) @@ -52,35 +56,42 @@ class TestLoDTensor(unittest.TestCase): def test_create_lod_tensor(self): # Create LoDTensor from a list data = [[1, 2, 3], [3, 4]] - wrong_lod = [[2, 2]] - correct_lod = [[3, 2]] - self.assertRaises(AssertionError, create_lod_tensor, data, wrong_lod, - fluid.CPUPlace()) - tensor = create_lod_tensor(data, correct_lod, fluid.CPUPlace()) - self.assertEqual(tensor.recursive_sequence_lengths(), correct_lod) + wrong_recursive_seq_lens = [[2, 2]] + correct_recursive_seq_lens = [[3, 2]] + self.assertRaises(AssertionError, create_lod_tensor, data, + wrong_recursive_seq_lens, fluid.CPUPlace()) + tensor = create_lod_tensor(data, correct_recursive_seq_lens, + fluid.CPUPlace()) + self.assertEqual(tensor.recursive_sequence_lengths(), + correct_recursive_seq_lens) # Create LoDTensor from numpy array data = np.random.random([10, 1]) - lod = [[2, 1], [3, 3, 4]] - tensor = create_lod_tensor(data, lod, fluid.CPUPlace()) - self.assertEqual(tensor.recursive_sequence_lengths(), lod) + recursive_seq_lens = [[2, 1], [3, 3, 4]] + tensor = create_lod_tensor(data, recursive_seq_lens, fluid.CPUPlace()) + self.assertEqual(tensor.recursive_sequence_lengths(), + recursive_seq_lens) # Create LoDTensor from another LoDTensor, they are differnt instances - new_lod = [[2, 2, 1], [1, 2, 2, 3, 2]] - new_tensor = create_lod_tensor(tensor, new_lod, fluid.CPUPlace()) - self.assertEqual(tensor.recursive_sequence_lengths(), lod) - self.assertEqual(new_tensor.recursive_sequence_lengths(), new_lod) + new_recursive_seq_lens = [[2, 2, 1], [1, 2, 2, 3, 2]] + new_tensor = create_lod_tensor(tensor, new_recursive_seq_lens, + fluid.CPUPlace()) + self.assertEqual(tensor.recursive_sequence_lengths(), + recursive_seq_lens) + self.assertEqual(new_tensor.recursive_sequence_lengths(), + new_recursive_seq_lens) def test_create_random_int_lodtensor(self): # The shape of a word, commonly used in speech and NLP problem, is [1] shape = [1] - lod = [[2, 3, 5]] + recursive_seq_lens = [[2, 3, 5]] dict_size = 10000 low = 0 high = dict_size - 1 - tensor = create_random_int_lodtensor(lod, shape, + tensor = create_random_int_lodtensor(recursive_seq_lens, shape, fluid.CPUPlace(), low, high) - self.assertEqual(tensor.recursive_sequence_lengths(), lod) + self.assertEqual(tensor.recursive_sequence_lengths(), + recursive_seq_lens) self.assertEqual(tensor.shape(), [10, 1]) From 008e0c9bc1efe552cfbb349765364beca2c4c5a9 Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Tue, 26 Jun 2018 16:01:41 +0800 Subject: [PATCH 035/130] small clean --- python/paddle/fluid/transpiler/distribute_transpiler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/paddle/fluid/transpiler/distribute_transpiler.py b/python/paddle/fluid/transpiler/distribute_transpiler.py index 4a3bd3bef2..343901cda3 100644 --- a/python/paddle/fluid/transpiler/distribute_transpiler.py +++ b/python/paddle/fluid/transpiler/distribute_transpiler.py @@ -301,6 +301,7 @@ class DistributeTranspiler(object): Program: trainer side program. """ # remove optimize ops and add a send op to main_program + # FIXME(typhoonzero): Also ops like clip_gradient, lrn_decay? delete_ops(self.origin_program.global_block(), self.optimize_ops) self.origin_program.__str__() return self.origin_program @@ -537,7 +538,6 @@ class DistributeTranspiler(object): # 2. rename op outputs for op in orig_s_prog.global_block().ops: - new_inputs = dict() new_outputs = dict() # do not append startup op if var is not on this pserver op_on_pserver = False From f2459aafd263b0504fc5c2fa0c7e5d7a58a717a1 Mon Sep 17 00:00:00 2001 From: Yan Chunwei Date: Wed, 27 Jun 2018 15:48:03 +0800 Subject: [PATCH 036/130] inference API init cn (#11731) --- paddle/contrib/inference/high_level_api_cn.md | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 paddle/contrib/inference/high_level_api_cn.md diff --git a/paddle/contrib/inference/high_level_api_cn.md b/paddle/contrib/inference/high_level_api_cn.md new file mode 100644 index 0000000000..a57f015a4e --- /dev/null +++ b/paddle/contrib/inference/high_level_api_cn.md @@ -0,0 +1,87 @@ +# Paddle 预测 API + +为了更简单方便的预测部署,Fluid 提供了一套高层 API 用来隐藏底层不同的优化实现。 + +预测库包含: + +- 头文件 `paddle_inference_api.h` 定义了所有的接口 +- 库文件`libpaddle_fluid.so` 或 `libpaddle_fluid.a` +- 库文件 `libpaddle_inference_api.so` 或 `libpaddle_inference_api.a` + +下面是详细的一些 API 概念介绍 + +## PaddleTensor + +PaddleTensor 定义了预测最基本的输入输出的数据格式,其定义是 + +```c++ +struct PaddleTensor { + std::string name; // variable name. + std::vector shape; + PaddleBuf data; // blob of data. + PaddleDType dtype; +}; +``` + +- `name` 用于指定输入数据对应的 模型中variable 的名字 (暂时没有用,但会在后续支持任意 target 时启用) +- `shape` 表示一个 Tensor 的 shape +- `data` 数据以连续内存的方式存储在`PaddleBuf` 中,`PaddleBuf` 可以接收外面的数据或者独立`malloc`内存,详细可以参考头文件中相关定义。 +- `dtype` 表示 Tensor 的数据类型 + +## engine + +高层 API 底层有多种优化实现,我们称之为 engine,目前有三种 engine + +- 原生 engine,由 paddle 原生的 forward operator 组成,可以天然支持所有paddle 训练出的模型, +- Anakin engine,封装了 [Anakin](https://github.com/PaddlePaddle/Anakin) ,在某些模型上性能不错,但只能接受自带模型格式,无法支持所有 paddle 模型, +- TensorRT mixed engine,用子图的方式支持了 [TensorRT](https://developer.nvidia.com/tensorrt) ,支持所有paddle 模型,并自动切割部分计算子图到 TensorRT 上加速(WIP) + +其实现为 + +```c++ +enum class PaddleEngineKind { + kNative = 0, // Use the native Fluid facility. + kAnakin, // Use Anakin for inference. + kAutoMixedTensorRT // Automatically mixing TensorRT with the Fluid ops. +}; +``` + +## 预测部署过程 + +总体上分为以下步骤 + +1. 用合适的配置创建 `PaddlePredictor` +2. 创建输入用的 `PaddleTensor`,传入到 `PaddlePredictor` 中 +3. 获取输出的 `PaddleTensor` ,将结果取出 + +下面完整演示一个简单的模型,部分细节代码隐去 + +```c++ +#include "paddle_inference_api.h" + +// 创建一个 config,并修改相关设置 +paddle::NativeConfig config; +config.model_dir = "xxx"; +config.use_gpu = false; +// 创建一个原生的 PaddlePredictor +auto predictor = + paddle::CreatePaddlePredictor(config); +// 创建输入 tensor +int64_t data[4] = {1, 2, 3, 4}; +paddle::PaddleTensor tensor{.name = "", + .shape = std::vector({4, 1}), + .data = PaddleBuf(data, sizeof(data)), + .dtype = PaddleDType::INT64}; +// 创建输出 tensor,输出 tensor 的内存可以复用 +std::vector outputs; +// 执行预测 +CHECK(predictor->Run(slots, &outputs)); +// 获取 outputs ... +``` + +编译时,联编 `libpaddle_fluid.a/.so` 和 `libpaddle_inference_api.a/.so` 便可。 + +## 详细代码参考 + +- [inference demos](./demo) +- [复杂单线程/多线程例子](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/contrib/inference/test_paddle_inference_api_impl.cc) From c228977727cfbcd53dbccb4f93153c6102cd7815 Mon Sep 17 00:00:00 2001 From: Yan Chunwei Date: Wed, 27 Jun 2018 15:56:12 +0800 Subject: [PATCH 037/130] add anakin release (#11747) --- cmake/external/anakin.cmake | 16 +++++++------ cmake/inference_lib.cmake | 30 +++++++++++++++++-------- paddle/contrib/inference/CMakeLists.txt | 5 ++++- 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/cmake/external/anakin.cmake b/cmake/external/anakin.cmake index f1cd9c99eb..d205e39582 100644 --- a/cmake/external/anakin.cmake +++ b/cmake/external/anakin.cmake @@ -26,13 +26,15 @@ function(fetch_include_recursively root_dir) endforeach() endfunction() -# download library -message(STATUS "Download Anakin library from ${ANAKIN_LIBRARY_URL}") -execute_process(COMMAND bash -c "mkdir -p ${ANAKIN_INSTALL_DIR}") -execute_process(COMMAND bash -c "rm -rf ${ANAKIN_INSTALL_DIR}/*") -execute_process(COMMAND bash -c "cd ${ANAKIN_INSTALL_DIR}; wget -q ${ANAKIN_LIBRARY_URL}") -execute_process(COMMAND bash -c "mkdir -p ${ANAKIN_INSTALL_DIR}") -execute_process(COMMAND bash -c "cd ${ANAKIN_INSTALL_DIR}; tar xzf anakin_release_simple.tar.gz") +if (NOT EXISTS "${ANAKIN_INSTALL_DIR}") + # download library + message(STATUS "Download Anakin library from ${ANAKIN_LIBRARY_URL}") + execute_process(COMMAND bash -c "mkdir -p ${ANAKIN_INSTALL_DIR}") + execute_process(COMMAND bash -c "rm -rf ${ANAKIN_INSTALL_DIR}/*") + execute_process(COMMAND bash -c "cd ${ANAKIN_INSTALL_DIR}; wget -q ${ANAKIN_LIBRARY_URL}") + execute_process(COMMAND bash -c "mkdir -p ${ANAKIN_INSTALL_DIR}") + execute_process(COMMAND bash -c "cd ${ANAKIN_INSTALL_DIR}; tar xzf anakin_release_simple.tar.gz") +endif() if (WITH_ANAKIN) message(STATUS "Anakin for inference is enabled") diff --git a/cmake/inference_lib.cmake b/cmake/inference_lib.cmake index cd44fe2542..850098297e 100644 --- a/cmake/inference_lib.cmake +++ b/cmake/inference_lib.cmake @@ -149,21 +149,33 @@ copy(memory_lib DSTS ${dst_dir}/${module} ${dst_dir}/${module}/detail ) -set(module "inference") -copy(inference_lib DEPS paddle_fluid_shared paddle_fluid - SRCS ${src_dir}/${module}/*.h ${PADDLE_BINARY_DIR}/paddle/fluid/inference/libpaddle_fluid.* - DSTS ${dst_dir}/${module} ${dst_dir}/${module} -) +set(inference_deps paddle_fluid_shared paddle_fluid) if(WITH_CONTRIB) - set(contrib_dst_dir "${FLUID_INSTALL_DIR}/contrib/inference") - copy(contrib_inference_lib DEPS paddle_inference_api + message(STATUS "installing contrib") + set(contrib_dst_dir "${FLUID_INSTALL_DIR}/contrib/inference") + if (WITH_ANAKIN) + copy(contrib_anakin_inference_lib DEPS paddle_inference_api inference_anakin_api + SRCS + ${PADDLE_BINARY_DIR}/paddle/contrib/inference/libinference_anakin_api* # compiled anakin api + ${PADDLE_BINARY_DIR}/third_party/install/anakin/*.tar.gz # anakin release + DSTS ${contrib_dst_dir}/anakin ${contrib_dst_dir}/anakin) + list(APPEND inference_deps contrib_anakin_inference_lib) + endif() + + copy(contrib_inference_lib DEPS paddle_inference_api SRCS ${PADDLE_SOURCE_DIR}/paddle/contrib/inference/paddle_inference_api.h ${PADDLE_BINARY_DIR}/paddle/contrib/inference/libpaddle_inference_api.* - DSTS ${contrib_dst_dir} ${contrib_dst_dir} - ) + DSTS ${contrib_dst_dir} ${contrib_dst_dir}) + list(APPEND inference_deps contrib_inference_lib) endif() +set(module "inference") +copy(inference_lib DEPS ${inference_deps} + SRCS ${src_dir}/${module}/*.h ${PADDLE_BINARY_DIR}/paddle/fluid/inference/libpaddle_fluid.* + DSTS ${dst_dir}/${module} ${dst_dir}/${module} +) + set(module "platform") copy(platform_lib DEPS profiler_py_proto SRCS ${src_dir}/${module}/*.h ${src_dir}/${module}/dynload/*.h ${src_dir}/${module}/details/*.h diff --git a/paddle/contrib/inference/CMakeLists.txt b/paddle/contrib/inference/CMakeLists.txt index 0f56d648b1..45bbb4b237 100644 --- a/paddle/contrib/inference/CMakeLists.txt +++ b/paddle/contrib/inference/CMakeLists.txt @@ -54,9 +54,12 @@ if (WITH_ANAKIN AND WITH_TESTING) # only needed in CI # Due to Anakin do not have official library releases and the versions of protobuf and cuda do not match Paddle's, # so anakin library will not be merged to our official inference library. To use anakin prediction API, one need to # compile the libinference_anakin_api.a and compile with anakin.so. - nv_library(inference_anakin_api SHARED SRCS paddle_inference_api.cc paddle_inference_api_anakin_engine.cc) + nv_library(inference_anakin_api SRCS paddle_inference_api.cc paddle_inference_api_anakin_engine.cc) + nv_library(inference_anakin_api_shared SHARED SRCS paddle_inference_api.cc paddle_inference_api_anakin_engine.cc) target_compile_options(inference_anakin_api BEFORE PUBLIC ${ANAKIN_COMPILE_EXTRA_FLAGS}) + target_compile_options(inference_anakin_api_shared BEFORE PUBLIC ${ANAKIN_COMPILE_EXTRA_FLAGS}) target_link_libraries(inference_anakin_api anakin anakin_saber_common) + target_link_libraries(inference_anakin_api_shared anakin anakin_saber_common) cc_test(inference_anakin_test SRCS paddle_inference_api_anakin_engine_tester.cc ARGS --model=${ANAKIN_INSTALL_DIR}/mobilenet_v2.anakin.bin DEPS inference_anakin_api) From df7a266ae238afbbde27a38b279d5145f188f12b Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Wed, 27 Jun 2018 15:56:45 +0800 Subject: [PATCH 038/130] fix adam op for selected rows --- paddle/fluid/operators/adam_op.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/paddle/fluid/operators/adam_op.cc b/paddle/fluid/operators/adam_op.cc index 6ee73c3000..5d670fe3b9 100644 --- a/paddle/fluid/operators/adam_op.cc +++ b/paddle/fluid/operators/adam_op.cc @@ -56,9 +56,12 @@ class AdamOp : public framework::OperatorWithKernel { "Beta2 power accumulator should have 1 dimension"); auto param_dims = ctx->GetInputDim("Param"); - PADDLE_ENFORCE_EQ( - param_dims, ctx->GetInputDim("Grad"), - "Param and Grad input of AdamOp should have same dimension"); + if (ctx->GetInputsVarType("Grad")[0] == + framework::proto::VarType::LOD_TENSOR) { + PADDLE_ENFORCE_EQ( + param_dims, ctx->GetInputDim("Grad"), + "Param and Grad input of AdamOp should have same dimension"); + } PADDLE_ENFORCE_EQ( param_dims, ctx->GetInputDim("Moment1"), "Param and Moment1 input of AdamOp should have same dimension"); From 7d9c9a013be761f7d9827823fda106670fe1e899 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Wed, 27 Jun 2018 16:33:28 +0800 Subject: [PATCH 039/130] update by comment --- python/paddle/fluid/tests/unittests/test_dist_mnist.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/python/paddle/fluid/tests/unittests/test_dist_mnist.py b/python/paddle/fluid/tests/unittests/test_dist_mnist.py index 450ec414d1..ad2d57f7c5 100644 --- a/python/paddle/fluid/tests/unittests/test_dist_mnist.py +++ b/python/paddle/fluid/tests/unittests/test_dist_mnist.py @@ -15,6 +15,7 @@ import numpy as np import argparse import time +import math import paddle import paddle.fluid as fluid @@ -145,7 +146,7 @@ class TestDistMnist(unittest.TestCase): retry_times -= 1 def stop_pserver(self, pid): - os.kill(pid, signal.SIGKILL) + os.kill(pid, signal.SIGTERM) def test_with_place(self): p = fluid.CUDAPlace(0) if core.is_compiled_with_cuda( @@ -194,7 +195,7 @@ class TestDistMnist(unittest.TestCase): acc_val = np.array(acc_set).mean() avg_loss_val = np.array(avg_loss_set).mean() if float(acc_val - ) > 0.2: # Smaller value to increase CI speed + ) > 0.8: # Smaller value to increase CI speed return else: print( From 778b71fc93cf1cc541cabfddbd1b229898229506 Mon Sep 17 00:00:00 2001 From: baiyf Date: Wed, 27 Jun 2018 16:51:42 +0800 Subject: [PATCH 040/130] Optimize bipartite_match_op in large scale input (#11730) * optimize bipartite_match_op in large scale input --- .../operators/detection/bipartite_match_op.cc | 98 +++++++++++++------ .../unittests/test_bipartite_match_op.py | 17 ++++ 2 files changed, 84 insertions(+), 31 deletions(-) diff --git a/paddle/fluid/operators/detection/bipartite_match_op.cc b/paddle/fluid/operators/detection/bipartite_match_op.cc index d437ad5c19..c23b65fe4d 100644 --- a/paddle/fluid/operators/detection/bipartite_match_op.cc +++ b/paddle/fluid/operators/detection/bipartite_match_op.cc @@ -51,6 +51,12 @@ class BipartiteMatchOp : public framework::OperatorWithKernel { } }; +template +bool DistPairDescend(std::tuple pair1, + std::tuple pair2) { + return std::get<2>(pair1) > std::get<2>(pair2); +} + template class BipartiteMatchKernel : public framework::OpKernel { public: @@ -58,46 +64,76 @@ class BipartiteMatchKernel : public framework::OpKernel { // The match_dist must be initialized to 0 at first. void BipartiteMatch(const Tensor& dist, int* match_indices, T* match_dist) const { - constexpr T kEPS = static_cast(1e-6); PADDLE_ENFORCE_EQ(dist.dims().size(), 2, "The rank of dist must be 2."); int64_t row = dist.dims()[0]; int64_t col = dist.dims()[1]; auto* dist_data = dist.data(); - std::vector row_pool; - for (int i = 0; i < row; ++i) { - row_pool.push_back(i); - } - while (row_pool.size() > 0) { - int max_idx = -1; - int max_row_idx = -1; - T max_dist = -1; - for (int64_t j = 0; j < col; ++j) { - if (match_indices[j] != -1) { - continue; + // Test result: When row==130 the speed of these two methods almost the same + if (row >= 130) { + std::vector> match_pair; + + for (int64_t i = 0; i < row; ++i) { + for (int64_t j = 0; j < col; ++j) { + match_pair.push_back(std::make_tuple(i, j, dist_data[i * col + j])); } - for (size_t k = 0; k < row_pool.size(); ++k) { - int m = row_pool[k]; - // distance is 0 between m-th row and j-th column - if (dist_data[m * col + j] < kEPS) { + } + std::sort(match_pair.begin(), match_pair.end(), DistPairDescend); + std::vector row_indices(row, -1); + + int64_t idx = 0; + for (int64_t k = 0; k < row * col; ++k) { + int64_t i = std::get<0>(match_pair[k]); + int64_t j = std::get<1>(match_pair[k]); + T dist = std::get<2>(match_pair[k]); + + if (idx >= row) { + break; + } + if (match_indices[j] == -1 && row_indices[i] == -1 && dist > 0) { + match_indices[j] = i; + row_indices[i] = j; + match_dist[j] = dist; + idx += 1; + } + } + } else { + constexpr T kEPS = static_cast(1e-6); + std::vector row_pool; + for (int i = 0; i < row; ++i) { + row_pool.push_back(i); + } + while (row_pool.size() > 0) { + int max_idx = -1; + int max_row_idx = -1; + T max_dist = -1; + for (int64_t j = 0; j < col; ++j) { + if (match_indices[j] != -1) { continue; } - if (dist_data[m * col + j] > max_dist) { - max_idx = j; - max_row_idx = m; - max_dist = dist_data[m * col + j]; + for (size_t k = 0; k < row_pool.size(); ++k) { + int m = row_pool[k]; + // distance is 0 between m-th row and j-th column + if (dist_data[m * col + j] < kEPS) { + continue; + } + if (dist_data[m * col + j] > max_dist) { + max_idx = j; + max_row_idx = m; + max_dist = dist_data[m * col + j]; + } } } - } - if (max_idx == -1) { - // Cannot find good match. - break; - } else { - PADDLE_ENFORCE_EQ(match_indices[max_idx], -1); - match_indices[max_idx] = max_row_idx; - match_dist[max_idx] = max_dist; - // Erase the row index. - row_pool.erase( - std::find(row_pool.begin(), row_pool.end(), max_row_idx)); + if (max_idx == -1) { + // Cannot find good match. + break; + } else { + PADDLE_ENFORCE_EQ(match_indices[max_idx], -1); + match_indices[max_idx] = max_row_idx; + match_dist[max_idx] = max_dist; + // Erase the row index. + row_pool.erase( + std::find(row_pool.begin(), row_pool.end(), max_row_idx)); + } } } } diff --git a/python/paddle/fluid/tests/unittests/test_bipartite_match_op.py b/python/paddle/fluid/tests/unittests/test_bipartite_match_op.py index 1a245fd756..d5bd726c4a 100644 --- a/python/paddle/fluid/tests/unittests/test_bipartite_match_op.py +++ b/python/paddle/fluid/tests/unittests/test_bipartite_match_op.py @@ -114,6 +114,23 @@ class TestBipartiteMatchOpWithoutLoD(OpTest): self.check_output() +class TestBipartiteMatchOpWithoutLoDLargeScaleInput(OpTest): + def setUp(self): + self.op_type = 'bipartite_match' + lod = [[300]] + dist = np.random.random((300, 17)).astype('float32') + match_indices, match_dist = batch_bipartite_match(dist, lod[0]) + + self.inputs = {'DistMat': dist} + self.outputs = { + 'ColToRowMatchIndices': match_indices, + 'ColToRowMatchDist': match_dist, + } + + def test_check_output(self): + self.check_output() + + class TestBipartiteMatchOpWithPerPredictionType(OpTest): def setUp(self): self.op_type = 'bipartite_match' From 9a15c92317e6ac938de0279c7506a28e3c100116 Mon Sep 17 00:00:00 2001 From: pzelazko-intel Date: Wed, 27 Jun 2018 12:06:52 +0200 Subject: [PATCH 041/130] bnorm+relu fuse for mkldnn (inference) (#11434) * bnorm+relu fuse for mkldnn * separate fuse_relu function * bug fix * proper while range in inference_transpiler * description fix * review fix * review fix * unit test for fwd batch norm+relu MKLDNN fuse --- benchmark/fluid/args.py | 4 + benchmark/fluid/fluid_benchmark.py | 5 + .../fluid/operators/batch_norm_mkldnn_op.cc | 2 + paddle/fluid/operators/batch_norm_op.cc | 3 + python/paddle/fluid/layers/nn.py | 7 +- .../unittests/test_batch_norm_mkldnn_op.py | 12 +++ .../tests/unittests/test_batch_norm_op.py | 11 ++- .../fluid/transpiler/inference_transpiler.py | 99 ++++++++++++++----- 8 files changed, 115 insertions(+), 28 deletions(-) mode change 100644 => 100755 benchmark/fluid/fluid_benchmark.py diff --git a/benchmark/fluid/args.py b/benchmark/fluid/args.py index 68a3d42d7a..99c9d79b06 100644 --- a/benchmark/fluid/args.py +++ b/benchmark/fluid/args.py @@ -122,5 +122,9 @@ def parse_args(): type=str, default="", help='Directory that contains all the training recordio files.') + parser.add_argument( + '--use_inference_transpiler', + action='store_true', + help='If set, uses inference transpiler to optimize the program.') args = parser.parse_args() return args diff --git a/benchmark/fluid/fluid_benchmark.py b/benchmark/fluid/fluid_benchmark.py old mode 100644 new mode 100755 index ece1102dce..dcd4d9ea95 --- a/benchmark/fluid/fluid_benchmark.py +++ b/benchmark/fluid/fluid_benchmark.py @@ -131,6 +131,11 @@ def train(avg_loss, infer_prog, optimizer, train_reader, test_reader, batch_acc, exe = fluid.Executor(place) exe.run(startup_prog) + # Use inference_transpiler to speedup + if args.use_inference_transpiler: + t = fluid.InferenceTranspiler() + t.transpile(infer_prog, place) + if not args.use_reader_op: feed_var_list = [ var for var in train_prog.global_block().vars.itervalues() diff --git a/paddle/fluid/operators/batch_norm_mkldnn_op.cc b/paddle/fluid/operators/batch_norm_mkldnn_op.cc index cc158e57f7..6ecb43c49c 100644 --- a/paddle/fluid/operators/batch_norm_mkldnn_op.cc +++ b/paddle/fluid/operators/batch_norm_mkldnn_op.cc @@ -66,6 +66,7 @@ class BatchNormMKLDNNOpKernel : public paddle::framework::OpKernel { const float epsilon = ctx.Attr("epsilon"); const float momentum = ctx.Attr("momentum"); const bool is_test = ctx.Attr("is_test"); + const bool fuse_with_relu = ctx.Attr("fuse_with_relu"); const auto *x = ctx.Input("X"); const auto *mean = ctx.Input("Mean"); @@ -111,6 +112,7 @@ class BatchNormMKLDNNOpKernel : public paddle::framework::OpKernel { unsigned flags = mkldnn::use_scale_shift; if (is_test) flags |= mkldnn::use_global_stats; + if (fuse_with_relu) flags |= mkldnn::fuse_bn_relu; // create mkldnn memory from input x tensor auto src_memory = diff --git a/paddle/fluid/operators/batch_norm_op.cc b/paddle/fluid/operators/batch_norm_op.cc index 52b0bf85c0..693bf973c2 100644 --- a/paddle/fluid/operators/batch_norm_op.cc +++ b/paddle/fluid/operators/batch_norm_op.cc @@ -155,6 +155,9 @@ class BatchNormOpMaker : public framework::OpProtoAndCheckerMaker { AddAttr("use_mkldnn", "(bool, default false) Only used in mkldnn kernel") .SetDefault(false); + AddAttr("fuse_with_relu", + "(bool, default false) Only used in mkldnn kernel") + .SetDefault(false); AddComment(R"DOC( Batch Normalization. diff --git a/python/paddle/fluid/layers/nn.py b/python/paddle/fluid/layers/nn.py index 02ea2af325..64f48e259a 100644 --- a/python/paddle/fluid/layers/nn.py +++ b/python/paddle/fluid/layers/nn.py @@ -1993,7 +1993,8 @@ def batch_norm(input, name=None, moving_mean_name=None, moving_variance_name=None, - do_model_average_for_mean_and_var=False): + do_model_average_for_mean_and_var=False, + fuse_with_relu=False): """ **Batch Normalization Layer** @@ -2036,6 +2037,7 @@ def batch_norm(input, moving_mean_name(string, Default None): The name of moving_mean which store the global Mean. moving_variance_name(string, Default None): The name of the moving_variance which store the global Variance. do_model_average_for_mean_and_var(bool, Default False): Do model average for mean and variance or not. + fuse_with_relu (bool): if True, this OP performs relu after batch norm. Returns: Variable: A tensor variable which is the result after applying batch normalization on the input. @@ -2121,7 +2123,8 @@ def batch_norm(input, "momentum": momentum, "epsilon": epsilon, "is_test": is_test, - "use_mkldnn": use_mkldnn + "use_mkldnn": use_mkldnn, + "fuse_with_relu": fuse_with_relu }) return helper.append_activation(batch_norm_out) diff --git a/python/paddle/fluid/tests/unittests/test_batch_norm_mkldnn_op.py b/python/paddle/fluid/tests/unittests/test_batch_norm_mkldnn_op.py index f6097d4b84..18fa546159 100644 --- a/python/paddle/fluid/tests/unittests/test_batch_norm_mkldnn_op.py +++ b/python/paddle/fluid/tests/unittests/test_batch_norm_mkldnn_op.py @@ -52,5 +52,17 @@ class TestMKLDNNBatchNormOpInference(TestBatchNormOpInference): self.check_with_place(place, data_format, self.dtype, [2, 3, 4, 5]) +class TestMKLDNNBatchNormOpWithReluInference(TestBatchNormOpInference): + def init_kernel_type(self): + self.use_mkldnn = True + self.fuse_with_relu = True + + def test_check_output(self): + place = core.CPUPlace() + data_format = "NCHW" + + self.check_with_place(place, data_format, self.dtype, [2, 3, 4, 5]) + + if __name__ == '__main__': unittest.main() diff --git a/python/paddle/fluid/tests/unittests/test_batch_norm_op.py b/python/paddle/fluid/tests/unittests/test_batch_norm_op.py index 01e5749bdb..a62ee9596d 100644 --- a/python/paddle/fluid/tests/unittests/test_batch_norm_op.py +++ b/python/paddle/fluid/tests/unittests/test_batch_norm_op.py @@ -159,6 +159,7 @@ class TestBatchNormOpInference(unittest.TestCase): def setUp(self): self.dtype = np.float32 self.use_mkldnn = False + self.fuse_with_relu = False self.init_kernel_type() def __assert_close(self, tensor, np_array, msg, atol=1e-4): @@ -180,6 +181,8 @@ class TestBatchNormOpInference(unittest.TestCase): scale_shape = [c] x_val = np.random.random_sample(x_shape).astype(dtype) + # generate some negative values to test case with relu fused + x_val = x_val - 0.5 scale_val = np.random.random_sample(scale_shape).astype(np.float32) bias_val = np.random.random_sample(scale_shape).astype(np.float32) @@ -188,6 +191,8 @@ class TestBatchNormOpInference(unittest.TestCase): y_out = _reference_testing(x_val, scale_val, bias_val, mean, variance, epsilon, data_layout).astype(dtype) + if self.fuse_with_relu: + y_out = np.maximum(y_out, 0) scope = core.Scope() @@ -233,6 +238,7 @@ class TestBatchNormOpInference(unittest.TestCase): is_test=True, data_layout=data_layout, use_mkldnn=self.use_mkldnn, + fuse_with_relu=self.fuse_with_relu, epsilon=epsilon) batch_norm_op.run(scope, place) @@ -265,6 +271,7 @@ class TestFP16BatchNormOpInference(TestBatchNormOpInference): def setUp(self): self.dtype = np.float16 self.use_mkldnn = False + self.fuse_with_relu = False self.init_kernel_type() def test_check_output(self): @@ -284,6 +291,7 @@ class TestFP16BatchNormOpInference(TestBatchNormOpInference): class TestBatchNormOpTraining(unittest.TestCase): def setUp(self): self.use_mkldnn = False + self.fuse_with_relu = False self.data_formats = ["NCHW", "NHWC"] self.init_kernel_type() @@ -367,7 +375,8 @@ class TestBatchNormOpTraining(unittest.TestCase): "epsilon": epsilon, "is_test": False, "data_layout": data_layout, - "use_mkldnn": self.use_mkldnn + "use_mkldnn": self.use_mkldnn, + "fuse_with_relu": self.fuse_with_relu }) block.create_var(name='y@GRAD', dtype='float32', shape=y.shape) diff --git a/python/paddle/fluid/transpiler/inference_transpiler.py b/python/paddle/fluid/transpiler/inference_transpiler.py index 0629f2916b..d32c69d148 100644 --- a/python/paddle/fluid/transpiler/inference_transpiler.py +++ b/python/paddle/fluid/transpiler/inference_transpiler.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os import numpy as np from .. import core from ..framework import Program @@ -20,12 +21,15 @@ from ..executor import global_scope class InferenceTranspiler: ''' - Convert the fluid program to optimized inference program. - - There are several optimizations, only fuse batch normalization is supported now. + Convert the fluid program to optimized inference program. + + There are several optimizations: + + - fuse convolution and batch normalization + - fuse batch normalization and relu (MKLDNN only) Examples: - + .. code-block:: python # As InferenceTranspiler will modify the original program, @@ -54,19 +58,64 @@ class InferenceTranspiler: if not isinstance(scope, core.Scope): raise TypeError("scope should be as Scope type or None") self.fuse_batch_norm(program, place, scope) + self.fuse_relu_mkldnn(program) + + def fuse_relu_mkldnn(self, program): + ''' + Transpile the program by fused relu activation for MKLDNN program. + + Relu activation following batch norm OP can be fused by adding + :math:`fuse_with_relu` attribute to batch norm OP. + + The result of fuse is: + + - before: + + - batch_norm->relu->any_other_op + + - after: + + - batch_norm->any_other_op + + :param program: program to transpile + :type program: Program + ''' + use_mkldnn = bool(os.getenv("FLAGS_use_mkldnn", False)) + if not use_mkldnn: + return + + self.block = program.block(0) + + i = 0 + while i < len(self.block.ops) - 1: + current_op = self.block.ops[i] + if current_op.type in ['batch_norm']: + next_op = self.block.ops[i + 1] + if next_op.type == 'relu': + # modify bnorm OP to include relu + current_op.set_attr("fuse_with_relu", True) + # remove relu OP + self.block.remove_op(i + 1) + i = i + 1 + + self._remove_unused_var() + # TODO(luotao): use clone() method to flush the program.desc in force, + # since some large program.desc will not be flushed immediately. + # And a better solution will be considered later. + program = program.clone() def fuse_batch_norm(self, program, place, scope): ''' Transpile the program by fused batch normalization. - - The batch normalization followed the convolution or fully connected layer - can be integrated with them. Doing so will give us a forward acceleration, + + The batch normalization followed the convolution or fully connected layer + can be integrated with them. Doing so will give us a forward acceleration, especially in environments like mobile or embedded. - + For input :math:`X`: - - Conv process: :math:`X = input * W + bias` - - Batch norm process: :math:`X' = (X - mean) / std` + - Conv process: :math:`X = input * W + bias` + - Batch norm process: :math:`X' = (X - mean) / std` - Scale Process: :math:`Y = a * X' + b` After fuse into one operation: @@ -76,17 +125,17 @@ class InferenceTranspiler: Y &= (input * W + bias - mean) / std * a + b \\\\ &= input * a * W / std + ((bias - mean) / std * a + b) - The operator transformation is: + The operator transformation is: - before: - conv->batch_norm->any_other_op (bias == 0) - conv->elementwise_add->batch_norm->any_other_op (bias != 0) - - - after: + + - after: - conv->elementwise_add->any_other_op - + The transpile stages are: 1. insert elementwise_add op when bias == 0. @@ -99,20 +148,20 @@ class InferenceTranspiler: program (Program): program to transpile place (Place): inference place scope (Scope): inference Scope - + ''' self.scope = scope self.place = place self.block = program.block(0) - self.input_map = {} # store the input names should be adjusted + self.input_map = {} # store the input names should be adjusted i = 0 - while i < len(self.block.ops): + while i < len(self.block.ops) - 2: current_op = self.block.ops[i] # TODO(luotao1): consider only conv2d now. fc would be delt later. if current_op.type in ['conv2d']: - # TODO(luotao1): consider single chain network now. - # For branch network, we counldn't use block.ops[i + 1] as + # TODO(luotao1): consider single chain network now. + # For branch network, we counldn't use block.ops[i + 1] as # the judgment condition. next_op = self.block.ops[i + 1] # conv2d without bias @@ -137,17 +186,17 @@ class InferenceTranspiler: self._adjust_input() self._remove_unused_var() - # TODO(luotao): use clone() method to flush the program.desc in force, - # since some large program.desc will not be flushed immediately. + # TODO(luotao): use clone() method to flush the program.desc in force, + # since some large program.desc will not be flushed immediately. # And a better solution will be considered later. program = program.clone() # ====================== private transpiler functions ===================== def _insert_bias_op(self, index, current_op, bn_op): ''' - Construct elementwise_add operator for adding bias + Construct elementwise_add operator for adding bias and insert it into program. - + :param index: insert location of bias_op :type index: Int :param current_op: current operator (conv or fc) @@ -175,14 +224,14 @@ class InferenceTranspiler: def _fuse_param(self, current_op, bn_op, bias_op, with_bias): ''' fuse the batch_norm_op' parameters to current_op (conv or fc) - + :param current_op: current operator (conv or fc) :type current_op: Operator :param bn_op: batch norm operator :type bn_op: Operator :param bias_op: elementwise_add operator for adding bias :type bias_op: Operator - :param with_bias: If current operator has bias, with_bias = 1; otherwise 0. + :param with_bias: If current operator has bias, with_bias = 1; otherwise 0. :type with_bias: Int ''' From 20fae681366de7c799dfbc92a7be53b027d532c2 Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Wed, 27 Jun 2018 19:39:15 +0800 Subject: [PATCH 042/130] adam op handle grad.rows().size == 0 condition --- paddle/fluid/operators/adam_op.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/paddle/fluid/operators/adam_op.h b/paddle/fluid/operators/adam_op.h index f82ff47b52..a7a28b02b6 100644 --- a/paddle/fluid/operators/adam_op.h +++ b/paddle/fluid/operators/adam_op.h @@ -282,6 +282,10 @@ class AdamOpKernel : public framework::OpKernel { } else if (grad_var->IsType()) { auto& grad = Ref(ctx.Input("Grad"), "Must set Grad"); + if (grad.rows().size() == 0) { + VLOG(3) << "grad row size is 0!!"; + return; + } // merge duplicated rows if any. scatter::MergeAdd merge_func; auto grad_merge = From 64e44e929c06722a87dfe6989b46f66130cfe27a Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Wed, 27 Jun 2018 19:45:33 +0800 Subject: [PATCH 043/130] add option to compile inference demo --- paddle/contrib/inference/demo/CMakeLists.txt | 5 +++++ paddle/scripts/paddle_build.sh | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/paddle/contrib/inference/demo/CMakeLists.txt b/paddle/contrib/inference/demo/CMakeLists.txt index 566c7d1a07..ecece6fe34 100644 --- a/paddle/contrib/inference/demo/CMakeLists.txt +++ b/paddle/contrib/inference/demo/CMakeLists.txt @@ -15,6 +15,11 @@ inference_api_test(simple_on_word2vec ARGS test_word2vec) +option(WITH_INFERENCE_DEMO "Compile with Inference demo" OFF) +if(NOT WITH_INFERENCE_DEMO) + return() +endif() + set(DEMO_INSTALL_DIR "${PADDLE_BINARY_DIR}/inference_demo") set(URL_ROOT http://paddlemodels.bj.bcebos.com/inference-vis-demos%2F) diff --git a/paddle/scripts/paddle_build.sh b/paddle/scripts/paddle_build.sh index 037688bde9..b16c834931 100755 --- a/paddle/scripts/paddle_build.sh +++ b/paddle/scripts/paddle_build.sh @@ -106,6 +106,7 @@ function cmake_gen() { -DWITH_FLUID_ONLY=${WITH_FLUID_ONLY:-OFF} -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWITH_CONTRIB=${WITH_CONTRIB:-ON} + -DWITH_INFERENCE_DEMO=${WITH_INFERENCE_DEMO:-ON} ======================================== EOF # Disable UNITTEST_USE_VIRTUALENV in docker because @@ -133,7 +134,8 @@ EOF -DWITH_FLUID_ONLY=${WITH_FLUID_ONLY:-OFF} \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DWITH_CONTRIB=${WITH_CONTRIB:-ON} \ - -DWITH_ANAKIN=${WITH_ANAKIN:-ON} + -DWITH_ANAKIN=${WITH_ANAKIN:-ON} \ + -DWITH_INFERENCE_DEMO=${WITH_INFERENCE_DEMO:-ON} } function abort(){ From bc28cf613f9e41908d6da9a889cbb3242e0589d2 Mon Sep 17 00:00:00 2001 From: Haichao Zhang Date: Wed, 27 Jun 2018 16:56:41 -0700 Subject: [PATCH 044/130] Extend fill_zeros_like_op for zero-filling an LoDTensorArray (#11496) * Add fill_zeros_array op. This op is used for zero-filling an LoDTensorArray. * merge fill_zeros_array_op with fill_zeros_like_op * add unit_test for fill_zeros_like for array --- paddle/fluid/framework/operator.cc | 4 + paddle/fluid/operators/fill_zeros_like_op.cc | 10 ++- paddle/fluid/operators/fill_zeros_like_op.h | 30 +++++-- python/paddle/fluid/layers/nn.py | 38 ++++++++ .../test_fill_zeros_like_op_for_array.py | 88 +++++++++++++++++++ 5 files changed, 161 insertions(+), 9 deletions(-) create mode 100644 python/paddle/fluid/tests/unittests/test_fill_zeros_like_op_for_array.py diff --git a/paddle/fluid/framework/operator.cc b/paddle/fluid/framework/operator.cc index 122ee1dab3..c1329b06d7 100644 --- a/paddle/fluid/framework/operator.cc +++ b/paddle/fluid/framework/operator.cc @@ -713,6 +713,10 @@ proto::VarType::Type OperatorWithKernel::IndicateDataType( t = &var->Get(); } else if (var->IsType()) { t = &(var->Get().value()); + } else if (var->IsType()) { + const LoDTensorArray& arr = var->Get(); + PADDLE_ENFORCE(arr.size() > 0); + t = &(arr[0]); } if (t != nullptr) { int tmp = static_cast(ToDataType(t->type())); diff --git a/paddle/fluid/operators/fill_zeros_like_op.cc b/paddle/fluid/operators/fill_zeros_like_op.cc index d67bec36b3..a9d47c0172 100644 --- a/paddle/fluid/operators/fill_zeros_like_op.cc +++ b/paddle/fluid/operators/fill_zeros_like_op.cc @@ -26,8 +26,12 @@ class FillZerosLikeOp : public framework::OperatorWithKernel { "Input(X) of FillZerosLikeOp should not be null."); PADDLE_ENFORCE(ctx->HasOutput("Out"), "Output(Out) of FillZerosLikeOp should not be null."); - ctx->SetOutputDim("Out", ctx->GetInputDim("X")); - ctx->ShareLoD("X", /*->*/ "Out"); + + if (ctx->IsRuntime() && + ctx->GetOutputsVarType("Out")[0] == + framework::proto::VarType::LOD_TENSOR_ARRAY) { + return; // skip runtime infershape when is tensor array; + } } }; @@ -39,7 +43,7 @@ class FillZerosLikeOpMaker : public framework::OpProtoAndCheckerMaker { AddComment(R"DOC( FillZerosLike Operator. -Fill up a variable with zeros. +Fill up a variable with zeros, supporting both LoDTensor and LoDTensorArray. The output will have the same size as the input. )DOC"); diff --git a/paddle/fluid/operators/fill_zeros_like_op.h b/paddle/fluid/operators/fill_zeros_like_op.h index 4bbe0df6b6..daa6521b32 100644 --- a/paddle/fluid/operators/fill_zeros_like_op.h +++ b/paddle/fluid/operators/fill_zeros_like_op.h @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #pragma once +#include "paddle/fluid/framework/lod_tensor_array.h" #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/operators/math/math_function.h" @@ -23,12 +24,29 @@ template class FillZerosLikeKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { - auto* out = context.Output("Out"); - out->mutable_data(context.GetPlace()); - - math::SetConstant setter; - setter(context.template device_context(), out, - static_cast(0)); + auto var = context.InputVar("X"); + if (var->IsType()) { + auto& input = *context.Input("X"); + auto& output = *context.Output("Out"); + output.Resize(input.dims()); + output.set_lod(input.lod()); + output.mutable_data(context.GetPlace()); + math::SetConstant setter; + setter(context.template device_context(), &(output), + static_cast(0)); + } else if (var->IsType()) { + auto& input = *context.Input("X"); + auto& output = *context.Output("Out"); + output.resize(input.size()); + for (auto i = 0; i < input.size(); i++) { + output[i].Resize(input[i].dims()); + output[i].set_lod(input[i].lod()); + output[i].mutable_data(context.GetPlace()); + math::SetConstant setter; + setter(context.template device_context(), &(output[i]), + static_cast(0)); + } + } } }; diff --git a/python/paddle/fluid/layers/nn.py b/python/paddle/fluid/layers/nn.py index 64f48e259a..bc379da4e3 100644 --- a/python/paddle/fluid/layers/nn.py +++ b/python/paddle/fluid/layers/nn.py @@ -95,6 +95,7 @@ __all__ = [ 'relu', 'log', 'crop', + 'fill_zeros_like', ] @@ -5184,3 +5185,40 @@ def crop(x, shape=None, offsets=None, name=None): outputs={'Out': out}, attrs=None if len(attrs) == 0 else attrs) return out + + +def fill_zeros_like(x): + """ + This layer takes an input and outputs a variable that has the same structure as + the input and with all the element values as zero. The variable can be a Tensor + or TensorArray. + + .. code-block:: text + + + Given + X = [[0, 1, 2, 0], + [0, 3, 4, 0], + [0, 0, 0, 0]], + output is: + Out = [[0, 0, 0, 0], + [0, 0, 0, 0], + [0, 0, 0, 0]]. + + Args: + x (Variable): The input variable, which could be a tensor or tensor array + + Returns: + Variable: The zero-filled variable, which has the same type and shape as + the input variable. + + Examples: + + .. code-block:: python + y = fluid.layers.fill_zeros_like(x) + """ + helper = LayerHelper('fill_zeros_like', **locals()) + out = helper.create_tmp_variable(dtype=x.dtype) + helper.append_op( + type='fill_zeros_like', inputs={'X': [x]}, outputs={'Out': [out]}) + return out diff --git a/python/paddle/fluid/tests/unittests/test_fill_zeros_like_op_for_array.py b/python/paddle/fluid/tests/unittests/test_fill_zeros_like_op_for_array.py new file mode 100644 index 0000000000..23871508d8 --- /dev/null +++ b/python/paddle/fluid/tests/unittests/test_fill_zeros_like_op_for_array.py @@ -0,0 +1,88 @@ +# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +import paddle.fluid.core as core +import numpy +import paddle.fluid.layers as layers +from paddle.fluid.framework import Program, program_guard +from paddle.fluid.executor import Executor + +import paddle.fluid as fluid +import paddle.fluid.core as core + + +class TestFillZerosLikeOpForTensorArray(unittest.TestCase): + def place(self): + return core.CPUPlace() + + def test_zero_filling_lod_tensor_array(self): + tensor = core.LoDTensor() + tensor.set( + numpy.arange(20).reshape(20, 1).astype('int32'), self.place()) + tensor.set_lod([[0, 2, 5], [0, 3, 9, 11, 17, 20]]) + + expect = [ + numpy.array( + [0, 0, 0, 0, 0], dtype='int32'), numpy.array( + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype='int32'), + numpy.array( + [0, 0, 0], dtype='int32') + ] + + lod = [[[0, 2, 5]], [[0, 6, 12]], [[0, 3]]] + self.main( + tensor=tensor, + expect_array=expect, + expect_lod=lod, + expect_max_len=3) + + def main(self, tensor, expect_array, expect_lod, expect_max_len, level=0): + place = self.place() + program = Program() + with program_guard(program): + x = layers.data(name='x', shape=[10]) + x.persistable = True + table = layers.lod_rank_table(x, level=level) + max_len = layers.max_sequence_len(table) + max_len.persistable = True + array = layers.lod_tensor_to_array(x, table) + array = layers.fill_zeros_like(array) + array.persistable = True + + result = layers.array_to_lod_tensor(array, table) + result.persistable = True + exe = Executor(place) + scope = core.Scope() + exe.run(program, feed={'x': tensor}, scope=scope) + var = scope.find_var(array.name) + array = var.get_lod_tensor_array() + if expect_array is not None and expect_lod is not None: + self.check_array_same(array, expect_array, expect_lod) + + self.assertEqual( + numpy.array(scope.find_var(max_len.name).get_tensor())[0], + expect_max_len) + + def check_array_same(self, array, expect_tensor, expect_lod): + self.assertEqual(len(expect_tensor), len(array)) + for i, exp in enumerate(zip(expect_tensor, expect_lod)): + exp_tensor, exp_lod = exp + exp_tensor = numpy.expand_dims(exp_tensor, axis=1) + self.assertTrue(numpy.allclose(exp_tensor, numpy.array(array[i]))) + self.assertEqual(exp_lod, array[i].lod()) + + +if __name__ == '__main__': + unittest.main() From 5082642bdb038ef87f81549a3589724a65c29799 Mon Sep 17 00:00:00 2001 From: Yan Chunwei Date: Thu, 28 Jun 2018 09:13:55 +0800 Subject: [PATCH 045/130] feature/analysis to support sub-graph for TRT engine (#11538) --- paddle/contrib/inference/CMakeLists.txt | 10 +- .../contrib/inference/paddle_inference_api.h | 11 +- .../inference/paddle_inference_api_impl.cc | 6 +- .../inference/paddle_inference_api_impl.h | 2 +- ..._inference_api_tensorrt_subgraph_engine.cc | 126 ++++++++++++++++++ ..._inference_api_tensorrt_subgraph_engine.cc | 64 +++++++++ .../fluid/inference/analysis/CMakeLists.txt | 12 +- paddle/fluid/inference/analysis/analyzer.cc | 82 ++++++++++++ paddle/fluid/inference/analysis/analyzer.h | 66 +++++++++ .../inference/analysis/analyzer_tester.cc | 29 ++++ paddle/fluid/inference/analysis/argument.h | 3 + .../inference/analysis/data_flow_graph.cc | 21 ++- .../inference/analysis/data_flow_graph.h | 23 +++- .../analysis/data_flow_graph_to_fluid_pass.cc | 124 ++++++++++++++--- .../analysis/data_flow_graph_to_fluid_pass.h | 6 +- .../analysis/dfg_graphviz_draw_pass.cc | 15 ++- .../analysis/dfg_graphviz_draw_pass.h | 13 +- .../analysis/dfg_graphviz_draw_pass_tester.cc | 4 +- .../analysis/fluid_to_data_flow_graph_pass.cc | 23 +++- .../analysis/fluid_to_data_flow_graph_pass.h | 3 +- paddle/fluid/inference/analysis/helper.cc | 60 +++++++++ paddle/fluid/inference/analysis/helper.h | 22 ++- paddle/fluid/inference/analysis/node.cc | 11 ++ paddle/fluid/inference/analysis/node.h | 90 +++++++------ .../inference/analysis/node_attr_flags.h | 32 +++++ paddle/fluid/inference/analysis/pass.h | 3 + .../fluid/inference/analysis/pass_manager.cc | 12 ++ .../fluid/inference/analysis/pass_manager.h | 12 +- .../inference/analysis/pass_manager_tester.cc | 1 + .../inference/analysis/subgraph_splitter.cc | 32 +++-- .../tensorrt_subgraph_node_mark_pass.cc | 78 +++++++++++ .../tensorrt_subgraph_node_mark_pass.h | 53 ++++++++ ...tensorrt_subgraph_node_mark_pass_tester.cc | 50 +++++++ .../analysis/tensorrt_subgraph_pass.cc | 2 +- .../analysis/tensorrt_subgraph_pass.h | 5 + .../analysis/tensorrt_subgraph_pass_tester.cc | 51 ++++--- paddle/fluid/operators/CMakeLists.txt | 3 +- paddle/fluid/operators/tensorrt_engine_op.h | 1 + .../operators/tensorrt_engine_op_test.cc | 43 +----- 39 files changed, 1015 insertions(+), 189 deletions(-) create mode 100644 paddle/contrib/inference/paddle_inference_api_tensorrt_subgraph_engine.cc create mode 100644 paddle/contrib/inference/test_paddle_inference_api_tensorrt_subgraph_engine.cc create mode 100644 paddle/fluid/inference/analysis/analyzer.cc create mode 100644 paddle/fluid/inference/analysis/analyzer.h create mode 100644 paddle/fluid/inference/analysis/analyzer_tester.cc create mode 100644 paddle/fluid/inference/analysis/helper.cc create mode 100644 paddle/fluid/inference/analysis/node_attr_flags.h create mode 100644 paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.cc create mode 100644 paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h create mode 100644 paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass_tester.cc diff --git a/paddle/contrib/inference/CMakeLists.txt b/paddle/contrib/inference/CMakeLists.txt index 45bbb4b237..153216abb4 100644 --- a/paddle/contrib/inference/CMakeLists.txt +++ b/paddle/contrib/inference/CMakeLists.txt @@ -18,7 +18,7 @@ if(APPLE) endif(APPLE) -set(inference_deps paddle_inference_api paddle_fluid_api) +set(inference_deps paddle_inference_api paddle_fluid_api paddle_inference_tensorrt_subgraph_engine) function(inference_api_test TARGET_NAME) if (WITH_TESTING) @@ -50,6 +50,14 @@ cc_test(test_paddle_inference_api inference_api_test(test_paddle_inference_api_impl ARGS test_word2vec test_image_classification) +if(WITH_GPU AND TENSORRT_FOUND) +cc_library(paddle_inference_tensorrt_subgraph_engine + SRCS paddle_inference_api_tensorrt_subgraph_engine.cc + DEPS paddle_inference_api analysis tensorrt_engine paddle_inference_api paddle_fluid_api) + +inference_api_test(test_paddle_inference_api_tensorrt_subgraph_engine ARGS test_word2vec) +endif() + if (WITH_ANAKIN AND WITH_TESTING) # only needed in CI # Due to Anakin do not have official library releases and the versions of protobuf and cuda do not match Paddle's, # so anakin library will not be merged to our official inference library. To use anakin prediction API, one need to diff --git a/paddle/contrib/inference/paddle_inference_api.h b/paddle/contrib/inference/paddle_inference_api.h index 238d8c772e..b8ba2d14a5 100644 --- a/paddle/contrib/inference/paddle_inference_api.h +++ b/paddle/contrib/inference/paddle_inference_api.h @@ -73,12 +73,12 @@ struct PaddleTensor { }; enum class PaddleEngineKind { - kNative = 0, // Use the native Fluid facility. - kAnakin, // Use Anakin for inference. + kNative = 0, // Use the native Fluid facility. + kAnakin, // Use Anakin for inference. + kAutoMixedTensorRT, // Automatically mix Fluid with TensorRT. // TODO(Superjomn) support following engines latter. // kTensorRT, // Use TensorRT for inference. // kAutoMixedAnakin, // Automatically mix Fluid with Anakin. - // kAutoMixedTensorRT, // Automatically mix Fluid with TensorRT. }; /* @@ -130,6 +130,11 @@ struct AnakinConfig : public PaddlePredictor::Config { int max_batch_size{-1}; }; +struct TensorRTConfig : public NativeConfig { + // Determine whether a subgraph will be executed by TRT. + int min_subgraph_size{1}; +}; + // A factory to help create different predictors. // // FOR EXTENSION DEVELOPER: diff --git a/paddle/contrib/inference/paddle_inference_api_impl.cc b/paddle/contrib/inference/paddle_inference_api_impl.cc index d9129a704b..b1e5b87598 100644 --- a/paddle/contrib/inference/paddle_inference_api_impl.cc +++ b/paddle/contrib/inference/paddle_inference_api_impl.cc @@ -89,6 +89,7 @@ bool NativePaddlePredictor::Init( LOG(ERROR) << "fail to load inference model."; return false; } + ctx_ = executor_->Prepare(*inference_program_, 0); executor_->CreateVariables( *inference_program_, sub_scope_ ? sub_scope_ : scope_.get(), 0); @@ -119,6 +120,7 @@ bool NativePaddlePredictor::Run(const std::vector &inputs, return false; } for (size_t i = 0; i < feed_target_names_.size(); ++i) { + VLOG(4) << "setting " << i << "-th target"; feed_targets[feed_target_names_[i]] = &feeds[i]; } // get fetch variable @@ -130,14 +132,16 @@ bool NativePaddlePredictor::Run(const std::vector &inputs, } // Run the inference program // if share variables, we need not create variables + VLOG(4) << "Run prepared context"; executor_->RunPreparedContext( ctx_.get(), sub_scope_ != nullptr ? sub_scope_ : scope_.get(), &feed_targets, &fetch_targets, false /* don't create variable eatch time */); + VLOG(4) << "Finish prepared context"; if (!GetFetch(fetchs, output_data)) { - LOG(ERROR) << "fail to get fetchs"; + LOG(ERROR) << "fail to get fetches"; return false; } VLOG(3) << "predict cost: " << timer.toc() << "ms"; diff --git a/paddle/contrib/inference/paddle_inference_api_impl.h b/paddle/contrib/inference/paddle_inference_api_impl.h index 86d1db7bcc..ba266b608d 100644 --- a/paddle/contrib/inference/paddle_inference_api_impl.h +++ b/paddle/contrib/inference/paddle_inference_api_impl.h @@ -44,7 +44,7 @@ class NativePaddlePredictor : public PaddlePredictor { ~NativePaddlePredictor() override; - private: + protected: bool SetFeed(const std::vector &input_datas, std::vector *feeds); bool GetFetch(const std::vector &fetchs, diff --git a/paddle/contrib/inference/paddle_inference_api_tensorrt_subgraph_engine.cc b/paddle/contrib/inference/paddle_inference_api_tensorrt_subgraph_engine.cc new file mode 100644 index 0000000000..a11396cee9 --- /dev/null +++ b/paddle/contrib/inference/paddle_inference_api_tensorrt_subgraph_engine.cc @@ -0,0 +1,126 @@ +// Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "paddle/contrib/inference/paddle_inference_api.h" +#include "paddle/contrib/inference/paddle_inference_api_impl.h" +#include "paddle/fluid/inference/analysis/analyzer.h" +#include "paddle/fluid/inference/utils/singleton.h" + +namespace paddle { + +using inference::analysis::Argument; +using inference::Singleton; +using inference::analysis::Analyzer; +using framework::proto::ProgramDesc; + +class TensorRTSubgraphPredictor : public NativePaddlePredictor { + public: + explicit TensorRTSubgraphPredictor(const TensorRTConfig& config) + : NativePaddlePredictor(config), config_(config) {} + + bool Init(const std::shared_ptr& parent_scope) { + VLOG(3) << "Predictor::init()"; + + if (config_.use_gpu) { + place_ = paddle::platform::CUDAPlace(config_.device); + } else { + place_ = paddle::platform::CPUPlace(); + } + if (parent_scope) { + scope_ = parent_scope; + sub_scope_ = &(parent_scope->NewScope()); + } else { + paddle::framework::InitDevices(false); + scope_.reset(new paddle::framework::Scope()); + } + + executor_.reset(new paddle::framework::Executor(place_)); + + // Initialize the inference program + if (!config_.model_dir.empty()) { + // Parameters are saved in separate files sited in + // the specified `dirname`. + inference_program_ = paddle::inference::Load( + executor_.get(), scope_.get(), config_.model_dir); + } else if (!config_.prog_file.empty() && !config_.param_file.empty()) { + // All parameters are saved in a single file. + // The file names should be consistent with that used + // in Python API `fluid.io.save_inference_model`. + inference_program_ = paddle::inference::Load( + executor_.get(), scope_.get(), config_.prog_file, config_.param_file); + } else { + LOG(ERROR) << "fail to load inference model."; + return false; + } + + // Analyze inference_program + Argument argument; + argument.origin_program_desc.reset( + new ProgramDesc(*inference_program_->Proto())); + Singleton::Global().Run(&argument); + CHECK(argument.transformed_program_desc); + VLOG(5) << "transformed program:\n" + << argument.transformed_program_desc->SerializeAsString(); + VLOG(5) << "to prepare executor"; + *inference_program_->Proto() = *argument.transformed_program_desc; + ctx_ = executor_->Prepare(*inference_program_, 0); + + VLOG(5) << "to create variables"; + executor_->CreateVariables( + *inference_program_, sub_scope_ ? sub_scope_ : scope_.get(), 0); + + // Get the feed_target_names and fetch_target_names + feed_target_names_ = inference_program_->GetFeedTargetNames(); + fetch_target_names_ = inference_program_->GetFetchTargetNames(); + return true; + } + + private: + TensorRTConfig config_; +}; + +template <> +std::unique_ptr +CreatePaddlePredictor( + const TensorRTConfig& config) { + VLOG(3) << "create TensorRTSubgraphPredictor"; + if (config.use_gpu) { + // 1. GPU memeroy + PADDLE_ENFORCE_GT( + config.fraction_of_gpu_memory, + 0.f, + "fraction_of_gpu_memory in the config should be set to range (0., 1.]"); + PADDLE_ENFORCE_GE(config.device, 0, "Invalid device id %d", config.device); + std::vector flags; + if (config.fraction_of_gpu_memory >= 0.0f || + config.fraction_of_gpu_memory <= 0.95f) { + flags.push_back("dummpy"); + std::string flag = "--fraction_of_gpu_memory_to_use=" + + std::to_string(config.fraction_of_gpu_memory); + flags.push_back(flag); + VLOG(3) << "set flag: " << flag; + framework::InitGflags(flags); + } + } + + std::unique_ptr predictor( + new TensorRTSubgraphPredictor(config)); + if (!dynamic_cast(predictor.get()) + ->Init(nullptr)) { + return nullptr; + } + return std::move(predictor); +} + +} // namespace paddle diff --git a/paddle/contrib/inference/test_paddle_inference_api_tensorrt_subgraph_engine.cc b/paddle/contrib/inference/test_paddle_inference_api_tensorrt_subgraph_engine.cc new file mode 100644 index 0000000000..b100630dbe --- /dev/null +++ b/paddle/contrib/inference/test_paddle_inference_api_tensorrt_subgraph_engine.cc @@ -0,0 +1,64 @@ +// Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include "paddle/contrib/inference/paddle_inference_api.h" + +namespace paddle { + +DEFINE_string(dirname, "", "Directory of the inference model."); + +void Main(bool use_gpu) { + //# 1. Create PaddlePredictor with a config. + TensorRTConfig config; + config.model_dir = FLAGS_dirname + "word2vec.inference.model"; + config.use_gpu = use_gpu; + config.fraction_of_gpu_memory = 0.15; + config.device = 0; + auto predictor = + CreatePaddlePredictor(config); + + for (int batch_id = 0; batch_id < 3; batch_id++) { + //# 2. Prepare input. + int64_t data[4] = {1, 2, 3, 4}; + + PaddleTensor tensor{.name = "", + .shape = std::vector({4, 1}), + .data = PaddleBuf(data, sizeof(data)), + .dtype = PaddleDType::INT64}; + + // For simplicity, we set all the slots with the same data. + std::vector slots(4, tensor); + + //# 3. Run + std::vector outputs; + CHECK(predictor->Run(slots, &outputs)); + + //# 4. Get output. + ASSERT_EQ(outputs.size(), 1UL); + LOG(INFO) << "output buffer size: " << outputs.front().data.length(); + const size_t num_elements = outputs.front().data.length() / sizeof(float); + // The outputs' buffers are in CPU memory. + for (size_t i = 0; i < std::min(5UL, num_elements); i++) { + LOG(INFO) << static_cast(outputs.front().data.data())[i]; + } + } +} + +TEST(paddle_inference_api_tensorrt_subgraph_engine, main) { Main(true); } + +} // namespace paddle \ No newline at end of file diff --git a/paddle/fluid/inference/analysis/CMakeLists.txt b/paddle/fluid/inference/analysis/CMakeLists.txt index 2bb2c8135d..33b0e3b127 100644 --- a/paddle/fluid/inference/analysis/CMakeLists.txt +++ b/paddle/fluid/inference/analysis/CMakeLists.txt @@ -1,10 +1,12 @@ -set(FLUID_CORE_MODULES proto_desc memory lod_tensor executor init) cc_library(analysis SRCS pass_manager.cc dot.cc node.cc data_flow_graph.cc graph_traits.cc subgraph_splitter.cc fluid_to_data_flow_graph_pass.cc data_flow_graph_to_fluid_pass.cc - tensorrt_subgraph_pass.cc dfg_graphviz_draw_pass.cc - DEPS framework_proto) + tensorrt_subgraph_pass.cc + tensorrt_subgraph_node_mark_pass.cc + analyzer.cc + helper.cc + DEPS framework_proto proto_desc) cc_test(test_node SRCS node_tester.cc DEPS analysis) cc_test(test_dot SRCS dot_tester.cc DEPS analysis) @@ -28,5 +30,7 @@ inference_analysis_test(test_data_flow_graph_to_fluid_pass SRCS data_flow_graph_ inference_analysis_test(test_fluid_to_data_flow_graph_pass SRCS fluid_to_data_flow_graph_pass_tester.cc) inference_analysis_test(test_subgraph_splitter SRCS subgraph_splitter_tester.cc) inference_analysis_test(test_dfg_graphviz_draw_pass SRCS dfg_graphviz_draw_pass_tester.cc) -#inference_analysis_test(test_tensorrt_subgraph_pass SRCS tensorrt_subgraph_pass_tester.cc) +inference_analysis_test(test_tensorrt_subgraph_pass SRCS tensorrt_subgraph_pass_tester.cc) inference_analysis_test(test_pass_manager SRCS pass_manager_tester.cc) +inference_analysis_test(test_tensorrt_subgraph_node_mark_pass SRCS tensorrt_subgraph_node_mark_pass_tester.cc) +inference_analysis_test(test_analyzer SRCS analyzer_tester.cc) diff --git a/paddle/fluid/inference/analysis/analyzer.cc b/paddle/fluid/inference/analysis/analyzer.cc new file mode 100644 index 0000000000..5d85530969 --- /dev/null +++ b/paddle/fluid/inference/analysis/analyzer.cc @@ -0,0 +1,82 @@ +// Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "paddle/fluid/inference/analysis/analyzer.h" +#include "paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.h" +#include "paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h" +#include "paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.h" +#include "paddle/fluid/inference/analysis/pass_manager.h" +#include "paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h" +#include "paddle/fluid/inference/analysis/tensorrt_subgraph_pass.h" + +namespace paddle { +namespace inference { +namespace analysis { + +DEFINE_bool(inference_analysis_enable_tensorrt_subgraph_engine, false, + "Enable subgraph to TensorRT engine for acceleration"); + +DEFINE_string(inference_analysis_graphviz_log_root, "./", + "Graphviz debuger for data flow graphs."); + +class DfgPassManagerImpl final : public DfgPassManager { + public: + DfgPassManagerImpl() { + // TODO(Superjomn) set the key with pass reprs. + AddPass("fluid-to-data-flow-graph", new FluidToDataFlowGraphPass); + if (FLAGS_inference_analysis_enable_tensorrt_subgraph_engine) { + auto trt_teller = [](const Node* node) { + if (!node->IsFunction()) return false; + return static_cast(node)->func_type() == "mul"; + }; + AddPass("tensorrt-subgraph-marker", + new TensorRTSubgraphNodeMarkPass(trt_teller)); + AddPass("tensorrt-subgraph", new TensorRTSubGraphPass(trt_teller)); + } + AddPass("data-flow-graph-to-fluid", new DataFlowGraphToFluidPass); + } + + std::string repr() const override { return "dfg-pass-manager"; } + std::string description() const override { return "DFG pass manager."; } + + private: + void AddPass(const std::string& name, Pass* pass) { + LOG(INFO) << "Adding pass " << name; + Register(name, pass); + AddGraphvizDebugerPass(pass); + } + + // Add the graphviz debuger pass if the parent pass has one. + void AddGraphvizDebugerPass(Pass* pass) { + auto* debuger_pass = pass->CreateGraphvizDebugerPass(); + if (debuger_pass) { + LOG(INFO) << " - register debug pass [" << debuger_pass->repr() << "]"; + Register(debuger_pass->repr(), debuger_pass); + } + } +}; + +Analyzer::Analyzer() { Register("manager1", new DfgPassManagerImpl); } + +void Analyzer::Run(Argument* argument) { + for (auto& x : data_) { + PADDLE_ENFORCE(x->Initialize(argument)); + x->RunAll(); + PADDLE_ENFORCE(x->Finalize()); + } +} + +} // namespace analysis +} // namespace inference +} // namespace paddle \ No newline at end of file diff --git a/paddle/fluid/inference/analysis/analyzer.h b/paddle/fluid/inference/analysis/analyzer.h new file mode 100644 index 0000000000..f290a3777d --- /dev/null +++ b/paddle/fluid/inference/analysis/analyzer.h @@ -0,0 +1,66 @@ +/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +/* + * This file contains Analyzer, an class that exposed as a library that analyze + * and optimize + * Fluid ProgramDesc for inference. Similar to LLVM, it has multiple flags to + * control whether + * an process is applied on the program. + * + * The processes are called Passes in analysis, the Passes are placed in a + * pipeline, the first + * Pass is the FluidToDataFlowGraphPass which transforms a Fluid ProgramDesc to + * a data flow + * graph, the last Pass is DataFlowGraphToFluidPass which transforms a data flow + * graph to a + * Fluid ProgramDesc. The passes in the middle of the pipeline can be any Passes + * which take a + * node or data flow graph as input. + * + * The Analyzer can be used in two methods, the first is a executable file which + * can be used to + * pre-process the inference model and can be controlled by passing difference + * command flags; + * the other way is to compose inside the inference API as a runtime pre-process + * phase in the + * inference service. + */ + +#include +#include "paddle/fluid/inference/analysis/pass.h" +#include "paddle/fluid/inference/analysis/pass_manager.h" + +namespace paddle { +namespace inference { +namespace analysis { + +// TODO(Superjomn) add a definition flag like PADDLE_WITH_TENSORRT and hide this +// flag if not available. +DECLARE_bool(inference_analysis_enable_tensorrt_subgraph_engine); +DECLARE_string(inference_analysis_graphviz_log_root); + +class Analyzer : public OrderedRegistry { + public: + // Register all the pass-managers. + Analyzer(); + + void Run(Argument* argument); + + DISABLE_COPY_AND_ASSIGN(Analyzer); +}; + +} // namespace analysis +} // namespace inference +} // namespace paddle diff --git a/paddle/fluid/inference/analysis/analyzer_tester.cc b/paddle/fluid/inference/analysis/analyzer_tester.cc new file mode 100644 index 0000000000..d7c1a72932 --- /dev/null +++ b/paddle/fluid/inference/analysis/analyzer_tester.cc @@ -0,0 +1,29 @@ +// Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "paddle/fluid/inference/analysis/analyzer.h" +#include "paddle/fluid/inference/analysis/ut_helper.h" + +namespace paddle { +namespace inference { +namespace analysis { + +TEST_F(DFG_Tester, main) { + Analyzer analyser; + analyser.Run(&argument); +} + +} // namespace analysis +} // namespace inference +} // namespace paddle diff --git a/paddle/fluid/inference/analysis/argument.h b/paddle/fluid/inference/analysis/argument.h index f7f4e03968..6d316f20bf 100644 --- a/paddle/fluid/inference/analysis/argument.h +++ b/paddle/fluid/inference/analysis/argument.h @@ -41,6 +41,9 @@ struct Argument { // The original program desc. std::unique_ptr origin_program_desc; + + // The processed program desc. + std::unique_ptr transformed_program_desc; }; #define UNLIKELY(condition) __builtin_expect(static_cast(condition), 0) diff --git a/paddle/fluid/inference/analysis/data_flow_graph.cc b/paddle/fluid/inference/analysis/data_flow_graph.cc index c30a7c26ce..d09bf3ed16 100644 --- a/paddle/fluid/inference/analysis/data_flow_graph.cc +++ b/paddle/fluid/inference/analysis/data_flow_graph.cc @@ -20,7 +20,7 @@ namespace paddle { namespace inference { namespace analysis { -// It is a better idea that the inputs and outputs of this graph is set manully +// It is a better idea that the inputs and outputs of this graph is set manually // before, but there must be a Pass that helps to prune the unnecessary ops that // do not contribute to the given targets, so in this pass, analysis and get the // inputs and outputs is OK. @@ -50,6 +50,25 @@ void DataFlowGraph::Build() { outputs.push_back(out); } } + + Clean(); +} + +void DataFlowGraph::Clean() { + for (auto &node : nodes.nodes()) { + std::unordered_set inlinks_set(node->inlinks.begin(), + node->inlinks.end()); + std::unordered_set outlinks_set(node->outlinks.begin(), + node->outlinks.end()); + if (inlinks_set.size() < node->inlinks.size()) { + LOG(INFO) << "Clean: node " << node->repr() << " prune duplicate inputs"; + node->inlinks.assign(inlinks_set.begin(), inlinks_set.end()); + } + if (outlinks_set.size() < node->outlinks.size()) { + LOG(INFO) << "Clean: node " << node->repr() << " prune duplicate inputs"; + node->outlinks.assign(outlinks_set.begin(), outlinks_set.end()); + } + } } std::string DataFlowGraph::DotString() const { diff --git a/paddle/fluid/inference/analysis/data_flow_graph.h b/paddle/fluid/inference/analysis/data_flow_graph.h index 913e344d37..30c60661f3 100644 --- a/paddle/fluid/inference/analysis/data_flow_graph.h +++ b/paddle/fluid/inference/analysis/data_flow_graph.h @@ -47,6 +47,10 @@ struct DataFlowGraph { // Output a DOT graph file for debug. std::string DotString() const; + + private: + // Remove duplicate edges and so on. + void Clean(); }; /* @@ -133,17 +137,24 @@ struct GraphTraits { // Extract the inputs and outputs of a graph. The inputs and outputs of a // sub-graph is the inputs nodes and output nodes that doesn't inside the // sub-graph. -std::pair< - std::vector, - std::vector< - Node *>> static ExtractInputAndOutputOfSubGraph(std::vector - &graph) { +static std::pair, std::vector> +ExtractInputAndOutputOfSubGraph(std::vector &graph) { std::unordered_set nodes(graph.begin(), graph.end()); std::unordered_set inputs; std::unordered_set outputs; + // Input a Value, check whether its inlink is in the subgraph. + auto inlink_in_subgraph = [&](Node *n) { + for (auto *in : n->inlinks) { + if (nodes.count(in)) return true; + } + return false; + }; for (auto &node : graph) { for (auto *in : node->inlinks) { - if (!nodes.count(in) && in->type() == Node::Type::kValue) { + // The Value that is written by nodes inside a sub-graph shouldn't be the + // input of the sub-graph. + if (!nodes.count(in) && in->type() == Node::Type::kValue && + !inlink_in_subgraph(in)) { inputs.insert(in); } } diff --git a/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.cc b/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.cc index f7d4cca213..e74efd17b8 100644 --- a/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.cc +++ b/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.cc @@ -13,21 +13,34 @@ // limitations under the License. #include "paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.h" +#include "paddle/fluid/framework/block_desc.h" +#include "paddle/fluid/framework/op_desc.h" #include "paddle/fluid/framework/proto_desc.h" +#include "paddle/fluid/inference/analysis/analyzer.h" +#include "paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h" namespace paddle { namespace inference { namespace analysis { +using framework::proto::ProgramDesc; + +std::vector ExtractParameters( + const std::vector>& nodes); + bool DataFlowGraphToFluidPass::Initialize(Argument* argument) { ANALYSIS_ARGUMENT_CHECK_FIELD(argument) ANALYSIS_ARGUMENT_CHECK_FIELD(argument->origin_program_desc) - desc_ = argument->origin_program_desc.get(); - // Here some logic from program_desc.cc and will not add new interfaces into - // framework::ProgramDesc class, use some UT to assure the correctness. - auto* block = desc_->mutable_blocks()->Add(); - block->set_idx(framework::kRootBlockIndex); - block->set_parent_idx(framework::kNoneBlockIndex); + PADDLE_ENFORCE(!argument->transformed_program_desc); + // The transformed_program_desc should inherit all the VarDesc and BlockDesc + // from the original program desc. The operators of the main block(the first + // block) should rewritten by data flow graph. + argument->transformed_program_desc.reset( + new ProgramDesc(*argument->origin_program_desc)); + argument->transformed_program_desc->mutable_blocks(framework::kRootBlockIndex) + ->clear_ops(); + desc_ = argument->transformed_program_desc.get(); + argument_ = argument; return true; } @@ -37,14 +50,17 @@ void DataFlowGraphToFluidPass::Run(DataFlowGraph* graph) { auto traits = GraphTraits(graph); for (auto it = traits.nodes().begin(); it != traits.nodes().end(); ++it) { if (it->deleted()) continue; + switch (it->type()) { - case Node::Type::kFunction: - LOG(INFO) << "add function " << it->name(); + case Node::Type::kFunction: { + LOG(INFO) << "add function " << it->repr(); AddFluidOp(&(*it)); - break; - case Node::Type::kFunctionBlock: + } break; + case Node::Type::kFunctionBlock: { + LOG(INFO) << "add engine op " << it->repr() << " , " + << static_cast(&(*it))->subgraph.size(); AddEngineOp(&(*it)); - break; + } break; default: continue; } @@ -52,12 +68,10 @@ void DataFlowGraphToFluidPass::Run(DataFlowGraph* graph) { } void DataFlowGraphToFluidPass::AddFluidOp(Node* node) { - LOG(INFO) << "processing func " << node->name(); auto* ori_op = static_cast(node->pb_desc()); // currently only the main block is analyzed. auto* main_block = desc_->mutable_blocks(framework::kRootBlockIndex); auto* op = main_block->add_ops(); - LOG(INFO) << "to copy the op"; *op = *ori_op; // copy the attributes, by default, these will not be changed // by analysis phrase. // The inputs and outputs of the existing ops are not changed by tensorrt @@ -65,11 +79,89 @@ void DataFlowGraphToFluidPass::AddFluidOp(Node* node) { // NOTE It might be changed by other passes in the long run. } +void CreateTrtEngineOp(Node* node, const DataFlowGraph& graph, + const framework::proto::BlockDesc& block) { + static int counter{0}; + PADDLE_ENFORCE(node->IsFunctionBlock()); + framework::OpDesc desc; + auto* func = static_cast(node); + + // collect inputs + std::vector io; + for (auto* x : func->inlinks) { + io.push_back(x->name()); + } + desc.SetInput("Xs", io); + + // collect outputs + io.clear(); + for (auto* x : func->outlinks) { + io.push_back(x->name()); + } + desc.SetOutput("Ys", io); + + desc.SetType("tensorrt_engine"); + // Set attrs + SetAttr(desc.Proto(), "subgraph", block.SerializeAsString()); + SetAttr(desc.Proto(), "engine_unique_key", + "trt-" + std::to_string(counter++)); + SetAttr(desc.Proto(), "max_batch", 100); // TODO(Superjomn) add config latter + SetAttr(desc.Proto(), "max_workspace", + 1024); // TODO(Superjomn) add config latter + SetAttr(desc.Proto(), "parameters", ExtractParameters(graph.nodes.nodes())); + node->SetPbMsg(desc.Proto()->SerializeAsString()); +} + +std::vector ExtractParameters( + const std::vector>& nodes) { + std::vector parameters; + for (const auto& node : nodes) { + if (!node->IsValue()) continue; + PADDLE_ENFORCE(!node->pb_msg().empty(), "pb_msg should be set first"); + framework::proto::VarDesc var; + var.ParseFromString(node->pb_msg()); + if (var.persistable()) { + parameters.push_back(var.name()); + } + } + return parameters; +} + void DataFlowGraphToFluidPass::AddEngineOp(Node* node) { - // auto* ori_op = static_cast(node->extra_info()); - // auto* main_block = desc_->mutable_blocks(framework::kRootBlockIndex); - // auto* op = main_block->add_ops(); // TODO(Superjomn) Here need to expose some arguments for default setting. + PADDLE_ENFORCE(node->IsFunctionBlock()); + auto* block_node = static_cast(node); + framework::proto::BlockDesc proto; + framework::BlockDesc block_desc(nullptr, &proto); + // copy ops. + for (auto* node : block_node->subgraph) { + auto* op = block_desc.AppendOp(); + PADDLE_ENFORCE(!node->pb_msg().empty()); + op->Proto()->ParseFromString(node->pb_msg()); + } + CreateTrtEngineOp(node, *argument_->main_dfg, *block_desc.Proto()); + auto* main_block = desc_->mutable_blocks(framework::kRootBlockIndex); + auto* op = main_block->add_ops(); + PADDLE_ENFORCE(!node->pb_msg().empty(), "failed to set desc for block"); + op->ParseFromString(node->pb_msg()); +} + +namespace { +class DFG_DebuggerPass : public DFG_GraphvizDrawPass { + public: + using Config = DFG_GraphvizDrawPass::Config; + DFG_DebuggerPass(const Config& config) : DFG_GraphvizDrawPass(config) {} + + std::string repr() const override { return "dfg-to-fluid-debuger-pass"; } + + bool Finalize() override { return true; } +}; +} + +Pass* DataFlowGraphToFluidPass::CreateGraphvizDebugerPass() const { + return new DFG_DebuggerPass(DFG_GraphvizDrawPass::Config( + FLAGS_inference_analysis_graphviz_log_root, + "data_flow_graph_to_fluid_graphviz_debugger")); } } // namespace analysis diff --git a/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.h b/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.h index cbb05f622c..1726e056ed 100644 --- a/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.h +++ b/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.h @@ -40,10 +40,7 @@ class DataFlowGraphToFluidPass final : public DataFlowGraphPass { return "Transform a DFG to a Fluid ProgramDesc"; } - Pass *CreatePrinterPass(std::ostream &os, - const std::string &banner) const override { - return nullptr; - } + Pass *CreateGraphvizDebugerPass() const override; protected: // Add a Fluid Op into the ProgramDesc. @@ -53,6 +50,7 @@ class DataFlowGraphToFluidPass final : public DataFlowGraphPass { private: framework::proto::ProgramDesc *desc_; + Argument *argument_; }; } // namespace analysis } // namespace inference diff --git a/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.cc b/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.cc index afffb3feb0..a6f8548475 100644 --- a/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.cc +++ b/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.cc @@ -18,12 +18,19 @@ namespace paddle { namespace inference { namespace analysis { +int DFG_GraphvizDrawPass::counter_{0}; + void DFG_GraphvizDrawPass::Run(DataFlowGraph *graph) { auto content = Draw(graph); - std::ofstream file(GenDotPath()); + auto dot_path = GenDotPath(); + std::ofstream file(dot_path); file.write(content.c_str(), content.size()); file.close(); - LOG(INFO) << "draw dot to " << GenDotPath(); + + auto png_path = dot_path.substr(0, dot_path.size() - 4) + ".png"; + std::string message; + LOG(INFO) << "draw to " << png_path; + ExecShellCommand("dot -Tpng " + dot_path + " -o " + png_path, &message); } std::string DFG_GraphvizDrawPass::Draw(DataFlowGraph *graph) { @@ -41,9 +48,7 @@ std::string DFG_GraphvizDrawPass::Draw(DataFlowGraph *graph) { if (!config_.display_deleted_node && node.deleted()) continue; for (auto &in : node.inlinks) { if (!config_.display_deleted_node && in->deleted()) continue; - for (auto &in : node.inlinks) { - dot.AddEdge(in->repr(), node.repr(), {}); - } + dot.AddEdge(in->repr(), node.repr(), {}); } } return dot.Build(); diff --git a/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h b/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h index 93ebff59ae..b064782586 100644 --- a/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h +++ b/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h @@ -50,20 +50,25 @@ class DFG_GraphvizDrawPass : public DataFlowGraphPass { bool Initialize(Argument *argument) override { return true; } void Run(DataFlowGraph *graph) override; - bool Finalize() override { return Pass::Finalize(); } + bool Finalize() override { return true; } std::string repr() const override { return "DFG graphviz drawer"; } std::string description() const override { return "Debug a DFG by draw with graphviz"; } - private: + protected: + // A counter to add a number prefix to the debugger image output so that they + // will sort in the triggered order. + static int counter_; + // Path of the dot file to output. std::string GenDotPath() const { - return config_.dir + "/" + "graph_" + config_.id + ".dot"; + return config_.dir + "/" + std::to_string(counter_++) + "-graph_" + + config_.id + ".dot"; } - std::string Draw(DataFlowGraph *graph); + virtual std::string Draw(DataFlowGraph *graph); Config config_; }; diff --git a/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass_tester.cc b/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass_tester.cc index f4b5c5fd22..162455b9c4 100644 --- a/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass_tester.cc +++ b/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass_tester.cc @@ -31,7 +31,7 @@ TEST_F(DFG_Tester, dfg_graphviz_draw_pass_tester) { pass.Run(&dfg); // test content - std::ifstream file("./graph_test.dot"); + std::ifstream file("./0-graph_test.dot"); ASSERT_TRUE(file.is_open()); std::string line; @@ -40,7 +40,7 @@ TEST_F(DFG_Tester, dfg_graphviz_draw_pass_tester) { no++; } // DFG is sensitive to ProgramDesc, be careful to change the existing models. - ASSERT_EQ(no, 112); + ASSERT_EQ(no, 82); } } // namespace analysis diff --git a/paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.cc b/paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.cc index 5f62eef528..5d7eb43b7c 100644 --- a/paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.cc +++ b/paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.cc @@ -15,6 +15,8 @@ limitations under the License. */ #include #include +#include "analyzer.h" +#include "paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h" #include "paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.h" namespace paddle { @@ -33,7 +35,7 @@ bool FluidToDataFlowGraphPass::Initialize(Argument *argument) { return true; } -bool FluidToDataFlowGraphPass::Finalize() { return Pass::Finalize(); } +bool FluidToDataFlowGraphPass::Finalize() { return true; } void FluidToDataFlowGraphPass::Run(DataFlowGraph *graph) { PADDLE_ENFORCE(graph); @@ -46,6 +48,7 @@ void FluidToDataFlowGraphPass::Run(DataFlowGraph *graph) { auto *v = graph->nodes.Create(Node::Type::kValue); v->SetName(var.name()); v->SetPbDesc(const_cast(static_cast(&var))); + v->SetPbMsg(var.SerializeAsString()); var2id[var.name()] = v->id(); } for (int i = 0; i < main_block.ops_size(); i++) { @@ -56,6 +59,8 @@ void FluidToDataFlowGraphPass::Run(DataFlowGraph *graph) { // Link to the original protobuf message's memory, make it easier to // generate from a data flow graph to fluid ProgramDesc. o->SetPbDesc(const_cast(static_cast(&op))); + o->SetPbMsg(op.SerializeAsString()); + // set inputs and outputs // TODO(Superjomn) make sure the InputNames is the real variable name. for (int j = 0; j < op.inputs_size(); j++) { @@ -79,9 +84,19 @@ void FluidToDataFlowGraphPass::Run(DataFlowGraph *graph) { graph->Build(); } -Pass *FluidToDataFlowGraphPass::CreatePrinterPass( - std::ostream &os, const std::string &banner) const { - return nullptr; +namespace { +class DFG_DebuggerPass : public DFG_GraphvizDrawPass { + public: + using Config = DFG_GraphvizDrawPass::Config; + DFG_DebuggerPass(const Config &config) : DFG_GraphvizDrawPass(config) {} + std::string repr() const override { return "fluid-to-dfg-debuger-pass"; } + bool Finalize() override { return true; } +}; +} + +Pass *FluidToDataFlowGraphPass::CreateGraphvizDebugerPass() const { + return new DFG_DebuggerPass(DFG_GraphvizDrawPass::Config( + FLAGS_inference_analysis_graphviz_log_root, "fluid-to-dfg-debuger")); } } // namespace analysis diff --git a/paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.h b/paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.h index 176faf0220..da8463b63b 100644 --- a/paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.h +++ b/paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.h @@ -46,8 +46,7 @@ class FluidToDataFlowGraphPass final : public DataFlowGraphPass { return "transform a fluid ProgramDesc to a data flow graph."; } - Pass *CreatePrinterPass(std::ostream &os, - const std::string &banner) const override; + Pass *CreateGraphvizDebugerPass() const override; private: framework::proto::ProgramDesc const *desc_; diff --git a/paddle/fluid/inference/analysis/helper.cc b/paddle/fluid/inference/analysis/helper.cc new file mode 100644 index 0000000000..ca40c01fc5 --- /dev/null +++ b/paddle/fluid/inference/analysis/helper.cc @@ -0,0 +1,60 @@ +// Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "paddle/fluid/inference/analysis/helper.h" +#include "paddle/fluid/framework/framework.pb.h" + +namespace paddle { +namespace inference { +namespace analysis { + +template <> +void SetAttr(framework::proto::OpDesc *op, const std::string &name, + const std::string &data) { + auto *attr = op->add_attrs(); + attr->set_name(name); + attr->set_type(paddle::framework::proto::AttrType::STRING); + attr->set_s(data); +} +template <> +void SetAttr(framework::proto::OpDesc *op, const std::string &name, + const int &data) { + auto *attr = op->add_attrs(); + attr->set_name(name); + attr->set_type(paddle::framework::proto::AttrType::INT); + attr->set_i(data); +} +template <> +void SetAttr(framework::proto::OpDesc *op, const std::string &name, + const int64_t &data) { + auto *attr = op->add_attrs(); + attr->set_name(name); + attr->set_type(paddle::framework::proto::AttrType::LONG); + attr->set_l(data); +} +template <> +void SetAttr>(framework::proto::OpDesc *op, + const std::string &name, + const std::vector &data) { + auto *attr = op->add_attrs(); + attr->set_name(name); + attr->set_type(paddle::framework::proto::AttrType::STRINGS); + for (const auto &s : data) { + attr->add_strings(s.c_str()); + } +} + +} // namespace analysis +} // namespace inference +} // namespace paddle diff --git a/paddle/fluid/inference/analysis/helper.h b/paddle/fluid/inference/analysis/helper.h index f0039e1131..fff1621d3f 100644 --- a/paddle/fluid/inference/analysis/helper.h +++ b/paddle/fluid/inference/analysis/helper.h @@ -14,10 +14,12 @@ limitations under the License. */ #pragma once +#include #include #include #include +#include "paddle/fluid/framework/framework.pb.h" #include "paddle/fluid/framework/scope.h" #include "paddle/fluid/framework/variable.h" #include "paddle/fluid/platform/enforce.h" @@ -26,6 +28,10 @@ namespace paddle { namespace inference { namespace analysis { +template +void SetAttr(framework::proto::OpDesc *op, const std::string &name, + const T &data); + template int AccuDims(Vec &&vec, int size) { int res = 1; @@ -93,7 +99,7 @@ template class OrderedRegistry { public: T *Register(const std::string &name, T *x) { - PADDLE_ENFORCE(!dic_.count(name)); + PADDLE_ENFORCE(!dic_.count(name), "duplicate key [%s]", name); dic_[name] = data_.size(); data_.emplace_back(std::unique_ptr(x)); return data_.back().get(); @@ -117,6 +123,20 @@ T &GetFromScope(const framework::Scope &scope, const std::string &name) { return *var->GetMutable(); } +static void ExecShellCommand(const std::string &cmd, std::string *message) { + char buffer[128]; + std::shared_ptr pipe(popen(cmd.c_str(), "r"), pclose); + if (!pipe) { + LOG(ERROR) << "error running command: " << cmd; + return; + } + while (!feof(pipe.get())) { + if (fgets(buffer, 128, pipe.get()) != nullptr) { + *message += buffer; + } + } +} + } // namespace analysis } // namespace inference } // namespace paddle diff --git a/paddle/fluid/inference/analysis/node.cc b/paddle/fluid/inference/analysis/node.cc index 3339b5044d..d9d265d225 100644 --- a/paddle/fluid/inference/analysis/node.cc +++ b/paddle/fluid/inference/analysis/node.cc @@ -20,6 +20,17 @@ namespace paddle { namespace inference { namespace analysis { +template <> +std::string &NodeAttr::As() { + if (data_.empty()) { + type_hash_ = typeid(std::string).hash_code(); + } + PADDLE_ENFORCE_EQ(type_hash_, typeid(std::string).hash_code()); + return data_; +} + +std::string &NodeAttr::String() { return As(); } + std::vector Value::dot_attrs() const { return std::vector({Dot::Attr("style", "filled,rounded"), Dot::Attr("shape", "box"), diff --git a/paddle/fluid/inference/analysis/node.h b/paddle/fluid/inference/analysis/node.h index 8c2e6d88b9..8ecd1ae730 100644 --- a/paddle/fluid/inference/analysis/node.h +++ b/paddle/fluid/inference/analysis/node.h @@ -35,6 +35,44 @@ namespace analysis { class NodeMap; +// A helper class to maintain the status from Pass. +struct NodeAttr { + // NOTE T should be a primary type or a struct combined by several primary + // types. + // NOTE the STL containers should not use here. + // Some usages + // Attr attr; + // attr.Bool() = true; + + bool &Bool() { return As(); } + float &Float() { return As(); } + int32_t &Int32() { return As(); } + int64_t &Int64() { return As(); } + void *&Pointer() { return As(); } + std::string &String(); + + private: + template + T &As() { + // init storage in the first usage. + if (data_.empty()) { + VLOG(4) << "resize data to " << sizeof(T); + type_hash_ = typeid(T).hash_code(); + data_.resize(sizeof(T)); + } + PADDLE_ENFORCE(type_hash_ == typeid(T).hash_code(), + "type not matched, origin is %s, want %s", + DataTypeNamer::Global().repr(type_hash_), + DataTypeNamer::Global().repr()); + PADDLE_ENFORCE_EQ(data_.size(), sizeof(T), "Node attr type recast error"); + return *reinterpret_cast(&data_[0]); + } + + private: + std::string data_; + size_t type_hash_{std::numeric_limits::max()}; +}; + /* * Node Representation. * @@ -50,8 +88,6 @@ class Node { Node() = default; - struct Attr; - // Cast to a subclass type, Function for example. template Subclass &As() { @@ -71,7 +107,7 @@ class Node { // Get an additional attribute and convert it to T data type. NOTE this will // silently create a new attribute if not exists. - Attr &attr(const std::string &name) const { return attrs_[name]; } + NodeAttr &attr(const std::string &name) const { return attrs_[name]; } int id() const { return id_; } @@ -80,6 +116,9 @@ class Node { void SetPbDesc(void *pb) { attr("pb_desc").Pointer() = pb; } void *pb_desc() const { return attr("pb_desc").Pointer(); } + void SetPbMsg(const std::string &s) { attr("pb_msg").String() = s; } + const std::string &pb_msg() const { return attr("pb_msg").String(); } + void SetDeleted() { deleted_ = true; } bool deleted() const { return deleted_; } @@ -94,43 +133,6 @@ class Node { // Output links. std::vector outlinks; - // A helper class to maintain the status from Pass. - struct Attr { - // NOTE T should be a primary type or a struct combined by several primary - // types. - // NOTE the STL containers should not use here. - // Some usages - // Attr attr; - // attr.Bool() = true; - - bool &Bool() { return As(); } - float &Float() { return As(); } - int32_t &Int32() { return As(); } - int64_t &Int64() { return As(); } - void *&Pointer() { return As(); } - - private: - template - T &As() { - // init storage in the first usage. - if (data_.empty()) { - VLOG(4) << "resize data to " << sizeof(T); - type_hash_ = typeid(T).hash_code(); - data_.resize(sizeof(T)); - } - PADDLE_ENFORCE(type_hash_ == typeid(T).hash_code(), - "type not matched, origin is %s, want %s", - DataTypeNamer::Global().repr(type_hash_), - DataTypeNamer::Global().repr()); - PADDLE_ENFORCE_EQ(data_.size(), sizeof(T), "Node attr type recast error"); - return *reinterpret_cast(&data_[0]); - } - - private: - std::string data_; - size_t type_hash_{std::numeric_limits::max()}; - }; - // Type checks. bool IsFunction() const { return type_ == Node::Type::kFunction; } bool IsValue() const { return type_ == Node::Type::kValue; } @@ -150,7 +152,7 @@ class Node { Type type_{Type::kNone}; // Mark this node is deleted by some pass. bool deleted_{false}; - mutable std::unordered_map attrs_; + mutable std::unordered_map attrs_; }; class Function; @@ -213,6 +215,10 @@ class Function : public Node { struct FunctionBlock : public Node { std::string repr() const override { return "block-" + std::to_string(id()); } std::vector subgraph; + + protected: + FunctionBlock() { SetType(Node::Type::kFunctionBlock); } + friend class NodeMap; }; class NodeMap { @@ -227,7 +233,7 @@ class NodeMap { void Delete(size_t id); - const std::vector> &nodes() { return nodes_; } + const std::vector> &nodes() const { return nodes_; } size_t size() const { return nodes_.size(); } diff --git a/paddle/fluid/inference/analysis/node_attr_flags.h b/paddle/fluid/inference/analysis/node_attr_flags.h new file mode 100644 index 0000000000..a3f70e5419 --- /dev/null +++ b/paddle/fluid/inference/analysis/node_attr_flags.h @@ -0,0 +1,32 @@ +// Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* + * This file contains all the flags that declared in Node::Attr. + * + * The Node::Attr is designed to share information between different passes, one + * can get other's attributes in a Node by the flags in this file. + */ +#pragma once +namespace paddle { +namespace inference { +namespace analysis { + +#define DECLARE_NODE_ATTR(flag__) const char ATTR_##flag__[] = #flag__; + +DECLARE_NODE_ATTR(supported_by_tensorrt) // bool + +} // namespace analysis +} // namespace inference +} // namespace paddle diff --git a/paddle/fluid/inference/analysis/pass.h b/paddle/fluid/inference/analysis/pass.h index 65632b7491..25c566ebfa 100644 --- a/paddle/fluid/inference/analysis/pass.h +++ b/paddle/fluid/inference/analysis/pass.h @@ -60,6 +60,9 @@ class Pass { return nullptr; } + // Create a debugger Pass that draw the DFG by graphviz toolkit. + virtual Pass *CreateGraphvizDebugerPass() const { return nullptr; } + // Run on a single Node. virtual void Run(Node *x) { LOG(FATAL) << "not valid"; } // Run on a single Function. diff --git a/paddle/fluid/inference/analysis/pass_manager.cc b/paddle/fluid/inference/analysis/pass_manager.cc index b17c0e0d72..b428bb22b1 100644 --- a/paddle/fluid/inference/analysis/pass_manager.cc +++ b/paddle/fluid/inference/analysis/pass_manager.cc @@ -19,6 +19,18 @@ namespace paddle { namespace inference { namespace analysis { +bool PassManager::Initialize(Argument* argument) { + argument_ = argument; + for (auto& pass : data_) { + LOG(INFO) << "Initializing pass " << pass->repr(); + if (!pass->Initialize(argument)) { + LOG(ERROR) << "Failed to initialize pass [" << pass->repr() << "]"; + return false; + } + } + return true; +} + void DfgPassManager::RunAll() { PADDLE_ENFORCE(argument_); for (auto& pass : data_) { diff --git a/paddle/fluid/inference/analysis/pass_manager.h b/paddle/fluid/inference/analysis/pass_manager.h index 7841c4b9d0..81a17e0287 100644 --- a/paddle/fluid/inference/analysis/pass_manager.h +++ b/paddle/fluid/inference/analysis/pass_manager.h @@ -50,17 +50,7 @@ class PassManager : public OrderedRegistry { // globally shared, so pass them as the arguemnts for all the pass managers. virtual bool Initialize(const Argument& argument) { return false; } - virtual bool Initialize(Argument* argument) { - argument_ = argument; - for (auto& pass : data_) { - LOG(INFO) << "Initializing pass " << pass->repr(); - if (!pass->Initialize(argument)) { - LOG(ERROR) << "Failed to initialize pass [" << pass->repr() << "]"; - return false; - } - } - return true; - } + virtual bool Initialize(Argument* argument); // Call all the passes' Finalize methods. virtual bool Finalize() { diff --git a/paddle/fluid/inference/analysis/pass_manager_tester.cc b/paddle/fluid/inference/analysis/pass_manager_tester.cc index 7af6a19951..6caba8f042 100644 --- a/paddle/fluid/inference/analysis/pass_manager_tester.cc +++ b/paddle/fluid/inference/analysis/pass_manager_tester.cc @@ -64,6 +64,7 @@ TEST_F(DFG_Tester, DFG_pass_manager) { manager.Register("graphviz", new DFG_GraphvizDrawPass(config)); manager.Register("dfg-to-fluid", new DataFlowGraphToFluidPass); + ASSERT_TRUE(&argument); ASSERT_TRUE(manager.Initialize(&argument)); manager.RunAll(); } diff --git a/paddle/fluid/inference/analysis/subgraph_splitter.cc b/paddle/fluid/inference/analysis/subgraph_splitter.cc index 43ccac96c8..389f9e1a91 100644 --- a/paddle/fluid/inference/analysis/subgraph_splitter.cc +++ b/paddle/fluid/inference/analysis/subgraph_splitter.cc @@ -119,10 +119,12 @@ void SubGraphFuse::operator()() { ReplaceNodesWithSubGraphs(); } void SubGraphFuse::ReplaceNodesWithSubGraphs() { auto subgraphs = SubGraphSplitter(graph_, node_inside_subgraph_teller_)(); for (auto &subgraph : subgraphs) { + std::unordered_set subgraph_uniq(subgraph.begin(), subgraph.end()); // replace this sub-graph with the first node. Two steps: 1. Create a Block // Node that contains this subgraph 2. Mark the nodes inside the sub-graph // as deleted. 3. Replace the deleted node with the new Block Node. - auto *block_node = graph_->nodes.Create(Node::Type::kFunctionBlock); + auto *block_node = static_cast( + graph_->nodes.Create(Node::Type::kFunctionBlock)); auto io = ExtractInputAndOutputOfSubGraph(subgraph); block_node->inlinks = std::move(io.first); block_node->outlinks = std::move(io.second); @@ -130,21 +132,25 @@ void SubGraphFuse::ReplaceNodesWithSubGraphs() { // TODO(Superjomn) need a unified mechanism to treat deleted node in each // pass. node->SetDeleted(); + block_node->subgraph.push_back(node); } - std::unordered_map - delelte_node_map; // deleted node to BlockNode - for (auto *n : block_node->inlinks) { - n->inlinks.clear(); - } - for (auto *n : block_node->outlinks) { - n->outlinks.clear(); - } - for (auto *n : block_node->inlinks) { - n->outlinks.push_back(block_node); + // Change all the sub-graph's inputs and outputs corresponding inlink and + // outlink to this sub-graph node. + auto inlink_or_outlink_cleaner = [&](std::vector &nodes) { + for (auto *&n : nodes) { + if (subgraph_uniq.count(n)) { + n = block_node; + } + } + std::unordered_set uniq(nodes.begin(), nodes.end()); + nodes.assign(uniq.begin(), uniq.end()); + }; + for (auto *i : block_node->inlinks) { + inlink_or_outlink_cleaner(i->outlinks); } - for (auto *n : block_node->outlinks) { - n->inlinks.push_back(n); + for (auto *&o : block_node->outlinks) { + inlink_or_outlink_cleaner(o->inlinks); } } } diff --git a/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.cc b/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.cc new file mode 100644 index 0000000000..5ad092a9ed --- /dev/null +++ b/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.cc @@ -0,0 +1,78 @@ +// Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h" +#include "paddle/fluid/inference/analysis/analyzer.h" +#include "paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h" +#include "paddle/fluid/inference/analysis/node_attr_flags.h" + +namespace paddle { +namespace inference { +namespace analysis { + +void TensorRTSubgraphNodeMarkPass::Run(DataFlowGraph *graph) { + for (auto &node : graph->nodes.nodes()) { + node->attr(ATTR_supported_by_tensorrt).Bool() = teller_(node.get()); + } +} + +class DfgDebuggerPass : public DFG_GraphvizDrawPass { + public: + DfgDebuggerPass(const DFG_GraphvizDrawPass::Config &config) + : DFG_GraphvizDrawPass(config) {} + + std::string repr() const override { + return "tensorrt-subgraph-node-mark-debugger"; + } + + bool Finalize() override { return true; } + + protected: + std::string Draw(DataFlowGraph *graph) override { + Dot dot; + // Add nodes + for (size_t i = 0; i < graph->nodes.size(); i++) { + const Node &node = graph->nodes.Get(i); + if (config_.display_deleted_node || !node.deleted()) { + auto dot_attr = node.dot_attrs(); + if (node.attr(ATTR_supported_by_tensorrt).Bool()) { + dot_attr.assign( + {Dot::Attr{"color", "green"}, Dot::Attr{"style", "filled"}}); + } + dot.AddNode(node.repr(), dot_attr); + } + } + // Add edges + for (size_t i = 0; i < graph->nodes.size(); i++) { + const Node &node = graph->nodes.Get(i); + if (!config_.display_deleted_node && node.deleted()) continue; + for (auto &in : node.inlinks) { + if (!config_.display_deleted_node && in->deleted()) continue; + dot.AddEdge(in->repr(), node.repr(), {}); + } + } + return dot.Build(); + } +}; + +Pass *TensorRTSubgraphNodeMarkPass::CreateGraphvizDebugerPass() const { + DFG_GraphvizDrawPass::Config config( + FLAGS_inference_analysis_graphviz_log_root, "tensorrt_marked_node"); + return new DfgDebuggerPass(config); +} +bool TensorRTSubgraphNodeMarkPass::Finalize() { return true; } + +} // namespace analysis +} // namespace inference +} // namespace paddle diff --git a/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h b/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h new file mode 100644 index 0000000000..6cfac55d3b --- /dev/null +++ b/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h @@ -0,0 +1,53 @@ +// Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* + * This file defines TensorRTSubgraphNodeMarkPass which helps to mark the ops + * that supported by TensorRT engine. + */ +#include "paddle/fluid/inference/analysis/pass.h" +#include "paddle/fluid/inference/analysis/subgraph_splitter.h" + +namespace paddle { +namespace inference { +namespace analysis { + +/* + * Mark the operators that TensorRT engine supports. + */ +class TensorRTSubgraphNodeMarkPass : public DataFlowGraphPass { + public: + using teller_t = SubGraphSplitter::NodeInsideSubgraphTeller; + + TensorRTSubgraphNodeMarkPass(const teller_t& teller) : teller_(teller) {} + + bool Initialize(Argument* argument) override { return true; } + + // This class get a sub-graph as input and determine whether to transform this + // sub-graph into TensorRT. + void Run(DataFlowGraph* graph) override; + + std::string repr() const { return "tensorrt-sub-subgraph-mark"; } + std::string description() const { return "tensorrt sub-graph mark pass"; } + + Pass* CreateGraphvizDebugerPass() const override; + bool Finalize() override; + + private: + teller_t teller_; +}; + +} // namespace analysis +} // namespace inference +} // namespace paddle diff --git a/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass_tester.cc b/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass_tester.cc new file mode 100644 index 0000000000..a6c15e848b --- /dev/null +++ b/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass_tester.cc @@ -0,0 +1,50 @@ +// Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h" + +#include +#include "paddle/fluid/inference/analysis/node_attr_flags.h" +#include "paddle/fluid/inference/analysis/ut_helper.h" + +namespace paddle { +namespace inference { +namespace analysis { + +TEST_F(DFG_Tester, tensorrt_subgraph_node_mark_pass) { + // init + FluidToDataFlowGraphPass pass; + ASSERT_TRUE(pass.Initialize(&argument)); + argument.main_dfg.reset(new DataFlowGraph); + pass.Run(argument.main_dfg.get()); + + TensorRTSubgraphNodeMarkPass::teller_t teller = [](const Node* node) { + return node->IsFunction() && + static_cast(node)->func_type() == "mul"; + }; + TensorRTSubgraphNodeMarkPass pass1(teller); + ASSERT_TRUE(pass1.Initialize(&argument)); + pass1.Run(argument.main_dfg.get()); + + int counter{0}; + for (auto& node : argument.main_dfg->nodes.nodes()) { + counter += node->attr(ATTR_supported_by_tensorrt).Bool(); + } + + LOG(INFO) << counter << " nodes marked"; +} + +} // namespace analysis +} // namespace inference +} // namespace paddle diff --git a/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.cc b/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.cc index c7f40d43c9..9993de2280 100644 --- a/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.cc +++ b/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.cc @@ -24,7 +24,7 @@ TensorRTSubGraphPass::TensorRTSubGraphPass( : node_inside_subgraph_teller_(teller) {} void TensorRTSubGraphPass::Run(DataFlowGraph *graph) { - SubGraphFuse(graph, node_inside_subgraph_teller_); + SubGraphFuse(graph, node_inside_subgraph_teller_)(); } } // namespace analysis diff --git a/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.h b/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.h index 79e9e2bcc9..11e0880695 100644 --- a/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.h +++ b/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.h @@ -38,6 +38,11 @@ class TensorRTSubGraphPass : public DataFlowGraphPass { // sub-graph into TensorRT. void Run(DataFlowGraph* graph) override; + bool Finalize() override { return true; } + + std::string repr() const { return "tensorrt-sub-graph"; } + std::string description() const { return "tensorrt sub graph pass"; } + private: NodeInsideSubgraphTeller node_inside_subgraph_teller_; }; diff --git a/paddle/fluid/inference/analysis/tensorrt_subgraph_pass_tester.cc b/paddle/fluid/inference/analysis/tensorrt_subgraph_pass_tester.cc index d12dcf0d0f..1d749d3fa3 100644 --- a/paddle/fluid/inference/analysis/tensorrt_subgraph_pass_tester.cc +++ b/paddle/fluid/inference/analysis/tensorrt_subgraph_pass_tester.cc @@ -23,49 +23,48 @@ namespace paddle { namespace inference { namespace analysis { -DEFINE_string(model_dir, "", "inference test model dir"); +DEFINE_string(dot_dir, "./", ""); -TEST(TensorRTSubGraph, single_pass) { - auto desc = LoadProgramDesc(); - auto dfg = ProgramDescToDFG(desc); - - SubGraphSplitter::NodeInsideSubgraphTeller teller = [](const Node* node) { +TEST_F(DFG_Tester, tensorrt_single_pass) { + std::unordered_set teller_set( + {"elementwise_add", "mul", "sigmoid"}); + SubGraphSplitter::NodeInsideSubgraphTeller teller = [&](const Node* node) { if (node->type() != Node::Type::kFunction) return false; const auto* func = static_cast(node); - if (func->func_type() == "elementwise_add" || func->func_type() == "relu" || - func->func_type() == "conv2d" || func->func_type() == "mul" || - func->func_type() == "sigmoid" || func->func_type() == "softmax") { - LOG(INFO) << "sub-graph marked " << node->repr(); - return true; - } + if (teller_set.count(func->func_type())) return true; return false; }; - DFG_GraphvizDrawPass::Config config{"./", "test"}; - DFG_GraphvizDrawPass dfg_pass(config); - dfg_pass.Initialize(); - - DFG_GraphvizDrawPass dfg_pass1(config); - dfg_pass1.Initialize(); - - dfg_pass.Run(&dfg); + LOG(INFO) << "init"; + DFG_GraphvizDrawPass::Config config{FLAGS_dot_dir, "origin"}; + DFG_GraphvizDrawPass::Config config1{FLAGS_dot_dir, "fusion"}; + DFG_GraphvizDrawPass dfg_pass(config); + DFG_GraphvizDrawPass dfg_pass1(config1); + FluidToDataFlowGraphPass pass0; TensorRTSubGraphPass trt_pass(std::move(teller)); - trt_pass.Initialize(); - trt_pass.Run(&dfg); + LOG(INFO) << "Initialize"; + dfg_pass.Initialize(&argument); + dfg_pass1.Initialize(&argument); + pass0.Initialize(&argument); + trt_pass.Initialize(&argument); - dfg_pass1.Run(&dfg); + LOG(INFO) << "Run"; + argument.main_dfg.reset(new DataFlowGraph); + pass0.Run(argument.main_dfg.get()); + dfg_pass.Run(argument.main_dfg.get()); + trt_pass.Run(argument.main_dfg.get()); + dfg_pass1.Run(argument.main_dfg.get()); // Check the TRT op's block desc - for (auto node : dfg.nodes.nodes()) { + for (auto& node : argument.main_dfg->nodes.nodes()) { if (node->IsFunctionBlock()) { + LOG(INFO) << "get function block"; } } } -TEST(TensorRTSubGraph, pass_manager) {} - } // namespace analysis } // namespace inference } // namespace paddle diff --git a/paddle/fluid/operators/CMakeLists.txt b/paddle/fluid/operators/CMakeLists.txt index 4c338c67d3..9dc39ad0dd 100644 --- a/paddle/fluid/operators/CMakeLists.txt +++ b/paddle/fluid/operators/CMakeLists.txt @@ -226,7 +226,8 @@ op_library(sequence_softmax_op DEPS softmax) if (WITH_GPU AND TENSORRT_FOUND) op_library(tensorrt_engine_op DEPS tensorrt_engine) nv_test(test_tensorrt_engine_op SRCS tensorrt_engine_op_test.cc - DEPS tensorrt_engine_op tensorrt_engine tensorrt_converter) + DEPS tensorrt_engine_op tensorrt_engine tensorrt_converter + analysis) else() set(DEPS_OPS ${DEPS_OPS} tensorrt_engine_op) endif() diff --git a/paddle/fluid/operators/tensorrt_engine_op.h b/paddle/fluid/operators/tensorrt_engine_op.h index 295d6ba039..1602a913ae 100644 --- a/paddle/fluid/operators/tensorrt_engine_op.h +++ b/paddle/fluid/operators/tensorrt_engine_op.h @@ -53,6 +53,7 @@ template class TensorRTEngineKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { + VLOG(4) << "TensorRTEngineKernel executing"; auto engine_name = context.Attr("engine_uniq_key"); if (!Singleton::Global().HasEngine(engine_name)) { Prepare(context); diff --git a/paddle/fluid/operators/tensorrt_engine_op_test.cc b/paddle/fluid/operators/tensorrt_engine_op_test.cc index 358e2d151b..82a16361e4 100644 --- a/paddle/fluid/operators/tensorrt_engine_op_test.cc +++ b/paddle/fluid/operators/tensorrt_engine_op_test.cc @@ -19,6 +19,7 @@ limitations under the License. */ #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/framework/program_desc.h" #include "paddle/fluid/framework/scope.h" +#include "paddle/fluid/inference/analysis/helper.h" #include "paddle/fluid/inference/tensorrt/convert/op_converter.h" #include "paddle/fluid/inference/tensorrt/convert/ut_helper.h" @@ -51,48 +52,10 @@ void AddTensorToBlockDesc(framework::proto::BlockDesc* block, *var = *desc.Proto(); } -template -void SetAttr(framework::proto::OpDesc* op, const std::string& name, - const T& data); - -template <> -void SetAttr(framework::proto::OpDesc* op, const std::string& name, - const std::string& data) { - auto* attr = op->add_attrs(); - attr->set_name(name); - attr->set_type(paddle::framework::proto::AttrType::STRING); - attr->set_s(data); -} -template <> -void SetAttr(framework::proto::OpDesc* op, const std::string& name, - const int& data) { - auto* attr = op->add_attrs(); - attr->set_name(name); - attr->set_type(paddle::framework::proto::AttrType::INT); - attr->set_i(data); -} -template <> -void SetAttr(framework::proto::OpDesc* op, const std::string& name, - const int64_t& data) { - auto* attr = op->add_attrs(); - attr->set_name(name); - attr->set_type(paddle::framework::proto::AttrType::LONG); - attr->set_l(data); -} -template <> -void SetAttr>(framework::proto::OpDesc* op, - const std::string& name, - const std::vector& data) { - auto* attr = op->add_attrs(); - attr->set_name(name); - attr->set_type(paddle::framework::proto::AttrType::STRINGS); - for (const auto& s : data) { - attr->add_strings(s.c_str()); - } -} - } // namespace +using inference::analysis::SetAttr; + TEST(TensorRTEngineOp, manual) { framework::ProgramDesc program; auto* block_ = program.Proto()->add_blocks(); From c7d3273d635a867be34326b4f2f09b0d786ece54 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Thu, 28 Jun 2018 09:23:53 +0800 Subject: [PATCH 046/130] add dist word2vec dist train --- .../tests/unittests/test_dist_word2vec.py | 203 ++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 python/paddle/fluid/tests/unittests/test_dist_word2vec.py diff --git a/python/paddle/fluid/tests/unittests/test_dist_word2vec.py b/python/paddle/fluid/tests/unittests/test_dist_word2vec.py new file mode 100644 index 0000000000..712fd5849d --- /dev/null +++ b/python/paddle/fluid/tests/unittests/test_dist_word2vec.py @@ -0,0 +1,203 @@ +# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import numpy as np +import argparse +import time +import math +import paddle +import paddle.fluid as fluid +import paddle.fluid.profiler as profiler +from paddle.fluid import core +import unittest +from multiprocessing import Process +import os +import signal + +IS_SPARSE = True +EMBED_SIZE = 32 +HIDDEN_SIZE = 256 +N = 5 +BATCH_SIZE = 32 +ExecutionStrategy = core.ParallelExecutor.ExecutionStrategy + + +def get_model(): + def __network__(words): + embed_first = fluid.layers.embedding( + input=words[0], + size=[dict_size, EMBED_SIZE], + dtype='float32', + is_sparse=IS_SPARSE, + param_attr='shared_w') + embed_second = fluid.layers.embedding( + input=words[1], + size=[dict_size, EMBED_SIZE], + dtype='float32', + is_sparse=IS_SPARSE, + param_attr='shared_w') + embed_third = fluid.layers.embedding( + input=words[2], + size=[dict_size, EMBED_SIZE], + dtype='float32', + is_sparse=IS_SPARSE, + param_attr='shared_w') + embed_forth = fluid.layers.embedding( + input=words[3], + size=[dict_size, EMBED_SIZE], + dtype='float32', + is_sparse=IS_SPARSE, + param_attr='shared_w') + + concat_embed = fluid.layers.concat( + input=[embed_first, embed_second, embed_third, embed_forth], axis=1) + hidden1 = fluid.layers.fc(input=concat_embed, + size=HIDDEN_SIZE, + act='sigmoid') + predict_word = fluid.layers.fc(input=hidden1, + size=dict_size, + act='softmax') + cost = fluid.layers.cross_entropy(input=predict_word, label=words[4]) + avg_cost = fluid.layers.mean(cost) + return avg_cost, predict_word + + word_dict = paddle.dataset.imikolov.build_dict() + dict_size = len(word_dict) + + first_word = fluid.layers.data(name='firstw', shape=[1], dtype='int64') + second_word = fluid.layers.data(name='secondw', shape=[1], dtype='int64') + third_word = fluid.layers.data(name='thirdw', shape=[1], dtype='int64') + forth_word = fluid.layers.data(name='forthw', shape=[1], dtype='int64') + next_word = fluid.layers.data(name='nextw', shape=[1], dtype='int64') + avg_cost, predict_word = __network__( + [first_word, second_word, third_word, forth_word, next_word]) + + inference_program = paddle.fluid.default_main_program().clone() + + sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001) + sgd_optimizer.minimize(avg_cost) + + train_reader = paddle.batch( + paddle.dataset.imikolov.train(word_dict, N), BATCH_SIZE) + test_reader = paddle.batch( + paddle.dataset.imikolov.test(word_dict, N), BATCH_SIZE) + + return inference_program, avg_cost, train_reader, test_reader, predict_word + + +def get_transpiler(trainer_id, main_program, pserver_endpoints, trainers): + t = fluid.DistributeTranspiler() + t.transpile( + trainer_id=trainer_id, + program=main_program, + pservers=pserver_endpoints, + trainers=trainers) + return t + + +def run_pserver(pserver_endpoints, trainers, current_endpoint): + get_model() + t = get_transpiler(0, + fluid.default_main_program(), pserver_endpoints, + trainers) + pserver_prog = t.get_pserver_program(current_endpoint) + startup_prog = t.get_startup_program(current_endpoint, pserver_prog) + + place = fluid.CPUPlace() + exe = fluid.Executor(place) + exe.run(startup_prog) + + exe.run(pserver_prog) + + +class TestDistMnist(unittest.TestCase): + def setUp(self): + self._trainers = 1 + self._pservers = 1 + self._ps_endpoints = "127.0.0.1:9123" + + def start_pserver(self, endpoint): + p = Process( + target=run_pserver, + args=(self._ps_endpoints, self._trainers, endpoint)) + p.start() + return p.pid + + def _wait_ps_ready(self, pid): + retry_times = 5 + while True: + assert retry_times >= 0, "wait ps ready failed" + time.sleep(1) + try: + # the listen_and_serv_op would touch a file which contains the listen port + # on the /tmp directory until it was ready to process all the RPC call. + os.stat("/tmp/paddle.%d.port" % pid) + return + except os.error: + retry_times -= 1 + + def stop_pserver(self, pid): + os.kill(pid, signal.SIGKILL) + + def test_with_place(self): + p = fluid.CUDAPlace(0) if core.is_compiled_with_cuda( + ) else fluid.CPUPlace() + + pserver_pid = self.start_pserver(self._ps_endpoints) + self._wait_ps_ready(pserver_pid) + + self.run_trainer(p, 0) + + self.stop_pserver(pserver_pid) + + def run_trainer(self, place, trainer_id): + test_program, avg_cost, train_reader, test_reader, predict = get_model() + t = get_transpiler(trainer_id, + fluid.default_main_program(), self._ps_endpoints, + self._trainers) + + trainer_prog = t.get_trainer_program() + + exe = fluid.Executor(place) + exe.run(fluid.default_startup_program()) + + use_gpu = True if core.is_compiled_with_cuda() else False + + exec_strategy = ExecutionStrategy() + exec_strategy.use_cuda = use_gpu + train_exe = fluid.ParallelExecutor( + use_cuda=use_gpu, + main_program=trainer_prog, + loss_name=avg_cost.name, + exec_strategy=exec_strategy) + + feed_var_list = [ + var for var in trainer_prog.global_block().vars.itervalues() + if var.is_data + ] + + feeder = fluid.DataFeeder(feed_var_list, place) + for pass_id in xrange(10): + for batch_id, data in enumerate(train_reader()): + avg_loss_np = train_exe.run(feed=feeder.feed(data), + fetch_list=[avg_cost.name]) + loss = np.array(avg_loss_np).mean() + if float(loss) < 5.0: + return + if math.isnan(loss): + assert ("Got Nan loss, training failed") + + +if __name__ == "__main__": + unittest.main() From 2a51e8e231f2ed73a546e7190457ca3a39de6ce8 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Thu, 28 Jun 2018 09:41:28 +0800 Subject: [PATCH 047/130] add timeout for dist word2vec unit test --- python/paddle/fluid/tests/unittests/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/python/paddle/fluid/tests/unittests/CMakeLists.txt b/python/paddle/fluid/tests/unittests/CMakeLists.txt index 5f27864c14..f6c8dcabcb 100644 --- a/python/paddle/fluid/tests/unittests/CMakeLists.txt +++ b/python/paddle/fluid/tests/unittests/CMakeLists.txt @@ -52,3 +52,4 @@ py_test_modules(test_parallel_executor_crf MODULES test_parallel_executor_crf SE py_test_modules(test_parallel_executor_fetch_feed MODULES test_parallel_executor_fetch_feed SERIAL) set_tests_properties(test_listen_and_serv_op PROPERTIES TIMEOUT 20) set_tests_properties(test_dist_mnist PROPERTIES TIMEOUT 180) +set_tests_properties(test_dist_word2vec PROPERTIES TIMEOUT 180) From 921182484103b1b5e6256cb59e77cac8ed1c0272 Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Thu, 28 Jun 2018 10:17:33 +0800 Subject: [PATCH 048/130] fix tensorrt compiler bug --- paddle/contrib/inference/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/paddle/contrib/inference/CMakeLists.txt b/paddle/contrib/inference/CMakeLists.txt index 153216abb4..ef768d989a 100644 --- a/paddle/contrib/inference/CMakeLists.txt +++ b/paddle/contrib/inference/CMakeLists.txt @@ -18,7 +18,10 @@ if(APPLE) endif(APPLE) -set(inference_deps paddle_inference_api paddle_fluid_api paddle_inference_tensorrt_subgraph_engine) +set(inference_deps paddle_inference_api paddle_fluid_api) +if(WITH_GPU AND TENSORRT_FOUND) + set(inference_deps ${inference_deps} paddle_inference_tensorrt_subgraph_engine) +endif() function(inference_api_test TARGET_NAME) if (WITH_TESTING) From c15c6c15929706b9796aaa0a41df09b9b752cc11 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Thu, 28 Jun 2018 12:33:30 +0800 Subject: [PATCH 049/130] move get_test_program to non-layer io.py --- python/paddle/fluid/io.py | 100 ++++++++++++++++++++++++++++++- python/paddle/fluid/layers/io.py | 88 --------------------------- 2 files changed, 99 insertions(+), 89 deletions(-) diff --git a/python/paddle/fluid/io.py b/python/paddle/fluid/io.py index 6323c9899e..954eb0ea62 100644 --- a/python/paddle/fluid/io.py +++ b/python/paddle/fluid/io.py @@ -17,7 +17,7 @@ import time import shutil from paddle.fluid.evaluator import Evaluator -from paddle.fluid.framework import Program, Parameter, default_main_program, Variable +from paddle.fluid.framework import Program, Parameter, default_main_program, default_startup_program, Variable from . import core __all__ = [ @@ -744,3 +744,101 @@ def get_latest_checkpoint_serial(checkpoint_dir): if success_num > current_dir: current_dir = success_num return current_dir + + +def get_test_program(filelist, program=None, startup_program=None): + """ + Transpile current train program to a program to read test dataset + if the program is using reader ops like "open_files_op". + """ + + def _copy_reader_var_(block, var, new_name=None): + if new_name == None: + new_name = var.name + new_var = block.create_var( + name=str(new_name), type=core.VarDesc.VarType.READER) + new_var.desc.set_shapes(var.desc.shapes()) + new_var.desc.set_dtypes(var.desc.dtypes()) + new_var.persistable = True + return new_var + + def get_test_reader_name(train_reader_name): + return train_reader_name + "_test" + + def is_reader_op(op): + block = op.block + if "Out" in op.output_names: + reader_out = block.vars[op.output("Out")[0]] + if reader_out.type == core.VarDesc.VarType.READER: + return True + return False + + if program == None: + program = default_main_program() + if startup_program == None: + startup_program = default_startup_program() + startup_block = startup_program.global_block() + + # 1. find out the orignal reader var name + startup_reader_op_list = [] + + for op in startup_block.ops: + if is_reader_op(op): + startup_reader_op_list.append(op) + + if len(startup_reader_op_list) == 0: + return program + + root_reader_op = startup_reader_op_list[0] + train_test_reader_map = {} + # 2. add operators to startup to read open and read test data files + for op in startup_reader_op_list: + assert (len(op.output("Out")) == 1) + train_reader_name = op.output("Out")[0] + train_reader = startup_block.vars[train_reader_name] + test_reader = _copy_reader_var_( + startup_block, + train_reader, + new_name=get_test_reader_name(train_reader_name)) + train_test_reader_map[train_reader.name] = test_reader + + test_op_inputs = {} + for name in op.input_names: + train_arg_names = op.input(name) + test_arg_vars = [] + for arg_name in train_arg_names: + arg_var = train_test_reader_map[ + arg_name] if name == "UnderlyingReader" else startup_block.vars[ + arg_name] + test_arg_vars.append(arg_var) + test_op_inputs[name] = test_arg_vars + + test_op = startup_block.append_op( + type=op.type, + inputs=test_op_inputs, + outputs={'Out': [test_reader]}, + attrs=op.attrs) + # root reader op's filelist attr for read test files + if op.type == root_reader_op.type: + test_op.set_attr("file_names", filelist) + if op.type == "create_multi_pass_reader": + test_op.set_attr("pass_num", 1) + + # 3. rename reader vars in inference program to different name + # to avoid read from train data. + main_block = program.global_block() + for var in main_block.vars.values(): + if var.type == core.VarDesc.VarType.READER: + main_block.rename_var( + str(var.name), str(get_test_reader_name(var.name))) + + for op in main_block.ops: + if op.type == root_reader_op.type: + test_op.set_attr("file_names", filelist) + if op.type == "create_multi_pass_reader": + test_op.set_attr("pass_num", 1) + + startup_program.sync_with_cpp() + program.sync_with_cpp() + + return program diff --git a/python/paddle/fluid/layers/io.py b/python/paddle/fluid/layers/io.py index 15aa12d5d7..49ccfa9292 100644 --- a/python/paddle/fluid/layers/io.py +++ b/python/paddle/fluid/layers/io.py @@ -692,91 +692,3 @@ def load(out, file_path, load_as_fp16=None): if load_as_fp16 is not None: attrs['load_as_fp16'] = load_as_fp16 helper.append_op(type="load", inputs={}, output={"Out": out}, args=attrs) - - -def get_test_program(filelist, program=None, startup_program=None): - """ - Transpile current train program to a program to read test dataset - if the program is using reader ops like "open_files_op". - """ - - def get_test_reader_name(train_reader_name): - return train_reader_name + "_test" - - def is_reader_op(op): - block = op.block - if "Out" in op.output_names: - reader_out = block.vars[op.output("Out")[0]] - if reader_out.type == core.VarDesc.VarType.READER: - return True - return False - - if program == None: - program = default_main_program() - if startup_program == None: - startup_program = default_startup_program() - startup_block = startup_program.global_block() - - # 1. find out the orignal reader var name - startup_reader_op_list = [] - - for op in startup_block.ops: - if is_reader_op(op): - startup_reader_op_list.append(op) - - if len(startup_reader_op_list) == 0: - return program - - root_reader_op = startup_reader_op_list[0] - train_test_reader_map = {} - # 2. add operators to startup to read open and read test data files - for op in startup_reader_op_list: - assert (len(op.output("Out")) == 1) - train_reader_name = op.output("Out")[0] - train_reader = startup_block.vars[train_reader_name] - test_reader = _copy_reader_var_( - startup_block, - train_reader, - new_name=get_test_reader_name(train_reader_name)) - train_test_reader_map[train_reader.name] = test_reader - - test_op_inputs = {} - for name in op.input_names: - train_arg_names = op.input(name) - test_arg_vars = [] - for arg_name in train_arg_names: - arg_var = train_test_reader_map[ - arg_name] if name == "UnderlyingReader" else startup_block.vars[ - arg_name] - test_arg_vars.append(arg_var) - test_op_inputs[name] = test_arg_vars - - test_op = startup_block.append_op( - type=op.type, - inputs=test_op_inputs, - outputs={'Out': [test_reader]}, - attrs=op.attrs) - # root reader op's filelist attr for read test files - if op.type == root_reader_op.type: - test_op.set_attr("file_names", filelist) - if op.type == "create_multi_pass_reader": - test_op.set_attr("pass_num", 1) - - # 3. rename reader vars in inference program to different name - # to avoid read from train data. - main_block = program.global_block() - for var in main_block.vars.values(): - if var.type == core.VarDesc.VarType.READER: - main_block.rename_var( - str(var.name), str(get_test_reader_name(var.name))) - - for op in main_block.ops: - if op.type == root_reader_op.type: - test_op.set_attr("file_names", filelist) - if op.type == "create_multi_pass_reader": - test_op.set_attr("pass_num", 1) - - startup_program.sync_with_cpp() - program.sync_with_cpp() - - return program From 2ecc56226d4d4b9151fdcfce9ffe5af6aa58eb5b Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Thu, 28 Jun 2018 12:40:51 +0800 Subject: [PATCH 050/130] small AverageOptimizer enhance. (#11761) * small AverageOptimizer enhance. * clean * clean --- .../fluid/operators/average_accumulates_op.cc | 22 +++++++++---------- .../fluid/operators/average_accumulates_op.h | 5 +++-- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/paddle/fluid/operators/average_accumulates_op.cc b/paddle/fluid/operators/average_accumulates_op.cc index 25864e95d7..f389eab605 100644 --- a/paddle/fluid/operators/average_accumulates_op.cc +++ b/paddle/fluid/operators/average_accumulates_op.cc @@ -19,28 +19,28 @@ namespace operators { template <> void GetAccumulators( - const framework::ExecutionContext& ctx, int64_t* num_updates_, - int64_t* num_accumulates_, int64_t* old_num_accumulates_) { + const framework::ExecutionContext& ctx, int64_t* num_updates, + int64_t* num_accumulates, int64_t* old_num_accumulates) { auto* in_old_num_accumulates = ctx.Input("in_old_num_accumulates"); auto* in_num_accumulates = ctx.Input("in_num_accumulates"); auto* in_num_updates = ctx.Input("in_num_updates"); - *old_num_accumulates_ = in_old_num_accumulates->data()[0]; - *num_accumulates_ = in_num_accumulates->data()[0]; - *num_updates_ = in_num_updates->data()[0]; + *old_num_accumulates = in_old_num_accumulates->data()[0]; + *num_accumulates = in_num_accumulates->data()[0]; + *num_updates = in_num_updates->data()[0]; } template <> void SetAccumulators( - const framework::ExecutionContext& ctx, int64_t num_updates_, - int64_t num_accumulates_, int64_t old_num_accumulates_) { + const framework::ExecutionContext& ctx, int64_t num_updates, + int64_t num_accumulates, int64_t old_num_accumulates) { auto* out_old_num_accumulates = ctx.Output("out_old_num_accumulates"); auto* out_num_accumulates = ctx.Output("out_num_accumulates"); auto* out_num_updates = ctx.Output("out_num_updates"); - out_old_num_accumulates->data()[0] = old_num_accumulates_; - out_num_accumulates->data()[0] = num_accumulates_; - out_num_updates->data()[0] = num_updates_; + out_old_num_accumulates->data()[0] = old_num_accumulates; + out_num_accumulates->data()[0] = num_accumulates; + out_num_updates->data()[0] = num_updates; } class AverageAccumulatesOp : public framework::OperatorWithKernel { @@ -177,7 +177,7 @@ class AverageAccumulatesOpMaker : public framework::OpProtoAndCheckerMaker { AddComment(R"DOC( AverageAccumulates Operator. -Accumulate the sum of parameter whtin sliding window. The size of sliding window is +Accumulate the sum of parameter within sliding window. The size of sliding window is determined by 'average_window', 'max_average_window' and 'min_average_window'. Memory was shared by Input(in_sum_1) and Output(out_sum_1) which acts as an accumulator 'sum_1'. 'sum_2', 'sum_3', 'num_accumulates', 'old_num_accumulates' and 'num_updates' were the same as 'sum_1'. diff --git a/paddle/fluid/operators/average_accumulates_op.h b/paddle/fluid/operators/average_accumulates_op.h index 07ac5ced11..3958d3f685 100644 --- a/paddle/fluid/operators/average_accumulates_op.h +++ b/paddle/fluid/operators/average_accumulates_op.h @@ -54,8 +54,9 @@ class AverageAccumulatesKernel : public framework::OpKernel { float average_window = ctx.Attr("average_window"); int64_t max_average_window = ctx.Attr("max_average_window"); int64_t min_average_window = ctx.Attr("min_average_window"); - min_average_window = - std::min(min_average_window, max_average_window); + PADDLE_ENFORCE_LE(min_average_window, max_average_window, + "min_average_window shouldn't be larger than " + "max_average_window"); // Get inputs auto* param = ctx.Input("param"); From e265e61193560b37673b4dedddca0391d17645b9 Mon Sep 17 00:00:00 2001 From: minqiyang Date: Thu, 28 Jun 2018 13:10:12 +0800 Subject: [PATCH 051/130] Add WITH_ANAKIN option log in paddle_build.sh --- paddle/scripts/paddle_build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/paddle/scripts/paddle_build.sh b/paddle/scripts/paddle_build.sh index 037688bde9..017ac9d3ec 100755 --- a/paddle/scripts/paddle_build.sh +++ b/paddle/scripts/paddle_build.sh @@ -106,6 +106,7 @@ function cmake_gen() { -DWITH_FLUID_ONLY=${WITH_FLUID_ONLY:-OFF} -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWITH_CONTRIB=${WITH_CONTRIB:-ON} + -DWITH_ANAKIN=${WITH_ANAKIN:-ON} ======================================== EOF # Disable UNITTEST_USE_VIRTUALENV in docker because From f1224945ba4585e71beb33a30fcd7c88d912f796 Mon Sep 17 00:00:00 2001 From: superjomn Date: Thu, 28 Jun 2018 13:27:30 +0800 Subject: [PATCH 052/130] fix analysis compile bug --- paddle/fluid/inference/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/paddle/fluid/inference/CMakeLists.txt b/paddle/fluid/inference/CMakeLists.txt index ec16a1c600..7071eea19c 100644 --- a/paddle/fluid/inference/CMakeLists.txt +++ b/paddle/fluid/inference/CMakeLists.txt @@ -28,9 +28,10 @@ endif() if(WITH_TESTING) # both tests/book and analysis depends the models that generated by python/paddle/fluid/tests/book add_subdirectory(tests/book) - add_subdirectory(analysis) endif() +add_subdirectory(analysis) + if (TENSORRT_FOUND) add_subdirectory(tensorrt) endif() From ba99bc238409b3be2e1d42f0d8baaf42b544d774 Mon Sep 17 00:00:00 2001 From: superjomn Date: Thu, 28 Jun 2018 14:02:13 +0800 Subject: [PATCH 053/130] update --- .../fluid/inference/analysis/CMakeLists.txt | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/paddle/fluid/inference/analysis/CMakeLists.txt b/paddle/fluid/inference/analysis/CMakeLists.txt index 33b0e3b127..cdd67fdc92 100644 --- a/paddle/fluid/inference/analysis/CMakeLists.txt +++ b/paddle/fluid/inference/analysis/CMakeLists.txt @@ -13,16 +13,18 @@ cc_test(test_dot SRCS dot_tester.cc DEPS analysis) set(PYTHON_TESTS_DIR ${PADDLE_BINARY_DIR}/python/paddle/fluid/tests) function (inference_analysis_test TARGET) - set(options "") - set(oneValueArgs "") - set(multiValueArgs SRCS) - cmake_parse_arguments(analysis_test "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + if(WITH_TESTING) + set(options "") + set(oneValueArgs "") + set(multiValueArgs SRCS) + cmake_parse_arguments(analysis_test "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - cc_test(${TARGET} - SRCS "${analysis_test_SRCS}" - DEPS analysis - ARGS --inference_model_dir=${PYTHON_TESTS_DIR}/book/word2vec.inference.model --fraction_of_gpu_memory_to_use=0.5) - set_tests_properties(${TARGET} PROPERTIES DEPENDS test_word2vec) + cc_test(${TARGET} + SRCS "${analysis_test_SRCS}" + DEPS analysis + ARGS --inference_model_dir=${PYTHON_TESTS_DIR}/book/word2vec.inference.model --fraction_of_gpu_memory_to_use=0.5) + set_tests_properties(${TARGET} PROPERTIES DEPENDS test_word2vec) + endif(WITH_TESTING) endfunction(inference_analysis_test) inference_analysis_test(test_data_flow_graph SRCS data_flow_graph_tester.cc) From 53f217115d9b470b7b4cdc704c1aef5d4a4045da Mon Sep 17 00:00:00 2001 From: typhoonzero Date: Thu, 28 Jun 2018 14:44:43 +0800 Subject: [PATCH 054/130] move find_fluid_modules --- cmake/generic.cmake | 14 ++++++++++++++ cmake/inference_lib.cmake | 13 ------------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/cmake/generic.cmake b/cmake/generic.cmake index 9c42044ec1..c4deef6f57 100644 --- a/cmake/generic.cmake +++ b/cmake/generic.cmake @@ -96,6 +96,20 @@ if(NOT APPLE AND NOT ANDROID) set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -pthread -ldl -lrt") endif(NOT APPLE AND NOT ANDROID) +set_property(GLOBAL PROPERTY FLUID_MODULES "") +# find all fluid modules is used for paddle fluid static library +# for building inference libs +function(find_fluid_modules TARGET_NAME) + get_filename_component(__target_path ${TARGET_NAME} ABSOLUTE) + string(REGEX REPLACE "^${PADDLE_SOURCE_DIR}/" "" __target_path ${__target_path}) + string(FIND "${__target_path}" "fluid" pos) + if(pos GREATER 1) + get_property(fluid_modules GLOBAL PROPERTY FLUID_MODULES) + set(fluid_modules ${fluid_modules} ${TARGET_NAME}) + set_property(GLOBAL PROPERTY FLUID_MODULES "${fluid_modules}") + endif() +endfunction(find_fluid_modules) + function(merge_static_libs TARGET_NAME) set(libs ${ARGN}) list(REMOVE_DUPLICATES libs) diff --git a/cmake/inference_lib.cmake b/cmake/inference_lib.cmake index 850098297e..a4a128ac5d 100644 --- a/cmake/inference_lib.cmake +++ b/cmake/inference_lib.cmake @@ -12,19 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -set_property(GLOBAL PROPERTY FLUID_MODULES "") -# find all fluid modules is used for paddle fluid static library -function(find_fluid_modules TARGET_NAME) - get_filename_component(__target_path ${TARGET_NAME} ABSOLUTE) - string(REGEX REPLACE "^${PADDLE_SOURCE_DIR}/" "" __target_path ${__target_path}) - string(FIND "${__target_path}" "fluid" pos) - if(pos GREATER 1) - get_property(fluid_modules GLOBAL PROPERTY FLUID_MODULES) - set(fluid_modules ${fluid_modules} ${TARGET_NAME}) - set_property(GLOBAL PROPERTY FLUID_MODULES "${fluid_modules}") - endif() -endfunction(find_fluid_modules) - # make package for paddle fluid shared and static library function(copy TARGET) set(options "") From 3b128337a147264c37d48486637a1f0b865b8ad7 Mon Sep 17 00:00:00 2001 From: mozga-intel Date: Fri, 22 Jun 2018 12:20:58 +0200 Subject: [PATCH 055/130] The mkldnn batch norm supports other data format --- .../fluid/operators/batch_norm_mkldnn_op.cc | 40 ++++++++++++++----- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/paddle/fluid/operators/batch_norm_mkldnn_op.cc b/paddle/fluid/operators/batch_norm_mkldnn_op.cc index 6ecb43c49c..199a3d4b04 100644 --- a/paddle/fluid/operators/batch_norm_mkldnn_op.cc +++ b/paddle/fluid/operators/batch_norm_mkldnn_op.cc @@ -115,9 +115,16 @@ class BatchNormMKLDNNOpKernel : public paddle::framework::OpKernel { if (fuse_with_relu) flags |= mkldnn::fuse_bn_relu; // create mkldnn memory from input x tensor - auto src_memory = - memory({{{src_tz}, memory::data_type::f32, x->format()}, mkldnn_engine}, - to_void_cast(x_data)); + mkldnn::memory::format input_format = x->format(); + if (src_tz.size() == 1) { + input_format = mkldnn::memory::format::x; + } else if (src_tz.size() == 2) { + input_format = mkldnn::memory::format::nc; + } + + auto src_memory = memory( + {{{src_tz}, memory::data_type::f32, input_format}, mkldnn_engine}, + to_void_cast(x_data)); // create primitive descriptor for batch norm forward using bn_fwd_types = bn_type_traits; @@ -251,15 +258,28 @@ class BatchNormMKLDNNGradOpKernel : public paddle::framework::OpKernel { using bn_bwd_types = bn_type_traits; // create mkldnn memory from input diff_y tensor - auto user_diff_dst_memory = - memory({{{diff_dst_tz}, memory::data_type::f32, diff_y->format()}, - mkldnn_engine}, - to_void_cast(diff_y_data)); + + mkldnn::memory::format dst_format = x->format(); + if (diff_dst_tz.size() == 1) { + dst_format = mkldnn::memory::format::x; + } else if (diff_dst_tz.size() == 2) { + dst_format = mkldnn::memory::format::nc; + } + auto user_diff_dst_memory = memory( + {{{diff_dst_tz}, memory::data_type::f32, dst_format}, mkldnn_engine}, + to_void_cast(diff_y_data)); // create mkldnn memory from input x tensor - auto src_memory = - memory({{{src_tz}, memory::data_type::f32, x->format()}, mkldnn_engine}, - to_void_cast(x_data)); + mkldnn::memory::format input_format = x->format(); + if (src_tz.size() == 1) { + input_format = mkldnn::memory::format::x; + } else if (src_tz.size() == 2) { + input_format = mkldnn::memory::format::nc; + } + + auto src_memory = memory( + {{{src_tz}, memory::data_type::f32, input_format}, mkldnn_engine}, + to_void_cast(x_data)); // for diff_dst, try to use same format as dst in forward pass auto diff_dst_pd = batch_norm_fwd_pd.get()->dst_primitive_desc(); From b8a04c2fa10ba1ecc447379306c5ab1481078346 Mon Sep 17 00:00:00 2001 From: mozga-intel Date: Tue, 26 Jun 2018 10:16:59 +0200 Subject: [PATCH 056/130] Duplicated code was moved to common function --- .../fluid/operators/batch_norm_mkldnn_op.cc | 25 ++++++------------- paddle/fluid/platform/mkldnn_helper.h | 12 ++++++++- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/paddle/fluid/operators/batch_norm_mkldnn_op.cc b/paddle/fluid/operators/batch_norm_mkldnn_op.cc index 199a3d4b04..9ab2179b5f 100644 --- a/paddle/fluid/operators/batch_norm_mkldnn_op.cc +++ b/paddle/fluid/operators/batch_norm_mkldnn_op.cc @@ -115,12 +115,8 @@ class BatchNormMKLDNNOpKernel : public paddle::framework::OpKernel { if (fuse_with_relu) flags |= mkldnn::fuse_bn_relu; // create mkldnn memory from input x tensor - mkldnn::memory::format input_format = x->format(); - if (src_tz.size() == 1) { - input_format = mkldnn::memory::format::x; - } else if (src_tz.size() == 2) { - input_format = mkldnn::memory::format::nc; - } + mkldnn::memory::format input_format = + platform::MKLDNNFormatForSize(src_tz.size(), x->format()); auto src_memory = memory( {{{src_tz}, memory::data_type::f32, input_format}, mkldnn_engine}, @@ -259,23 +255,16 @@ class BatchNormMKLDNNGradOpKernel : public paddle::framework::OpKernel { // create mkldnn memory from input diff_y tensor - mkldnn::memory::format dst_format = x->format(); - if (diff_dst_tz.size() == 1) { - dst_format = mkldnn::memory::format::x; - } else if (diff_dst_tz.size() == 2) { - dst_format = mkldnn::memory::format::nc; - } + mkldnn::memory::format dst_format = + platform::MKLDNNFormatForSize(src_tz.size(), diff_y->format()); + auto user_diff_dst_memory = memory( {{{diff_dst_tz}, memory::data_type::f32, dst_format}, mkldnn_engine}, to_void_cast(diff_y_data)); // create mkldnn memory from input x tensor - mkldnn::memory::format input_format = x->format(); - if (src_tz.size() == 1) { - input_format = mkldnn::memory::format::x; - } else if (src_tz.size() == 2) { - input_format = mkldnn::memory::format::nc; - } + mkldnn::memory::format input_format = + platform::MKLDNNFormatForSize(src_tz.size(), x->format()); auto src_memory = memory( {{{src_tz}, memory::data_type::f32, input_format}, mkldnn_engine}, diff --git a/paddle/fluid/platform/mkldnn_helper.h b/paddle/fluid/platform/mkldnn_helper.h index ed99932546..a6cccc3121 100644 --- a/paddle/fluid/platform/mkldnn_helper.h +++ b/paddle/fluid/platform/mkldnn_helper.h @@ -228,7 +228,7 @@ class MKLDNNHandler { return dstr; }; return dims2str(operand_dims) + suffix; - }; + } protected: const MKLDNNDeviceContext& dev_ctx_; @@ -237,5 +237,15 @@ class MKLDNNHandler { bool is_reusing_; }; +inline mkldnn::memory::format MKLDNNFormatForSize( + size_t dims_size, mkldnn::memory::format data_format) { + if (dims_size == 1) { + return mkldnn::memory::format::x; + } else if (dims_size == 2) { + return mkldnn::memory::format::nc; + } + return data_format; +} + } // namespace platform } // namespace paddle From 61c54dbbe71fa57f5465cdc37182894f70215b1a Mon Sep 17 00:00:00 2001 From: mozga-intel Date: Thu, 28 Jun 2018 09:22:18 +0200 Subject: [PATCH 057/130] Remove additional function of the code --- paddle/fluid/framework/data_layout_transform.cc | 4 ++-- paddle/fluid/framework/data_layout_transform.h | 6 ------ paddle/fluid/framework/data_transform.cc | 8 ++++++-- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/paddle/fluid/framework/data_layout_transform.cc b/paddle/fluid/framework/data_layout_transform.cc index bc48fd3b47..cd00b7de73 100644 --- a/paddle/fluid/framework/data_layout_transform.cc +++ b/paddle/fluid/framework/data_layout_transform.cc @@ -147,9 +147,9 @@ void TransDataLayoutFromMKLDNN(const OpKernelType& kernel_type_for_var, "Input tensor type is not supported: ", in.type().name()); memory::data_type out_type = in_type; - auto in_format = MKLDNNFormatForSize(in_tz.size(), in.format()); + auto in_format = platform::MKLDNNFormatForSize(in_tz.size(), in.format()); auto out_format = - MKLDNNFormatForSize(in_tz.size(), ToMKLDNNFormat(out_layout)); + platform::MKLDNNFormatForSize(in_tz.size(), ToMKLDNNFormat(out_layout)); void* in_data = GetDataFromTensor(in, in_type); diff --git a/paddle/fluid/framework/data_layout_transform.h b/paddle/fluid/framework/data_layout_transform.h index 67f91e4e48..90bb206ec6 100644 --- a/paddle/fluid/framework/data_layout_transform.h +++ b/paddle/fluid/framework/data_layout_transform.h @@ -62,12 +62,6 @@ inline MKLDNNDataType ToMKLDNNDataType(const std::type_index type) { return MKLDNNDataType::data_undef; } -inline MKLDNNFormat MKLDNNFormatForSize(size_t dims_size, - MKLDNNFormat default_format) { - return (dims_size == 1 - ? mkldnn::memory::format::x - : dims_size == 2 ? mkldnn::memory::format::nc : default_format); -} #endif void TransDataLayoutFromMKLDNN(const OpKernelType& kernel_type_for_var, diff --git a/paddle/fluid/framework/data_transform.cc b/paddle/fluid/framework/data_transform.cc index 5f15e20c78..ff274b2173 100644 --- a/paddle/fluid/framework/data_transform.cc +++ b/paddle/fluid/framework/data_transform.cc @@ -18,6 +18,10 @@ limitations under the License. */ #include "paddle/fluid/framework/data_layout_transform.h" #include "paddle/fluid/framework/data_type_transform.h" +#ifdef PADDLE_WITH_MKLDNN +#include "paddle/fluid/platform/mkldnn_helper.h" +#endif + namespace paddle { namespace framework { @@ -48,8 +52,8 @@ void DataTransform(const OpKernelType& expected_kernel_type, // Case1 - transform from Non-MKLDNN OPKernel to MKLDNN OPKernel // Just set layout/format. No real transform occur - auto out_format = - MKLDNNFormatForSize(in.dims().size(), ToMKLDNNFormat(lin)); + auto out_format = platform::MKLDNNFormatForSize(in.dims().size(), + ToMKLDNNFormat(lin)); out.ShareDataWith(input_tensor); out.set_layout(DataLayout::kMKLDNN); From 995ead08496ccfe2560fece740be903f50cc7bec Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Thu, 28 Jun 2018 15:50:04 +0800 Subject: [PATCH 058/130] add timeline_cn --- doc/fluid/howto/optimization/timeline_cn.md | 26 +++++++++++++++++++ .../{timeline.md => timeline_en.md} | 0 2 files changed, 26 insertions(+) create mode 100644 doc/fluid/howto/optimization/timeline_cn.md rename doc/fluid/howto/optimization/{timeline.md => timeline_en.md} (100%) diff --git a/doc/fluid/howto/optimization/timeline_cn.md b/doc/fluid/howto/optimization/timeline_cn.md new file mode 100644 index 0000000000..5d061e1c00 --- /dev/null +++ b/doc/fluid/howto/optimization/timeline_cn.md @@ -0,0 +1,26 @@ +# 如何使用timeline工具做性能分析 + +1. 在训练的主循环外加上`with profiler.profiler(...)`。运行之后,代码会在`/tmp/profile`目录下生成一个profile的记录文件。 + + **提示:** + 请不要在timeline记录信息时运行太多次迭代,因为timeline中的记录数量和迭代次数是成正比的。 + + ```python + with profiler.profiler('All', 'total', '/tmp/profile') as prof: + for pass_id in range(pass_num): + for batch_id, data in enumerate(train_reader()): + exe.run(fluid.default_main_program(), + feed=feeder.feed(data), + fetch_list=[]) + ... + ``` + +1. 运行`python paddle/tools/timeline.py`来处理`/tmp/profile`,这个程序默认会生成一个`/tmp/timeline`文件,你也可以用命令行参数来修改这个路径,请参考[timeline.py](https://github.com/PaddlePaddle/Paddle/blob/develop/tools/timeline.py)。 + +1. 打开chrome浏览器,访问,用`load`按钮来加载生成的`timeline`文件。 + + ![chrome tracing](./tracing.jpeg) + +1. 结果如下图所示,可以放到来查看timetime的细节信息。 + + ![chrome timeline](./timeline.jpeg) diff --git a/doc/fluid/howto/optimization/timeline.md b/doc/fluid/howto/optimization/timeline_en.md similarity index 100% rename from doc/fluid/howto/optimization/timeline.md rename to doc/fluid/howto/optimization/timeline_en.md From b6dc3a59f1712569ad8a19dd63bb536af8c56f57 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Thu, 28 Jun 2018 12:27:25 +0800 Subject: [PATCH 059/130] Add DataBalanceOpHandle to MultiDeviceSSAGragh --- paddle/fluid/framework/details/CMakeLists.txt | 3 +- .../details/data_balance_op_handle.cc | 138 ++++++++++++++++++ .../details/data_balance_op_handle.h | 50 +++++++ .../details/multi_devices_graph_builder.cc | 27 +++- .../details/multi_devices_graph_builder.h | 3 + paddle/fluid/framework/lod_tensor.cc | 3 +- paddle/fluid/operators/read_op.cc | 10 +- 7 files changed, 229 insertions(+), 5 deletions(-) create mode 100644 paddle/fluid/framework/details/data_balance_op_handle.cc create mode 100644 paddle/fluid/framework/details/data_balance_op_handle.h diff --git a/paddle/fluid/framework/details/CMakeLists.txt b/paddle/fluid/framework/details/CMakeLists.txt index 3c73b6cc55..4fb4ec38ee 100644 --- a/paddle/fluid/framework/details/CMakeLists.txt +++ b/paddle/fluid/framework/details/CMakeLists.txt @@ -25,11 +25,12 @@ else() cc_library(broadcast_op_handle SRCS broadcast_op_handle.cc DEPS op_handle_base scope ddim memory variable_visitor) endif() +cc_library(data_balance_op_handle SRCS data_balance_op_handle.cc DEPS op_handle_base scope lod_tensor) cc_library(gather_op_handle SRCS gather_op_handle.cc DEPS op_handle_base scope ddim memory variable_visitor) cc_library(fuse_vars_op_handle SRCS fuse_vars_op_handle.cc DEPS op_handle_base scope) cc_library(multi_devices_graph_builder SRCS multi_devices_graph_builder.cc DEPS ssa_graph_builder computation_op_handle - scale_loss_grad_op_handle rpc_op_handle all_reduce_op_handle reduce_op_handle broadcast_op_handle) + scale_loss_grad_op_handle rpc_op_handle all_reduce_op_handle reduce_op_handle broadcast_op_handle data_balance_op_handle) cc_library(ssa_graph_builder_factory SRCS ssa_graph_builder_factory.cc DEPS multi_devices_graph_builder ssa_graph_printer ssa_graph_checker) diff --git a/paddle/fluid/framework/details/data_balance_op_handle.cc b/paddle/fluid/framework/details/data_balance_op_handle.cc new file mode 100644 index 0000000000..786d95acb1 --- /dev/null +++ b/paddle/fluid/framework/details/data_balance_op_handle.cc @@ -0,0 +1,138 @@ +// Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "paddle/fluid/framework/details/data_balance_op_handle.h" +#include +#include "paddle/fluid/framework/details/container_cast.h" + +namespace paddle { +namespace framework { +namespace details { + +DataBalanceOpHandle::DataBalanceOpHandle( + const std::vector &local_scopes, + const std::vector &places) + : local_scopes_(local_scopes), places_(places) {} + +std::string DataBalanceOpHandle::Name() const { return "data balance"; } + +std::vector> DataBalanceOpHandle::GetBalancePlan( + const std::vector &device_sizes) { + int device_num = device_sizes.size(); + int total_size = 0; + int empty_num = 0; + std::vector> size_device_vec; + size_device_vec.reserve(device_num); + for (int i = 0; i < device_num; ++i) { + if (device_sizes[i] == 0) { + ++empty_num; + } + total_size += device_sizes[i]; + size_device_vec.push_back({{device_sizes[i], i}}); + } + std::vector> res; + if (empty_num == 0) { + // No need to do data balance. + return res; + } + if (total_size < device_num) { + // No enough data. + PADDLE_THROW("There is no next data."); + } + std::sort(size_device_vec.begin(), size_device_vec.end(), + [](const std::array &a, const std::array &b) { + return a[0] > b[0]; + }); + int expected_device_size = total_size / device_num; + int src_idx = 0; + for (int dst_idx = device_num - empty_num; dst_idx < device_num; ++dst_idx) { + if (size_device_vec[src_idx][0] <= expected_device_size) { + ++src_idx; + PADDLE_ENFORCE_LT(src_idx, device_num - empty_num); + } + size_device_vec[src_idx][0] -= expected_device_size; + size_device_vec[dst_idx][0] += expected_device_size; + res.push_back({{size_device_vec[src_idx][1], size_device_vec[dst_idx][1], + expected_device_size}}); + } + return res; +} + +void DataBalanceOpHandle::RunImpl() { + if (places_.size() == 1) { + return; + } + auto in_var_handles = DynamicCast(inputs_); + auto out_var_handles = DynamicCast(outputs_); + PADDLE_ENFORCE(in_var_handles.size() % places_.size() == 0); + PADDLE_ENFORCE_EQ( + in_var_handles.size(), out_var_handles.size(), + "The NoDummyInputSize and NoDummyOutputSize should be equal."); + int data_num = in_var_handles.size() / places_.size(); + WaitInputVarGenerated(); + + std::vector> lod_tensors; + std::vector device_sizes; + for (int i = 0; i < static_cast(in_var_handles.size()); ++i) { + PADDLE_ENFORCE_EQ(in_var_handles[i]->name_, out_var_handles[i]->name_, + "The name of input and output should be equal."); + int place_idx = i / data_num; + int data_idx = i % data_num; + auto *local_scope = + local_scopes_[place_idx]->FindVar(kLocalExecScopeName)->Get(); + auto *tensor_var = local_scope->FindVar(in_var_handles[i]->name_); + PADDLE_ENFORCE(tensor_var->IsType()); + auto *tensor = tensor_var->GetMutable(); + PADDLE_ENFORCE(places_[place_idx] == tensor->place()); + lod_tensors[data_idx].push_back(tensor); + int ins_size = + tensor->lod().empty() ? tensor->dims()[0] : tensor->NumElements(); + if (data_idx == 0) { + device_sizes.emplace_back(ins_size); + } else { + PADDLE_ENFORCE_EQ(ins_size, device_sizes.at(place_idx)); + } + } + const auto &balance_plan = GetBalancePlan(device_sizes); + + for (const auto &trans : balance_plan) { + for (int data_idx = 0; data_idx < data_num; ++data_idx) { + LoDTensor *src_tensor = lod_tensors[data_idx][trans[0]]; + LoDTensor *dst_tensor = lod_tensors[data_idx][trans[1]]; + int trans_ins_size = trans[2]; + LoD src_lod = src_tensor->lod(); + int src_ins_size = + src_lod.empty() ? src_tensor->dims()[0] : src_tensor->NumElements(); + int cut_point = src_ins_size - trans_ins_size; + if (!src_lod.empty()) { + for (auto &level : src_lod) { + cut_point = level[cut_point]; + } + } + TensorCopySync(src_tensor->Slice(cut_point, src_tensor->dims()[0]), + dst_tensor->place(), dst_tensor); + src_tensor->ShareDataWith(src_tensor->Slice(0, cut_point)); + if (!src_lod.empty()) { + dst_tensor->set_lod(SliceInLevel( + src_lod, 0, src_ins_size - trans_ins_size, src_ins_size)); + src_tensor->set_lod( + SliceInLevel(src_lod, 0, 0, src_ins_size - trans_ins_size)); + } + } + } +} + +} // namespace details +} // namespace framework +} // namespace paddle diff --git a/paddle/fluid/framework/details/data_balance_op_handle.h b/paddle/fluid/framework/details/data_balance_op_handle.h new file mode 100644 index 0000000000..00bc4837d6 --- /dev/null +++ b/paddle/fluid/framework/details/data_balance_op_handle.h @@ -0,0 +1,50 @@ +// Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include +#include "paddle/fluid/framework/details/op_handle_base.h" +#include "paddle/fluid/framework/lod_tensor.h" +#include "paddle/fluid/framework/scope.h" + +namespace paddle { +namespace framework { +namespace details { + +struct DataBalanceOpHandle : public OpHandleBase { + public: + DataBalanceOpHandle(const std::vector &local_scopes, + const std::vector &places); + + std::string Name() const override; + + bool IsMultiDeviceTransfer() override { return false; }; + + protected: + void RunImpl() override; + + private: + // std::vector<(src_dev_id, dst_dev_id, trans_size)> + std::vector> GetBalancePlan( + const std::vector &batch_size_per_device); + + const std::vector &local_scopes_; + const std::vector &places_; +}; + +} // namespace details +} // namespace framework +} // namespace paddle diff --git a/paddle/fluid/framework/details/multi_devices_graph_builder.cc b/paddle/fluid/framework/details/multi_devices_graph_builder.cc index e7063fb042..357f6ff5dc 100644 --- a/paddle/fluid/framework/details/multi_devices_graph_builder.cc +++ b/paddle/fluid/framework/details/multi_devices_graph_builder.cc @@ -20,6 +20,7 @@ #include "paddle/fluid/framework/details/all_reduce_op_handle.h" #include "paddle/fluid/framework/details/broadcast_op_handle.h" #include "paddle/fluid/framework/details/computation_op_handle.h" +#include "paddle/fluid/framework/details/data_balance_op_handle.h" #include "paddle/fluid/framework/details/multi_devices_graph_builder.h" #include "paddle/fluid/framework/details/reduce_op_handle.h" #include "paddle/fluid/framework/details/rpc_op_handle.h" @@ -217,6 +218,11 @@ std::unique_ptr MultiDevSSAGraphBuilder::Build( // gradients. CreateComputationalOps(&result, *op, places_.size()); + if (op->Type() == "read") { + const auto &data_var_names = op->Output("Out"); + InsertDataBalanceOp(&result, data_var_names); + } + if (!is_forwarding && places_.size() > 1) { // Currently, we assume that once gradient is generated, it can be // broadcast, and each gradient is only broadcast once. @@ -360,6 +366,24 @@ void MultiDevSSAGraphBuilder::InsertAllReduceOp(SSAGraph *result, } } +void MultiDevSSAGraphBuilder::InsertDataBalanceOp( + SSAGraph *result, const std::vector &datas) const { + result->ops_.emplace_back(new DataBalanceOpHandle(local_scopes_, places_)); + auto *op_handle = result->ops_.back().get(); + for (size_t i = 0; i < places_.size(); ++i) { + auto &p = places_[i]; + SetCommunicationContext(op_handle, p); + for (const std::string &d_name : datas) { + auto &vars = result->vars_[i][d_name]; + PADDLE_ENFORCE(!vars.empty()); + op_handle->AddInput(vars.back().get()); + auto var = new VarHandle(vars.size(), i, d_name, p); + vars.emplace_back(var); + op_handle->AddOutput(var); + } + } +} + bool MultiDevSSAGraphBuilder::IsParameterGradientOnce( const std::string &og, std::unordered_set *og_has_been_broadcast) const { @@ -509,7 +533,8 @@ void MultiDevSSAGraphBuilder::CreateRPCOp(SSAGraph *result, op_dev_id = GetVarDeviceID(op.InputArgumentNames()[0]); // the variable name which contains .block means it was splited by // split_byref op - // so that we can balance the variable blocks to all the pserver instances. + // so that we can balance the variable blocks to all the pserver + // instances. if (strategy_.reduce_ == BuildStrategy::ReduceStrategy::kAllReduce && op.InputArgumentNames()[0].find(".block") == std::string::npos) { op_dev_id = GetAppropriateDeviceID(op.InputArgumentNames()); diff --git a/paddle/fluid/framework/details/multi_devices_graph_builder.h b/paddle/fluid/framework/details/multi_devices_graph_builder.h index 0b6347bf51..a964e02488 100644 --- a/paddle/fluid/framework/details/multi_devices_graph_builder.h +++ b/paddle/fluid/framework/details/multi_devices_graph_builder.h @@ -101,6 +101,9 @@ class MultiDevSSAGraphBuilder : public SSAGraphBuilder { void InsertAllReduceOp(SSAGraph *result, const std::string &og) const; + void InsertDataBalanceOp(SSAGraph *result, + const std::vector &datas) const; + void CreateBroadcastOp(SSAGraph *result, const std::string &p_name, size_t src_dev_id) const; diff --git a/paddle/fluid/framework/lod_tensor.cc b/paddle/fluid/framework/lod_tensor.cc index d29d8ce1c5..49672e1181 100644 --- a/paddle/fluid/framework/lod_tensor.cc +++ b/paddle/fluid/framework/lod_tensor.cc @@ -68,7 +68,7 @@ std::ostream &operator<<(std::ostream &os, const LoDTensor &t) { // only print first ten elements int64_t size = t.numel() < 10 ? t.numel() : 10; for (int64_t i = 0; i < size; ++i) { - if (t.type().hash_code() == typeid(float).hash_code()) { + if (t.type().hash_code() == typeid(float).hash_code()) { // NOLINT os << t.data()[i] << " "; } else if (t.type().hash_code() == typeid(int64_t).hash_code()) { os << t.data()[i] << " "; @@ -89,6 +89,7 @@ std::string LoDToString(const LoD &lod) { LoD SliceInLevel(const LoD &in, size_t level, size_t elem_begin, size_t elem_end) { PADDLE_ENFORCE_LT(level, in.size()); + PADDLE_ENFORCE_LT(elem_begin, elem_end); PADDLE_ENFORCE_LT(elem_end, in[level].size()); LoD res; diff --git a/paddle/fluid/operators/read_op.cc b/paddle/fluid/operators/read_op.cc index 72a27d4358..8e9f91c185 100644 --- a/paddle/fluid/operators/read_op.cc +++ b/paddle/fluid/operators/read_op.cc @@ -66,9 +66,15 @@ class ReadOp : public framework::OperatorBase { std::vector out_arg_names = Outputs("Out"); std::vector ins; reader->ReadNext(&ins); - PADDLE_ENFORCE(!ins.empty(), "There is no next data."); + if (ins.empty()) { + ins.resize(out_arg_names.size()); + for (auto& tensor : ins) { + // data type is not important for subsequent DataBalanceOpHandle + tensor.mutable_data(framework::make_ddim({0}), dev_place); + } + } PADDLE_ENFORCE_EQ(ins.size(), out_arg_names.size()); - for (size_t i = 0; i < ins.size(); ++i) { + for (size_t i = 0; i < out_arg_names.size(); ++i) { auto* out = scope.FindVar(out_arg_names[i])->GetMutable(); out->ShareDataWith(ins[i]); From 7876b213cb3e8be02d51fa9304f007d7ffe3a9c6 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Thu, 28 Jun 2018 19:33:32 +0800 Subject: [PATCH 060/130] update --- python/paddle/fluid/layers/io.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/python/paddle/fluid/layers/io.py b/python/paddle/fluid/layers/io.py index 49ccfa9292..9de88e2c32 100644 --- a/python/paddle/fluid/layers/io.py +++ b/python/paddle/fluid/layers/io.py @@ -259,11 +259,8 @@ def monkey_patch_reader_methods(reader): return reader -def _copy_reader_var_(block, var, new_name=None): - if new_name == None: - new_name = var.name - new_var = block.create_var( - name=str(new_name), type=core.VarDesc.VarType.READER) +def _copy_reader_var_(block, var): + new_var = block.create_var(name=var.name, type=core.VarDesc.VarType.READER) new_var.desc.set_shapes(var.desc.shapes()) new_var.desc.set_dtypes(var.desc.dtypes()) new_var.persistable = True From 2e320079d35e140d2c9b01f859bf386fd3cf9304 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Thu, 28 Jun 2018 12:49:41 +0000 Subject: [PATCH 061/130] fix bugs --- paddle/fluid/framework/details/data_balance_op_handle.cc | 4 +--- paddle/fluid/framework/details/data_balance_op_handle.h | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/paddle/fluid/framework/details/data_balance_op_handle.cc b/paddle/fluid/framework/details/data_balance_op_handle.cc index 786d95acb1..24a68506e8 100644 --- a/paddle/fluid/framework/details/data_balance_op_handle.cc +++ b/paddle/fluid/framework/details/data_balance_op_handle.cc @@ -81,8 +81,7 @@ void DataBalanceOpHandle::RunImpl() { "The NoDummyInputSize and NoDummyOutputSize should be equal."); int data_num = in_var_handles.size() / places_.size(); WaitInputVarGenerated(); - - std::vector> lod_tensors; + std::vector> lod_tensors(data_num); std::vector device_sizes; for (int i = 0; i < static_cast(in_var_handles.size()); ++i) { PADDLE_ENFORCE_EQ(in_var_handles[i]->name_, out_var_handles[i]->name_, @@ -105,7 +104,6 @@ void DataBalanceOpHandle::RunImpl() { } } const auto &balance_plan = GetBalancePlan(device_sizes); - for (const auto &trans : balance_plan) { for (int data_idx = 0; data_idx < data_num; ++data_idx) { LoDTensor *src_tensor = lod_tensors[data_idx][trans[0]]; diff --git a/paddle/fluid/framework/details/data_balance_op_handle.h b/paddle/fluid/framework/details/data_balance_op_handle.h index 00bc4837d6..5552be2e6e 100644 --- a/paddle/fluid/framework/details/data_balance_op_handle.h +++ b/paddle/fluid/framework/details/data_balance_op_handle.h @@ -41,8 +41,8 @@ struct DataBalanceOpHandle : public OpHandleBase { std::vector> GetBalancePlan( const std::vector &batch_size_per_device); - const std::vector &local_scopes_; - const std::vector &places_; + const std::vector local_scopes_; + const std::vector places_; }; } // namespace details From 95385de798e9fc6fd3c8b7b47db75dc922028344 Mon Sep 17 00:00:00 2001 From: Yan Chunwei Date: Thu, 28 Jun 2018 22:02:48 +0800 Subject: [PATCH 062/130] fix anakin manylinux build --- paddle/contrib/inference/CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/paddle/contrib/inference/CMakeLists.txt b/paddle/contrib/inference/CMakeLists.txt index ef768d989a..2cd6ab2bbf 100644 --- a/paddle/contrib/inference/CMakeLists.txt +++ b/paddle/contrib/inference/CMakeLists.txt @@ -61,7 +61,7 @@ cc_library(paddle_inference_tensorrt_subgraph_engine inference_api_test(test_paddle_inference_api_tensorrt_subgraph_engine ARGS test_word2vec) endif() -if (WITH_ANAKIN AND WITH_TESTING) # only needed in CI +if (WITH_ANAKIN) # only needed in CI # Due to Anakin do not have official library releases and the versions of protobuf and cuda do not match Paddle's, # so anakin library will not be merged to our official inference library. To use anakin prediction API, one need to # compile the libinference_anakin_api.a and compile with anakin.so. @@ -71,10 +71,12 @@ if (WITH_ANAKIN AND WITH_TESTING) # only needed in CI target_compile_options(inference_anakin_api_shared BEFORE PUBLIC ${ANAKIN_COMPILE_EXTRA_FLAGS}) target_link_libraries(inference_anakin_api anakin anakin_saber_common) target_link_libraries(inference_anakin_api_shared anakin anakin_saber_common) - cc_test(inference_anakin_test SRCS paddle_inference_api_anakin_engine_tester.cc + if (WITH_TESTING) + cc_test(inference_anakin_test SRCS paddle_inference_api_anakin_engine_tester.cc ARGS --model=${ANAKIN_INSTALL_DIR}/mobilenet_v2.anakin.bin DEPS inference_anakin_api) - target_compile_options(inference_anakin_test BEFORE PUBLIC ${ANAKIN_COMPILE_EXTRA_FLAGS}) + target_compile_options(inference_anakin_test BEFORE PUBLIC ${ANAKIN_COMPILE_EXTRA_FLAGS}) + endif(WITH_TESTING) endif() if(WITH_TESTING) From 6711b7b5f174df83a0b06e24167509a15ae1a0bd Mon Sep 17 00:00:00 2001 From: chengduo Date: Thu, 28 Jun 2018 22:46:51 +0800 Subject: [PATCH 063/130] fix FeedAndSplitTensorIntoLocalScopes (#11817) --- paddle/fluid/framework/parallel_executor.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/paddle/fluid/framework/parallel_executor.cc b/paddle/fluid/framework/parallel_executor.cc index b53a6f43fb..751b10eeee 100644 --- a/paddle/fluid/framework/parallel_executor.cc +++ b/paddle/fluid/framework/parallel_executor.cc @@ -253,6 +253,9 @@ void ParallelExecutor::FeedAndSplitTensorIntoLocalScopes( t->set_lod(lod_tensors[j].lod()); } } + for (auto &p : member_->places_) { + platform::DeviceContextPool::Instance().Get(p)->Wait(); + } } ParallelExecutor::~ParallelExecutor() { From 93e25301d75e9be7666af7c206cec67fb2838441 Mon Sep 17 00:00:00 2001 From: whs Date: Fri, 29 Jun 2018 10:39:13 +0800 Subject: [PATCH 064/130] Fix python api of mean iou op. (#11797) * Fix mean iou op. * Fix crop layer test. * Fix unitest * fix unitest. --- python/paddle/fluid/layers/nn.py | 10 +++++----- python/paddle/fluid/tests/unittests/test_layers.py | 11 ++++++++++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/python/paddle/fluid/layers/nn.py b/python/paddle/fluid/layers/nn.py index bc379da4e3..61c01b3b00 100644 --- a/python/paddle/fluid/layers/nn.py +++ b/python/paddle/fluid/layers/nn.py @@ -5078,12 +5078,12 @@ def mean_iou(input, label, num_classes): out_correct = helper.create_tmp_variable(dtype='int32') helper.append_op( type="mean_iou", - inputs={"predictions": input, - "labels": label}, + inputs={"Predictions": input, + "Labels": label}, outputs={ - "out_mean_iou": out_mean_iou, - "out_wrong": out_wrong, - "out_correct": out_correct + "OutMeanIou": out_mean_iou, + "OutWrong": out_wrong, + "OutCorrect": out_correct }, attrs={"num_classes": num_classes}) return out_mean_iou, out_wrong, out_correct diff --git a/python/paddle/fluid/tests/unittests/test_layers.py b/python/paddle/fluid/tests/unittests/test_layers.py index 82074955fa..9d4b2d4434 100644 --- a/python/paddle/fluid/tests/unittests/test_layers.py +++ b/python/paddle/fluid/tests/unittests/test_layers.py @@ -401,7 +401,7 @@ class TestBook(unittest.TestCase): self.assertIsNotNone(output) print(str(program)) - def test_maxout(self): + def test_crop(self): program = Program() with program_guard(program): x = layers.data(name='x', shape=[3, 5], dtype="float32") @@ -410,6 +410,15 @@ class TestBook(unittest.TestCase): self.assertIsNotNone(output) print(str(program)) + def test_mean_iou(self): + program = Program() + with program_guard(program): + x = layers.data(name='x', shape=[16], dtype='float32') + y = layers.data(name='label', shape=[1], dtype='int64') + iou = layers.mean_iou(x, y, 2) + self.assertIsNotNone(iou) + print(str(program)) + if __name__ == '__main__': unittest.main() From 02e521e3ac9ec145576e64c1fd52e0e76dbbcb46 Mon Sep 17 00:00:00 2001 From: whs Date: Fri, 29 Jun 2018 10:40:12 +0800 Subject: [PATCH 065/130] Fix model average on multi-GPUs. (#11814) * Fix average_accumulate_op for parallel executor. * Fix model average on multi-GPUs. --- python/paddle/fluid/optimizer.py | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/python/paddle/fluid/optimizer.py b/python/paddle/fluid/optimizer.py index 607a68e256..75ee40fa9c 100644 --- a/python/paddle/fluid/optimizer.py +++ b/python/paddle/fluid/optimizer.py @@ -1113,7 +1113,6 @@ class ModelAverage(Optimizer): Args: average_window_rate: The rate of average window. - params_grads: A list of parameter-grad variable pairs. min_average_window: The minimum size of average window. max_average_window: The maximum size of average window. @@ -1122,8 +1121,8 @@ class ModelAverage(Optimizer): .. code-block:: python optimizer = fluid.optimizer.Momentum() - _, params_grads = optimizer.minimize(cost) - model_average = fluid.optimizer.ModelAverage(params_grads, 0.15, + optimizer.minimize(cost) + model_average = fluid.optimizer.ModelAverage(0.15, min_average_window=10000, max_average_window=20000) for pass_id in range(args.pass_num): @@ -1137,7 +1136,6 @@ class ModelAverage(Optimizer): def __init__(self, average_window_rate, - params_grads=None, min_average_window=10000, max_average_window=10000, **kwargs): @@ -1146,21 +1144,16 @@ class ModelAverage(Optimizer): self.min_average_window = min_average_window self.max_average_window = max_average_window - self.params_grads = [] if params_grads is None else params_grads - params = {} - for param, grad in self.params_grads: - if param.do_model_average != False: - params[param.name] = (param, grad) + self.params_grads = [] for param in framework.default_main_program().global_block( ).all_parameters(): - if param.name not in params and param.do_model_average != False: + if param.do_model_average != False: grad = param.block.create_var( name=unique_name.generate(".".join([param.name, 'tmp'])), dtype=param.dtype, persistable=False, stop_gradient=True) - params[param.name] = (param, grad) - self.params_grads = params.values() + self.params_grads.append((param, grad)) for param, grad in self.params_grads: self._append_average_accumulate_op(param) From 5e23a5ec1835d46c0568e7a0dbfbe366f9e2e4b8 Mon Sep 17 00:00:00 2001 From: yuyang18 Date: Fri, 29 Jun 2018 11:02:01 +0800 Subject: [PATCH 066/130] Rename TransferData -> TransformData --- doc/fluid/design/multi_devices/kernel_selection.md | 2 +- paddle/fluid/framework/data_transform.cc | 6 +++--- paddle/fluid/framework/data_transform.h | 6 +++--- paddle/fluid/framework/operator.cc | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/fluid/design/multi_devices/kernel_selection.md b/doc/fluid/design/multi_devices/kernel_selection.md index c8391787f7..4d2aab87b8 100644 --- a/doc/fluid/design/multi_devices/kernel_selection.md +++ b/doc/fluid/design/multi_devices/kernel_selection.md @@ -74,7 +74,7 @@ void OperatorWithKernel::Run( auto kernel_type_for_var = this->GetKernelTypeForVar(...); if (kernel_type_for_var.place_ != expected_kernel_key.place_) { auto* trans_var = new_scope.Var(var_name); - auto* out = TransferData(expected_kernel_key, + auto* out = TransformData(expected_kernel_key, kernel_type_for_var, *tensor_in); SetTensorToVariable(...); diff --git a/paddle/fluid/framework/data_transform.cc b/paddle/fluid/framework/data_transform.cc index f52350ecb8..635eb404d4 100644 --- a/paddle/fluid/framework/data_transform.cc +++ b/paddle/fluid/framework/data_transform.cc @@ -26,9 +26,9 @@ static void PassTensorData(Tensor *from, Tensor *to) { *from = Tensor(); } -void TransferData(const OpKernelType &expected_kernel_type, - const OpKernelType &kernel_type_for_var, - const Tensor &input_tensor, Tensor *output_tensor) { +void TransformData(const OpKernelType &expected_kernel_type, + const OpKernelType &kernel_type_for_var, + const Tensor &input_tensor, Tensor *output_tensor) { bool transformed = false; Tensor in; in.ShareDataWith(input_tensor); diff --git a/paddle/fluid/framework/data_transform.h b/paddle/fluid/framework/data_transform.h index 161f1023e3..ae3ab051bd 100644 --- a/paddle/fluid/framework/data_transform.h +++ b/paddle/fluid/framework/data_transform.h @@ -30,9 +30,9 @@ limitations under the License. */ namespace paddle { namespace framework { -void TransferData(const OpKernelType &expected_kernel_type, - const OpKernelType &kernel_type_for_var, - const Tensor &input_tensor, Tensor *out); +void TransformData(const OpKernelType &expected_kernel_type, + const OpKernelType &kernel_type_for_var, + const Tensor &input_tensor, Tensor *out); /** * Set OutVar from InVar, except the tensor is shared with `tensor` diff --git a/paddle/fluid/framework/operator.cc b/paddle/fluid/framework/operator.cc index b4f17bdef7..aa1a42fc97 100644 --- a/paddle/fluid/framework/operator.cc +++ b/paddle/fluid/framework/operator.cc @@ -725,7 +725,7 @@ Scope* OperatorWithKernel::TryTransferData( auto* trans_var = new_scope->Var(var_name); Tensor out; - TransferData(expected_kernel_key, kernel_type_for_var, *tensor_in, &out); + TransformData(expected_kernel_key, kernel_type_for_var, *tensor_in, &out); SetTensorToVariable(*var, out, trans_var); } } From 47388020a2e8e702191369f578fd558fe338d723 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Fri, 29 Jun 2018 03:42:18 +0000 Subject: [PATCH 067/130] fix bugs --- .../framework/details/data_balance_op_handle.cc | 15 +++++++++++++++ .../framework/details/data_balance_op_handle.h | 11 ++++++++++- .../details/multi_devices_graph_builder.cc | 5 +++++ paddle/fluid/framework/details/op_handle_base.cc | 1 + 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/paddle/fluid/framework/details/data_balance_op_handle.cc b/paddle/fluid/framework/details/data_balance_op_handle.cc index 24a68506e8..023e0cdf91 100644 --- a/paddle/fluid/framework/details/data_balance_op_handle.cc +++ b/paddle/fluid/framework/details/data_balance_op_handle.cc @@ -20,10 +20,24 @@ namespace paddle { namespace framework { namespace details { +#ifdef PADDLE_WITH_CUDA +DataBalanceOpHandle::DataBalanceOpHandle( + const std::vector &local_scopes, + const std::vector &places, + const platform::NCCLContextMap *ctxs) + : local_scopes_(local_scopes), places_(places) { + if (ctxs) { + for (auto &p : places_) { + this->dev_ctxes_[p] = ctxs->DevCtx(p); + } + } +} +#else DataBalanceOpHandle::DataBalanceOpHandle( const std::vector &local_scopes, const std::vector &places) : local_scopes_(local_scopes), places_(places) {} +#endif std::string DataBalanceOpHandle::Name() const { return "data balance"; } @@ -104,6 +118,7 @@ void DataBalanceOpHandle::RunImpl() { } } const auto &balance_plan = GetBalancePlan(device_sizes); + for (const auto &trans : balance_plan) { for (int data_idx = 0; data_idx < data_num; ++data_idx) { LoDTensor *src_tensor = lod_tensors[data_idx][trans[0]]; diff --git a/paddle/fluid/framework/details/data_balance_op_handle.h b/paddle/fluid/framework/details/data_balance_op_handle.h index 5552be2e6e..a4adafdfeb 100644 --- a/paddle/fluid/framework/details/data_balance_op_handle.h +++ b/paddle/fluid/framework/details/data_balance_op_handle.h @@ -19,6 +19,9 @@ #include "paddle/fluid/framework/details/op_handle_base.h" #include "paddle/fluid/framework/lod_tensor.h" #include "paddle/fluid/framework/scope.h" +#ifdef PADDLE_WITH_CUDA +#include "paddle/fluid/platform/nccl_helper.h" +#endif namespace paddle { namespace framework { @@ -26,8 +29,14 @@ namespace details { struct DataBalanceOpHandle : public OpHandleBase { public: +#ifdef PADDLE_WITH_CUDA DataBalanceOpHandle(const std::vector &local_scopes, - const std::vector &places); + const std::vector &places, + const platform::NCCLContextMap *ctxs); +#else + DataBalanceOpHandle(const std::vector &local_scopes, + const std::vector *places) +#endif std::string Name() const override; diff --git a/paddle/fluid/framework/details/multi_devices_graph_builder.cc b/paddle/fluid/framework/details/multi_devices_graph_builder.cc index 4ddc1f2ddd..8a9f0b1054 100644 --- a/paddle/fluid/framework/details/multi_devices_graph_builder.cc +++ b/paddle/fluid/framework/details/multi_devices_graph_builder.cc @@ -368,7 +368,12 @@ void MultiDevSSAGraphBuilder::InsertAllReduceOp(SSAGraph *result, void MultiDevSSAGraphBuilder::InsertDataBalanceOp( SSAGraph *result, const std::vector &datas) const { +#ifdef PADDLE_WITH_CUDA + result->ops_.emplace_back( + new DataBalanceOpHandle(local_scopes_, places_, nccl_ctxs_)); +#else result->ops_.emplace_back(new DataBalanceOpHandle(local_scopes_, places_)); +#endif auto *op_handle = result->ops_.back().get(); for (size_t i = 0; i < places_.size(); ++i) { auto &p = places_[i]; diff --git a/paddle/fluid/framework/details/op_handle_base.cc b/paddle/fluid/framework/details/op_handle_base.cc index 1f84c3b9e2..856124875d 100644 --- a/paddle/fluid/framework/details/op_handle_base.cc +++ b/paddle/fluid/framework/details/op_handle_base.cc @@ -60,6 +60,7 @@ void OpHandleBase::RecordWaitEventOnCtx(platform::DeviceContext *waited_ctx) { #ifdef PADDLE_WITH_CUDA if (platform::is_cpu_place(waited_ctx->GetPlace()) || events_.empty()) { for (auto &dev_ctx : dev_ctxes_) { + PADDLE_ENFORCE_NOT_NULL(dev_ctx.second); dev_ctx.second->Wait(); } } else { From 077434c26c78c47e9b58a1a6eaaec435bd4e188f Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Fri, 29 Jun 2018 11:47:52 +0800 Subject: [PATCH 068/130] fix CPU compile error --- paddle/fluid/framework/details/data_balance_op_handle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/fluid/framework/details/data_balance_op_handle.h b/paddle/fluid/framework/details/data_balance_op_handle.h index a4adafdfeb..76a407e361 100644 --- a/paddle/fluid/framework/details/data_balance_op_handle.h +++ b/paddle/fluid/framework/details/data_balance_op_handle.h @@ -35,7 +35,7 @@ struct DataBalanceOpHandle : public OpHandleBase { const platform::NCCLContextMap *ctxs); #else DataBalanceOpHandle(const std::vector &local_scopes, - const std::vector *places) + const std::vector &places); #endif std::string Name() const override; From 15be51385e2d3707f95505d51621136c562793cf Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Fri, 29 Jun 2018 13:02:23 +0800 Subject: [PATCH 069/130] fix Mac compile errors --- .../analysis/tensorrt_subgraph_node_mark_pass.h | 13 ++++++++++--- .../inference/analysis/tensorrt_subgraph_pass.h | 9 +++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h b/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h index 6cfac55d3b..c558a6ebbd 100644 --- a/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h +++ b/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h @@ -16,6 +16,10 @@ * This file defines TensorRTSubgraphNodeMarkPass which helps to mark the ops * that supported by TensorRT engine. */ + +#pragma once + +#include #include "paddle/fluid/inference/analysis/pass.h" #include "paddle/fluid/inference/analysis/subgraph_splitter.h" @@ -30,7 +34,8 @@ class TensorRTSubgraphNodeMarkPass : public DataFlowGraphPass { public: using teller_t = SubGraphSplitter::NodeInsideSubgraphTeller; - TensorRTSubgraphNodeMarkPass(const teller_t& teller) : teller_(teller) {} + explicit TensorRTSubgraphNodeMarkPass(const teller_t& teller) + : teller_(teller) {} bool Initialize(Argument* argument) override { return true; } @@ -38,8 +43,10 @@ class TensorRTSubgraphNodeMarkPass : public DataFlowGraphPass { // sub-graph into TensorRT. void Run(DataFlowGraph* graph) override; - std::string repr() const { return "tensorrt-sub-subgraph-mark"; } - std::string description() const { return "tensorrt sub-graph mark pass"; } + std::string repr() const override { return "tensorrt-sub-subgraph-mark"; } + std::string description() const override { + return "tensorrt sub-graph mark pass"; + } Pass* CreateGraphvizDebugerPass() const override; bool Finalize() override; diff --git a/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.h b/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.h index 11e0880695..c6741a9209 100644 --- a/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.h +++ b/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.h @@ -14,6 +14,7 @@ limitations under the License. */ #pragma once +#include #include "paddle/fluid/inference/analysis/node.h" #include "paddle/fluid/inference/analysis/pass.h" #include "paddle/fluid/inference/analysis/subgraph_splitter.h" @@ -30,7 +31,7 @@ class TensorRTSubGraphPass : public DataFlowGraphPass { // Tell whether to transform a sub-graph into TensorRT. using NodeInsideSubgraphTeller = SubGraphFuse::NodeInsideSubgraphTeller; - TensorRTSubGraphPass(const NodeInsideSubgraphTeller& teller); + explicit TensorRTSubGraphPass(const NodeInsideSubgraphTeller& teller); bool Initialize(Argument* argument) override { return true; } @@ -40,8 +41,8 @@ class TensorRTSubGraphPass : public DataFlowGraphPass { bool Finalize() override { return true; } - std::string repr() const { return "tensorrt-sub-graph"; } - std::string description() const { return "tensorrt sub graph pass"; } + std::string repr() const override { return "tensorrt-sub-graph"; } + std::string description() const override { return "tensorrt sub graph pass"; } private: NodeInsideSubgraphTeller node_inside_subgraph_teller_; @@ -49,4 +50,4 @@ class TensorRTSubGraphPass : public DataFlowGraphPass { } // namespace analysis } // namespace inference -} // paddle +} // namespace paddle From 8d76cf397d73825a7088f5c4f92c3f0634f0222f Mon Sep 17 00:00:00 2001 From: chengduo Date: Fri, 29 Jun 2018 14:25:26 +0800 Subject: [PATCH 070/130] Fix TensorCopy bug (#11822) * Fix tensorcopy bug * follow comment * Refine TensorCopy --- paddle/fluid/framework/parallel_executor.cc | 3 -- paddle/fluid/framework/tensor_util.cc | 36 ++++++++++++++++++--- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/paddle/fluid/framework/parallel_executor.cc b/paddle/fluid/framework/parallel_executor.cc index 751b10eeee..b53a6f43fb 100644 --- a/paddle/fluid/framework/parallel_executor.cc +++ b/paddle/fluid/framework/parallel_executor.cc @@ -253,9 +253,6 @@ void ParallelExecutor::FeedAndSplitTensorIntoLocalScopes( t->set_lod(lod_tensors[j].lod()); } } - for (auto &p : member_->places_) { - platform::DeviceContextPool::Instance().Get(p)->Wait(); - } } ParallelExecutor::~ParallelExecutor() { diff --git a/paddle/fluid/framework/tensor_util.cc b/paddle/fluid/framework/tensor_util.cc index e5bc74755f..31516a884b 100644 --- a/paddle/fluid/framework/tensor_util.cc +++ b/paddle/fluid/framework/tensor_util.cc @@ -69,19 +69,47 @@ void TensorCopy(const Tensor& src, const platform::Place& dst_place, PADDLE_ENFORCE(platform::is_gpu_place(ctx_place)); auto stream = reinterpret_cast(ctx).stream(); - memory::Copy(dst_gpu_place, dst_ptr, src_gpu_place, src_ptr, size, stream); + if (platform::is_same_place(src_place, dst_place)) { + memory::Copy(dst_gpu_place, dst_ptr, src_gpu_place, src_ptr, size, + stream); + } else { + // NOTE(zcd): Because TensorCopy is an async operation, when the src_place + // and dst_place are two different GPU, to ensure that the operation can + // be carried out correctly, we should make ctx wait. + // If ctx_place and src_place are the same, we should add ctx.Wait() + // after memory::Copy; if ctx_place and dst_place are the same, we should + // add ctx.Wait() before memory::Copy. + if (platform::is_same_place(ctx_place, src_place)) { + memory::Copy(dst_gpu_place, dst_ptr, src_gpu_place, src_ptr, size, + stream); + ctx.Wait(); + } else if (platform::is_same_place(ctx_place, dst_place)) { + ctx.Wait(); + memory::Copy(dst_gpu_place, dst_ptr, src_gpu_place, src_ptr, size, + stream); + } else { + PADDLE_THROW("ctx is not belong to dst_gpu_place or src_gpu_place."); + } + } } #endif } void TensorCopy(const Tensor& src, const platform::Place& dst_place, Tensor* dst) { + // NOTE(zcd): If the src.place() and dst_place are two different GPU, + // the copy operation is carried out on the dst_place's stream. This is + // very important, because TensorCopy is an async operator, and in most + // case, once this copy operator returns, dst is to be used in dst_place's + // stream, if this copy operation is carried out on the src_place's stream, + // when dst is used in dst_place's stream the copy operation may be + // not completed. platform::DeviceContextPool& pool = platform::DeviceContextPool::Instance(); const platform::DeviceContext* dev_ctx; - if (platform::is_gpu_place(src.place())) { - dev_ctx = pool.Get(src.place()); - } else { + if (platform::is_gpu_place(dst_place)) { dev_ctx = pool.Get(dst_place); + } else { + dev_ctx = pool.Get(src.place()); } TensorCopy(src, dst_place, *dev_ctx, dst); } From aab47cc08d162624f65af5a6c10124f5e4837423 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Fri, 29 Jun 2018 15:25:57 +0800 Subject: [PATCH 071/130] fix Mac compile errors (#11829) --- .../analysis/tensorrt_subgraph_node_mark_pass.h | 13 ++++++++++--- .../inference/analysis/tensorrt_subgraph_pass.h | 9 +++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h b/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h index 6cfac55d3b..c558a6ebbd 100644 --- a/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h +++ b/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h @@ -16,6 +16,10 @@ * This file defines TensorRTSubgraphNodeMarkPass which helps to mark the ops * that supported by TensorRT engine. */ + +#pragma once + +#include #include "paddle/fluid/inference/analysis/pass.h" #include "paddle/fluid/inference/analysis/subgraph_splitter.h" @@ -30,7 +34,8 @@ class TensorRTSubgraphNodeMarkPass : public DataFlowGraphPass { public: using teller_t = SubGraphSplitter::NodeInsideSubgraphTeller; - TensorRTSubgraphNodeMarkPass(const teller_t& teller) : teller_(teller) {} + explicit TensorRTSubgraphNodeMarkPass(const teller_t& teller) + : teller_(teller) {} bool Initialize(Argument* argument) override { return true; } @@ -38,8 +43,10 @@ class TensorRTSubgraphNodeMarkPass : public DataFlowGraphPass { // sub-graph into TensorRT. void Run(DataFlowGraph* graph) override; - std::string repr() const { return "tensorrt-sub-subgraph-mark"; } - std::string description() const { return "tensorrt sub-graph mark pass"; } + std::string repr() const override { return "tensorrt-sub-subgraph-mark"; } + std::string description() const override { + return "tensorrt sub-graph mark pass"; + } Pass* CreateGraphvizDebugerPass() const override; bool Finalize() override; diff --git a/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.h b/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.h index 11e0880695..c6741a9209 100644 --- a/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.h +++ b/paddle/fluid/inference/analysis/tensorrt_subgraph_pass.h @@ -14,6 +14,7 @@ limitations under the License. */ #pragma once +#include #include "paddle/fluid/inference/analysis/node.h" #include "paddle/fluid/inference/analysis/pass.h" #include "paddle/fluid/inference/analysis/subgraph_splitter.h" @@ -30,7 +31,7 @@ class TensorRTSubGraphPass : public DataFlowGraphPass { // Tell whether to transform a sub-graph into TensorRT. using NodeInsideSubgraphTeller = SubGraphFuse::NodeInsideSubgraphTeller; - TensorRTSubGraphPass(const NodeInsideSubgraphTeller& teller); + explicit TensorRTSubGraphPass(const NodeInsideSubgraphTeller& teller); bool Initialize(Argument* argument) override { return true; } @@ -40,8 +41,8 @@ class TensorRTSubGraphPass : public DataFlowGraphPass { bool Finalize() override { return true; } - std::string repr() const { return "tensorrt-sub-graph"; } - std::string description() const { return "tensorrt sub graph pass"; } + std::string repr() const override { return "tensorrt-sub-graph"; } + std::string description() const override { return "tensorrt sub graph pass"; } private: NodeInsideSubgraphTeller node_inside_subgraph_teller_; @@ -49,4 +50,4 @@ class TensorRTSubGraphPass : public DataFlowGraphPass { } // namespace analysis } // namespace inference -} // paddle +} // namespace paddle From 250546005b49992ddcc32d546813168bb921e35b Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Fri, 29 Jun 2018 16:20:59 +0800 Subject: [PATCH 072/130] remove stale coverage badge We should aim for 80%. Currently, this broken 29% is scary. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 8d89c6b1ec..63abca069a 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ [![Build Status](https://travis-ci.org/PaddlePaddle/Paddle.svg?branch=develop)](https://travis-ci.org/PaddlePaddle/Paddle) [![Documentation Status](https://img.shields.io/badge/docs-latest-brightgreen.svg?style=flat)](http://www.paddlepaddle.org/docs/develop/documentation/en/getstarted/index_en.html) [![Documentation Status](https://img.shields.io/badge/中文文档-最新-brightgreen.svg)](http://www.paddlepaddle.org/docs/develop/documentation/zh/getstarted/index_cn.html) -[![Coverage Status](https://coveralls.io/repos/github/PaddlePaddle/Paddle/badge.svg?branch=develop)](https://coveralls.io/github/PaddlePaddle/Paddle?branch=develop) [![Release](https://img.shields.io/github/release/PaddlePaddle/Paddle.svg)](https://github.com/PaddlePaddle/Paddle/releases) [![License](https://img.shields.io/badge/license-Apache%202-blue.svg)](LICENSE) From cde5693bdd4331967f5bc27bf4fa852b30fd508a Mon Sep 17 00:00:00 2001 From: Yan Chunwei Date: Fri, 29 Jun 2018 17:06:49 +0800 Subject: [PATCH 073/130] fea/expose infrerence api so (#11793) --- cmake/inference_lib.cmake | 4 ++-- paddle/contrib/inference/CMakeLists.txt | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/cmake/inference_lib.cmake b/cmake/inference_lib.cmake index 850098297e..1231a111f0 100644 --- a/cmake/inference_lib.cmake +++ b/cmake/inference_lib.cmake @@ -163,9 +163,9 @@ if(WITH_CONTRIB) list(APPEND inference_deps contrib_anakin_inference_lib) endif() - copy(contrib_inference_lib DEPS paddle_inference_api + copy(contrib_inference_lib DEPS paddle_inference_api paddle_inference_api_shared SRCS ${PADDLE_SOURCE_DIR}/paddle/contrib/inference/paddle_inference_api.h - ${PADDLE_BINARY_DIR}/paddle/contrib/inference/libpaddle_inference_api.* + ${PADDLE_BINARY_DIR}/paddle/contrib/inference/libpaddle_inference_api* DSTS ${contrib_dst_dir} ${contrib_dst_dir}) list(APPEND inference_deps contrib_inference_lib) endif() diff --git a/paddle/contrib/inference/CMakeLists.txt b/paddle/contrib/inference/CMakeLists.txt index 2cd6ab2bbf..a8bbb4eb80 100644 --- a/paddle/contrib/inference/CMakeLists.txt +++ b/paddle/contrib/inference/CMakeLists.txt @@ -46,6 +46,10 @@ cc_library(paddle_inference_api SRCS paddle_inference_api.cc paddle_inference_api_impl.cc DEPS ${FLUID_CORE_MODULES} ${GLOB_OP_LIB}) +cc_library(paddle_inference_api_shared SHARED + SRCS paddle_inference_api.cc paddle_inference_api_impl.cc + DEPS ${FLUID_CORE_MODULES} ${GLOB_OP_LIB}) + cc_test(test_paddle_inference_api SRCS test_paddle_inference_api.cc DEPS paddle_inference_api) From c2165ffa7b5d5e89c84becf611589a48622f3062 Mon Sep 17 00:00:00 2001 From: gongweibao Date: Fri, 29 Jun 2018 04:08:11 -0500 Subject: [PATCH 074/130] Fix codesytle (#11836) --- paddle/fluid/framework/lod_tensor.cc | 2 +- paddle/fluid/inference/analysis/analyzer.cc | 3 ++- paddle/fluid/inference/analysis/analyzer.h | 2 ++ paddle/fluid/inference/analysis/data_flow_graph.h | 2 +- .../inference/analysis/data_flow_graph_to_fluid_pass.cc | 6 ++++-- .../inference/analysis/data_flow_graph_to_fluid_pass.h | 1 + paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h | 2 +- .../inference/analysis/fluid_to_data_flow_graph_pass.cc | 5 +++-- paddle/fluid/inference/analysis/pass_manager_tester.cc | 6 +++--- .../inference/analysis/tensorrt_subgraph_node_mark_pass.cc | 6 ++++-- 10 files changed, 22 insertions(+), 13 deletions(-) diff --git a/paddle/fluid/framework/lod_tensor.cc b/paddle/fluid/framework/lod_tensor.cc index d29d8ce1c5..5373d769a4 100644 --- a/paddle/fluid/framework/lod_tensor.cc +++ b/paddle/fluid/framework/lod_tensor.cc @@ -68,7 +68,7 @@ std::ostream &operator<<(std::ostream &os, const LoDTensor &t) { // only print first ten elements int64_t size = t.numel() < 10 ? t.numel() : 10; for (int64_t i = 0; i < size; ++i) { - if (t.type().hash_code() == typeid(float).hash_code()) { + if (t.type().hash_code() == typeid(float).hash_code()) { // NOLINT os << t.data()[i] << " "; } else if (t.type().hash_code() == typeid(int64_t).hash_code()) { os << t.data()[i] << " "; diff --git a/paddle/fluid/inference/analysis/analyzer.cc b/paddle/fluid/inference/analysis/analyzer.cc index 5d85530969..a4625f008c 100644 --- a/paddle/fluid/inference/analysis/analyzer.cc +++ b/paddle/fluid/inference/analysis/analyzer.cc @@ -13,6 +13,7 @@ // limitations under the License. #include "paddle/fluid/inference/analysis/analyzer.h" +#include #include "paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.h" #include "paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h" #include "paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.h" @@ -79,4 +80,4 @@ void Analyzer::Run(Argument* argument) { } // namespace analysis } // namespace inference -} // namespace paddle \ No newline at end of file +} // namespace paddle diff --git a/paddle/fluid/inference/analysis/analyzer.h b/paddle/fluid/inference/analysis/analyzer.h index f290a3777d..e9e14fb194 100644 --- a/paddle/fluid/inference/analysis/analyzer.h +++ b/paddle/fluid/inference/analysis/analyzer.h @@ -12,6 +12,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ +#pragma once + /* * This file contains Analyzer, an class that exposed as a library that analyze * and optimize diff --git a/paddle/fluid/inference/analysis/data_flow_graph.h b/paddle/fluid/inference/analysis/data_flow_graph.h index 30c60661f3..a4fefc83e0 100644 --- a/paddle/fluid/inference/analysis/data_flow_graph.h +++ b/paddle/fluid/inference/analysis/data_flow_graph.h @@ -138,7 +138,7 @@ struct GraphTraits { // sub-graph is the inputs nodes and output nodes that doesn't inside the // sub-graph. static std::pair, std::vector> -ExtractInputAndOutputOfSubGraph(std::vector &graph) { +ExtractInputAndOutputOfSubGraph(std::vector &graph) { // NOLINT std::unordered_set nodes(graph.begin(), graph.end()); std::unordered_set inputs; std::unordered_set outputs; diff --git a/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.cc b/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.cc index e74efd17b8..29ca008123 100644 --- a/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.cc +++ b/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.cc @@ -13,6 +13,7 @@ // limitations under the License. #include "paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.h" +#include #include "paddle/fluid/framework/block_desc.h" #include "paddle/fluid/framework/op_desc.h" #include "paddle/fluid/framework/proto_desc.h" @@ -150,13 +151,14 @@ namespace { class DFG_DebuggerPass : public DFG_GraphvizDrawPass { public: using Config = DFG_GraphvizDrawPass::Config; - DFG_DebuggerPass(const Config& config) : DFG_GraphvizDrawPass(config) {} + explicit DFG_DebuggerPass(const Config& config) + : DFG_GraphvizDrawPass(config) {} std::string repr() const override { return "dfg-to-fluid-debuger-pass"; } bool Finalize() override { return true; } }; -} +} // namespace Pass* DataFlowGraphToFluidPass::CreateGraphvizDebugerPass() const { return new DFG_DebuggerPass(DFG_GraphvizDrawPass::Config( diff --git a/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.h b/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.h index 1726e056ed..edc84b02ed 100644 --- a/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.h +++ b/paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.h @@ -19,6 +19,7 @@ #pragma once +#include #include "paddle/fluid/framework/program_desc.h" #include "paddle/fluid/inference/analysis/data_flow_graph.h" #include "paddle/fluid/inference/analysis/pass.h" diff --git a/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h b/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h index b064782586..17445ab440 100644 --- a/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h +++ b/paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h @@ -46,7 +46,7 @@ class DFG_GraphvizDrawPass : public DataFlowGraphPass { const bool display_deleted_node; }; - DFG_GraphvizDrawPass(const Config &config) : config_(config) {} + explicit DFG_GraphvizDrawPass(const Config &config) : config_(config) {} bool Initialize(Argument *argument) override { return true; } void Run(DataFlowGraph *graph) override; diff --git a/paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.cc b/paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.cc index 5d7eb43b7c..e918622d74 100644 --- a/paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.cc +++ b/paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.cc @@ -15,7 +15,7 @@ limitations under the License. */ #include #include -#include "analyzer.h" +#include "paddle/fluid/inference/analysis/analyzer.h" #include "paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h" #include "paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.h" @@ -88,7 +88,8 @@ namespace { class DFG_DebuggerPass : public DFG_GraphvizDrawPass { public: using Config = DFG_GraphvizDrawPass::Config; - DFG_DebuggerPass(const Config &config) : DFG_GraphvizDrawPass(config) {} + explicit DFG_DebuggerPass(const Config &config) + : DFG_GraphvizDrawPass(config) {} std::string repr() const override { return "fluid-to-dfg-debuger-pass"; } bool Finalize() override { return true; } }; diff --git a/paddle/fluid/inference/analysis/pass_manager_tester.cc b/paddle/fluid/inference/analysis/pass_manager_tester.cc index 6caba8f042..dac1c509d7 100644 --- a/paddle/fluid/inference/analysis/pass_manager_tester.cc +++ b/paddle/fluid/inference/analysis/pass_manager_tester.cc @@ -12,14 +12,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/fluid/inference/analysis/pass_manager.h" +#include + #include "paddle/fluid/inference/analysis/data_flow_graph_to_fluid_pass.h" #include "paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h" #include "paddle/fluid/inference/analysis/fluid_to_data_flow_graph_pass.h" +#include "paddle/fluid/inference/analysis/pass_manager.h" #include "paddle/fluid/inference/analysis/ut_helper.h" -#include - namespace paddle { namespace inference { namespace analysis { diff --git a/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.cc b/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.cc index 5ad092a9ed..f736e385c1 100644 --- a/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.cc +++ b/paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.cc @@ -12,10 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h" +#include + #include "paddle/fluid/inference/analysis/analyzer.h" #include "paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h" #include "paddle/fluid/inference/analysis/node_attr_flags.h" +#include "paddle/fluid/inference/analysis/tensorrt_subgraph_node_mark_pass.h" namespace paddle { namespace inference { @@ -29,7 +31,7 @@ void TensorRTSubgraphNodeMarkPass::Run(DataFlowGraph *graph) { class DfgDebuggerPass : public DFG_GraphvizDrawPass { public: - DfgDebuggerPass(const DFG_GraphvizDrawPass::Config &config) + explicit DfgDebuggerPass(const DFG_GraphvizDrawPass::Config &config) : DFG_GraphvizDrawPass(config) {} std::string repr() const override { From 5e2656449c5c193a9b62c13056fccb23b4306a8c Mon Sep 17 00:00:00 2001 From: Yan Chunwei Date: Fri, 29 Jun 2018 17:09:28 +0800 Subject: [PATCH 075/130] add inference-analysis doc (#11813) --- paddle/fluid/inference/analysis/README.md | 57 +++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 paddle/fluid/inference/analysis/README.md diff --git a/paddle/fluid/inference/analysis/README.md b/paddle/fluid/inference/analysis/README.md new file mode 100644 index 0000000000..4c5de189cd --- /dev/null +++ b/paddle/fluid/inference/analysis/README.md @@ -0,0 +1,57 @@ +# Inference Analysis + +The `inference/analysis` module is used to analyze and optimize the inference program, +it references some philosophy from `LLVM/analysis`, +and make the various optimization features be pluggable and co-exist in a pipeline. + +We borrowed some concepts from LLVM, such as + +- [Pass](./pass.h)es to implement optimization that traverse the inference program, +- [DataFlowGraph](./data_flow_graph.h) to represent the data flow graph built from a program, +- [PassManager](./pass_manager.h) to manage a sequence of `Pass`es over a graph. + +There are some other basic concepts here + +- [Node](./node.h), the node in a `DataFlowGraph`, + - `Function`, the Operator in Fluid, + - `Value`, the Variable in Fluid; +- [Argument](./argument.h), the argument that treat as the input and output of all `Pass`es in the pipeline, + +## How it works + +The `inference/analysis` module make all the passes in a pipeline, and works in such way: + +1. Build a `DataFlowGraph` from a Fluid inference ProgramDesc, +2. Call the middle passes one by one, the same `DataFlowGraph` is passed across all the passes, +3. Transform a new ProgramDesc from the modified `DataFlowGraph`. + +The new optimization features can be added as an independent `Pass` and controlled by gflags, +each pass will generate unified debug information or visualization for better debugging. + +## Supported Passes + +### `FluidToDataFlowGraphPass` +Transform the fluid `ProgramDesc` to a `DataFlowGraph` to give an abstract representation for all the middle passes, +this should be the first pass of the pipeline. + +### `DataFlowGraphToFluidPass` +Generate a final `ProgramDesc` from a data flow graph, this should be the last pass of the pipeline. + +### `TensorRTSubgraphNodeMarkPass` +Mark the `Node` that are supported by TensorRT, +this pass will generate a visualization file which can be used for debugging. + +### `TensorRTSubGraphPass` +Split the sub-graph that are can be accelerated by TensorRT. + +### `DFG_GraphvizDrawPass` +This pass is just for debug, it will visualize the `DataFlowGraph` using the [graphviz](http://www.graphviz.org) tool. + +It can be used as a helper class that draws the modified graph after each pass. + +## Utilities + +There is some helper function/class for analysis. + +- [dot.h](./dot.h) give a easy to use interface for generating `DOT` codes, +- [graph_traits.h](./graph_traits.h) contains the graph traversal algorithms, it uses `iterator` to make the algorithms easy to share across different passes. From 6a35899131010ffbfdf4f567f08e55a3590386af Mon Sep 17 00:00:00 2001 From: guochaorong Date: Fri, 29 Jun 2018 18:41:13 +0800 Subject: [PATCH 076/130] Revert "Extend fill_zeros_like_op for zero-filling an LoDTensorArray (#11496)" This reverts commit bc28cf613f9e41908d6da9a889cbb3242e0589d2. --- paddle/fluid/framework/operator.cc | 4 - paddle/fluid/operators/fill_zeros_like_op.cc | 10 +-- paddle/fluid/operators/fill_zeros_like_op.h | 30 ++----- python/paddle/fluid/layers/nn.py | 38 -------- .../test_fill_zeros_like_op_for_array.py | 88 ------------------- 5 files changed, 9 insertions(+), 161 deletions(-) delete mode 100644 python/paddle/fluid/tests/unittests/test_fill_zeros_like_op_for_array.py diff --git a/paddle/fluid/framework/operator.cc b/paddle/fluid/framework/operator.cc index aa1a42fc97..4586183d8d 100644 --- a/paddle/fluid/framework/operator.cc +++ b/paddle/fluid/framework/operator.cc @@ -748,10 +748,6 @@ proto::VarType::Type OperatorWithKernel::IndicateDataType( t = &var->Get(); } else if (var->IsType()) { t = &(var->Get().value()); - } else if (var->IsType()) { - const LoDTensorArray& arr = var->Get(); - PADDLE_ENFORCE(arr.size() > 0); - t = &(arr[0]); } if (t != nullptr) { int tmp = static_cast(ToDataType(t->type())); diff --git a/paddle/fluid/operators/fill_zeros_like_op.cc b/paddle/fluid/operators/fill_zeros_like_op.cc index a9d47c0172..d67bec36b3 100644 --- a/paddle/fluid/operators/fill_zeros_like_op.cc +++ b/paddle/fluid/operators/fill_zeros_like_op.cc @@ -26,12 +26,8 @@ class FillZerosLikeOp : public framework::OperatorWithKernel { "Input(X) of FillZerosLikeOp should not be null."); PADDLE_ENFORCE(ctx->HasOutput("Out"), "Output(Out) of FillZerosLikeOp should not be null."); - - if (ctx->IsRuntime() && - ctx->GetOutputsVarType("Out")[0] == - framework::proto::VarType::LOD_TENSOR_ARRAY) { - return; // skip runtime infershape when is tensor array; - } + ctx->SetOutputDim("Out", ctx->GetInputDim("X")); + ctx->ShareLoD("X", /*->*/ "Out"); } }; @@ -43,7 +39,7 @@ class FillZerosLikeOpMaker : public framework::OpProtoAndCheckerMaker { AddComment(R"DOC( FillZerosLike Operator. -Fill up a variable with zeros, supporting both LoDTensor and LoDTensorArray. +Fill up a variable with zeros. The output will have the same size as the input. )DOC"); diff --git a/paddle/fluid/operators/fill_zeros_like_op.h b/paddle/fluid/operators/fill_zeros_like_op.h index daa6521b32..4bbe0df6b6 100644 --- a/paddle/fluid/operators/fill_zeros_like_op.h +++ b/paddle/fluid/operators/fill_zeros_like_op.h @@ -13,7 +13,6 @@ See the License for the specific language governing permissions and limitations under the License. */ #pragma once -#include "paddle/fluid/framework/lod_tensor_array.h" #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/operators/math/math_function.h" @@ -24,29 +23,12 @@ template class FillZerosLikeKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { - auto var = context.InputVar("X"); - if (var->IsType()) { - auto& input = *context.Input("X"); - auto& output = *context.Output("Out"); - output.Resize(input.dims()); - output.set_lod(input.lod()); - output.mutable_data(context.GetPlace()); - math::SetConstant setter; - setter(context.template device_context(), &(output), - static_cast(0)); - } else if (var->IsType()) { - auto& input = *context.Input("X"); - auto& output = *context.Output("Out"); - output.resize(input.size()); - for (auto i = 0; i < input.size(); i++) { - output[i].Resize(input[i].dims()); - output[i].set_lod(input[i].lod()); - output[i].mutable_data(context.GetPlace()); - math::SetConstant setter; - setter(context.template device_context(), &(output[i]), - static_cast(0)); - } - } + auto* out = context.Output("Out"); + out->mutable_data(context.GetPlace()); + + math::SetConstant setter; + setter(context.template device_context(), out, + static_cast(0)); } }; diff --git a/python/paddle/fluid/layers/nn.py b/python/paddle/fluid/layers/nn.py index 61c01b3b00..bcf520d5a4 100644 --- a/python/paddle/fluid/layers/nn.py +++ b/python/paddle/fluid/layers/nn.py @@ -95,7 +95,6 @@ __all__ = [ 'relu', 'log', 'crop', - 'fill_zeros_like', ] @@ -5185,40 +5184,3 @@ def crop(x, shape=None, offsets=None, name=None): outputs={'Out': out}, attrs=None if len(attrs) == 0 else attrs) return out - - -def fill_zeros_like(x): - """ - This layer takes an input and outputs a variable that has the same structure as - the input and with all the element values as zero. The variable can be a Tensor - or TensorArray. - - .. code-block:: text - - - Given - X = [[0, 1, 2, 0], - [0, 3, 4, 0], - [0, 0, 0, 0]], - output is: - Out = [[0, 0, 0, 0], - [0, 0, 0, 0], - [0, 0, 0, 0]]. - - Args: - x (Variable): The input variable, which could be a tensor or tensor array - - Returns: - Variable: The zero-filled variable, which has the same type and shape as - the input variable. - - Examples: - - .. code-block:: python - y = fluid.layers.fill_zeros_like(x) - """ - helper = LayerHelper('fill_zeros_like', **locals()) - out = helper.create_tmp_variable(dtype=x.dtype) - helper.append_op( - type='fill_zeros_like', inputs={'X': [x]}, outputs={'Out': [out]}) - return out diff --git a/python/paddle/fluid/tests/unittests/test_fill_zeros_like_op_for_array.py b/python/paddle/fluid/tests/unittests/test_fill_zeros_like_op_for_array.py deleted file mode 100644 index 23871508d8..0000000000 --- a/python/paddle/fluid/tests/unittests/test_fill_zeros_like_op_for_array.py +++ /dev/null @@ -1,88 +0,0 @@ -# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest -import paddle.fluid.core as core -import numpy -import paddle.fluid.layers as layers -from paddle.fluid.framework import Program, program_guard -from paddle.fluid.executor import Executor - -import paddle.fluid as fluid -import paddle.fluid.core as core - - -class TestFillZerosLikeOpForTensorArray(unittest.TestCase): - def place(self): - return core.CPUPlace() - - def test_zero_filling_lod_tensor_array(self): - tensor = core.LoDTensor() - tensor.set( - numpy.arange(20).reshape(20, 1).astype('int32'), self.place()) - tensor.set_lod([[0, 2, 5], [0, 3, 9, 11, 17, 20]]) - - expect = [ - numpy.array( - [0, 0, 0, 0, 0], dtype='int32'), numpy.array( - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype='int32'), - numpy.array( - [0, 0, 0], dtype='int32') - ] - - lod = [[[0, 2, 5]], [[0, 6, 12]], [[0, 3]]] - self.main( - tensor=tensor, - expect_array=expect, - expect_lod=lod, - expect_max_len=3) - - def main(self, tensor, expect_array, expect_lod, expect_max_len, level=0): - place = self.place() - program = Program() - with program_guard(program): - x = layers.data(name='x', shape=[10]) - x.persistable = True - table = layers.lod_rank_table(x, level=level) - max_len = layers.max_sequence_len(table) - max_len.persistable = True - array = layers.lod_tensor_to_array(x, table) - array = layers.fill_zeros_like(array) - array.persistable = True - - result = layers.array_to_lod_tensor(array, table) - result.persistable = True - exe = Executor(place) - scope = core.Scope() - exe.run(program, feed={'x': tensor}, scope=scope) - var = scope.find_var(array.name) - array = var.get_lod_tensor_array() - if expect_array is not None and expect_lod is not None: - self.check_array_same(array, expect_array, expect_lod) - - self.assertEqual( - numpy.array(scope.find_var(max_len.name).get_tensor())[0], - expect_max_len) - - def check_array_same(self, array, expect_tensor, expect_lod): - self.assertEqual(len(expect_tensor), len(array)) - for i, exp in enumerate(zip(expect_tensor, expect_lod)): - exp_tensor, exp_lod = exp - exp_tensor = numpy.expand_dims(exp_tensor, axis=1) - self.assertTrue(numpy.allclose(exp_tensor, numpy.array(array[i]))) - self.assertEqual(exp_lod, array[i].lod()) - - -if __name__ == '__main__': - unittest.main() From 7b54f16855ca3aaef6ff1cdb9bf7a4d4f1d8b6c1 Mon Sep 17 00:00:00 2001 From: chengduo Date: Fri, 29 Jun 2018 20:41:37 +0800 Subject: [PATCH 077/130] Follow comment (#11845) --- paddle/fluid/framework/tensor_util.cc | 17 ++--------------- paddle/fluid/framework/tensor_util.h | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/paddle/fluid/framework/tensor_util.cc b/paddle/fluid/framework/tensor_util.cc index 31516a884b..f98011e896 100644 --- a/paddle/fluid/framework/tensor_util.cc +++ b/paddle/fluid/framework/tensor_util.cc @@ -73,18 +73,12 @@ void TensorCopy(const Tensor& src, const platform::Place& dst_place, memory::Copy(dst_gpu_place, dst_ptr, src_gpu_place, src_ptr, size, stream); } else { - // NOTE(zcd): Because TensorCopy is an async operation, when the src_place - // and dst_place are two different GPU, to ensure that the operation can - // be carried out correctly, we should make ctx wait. - // If ctx_place and src_place are the same, we should add ctx.Wait() - // after memory::Copy; if ctx_place and dst_place are the same, we should - // add ctx.Wait() before memory::Copy. if (platform::is_same_place(ctx_place, src_place)) { memory::Copy(dst_gpu_place, dst_ptr, src_gpu_place, src_ptr, size, stream); - ctx.Wait(); + platform::DeviceContextPool::Instance().Get(src.place())->Wait(); } else if (platform::is_same_place(ctx_place, dst_place)) { - ctx.Wait(); + platform::DeviceContextPool::Instance().Get(src.place())->Wait(); memory::Copy(dst_gpu_place, dst_ptr, src_gpu_place, src_ptr, size, stream); } else { @@ -97,13 +91,6 @@ void TensorCopy(const Tensor& src, const platform::Place& dst_place, void TensorCopy(const Tensor& src, const platform::Place& dst_place, Tensor* dst) { - // NOTE(zcd): If the src.place() and dst_place are two different GPU, - // the copy operation is carried out on the dst_place's stream. This is - // very important, because TensorCopy is an async operator, and in most - // case, once this copy operator returns, dst is to be used in dst_place's - // stream, if this copy operation is carried out on the src_place's stream, - // when dst is used in dst_place's stream the copy operation may be - // not completed. platform::DeviceContextPool& pool = platform::DeviceContextPool::Instance(); const platform::DeviceContext* dev_ctx; if (platform::is_gpu_place(dst_place)) { diff --git a/paddle/fluid/framework/tensor_util.h b/paddle/fluid/framework/tensor_util.h index dca279b693..4457382ade 100644 --- a/paddle/fluid/framework/tensor_util.h +++ b/paddle/fluid/framework/tensor_util.h @@ -23,10 +23,25 @@ limitations under the License. */ namespace paddle { namespace framework { +// NOTE(zcd): Because TensorCopy is an async operation, when the src_place +// and dst_place are two different GPU, to ensure that the operation can +// be carried out correctly, there is a src_ctx wait operation in TensorCopy. +// If ctx_place and src_place are the same, src_ctx.Wait() is added +// after memory::Copy; if ctx_place and dst_place are the same, +// src_ctx.Wait() is added before memory::Copy. void TensorCopy(const Tensor& src, const platform::Place& dst_place, const platform::DeviceContext& ctx, Tensor* dst); + +// NOTE(zcd): If the src.place() and dst_place are two different GPU, +// the copy operation is carried out on the dst_place's stream. This is +// very important, because TensorCopy is an async operator, and in most +// case, once this copy operator returns, dst is to be used in dst_place's +// stream, if this copy operation is carried out on the src_place's stream, +// when dst is used in dst_place's stream the copy operation may be +// not completed. void TensorCopy(const Tensor& src, const platform::Place& dst_place, Tensor* dst); + void TensorCopySync(const Tensor& src, const platform::Place& dst_place, Tensor* dst); From d2ad4a5c419ee756b44f7e8640647324e4e1b2ef Mon Sep 17 00:00:00 2001 From: chengduo Date: Fri, 29 Jun 2018 22:36:23 +0800 Subject: [PATCH 078/130] Init allocated memory for unit test (#11657) * memory init * add env * refine anounce * Add check for Nan * Debug * Add env for cc_test * Add env for py_test and nv_test * Remove py_test env * Add env for py_test * serial test_recognize_digits * Test FLAGS_init_allocated_mem function for unit test * Init allocated mem for op unit test * Add env for all unit test --- cmake/generic.cmake | 4 +++- paddle/fluid/memory/malloc.cc | 15 +++++++++++++++ python/paddle/fluid/__init__.py | 3 ++- .../unittests/parallel_executor_test_base.py | 8 ++++++++ .../test_parallel_executor_test_while_train.py | 10 ++++++++++ 5 files changed, 38 insertions(+), 2 deletions(-) diff --git a/cmake/generic.cmake b/cmake/generic.cmake index c4deef6f57..fd7fc16bff 100644 --- a/cmake/generic.cmake +++ b/cmake/generic.cmake @@ -264,6 +264,7 @@ function(cc_test TARGET_NAME) WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) if (${cc_test_SERIAL}) set_property(TEST ${TARGET_NAME} PROPERTY SERIAL 1) + set_property(TEST ${TARGET_NAME} PROPERTY ENVIRONMENT FLAGS_init_allocated_mem=true) endif() endif() endfunction(cc_test) @@ -328,6 +329,7 @@ function(nv_test TARGET_NAME) add_test(${TARGET_NAME} ${TARGET_NAME}) if (nv_test_SERIAL) set_property(TEST ${TARGET_NAME} PROPERTY SERIAL 1) + set_property(TEST ${TARGET_NAME} PROPERTY ENVIRONMENT FLAGS_init_allocated_mem=true) endif() endif() endfunction(nv_test) @@ -575,7 +577,7 @@ function(py_test TARGET_NAME) set(multiValueArgs SRCS DEPS ARGS ENVS) cmake_parse_arguments(py_test "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) add_test(NAME ${TARGET_NAME} - COMMAND env PYTHONPATH=${PADDLE_BINARY_DIR}/python ${py_test_ENVS} + COMMAND env FLAGS_init_allocated_mem=true PYTHONPATH=${PADDLE_BINARY_DIR}/python ${py_test_ENVS} ${PYTHON_EXECUTABLE} -u ${py_test_SRCS} ${py_test_ARGS} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) endif() diff --git a/paddle/fluid/memory/malloc.cc b/paddle/fluid/memory/malloc.cc index 0c74f62de5..bd98ed8189 100644 --- a/paddle/fluid/memory/malloc.cc +++ b/paddle/fluid/memory/malloc.cc @@ -20,6 +20,12 @@ limitations under the License. */ #include "paddle/fluid/memory/detail/system_allocator.h" #include "paddle/fluid/platform/gpu_info.h" +DEFINE_bool(init_allocated_mem, false, + "It is a mistake that the values of the memory allocated by " + "BuddyAllocator are always zeroed in some op's implementation. " + "To find this error in time, we use init_allocated_mem to indicate " + "that initializing the allocated memory with a small value " + "during unit testing."); DECLARE_double(fraction_of_gpu_memory_to_use); namespace paddle { @@ -41,6 +47,9 @@ template <> void* Alloc(platform::CPUPlace place, size_t size) { VLOG(10) << "Allocate " << size << " bytes on " << platform::Place(place); void* p = GetCPUBuddyAllocator()->Alloc(size); + if (FLAGS_init_allocated_mem) { + memset(p, 0xEF, size); + } VLOG(10) << " pointer=" << p; return p; } @@ -104,6 +113,9 @@ void* Alloc(platform::CUDAPlace place, size_t size) { LOG(WARNING) << "GPU memory used: " << Used(place); platform::SetDeviceId(cur_dev); } + if (FLAGS_init_allocated_mem) { + cudaMemset(ptr, 0xEF, size); + } return ptr; } @@ -137,6 +149,9 @@ void* Alloc(platform::CUDAPinnedPlace place, LOG(WARNING) << "cudaMallocHost Cannot allocate " << size << " bytes in CUDAPinnedPlace"; } + if (FLAGS_init_allocated_mem) { + memset(ptr, 0xEF, size); + } return ptr; } diff --git a/python/paddle/fluid/__init__.py b/python/paddle/fluid/__init__.py index 45af83708e..3034c1a087 100644 --- a/python/paddle/fluid/__init__.py +++ b/python/paddle/fluid/__init__.py @@ -118,7 +118,8 @@ def __bootstrap__(): read_env_flags = [ 'use_pinned_memory', 'check_nan_inf', 'benchmark', 'warpctc_dir', - 'eager_delete_scope', 'use_mkldnn', 'initial_cpu_memory_in_mb' + 'eager_delete_scope', 'use_mkldnn', 'initial_cpu_memory_in_mb', + 'init_allocated_mem' ] if core.is_compiled_with_cuda(): read_env_flags += [ diff --git a/python/paddle/fluid/tests/unittests/parallel_executor_test_base.py b/python/paddle/fluid/tests/unittests/parallel_executor_test_base.py index 21f2037ad4..cddf00765f 100644 --- a/python/paddle/fluid/tests/unittests/parallel_executor_test_base.py +++ b/python/paddle/fluid/tests/unittests/parallel_executor_test_base.py @@ -18,6 +18,8 @@ import unittest import paddle.fluid as fluid import time import numpy as np +import math +import sys __all__ = ['TestParallelExecutorBase'] @@ -93,6 +95,12 @@ class TestParallelExecutorBase(unittest.TestCase): print "%.4f Instance per second" % ( (batch_size * iter + 2) / (end - begin)) + avg_last_loss_val = np.array(last_loss).mean() + avg_first_loss_val = np.array(first_loss).mean() + if math.isnan(float(avg_last_loss_val)) or math.isnan( + float(avg_first_loss_val)): + sys.exit("got NaN loss, training failed.") + print first_loss, last_loss # self.assertGreater(first_loss[0], last_loss[0]) return first_loss, last_loss diff --git a/python/paddle/fluid/tests/unittests/test_parallel_executor_test_while_train.py b/python/paddle/fluid/tests/unittests/test_parallel_executor_test_while_train.py index 2527939444..9a2733927d 100644 --- a/python/paddle/fluid/tests/unittests/test_parallel_executor_test_while_train.py +++ b/python/paddle/fluid/tests/unittests/test_parallel_executor_test_while_train.py @@ -16,6 +16,8 @@ import paddle.fluid as fluid import numpy as np import unittest import os +import sys +import math def simple_fc_net(): @@ -73,6 +75,14 @@ class ParallelExecutorTestingDuringTraining(unittest.TestCase): train_loss, = train_exe.run([loss.name], feed=feed_dict) + avg_test_loss_val = np.array(test_loss).mean() + if math.isnan(float(avg_test_loss_val)): + sys.exit("got NaN loss, testing failed.") + + avg_train_loss_val = np.array(train_loss).mean() + if math.isnan(float(avg_train_loss_val)): + sys.exit("got NaN loss, training failed.") + self.assertTrue( np.allclose( train_loss, test_loss, atol=1e-8), From 4b950951d3f13f6b0c3289c7eb9b7afab3794108 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Fri, 29 Jun 2018 14:37:38 +0800 Subject: [PATCH 079/130] Add unittests and fix a few bugs --- .../details/data_balance_op_handle.cc | 1 - .../framework/details/fetch_op_handle.cc | 2 +- .../details/multi_devices_graph_builder.cc | 6 +- paddle/fluid/framework/lod_tensor.cc | 1 + paddle/fluid/operators/read_op.cc | 16 +- .../tests/unittests/test_data_balance.py | 188 ++++++++++++++++++ 6 files changed, 206 insertions(+), 8 deletions(-) create mode 100644 python/paddle/fluid/tests/unittests/test_data_balance.py diff --git a/paddle/fluid/framework/details/data_balance_op_handle.cc b/paddle/fluid/framework/details/data_balance_op_handle.cc index 023e0cdf91..f8d431ef2a 100644 --- a/paddle/fluid/framework/details/data_balance_op_handle.cc +++ b/paddle/fluid/framework/details/data_balance_op_handle.cc @@ -107,7 +107,6 @@ void DataBalanceOpHandle::RunImpl() { auto *tensor_var = local_scope->FindVar(in_var_handles[i]->name_); PADDLE_ENFORCE(tensor_var->IsType()); auto *tensor = tensor_var->GetMutable(); - PADDLE_ENFORCE(places_[place_idx] == tensor->place()); lod_tensors[data_idx].push_back(tensor); int ins_size = tensor->lod().empty() ? tensor->dims()[0] : tensor->NumElements(); diff --git a/paddle/fluid/framework/details/fetch_op_handle.cc b/paddle/fluid/framework/details/fetch_op_handle.cc index 224e8e1f6e..d646c94460 100644 --- a/paddle/fluid/framework/details/fetch_op_handle.cc +++ b/paddle/fluid/framework/details/fetch_op_handle.cc @@ -67,8 +67,8 @@ void FetchOpHandle::RunImpl() { #endif } else { tensors_[i].ShareDataWith(t); - tensors_[i].set_lod(t.lod()); } + tensors_[i].set_lod(t.lod()); } this->WaitAndMergeCPUTensors(); diff --git a/paddle/fluid/framework/details/multi_devices_graph_builder.cc b/paddle/fluid/framework/details/multi_devices_graph_builder.cc index 8a9f0b1054..edfefb8231 100644 --- a/paddle/fluid/framework/details/multi_devices_graph_builder.cc +++ b/paddle/fluid/framework/details/multi_devices_graph_builder.cc @@ -216,11 +216,13 @@ std::unique_ptr MultiDevSSAGraphBuilder::Build( } else { // This op runs on all devices, and its output may have parameter's // gradients. - CreateComputationalOps(&result, *op, places_.size()); - if (op->Type() == "read") { + op->SetAttr("throw_eof_exp", false); + CreateComputationalOps(&result, *op, places_.size()); const auto &data_var_names = op->Output("Out"); InsertDataBalanceOp(&result, data_var_names); + } else { + CreateComputationalOps(&result, *op, places_.size()); } if (!is_forwarding && places_.size() > 1) { diff --git a/paddle/fluid/framework/lod_tensor.cc b/paddle/fluid/framework/lod_tensor.cc index 49672e1181..dcbd2f22fc 100644 --- a/paddle/fluid/framework/lod_tensor.cc +++ b/paddle/fluid/framework/lod_tensor.cc @@ -393,6 +393,7 @@ void LoDTensor::MergeLoDTensor( new_dim[0] += t->dims()[0]; auto &lod = t->lod(); + PADDLE_ENFORCE_EQ(new_lod.size(), lod.size()); for (size_t j = 0; j < lod.size(); ++j) { auto &sub_lod = new_lod[j]; auto &offset = sub_lod.back(); diff --git a/paddle/fluid/operators/read_op.cc b/paddle/fluid/operators/read_op.cc index 8e9f91c185..60e4eb7576 100644 --- a/paddle/fluid/operators/read_op.cc +++ b/paddle/fluid/operators/read_op.cc @@ -67,10 +67,14 @@ class ReadOp : public framework::OperatorBase { std::vector ins; reader->ReadNext(&ins); if (ins.empty()) { - ins.resize(out_arg_names.size()); - for (auto& tensor : ins) { - // data type is not important for subsequent DataBalanceOpHandle - tensor.mutable_data(framework::make_ddim({0}), dev_place); + if (Attr("throw_eof_exp")) { + PADDLE_THROW("There is no next data."); + } else { + ins.resize(out_arg_names.size()); + for (auto& tensor : ins) { + // data type is not important for subsequent DataBalanceOpHandle + tensor.mutable_data(framework::make_ddim({0}), dev_place); + } } } PADDLE_ENFORCE_EQ(ins.size(), out_arg_names.size()); @@ -88,6 +92,10 @@ class ReadOpMaker : public framework::OpProtoAndCheckerMaker { void Make() override { AddInput("Reader", "(ReaderHolder) The executed reader."); AddOutput("Out", "(LoDTensor) The output data.").AsDuplicable(); + AddAttr("throw_eof_exp", + "If set true, an exception will be thrown when the Reader " + "yields empty (which means there is no next data).") + .SetDefault(true); AddComment(R"DOC( Read Operator diff --git a/python/paddle/fluid/tests/unittests/test_data_balance.py b/python/paddle/fluid/tests/unittests/test_data_balance.py new file mode 100644 index 0000000000..44c1adad9e --- /dev/null +++ b/python/paddle/fluid/tests/unittests/test_data_balance.py @@ -0,0 +1,188 @@ +# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +import paddle.fluid as fluid +import paddle.v2 as paddle +import paddle.v2.dataset.mnist as mnist +import numpy as np + + +class TestDataBalance(unittest.TestCase): + def prepare_data(self): + def fake_data_generator(): + for n in xrange(self.total_ins_num): + yield np.ones((3, 4)) * n, n + + # Prepare data + with fluid.program_guard(fluid.Program(), fluid.Program()): + reader = paddle.batch( + fake_data_generator, batch_size=self.batch_size) + feeder = fluid.DataFeeder( + feed_list=[ + fluid.layers.data( + name='image', shape=[3, 4], dtype='float32'), + fluid.layers.data( + name='label', shape=[1], dtype='int64'), + ], + place=fluid.CPUPlace()) + self.num_batches = fluid.recordio_writer.convert_reader_to_recordio_file( + self.data_file_name, reader, feeder) + + def prepare_lod_data(self): + def fake_data_generator(): + for n in xrange(1, self.total_ins_num + 1): + d1 = (np.ones((n, 3)) * n).astype('float32') + d2 = (np.array(n).reshape((1, 1))).astype('int32') + yield d1, d2 + + # Prepare lod data + with fluid.program_guard(fluid.Program(), fluid.Program()): + with fluid.recordio_writer.create_recordio_writer( + filename=self.lod_data_file_name) as writer: + eof = False + generator = fake_data_generator() + while (not eof): + data_batch = [ + np.array([]).reshape((0, 3)), np.array([]).reshape( + (0, 1)) + ] + lod = [0] + for _ in xrange(self.batch_size): + try: + ins = generator.next() + except StopIteration: + eof = True + break + for i, d in enumerate(ins): + data_batch[i] = np.concatenate( + (data_batch[i], d), axis=0) + lod.append(lod[-1] + ins[0].shape[0]) + if data_batch[0].shape[0] > 0: + for i, d in enumerate(data_batch): + t = fluid.LoDTensor() + t.set(data_batch[i], fluid.CPUPlace()) + if i == 0: + t.set_lod([lod]) + writer.append_tensor(t) + writer.complete_append_tensor() + + def setUp(self): + self.use_cuda = fluid.core.is_compiled_with_cuda() + self.data_file_name = './data_balance_test.recordio' + self.lod_data_file_name = './data_balance_with_lod_test.recordio' + self.total_ins_num = 50 + self.batch_size = 10 + self.prepare_data() + self.prepare_lod_data() + + def main(self): + main_prog = fluid.Program() + startup_prog = fluid.Program() + with fluid.program_guard(main_prog, startup_prog): + data_reader = fluid.layers.io.open_files( + filenames=[self.data_file_name], + shapes=[[-1, 3, 4], [-1, 1]], + lod_levels=[0, 0], + dtypes=['float32', 'int64']) + if self.use_cuda: + data_reader = fluid.layers.double_buffer(data_reader) + image, label = fluid.layers.read_file(data_reader) + + place = fluid.CUDAPlace(0) if self.use_cuda else fluid.CPUPlace() + exe = fluid.Executor(place) + exe.run(startup_prog) + + parallel_exe = fluid.ParallelExecutor( + use_cuda=self.use_cuda, main_program=main_prog) + + if (parallel_exe.device_count > self.batch_size): + print("WARNING: Unittest TestDataBalance skipped. \ + For the result is not correct when device count \ + is larger than batch size.") + exit(0) + fetch_list = [image.name, label.name] + + data_appeared = [False] * self.total_ins_num + while (True): + try: + image_val, label_val = parallel_exe.run(fetch_list, + return_numpy=True) + except fluid.core.EnforceNotMet as ex: + self.assertIn("There is no next data.", ex.message) + break + ins_num = image_val.shape[0] + broadcasted_label = np.ones( + (ins_num, 3, 4)) * label_val.reshape((ins_num, 1, 1)) + self.assertEqual(image_val.all(), broadcasted_label.all()) + for l in label_val: + self.assertFalse(data_appeared[l[0]]) + data_appeared[l[0]] = True + for i in data_appeared: + self.assertTrue(i) + + def main_lod(self): + main_prog = fluid.Program() + startup_prog = fluid.Program() + with fluid.program_guard(main_prog, startup_prog): + data_reader = fluid.layers.io.open_files( + filenames=[self.lod_data_file_name], + shapes=[[-1, 3], [-1, 1]], + lod_levels=[1, 0], + dtypes=['float32', 'int32'], + thread_num=1) + ins, label = fluid.layers.read_file(data_reader) + + place = fluid.CUDAPlace(0) if self.use_cuda else fluid.CPUPlace() + exe = fluid.Executor(place) + exe.run(startup_prog) + + parallel_exe = fluid.ParallelExecutor( + use_cuda=self.use_cuda, main_program=main_prog) + + if (parallel_exe.device_count > self.batch_size): + print("WARNING: Unittest TestDataBalance skipped. \ + For the result is not correct when device count \ + is larger than batch size.") + exit(0) + fetch_list = [ins.name, label.name] + + data_appeared = [False] * self.total_ins_num + while (True): + try: + ins_tensor, label_tensor = parallel_exe.run( + fetch_list, return_numpy=False) + except fluid.core.EnforceNotMet as ex: + self.assertIn("There is no next data.", ex.message) + break + + ins_val = np.array(ins_tensor) + label_val = np.array(label_tensor) + ins_lod = ins_tensor.lod()[0] + self.assertEqual(ins_val.shape[1], 3) + self.assertEqual(label_val.shape[1], 1) + self.assertEqual(len(ins_lod) - 1, label_val.shape[0]) + for i in range(0, len(ins_lod) - 1): + ins_elem = ins_val[ins_lod[i]:ins_lod[i + 1]][:] + label_elem = label_val[i][0] + self.assertEqual(ins_elem.all(), label_elem.all()) + self.assertFalse(data_appeared[int(label_elem - 1)]) + data_appeared[int(label_elem - 1)] = True + + for i in data_appeared: + self.assertTrue(i) + + def test_all(self): + self.main() + self.main_lod() From 3606a306f2c90fe0277f02577fd321b175b365a2 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Sat, 30 Jun 2018 01:06:15 +0800 Subject: [PATCH 080/130] refine --- python/paddle/fluid/tests/unittests/test_data_balance.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python/paddle/fluid/tests/unittests/test_data_balance.py b/python/paddle/fluid/tests/unittests/test_data_balance.py index 44c1adad9e..b558d7c2ea 100644 --- a/python/paddle/fluid/tests/unittests/test_data_balance.py +++ b/python/paddle/fluid/tests/unittests/test_data_balance.py @@ -15,7 +15,6 @@ import unittest import paddle.fluid as fluid import paddle.v2 as paddle -import paddle.v2.dataset.mnist as mnist import numpy as np From 2547c4858cf71083c1e42e413885db40e352c165 Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Sat, 30 Jun 2018 11:20:47 +0800 Subject: [PATCH 081/130] add no_random args in fluid_benchmark.py --- benchmark/fluid/args.py | 6 +++++- benchmark/fluid/fluid_benchmark.py | 10 ++++++---- benchmark/fluid/models/resnet.py | 4 ++-- 3 files changed, 13 insertions(+), 7 deletions(-) mode change 100755 => 100644 benchmark/fluid/fluid_benchmark.py diff --git a/benchmark/fluid/args.py b/benchmark/fluid/args.py index 99c9d79b06..a79f25ccc6 100644 --- a/benchmark/fluid/args.py +++ b/benchmark/fluid/args.py @@ -125,6 +125,10 @@ def parse_args(): parser.add_argument( '--use_inference_transpiler', action='store_true', - help='If set, uses inference transpiler to optimize the program.') + help='If set, use inference transpiler to optimize the program.') + parser.add_argument( + '--no_random', + action='store_true', + help='If set, keep the random seed and do not shuffle the data.') args = parser.parse_args() return args diff --git a/benchmark/fluid/fluid_benchmark.py b/benchmark/fluid/fluid_benchmark.py old mode 100755 new mode 100644 index dcd4d9ea95..94ea7bd6ac --- a/benchmark/fluid/fluid_benchmark.py +++ b/benchmark/fluid/fluid_benchmark.py @@ -132,10 +132,6 @@ def train(avg_loss, infer_prog, optimizer, train_reader, test_reader, batch_acc, exe.run(startup_prog) # Use inference_transpiler to speedup - if args.use_inference_transpiler: - t = fluid.InferenceTranspiler() - t.transpile(infer_prog, place) - if not args.use_reader_op: feed_var_list = [ var for var in train_prog.global_block().vars.itervalues() @@ -186,6 +182,10 @@ def train(avg_loss, infer_prog, optimizer, train_reader, test_reader, batch_acc, print("Pass: %d, Loss: %f" % (pass_id, np.mean(train_losses))), # evaluation if not args.no_test and batch_acc and not args.use_reader_op: + if args.use_inference_transpiler: + t = fluid.InferenceTranspiler() + t.transpile(infer_prog, place) + pass_test_acc = test(exe, infer_prog, test_reader, feeder, batch_acc) print(", Test Accuracy: %f" % pass_test_acc) @@ -316,6 +316,8 @@ def main(): args = parse_args() print_arguments(args) print_paddle_envs() + if args.no_random: + fluid.default_startup_program().random_seed = 1 # the unique trainer id, starting from 0, needed by trainer # only diff --git a/benchmark/fluid/models/resnet.py b/benchmark/fluid/models/resnet.py index 9ed1093c54..d44a9c07d3 100644 --- a/benchmark/fluid/models/resnet.py +++ b/benchmark/fluid/models/resnet.py @@ -197,12 +197,12 @@ def get_model(args): optimizer = fluid.optimizer.Momentum(learning_rate=0.01, momentum=0.9) batched_train_reader = paddle.batch( - paddle.reader.shuffle( + train_reader if args.no_random else paddle.reader.shuffle( train_reader, buf_size=5120), batch_size=args.batch_size * args.gpus, drop_last=True) batched_test_reader = paddle.batch( - train_reader, batch_size=args.batch_size, drop_last=True) + test_reader, batch_size=args.batch_size, drop_last=True) return avg_cost, inference_program, optimizer, batched_train_reader,\ batched_test_reader, batch_acc From 74dce39072492d4e0c701f2848b4c2070b82dbba Mon Sep 17 00:00:00 2001 From: Yan Chunwei Date: Sat, 30 Jun 2018 16:45:03 +0800 Subject: [PATCH 082/130] fix anakin compile manylinux (#11861) --- cmake/inference_lib.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/inference_lib.cmake b/cmake/inference_lib.cmake index 0c720faa35..c697971323 100644 --- a/cmake/inference_lib.cmake +++ b/cmake/inference_lib.cmake @@ -141,7 +141,7 @@ set(inference_deps paddle_fluid_shared paddle_fluid) if(WITH_CONTRIB) message(STATUS "installing contrib") set(contrib_dst_dir "${FLUID_INSTALL_DIR}/contrib/inference") - if (WITH_ANAKIN) + if (WITH_ANAKIN AND WITH_GPU) copy(contrib_anakin_inference_lib DEPS paddle_inference_api inference_anakin_api SRCS ${PADDLE_BINARY_DIR}/paddle/contrib/inference/libinference_anakin_api* # compiled anakin api From e2b1c5d925f3eccca028d90cf3f8853cb369c774 Mon Sep 17 00:00:00 2001 From: gongweibao Date: Sat, 30 Jun 2018 04:13:32 -0500 Subject: [PATCH 083/130] fix code style (#11862) --- paddle/fluid/platform/mkldnn_helper.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/paddle/fluid/platform/mkldnn_helper.h b/paddle/fluid/platform/mkldnn_helper.h index a6cccc3121..33fec2c107 100644 --- a/paddle/fluid/platform/mkldnn_helper.h +++ b/paddle/fluid/platform/mkldnn_helper.h @@ -14,6 +14,7 @@ limitations under the License. */ #pragma once #include +#include #include #include "paddle/fluid/framework/operator.h" #include "paddle/fluid/platform/place.h" @@ -182,10 +183,11 @@ class MKLDNNHandler { } std::shared_ptr AcquireMemory( - mkldnn::memory::primitive_desc& mpd, - mkldnn::memory::primitive_desc& user_mpd, + mkldnn::memory::primitive_desc& mpd, // NOLINT + mkldnn::memory::primitive_desc& user_mpd, // NOLINT const std::shared_ptr user_memory_p, - const std::string& suffix, std::vector& pipeline) { + const std::string& suffix, + std::vector& pipeline) { // NOLINT // create reorder primitive if the input format is not the preferred one auto local_key = key_ + suffix; auto key_reorder_p = key_ + suffix + "reorder_p"; @@ -218,7 +220,7 @@ class MKLDNNHandler { return target_memory_p; } - static std::string GetHash(mkldnn::memory::dims& operand_dims, + static std::string GetHash(mkldnn::memory::dims& operand_dims, // NOLINT const std::string& suffix) { auto dims2str = [](const mkldnn::memory::dims& operand_dims) { std::string dstr = ""; @@ -227,6 +229,7 @@ class MKLDNNHandler { } return dstr; }; + return dims2str(operand_dims) + suffix; } From c225d7a298acba995f6fe874c2abf5590b729d93 Mon Sep 17 00:00:00 2001 From: Yibing Liu Date: Sat, 30 Jun 2018 02:40:32 -0700 Subject: [PATCH 084/130] Use real test data for fit_a_line model to get valid result --- python/paddle/fluid/tests/book/test_fit_a_line.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/python/paddle/fluid/tests/book/test_fit_a_line.py b/python/paddle/fluid/tests/book/test_fit_a_line.py index 74f96f456a..71bf5f8b3a 100644 --- a/python/paddle/fluid/tests/book/test_fit_a_line.py +++ b/python/paddle/fluid/tests/book/test_fit_a_line.py @@ -110,14 +110,23 @@ def infer(use_cuda, save_dirname=None): # The input's dimension should be 2-D and the second dim is 13 # The input data should be >= 0 batch_size = 10 - tensor_x = numpy.random.uniform(0, 10, - [batch_size, 13]).astype("float32") + + test_reader = paddle.batch( + paddle.dataset.uci_housing.test(), batch_size=batch_size) + + test_data = test_reader().next() + test_feat = numpy.array( + [data[0] for data in test_data]).astype("float32") + test_label = numpy.array( + [data[1] for data in test_data]).astype("float32") + assert feed_target_names[0] == 'x' results = exe.run(inference_program, - feed={feed_target_names[0]: tensor_x}, + feed={feed_target_names[0]: numpy.array(test_feat)}, fetch_list=fetch_targets) print("infer shape: ", results[0].shape) print("infer results: ", results[0]) + print("ground truth: ", test_label) def main(use_cuda, is_local=True): From 28172bbb8e3c9126c6a188d5faafa2603323077c Mon Sep 17 00:00:00 2001 From: Yan Chunwei Date: Sat, 30 Jun 2018 20:33:25 +0800 Subject: [PATCH 085/130] add debug to replacing enforce with GLOG for debug (#11244) --- CMakeLists.txt | 5 +++++ paddle/fluid/framework/tensor_impl.h | 12 ++++++------ paddle/fluid/platform/enforce.h | 29 ++++++++++++++++++++++++++++ paddle/fluid/string/printf.h | 2 +- 4 files changed, 41 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4117f07721..b216429272 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,6 +61,7 @@ option(EIGEN_USE_THREADS "Compile with multi-threaded Eigen" OFF) option(WITH_ARM_FP16 "Use half precision support on armv8.2-a cpu" OFF) option(WITH_FAST_BUNDLE_TEST "Bundle tests that can be run in a single process together to reduce launch overhead" OFF) option(WITH_CONTRIB "Compile the third-party contributation" OFF) +option(REPLACE_ENFORCE_GLOG "Replace PADDLE_ENFORCE with glog/CHECK for better debug." OFF) option(WITH_ANAKIN "Compile with Anakin library" OFF) option(WITH_GRPC "Use grpc as the default rpc framework" ${WITH_DISTRIBUTE}) @@ -131,6 +132,10 @@ if (NOT DEFINED WITH_MKLDNN) set(WITH_MKLDNN OFF) endif() endif() + +if (REPLACE_ENFORCE_GLOG) + add_definitions("-DREPLACE_ENFORCE_GLOG") +endif() ######################################################################################## include(external/mklml) # download mklml package diff --git a/paddle/fluid/framework/tensor_impl.h b/paddle/fluid/framework/tensor_impl.h index 96114678a9..7f678f869a 100644 --- a/paddle/fluid/framework/tensor_impl.h +++ b/paddle/fluid/framework/tensor_impl.h @@ -23,9 +23,9 @@ namespace framework { template inline const T* Tensor::data() const { check_memory_size(); - PADDLE_ENFORCE(std::is_same::value || - holder_->type() == std::type_index(typeid(T)), - "Tensor holds the wrong type, it holds %s", + bool valid = std::is_same::value || + holder_->type() == std::type_index(typeid(T)); + PADDLE_ENFORCE(valid, "Tensor holds the wrong type, it holds %s", this->holder_->type().name()); return reinterpret_cast( @@ -37,9 +37,9 @@ inline bool Tensor::IsInitialized() const { return holder_ != nullptr; } template inline T* Tensor::data() { check_memory_size(); - PADDLE_ENFORCE(std::is_same::value || - holder_->type() == std::type_index(typeid(T)), - "Tensor holds the wrong type, it holds %s", + bool valid = std::is_same::value || + holder_->type() == std::type_index(typeid(T)); + PADDLE_ENFORCE(valid, "Tensor holds the wrong type, it holds %s", this->holder_->type().name()); return reinterpret_cast(reinterpret_cast(holder_->ptr()) + offset_); diff --git a/paddle/fluid/platform/enforce.h b/paddle/fluid/platform/enforce.h index a34e4371cc..70bc9c4e83 100644 --- a/paddle/fluid/platform/enforce.h +++ b/paddle/fluid/platform/enforce.h @@ -113,7 +113,11 @@ template inline typename std::enable_if::type throw_on_error( bool stat, const Args&... args) { if (UNLIKELY(!(stat))) { +#ifndef REPLACE_ENFORCE_GLOG throw std::runtime_error(string::Sprintf(args...)); +#else + LOG(FATAL) << string::Sprintf(args...); +#endif } } @@ -123,8 +127,12 @@ template inline typename std::enable_if::type throw_on_error( cudaError_t e, const Args&... args) { if (UNLIKELY(e)) { +#ifndef REPLACE_ENFORCE_GLOG throw thrust::system_error(e, thrust::cuda_category(), string::Sprintf(args...)); +#else + LOG(FATAL) << string::Sprintf(args...); +#endif } } @@ -132,8 +140,12 @@ template inline typename std::enable_if::type throw_on_error( curandStatus_t stat, const Args&... args) { if (stat != CURAND_STATUS_SUCCESS) { +#ifndef REPLACE_ENFORCE_GLOG throw thrust::system_error(cudaErrorLaunchFailure, thrust::cuda_category(), string::Sprintf(args...)); +#else + LOG(FATAL) << string::Sprintf(args...); +#endif } } @@ -143,8 +155,12 @@ inline typename std::enable_if::type throw_on_error( if (stat == CUDNN_STATUS_SUCCESS) { return; } else { +#ifndef REPLACE_ENFORCE_GLOG throw std::runtime_error(platform::dynload::cudnnGetErrorString(stat) + string::Sprintf(args...)); +#else + LOG(FATAL) << string::Sprintf(args...); +#endif } } @@ -173,7 +189,11 @@ inline typename std::enable_if::type throw_on_error( } else if (stat == CUBLAS_STATUS_LICENSE_ERROR) { err = "CUBLAS: license error, "; } +#ifndef REPLACE_ENFORCE_GLOG throw std::runtime_error(err + string::Sprintf(args...)); +#else + LOG(FATAL) << err << string::Sprintf(args...); +#endif } #ifndef __APPLE__ @@ -183,8 +203,13 @@ inline typename std::enable_if::type throw_on_error( if (stat == ncclSuccess) { return; } else { +#ifndef REPLACE_ENFORCE_GLOG throw std::runtime_error(platform::dynload::ncclGetErrorString(stat) + string::Sprintf(args...)); +#else + LOG(FATAL) << platform::dynload::ncclGetErrorString(stat) + << string::Sprintf(args...); +#endif } } #endif // __APPLE__ @@ -203,6 +228,7 @@ inline void throw_on_error(T e) { __FILE__, __LINE__); \ } while (false) +#ifndef REPLACE_ENFORCE_GLOG #define PADDLE_ENFORCE(...) \ do { \ try { \ @@ -212,6 +238,9 @@ inline void throw_on_error(T e) { __FILE__, __LINE__); \ } \ } while (false) +#else +#define PADDLE_ENFORCE(...) ::paddle::platform::throw_on_error(__VA_ARGS__); +#endif /* * Some enforce helpers here, usage: diff --git a/paddle/fluid/string/printf.h b/paddle/fluid/string/printf.h index 062095a1c3..e0f6202506 100644 --- a/paddle/fluid/string/printf.h +++ b/paddle/fluid/string/printf.h @@ -84,7 +84,7 @@ void Fprintf(std::ostream& out, const char* fmt, const Args&... args) { } template -std::string Sprintf(const char* fmt, const Args&... args) { +std::string Sprintf(const char* fmt = "", const Args&... args) { std::ostringstream oss; Fprintf(oss, fmt, args...); return oss.str(); From 66c91911cf559216f2cf732ad411c3835f444280 Mon Sep 17 00:00:00 2001 From: gongweibao Date: Sat, 30 Jun 2018 21:13:13 -0500 Subject: [PATCH 086/130] Improve brpccmake (#11842) --- CMakeLists.txt | 13 +++++++++++++ cmake/configure.cmake | 4 ++++ cmake/external/brpc.cmake | 19 +++++++++++++++---- paddle/fluid/framework/executor.cc | 7 ++----- paddle/fluid/operators/CMakeLists.txt | 16 +++++++++++++++- paddle/fluid/operators/detail/macros.h | 20 ++++++++++++++------ 6 files changed, 63 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b216429272..c23be24c6c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,6 +64,7 @@ option(WITH_CONTRIB "Compile the third-party contributation" OFF) option(REPLACE_ENFORCE_GLOG "Replace PADDLE_ENFORCE with glog/CHECK for better debug." OFF) option(WITH_ANAKIN "Compile with Anakin library" OFF) option(WITH_GRPC "Use grpc as the default rpc framework" ${WITH_DISTRIBUTE}) +option(WITH_BRPC_RDMA "Use brpc rdma as the rpc protocal" OFF) # CMAKE_BUILD_TYPE if(NOT CMAKE_BUILD_TYPE) @@ -158,12 +159,24 @@ include(external/cares) if(WITH_DISTRIBUTE) if(WITH_GRPC) include(external/grpc) + message(STATUS "Use grpc framework.") else() + message(STATUS "Use brpc framework.") include(external/leveldb) include(external/brpc) endif() endif() +if(WITH_BRPC_RDMA) + message(STATUS "Use brpc with rdma.") + if(WITH_GRPC) + message(FATAL_ERROR "Can't use grpc with brpc rdma.") + endif() + if(NOT WITH_DISTRIBUTE) + message(FATAL_ERROR "Can't use brpc rdma in no distribute env.") + endif() +endif() + include(external/snappy) # download snappy include(external/snappystream) include(external/threadpool) diff --git a/cmake/configure.cmake b/cmake/configure.cmake index 6a8b15a6b6..e4af34d10e 100644 --- a/cmake/configure.cmake +++ b/cmake/configure.cmake @@ -174,3 +174,7 @@ endif(WITH_GOLANG) if(WITH_GRPC) add_definitions(-DPADDLE_WITH_GRPC) endif(WITH_GRPC) + +if(WITH_BRPC_RDMA) + add_definitions(-DPADDLE_WITH_BRPC_RDMA) +endif(WITH_BRPC_RDMA) diff --git a/cmake/external/brpc.cmake b/cmake/external/brpc.cmake index 8e2c913b2c..30b227b645 100644 --- a/cmake/external/brpc.cmake +++ b/cmake/external/brpc.cmake @@ -14,6 +14,15 @@ INCLUDE(ExternalProject) +find_library(SSL_LIBRARY NAMES ssl) +ADD_LIBRARY(ssl SHARED IMPORTED GLOBAL) +SET_PROPERTY(TARGET ssl PROPERTY IMPORTED_LOCATION ${SSL_LIBRARY}) + +find_library(CRYPTO_LIBRARY NAMES crypto) +ADD_LIBRARY(crypto SHARED IMPORTED GLOBAL) +SET_PROPERTY(TARGET crypto PROPERTY IMPORTED_LOCATION ${CRYPTO_LIBRARY}) + + SET(BRPC_SOURCES_DIR ${THIRD_PARTY_PATH}/brpc) SET(BRPC_INSTALL_DIR ${THIRD_PARTY_PATH}/install/brpc) SET(BRPC_INCLUDE_DIR "${BRPC_INSTALL_DIR}/include" CACHE PATH "brpc include directory." FORCE) @@ -22,14 +31,14 @@ SET(BRPC_LIBRARIES "${BRPC_INSTALL_DIR}/lib/libbrpc.a" CACHE FILEPATH "brpc libr INCLUDE_DIRECTORIES(${BRPC_INCLUDE_DIR}) # Reference https://stackoverflow.com/questions/45414507/pass-a-list-of-prefix-paths-to-externalproject-add-in-cmake-args -set(prefix_path "${THIRD_PARTY_PATH}/install/gflags|${THIRD_PARTY_PATH}/install/leveldb|${THIRD_PARTY_PATH}/install/snappy|${THIRD_PARTY_PATH}/install/gtest|${THIRD_PARTY_PATH}/install/protobuf") +set(prefix_path "${THIRD_PARTY_PATH}/install/gflags|${THIRD_PARTY_PATH}/install/leveldb|${THIRD_PARTY_PATH}/install/snappy|${THIRD_PARTY_PATH}/install/gtest|${THIRD_PARTY_PATH}/install/protobuf|${THIRD_PARTY_PATH}/install/zlib") # If minimal .a is need, you can set WITH_DEBUG_SYMBOLS=OFF ExternalProject_Add( extern_brpc ${EXTERNAL_PROJECT_LOG_ARGS} - GIT_REPOSITORY "https://github.com/brpc/brpc" - GIT_TAG "6d153dd7ff00f960ae6895c9c5fff0ce9f07aff2" + GIT_REPOSITORY "https://github.com/gongweibao/brpc" + GIT_TAG "7dc04defad1fd4173aae170c3fcbde131b65155a" PREFIX ${BRPC_SOURCES_DIR} UPDATE_COMMAND "" CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} @@ -42,6 +51,8 @@ ExternalProject_Add( -DCMAKE_BUILD_TYPE=${THIRD_PARTY_BUILD_TYPE} -DCMAKE_PREFIX_PATH=${prefix_path} -DBRPC_WITH_GLOG=ON + -DIOBUF_WITH_HUGE_BLOCK=ON + -DBRPC_WITH_RDMA=${WITH_BRPC_RDMA} ${EXTERNAL_OPTIONAL_ARGS} LIST_SEPARATOR | CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${BRPC_INSTALL_DIR} @@ -49,7 +60,7 @@ ExternalProject_Add( -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON -DCMAKE_BUILD_TYPE:STRING=${THIRD_PARTY_BUILD_TYPE} ) -ADD_DEPENDENCIES(extern_brpc protobuf leveldb gflags glog gtest snappy) +ADD_DEPENDENCIES(extern_brpc protobuf ssl crypto leveldb gflags glog gtest snappy) ADD_LIBRARY(brpc STATIC IMPORTED GLOBAL) SET_PROPERTY(TARGET brpc PROPERTY IMPORTED_LOCATION ${BRPC_LIBRARIES}) ADD_DEPENDENCIES(brpc extern_brpc) diff --git a/paddle/fluid/framework/executor.cc b/paddle/fluid/framework/executor.cc index ae98fccc96..261e9c5a8c 100644 --- a/paddle/fluid/framework/executor.cc +++ b/paddle/fluid/framework/executor.cc @@ -20,9 +20,7 @@ limitations under the License. */ #include "paddle/fluid/framework/lod_tensor_array.h" #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/framework/reader.h" -#ifdef PADDLE_WITH_DISTRIBUTE -#include "paddle/fluid/operators/distributed/grpc_client.h" -#endif +#include "paddle/fluid/operators/detail/macros.h" #include "paddle/fluid/platform/place.h" #include "paddle/fluid/platform/profiler.h" @@ -49,8 +47,7 @@ Executor::Executor(const platform::Place& place) : place_(place) {} #ifdef PADDLE_WITH_DISTRIBUTE void Executor::Complete() { - ::paddle::operators::distributed::RPCClient::GetInstance< - ::paddle::operators::distributed::GRPCClient>() + ::paddle::operators::distributed::RPCClient::GetInstance() ->SendComplete(); } #endif diff --git a/paddle/fluid/operators/CMakeLists.txt b/paddle/fluid/operators/CMakeLists.txt index 9dc39ad0dd..ab1d214333 100644 --- a/paddle/fluid/operators/CMakeLists.txt +++ b/paddle/fluid/operators/CMakeLists.txt @@ -184,6 +184,7 @@ else() set(DEPS_OPS ${DEPS_OPS} nccl_op) endif() +set(DISTRIBUTE_DEPS "") if(WITH_DISTRIBUTE) add_subdirectory(distributed) @@ -192,6 +193,18 @@ if(WITH_DISTRIBUTE) set(DISTRIBUTE_DEPS sendrecvop_grpc grpc++_unsecure grpc_unsecure gpr cares zlib protobuf) else() set(DISTRIBUTE_DEPS sendrecvop_brpc brpc leveldb snappystream snappy protobuf ssl crypto zlib) + if(WITH_BRPC_RDMA) + find_library(IBVERBS_LIBRARY NAMES ibverbs) + ADD_LIBRARY(ibverbs SHARED IMPORTED GLOBAL) + SET_PROPERTY(TARGET ibverbs PROPERTY IMPORTED_LOCATION ${IBVERBS_LIBRARY}) + + + find_library(RDMACM_LIBRARY NAMES rdmacm) + ADD_LIBRARY(rdmacm SHARED IMPORTED GLOBAL) + SET_PROPERTY(TARGET rdmacm PROPERTY IMPORTED_LOCATION ${RDMACM_LIBRARY}) + + set(DISTRIBUTE_DEPS ${DISTRIBUTE_DEPS} ibverbs rdmacm) + endif() endif() set(DISTRIBUTE_COMPILE_FLAGS "-Wno-non-virtual-dtor -Wno-error=non-virtual-dtor -Wno-error=delete-non-virtual-dtor") @@ -205,7 +218,7 @@ if(WITH_DISTRIBUTE) # listen_and_serv_op sum_op executor SERIAL) if(WITH_GPU) set_source_files_properties(test_send_nccl_id.cc PROPERTIES COMPILE_FLAGS ${DISTRIBUTE_COMPILE_FLAGS}) - cc_test(test_send_nccl_id SRCS test_send_nccl_id.cc DEPS listen_and_serv_op executor SERIAL) + cc_test(test_send_nccl_id SRCS test_send_nccl_id.cc DEPS listen_and_serv_op ${DISTRIBUTE_DEPS} executor SERIAL) if(WITH_GRPC) op_library(gen_nccl_id_op DEPS nccl_common sendrecvop_grpc) else() @@ -297,6 +310,7 @@ foreach(src ${DETECTION_LIBRARY}) endforeach() set(GLOB_OP_LIB ${OP_LIBRARY} CACHE INTERNAL "Global OP library") +set(GLOB_DISTRIBUTE_DEPS ${DISTRIBUTE_DEPS} CACHE INTERNAL "distributed dependency") cc_test(gather_test SRCS gather_test.cc DEPS tensor) cc_test(scatter_test SRCS scatter_test.cc DEPS tensor) diff --git a/paddle/fluid/operators/detail/macros.h b/paddle/fluid/operators/detail/macros.h index b9e385994e..6f4a15caa5 100644 --- a/paddle/fluid/operators/detail/macros.h +++ b/paddle/fluid/operators/detail/macros.h @@ -14,14 +14,22 @@ #pragma once +#ifdef PADDLE_WITH_DISTRIBUTE + #ifdef PADDLE_WITH_GRPC + #include "paddle/fluid/operators/distributed/grpc_client.h" #include "paddle/fluid/operators/distributed/grpc_server.h" -#define RPCSERVER_T distributed::AsyncGRPCServer -#define RPCCLIENT_T distributed::GRPCClient -#else +#define RPCSERVER_T paddle::operators::distributed::AsyncGRPCServer +#define RPCCLIENT_T paddle::operators::distributed::GRPCClient + +#else // PADDLE_WITH_GRPC + #include "paddle/fluid/operators/distributed/brpc_client.h" #include "paddle/fluid/operators/distributed/brpc_server.h" -#define RPCSERVER_T distributed::AsyncBRPCServer -#define RPCCLIENT_T distributed::BRPCClient -#endif +#define RPCSERVER_T paddle::operators::distributed::AsyncBRPCServer +#define RPCCLIENT_T paddle::operators::distributed::BRPCClient + +#endif // PADDLE_WITH_GRPC + +#endif // PADDLE_WITH_DISTRIBUTE From 312f9170af83239789305f4bc6c2cb4c2f115acf Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Sun, 1 Jul 2018 10:21:06 +0800 Subject: [PATCH 087/130] move gserver codes to legacy. This is part of big move of v2 codes to legacy sub dir. --- doc/v2/dev/new_layer_cn.rst | 8 ++--- doc/v2/dev/new_layer_en.rst | 8 ++--- doc/v2/faq/parameter/index_cn.rst | 2 +- doc/v2/howto/rnn/hrnn_rnn_api_compare_cn.rst | 30 +++++++++---------- doc/v2/howto/rnn/hrnn_rnn_api_compare_en.rst | 30 +++++++++---------- paddle/CMakeLists.txt | 2 +- paddle/api/GradientMachine.cpp | 2 +- paddle/api/PaddleAPI.h | 2 +- paddle/api/PaddleAPIPrivate.h | 4 +-- paddle/api/SequenceGenerator.cpp | 2 +- paddle/api/Trainer.cpp | 2 +- paddle/capi/capi_private.h | 2 +- paddle/capi/gradient_machine.cpp | 2 +- paddle/capi/tests/test_GradientMachine.cpp | 2 +- paddle/{ => legacy}/gserver/CMakeLists.txt | 0 .../activations/ActivationFunction.cpp | 0 .../gserver/activations/ActivationFunction.h | 0 .../gserver/activations/MKLDNNActivation.cpp | 0 .../gserver/activations/MKLDNNActivation.h | 2 +- .../gserver/dataproviders/DataProvider.cpp | 0 .../gserver/dataproviders/DataProvider.h | 0 .../gserver/dataproviders/DataProviderGroup.h | 0 .../dataproviders/MultiDataProvider.cpp | 0 .../gserver/dataproviders/MultiDataProvider.h | 0 .../gserver/dataproviders/ProtoReader.h | 0 .../gserver/dataproviders/PyDataProvider.cpp | 0 .../gserver/dataproviders/PyDataProvider.h | 0 .../gserver/dataproviders/PyDataProvider2.cpp | 0 .../gserver/evaluators/CTCErrorEvaluator.cpp | 2 +- .../gserver/evaluators/ChunkEvaluator.cpp | 0 .../evaluators/DetectionMAPEvaluator.cpp | 2 +- .../gserver/evaluators/Evaluator.cpp | 4 +-- .../gserver/evaluators/Evaluator.h | 0 .../gradientmachines/GradientMachine.cpp | 0 .../gradientmachines/GradientMachine.h | 6 ++-- .../gradientmachines/GradientMachineMode.cpp | 0 .../gradientmachines/GradientMachineMode.h | 0 .../gradientmachines/MultiGradientMachine.cpp | 0 .../gradientmachines/MultiGradientMachine.h | 0 .../gserver/gradientmachines/MultiNetwork.cpp | 0 .../gserver/gradientmachines/MultiNetwork.h | 0 .../gradientmachines/NeuralNetwork.cpp | 4 +-- .../gserver/gradientmachines/NeuralNetwork.h | 10 +++---- .../ParallelNeuralNetwork.cpp | 0 .../gradientmachines/ParallelNeuralNetwork.h | 0 .../RecurrentGradientMachine.cpp | 2 +- .../RecurrentGradientMachine.h | 0 .../gserver/layers/AddtoLayer.cpp | 0 .../{ => legacy}/gserver/layers/AddtoLayer.h | 0 .../gserver/layers/AgentLayer.cpp | 0 .../{ => legacy}/gserver/layers/AgentLayer.h | 0 .../gserver/layers/AverageLayer.cpp | 0 .../gserver/layers/AverageLayer.h | 0 .../gserver/layers/BatchNormBaseLayer.cpp | 0 .../gserver/layers/BatchNormBaseLayer.h | 0 .../layers/BatchNormalizationLayer.cpp | 0 .../gserver/layers/BatchNormalizationLayer.h | 0 .../gserver/layers/BilinearInterpLayer.cpp | 0 .../gserver/layers/BilinearInterpLayer.h | 0 .../gserver/layers/BlockExpandLayer.cpp | 0 .../gserver/layers/BlockExpandLayer.h | 0 .../gserver/layers/CRFDecodingLayer.cpp | 0 .../gserver/layers/CRFDecodingLayer.h | 0 .../{ => legacy}/gserver/layers/CRFLayer.cpp | 0 paddle/{ => legacy}/gserver/layers/CRFLayer.h | 0 .../{ => legacy}/gserver/layers/CTCLayer.cpp | 0 paddle/{ => legacy}/gserver/layers/CTCLayer.h | 0 .../{ => legacy}/gserver/layers/ClipLayer.cpp | 0 .../gserver/layers/ConcatenateLayer.cpp | 0 .../gserver/layers/ContextProjection.cpp | 0 .../gserver/layers/ContextProjection.h | 0 .../gserver/layers/Conv3DLayer.cpp | 0 .../{ => legacy}/gserver/layers/Conv3DLayer.h | 0 .../gserver/layers/ConvBaseLayer.cpp | 0 .../gserver/layers/ConvBaseLayer.h | 0 .../gserver/layers/ConvBaseOperator.cpp | 0 .../gserver/layers/ConvBaseOperator.h | 0 .../gserver/layers/ConvBaseProjection.cpp | 0 .../gserver/layers/ConvBaseProjection.h | 0 .../gserver/layers/ConvOperator.cpp | 0 .../gserver/layers/ConvOperator.h | 0 .../gserver/layers/ConvProjection.cpp | 0 .../gserver/layers/ConvProjection.h | 0 .../gserver/layers/ConvShiftLayer.cpp | 0 .../gserver/layers/ConvTransOperator.cpp | 0 .../gserver/layers/ConvTransOperator.h | 0 .../gserver/layers/ConvTransProjection.cpp | 0 .../gserver/layers/ConvTransProjection.h | 0 .../gserver/layers/ConvexCombinationLayer.cpp | 0 .../gserver/layers/CosSimLayer.cpp | 0 .../{ => legacy}/gserver/layers/CosSimLayer.h | 0 .../gserver/layers/CosSimVecMatLayer.cpp | 0 .../{ => legacy}/gserver/layers/CostLayer.cpp | 0 .../{ => legacy}/gserver/layers/CostLayer.h | 0 .../{ => legacy}/gserver/layers/CropLayer.cpp | 0 .../{ => legacy}/gserver/layers/CropLayer.h | 0 .../gserver/layers/CrossChannelNormLayer.cpp | 0 .../gserver/layers/CrossEntropyOverBeam.cpp | 0 .../gserver/layers/CrossEntropyOverBeam.h | 0 .../gserver/layers/CudnnBatchNormLayer.cpp | 0 .../gserver/layers/CudnnBatchNormLayer.h | 0 .../gserver/layers/CudnnConvBaseLayer.cpp | 0 .../gserver/layers/CudnnConvBaseLayer.h | 0 .../gserver/layers/CudnnPoolLayer.cpp | 0 .../gserver/layers/CudnnPoolLayer.h | 0 .../{ => legacy}/gserver/layers/DataLayer.cpp | 0 .../{ => legacy}/gserver/layers/DataLayer.h | 0 .../gserver/layers/DataNormLayer.cpp | 0 .../gserver/layers/DataNormLayer.h | 0 .../gserver/layers/DeConv3DLayer.cpp | 0 .../gserver/layers/DeConv3DLayer.h | 0 .../gserver/layers/DetectionOutputLayer.cpp | 0 .../gserver/layers/DetectionOutputLayer.h | 0 .../gserver/layers/DetectionUtil.cpp | 0 .../gserver/layers/DetectionUtil.h | 0 .../gserver/layers/DotMulOperator.cpp | 0 .../gserver/layers/DotMulProjection.cpp | 0 .../gserver/layers/DotProdLayer.cpp | 0 .../gserver/layers/EosIdCheckLayer.cpp | 0 .../gserver/layers/ExpandConvLayer.cpp | 0 .../gserver/layers/ExpandConvLayer.h | 0 .../gserver/layers/ExpandLayer.cpp | 0 .../{ => legacy}/gserver/layers/ExpandLayer.h | 0 .../layers/FactorizationMachineLayer.cpp | 0 .../layers/FactorizationMachineLayer.h | 0 .../gserver/layers/FeatureMapExpandLayer.cpp | 0 .../gserver/layers/FullMatrixProjection.cpp | 0 .../gserver/layers/FullMatrixProjection.h | 0 .../gserver/layers/FullyConnectedLayer.cpp | 0 .../gserver/layers/FullyConnectedLayer.h | 0 .../gserver/layers/GatedRecurrentLayer.cpp | 0 .../gserver/layers/GatedRecurrentLayer.h | 0 .../gserver/layers/GetOutputLayer.cpp | 0 .../gserver/layers/GruCompute.cpp | 0 .../{ => legacy}/gserver/layers/GruCompute.cu | 0 .../{ => legacy}/gserver/layers/GruCompute.h | 0 .../gserver/layers/GruStepLayer.cpp | 0 .../layers/HierarchicalSigmoidLayer.cpp | 0 .../gserver/layers/HierarchicalSigmoidLayer.h | 0 .../gserver/layers/IdentityProjection.cpp | 0 .../gserver/layers/InterpolationLayer.cpp | 0 .../gserver/layers/KmaxSeqScoreLayer.cpp | 0 .../gserver/layers/L2DistanceLayer.cpp | 0 .../gserver/layers/L2DistanceLayer.h | 0 paddle/{ => legacy}/gserver/layers/Layer.cpp | 0 paddle/{ => legacy}/gserver/layers/Layer.h | 2 +- .../gserver/layers/LinearChainCRF.cpp | 0 .../gserver/layers/LinearChainCRF.h | 0 .../gserver/layers/LinearChainCTC.cpp | 0 .../gserver/layers/LinearChainCTC.h | 0 .../gserver/layers/LstmCompute.cpp | 0 .../gserver/layers/LstmCompute.cu | 0 .../{ => legacy}/gserver/layers/LstmCompute.h | 0 .../{ => legacy}/gserver/layers/LstmLayer.cpp | 0 .../{ => legacy}/gserver/layers/LstmLayer.h | 0 .../gserver/layers/LstmStepLayer.cpp | 0 .../gserver/layers/MDLstmLayer.cpp | 0 .../gserver/layers/MKLDNNAddtoLayer.cpp | 0 .../gserver/layers/MKLDNNAddtoLayer.h | 0 .../{ => legacy}/gserver/layers/MKLDNNBase.h | 0 .../gserver/layers/MKLDNNBatchNormLayer.cpp | 0 .../gserver/layers/MKLDNNBatchNormLayer.h | 0 .../gserver/layers/MKLDNNConcatLayer.cpp | 0 .../gserver/layers/MKLDNNConcatLayer.h | 0 .../gserver/layers/MKLDNNConvLayer.cpp | 0 .../gserver/layers/MKLDNNConvLayer.h | 0 .../gserver/layers/MKLDNNFcLayer.cpp | 0 .../gserver/layers/MKLDNNFcLayer.h | 0 .../gserver/layers/MKLDNNLRNLayer.cpp | 0 .../gserver/layers/MKLDNNLRNLayer.h | 0 .../gserver/layers/MKLDNNLayer.cpp | 0 .../{ => legacy}/gserver/layers/MKLDNNLayer.h | 0 .../gserver/layers/MKLDNNPoolLayer.cpp | 0 .../gserver/layers/MKLDNNPoolLayer.h | 0 .../layers/MKLPackedRecurrentLayer.cpp | 0 .../gserver/layers/MKLPackedRecurrentLayer.h | 0 .../gserver/layers/MKLPackedWeight.h | 0 .../gserver/layers/MaxIdLayer.cpp | 0 .../{ => legacy}/gserver/layers/MaxLayer.cpp | 0 paddle/{ => legacy}/gserver/layers/MaxLayer.h | 0 .../gserver/layers/MaxOutLayer.cpp | 0 .../{ => legacy}/gserver/layers/MaxOutLayer.h | 0 .../gserver/layers/MaxPoolWithMaskLayer.cpp | 0 .../gserver/layers/MaxPoolWithMaskLayer.h | 0 .../gserver/layers/MixedLayer.cpp | 0 .../{ => legacy}/gserver/layers/MixedLayer.h | 0 .../gserver/layers/MultiBoxLossLayer.cpp | 0 .../gserver/layers/MultiBoxLossLayer.h | 0 .../gserver/layers/MultinomialSampler.cpp | 0 .../gserver/layers/MultinomialSampler.h | 0 .../gserver/layers/MultiplexLayer.cpp | 0 .../{ => legacy}/gserver/layers/NCELayer.cpp | 0 .../{ => legacy}/gserver/layers/NormLayer.cpp | 0 .../{ => legacy}/gserver/layers/NormLayer.h | 0 .../gserver/layers/NormProjectionLayer.cpp | 0 .../gserver/layers/NormProjectionLayer.h | 0 .../{ => legacy}/gserver/layers/Operator.cpp | 0 paddle/{ => legacy}/gserver/layers/Operator.h | 0 .../gserver/layers/OuterProdLayer.cpp | 0 .../{ => legacy}/gserver/layers/PadLayer.cpp | 0 paddle/{ => legacy}/gserver/layers/PadLayer.h | 0 .../gserver/layers/ParameterReluLayer.cpp | 0 .../gserver/layers/ParameterReluLayer.h | 0 .../gserver/layers/Pool3DLayer.cpp | 0 .../{ => legacy}/gserver/layers/Pool3DLayer.h | 0 .../{ => legacy}/gserver/layers/PoolLayer.cpp | 0 .../{ => legacy}/gserver/layers/PoolLayer.h | 0 .../gserver/layers/PoolProjection.cpp | 0 .../gserver/layers/PoolProjection.h | 0 .../gserver/layers/PoolProjectionLayer.cpp | 0 .../gserver/layers/PoolProjectionLayer.h | 0 .../gserver/layers/PowerLayer.cpp | 0 .../gserver/layers/PrintLayer.cpp | 0 .../{ => legacy}/gserver/layers/PriorBox.cpp | 0 .../gserver/layers/Projection.cpp | 0 .../{ => legacy}/gserver/layers/Projection.h | 0 .../gserver/layers/ROIPoolLayer.cpp | 0 .../gserver/layers/ROIPoolLayer.h | 0 .../gserver/layers/RecurrentLayer.cpp | 0 .../gserver/layers/RecurrentLayer.h | 0 .../gserver/layers/RecurrentLayerGroup.cpp | 4 +-- .../gserver/layers/ResizeLayer.cpp | 0 .../gserver/layers/RotateLayer.cpp | 0 .../{ => legacy}/gserver/layers/RotateLayer.h | 0 .../gserver/layers/RowConvLayer.cpp | 0 .../gserver/layers/RowConvLayer.h | 0 .../gserver/layers/RowL2NormLayer.cpp | 0 .../gserver/layers/SamplingIdLayer.cpp | 0 .../gserver/layers/ScaleShiftLayer.cpp | 0 .../gserver/layers/ScaleSubRegionLayer.cpp | 0 .../gserver/layers/ScaleSubRegionLayer.h | 0 .../gserver/layers/ScalingLayer.cpp | 0 .../gserver/layers/ScalingProjection.cpp | 0 .../layers/SelectiveFullyConnectedLayer.cpp | 0 .../layers/SelectiveFullyConnectedLayer.h | 0 .../gserver/layers/SequenceConcatLayer.cpp | 0 .../layers/SequenceLastInstanceLayer.cpp | 0 .../gserver/layers/SequencePoolLayer.cpp | 0 .../gserver/layers/SequencePoolLayer.h | 0 .../gserver/layers/SequenceReshapeLayer.cpp | 0 .../gserver/layers/SequenceSliceLayer.cpp | 0 .../gserver/layers/SequenceToBatch.cpp | 0 .../gserver/layers/SequenceToBatch.h | 0 .../gserver/layers/SliceProjection.cpp | 0 .../gserver/layers/SlopeInterceptLayer.cpp | 0 .../layers/SpatialPyramidPoolLayer.cpp | 0 .../gserver/layers/SpatialPyramidPoolLayer.h | 0 .../gserver/layers/SubNestedSequenceLayer.cpp | 0 .../gserver/layers/SubSequenceLayer.cpp | 0 .../gserver/layers/SumToOneNormLayer.cpp | 0 .../gserver/layers/SwitchOrderLayer.cpp | 0 .../gserver/layers/SwitchOrderLayer.h | 0 .../gserver/layers/TableProjection.cpp | 0 .../gserver/layers/TableProjection.h | 0 .../gserver/layers/TensorLayer.cpp | 0 .../{ => legacy}/gserver/layers/TensorLayer.h | 0 .../gserver/layers/TransLayer.cpp | 0 .../{ => legacy}/gserver/layers/TransLayer.h | 0 .../layers/TransposedFullMatrixProjection.cpp | 0 .../gserver/layers/UpsampleLayer.cpp | 0 .../gserver/layers/UpsampleLayer.h | 0 .../gserver/layers/ValidationLayer.cpp | 0 .../gserver/layers/ValidationLayer.h | 2 +- .../gserver/layers/WarpCTCLayer.cpp | 0 .../gserver/layers/WarpCTCLayer.h | 0 paddle/{ => legacy}/gserver/tests/.gitignore | 0 .../{ => legacy}/gserver/tests/CMakeLists.txt | 2 +- .../gserver/tests/LayerGradUtil.cpp | 0 .../gserver/tests/LayerGradUtil.h | 2 +- .../gserver/tests/MKLDNNTester.cpp | 4 +-- .../{ => legacy}/gserver/tests/MKLDNNTester.h | 4 +-- .../gserver/tests/Sequence/dummy.list | 0 .../tests/Sequence/tour_dict_phrase.dict | 0 .../gserver/tests/Sequence/tour_train_wdseg | 0 .../tests/Sequence/tour_train_wdseg.nest | 0 .../gserver/tests/Sequence/train.list | 0 .../gserver/tests/Sequence/train.list.nest | 0 paddle/{ => legacy}/gserver/tests/__init__.py | 0 .../gserver/tests/concat_dotmul_a.conf | 0 .../gserver/tests/concat_dotmul_b.conf | 0 .../gserver/tests/concat_fullmatrix_a.conf | 0 .../gserver/tests/concat_fullmatrix_b.conf | 0 .../gserver/tests/concat_slice_a.conf | 0 .../gserver/tests/concat_slice_b.conf | 0 .../gserver/tests/concat_table_a.conf | 0 .../gserver/tests/concat_table_b.conf | 0 .../gserver/tests/img_conv_a.conf | 0 .../gserver/tests/img_conv_b.conf | 0 .../gserver/tests/img_conv_c.conf | 0 .../gserver/tests/img_conv_cudnn.py | 0 .../gserver/tests/img_conv_exconv.py | 0 .../gserver/tests/img_pool_a.conf | 0 .../gserver/tests/img_pool_b.conf | 0 .../gserver/tests/mkldnn_branch_net.conf | 0 .../gserver/tests/mkldnn_simple_net.conf | 0 .../gserver/tests/pyDataProvider.py | 0 .../tests/pyDataProvider/pyDataProviderList | 0 .../gserver/tests/pyDataProvider/trainer.conf | 0 .../gserver/tests/rnn_data_provider.py | 0 .../{ => legacy}/gserver/tests/sequenceGen.py | 0 .../gserver/tests/sequence_layer_group.conf | 0 .../gserver/tests/sequence_lstm.conf | 0 .../tests/sequence_nest_layer_group.conf | 0 .../gserver/tests/sequence_nest_rnn.conf | 0 .../tests/sequence_nest_rnn_multi_input.conf | 0 ...ence_nest_rnn_multi_unequalength_inputs.py | 0 .../gserver/tests/sequence_recurrent.py | 0 .../gserver/tests/sequence_recurrent_group.py | 0 .../gserver/tests/sequence_rnn.conf | 0 .../tests/sequence_rnn_matched_inputs.py | 0 .../tests/sequence_rnn_mixed_inputs.py | 0 .../tests/sequence_rnn_multi_input.conf | 0 .../sequence_rnn_multi_unequalength_inputs.py | 0 .../gserver/tests/test_ActivationGrad.cpp | 2 +- .../gserver/tests/test_BatchNorm.cpp | 2 +- .../gserver/tests/test_CRFLayerGrad.cpp | 4 +-- .../gserver/tests/test_CompareSparse.cpp | 0 .../gserver/tests/test_CompareTwoNets.cpp | 0 .../gserver/tests/test_ConvTrans.cpp | 2 +- .../gserver/tests/test_ConvUnify.cpp | 2 +- .../tests/test_CrossEntropyOverBeamGrad.cpp | 2 +- .../gserver/tests/test_DetectionOutput.cpp | 0 .../gserver/tests/test_Evaluator.cpp | 0 .../gserver/tests/test_Expand.cpp | 0 .../gserver/tests/test_KmaxSeqScore.cpp | 2 +- .../gserver/tests/test_LayerGrad.cpp | 2 +- .../gserver/tests/test_LinearChainCRF.cpp | 2 +- .../gserver/tests/test_MKLDNN.cpp | 2 +- .../tests/test_MaxPoolingWithMaskOutput.cpp | 0 .../gserver/tests/test_MultinomialSampler.cpp | 2 +- .../gserver/tests/test_NetworkCompare.cpp | 0 .../gserver/tests/test_PriorBox.cpp | 0 .../gserver/tests/test_PyDataProvider.cpp | 2 +- .../gserver/tests/test_PyDataProvider2.cpp | 2 +- .../gserver/tests/test_PyDataProvider2.py | 0 .../tests/test_RecurrentGradientMachine.cpp | 2 +- .../gserver/tests/test_RecurrentLayer.cpp | 12 ++++---- .../gserver/tests/test_SelectiveFCLayer.cpp | 8 ++--- .../gserver/tests/test_SeqSliceLayerGrad.cpp | 2 +- .../gserver/tests/test_Upsample.cpp | 0 .../gserver/tests/test_WarpCTCLayer.cpp | 8 ++--- paddle/trainer/ParamUtil.cpp | 4 +-- paddle/trainer/ParamUtil.h | 4 +-- paddle/trainer/ParameterUpdater.h | 2 +- paddle/trainer/Tester.cpp | 6 ++-- paddle/trainer/Tester.h | 4 +-- paddle/trainer/TesterConfig.h | 2 +- paddle/trainer/Trainer.cpp | 6 ++-- paddle/trainer/Trainer.h | 4 +-- paddle/trainer/TrainerInternal.cpp | 4 +-- paddle/trainer/TrainerInternal.h | 2 +- paddle/trainer/TrainerInternalConfig.h | 2 +- .../tests/test_PyDataProviderWrapper.cpp | 2 +- .../paddle/trainer_config_helpers/layers.py | 4 +-- tools/codestyle/cpplint_pre_commit.hook | 2 +- 355 files changed, 129 insertions(+), 129 deletions(-) rename paddle/{ => legacy}/gserver/CMakeLists.txt (100%) rename paddle/{ => legacy}/gserver/activations/ActivationFunction.cpp (100%) rename paddle/{ => legacy}/gserver/activations/ActivationFunction.h (100%) rename paddle/{ => legacy}/gserver/activations/MKLDNNActivation.cpp (100%) rename paddle/{ => legacy}/gserver/activations/MKLDNNActivation.h (98%) rename paddle/{ => legacy}/gserver/dataproviders/DataProvider.cpp (100%) rename paddle/{ => legacy}/gserver/dataproviders/DataProvider.h (100%) rename paddle/{ => legacy}/gserver/dataproviders/DataProviderGroup.h (100%) rename paddle/{ => legacy}/gserver/dataproviders/MultiDataProvider.cpp (100%) rename paddle/{ => legacy}/gserver/dataproviders/MultiDataProvider.h (100%) rename paddle/{ => legacy}/gserver/dataproviders/ProtoReader.h (100%) rename paddle/{ => legacy}/gserver/dataproviders/PyDataProvider.cpp (100%) rename paddle/{ => legacy}/gserver/dataproviders/PyDataProvider.h (100%) rename paddle/{ => legacy}/gserver/dataproviders/PyDataProvider2.cpp (100%) rename paddle/{ => legacy}/gserver/evaluators/CTCErrorEvaluator.cpp (99%) rename paddle/{ => legacy}/gserver/evaluators/ChunkEvaluator.cpp (100%) rename paddle/{ => legacy}/gserver/evaluators/DetectionMAPEvaluator.cpp (99%) rename paddle/{ => legacy}/gserver/evaluators/Evaluator.cpp (99%) rename paddle/{ => legacy}/gserver/evaluators/Evaluator.h (100%) rename paddle/{ => legacy}/gserver/gradientmachines/GradientMachine.cpp (100%) rename paddle/{ => legacy}/gserver/gradientmachines/GradientMachine.h (97%) rename paddle/{ => legacy}/gserver/gradientmachines/GradientMachineMode.cpp (100%) rename paddle/{ => legacy}/gserver/gradientmachines/GradientMachineMode.h (100%) rename paddle/{ => legacy}/gserver/gradientmachines/MultiGradientMachine.cpp (100%) rename paddle/{ => legacy}/gserver/gradientmachines/MultiGradientMachine.h (100%) rename paddle/{ => legacy}/gserver/gradientmachines/MultiNetwork.cpp (100%) rename paddle/{ => legacy}/gserver/gradientmachines/MultiNetwork.h (100%) rename paddle/{ => legacy}/gserver/gradientmachines/NeuralNetwork.cpp (99%) rename paddle/{ => legacy}/gserver/gradientmachines/NeuralNetwork.h (95%) rename paddle/{ => legacy}/gserver/gradientmachines/ParallelNeuralNetwork.cpp (100%) rename paddle/{ => legacy}/gserver/gradientmachines/ParallelNeuralNetwork.h (100%) rename paddle/{ => legacy}/gserver/gradientmachines/RecurrentGradientMachine.cpp (99%) rename paddle/{ => legacy}/gserver/gradientmachines/RecurrentGradientMachine.h (100%) rename paddle/{ => legacy}/gserver/layers/AddtoLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/AddtoLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/AgentLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/AgentLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/AverageLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/AverageLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/BatchNormBaseLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/BatchNormBaseLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/BatchNormalizationLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/BatchNormalizationLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/BilinearInterpLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/BilinearInterpLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/BlockExpandLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/BlockExpandLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/CRFDecodingLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/CRFDecodingLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/CRFLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/CRFLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/CTCLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/CTCLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/ClipLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ConcatenateLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ContextProjection.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ContextProjection.h (100%) rename paddle/{ => legacy}/gserver/layers/Conv3DLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/Conv3DLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/ConvBaseLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ConvBaseLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/ConvBaseOperator.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ConvBaseOperator.h (100%) rename paddle/{ => legacy}/gserver/layers/ConvBaseProjection.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ConvBaseProjection.h (100%) rename paddle/{ => legacy}/gserver/layers/ConvOperator.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ConvOperator.h (100%) rename paddle/{ => legacy}/gserver/layers/ConvProjection.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ConvProjection.h (100%) rename paddle/{ => legacy}/gserver/layers/ConvShiftLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ConvTransOperator.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ConvTransOperator.h (100%) rename paddle/{ => legacy}/gserver/layers/ConvTransProjection.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ConvTransProjection.h (100%) rename paddle/{ => legacy}/gserver/layers/ConvexCombinationLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/CosSimLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/CosSimLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/CosSimVecMatLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/CostLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/CostLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/CropLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/CropLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/CrossChannelNormLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/CrossEntropyOverBeam.cpp (100%) rename paddle/{ => legacy}/gserver/layers/CrossEntropyOverBeam.h (100%) rename paddle/{ => legacy}/gserver/layers/CudnnBatchNormLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/CudnnBatchNormLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/CudnnConvBaseLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/CudnnConvBaseLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/CudnnPoolLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/CudnnPoolLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/DataLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/DataLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/DataNormLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/DataNormLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/DeConv3DLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/DeConv3DLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/DetectionOutputLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/DetectionOutputLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/DetectionUtil.cpp (100%) rename paddle/{ => legacy}/gserver/layers/DetectionUtil.h (100%) rename paddle/{ => legacy}/gserver/layers/DotMulOperator.cpp (100%) rename paddle/{ => legacy}/gserver/layers/DotMulProjection.cpp (100%) rename paddle/{ => legacy}/gserver/layers/DotProdLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/EosIdCheckLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ExpandConvLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ExpandConvLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/ExpandLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ExpandLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/FactorizationMachineLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/FactorizationMachineLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/FeatureMapExpandLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/FullMatrixProjection.cpp (100%) rename paddle/{ => legacy}/gserver/layers/FullMatrixProjection.h (100%) rename paddle/{ => legacy}/gserver/layers/FullyConnectedLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/FullyConnectedLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/GatedRecurrentLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/GatedRecurrentLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/GetOutputLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/GruCompute.cpp (100%) rename paddle/{ => legacy}/gserver/layers/GruCompute.cu (100%) rename paddle/{ => legacy}/gserver/layers/GruCompute.h (100%) rename paddle/{ => legacy}/gserver/layers/GruStepLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/HierarchicalSigmoidLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/HierarchicalSigmoidLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/IdentityProjection.cpp (100%) rename paddle/{ => legacy}/gserver/layers/InterpolationLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/KmaxSeqScoreLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/L2DistanceLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/L2DistanceLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/Layer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/Layer.h (99%) rename paddle/{ => legacy}/gserver/layers/LinearChainCRF.cpp (100%) rename paddle/{ => legacy}/gserver/layers/LinearChainCRF.h (100%) rename paddle/{ => legacy}/gserver/layers/LinearChainCTC.cpp (100%) rename paddle/{ => legacy}/gserver/layers/LinearChainCTC.h (100%) rename paddle/{ => legacy}/gserver/layers/LstmCompute.cpp (100%) rename paddle/{ => legacy}/gserver/layers/LstmCompute.cu (100%) rename paddle/{ => legacy}/gserver/layers/LstmCompute.h (100%) rename paddle/{ => legacy}/gserver/layers/LstmLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/LstmLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/LstmStepLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MDLstmLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNAddtoLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNAddtoLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNBase.h (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNBatchNormLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNBatchNormLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNConcatLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNConcatLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNConvLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNConvLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNFcLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNFcLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNLRNLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNLRNLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNPoolLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MKLDNNPoolLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MKLPackedRecurrentLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MKLPackedRecurrentLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MKLPackedWeight.h (100%) rename paddle/{ => legacy}/gserver/layers/MaxIdLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MaxLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MaxLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MaxOutLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MaxOutLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MaxPoolWithMaskLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MaxPoolWithMaskLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MixedLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MixedLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MultiBoxLossLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MultiBoxLossLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/MultinomialSampler.cpp (100%) rename paddle/{ => legacy}/gserver/layers/MultinomialSampler.h (100%) rename paddle/{ => legacy}/gserver/layers/MultiplexLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/NCELayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/NormLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/NormLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/NormProjectionLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/NormProjectionLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/Operator.cpp (100%) rename paddle/{ => legacy}/gserver/layers/Operator.h (100%) rename paddle/{ => legacy}/gserver/layers/OuterProdLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/PadLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/PadLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/ParameterReluLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ParameterReluLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/Pool3DLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/Pool3DLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/PoolLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/PoolLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/PoolProjection.cpp (100%) rename paddle/{ => legacy}/gserver/layers/PoolProjection.h (100%) rename paddle/{ => legacy}/gserver/layers/PoolProjectionLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/PoolProjectionLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/PowerLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/PrintLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/PriorBox.cpp (100%) rename paddle/{ => legacy}/gserver/layers/Projection.cpp (100%) rename paddle/{ => legacy}/gserver/layers/Projection.h (100%) rename paddle/{ => legacy}/gserver/layers/ROIPoolLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ROIPoolLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/RecurrentLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/RecurrentLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/RecurrentLayerGroup.cpp (96%) rename paddle/{ => legacy}/gserver/layers/ResizeLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/RotateLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/RotateLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/RowConvLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/RowConvLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/RowL2NormLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SamplingIdLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ScaleShiftLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ScaleSubRegionLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ScaleSubRegionLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/ScalingLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ScalingProjection.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SelectiveFullyConnectedLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SelectiveFullyConnectedLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/SequenceConcatLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SequenceLastInstanceLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SequencePoolLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SequencePoolLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/SequenceReshapeLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SequenceSliceLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SequenceToBatch.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SequenceToBatch.h (100%) rename paddle/{ => legacy}/gserver/layers/SliceProjection.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SlopeInterceptLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SpatialPyramidPoolLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SpatialPyramidPoolLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/SubNestedSequenceLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SubSequenceLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SumToOneNormLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SwitchOrderLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/SwitchOrderLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/TableProjection.cpp (100%) rename paddle/{ => legacy}/gserver/layers/TableProjection.h (100%) rename paddle/{ => legacy}/gserver/layers/TensorLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/TensorLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/TransLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/TransLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/TransposedFullMatrixProjection.cpp (100%) rename paddle/{ => legacy}/gserver/layers/UpsampleLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/UpsampleLayer.h (100%) rename paddle/{ => legacy}/gserver/layers/ValidationLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/ValidationLayer.h (97%) rename paddle/{ => legacy}/gserver/layers/WarpCTCLayer.cpp (100%) rename paddle/{ => legacy}/gserver/layers/WarpCTCLayer.h (100%) rename paddle/{ => legacy}/gserver/tests/.gitignore (100%) rename paddle/{ => legacy}/gserver/tests/CMakeLists.txt (97%) rename paddle/{ => legacy}/gserver/tests/LayerGradUtil.cpp (100%) rename paddle/{ => legacy}/gserver/tests/LayerGradUtil.h (99%) rename paddle/{ => legacy}/gserver/tests/MKLDNNTester.cpp (99%) rename paddle/{ => legacy}/gserver/tests/MKLDNNTester.h (97%) rename paddle/{ => legacy}/gserver/tests/Sequence/dummy.list (100%) rename paddle/{ => legacy}/gserver/tests/Sequence/tour_dict_phrase.dict (100%) rename paddle/{ => legacy}/gserver/tests/Sequence/tour_train_wdseg (100%) rename paddle/{ => legacy}/gserver/tests/Sequence/tour_train_wdseg.nest (100%) rename paddle/{ => legacy}/gserver/tests/Sequence/train.list (100%) rename paddle/{ => legacy}/gserver/tests/Sequence/train.list.nest (100%) rename paddle/{ => legacy}/gserver/tests/__init__.py (100%) rename paddle/{ => legacy}/gserver/tests/concat_dotmul_a.conf (100%) rename paddle/{ => legacy}/gserver/tests/concat_dotmul_b.conf (100%) rename paddle/{ => legacy}/gserver/tests/concat_fullmatrix_a.conf (100%) rename paddle/{ => legacy}/gserver/tests/concat_fullmatrix_b.conf (100%) rename paddle/{ => legacy}/gserver/tests/concat_slice_a.conf (100%) rename paddle/{ => legacy}/gserver/tests/concat_slice_b.conf (100%) rename paddle/{ => legacy}/gserver/tests/concat_table_a.conf (100%) rename paddle/{ => legacy}/gserver/tests/concat_table_b.conf (100%) rename paddle/{ => legacy}/gserver/tests/img_conv_a.conf (100%) rename paddle/{ => legacy}/gserver/tests/img_conv_b.conf (100%) rename paddle/{ => legacy}/gserver/tests/img_conv_c.conf (100%) rename paddle/{ => legacy}/gserver/tests/img_conv_cudnn.py (100%) rename paddle/{ => legacy}/gserver/tests/img_conv_exconv.py (100%) rename paddle/{ => legacy}/gserver/tests/img_pool_a.conf (100%) rename paddle/{ => legacy}/gserver/tests/img_pool_b.conf (100%) rename paddle/{ => legacy}/gserver/tests/mkldnn_branch_net.conf (100%) rename paddle/{ => legacy}/gserver/tests/mkldnn_simple_net.conf (100%) rename paddle/{ => legacy}/gserver/tests/pyDataProvider.py (100%) rename paddle/{ => legacy}/gserver/tests/pyDataProvider/pyDataProviderList (100%) rename paddle/{ => legacy}/gserver/tests/pyDataProvider/trainer.conf (100%) rename paddle/{ => legacy}/gserver/tests/rnn_data_provider.py (100%) rename paddle/{ => legacy}/gserver/tests/sequenceGen.py (100%) rename paddle/{ => legacy}/gserver/tests/sequence_layer_group.conf (100%) rename paddle/{ => legacy}/gserver/tests/sequence_lstm.conf (100%) rename paddle/{ => legacy}/gserver/tests/sequence_nest_layer_group.conf (100%) rename paddle/{ => legacy}/gserver/tests/sequence_nest_rnn.conf (100%) rename paddle/{ => legacy}/gserver/tests/sequence_nest_rnn_multi_input.conf (100%) rename paddle/{ => legacy}/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py (100%) rename paddle/{ => legacy}/gserver/tests/sequence_recurrent.py (100%) rename paddle/{ => legacy}/gserver/tests/sequence_recurrent_group.py (100%) rename paddle/{ => legacy}/gserver/tests/sequence_rnn.conf (100%) rename paddle/{ => legacy}/gserver/tests/sequence_rnn_matched_inputs.py (100%) rename paddle/{ => legacy}/gserver/tests/sequence_rnn_mixed_inputs.py (100%) rename paddle/{ => legacy}/gserver/tests/sequence_rnn_multi_input.conf (100%) rename paddle/{ => legacy}/gserver/tests/sequence_rnn_multi_unequalength_inputs.py (100%) rename paddle/{ => legacy}/gserver/tests/test_ActivationGrad.cpp (98%) rename paddle/{ => legacy}/gserver/tests/test_BatchNorm.cpp (99%) rename paddle/{ => legacy}/gserver/tests/test_CRFLayerGrad.cpp (97%) rename paddle/{ => legacy}/gserver/tests/test_CompareSparse.cpp (100%) rename paddle/{ => legacy}/gserver/tests/test_CompareTwoNets.cpp (100%) rename paddle/{ => legacy}/gserver/tests/test_ConvTrans.cpp (99%) rename paddle/{ => legacy}/gserver/tests/test_ConvUnify.cpp (99%) rename paddle/{ => legacy}/gserver/tests/test_CrossEntropyOverBeamGrad.cpp (99%) rename paddle/{ => legacy}/gserver/tests/test_DetectionOutput.cpp (100%) rename paddle/{ => legacy}/gserver/tests/test_Evaluator.cpp (100%) rename paddle/{ => legacy}/gserver/tests/test_Expand.cpp (100%) rename paddle/{ => legacy}/gserver/tests/test_KmaxSeqScore.cpp (99%) rename paddle/{ => legacy}/gserver/tests/test_LayerGrad.cpp (99%) rename paddle/{ => legacy}/gserver/tests/test_LinearChainCRF.cpp (97%) rename paddle/{ => legacy}/gserver/tests/test_MKLDNN.cpp (99%) rename paddle/{ => legacy}/gserver/tests/test_MaxPoolingWithMaskOutput.cpp (100%) rename paddle/{ => legacy}/gserver/tests/test_MultinomialSampler.cpp (98%) rename paddle/{ => legacy}/gserver/tests/test_NetworkCompare.cpp (100%) rename paddle/{ => legacy}/gserver/tests/test_PriorBox.cpp (100%) rename paddle/{ => legacy}/gserver/tests/test_PyDataProvider.cpp (99%) rename paddle/{ => legacy}/gserver/tests/test_PyDataProvider2.cpp (99%) rename paddle/{ => legacy}/gserver/tests/test_PyDataProvider2.py (100%) rename paddle/{ => legacy}/gserver/tests/test_RecurrentGradientMachine.cpp (98%) rename paddle/{ => legacy}/gserver/tests/test_RecurrentLayer.cpp (98%) rename paddle/{ => legacy}/gserver/tests/test_SelectiveFCLayer.cpp (98%) rename paddle/{ => legacy}/gserver/tests/test_SeqSliceLayerGrad.cpp (99%) rename paddle/{ => legacy}/gserver/tests/test_Upsample.cpp (100%) rename paddle/{ => legacy}/gserver/tests/test_WarpCTCLayer.cpp (97%) diff --git a/doc/v2/dev/new_layer_cn.rst b/doc/v2/dev/new_layer_cn.rst index 3115654b2b..49db2160dc 100644 --- a/doc/v2/dev/new_layer_cn.rst +++ b/doc/v2/dev/new_layer_cn.rst @@ -58,7 +58,7 @@ PaddlePaddle的base layer类可以自动计算上面的导数。 实现C++类 =================== -一个网络层的C++类需要实现初始化,前向和后向。全连接层的实现位于:code:`paddle/gserver/layers/FullyConnectedLayer.h`及:code:`paddle/gserver/layers/FullyConnectedLayer.cpp`。这里我们展示一份简化过的代码。 +一个网络层的C++类需要实现初始化,前向和后向。全连接层的实现位于:code:`paddle/legacy/gserver/layers/FullyConnectedLayer.h`及:code:`paddle/legacy/gserver/layers/FullyConnectedLayer.cpp`。这里我们展示一份简化过的代码。 这个类需要继承 :code:`paddle::Layer` 这个基类,并且需要重写基类中的以下几个虚函数: @@ -262,7 +262,7 @@ PaddlePaddle的base layer类可以自动计算上面的导数。 REGISTER_LAYER(fc, FullyConnectedLayer); } -若 :code:`cpp` 被放在 :code:`paddle/gserver/layers` 目录下,其会自动被加入编译列表。 +若 :code:`cpp` 被放在 :code:`paddle/legacy/gserver/layers` 目录下,其会自动被加入编译列表。 写梯度检查单元测试 @@ -270,7 +270,7 @@ PaddlePaddle的base layer类可以自动计算上面的导数。 写梯度检查单元测试是一个验证新实现的层是否正确的相对简单的办法。梯度检查单元测试通过有限差分法来验证一个层的梯度。首先对输入做一个小的扰动 :math:`\Delta x` ,然后观察到输出的变化为 :math:`\Delta y` ,那么,梯度就可以通过这个方程计算得到 :math:`\frac{\Delta y}{\Delta x }` 。之后,再用这个梯度去和 :code:`backward` 函数得到的梯度去对比,以保证梯度计算的正确性。需要注意的是梯度检查仅仅验证了梯度的计算,并不保证 :code:`forward` 和 :code:`backward` 函数的实现是正确的。你需要一些更复杂的单元测试来保证你实现的网络层是正确的。 -所有网络层的梯度检查单测都位于 :code:`paddle/gserver/tests/test_LayerGrad.cpp` 。我们建议你在写新网络层时把测试代码放入新的文件中。下面列出了全连接层的梯度检查单元测试。它包含以下几步: +所有网络层的梯度检查单测都位于 :code:`paddle/legacy/gserver/tests/test_LayerGrad.cpp` 。我们建议你在写新网络层时把测试代码放入新的文件中。下面列出了全连接层的梯度检查单元测试。它包含以下几步: + 生成网络层配置。网络层配置包含以下几项: - 偏置参数的大小。(例子中是4096) @@ -322,7 +322,7 @@ PaddlePaddle的base layer类可以自动计算上面的导数。 } } -如果你要为了测试而增加新的文件,例如 :code:`paddle/gserver/tests/testFCGrad.cpp` ,你需要把该文件加入 :code:`paddle/gserver/tests/CMakeLists.txt` 中。下面给出了一个例子。当你执行命令 :code:`make tests` 时,所有的单测都会被执行一次。注意,有些层可能需要高精度来保证梯度检查单测正确执行。你需要在配置cmake时将 :code:`WITH_DOUBLE` 设置为 `ON` 。 +如果你要为了测试而增加新的文件,例如 :code:`paddle/legacy/gserver/tests/testFCGrad.cpp` ,你需要把该文件加入 :code:`paddle/legacy/gserver/tests/CMakeLists.txt` 中。下面给出了一个例子。当你执行命令 :code:`make tests` 时,所有的单测都会被执行一次。注意,有些层可能需要高精度来保证梯度检查单测正确执行。你需要在配置cmake时将 :code:`WITH_DOUBLE` 设置为 `ON` 。 .. code-block:: bash diff --git a/doc/v2/dev/new_layer_en.rst b/doc/v2/dev/new_layer_en.rst index b05bb45f11..8ac381699e 100644 --- a/doc/v2/dev/new_layer_en.rst +++ b/doc/v2/dev/new_layer_en.rst @@ -58,7 +58,7 @@ Finally we can use chain rule to calculate :math:`\frac{\partial z}{\partial x}` Implement C++ Class =================== -The C++ class of the layer implements the initialization, forward, and backward part of the layer. The fully connected layer is at :code:`paddle/gserver/layers/FullyConnectedLayer.h` and :code:`paddle/gserver/layers/FullyConnectedLayer.cpp`. We list simplified version of the code below. +The C++ class of the layer implements the initialization, forward, and backward part of the layer. The fully connected layer is at :code:`paddle/legacy/gserver/layers/FullyConnectedLayer.h` and :code:`paddle/legacy/gserver/layers/FullyConnectedLayer.cpp`. We list simplified version of the code below. It needs to derive the base class :code:`paddle::Layer`, and it needs to override the following functions: @@ -263,7 +263,7 @@ Finally, you can use :code:`REGISTER_LAYER(fc, FullyConnectedLayer);` to registe REGISTER_LAYER(fc, FullyConnectedLayer); } -If the :code:`cpp` file is put into :code:`paddle/gserver/layers`, it will be automatically added to the compilation list. +If the :code:`cpp` file is put into :code:`paddle/legacy/gserver/layers`, it will be automatically added to the compilation list. Write Gradient Check Unit Test @@ -271,7 +271,7 @@ Write Gradient Check Unit Test An easy way to verify the correctness of new layer's implementation is to write a gradient check unit test. Gradient check unit test utilizes finite difference method to verify the gradient of a layer. It modifies the input with a small perturbation :math:`\Delta x` and observes the changes of output :math:`\Delta y`, the gradient can be computed as :math:`\frac{\Delta y}{\Delta x }`. This gradient can be compared with the gradient computed by the :code:`backward` function of the layer to ensure the correctness of the gradient computation. Notice that the gradient check only tests the correctness of the gradient computation, it does not necessarily guarantee the correctness of the implementation of the :code:`forward` and :code:`backward` function. You need to write more sophisticated unit tests to make sure your layer is implemented correctly. -All the gradient check unit tests are located in :code:`paddle/gserver/tests/test_LayerGrad.cpp`. You are recommended to put your test into a new test file if you are planning to write a new layer. The gradient test of the gradient check unit test of the fully connected layer is listed below. It has the following steps. +All the gradient check unit tests are located in :code:`paddle/legacy/gserver/tests/test_LayerGrad.cpp`. You are recommended to put your test into a new test file if you are planning to write a new layer. The gradient test of the gradient check unit test of the fully connected layer is listed below. It has the following steps. + Create layer configuration. A layer configuration can include the following attributes: - size of the bias parameter. (4096 in our example) @@ -323,7 +323,7 @@ All the gradient check unit tests are located in :code:`paddle/gserver/tests/tes } } -If you are creating a new file for the test, such as :code:`paddle/gserver/tests/testFCGrad.cpp`, you need to add the file to :code:`paddle/gserver/tests/CMakeLists.txt`. An example is given below. All the unit tests will run when you execute the command :code:`make tests`. Notice that some layers might need high accuracy for the gradient check unit tests to work well. You need to configure :code:`WITH_DOUBLE` to `ON` when configuring cmake. +If you are creating a new file for the test, such as :code:`paddle/legacy/gserver/tests/testFCGrad.cpp`, you need to add the file to :code:`paddle/legacy/gserver/tests/CMakeLists.txt`. An example is given below. All the unit tests will run when you execute the command :code:`make tests`. Notice that some layers might need high accuracy for the gradient check unit tests to work well. You need to configure :code:`WITH_DOUBLE` to `ON` when configuring cmake. .. code-block:: bash diff --git a/doc/v2/faq/parameter/index_cn.rst b/doc/v2/faq/parameter/index_cn.rst index 1fa4b3e131..987e8cf088 100644 --- a/doc/v2/faq/parameter/index_cn.rst +++ b/doc/v2/faq/parameter/index_cn.rst @@ -196,6 +196,6 @@ PaddlePaddle保存的模型参数文件内容由16字节头信息和网络参数 obj="process", args={"src_dict_path": src_dict_path}) -完整源码可参考 `sequence_recurrent `_ 示例。 +完整源码可参考 `sequence_recurrent `_ 示例。 diff --git a/doc/v2/howto/rnn/hrnn_rnn_api_compare_cn.rst b/doc/v2/howto/rnn/hrnn_rnn_api_compare_cn.rst index 67c7b774e9..9d6d417075 100644 --- a/doc/v2/howto/rnn/hrnn_rnn_api_compare_cn.rst +++ b/doc/v2/howto/rnn/hrnn_rnn_api_compare_cn.rst @@ -4,7 +4,7 @@ 单双层RNN API对比介绍 ##################### -本文以PaddlePaddle的双层RNN单元测试为示例,用多对效果完全相同的、分别使用单双层RNN作为网络配置的模型,来讲解如何使用双层RNN。本文中所有的例子,都只是介绍双层RNN的API接口,并不是使用双层RNN解决实际的问题。如果想要了解双层RNN在具体问题中的使用,请参考\ :ref:`algo_hrnn_demo`\ 。本文中示例所使用的单元测试文件是\ `test_RecurrentGradientMachine.cpp `_\ 。 +本文以PaddlePaddle的双层RNN单元测试为示例,用多对效果完全相同的、分别使用单双层RNN作为网络配置的模型,来讲解如何使用双层RNN。本文中所有的例子,都只是介绍双层RNN的API接口,并不是使用双层RNN解决实际的问题。如果想要了解双层RNN在具体问题中的使用,请参考\ :ref:`algo_hrnn_demo`\ 。本文中示例所使用的单元测试文件是\ `test_RecurrentGradientMachine.cpp `_\ 。 示例1:双层RNN,子序列间无Memory ================================ @@ -13,8 +13,8 @@ 在本示例中,单层RNN和双层RNN的网络配置,都是将每一句分好词后的句子,使用LSTM作为encoder,压缩成一个向量。区别是RNN使用两层序列模型,将多句话看成一个整体同时使用encoder压缩。二者语意上完全一致。这组语义相同的示例配置如下: -* 单层RNN\: `sequence_layer_group.conf `_ -* 双层RNN\: `sequence_nest_layer_group.conf `_ +* 单层RNN\: `sequence_layer_group.conf `_ +* 双层RNN\: `sequence_nest_layer_group.conf `_ 读取双层序列数据 @@ -24,18 +24,18 @@ - 本例中的原始数据一共有10个样本。每个样本由两部分组成,一个label(此处都为2)和一个已经分词后的句子。这个数据也被单层RNN网络直接使用。 -.. literalinclude:: ../../../../paddle/gserver/tests/Sequence/tour_train_wdseg +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/Sequence/tour_train_wdseg :language: text - 双层序列数据一共有4个样本。 每个样本间用空行分开,整体数据和原始数据完全一样。但于双层序列的LSTM来说,第一个样本同时encode两条数据成两个向量。这四条数据同时处理的句子数量为\ :code:`[2, 3, 2, 3]`\ 。 -.. literalinclude:: ../../../../paddle/gserver/tests/Sequence/tour_train_wdseg.nest +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/Sequence/tour_train_wdseg.nest :language: text -其次,对于两种不同的输入数据类型,不同DataProvider对比如下(`sequenceGen.py `_)\: +其次,对于两种不同的输入数据类型,不同DataProvider对比如下(`sequenceGen.py `_)\: -.. literalinclude:: ../../../../paddle/gserver/tests/sequenceGen.py +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequenceGen.py :language: python :lines: 21-39 :linenos: @@ -47,7 +47,7 @@ - words是原始数据中的每一句话,所对应的词表index数组。它是integer_value_sequence类型的,即整数数组。words即为这个数据中的单层时间序列。 - label是原始数据中对于每一句话的分类标签,它是integer_value类型的。 -.. literalinclude:: ../../../../paddle/gserver/tests/sequenceGen.py +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequenceGen.py :language: python :lines: 42-71 :linenos: @@ -64,7 +64,7 @@ 首先,我们看一下单层RNN的配置。代码中9-15行(高亮部分)即为单层RNN序列的使用代码。这里使用了PaddlePaddle预定义好的RNN处理函数。在这个函数中,RNN对于每一个时间步通过了一个LSTM网络。 -.. literalinclude:: ../../../../paddle/gserver/tests/sequence_layer_group.conf +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequence_layer_group.conf :language: python :lines: 38-63 :linenos: @@ -85,7 +85,7 @@ * 至此,\ :code:`lstm_last`\ 便和单层RNN配置中的\ :code:`lstm_last`\ 具有相同的结果了。 -.. literalinclude:: ../../../../paddle/gserver/tests/sequence_nest_layer_group.conf +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequence_nest_layer_group.conf :language: python :lines: 38-64 :linenos: @@ -107,7 +107,7 @@ - 单层RNN:过了一个很简单的recurrent_group。每一个时间步,当前的输入y和上一个时间步的输出rnn_state做了一个全链接。 -.. literalinclude:: ../../../../paddle/gserver/tests/sequence_rnn.conf +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequence_rnn.conf :language: python :lines: 36-48 @@ -116,7 +116,7 @@ - 内层inner_step的recurrent_group和单层序列的几乎一样。除了boot_layer=outer_mem,表示将外层的outer_mem作为内层memory的初始状态。外层outer_step中,outer_mem是一个子句的最后一个向量,即整个双层group是将前一个子句的最后一个向量,作为下一个子句memory的初始状态。 - 从输入数据上看,单双层序列的句子是一样的,只是双层序列将其又做了子序列划分。因此双层序列的配置中,必须将前一个子句的最后一个元素,作为boot_layer传给下一个子句的memory,才能保证和单层序列的配置中“每个时间步都用了上一个时间步的输出结果”一致。 -.. literalinclude:: ../../../../paddle/gserver/tests/sequence_nest_rnn.conf +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequence_nest_rnn.conf :language: python :lines: 39-66 @@ -134,7 +134,7 @@ **输入不等长** 是指recurrent_group的多个输入序列,在每个时间步的子序列长度可以不相等。但序列输出时,需要指定与某一个输入的序列信息是一致的。使用\ :red:`targetInlink`\ 可以指定哪一个输入和输出序列信息一致,默认指定第一个输入。 -示例3的配置分别为\ `单层不等长RNN `_\ 和\ `双层不等长RNN `_\ 。 +示例3的配置分别为\ `单层不等长RNN `_\ 和\ `双层不等长RNN `_\ 。 示例3对于单层RNN和双层RNN数据完全相同。 @@ -152,14 +152,14 @@ * 单层RNN\: -.. literalinclude:: ../../../../paddle/gserver/tests/sequence_rnn_multi_unequalength_inputs.py +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequence_rnn_multi_unequalength_inputs.py :language: python :lines: 42-59 :linenos: * 双层RNN\ \: -.. literalinclude:: ../../../../paddle/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py :language: python :lines: 41-80 :linenos: diff --git a/doc/v2/howto/rnn/hrnn_rnn_api_compare_en.rst b/doc/v2/howto/rnn/hrnn_rnn_api_compare_en.rst index ae997f0805..a4485f7b5e 100644 --- a/doc/v2/howto/rnn/hrnn_rnn_api_compare_en.rst +++ b/doc/v2/howto/rnn/hrnn_rnn_api_compare_en.rst @@ -4,7 +4,7 @@ API comparision between RNN and hierarchical RNN ##################### -This article takes PaddlePaddle's hierarchical RNN unit test as an example. We will use several examples to illestrate the usage of single-layer and hierarchical RNNs. Each example has two model configurations, one for single-layer, and the other for hierarchical RNN. Although the implementations are different, both the two model configurations' effects are the same. All of the examples in this article only describe the API interface of the hierarchical RNN, while we do not use this hierarchical RNN to solve practical problems. If you want to understand the use of hierarchical RNN in specific issues, please refer to \ :ref:`algo_hrnn_demo`\ 。The unit test file used in this article's example is \ `test_RecurrentGradientMachine.cpp `_\ 。 +This article takes PaddlePaddle's hierarchical RNN unit test as an example. We will use several examples to illestrate the usage of single-layer and hierarchical RNNs. Each example has two model configurations, one for single-layer, and the other for hierarchical RNN. Although the implementations are different, both the two model configurations' effects are the same. All of the examples in this article only describe the API interface of the hierarchical RNN, while we do not use this hierarchical RNN to solve practical problems. If you want to understand the use of hierarchical RNN in specific issues, please refer to \ :ref:`algo_hrnn_demo`\ 。The unit test file used in this article's example is \ `test_RecurrentGradientMachine.cpp `_\ 。 Example 1:Hierarchical RNN without Memory between subsequences ================================ @@ -13,8 +13,8 @@ The classical case in the hierarchical RNN is to perform sequence operations on In this example, the network configuration of single-layer RNNs and hierarchical RNNs are all to use LSTM as en encoder to compress a word-segmented sentence into a vector. The difference is that, RNN uses a hierarchical RNN model, treating multiple sentences as a whole to use encoder to compress simultaneously. They are completely consistent in their semantic meanings. This pair of semantically identical example configurations is as follows: -* RNN\: `sequence_layer_group.conf `_ -* Hierarchical RNN\: `sequence_nest_layer_group.conf `_ +* RNN\: `sequence_layer_group.conf `_ +* Hierarchical RNN\: `sequence_nest_layer_group.conf `_ Reading hierarchical sequence data @@ -24,18 +24,18 @@ Firstly, the original data in this example is as follows \: - The original data in this example has 10 samples. Each of the sample includes two components: a lable(all 2 here), and a word-segmented sentence. This data is used by single RNN as well. -.. literalinclude:: ../../../../paddle/gserver/tests/Sequence/tour_train_wdseg +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/Sequence/tour_train_wdseg :language: text - The data for hierarchical RNN has 4 samples. Every sample is seperated by a blank line, while the content of the data is the same as the original data. But as for hierarchical LSTM, the first sample will encode two sentences into two vectors simultaneously. The sentence count dealed simultaneously by this 4 samples are \ :code:`[2, 3, 2, 3]`\ . -.. literalinclude:: ../../../../paddle/gserver/tests/Sequence/tour_train_wdseg.nest +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/Sequence/tour_train_wdseg.nest :language: text -Secondly, as for these two types of different input data formats, the contrast of different DataProviders are as follows (`sequenceGen.py `_)\: +Secondly, as for these two types of different input data formats, the contrast of different DataProviders are as follows (`sequenceGen.py `_)\: -.. literalinclude:: ../../../../paddle/gserver/tests/sequenceGen.py +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequenceGen.py :language: python :lines: 21-39 :linenos: @@ -47,7 +47,7 @@ Secondly, as for these two types of different input data formats, the contrast o - "words" is a list of word table indices corresponding to each word in the sentence in the original data. Its data type is integer_value_sequence, that is integer list. So, "words" is a singler-layer time series in the data. - "label" is the categorical label of each sentence, whose data type is integer_value. -.. literalinclude:: ../../../../paddle/gserver/tests/sequenceGen.py +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequenceGen.py :language: python :lines: 42-71 :linenos: @@ -64,7 +64,7 @@ Model configuration Firstly, let's look at the configuration of single-layer RNN. The hightlighted part of line 9 to line 15 is the usage of single-layer RNN. Here we use the pre-defined RNN process function in PaddlePaddle. In this function, for each time step, RNN passes through an LSTM network. -.. literalinclude:: ../../../../paddle/gserver/tests/sequence_layer_group.conf +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequence_layer_group.conf :language: python :lines: 38-63 :linenos: @@ -85,7 +85,7 @@ Secondly, let's look at the model configuration of hierarchical RNN which has th * Till now, \ :code:`lstm_last`\ has the same result as \ :code:`lstm_last`\ in single-layer RNN configuration. -.. literalinclude:: ../../../../paddle/gserver/tests/sequence_nest_layer_group.conf +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequence_nest_layer_group.conf :language: python :lines: 38-64 :linenos: @@ -107,7 +107,7 @@ We select the different parts between single-layer RNN and hierarchical RNN conf - single-layer RNN:passes through a simple recurrent_group. For each time step, the current input y and the last time step's output rnn_state pass through a fully-connected layer. -.. literalinclude:: ../../../../paddle/gserver/tests/sequence_rnn.conf +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequence_rnn.conf :language: python :lines: 36-48 @@ -116,7 +116,7 @@ We select the different parts between single-layer RNN and hierarchical RNN conf - The recurrent_group of inner layer's inner_step is nearly the same as single-layer sequence, except for the case of boot_layer=outer_mem, which means using the outer layer's outer_mem as the initial state for the inner layer's memory. In the outer layer's out_step, outer_mem is the last vector of a subsequence, that is, the whole hierarchical group uses the last vector of the previous subsequence as the initial state for the next subsequence's memory. - From the aspect of the input data, sentences from single-layer and hierarchical RNN are the same. The only difference is that, hierarchical RNN disassembes the sequence into subsequences. So in the hierarchical RNN configuration, we must use the last element of the previous subsequence as a boot_layer for the memory of the next subsequence, so that it makes no difference with "every time step uses the output of last time step" in the sigle-layer RNN configuration. -.. literalinclude:: ../../../../paddle/gserver/tests/sequence_nest_rnn.conf +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequence_nest_rnn.conf :language: python :lines: 39-66 @@ -134,7 +134,7 @@ Example 3:hierarchical RNN with unequal length inputs **unequal length inputs** means in the multiple input sequences of recurrent_group, the lengths of subsequences can be unequal. But the output of the sequence, needs to be consistent with one of the input sequences. Using \ :red:`targetInlink`\ can help you specify which of the input sequences and the output sequence can be consistent, by default is the first input. -The configurations of Example 3 are \ `sequence_rnn_multi_unequalength_inputs `_ \ and \ `sequence_nest_rnn_multi_unequalength_inputs `_\ . +The configurations of Example 3 are \ `sequence_rnn_multi_unequalength_inputs `_ \ and \ `sequence_nest_rnn_multi_unequalength_inputs `_\ . The data for the configurations of Example 3's single-layer RNN and hierarchical RNN are exactly the same. @@ -152,14 +152,14 @@ Similar to Example 2's configuration, Example 3's configuration uses single-laye * single-layer RNN\: -.. literalinclude:: ../../../../paddle/gserver/tests/sequence_rnn_multi_unequalength_inputs.py +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequence_rnn_multi_unequalength_inputs.py :language: python :lines: 42-59 :linenos: * hierarchical RNN\ \: -.. literalinclude:: ../../../../paddle/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py +.. literalinclude:: ../../../../paddle/legacy/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py :language: python :lines: 41-80 :linenos: diff --git a/paddle/CMakeLists.txt b/paddle/CMakeLists.txt index d722eec189..fb90b9febd 100644 --- a/paddle/CMakeLists.txt +++ b/paddle/CMakeLists.txt @@ -3,7 +3,7 @@ if(NOT WITH_FLUID_ONLY) add_subdirectory(function) add_subdirectory(utils) add_subdirectory(math) - add_subdirectory(gserver) + add_subdirectory(legacy/gserver) add_subdirectory(parameter) if(MOBILE_INFERENCE) diff --git a/paddle/api/GradientMachine.cpp b/paddle/api/GradientMachine.cpp index 0d9ad30de9..5ad2fe11a4 100644 --- a/paddle/api/GradientMachine.cpp +++ b/paddle/api/GradientMachine.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include "PaddleAPIPrivate.h" #include "Internal.h" -#include "paddle/gserver/gradientmachines/NeuralNetwork.h" +#include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" std::vector GradientMachine::defaultParamTypes = { PARAMETER_VALUE, PARAMETER_GRADIENT, PARAMETER_MOMENTUM}; diff --git a/paddle/api/PaddleAPI.h b/paddle/api/PaddleAPI.h index 7866122006..ba3e815498 100644 --- a/paddle/api/PaddleAPI.h +++ b/paddle/api/PaddleAPI.h @@ -19,7 +19,7 @@ limitations under the License. */ #include #include #include -#include "paddle/gserver/gradientmachines/GradientMachine.h" +#include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" #include "paddle/utils/Common.h" #include "paddle/utils/GlobalConstants.h" diff --git a/paddle/api/PaddleAPIPrivate.h b/paddle/api/PaddleAPIPrivate.h index e141fcd761..330ca1a5f2 100644 --- a/paddle/api/PaddleAPIPrivate.h +++ b/paddle/api/PaddleAPIPrivate.h @@ -14,8 +14,8 @@ limitations under the License. */ #pragma once #include #include "PaddleAPI.h" -#include "paddle/gserver/evaluators/Evaluator.h" -#include "paddle/gserver/gradientmachines/GradientMachine.h" +#include "paddle/legacy/gserver/evaluators/Evaluator.h" +#include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" #include "paddle/parameter/ParameterUpdaterBase.h" #include "paddle/trainer/TrainerConfigHelper.h" diff --git a/paddle/api/SequenceGenerator.cpp b/paddle/api/SequenceGenerator.cpp index 1446c30842..187faaf28c 100644 --- a/paddle/api/SequenceGenerator.cpp +++ b/paddle/api/SequenceGenerator.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include #include #include "PaddleAPI.h" -#include "paddle/gserver/gradientmachines/GradientMachine.h" +#include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" #include "paddle/parameter/Argument.h" #include "paddle/utils/Flags.h" diff --git a/paddle/api/Trainer.cpp b/paddle/api/Trainer.cpp index 795460b650..6506acb738 100644 --- a/paddle/api/Trainer.cpp +++ b/paddle/api/Trainer.cpp @@ -19,7 +19,7 @@ limitations under the License. */ #include #include -#include "paddle/gserver/gradientmachines/NeuralNetwork.h" +#include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" #include "paddle/trainer/ParamUtil.h" #include "paddle/trainer/Trainer.h" #include "paddle/trainer/TrainerInternal.h" diff --git a/paddle/capi/capi_private.h b/paddle/capi/capi_private.h index 3332f42a4a..f9a55a92d9 100644 --- a/paddle/capi/capi_private.h +++ b/paddle/capi/capi_private.h @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "capi.h" -#include "paddle/gserver/gradientmachines/GradientMachine.h" +#include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" #include "paddle/math/Matrix.h" #include "paddle/math/Vector.h" #include "paddle/parameter/Argument.h" diff --git a/paddle/capi/gradient_machine.cpp b/paddle/capi/gradient_machine.cpp index 8c3f504e5a..0c5ddd856b 100644 --- a/paddle/capi/gradient_machine.cpp +++ b/paddle/capi/gradient_machine.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "gradient_machine.h" #include "capi_private.h" -#include "paddle/gserver/gradientmachines/NeuralNetwork.h" +#include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" #define cast(v) paddle::capi::cast(v) diff --git a/paddle/capi/tests/test_GradientMachine.cpp b/paddle/capi/tests/test_GradientMachine.cpp index 73b9e477b2..2c02669ccf 100644 --- a/paddle/capi/tests/test_GradientMachine.cpp +++ b/paddle/capi/tests/test_GradientMachine.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include +#include #include #include #include diff --git a/paddle/gserver/CMakeLists.txt b/paddle/legacy/gserver/CMakeLists.txt similarity index 100% rename from paddle/gserver/CMakeLists.txt rename to paddle/legacy/gserver/CMakeLists.txt diff --git a/paddle/gserver/activations/ActivationFunction.cpp b/paddle/legacy/gserver/activations/ActivationFunction.cpp similarity index 100% rename from paddle/gserver/activations/ActivationFunction.cpp rename to paddle/legacy/gserver/activations/ActivationFunction.cpp diff --git a/paddle/gserver/activations/ActivationFunction.h b/paddle/legacy/gserver/activations/ActivationFunction.h similarity index 100% rename from paddle/gserver/activations/ActivationFunction.h rename to paddle/legacy/gserver/activations/ActivationFunction.h diff --git a/paddle/gserver/activations/MKLDNNActivation.cpp b/paddle/legacy/gserver/activations/MKLDNNActivation.cpp similarity index 100% rename from paddle/gserver/activations/MKLDNNActivation.cpp rename to paddle/legacy/gserver/activations/MKLDNNActivation.cpp diff --git a/paddle/gserver/activations/MKLDNNActivation.h b/paddle/legacy/gserver/activations/MKLDNNActivation.h similarity index 98% rename from paddle/gserver/activations/MKLDNNActivation.h rename to paddle/legacy/gserver/activations/MKLDNNActivation.h index eece1b9c37..dd1ff6a9aa 100644 --- a/paddle/gserver/activations/MKLDNNActivation.h +++ b/paddle/legacy/gserver/activations/MKLDNNActivation.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "ActivationFunction.h" #include "mkldnn.hpp" -#include "paddle/gserver/layers/MKLDNNBase.h" +#include "paddle/legacy/gserver/layers/MKLDNNBase.h" #include "paddle/math/MKLDNNMatrix.h" #include "paddle/parameter/Argument.h" diff --git a/paddle/gserver/dataproviders/DataProvider.cpp b/paddle/legacy/gserver/dataproviders/DataProvider.cpp similarity index 100% rename from paddle/gserver/dataproviders/DataProvider.cpp rename to paddle/legacy/gserver/dataproviders/DataProvider.cpp diff --git a/paddle/gserver/dataproviders/DataProvider.h b/paddle/legacy/gserver/dataproviders/DataProvider.h similarity index 100% rename from paddle/gserver/dataproviders/DataProvider.h rename to paddle/legacy/gserver/dataproviders/DataProvider.h diff --git a/paddle/gserver/dataproviders/DataProviderGroup.h b/paddle/legacy/gserver/dataproviders/DataProviderGroup.h similarity index 100% rename from paddle/gserver/dataproviders/DataProviderGroup.h rename to paddle/legacy/gserver/dataproviders/DataProviderGroup.h diff --git a/paddle/gserver/dataproviders/MultiDataProvider.cpp b/paddle/legacy/gserver/dataproviders/MultiDataProvider.cpp similarity index 100% rename from paddle/gserver/dataproviders/MultiDataProvider.cpp rename to paddle/legacy/gserver/dataproviders/MultiDataProvider.cpp diff --git a/paddle/gserver/dataproviders/MultiDataProvider.h b/paddle/legacy/gserver/dataproviders/MultiDataProvider.h similarity index 100% rename from paddle/gserver/dataproviders/MultiDataProvider.h rename to paddle/legacy/gserver/dataproviders/MultiDataProvider.h diff --git a/paddle/gserver/dataproviders/ProtoReader.h b/paddle/legacy/gserver/dataproviders/ProtoReader.h similarity index 100% rename from paddle/gserver/dataproviders/ProtoReader.h rename to paddle/legacy/gserver/dataproviders/ProtoReader.h diff --git a/paddle/gserver/dataproviders/PyDataProvider.cpp b/paddle/legacy/gserver/dataproviders/PyDataProvider.cpp similarity index 100% rename from paddle/gserver/dataproviders/PyDataProvider.cpp rename to paddle/legacy/gserver/dataproviders/PyDataProvider.cpp diff --git a/paddle/gserver/dataproviders/PyDataProvider.h b/paddle/legacy/gserver/dataproviders/PyDataProvider.h similarity index 100% rename from paddle/gserver/dataproviders/PyDataProvider.h rename to paddle/legacy/gserver/dataproviders/PyDataProvider.h diff --git a/paddle/gserver/dataproviders/PyDataProvider2.cpp b/paddle/legacy/gserver/dataproviders/PyDataProvider2.cpp similarity index 100% rename from paddle/gserver/dataproviders/PyDataProvider2.cpp rename to paddle/legacy/gserver/dataproviders/PyDataProvider2.cpp diff --git a/paddle/gserver/evaluators/CTCErrorEvaluator.cpp b/paddle/legacy/gserver/evaluators/CTCErrorEvaluator.cpp similarity index 99% rename from paddle/gserver/evaluators/CTCErrorEvaluator.cpp rename to paddle/legacy/gserver/evaluators/CTCErrorEvaluator.cpp index c6cd41de9a..04335dc7cd 100644 --- a/paddle/gserver/evaluators/CTCErrorEvaluator.cpp +++ b/paddle/legacy/gserver/evaluators/CTCErrorEvaluator.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Evaluator.h" -#include "paddle/gserver/gradientmachines/NeuralNetwork.h" +#include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" #include "paddle/utils/StringUtil.h" namespace paddle { diff --git a/paddle/gserver/evaluators/ChunkEvaluator.cpp b/paddle/legacy/gserver/evaluators/ChunkEvaluator.cpp similarity index 100% rename from paddle/gserver/evaluators/ChunkEvaluator.cpp rename to paddle/legacy/gserver/evaluators/ChunkEvaluator.cpp diff --git a/paddle/gserver/evaluators/DetectionMAPEvaluator.cpp b/paddle/legacy/gserver/evaluators/DetectionMAPEvaluator.cpp similarity index 99% rename from paddle/gserver/evaluators/DetectionMAPEvaluator.cpp rename to paddle/legacy/gserver/evaluators/DetectionMAPEvaluator.cpp index ddb8ebca78..57657241f8 100644 --- a/paddle/gserver/evaluators/DetectionMAPEvaluator.cpp +++ b/paddle/legacy/gserver/evaluators/DetectionMAPEvaluator.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Evaluator.h" -#include "paddle/gserver/layers/DetectionUtil.h" +#include "paddle/legacy/gserver/layers/DetectionUtil.h" using std::map; using std::vector; diff --git a/paddle/gserver/evaluators/Evaluator.cpp b/paddle/legacy/gserver/evaluators/Evaluator.cpp similarity index 99% rename from paddle/gserver/evaluators/Evaluator.cpp rename to paddle/legacy/gserver/evaluators/Evaluator.cpp index 941fb8fb53..436c33e43b 100644 --- a/paddle/gserver/evaluators/Evaluator.cpp +++ b/paddle/legacy/gserver/evaluators/Evaluator.cpp @@ -12,8 +12,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/gserver/evaluators/Evaluator.h" -#include "paddle/gserver/gradientmachines/NeuralNetwork.h" +#include "paddle/legacy/gserver/evaluators/Evaluator.h" +#include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" #include "paddle/utils/Stat.h" #include "paddle/utils/StringUtil.h" diff --git a/paddle/gserver/evaluators/Evaluator.h b/paddle/legacy/gserver/evaluators/Evaluator.h similarity index 100% rename from paddle/gserver/evaluators/Evaluator.h rename to paddle/legacy/gserver/evaluators/Evaluator.h diff --git a/paddle/gserver/gradientmachines/GradientMachine.cpp b/paddle/legacy/gserver/gradientmachines/GradientMachine.cpp similarity index 100% rename from paddle/gserver/gradientmachines/GradientMachine.cpp rename to paddle/legacy/gserver/gradientmachines/GradientMachine.cpp diff --git a/paddle/gserver/gradientmachines/GradientMachine.h b/paddle/legacy/gserver/gradientmachines/GradientMachine.h similarity index 97% rename from paddle/gserver/gradientmachines/GradientMachine.h rename to paddle/legacy/gserver/gradientmachines/GradientMachine.h index 22cf5d265f..d732739c87 100644 --- a/paddle/gserver/gradientmachines/GradientMachine.h +++ b/paddle/legacy/gserver/gradientmachines/GradientMachine.h @@ -19,15 +19,15 @@ limitations under the License. */ #include "ModelConfig.pb.h" #include "TrainerConfig.pb.h" -#include "paddle/gserver/dataproviders/DataProvider.h" -#include "paddle/gserver/layers/Layer.h" +#include "paddle/legacy/gserver/dataproviders/DataProvider.h" +#include "paddle/legacy/gserver/layers/Layer.h" #include "paddle/math/Matrix.h" #include "paddle/parameter/Parameter.h" #include "paddle/parameter/ParameterUpdaterBase.h" #include "paddle/utils/Thread.h" #ifndef PADDLE_MOBILE_INFERENCE -#include "paddle/gserver/evaluators/Evaluator.h" +#include "paddle/legacy/gserver/evaluators/Evaluator.h" #endif namespace paddle { diff --git a/paddle/gserver/gradientmachines/GradientMachineMode.cpp b/paddle/legacy/gserver/gradientmachines/GradientMachineMode.cpp similarity index 100% rename from paddle/gserver/gradientmachines/GradientMachineMode.cpp rename to paddle/legacy/gserver/gradientmachines/GradientMachineMode.cpp diff --git a/paddle/gserver/gradientmachines/GradientMachineMode.h b/paddle/legacy/gserver/gradientmachines/GradientMachineMode.h similarity index 100% rename from paddle/gserver/gradientmachines/GradientMachineMode.h rename to paddle/legacy/gserver/gradientmachines/GradientMachineMode.h diff --git a/paddle/gserver/gradientmachines/MultiGradientMachine.cpp b/paddle/legacy/gserver/gradientmachines/MultiGradientMachine.cpp similarity index 100% rename from paddle/gserver/gradientmachines/MultiGradientMachine.cpp rename to paddle/legacy/gserver/gradientmachines/MultiGradientMachine.cpp diff --git a/paddle/gserver/gradientmachines/MultiGradientMachine.h b/paddle/legacy/gserver/gradientmachines/MultiGradientMachine.h similarity index 100% rename from paddle/gserver/gradientmachines/MultiGradientMachine.h rename to paddle/legacy/gserver/gradientmachines/MultiGradientMachine.h diff --git a/paddle/gserver/gradientmachines/MultiNetwork.cpp b/paddle/legacy/gserver/gradientmachines/MultiNetwork.cpp similarity index 100% rename from paddle/gserver/gradientmachines/MultiNetwork.cpp rename to paddle/legacy/gserver/gradientmachines/MultiNetwork.cpp diff --git a/paddle/gserver/gradientmachines/MultiNetwork.h b/paddle/legacy/gserver/gradientmachines/MultiNetwork.h similarity index 100% rename from paddle/gserver/gradientmachines/MultiNetwork.h rename to paddle/legacy/gserver/gradientmachines/MultiNetwork.h diff --git a/paddle/gserver/gradientmachines/NeuralNetwork.cpp b/paddle/legacy/gserver/gradientmachines/NeuralNetwork.cpp similarity index 99% rename from paddle/gserver/gradientmachines/NeuralNetwork.cpp rename to paddle/legacy/gserver/gradientmachines/NeuralNetwork.cpp index ac60a3a340..339550c458 100644 --- a/paddle/gserver/gradientmachines/NeuralNetwork.cpp +++ b/paddle/legacy/gserver/gradientmachines/NeuralNetwork.cpp @@ -21,13 +21,13 @@ limitations under the License. */ #include "paddle/utils/Stat.h" #ifdef PADDLE_WITH_MKLDNN -#include "paddle/gserver/layers/MKLDNNLayer.h" +#include "paddle/legacy/gserver/layers/MKLDNNLayer.h" #endif #ifndef PADDLE_MOBILE_INFERENCE #include "MultiNetwork.h" #include "RecurrentGradientMachine.h" -#include "paddle/gserver/layers/AgentLayer.h" +#include "paddle/legacy/gserver/layers/AgentLayer.h" #endif namespace paddle { diff --git a/paddle/gserver/gradientmachines/NeuralNetwork.h b/paddle/legacy/gserver/gradientmachines/NeuralNetwork.h similarity index 95% rename from paddle/gserver/gradientmachines/NeuralNetwork.h rename to paddle/legacy/gserver/gradientmachines/NeuralNetwork.h index 3e5615c8f0..e5ccb72e62 100644 --- a/paddle/gserver/gradientmachines/NeuralNetwork.h +++ b/paddle/legacy/gserver/gradientmachines/NeuralNetwork.h @@ -19,11 +19,11 @@ limitations under the License. */ #include #include "ModelConfig.pb.h" -#include "paddle/gserver/dataproviders/DataProvider.h" -#include "paddle/gserver/gradientmachines/GradientMachine.h" -#include "paddle/gserver/layers/CostLayer.h" -#include "paddle/gserver/layers/DataLayer.h" -#include "paddle/gserver/layers/Layer.h" +#include "paddle/legacy/gserver/dataproviders/DataProvider.h" +#include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" +#include "paddle/legacy/gserver/layers/CostLayer.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/Layer.h" #include "paddle/parameter/Parameter.h" #include "paddle/utils/ClassRegistrar.h" diff --git a/paddle/gserver/gradientmachines/ParallelNeuralNetwork.cpp b/paddle/legacy/gserver/gradientmachines/ParallelNeuralNetwork.cpp similarity index 100% rename from paddle/gserver/gradientmachines/ParallelNeuralNetwork.cpp rename to paddle/legacy/gserver/gradientmachines/ParallelNeuralNetwork.cpp diff --git a/paddle/gserver/gradientmachines/ParallelNeuralNetwork.h b/paddle/legacy/gserver/gradientmachines/ParallelNeuralNetwork.h similarity index 100% rename from paddle/gserver/gradientmachines/ParallelNeuralNetwork.h rename to paddle/legacy/gserver/gradientmachines/ParallelNeuralNetwork.h diff --git a/paddle/gserver/gradientmachines/RecurrentGradientMachine.cpp b/paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.cpp similarity index 99% rename from paddle/gserver/gradientmachines/RecurrentGradientMachine.cpp rename to paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.cpp index 73ac8cda72..e749cf61f3 100644 --- a/paddle/gserver/gradientmachines/RecurrentGradientMachine.cpp +++ b/paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.cpp @@ -19,7 +19,7 @@ limitations under the License. */ #include #include #include "NeuralNetwork.h" -#include "paddle/gserver/layers/AgentLayer.h" +#include "paddle/legacy/gserver/layers/AgentLayer.h" #include "paddle/utils/Flags.h" #include "paddle/utils/Stat.h" #include "paddle/utils/Util.h" diff --git a/paddle/gserver/gradientmachines/RecurrentGradientMachine.h b/paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.h similarity index 100% rename from paddle/gserver/gradientmachines/RecurrentGradientMachine.h rename to paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.h diff --git a/paddle/gserver/layers/AddtoLayer.cpp b/paddle/legacy/gserver/layers/AddtoLayer.cpp similarity index 100% rename from paddle/gserver/layers/AddtoLayer.cpp rename to paddle/legacy/gserver/layers/AddtoLayer.cpp diff --git a/paddle/gserver/layers/AddtoLayer.h b/paddle/legacy/gserver/layers/AddtoLayer.h similarity index 100% rename from paddle/gserver/layers/AddtoLayer.h rename to paddle/legacy/gserver/layers/AddtoLayer.h diff --git a/paddle/gserver/layers/AgentLayer.cpp b/paddle/legacy/gserver/layers/AgentLayer.cpp similarity index 100% rename from paddle/gserver/layers/AgentLayer.cpp rename to paddle/legacy/gserver/layers/AgentLayer.cpp diff --git a/paddle/gserver/layers/AgentLayer.h b/paddle/legacy/gserver/layers/AgentLayer.h similarity index 100% rename from paddle/gserver/layers/AgentLayer.h rename to paddle/legacy/gserver/layers/AgentLayer.h diff --git a/paddle/gserver/layers/AverageLayer.cpp b/paddle/legacy/gserver/layers/AverageLayer.cpp similarity index 100% rename from paddle/gserver/layers/AverageLayer.cpp rename to paddle/legacy/gserver/layers/AverageLayer.cpp diff --git a/paddle/gserver/layers/AverageLayer.h b/paddle/legacy/gserver/layers/AverageLayer.h similarity index 100% rename from paddle/gserver/layers/AverageLayer.h rename to paddle/legacy/gserver/layers/AverageLayer.h diff --git a/paddle/gserver/layers/BatchNormBaseLayer.cpp b/paddle/legacy/gserver/layers/BatchNormBaseLayer.cpp similarity index 100% rename from paddle/gserver/layers/BatchNormBaseLayer.cpp rename to paddle/legacy/gserver/layers/BatchNormBaseLayer.cpp diff --git a/paddle/gserver/layers/BatchNormBaseLayer.h b/paddle/legacy/gserver/layers/BatchNormBaseLayer.h similarity index 100% rename from paddle/gserver/layers/BatchNormBaseLayer.h rename to paddle/legacy/gserver/layers/BatchNormBaseLayer.h diff --git a/paddle/gserver/layers/BatchNormalizationLayer.cpp b/paddle/legacy/gserver/layers/BatchNormalizationLayer.cpp similarity index 100% rename from paddle/gserver/layers/BatchNormalizationLayer.cpp rename to paddle/legacy/gserver/layers/BatchNormalizationLayer.cpp diff --git a/paddle/gserver/layers/BatchNormalizationLayer.h b/paddle/legacy/gserver/layers/BatchNormalizationLayer.h similarity index 100% rename from paddle/gserver/layers/BatchNormalizationLayer.h rename to paddle/legacy/gserver/layers/BatchNormalizationLayer.h diff --git a/paddle/gserver/layers/BilinearInterpLayer.cpp b/paddle/legacy/gserver/layers/BilinearInterpLayer.cpp similarity index 100% rename from paddle/gserver/layers/BilinearInterpLayer.cpp rename to paddle/legacy/gserver/layers/BilinearInterpLayer.cpp diff --git a/paddle/gserver/layers/BilinearInterpLayer.h b/paddle/legacy/gserver/layers/BilinearInterpLayer.h similarity index 100% rename from paddle/gserver/layers/BilinearInterpLayer.h rename to paddle/legacy/gserver/layers/BilinearInterpLayer.h diff --git a/paddle/gserver/layers/BlockExpandLayer.cpp b/paddle/legacy/gserver/layers/BlockExpandLayer.cpp similarity index 100% rename from paddle/gserver/layers/BlockExpandLayer.cpp rename to paddle/legacy/gserver/layers/BlockExpandLayer.cpp diff --git a/paddle/gserver/layers/BlockExpandLayer.h b/paddle/legacy/gserver/layers/BlockExpandLayer.h similarity index 100% rename from paddle/gserver/layers/BlockExpandLayer.h rename to paddle/legacy/gserver/layers/BlockExpandLayer.h diff --git a/paddle/gserver/layers/CRFDecodingLayer.cpp b/paddle/legacy/gserver/layers/CRFDecodingLayer.cpp similarity index 100% rename from paddle/gserver/layers/CRFDecodingLayer.cpp rename to paddle/legacy/gserver/layers/CRFDecodingLayer.cpp diff --git a/paddle/gserver/layers/CRFDecodingLayer.h b/paddle/legacy/gserver/layers/CRFDecodingLayer.h similarity index 100% rename from paddle/gserver/layers/CRFDecodingLayer.h rename to paddle/legacy/gserver/layers/CRFDecodingLayer.h diff --git a/paddle/gserver/layers/CRFLayer.cpp b/paddle/legacy/gserver/layers/CRFLayer.cpp similarity index 100% rename from paddle/gserver/layers/CRFLayer.cpp rename to paddle/legacy/gserver/layers/CRFLayer.cpp diff --git a/paddle/gserver/layers/CRFLayer.h b/paddle/legacy/gserver/layers/CRFLayer.h similarity index 100% rename from paddle/gserver/layers/CRFLayer.h rename to paddle/legacy/gserver/layers/CRFLayer.h diff --git a/paddle/gserver/layers/CTCLayer.cpp b/paddle/legacy/gserver/layers/CTCLayer.cpp similarity index 100% rename from paddle/gserver/layers/CTCLayer.cpp rename to paddle/legacy/gserver/layers/CTCLayer.cpp diff --git a/paddle/gserver/layers/CTCLayer.h b/paddle/legacy/gserver/layers/CTCLayer.h similarity index 100% rename from paddle/gserver/layers/CTCLayer.h rename to paddle/legacy/gserver/layers/CTCLayer.h diff --git a/paddle/gserver/layers/ClipLayer.cpp b/paddle/legacy/gserver/layers/ClipLayer.cpp similarity index 100% rename from paddle/gserver/layers/ClipLayer.cpp rename to paddle/legacy/gserver/layers/ClipLayer.cpp diff --git a/paddle/gserver/layers/ConcatenateLayer.cpp b/paddle/legacy/gserver/layers/ConcatenateLayer.cpp similarity index 100% rename from paddle/gserver/layers/ConcatenateLayer.cpp rename to paddle/legacy/gserver/layers/ConcatenateLayer.cpp diff --git a/paddle/gserver/layers/ContextProjection.cpp b/paddle/legacy/gserver/layers/ContextProjection.cpp similarity index 100% rename from paddle/gserver/layers/ContextProjection.cpp rename to paddle/legacy/gserver/layers/ContextProjection.cpp diff --git a/paddle/gserver/layers/ContextProjection.h b/paddle/legacy/gserver/layers/ContextProjection.h similarity index 100% rename from paddle/gserver/layers/ContextProjection.h rename to paddle/legacy/gserver/layers/ContextProjection.h diff --git a/paddle/gserver/layers/Conv3DLayer.cpp b/paddle/legacy/gserver/layers/Conv3DLayer.cpp similarity index 100% rename from paddle/gserver/layers/Conv3DLayer.cpp rename to paddle/legacy/gserver/layers/Conv3DLayer.cpp diff --git a/paddle/gserver/layers/Conv3DLayer.h b/paddle/legacy/gserver/layers/Conv3DLayer.h similarity index 100% rename from paddle/gserver/layers/Conv3DLayer.h rename to paddle/legacy/gserver/layers/Conv3DLayer.h diff --git a/paddle/gserver/layers/ConvBaseLayer.cpp b/paddle/legacy/gserver/layers/ConvBaseLayer.cpp similarity index 100% rename from paddle/gserver/layers/ConvBaseLayer.cpp rename to paddle/legacy/gserver/layers/ConvBaseLayer.cpp diff --git a/paddle/gserver/layers/ConvBaseLayer.h b/paddle/legacy/gserver/layers/ConvBaseLayer.h similarity index 100% rename from paddle/gserver/layers/ConvBaseLayer.h rename to paddle/legacy/gserver/layers/ConvBaseLayer.h diff --git a/paddle/gserver/layers/ConvBaseOperator.cpp b/paddle/legacy/gserver/layers/ConvBaseOperator.cpp similarity index 100% rename from paddle/gserver/layers/ConvBaseOperator.cpp rename to paddle/legacy/gserver/layers/ConvBaseOperator.cpp diff --git a/paddle/gserver/layers/ConvBaseOperator.h b/paddle/legacy/gserver/layers/ConvBaseOperator.h similarity index 100% rename from paddle/gserver/layers/ConvBaseOperator.h rename to paddle/legacy/gserver/layers/ConvBaseOperator.h diff --git a/paddle/gserver/layers/ConvBaseProjection.cpp b/paddle/legacy/gserver/layers/ConvBaseProjection.cpp similarity index 100% rename from paddle/gserver/layers/ConvBaseProjection.cpp rename to paddle/legacy/gserver/layers/ConvBaseProjection.cpp diff --git a/paddle/gserver/layers/ConvBaseProjection.h b/paddle/legacy/gserver/layers/ConvBaseProjection.h similarity index 100% rename from paddle/gserver/layers/ConvBaseProjection.h rename to paddle/legacy/gserver/layers/ConvBaseProjection.h diff --git a/paddle/gserver/layers/ConvOperator.cpp b/paddle/legacy/gserver/layers/ConvOperator.cpp similarity index 100% rename from paddle/gserver/layers/ConvOperator.cpp rename to paddle/legacy/gserver/layers/ConvOperator.cpp diff --git a/paddle/gserver/layers/ConvOperator.h b/paddle/legacy/gserver/layers/ConvOperator.h similarity index 100% rename from paddle/gserver/layers/ConvOperator.h rename to paddle/legacy/gserver/layers/ConvOperator.h diff --git a/paddle/gserver/layers/ConvProjection.cpp b/paddle/legacy/gserver/layers/ConvProjection.cpp similarity index 100% rename from paddle/gserver/layers/ConvProjection.cpp rename to paddle/legacy/gserver/layers/ConvProjection.cpp diff --git a/paddle/gserver/layers/ConvProjection.h b/paddle/legacy/gserver/layers/ConvProjection.h similarity index 100% rename from paddle/gserver/layers/ConvProjection.h rename to paddle/legacy/gserver/layers/ConvProjection.h diff --git a/paddle/gserver/layers/ConvShiftLayer.cpp b/paddle/legacy/gserver/layers/ConvShiftLayer.cpp similarity index 100% rename from paddle/gserver/layers/ConvShiftLayer.cpp rename to paddle/legacy/gserver/layers/ConvShiftLayer.cpp diff --git a/paddle/gserver/layers/ConvTransOperator.cpp b/paddle/legacy/gserver/layers/ConvTransOperator.cpp similarity index 100% rename from paddle/gserver/layers/ConvTransOperator.cpp rename to paddle/legacy/gserver/layers/ConvTransOperator.cpp diff --git a/paddle/gserver/layers/ConvTransOperator.h b/paddle/legacy/gserver/layers/ConvTransOperator.h similarity index 100% rename from paddle/gserver/layers/ConvTransOperator.h rename to paddle/legacy/gserver/layers/ConvTransOperator.h diff --git a/paddle/gserver/layers/ConvTransProjection.cpp b/paddle/legacy/gserver/layers/ConvTransProjection.cpp similarity index 100% rename from paddle/gserver/layers/ConvTransProjection.cpp rename to paddle/legacy/gserver/layers/ConvTransProjection.cpp diff --git a/paddle/gserver/layers/ConvTransProjection.h b/paddle/legacy/gserver/layers/ConvTransProjection.h similarity index 100% rename from paddle/gserver/layers/ConvTransProjection.h rename to paddle/legacy/gserver/layers/ConvTransProjection.h diff --git a/paddle/gserver/layers/ConvexCombinationLayer.cpp b/paddle/legacy/gserver/layers/ConvexCombinationLayer.cpp similarity index 100% rename from paddle/gserver/layers/ConvexCombinationLayer.cpp rename to paddle/legacy/gserver/layers/ConvexCombinationLayer.cpp diff --git a/paddle/gserver/layers/CosSimLayer.cpp b/paddle/legacy/gserver/layers/CosSimLayer.cpp similarity index 100% rename from paddle/gserver/layers/CosSimLayer.cpp rename to paddle/legacy/gserver/layers/CosSimLayer.cpp diff --git a/paddle/gserver/layers/CosSimLayer.h b/paddle/legacy/gserver/layers/CosSimLayer.h similarity index 100% rename from paddle/gserver/layers/CosSimLayer.h rename to paddle/legacy/gserver/layers/CosSimLayer.h diff --git a/paddle/gserver/layers/CosSimVecMatLayer.cpp b/paddle/legacy/gserver/layers/CosSimVecMatLayer.cpp similarity index 100% rename from paddle/gserver/layers/CosSimVecMatLayer.cpp rename to paddle/legacy/gserver/layers/CosSimVecMatLayer.cpp diff --git a/paddle/gserver/layers/CostLayer.cpp b/paddle/legacy/gserver/layers/CostLayer.cpp similarity index 100% rename from paddle/gserver/layers/CostLayer.cpp rename to paddle/legacy/gserver/layers/CostLayer.cpp diff --git a/paddle/gserver/layers/CostLayer.h b/paddle/legacy/gserver/layers/CostLayer.h similarity index 100% rename from paddle/gserver/layers/CostLayer.h rename to paddle/legacy/gserver/layers/CostLayer.h diff --git a/paddle/gserver/layers/CropLayer.cpp b/paddle/legacy/gserver/layers/CropLayer.cpp similarity index 100% rename from paddle/gserver/layers/CropLayer.cpp rename to paddle/legacy/gserver/layers/CropLayer.cpp diff --git a/paddle/gserver/layers/CropLayer.h b/paddle/legacy/gserver/layers/CropLayer.h similarity index 100% rename from paddle/gserver/layers/CropLayer.h rename to paddle/legacy/gserver/layers/CropLayer.h diff --git a/paddle/gserver/layers/CrossChannelNormLayer.cpp b/paddle/legacy/gserver/layers/CrossChannelNormLayer.cpp similarity index 100% rename from paddle/gserver/layers/CrossChannelNormLayer.cpp rename to paddle/legacy/gserver/layers/CrossChannelNormLayer.cpp diff --git a/paddle/gserver/layers/CrossEntropyOverBeam.cpp b/paddle/legacy/gserver/layers/CrossEntropyOverBeam.cpp similarity index 100% rename from paddle/gserver/layers/CrossEntropyOverBeam.cpp rename to paddle/legacy/gserver/layers/CrossEntropyOverBeam.cpp diff --git a/paddle/gserver/layers/CrossEntropyOverBeam.h b/paddle/legacy/gserver/layers/CrossEntropyOverBeam.h similarity index 100% rename from paddle/gserver/layers/CrossEntropyOverBeam.h rename to paddle/legacy/gserver/layers/CrossEntropyOverBeam.h diff --git a/paddle/gserver/layers/CudnnBatchNormLayer.cpp b/paddle/legacy/gserver/layers/CudnnBatchNormLayer.cpp similarity index 100% rename from paddle/gserver/layers/CudnnBatchNormLayer.cpp rename to paddle/legacy/gserver/layers/CudnnBatchNormLayer.cpp diff --git a/paddle/gserver/layers/CudnnBatchNormLayer.h b/paddle/legacy/gserver/layers/CudnnBatchNormLayer.h similarity index 100% rename from paddle/gserver/layers/CudnnBatchNormLayer.h rename to paddle/legacy/gserver/layers/CudnnBatchNormLayer.h diff --git a/paddle/gserver/layers/CudnnConvBaseLayer.cpp b/paddle/legacy/gserver/layers/CudnnConvBaseLayer.cpp similarity index 100% rename from paddle/gserver/layers/CudnnConvBaseLayer.cpp rename to paddle/legacy/gserver/layers/CudnnConvBaseLayer.cpp diff --git a/paddle/gserver/layers/CudnnConvBaseLayer.h b/paddle/legacy/gserver/layers/CudnnConvBaseLayer.h similarity index 100% rename from paddle/gserver/layers/CudnnConvBaseLayer.h rename to paddle/legacy/gserver/layers/CudnnConvBaseLayer.h diff --git a/paddle/gserver/layers/CudnnPoolLayer.cpp b/paddle/legacy/gserver/layers/CudnnPoolLayer.cpp similarity index 100% rename from paddle/gserver/layers/CudnnPoolLayer.cpp rename to paddle/legacy/gserver/layers/CudnnPoolLayer.cpp diff --git a/paddle/gserver/layers/CudnnPoolLayer.h b/paddle/legacy/gserver/layers/CudnnPoolLayer.h similarity index 100% rename from paddle/gserver/layers/CudnnPoolLayer.h rename to paddle/legacy/gserver/layers/CudnnPoolLayer.h diff --git a/paddle/gserver/layers/DataLayer.cpp b/paddle/legacy/gserver/layers/DataLayer.cpp similarity index 100% rename from paddle/gserver/layers/DataLayer.cpp rename to paddle/legacy/gserver/layers/DataLayer.cpp diff --git a/paddle/gserver/layers/DataLayer.h b/paddle/legacy/gserver/layers/DataLayer.h similarity index 100% rename from paddle/gserver/layers/DataLayer.h rename to paddle/legacy/gserver/layers/DataLayer.h diff --git a/paddle/gserver/layers/DataNormLayer.cpp b/paddle/legacy/gserver/layers/DataNormLayer.cpp similarity index 100% rename from paddle/gserver/layers/DataNormLayer.cpp rename to paddle/legacy/gserver/layers/DataNormLayer.cpp diff --git a/paddle/gserver/layers/DataNormLayer.h b/paddle/legacy/gserver/layers/DataNormLayer.h similarity index 100% rename from paddle/gserver/layers/DataNormLayer.h rename to paddle/legacy/gserver/layers/DataNormLayer.h diff --git a/paddle/gserver/layers/DeConv3DLayer.cpp b/paddle/legacy/gserver/layers/DeConv3DLayer.cpp similarity index 100% rename from paddle/gserver/layers/DeConv3DLayer.cpp rename to paddle/legacy/gserver/layers/DeConv3DLayer.cpp diff --git a/paddle/gserver/layers/DeConv3DLayer.h b/paddle/legacy/gserver/layers/DeConv3DLayer.h similarity index 100% rename from paddle/gserver/layers/DeConv3DLayer.h rename to paddle/legacy/gserver/layers/DeConv3DLayer.h diff --git a/paddle/gserver/layers/DetectionOutputLayer.cpp b/paddle/legacy/gserver/layers/DetectionOutputLayer.cpp similarity index 100% rename from paddle/gserver/layers/DetectionOutputLayer.cpp rename to paddle/legacy/gserver/layers/DetectionOutputLayer.cpp diff --git a/paddle/gserver/layers/DetectionOutputLayer.h b/paddle/legacy/gserver/layers/DetectionOutputLayer.h similarity index 100% rename from paddle/gserver/layers/DetectionOutputLayer.h rename to paddle/legacy/gserver/layers/DetectionOutputLayer.h diff --git a/paddle/gserver/layers/DetectionUtil.cpp b/paddle/legacy/gserver/layers/DetectionUtil.cpp similarity index 100% rename from paddle/gserver/layers/DetectionUtil.cpp rename to paddle/legacy/gserver/layers/DetectionUtil.cpp diff --git a/paddle/gserver/layers/DetectionUtil.h b/paddle/legacy/gserver/layers/DetectionUtil.h similarity index 100% rename from paddle/gserver/layers/DetectionUtil.h rename to paddle/legacy/gserver/layers/DetectionUtil.h diff --git a/paddle/gserver/layers/DotMulOperator.cpp b/paddle/legacy/gserver/layers/DotMulOperator.cpp similarity index 100% rename from paddle/gserver/layers/DotMulOperator.cpp rename to paddle/legacy/gserver/layers/DotMulOperator.cpp diff --git a/paddle/gserver/layers/DotMulProjection.cpp b/paddle/legacy/gserver/layers/DotMulProjection.cpp similarity index 100% rename from paddle/gserver/layers/DotMulProjection.cpp rename to paddle/legacy/gserver/layers/DotMulProjection.cpp diff --git a/paddle/gserver/layers/DotProdLayer.cpp b/paddle/legacy/gserver/layers/DotProdLayer.cpp similarity index 100% rename from paddle/gserver/layers/DotProdLayer.cpp rename to paddle/legacy/gserver/layers/DotProdLayer.cpp diff --git a/paddle/gserver/layers/EosIdCheckLayer.cpp b/paddle/legacy/gserver/layers/EosIdCheckLayer.cpp similarity index 100% rename from paddle/gserver/layers/EosIdCheckLayer.cpp rename to paddle/legacy/gserver/layers/EosIdCheckLayer.cpp diff --git a/paddle/gserver/layers/ExpandConvLayer.cpp b/paddle/legacy/gserver/layers/ExpandConvLayer.cpp similarity index 100% rename from paddle/gserver/layers/ExpandConvLayer.cpp rename to paddle/legacy/gserver/layers/ExpandConvLayer.cpp diff --git a/paddle/gserver/layers/ExpandConvLayer.h b/paddle/legacy/gserver/layers/ExpandConvLayer.h similarity index 100% rename from paddle/gserver/layers/ExpandConvLayer.h rename to paddle/legacy/gserver/layers/ExpandConvLayer.h diff --git a/paddle/gserver/layers/ExpandLayer.cpp b/paddle/legacy/gserver/layers/ExpandLayer.cpp similarity index 100% rename from paddle/gserver/layers/ExpandLayer.cpp rename to paddle/legacy/gserver/layers/ExpandLayer.cpp diff --git a/paddle/gserver/layers/ExpandLayer.h b/paddle/legacy/gserver/layers/ExpandLayer.h similarity index 100% rename from paddle/gserver/layers/ExpandLayer.h rename to paddle/legacy/gserver/layers/ExpandLayer.h diff --git a/paddle/gserver/layers/FactorizationMachineLayer.cpp b/paddle/legacy/gserver/layers/FactorizationMachineLayer.cpp similarity index 100% rename from paddle/gserver/layers/FactorizationMachineLayer.cpp rename to paddle/legacy/gserver/layers/FactorizationMachineLayer.cpp diff --git a/paddle/gserver/layers/FactorizationMachineLayer.h b/paddle/legacy/gserver/layers/FactorizationMachineLayer.h similarity index 100% rename from paddle/gserver/layers/FactorizationMachineLayer.h rename to paddle/legacy/gserver/layers/FactorizationMachineLayer.h diff --git a/paddle/gserver/layers/FeatureMapExpandLayer.cpp b/paddle/legacy/gserver/layers/FeatureMapExpandLayer.cpp similarity index 100% rename from paddle/gserver/layers/FeatureMapExpandLayer.cpp rename to paddle/legacy/gserver/layers/FeatureMapExpandLayer.cpp diff --git a/paddle/gserver/layers/FullMatrixProjection.cpp b/paddle/legacy/gserver/layers/FullMatrixProjection.cpp similarity index 100% rename from paddle/gserver/layers/FullMatrixProjection.cpp rename to paddle/legacy/gserver/layers/FullMatrixProjection.cpp diff --git a/paddle/gserver/layers/FullMatrixProjection.h b/paddle/legacy/gserver/layers/FullMatrixProjection.h similarity index 100% rename from paddle/gserver/layers/FullMatrixProjection.h rename to paddle/legacy/gserver/layers/FullMatrixProjection.h diff --git a/paddle/gserver/layers/FullyConnectedLayer.cpp b/paddle/legacy/gserver/layers/FullyConnectedLayer.cpp similarity index 100% rename from paddle/gserver/layers/FullyConnectedLayer.cpp rename to paddle/legacy/gserver/layers/FullyConnectedLayer.cpp diff --git a/paddle/gserver/layers/FullyConnectedLayer.h b/paddle/legacy/gserver/layers/FullyConnectedLayer.h similarity index 100% rename from paddle/gserver/layers/FullyConnectedLayer.h rename to paddle/legacy/gserver/layers/FullyConnectedLayer.h diff --git a/paddle/gserver/layers/GatedRecurrentLayer.cpp b/paddle/legacy/gserver/layers/GatedRecurrentLayer.cpp similarity index 100% rename from paddle/gserver/layers/GatedRecurrentLayer.cpp rename to paddle/legacy/gserver/layers/GatedRecurrentLayer.cpp diff --git a/paddle/gserver/layers/GatedRecurrentLayer.h b/paddle/legacy/gserver/layers/GatedRecurrentLayer.h similarity index 100% rename from paddle/gserver/layers/GatedRecurrentLayer.h rename to paddle/legacy/gserver/layers/GatedRecurrentLayer.h diff --git a/paddle/gserver/layers/GetOutputLayer.cpp b/paddle/legacy/gserver/layers/GetOutputLayer.cpp similarity index 100% rename from paddle/gserver/layers/GetOutputLayer.cpp rename to paddle/legacy/gserver/layers/GetOutputLayer.cpp diff --git a/paddle/gserver/layers/GruCompute.cpp b/paddle/legacy/gserver/layers/GruCompute.cpp similarity index 100% rename from paddle/gserver/layers/GruCompute.cpp rename to paddle/legacy/gserver/layers/GruCompute.cpp diff --git a/paddle/gserver/layers/GruCompute.cu b/paddle/legacy/gserver/layers/GruCompute.cu similarity index 100% rename from paddle/gserver/layers/GruCompute.cu rename to paddle/legacy/gserver/layers/GruCompute.cu diff --git a/paddle/gserver/layers/GruCompute.h b/paddle/legacy/gserver/layers/GruCompute.h similarity index 100% rename from paddle/gserver/layers/GruCompute.h rename to paddle/legacy/gserver/layers/GruCompute.h diff --git a/paddle/gserver/layers/GruStepLayer.cpp b/paddle/legacy/gserver/layers/GruStepLayer.cpp similarity index 100% rename from paddle/gserver/layers/GruStepLayer.cpp rename to paddle/legacy/gserver/layers/GruStepLayer.cpp diff --git a/paddle/gserver/layers/HierarchicalSigmoidLayer.cpp b/paddle/legacy/gserver/layers/HierarchicalSigmoidLayer.cpp similarity index 100% rename from paddle/gserver/layers/HierarchicalSigmoidLayer.cpp rename to paddle/legacy/gserver/layers/HierarchicalSigmoidLayer.cpp diff --git a/paddle/gserver/layers/HierarchicalSigmoidLayer.h b/paddle/legacy/gserver/layers/HierarchicalSigmoidLayer.h similarity index 100% rename from paddle/gserver/layers/HierarchicalSigmoidLayer.h rename to paddle/legacy/gserver/layers/HierarchicalSigmoidLayer.h diff --git a/paddle/gserver/layers/IdentityProjection.cpp b/paddle/legacy/gserver/layers/IdentityProjection.cpp similarity index 100% rename from paddle/gserver/layers/IdentityProjection.cpp rename to paddle/legacy/gserver/layers/IdentityProjection.cpp diff --git a/paddle/gserver/layers/InterpolationLayer.cpp b/paddle/legacy/gserver/layers/InterpolationLayer.cpp similarity index 100% rename from paddle/gserver/layers/InterpolationLayer.cpp rename to paddle/legacy/gserver/layers/InterpolationLayer.cpp diff --git a/paddle/gserver/layers/KmaxSeqScoreLayer.cpp b/paddle/legacy/gserver/layers/KmaxSeqScoreLayer.cpp similarity index 100% rename from paddle/gserver/layers/KmaxSeqScoreLayer.cpp rename to paddle/legacy/gserver/layers/KmaxSeqScoreLayer.cpp diff --git a/paddle/gserver/layers/L2DistanceLayer.cpp b/paddle/legacy/gserver/layers/L2DistanceLayer.cpp similarity index 100% rename from paddle/gserver/layers/L2DistanceLayer.cpp rename to paddle/legacy/gserver/layers/L2DistanceLayer.cpp diff --git a/paddle/gserver/layers/L2DistanceLayer.h b/paddle/legacy/gserver/layers/L2DistanceLayer.h similarity index 100% rename from paddle/gserver/layers/L2DistanceLayer.h rename to paddle/legacy/gserver/layers/L2DistanceLayer.h diff --git a/paddle/gserver/layers/Layer.cpp b/paddle/legacy/gserver/layers/Layer.cpp similarity index 100% rename from paddle/gserver/layers/Layer.cpp rename to paddle/legacy/gserver/layers/Layer.cpp diff --git a/paddle/gserver/layers/Layer.h b/paddle/legacy/gserver/layers/Layer.h similarity index 99% rename from paddle/gserver/layers/Layer.h rename to paddle/legacy/gserver/layers/Layer.h index 13e20e8316..1df5404240 100644 --- a/paddle/gserver/layers/Layer.h +++ b/paddle/legacy/gserver/layers/Layer.h @@ -18,7 +18,7 @@ limitations under the License. */ #include #include "ModelConfig.pb.h" #include "paddle/function/Function.h" -#include "paddle/gserver/activations/ActivationFunction.h" +#include "paddle/legacy/gserver/activations/ActivationFunction.h" #include "paddle/math/CpuSparseMatrix.h" #include "paddle/parameter/Argument.h" #include "paddle/parameter/Parameter.h" diff --git a/paddle/gserver/layers/LinearChainCRF.cpp b/paddle/legacy/gserver/layers/LinearChainCRF.cpp similarity index 100% rename from paddle/gserver/layers/LinearChainCRF.cpp rename to paddle/legacy/gserver/layers/LinearChainCRF.cpp diff --git a/paddle/gserver/layers/LinearChainCRF.h b/paddle/legacy/gserver/layers/LinearChainCRF.h similarity index 100% rename from paddle/gserver/layers/LinearChainCRF.h rename to paddle/legacy/gserver/layers/LinearChainCRF.h diff --git a/paddle/gserver/layers/LinearChainCTC.cpp b/paddle/legacy/gserver/layers/LinearChainCTC.cpp similarity index 100% rename from paddle/gserver/layers/LinearChainCTC.cpp rename to paddle/legacy/gserver/layers/LinearChainCTC.cpp diff --git a/paddle/gserver/layers/LinearChainCTC.h b/paddle/legacy/gserver/layers/LinearChainCTC.h similarity index 100% rename from paddle/gserver/layers/LinearChainCTC.h rename to paddle/legacy/gserver/layers/LinearChainCTC.h diff --git a/paddle/gserver/layers/LstmCompute.cpp b/paddle/legacy/gserver/layers/LstmCompute.cpp similarity index 100% rename from paddle/gserver/layers/LstmCompute.cpp rename to paddle/legacy/gserver/layers/LstmCompute.cpp diff --git a/paddle/gserver/layers/LstmCompute.cu b/paddle/legacy/gserver/layers/LstmCompute.cu similarity index 100% rename from paddle/gserver/layers/LstmCompute.cu rename to paddle/legacy/gserver/layers/LstmCompute.cu diff --git a/paddle/gserver/layers/LstmCompute.h b/paddle/legacy/gserver/layers/LstmCompute.h similarity index 100% rename from paddle/gserver/layers/LstmCompute.h rename to paddle/legacy/gserver/layers/LstmCompute.h diff --git a/paddle/gserver/layers/LstmLayer.cpp b/paddle/legacy/gserver/layers/LstmLayer.cpp similarity index 100% rename from paddle/gserver/layers/LstmLayer.cpp rename to paddle/legacy/gserver/layers/LstmLayer.cpp diff --git a/paddle/gserver/layers/LstmLayer.h b/paddle/legacy/gserver/layers/LstmLayer.h similarity index 100% rename from paddle/gserver/layers/LstmLayer.h rename to paddle/legacy/gserver/layers/LstmLayer.h diff --git a/paddle/gserver/layers/LstmStepLayer.cpp b/paddle/legacy/gserver/layers/LstmStepLayer.cpp similarity index 100% rename from paddle/gserver/layers/LstmStepLayer.cpp rename to paddle/legacy/gserver/layers/LstmStepLayer.cpp diff --git a/paddle/gserver/layers/MDLstmLayer.cpp b/paddle/legacy/gserver/layers/MDLstmLayer.cpp similarity index 100% rename from paddle/gserver/layers/MDLstmLayer.cpp rename to paddle/legacy/gserver/layers/MDLstmLayer.cpp diff --git a/paddle/gserver/layers/MKLDNNAddtoLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNAddtoLayer.cpp similarity index 100% rename from paddle/gserver/layers/MKLDNNAddtoLayer.cpp rename to paddle/legacy/gserver/layers/MKLDNNAddtoLayer.cpp diff --git a/paddle/gserver/layers/MKLDNNAddtoLayer.h b/paddle/legacy/gserver/layers/MKLDNNAddtoLayer.h similarity index 100% rename from paddle/gserver/layers/MKLDNNAddtoLayer.h rename to paddle/legacy/gserver/layers/MKLDNNAddtoLayer.h diff --git a/paddle/gserver/layers/MKLDNNBase.h b/paddle/legacy/gserver/layers/MKLDNNBase.h similarity index 100% rename from paddle/gserver/layers/MKLDNNBase.h rename to paddle/legacy/gserver/layers/MKLDNNBase.h diff --git a/paddle/gserver/layers/MKLDNNBatchNormLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNBatchNormLayer.cpp similarity index 100% rename from paddle/gserver/layers/MKLDNNBatchNormLayer.cpp rename to paddle/legacy/gserver/layers/MKLDNNBatchNormLayer.cpp diff --git a/paddle/gserver/layers/MKLDNNBatchNormLayer.h b/paddle/legacy/gserver/layers/MKLDNNBatchNormLayer.h similarity index 100% rename from paddle/gserver/layers/MKLDNNBatchNormLayer.h rename to paddle/legacy/gserver/layers/MKLDNNBatchNormLayer.h diff --git a/paddle/gserver/layers/MKLDNNConcatLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNConcatLayer.cpp similarity index 100% rename from paddle/gserver/layers/MKLDNNConcatLayer.cpp rename to paddle/legacy/gserver/layers/MKLDNNConcatLayer.cpp diff --git a/paddle/gserver/layers/MKLDNNConcatLayer.h b/paddle/legacy/gserver/layers/MKLDNNConcatLayer.h similarity index 100% rename from paddle/gserver/layers/MKLDNNConcatLayer.h rename to paddle/legacy/gserver/layers/MKLDNNConcatLayer.h diff --git a/paddle/gserver/layers/MKLDNNConvLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNConvLayer.cpp similarity index 100% rename from paddle/gserver/layers/MKLDNNConvLayer.cpp rename to paddle/legacy/gserver/layers/MKLDNNConvLayer.cpp diff --git a/paddle/gserver/layers/MKLDNNConvLayer.h b/paddle/legacy/gserver/layers/MKLDNNConvLayer.h similarity index 100% rename from paddle/gserver/layers/MKLDNNConvLayer.h rename to paddle/legacy/gserver/layers/MKLDNNConvLayer.h diff --git a/paddle/gserver/layers/MKLDNNFcLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNFcLayer.cpp similarity index 100% rename from paddle/gserver/layers/MKLDNNFcLayer.cpp rename to paddle/legacy/gserver/layers/MKLDNNFcLayer.cpp diff --git a/paddle/gserver/layers/MKLDNNFcLayer.h b/paddle/legacy/gserver/layers/MKLDNNFcLayer.h similarity index 100% rename from paddle/gserver/layers/MKLDNNFcLayer.h rename to paddle/legacy/gserver/layers/MKLDNNFcLayer.h diff --git a/paddle/gserver/layers/MKLDNNLRNLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNLRNLayer.cpp similarity index 100% rename from paddle/gserver/layers/MKLDNNLRNLayer.cpp rename to paddle/legacy/gserver/layers/MKLDNNLRNLayer.cpp diff --git a/paddle/gserver/layers/MKLDNNLRNLayer.h b/paddle/legacy/gserver/layers/MKLDNNLRNLayer.h similarity index 100% rename from paddle/gserver/layers/MKLDNNLRNLayer.h rename to paddle/legacy/gserver/layers/MKLDNNLRNLayer.h diff --git a/paddle/gserver/layers/MKLDNNLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNLayer.cpp similarity index 100% rename from paddle/gserver/layers/MKLDNNLayer.cpp rename to paddle/legacy/gserver/layers/MKLDNNLayer.cpp diff --git a/paddle/gserver/layers/MKLDNNLayer.h b/paddle/legacy/gserver/layers/MKLDNNLayer.h similarity index 100% rename from paddle/gserver/layers/MKLDNNLayer.h rename to paddle/legacy/gserver/layers/MKLDNNLayer.h diff --git a/paddle/gserver/layers/MKLDNNPoolLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNPoolLayer.cpp similarity index 100% rename from paddle/gserver/layers/MKLDNNPoolLayer.cpp rename to paddle/legacy/gserver/layers/MKLDNNPoolLayer.cpp diff --git a/paddle/gserver/layers/MKLDNNPoolLayer.h b/paddle/legacy/gserver/layers/MKLDNNPoolLayer.h similarity index 100% rename from paddle/gserver/layers/MKLDNNPoolLayer.h rename to paddle/legacy/gserver/layers/MKLDNNPoolLayer.h diff --git a/paddle/gserver/layers/MKLPackedRecurrentLayer.cpp b/paddle/legacy/gserver/layers/MKLPackedRecurrentLayer.cpp similarity index 100% rename from paddle/gserver/layers/MKLPackedRecurrentLayer.cpp rename to paddle/legacy/gserver/layers/MKLPackedRecurrentLayer.cpp diff --git a/paddle/gserver/layers/MKLPackedRecurrentLayer.h b/paddle/legacy/gserver/layers/MKLPackedRecurrentLayer.h similarity index 100% rename from paddle/gserver/layers/MKLPackedRecurrentLayer.h rename to paddle/legacy/gserver/layers/MKLPackedRecurrentLayer.h diff --git a/paddle/gserver/layers/MKLPackedWeight.h b/paddle/legacy/gserver/layers/MKLPackedWeight.h similarity index 100% rename from paddle/gserver/layers/MKLPackedWeight.h rename to paddle/legacy/gserver/layers/MKLPackedWeight.h diff --git a/paddle/gserver/layers/MaxIdLayer.cpp b/paddle/legacy/gserver/layers/MaxIdLayer.cpp similarity index 100% rename from paddle/gserver/layers/MaxIdLayer.cpp rename to paddle/legacy/gserver/layers/MaxIdLayer.cpp diff --git a/paddle/gserver/layers/MaxLayer.cpp b/paddle/legacy/gserver/layers/MaxLayer.cpp similarity index 100% rename from paddle/gserver/layers/MaxLayer.cpp rename to paddle/legacy/gserver/layers/MaxLayer.cpp diff --git a/paddle/gserver/layers/MaxLayer.h b/paddle/legacy/gserver/layers/MaxLayer.h similarity index 100% rename from paddle/gserver/layers/MaxLayer.h rename to paddle/legacy/gserver/layers/MaxLayer.h diff --git a/paddle/gserver/layers/MaxOutLayer.cpp b/paddle/legacy/gserver/layers/MaxOutLayer.cpp similarity index 100% rename from paddle/gserver/layers/MaxOutLayer.cpp rename to paddle/legacy/gserver/layers/MaxOutLayer.cpp diff --git a/paddle/gserver/layers/MaxOutLayer.h b/paddle/legacy/gserver/layers/MaxOutLayer.h similarity index 100% rename from paddle/gserver/layers/MaxOutLayer.h rename to paddle/legacy/gserver/layers/MaxOutLayer.h diff --git a/paddle/gserver/layers/MaxPoolWithMaskLayer.cpp b/paddle/legacy/gserver/layers/MaxPoolWithMaskLayer.cpp similarity index 100% rename from paddle/gserver/layers/MaxPoolWithMaskLayer.cpp rename to paddle/legacy/gserver/layers/MaxPoolWithMaskLayer.cpp diff --git a/paddle/gserver/layers/MaxPoolWithMaskLayer.h b/paddle/legacy/gserver/layers/MaxPoolWithMaskLayer.h similarity index 100% rename from paddle/gserver/layers/MaxPoolWithMaskLayer.h rename to paddle/legacy/gserver/layers/MaxPoolWithMaskLayer.h diff --git a/paddle/gserver/layers/MixedLayer.cpp b/paddle/legacy/gserver/layers/MixedLayer.cpp similarity index 100% rename from paddle/gserver/layers/MixedLayer.cpp rename to paddle/legacy/gserver/layers/MixedLayer.cpp diff --git a/paddle/gserver/layers/MixedLayer.h b/paddle/legacy/gserver/layers/MixedLayer.h similarity index 100% rename from paddle/gserver/layers/MixedLayer.h rename to paddle/legacy/gserver/layers/MixedLayer.h diff --git a/paddle/gserver/layers/MultiBoxLossLayer.cpp b/paddle/legacy/gserver/layers/MultiBoxLossLayer.cpp similarity index 100% rename from paddle/gserver/layers/MultiBoxLossLayer.cpp rename to paddle/legacy/gserver/layers/MultiBoxLossLayer.cpp diff --git a/paddle/gserver/layers/MultiBoxLossLayer.h b/paddle/legacy/gserver/layers/MultiBoxLossLayer.h similarity index 100% rename from paddle/gserver/layers/MultiBoxLossLayer.h rename to paddle/legacy/gserver/layers/MultiBoxLossLayer.h diff --git a/paddle/gserver/layers/MultinomialSampler.cpp b/paddle/legacy/gserver/layers/MultinomialSampler.cpp similarity index 100% rename from paddle/gserver/layers/MultinomialSampler.cpp rename to paddle/legacy/gserver/layers/MultinomialSampler.cpp diff --git a/paddle/gserver/layers/MultinomialSampler.h b/paddle/legacy/gserver/layers/MultinomialSampler.h similarity index 100% rename from paddle/gserver/layers/MultinomialSampler.h rename to paddle/legacy/gserver/layers/MultinomialSampler.h diff --git a/paddle/gserver/layers/MultiplexLayer.cpp b/paddle/legacy/gserver/layers/MultiplexLayer.cpp similarity index 100% rename from paddle/gserver/layers/MultiplexLayer.cpp rename to paddle/legacy/gserver/layers/MultiplexLayer.cpp diff --git a/paddle/gserver/layers/NCELayer.cpp b/paddle/legacy/gserver/layers/NCELayer.cpp similarity index 100% rename from paddle/gserver/layers/NCELayer.cpp rename to paddle/legacy/gserver/layers/NCELayer.cpp diff --git a/paddle/gserver/layers/NormLayer.cpp b/paddle/legacy/gserver/layers/NormLayer.cpp similarity index 100% rename from paddle/gserver/layers/NormLayer.cpp rename to paddle/legacy/gserver/layers/NormLayer.cpp diff --git a/paddle/gserver/layers/NormLayer.h b/paddle/legacy/gserver/layers/NormLayer.h similarity index 100% rename from paddle/gserver/layers/NormLayer.h rename to paddle/legacy/gserver/layers/NormLayer.h diff --git a/paddle/gserver/layers/NormProjectionLayer.cpp b/paddle/legacy/gserver/layers/NormProjectionLayer.cpp similarity index 100% rename from paddle/gserver/layers/NormProjectionLayer.cpp rename to paddle/legacy/gserver/layers/NormProjectionLayer.cpp diff --git a/paddle/gserver/layers/NormProjectionLayer.h b/paddle/legacy/gserver/layers/NormProjectionLayer.h similarity index 100% rename from paddle/gserver/layers/NormProjectionLayer.h rename to paddle/legacy/gserver/layers/NormProjectionLayer.h diff --git a/paddle/gserver/layers/Operator.cpp b/paddle/legacy/gserver/layers/Operator.cpp similarity index 100% rename from paddle/gserver/layers/Operator.cpp rename to paddle/legacy/gserver/layers/Operator.cpp diff --git a/paddle/gserver/layers/Operator.h b/paddle/legacy/gserver/layers/Operator.h similarity index 100% rename from paddle/gserver/layers/Operator.h rename to paddle/legacy/gserver/layers/Operator.h diff --git a/paddle/gserver/layers/OuterProdLayer.cpp b/paddle/legacy/gserver/layers/OuterProdLayer.cpp similarity index 100% rename from paddle/gserver/layers/OuterProdLayer.cpp rename to paddle/legacy/gserver/layers/OuterProdLayer.cpp diff --git a/paddle/gserver/layers/PadLayer.cpp b/paddle/legacy/gserver/layers/PadLayer.cpp similarity index 100% rename from paddle/gserver/layers/PadLayer.cpp rename to paddle/legacy/gserver/layers/PadLayer.cpp diff --git a/paddle/gserver/layers/PadLayer.h b/paddle/legacy/gserver/layers/PadLayer.h similarity index 100% rename from paddle/gserver/layers/PadLayer.h rename to paddle/legacy/gserver/layers/PadLayer.h diff --git a/paddle/gserver/layers/ParameterReluLayer.cpp b/paddle/legacy/gserver/layers/ParameterReluLayer.cpp similarity index 100% rename from paddle/gserver/layers/ParameterReluLayer.cpp rename to paddle/legacy/gserver/layers/ParameterReluLayer.cpp diff --git a/paddle/gserver/layers/ParameterReluLayer.h b/paddle/legacy/gserver/layers/ParameterReluLayer.h similarity index 100% rename from paddle/gserver/layers/ParameterReluLayer.h rename to paddle/legacy/gserver/layers/ParameterReluLayer.h diff --git a/paddle/gserver/layers/Pool3DLayer.cpp b/paddle/legacy/gserver/layers/Pool3DLayer.cpp similarity index 100% rename from paddle/gserver/layers/Pool3DLayer.cpp rename to paddle/legacy/gserver/layers/Pool3DLayer.cpp diff --git a/paddle/gserver/layers/Pool3DLayer.h b/paddle/legacy/gserver/layers/Pool3DLayer.h similarity index 100% rename from paddle/gserver/layers/Pool3DLayer.h rename to paddle/legacy/gserver/layers/Pool3DLayer.h diff --git a/paddle/gserver/layers/PoolLayer.cpp b/paddle/legacy/gserver/layers/PoolLayer.cpp similarity index 100% rename from paddle/gserver/layers/PoolLayer.cpp rename to paddle/legacy/gserver/layers/PoolLayer.cpp diff --git a/paddle/gserver/layers/PoolLayer.h b/paddle/legacy/gserver/layers/PoolLayer.h similarity index 100% rename from paddle/gserver/layers/PoolLayer.h rename to paddle/legacy/gserver/layers/PoolLayer.h diff --git a/paddle/gserver/layers/PoolProjection.cpp b/paddle/legacy/gserver/layers/PoolProjection.cpp similarity index 100% rename from paddle/gserver/layers/PoolProjection.cpp rename to paddle/legacy/gserver/layers/PoolProjection.cpp diff --git a/paddle/gserver/layers/PoolProjection.h b/paddle/legacy/gserver/layers/PoolProjection.h similarity index 100% rename from paddle/gserver/layers/PoolProjection.h rename to paddle/legacy/gserver/layers/PoolProjection.h diff --git a/paddle/gserver/layers/PoolProjectionLayer.cpp b/paddle/legacy/gserver/layers/PoolProjectionLayer.cpp similarity index 100% rename from paddle/gserver/layers/PoolProjectionLayer.cpp rename to paddle/legacy/gserver/layers/PoolProjectionLayer.cpp diff --git a/paddle/gserver/layers/PoolProjectionLayer.h b/paddle/legacy/gserver/layers/PoolProjectionLayer.h similarity index 100% rename from paddle/gserver/layers/PoolProjectionLayer.h rename to paddle/legacy/gserver/layers/PoolProjectionLayer.h diff --git a/paddle/gserver/layers/PowerLayer.cpp b/paddle/legacy/gserver/layers/PowerLayer.cpp similarity index 100% rename from paddle/gserver/layers/PowerLayer.cpp rename to paddle/legacy/gserver/layers/PowerLayer.cpp diff --git a/paddle/gserver/layers/PrintLayer.cpp b/paddle/legacy/gserver/layers/PrintLayer.cpp similarity index 100% rename from paddle/gserver/layers/PrintLayer.cpp rename to paddle/legacy/gserver/layers/PrintLayer.cpp diff --git a/paddle/gserver/layers/PriorBox.cpp b/paddle/legacy/gserver/layers/PriorBox.cpp similarity index 100% rename from paddle/gserver/layers/PriorBox.cpp rename to paddle/legacy/gserver/layers/PriorBox.cpp diff --git a/paddle/gserver/layers/Projection.cpp b/paddle/legacy/gserver/layers/Projection.cpp similarity index 100% rename from paddle/gserver/layers/Projection.cpp rename to paddle/legacy/gserver/layers/Projection.cpp diff --git a/paddle/gserver/layers/Projection.h b/paddle/legacy/gserver/layers/Projection.h similarity index 100% rename from paddle/gserver/layers/Projection.h rename to paddle/legacy/gserver/layers/Projection.h diff --git a/paddle/gserver/layers/ROIPoolLayer.cpp b/paddle/legacy/gserver/layers/ROIPoolLayer.cpp similarity index 100% rename from paddle/gserver/layers/ROIPoolLayer.cpp rename to paddle/legacy/gserver/layers/ROIPoolLayer.cpp diff --git a/paddle/gserver/layers/ROIPoolLayer.h b/paddle/legacy/gserver/layers/ROIPoolLayer.h similarity index 100% rename from paddle/gserver/layers/ROIPoolLayer.h rename to paddle/legacy/gserver/layers/ROIPoolLayer.h diff --git a/paddle/gserver/layers/RecurrentLayer.cpp b/paddle/legacy/gserver/layers/RecurrentLayer.cpp similarity index 100% rename from paddle/gserver/layers/RecurrentLayer.cpp rename to paddle/legacy/gserver/layers/RecurrentLayer.cpp diff --git a/paddle/gserver/layers/RecurrentLayer.h b/paddle/legacy/gserver/layers/RecurrentLayer.h similarity index 100% rename from paddle/gserver/layers/RecurrentLayer.h rename to paddle/legacy/gserver/layers/RecurrentLayer.h diff --git a/paddle/gserver/layers/RecurrentLayerGroup.cpp b/paddle/legacy/gserver/layers/RecurrentLayerGroup.cpp similarity index 96% rename from paddle/gserver/layers/RecurrentLayerGroup.cpp rename to paddle/legacy/gserver/layers/RecurrentLayerGroup.cpp index 6694e8f299..4f121bdb4a 100644 --- a/paddle/gserver/layers/RecurrentLayerGroup.cpp +++ b/paddle/legacy/gserver/layers/RecurrentLayerGroup.cpp @@ -13,9 +13,9 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include "paddle/gserver/layers/Layer.h" +#include "paddle/legacy/gserver/layers/Layer.h" -#include "paddle/gserver/gradientmachines/RecurrentGradientMachine.h" +#include "paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.h" #include "paddle/utils/Stat.h" namespace paddle { diff --git a/paddle/gserver/layers/ResizeLayer.cpp b/paddle/legacy/gserver/layers/ResizeLayer.cpp similarity index 100% rename from paddle/gserver/layers/ResizeLayer.cpp rename to paddle/legacy/gserver/layers/ResizeLayer.cpp diff --git a/paddle/gserver/layers/RotateLayer.cpp b/paddle/legacy/gserver/layers/RotateLayer.cpp similarity index 100% rename from paddle/gserver/layers/RotateLayer.cpp rename to paddle/legacy/gserver/layers/RotateLayer.cpp diff --git a/paddle/gserver/layers/RotateLayer.h b/paddle/legacy/gserver/layers/RotateLayer.h similarity index 100% rename from paddle/gserver/layers/RotateLayer.h rename to paddle/legacy/gserver/layers/RotateLayer.h diff --git a/paddle/gserver/layers/RowConvLayer.cpp b/paddle/legacy/gserver/layers/RowConvLayer.cpp similarity index 100% rename from paddle/gserver/layers/RowConvLayer.cpp rename to paddle/legacy/gserver/layers/RowConvLayer.cpp diff --git a/paddle/gserver/layers/RowConvLayer.h b/paddle/legacy/gserver/layers/RowConvLayer.h similarity index 100% rename from paddle/gserver/layers/RowConvLayer.h rename to paddle/legacy/gserver/layers/RowConvLayer.h diff --git a/paddle/gserver/layers/RowL2NormLayer.cpp b/paddle/legacy/gserver/layers/RowL2NormLayer.cpp similarity index 100% rename from paddle/gserver/layers/RowL2NormLayer.cpp rename to paddle/legacy/gserver/layers/RowL2NormLayer.cpp diff --git a/paddle/gserver/layers/SamplingIdLayer.cpp b/paddle/legacy/gserver/layers/SamplingIdLayer.cpp similarity index 100% rename from paddle/gserver/layers/SamplingIdLayer.cpp rename to paddle/legacy/gserver/layers/SamplingIdLayer.cpp diff --git a/paddle/gserver/layers/ScaleShiftLayer.cpp b/paddle/legacy/gserver/layers/ScaleShiftLayer.cpp similarity index 100% rename from paddle/gserver/layers/ScaleShiftLayer.cpp rename to paddle/legacy/gserver/layers/ScaleShiftLayer.cpp diff --git a/paddle/gserver/layers/ScaleSubRegionLayer.cpp b/paddle/legacy/gserver/layers/ScaleSubRegionLayer.cpp similarity index 100% rename from paddle/gserver/layers/ScaleSubRegionLayer.cpp rename to paddle/legacy/gserver/layers/ScaleSubRegionLayer.cpp diff --git a/paddle/gserver/layers/ScaleSubRegionLayer.h b/paddle/legacy/gserver/layers/ScaleSubRegionLayer.h similarity index 100% rename from paddle/gserver/layers/ScaleSubRegionLayer.h rename to paddle/legacy/gserver/layers/ScaleSubRegionLayer.h diff --git a/paddle/gserver/layers/ScalingLayer.cpp b/paddle/legacy/gserver/layers/ScalingLayer.cpp similarity index 100% rename from paddle/gserver/layers/ScalingLayer.cpp rename to paddle/legacy/gserver/layers/ScalingLayer.cpp diff --git a/paddle/gserver/layers/ScalingProjection.cpp b/paddle/legacy/gserver/layers/ScalingProjection.cpp similarity index 100% rename from paddle/gserver/layers/ScalingProjection.cpp rename to paddle/legacy/gserver/layers/ScalingProjection.cpp diff --git a/paddle/gserver/layers/SelectiveFullyConnectedLayer.cpp b/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.cpp similarity index 100% rename from paddle/gserver/layers/SelectiveFullyConnectedLayer.cpp rename to paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.cpp diff --git a/paddle/gserver/layers/SelectiveFullyConnectedLayer.h b/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.h similarity index 100% rename from paddle/gserver/layers/SelectiveFullyConnectedLayer.h rename to paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.h diff --git a/paddle/gserver/layers/SequenceConcatLayer.cpp b/paddle/legacy/gserver/layers/SequenceConcatLayer.cpp similarity index 100% rename from paddle/gserver/layers/SequenceConcatLayer.cpp rename to paddle/legacy/gserver/layers/SequenceConcatLayer.cpp diff --git a/paddle/gserver/layers/SequenceLastInstanceLayer.cpp b/paddle/legacy/gserver/layers/SequenceLastInstanceLayer.cpp similarity index 100% rename from paddle/gserver/layers/SequenceLastInstanceLayer.cpp rename to paddle/legacy/gserver/layers/SequenceLastInstanceLayer.cpp diff --git a/paddle/gserver/layers/SequencePoolLayer.cpp b/paddle/legacy/gserver/layers/SequencePoolLayer.cpp similarity index 100% rename from paddle/gserver/layers/SequencePoolLayer.cpp rename to paddle/legacy/gserver/layers/SequencePoolLayer.cpp diff --git a/paddle/gserver/layers/SequencePoolLayer.h b/paddle/legacy/gserver/layers/SequencePoolLayer.h similarity index 100% rename from paddle/gserver/layers/SequencePoolLayer.h rename to paddle/legacy/gserver/layers/SequencePoolLayer.h diff --git a/paddle/gserver/layers/SequenceReshapeLayer.cpp b/paddle/legacy/gserver/layers/SequenceReshapeLayer.cpp similarity index 100% rename from paddle/gserver/layers/SequenceReshapeLayer.cpp rename to paddle/legacy/gserver/layers/SequenceReshapeLayer.cpp diff --git a/paddle/gserver/layers/SequenceSliceLayer.cpp b/paddle/legacy/gserver/layers/SequenceSliceLayer.cpp similarity index 100% rename from paddle/gserver/layers/SequenceSliceLayer.cpp rename to paddle/legacy/gserver/layers/SequenceSliceLayer.cpp diff --git a/paddle/gserver/layers/SequenceToBatch.cpp b/paddle/legacy/gserver/layers/SequenceToBatch.cpp similarity index 100% rename from paddle/gserver/layers/SequenceToBatch.cpp rename to paddle/legacy/gserver/layers/SequenceToBatch.cpp diff --git a/paddle/gserver/layers/SequenceToBatch.h b/paddle/legacy/gserver/layers/SequenceToBatch.h similarity index 100% rename from paddle/gserver/layers/SequenceToBatch.h rename to paddle/legacy/gserver/layers/SequenceToBatch.h diff --git a/paddle/gserver/layers/SliceProjection.cpp b/paddle/legacy/gserver/layers/SliceProjection.cpp similarity index 100% rename from paddle/gserver/layers/SliceProjection.cpp rename to paddle/legacy/gserver/layers/SliceProjection.cpp diff --git a/paddle/gserver/layers/SlopeInterceptLayer.cpp b/paddle/legacy/gserver/layers/SlopeInterceptLayer.cpp similarity index 100% rename from paddle/gserver/layers/SlopeInterceptLayer.cpp rename to paddle/legacy/gserver/layers/SlopeInterceptLayer.cpp diff --git a/paddle/gserver/layers/SpatialPyramidPoolLayer.cpp b/paddle/legacy/gserver/layers/SpatialPyramidPoolLayer.cpp similarity index 100% rename from paddle/gserver/layers/SpatialPyramidPoolLayer.cpp rename to paddle/legacy/gserver/layers/SpatialPyramidPoolLayer.cpp diff --git a/paddle/gserver/layers/SpatialPyramidPoolLayer.h b/paddle/legacy/gserver/layers/SpatialPyramidPoolLayer.h similarity index 100% rename from paddle/gserver/layers/SpatialPyramidPoolLayer.h rename to paddle/legacy/gserver/layers/SpatialPyramidPoolLayer.h diff --git a/paddle/gserver/layers/SubNestedSequenceLayer.cpp b/paddle/legacy/gserver/layers/SubNestedSequenceLayer.cpp similarity index 100% rename from paddle/gserver/layers/SubNestedSequenceLayer.cpp rename to paddle/legacy/gserver/layers/SubNestedSequenceLayer.cpp diff --git a/paddle/gserver/layers/SubSequenceLayer.cpp b/paddle/legacy/gserver/layers/SubSequenceLayer.cpp similarity index 100% rename from paddle/gserver/layers/SubSequenceLayer.cpp rename to paddle/legacy/gserver/layers/SubSequenceLayer.cpp diff --git a/paddle/gserver/layers/SumToOneNormLayer.cpp b/paddle/legacy/gserver/layers/SumToOneNormLayer.cpp similarity index 100% rename from paddle/gserver/layers/SumToOneNormLayer.cpp rename to paddle/legacy/gserver/layers/SumToOneNormLayer.cpp diff --git a/paddle/gserver/layers/SwitchOrderLayer.cpp b/paddle/legacy/gserver/layers/SwitchOrderLayer.cpp similarity index 100% rename from paddle/gserver/layers/SwitchOrderLayer.cpp rename to paddle/legacy/gserver/layers/SwitchOrderLayer.cpp diff --git a/paddle/gserver/layers/SwitchOrderLayer.h b/paddle/legacy/gserver/layers/SwitchOrderLayer.h similarity index 100% rename from paddle/gserver/layers/SwitchOrderLayer.h rename to paddle/legacy/gserver/layers/SwitchOrderLayer.h diff --git a/paddle/gserver/layers/TableProjection.cpp b/paddle/legacy/gserver/layers/TableProjection.cpp similarity index 100% rename from paddle/gserver/layers/TableProjection.cpp rename to paddle/legacy/gserver/layers/TableProjection.cpp diff --git a/paddle/gserver/layers/TableProjection.h b/paddle/legacy/gserver/layers/TableProjection.h similarity index 100% rename from paddle/gserver/layers/TableProjection.h rename to paddle/legacy/gserver/layers/TableProjection.h diff --git a/paddle/gserver/layers/TensorLayer.cpp b/paddle/legacy/gserver/layers/TensorLayer.cpp similarity index 100% rename from paddle/gserver/layers/TensorLayer.cpp rename to paddle/legacy/gserver/layers/TensorLayer.cpp diff --git a/paddle/gserver/layers/TensorLayer.h b/paddle/legacy/gserver/layers/TensorLayer.h similarity index 100% rename from paddle/gserver/layers/TensorLayer.h rename to paddle/legacy/gserver/layers/TensorLayer.h diff --git a/paddle/gserver/layers/TransLayer.cpp b/paddle/legacy/gserver/layers/TransLayer.cpp similarity index 100% rename from paddle/gserver/layers/TransLayer.cpp rename to paddle/legacy/gserver/layers/TransLayer.cpp diff --git a/paddle/gserver/layers/TransLayer.h b/paddle/legacy/gserver/layers/TransLayer.h similarity index 100% rename from paddle/gserver/layers/TransLayer.h rename to paddle/legacy/gserver/layers/TransLayer.h diff --git a/paddle/gserver/layers/TransposedFullMatrixProjection.cpp b/paddle/legacy/gserver/layers/TransposedFullMatrixProjection.cpp similarity index 100% rename from paddle/gserver/layers/TransposedFullMatrixProjection.cpp rename to paddle/legacy/gserver/layers/TransposedFullMatrixProjection.cpp diff --git a/paddle/gserver/layers/UpsampleLayer.cpp b/paddle/legacy/gserver/layers/UpsampleLayer.cpp similarity index 100% rename from paddle/gserver/layers/UpsampleLayer.cpp rename to paddle/legacy/gserver/layers/UpsampleLayer.cpp diff --git a/paddle/gserver/layers/UpsampleLayer.h b/paddle/legacy/gserver/layers/UpsampleLayer.h similarity index 100% rename from paddle/gserver/layers/UpsampleLayer.h rename to paddle/legacy/gserver/layers/UpsampleLayer.h diff --git a/paddle/gserver/layers/ValidationLayer.cpp b/paddle/legacy/gserver/layers/ValidationLayer.cpp similarity index 100% rename from paddle/gserver/layers/ValidationLayer.cpp rename to paddle/legacy/gserver/layers/ValidationLayer.cpp diff --git a/paddle/gserver/layers/ValidationLayer.h b/paddle/legacy/gserver/layers/ValidationLayer.h similarity index 97% rename from paddle/gserver/layers/ValidationLayer.h rename to paddle/legacy/gserver/layers/ValidationLayer.h index be41128ef4..fbc94e8ef5 100644 --- a/paddle/gserver/layers/ValidationLayer.h +++ b/paddle/legacy/gserver/layers/ValidationLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include #include "Layer.h" -#include "paddle/gserver/evaluators/Evaluator.h" +#include "paddle/legacy/gserver/evaluators/Evaluator.h" DECLARE_int32(trainer_id); diff --git a/paddle/gserver/layers/WarpCTCLayer.cpp b/paddle/legacy/gserver/layers/WarpCTCLayer.cpp similarity index 100% rename from paddle/gserver/layers/WarpCTCLayer.cpp rename to paddle/legacy/gserver/layers/WarpCTCLayer.cpp diff --git a/paddle/gserver/layers/WarpCTCLayer.h b/paddle/legacy/gserver/layers/WarpCTCLayer.h similarity index 100% rename from paddle/gserver/layers/WarpCTCLayer.h rename to paddle/legacy/gserver/layers/WarpCTCLayer.h diff --git a/paddle/gserver/tests/.gitignore b/paddle/legacy/gserver/tests/.gitignore similarity index 100% rename from paddle/gserver/tests/.gitignore rename to paddle/legacy/gserver/tests/.gitignore diff --git a/paddle/gserver/tests/CMakeLists.txt b/paddle/legacy/gserver/tests/CMakeLists.txt similarity index 97% rename from paddle/gserver/tests/CMakeLists.txt rename to paddle/legacy/gserver/tests/CMakeLists.txt index 9d7cad7584..93ddf5aa23 100644 --- a/paddle/gserver/tests/CMakeLists.txt +++ b/paddle/legacy/gserver/tests/CMakeLists.txt @@ -36,7 +36,7 @@ gserver_test(test_Upsample) set(PYTHON_PATH ${PADDLE_SOURCE_DIR}/paddle/.set_python_path.sh -d - ${PADDLE_BINARY_DIR}/python/:${PADDLE_BINARY_DIR}/paddle/gserver/tests) + ${PADDLE_BINARY_DIR}/python/:${PADDLE_BINARY_DIR}/paddle/legacy/gserver/tests) function(gserver_test_with_python TARGET) add_unittest_without_exec(${TARGET} ${TARGET}.cpp) add_test(NAME ${TARGET} diff --git a/paddle/gserver/tests/LayerGradUtil.cpp b/paddle/legacy/gserver/tests/LayerGradUtil.cpp similarity index 100% rename from paddle/gserver/tests/LayerGradUtil.cpp rename to paddle/legacy/gserver/tests/LayerGradUtil.cpp diff --git a/paddle/gserver/tests/LayerGradUtil.h b/paddle/legacy/gserver/tests/LayerGradUtil.h similarity index 99% rename from paddle/gserver/tests/LayerGradUtil.h rename to paddle/legacy/gserver/tests/LayerGradUtil.h index 1999b2204b..941989a1da 100644 --- a/paddle/gserver/tests/LayerGradUtil.h +++ b/paddle/legacy/gserver/tests/LayerGradUtil.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once #include "ModelConfig.pb.h" -#include "paddle/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" #include "paddle/testing/TestUtil.h" using namespace std; // NOLINT diff --git a/paddle/gserver/tests/MKLDNNTester.cpp b/paddle/legacy/gserver/tests/MKLDNNTester.cpp similarity index 99% rename from paddle/gserver/tests/MKLDNNTester.cpp rename to paddle/legacy/gserver/tests/MKLDNNTester.cpp index d2a9761a4e..bed58f94bb 100644 --- a/paddle/gserver/tests/MKLDNNTester.cpp +++ b/paddle/legacy/gserver/tests/MKLDNNTester.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "MKLDNNTester.h" -#include "paddle/gserver/layers/MKLDNNBase.h" -#include "paddle/gserver/layers/MKLDNNLayer.h" +#include "paddle/legacy/gserver/layers/MKLDNNBase.h" +#include "paddle/legacy/gserver/layers/MKLDNNLayer.h" #include "paddle/trainer/Trainer.h" namespace paddle { diff --git a/paddle/gserver/tests/MKLDNNTester.h b/paddle/legacy/gserver/tests/MKLDNNTester.h similarity index 97% rename from paddle/gserver/tests/MKLDNNTester.h rename to paddle/legacy/gserver/tests/MKLDNNTester.h index 41ac46b70a..086846ce53 100644 --- a/paddle/gserver/tests/MKLDNNTester.h +++ b/paddle/legacy/gserver/tests/MKLDNNTester.h @@ -17,8 +17,8 @@ limitations under the License. */ #include #include #include "LayerGradUtil.h" -#include "paddle/gserver/layers/MKLDNNBase.h" -#include "paddle/gserver/layers/MKLDNNLayer.h" +#include "paddle/legacy/gserver/layers/MKLDNNBase.h" +#include "paddle/legacy/gserver/layers/MKLDNNLayer.h" namespace paddle { diff --git a/paddle/gserver/tests/Sequence/dummy.list b/paddle/legacy/gserver/tests/Sequence/dummy.list similarity index 100% rename from paddle/gserver/tests/Sequence/dummy.list rename to paddle/legacy/gserver/tests/Sequence/dummy.list diff --git a/paddle/gserver/tests/Sequence/tour_dict_phrase.dict b/paddle/legacy/gserver/tests/Sequence/tour_dict_phrase.dict similarity index 100% rename from paddle/gserver/tests/Sequence/tour_dict_phrase.dict rename to paddle/legacy/gserver/tests/Sequence/tour_dict_phrase.dict diff --git a/paddle/gserver/tests/Sequence/tour_train_wdseg b/paddle/legacy/gserver/tests/Sequence/tour_train_wdseg similarity index 100% rename from paddle/gserver/tests/Sequence/tour_train_wdseg rename to paddle/legacy/gserver/tests/Sequence/tour_train_wdseg diff --git a/paddle/gserver/tests/Sequence/tour_train_wdseg.nest b/paddle/legacy/gserver/tests/Sequence/tour_train_wdseg.nest similarity index 100% rename from paddle/gserver/tests/Sequence/tour_train_wdseg.nest rename to paddle/legacy/gserver/tests/Sequence/tour_train_wdseg.nest diff --git a/paddle/gserver/tests/Sequence/train.list b/paddle/legacy/gserver/tests/Sequence/train.list similarity index 100% rename from paddle/gserver/tests/Sequence/train.list rename to paddle/legacy/gserver/tests/Sequence/train.list diff --git a/paddle/gserver/tests/Sequence/train.list.nest b/paddle/legacy/gserver/tests/Sequence/train.list.nest similarity index 100% rename from paddle/gserver/tests/Sequence/train.list.nest rename to paddle/legacy/gserver/tests/Sequence/train.list.nest diff --git a/paddle/gserver/tests/__init__.py b/paddle/legacy/gserver/tests/__init__.py similarity index 100% rename from paddle/gserver/tests/__init__.py rename to paddle/legacy/gserver/tests/__init__.py diff --git a/paddle/gserver/tests/concat_dotmul_a.conf b/paddle/legacy/gserver/tests/concat_dotmul_a.conf similarity index 100% rename from paddle/gserver/tests/concat_dotmul_a.conf rename to paddle/legacy/gserver/tests/concat_dotmul_a.conf diff --git a/paddle/gserver/tests/concat_dotmul_b.conf b/paddle/legacy/gserver/tests/concat_dotmul_b.conf similarity index 100% rename from paddle/gserver/tests/concat_dotmul_b.conf rename to paddle/legacy/gserver/tests/concat_dotmul_b.conf diff --git a/paddle/gserver/tests/concat_fullmatrix_a.conf b/paddle/legacy/gserver/tests/concat_fullmatrix_a.conf similarity index 100% rename from paddle/gserver/tests/concat_fullmatrix_a.conf rename to paddle/legacy/gserver/tests/concat_fullmatrix_a.conf diff --git a/paddle/gserver/tests/concat_fullmatrix_b.conf b/paddle/legacy/gserver/tests/concat_fullmatrix_b.conf similarity index 100% rename from paddle/gserver/tests/concat_fullmatrix_b.conf rename to paddle/legacy/gserver/tests/concat_fullmatrix_b.conf diff --git a/paddle/gserver/tests/concat_slice_a.conf b/paddle/legacy/gserver/tests/concat_slice_a.conf similarity index 100% rename from paddle/gserver/tests/concat_slice_a.conf rename to paddle/legacy/gserver/tests/concat_slice_a.conf diff --git a/paddle/gserver/tests/concat_slice_b.conf b/paddle/legacy/gserver/tests/concat_slice_b.conf similarity index 100% rename from paddle/gserver/tests/concat_slice_b.conf rename to paddle/legacy/gserver/tests/concat_slice_b.conf diff --git a/paddle/gserver/tests/concat_table_a.conf b/paddle/legacy/gserver/tests/concat_table_a.conf similarity index 100% rename from paddle/gserver/tests/concat_table_a.conf rename to paddle/legacy/gserver/tests/concat_table_a.conf diff --git a/paddle/gserver/tests/concat_table_b.conf b/paddle/legacy/gserver/tests/concat_table_b.conf similarity index 100% rename from paddle/gserver/tests/concat_table_b.conf rename to paddle/legacy/gserver/tests/concat_table_b.conf diff --git a/paddle/gserver/tests/img_conv_a.conf b/paddle/legacy/gserver/tests/img_conv_a.conf similarity index 100% rename from paddle/gserver/tests/img_conv_a.conf rename to paddle/legacy/gserver/tests/img_conv_a.conf diff --git a/paddle/gserver/tests/img_conv_b.conf b/paddle/legacy/gserver/tests/img_conv_b.conf similarity index 100% rename from paddle/gserver/tests/img_conv_b.conf rename to paddle/legacy/gserver/tests/img_conv_b.conf diff --git a/paddle/gserver/tests/img_conv_c.conf b/paddle/legacy/gserver/tests/img_conv_c.conf similarity index 100% rename from paddle/gserver/tests/img_conv_c.conf rename to paddle/legacy/gserver/tests/img_conv_c.conf diff --git a/paddle/gserver/tests/img_conv_cudnn.py b/paddle/legacy/gserver/tests/img_conv_cudnn.py similarity index 100% rename from paddle/gserver/tests/img_conv_cudnn.py rename to paddle/legacy/gserver/tests/img_conv_cudnn.py diff --git a/paddle/gserver/tests/img_conv_exconv.py b/paddle/legacy/gserver/tests/img_conv_exconv.py similarity index 100% rename from paddle/gserver/tests/img_conv_exconv.py rename to paddle/legacy/gserver/tests/img_conv_exconv.py diff --git a/paddle/gserver/tests/img_pool_a.conf b/paddle/legacy/gserver/tests/img_pool_a.conf similarity index 100% rename from paddle/gserver/tests/img_pool_a.conf rename to paddle/legacy/gserver/tests/img_pool_a.conf diff --git a/paddle/gserver/tests/img_pool_b.conf b/paddle/legacy/gserver/tests/img_pool_b.conf similarity index 100% rename from paddle/gserver/tests/img_pool_b.conf rename to paddle/legacy/gserver/tests/img_pool_b.conf diff --git a/paddle/gserver/tests/mkldnn_branch_net.conf b/paddle/legacy/gserver/tests/mkldnn_branch_net.conf similarity index 100% rename from paddle/gserver/tests/mkldnn_branch_net.conf rename to paddle/legacy/gserver/tests/mkldnn_branch_net.conf diff --git a/paddle/gserver/tests/mkldnn_simple_net.conf b/paddle/legacy/gserver/tests/mkldnn_simple_net.conf similarity index 100% rename from paddle/gserver/tests/mkldnn_simple_net.conf rename to paddle/legacy/gserver/tests/mkldnn_simple_net.conf diff --git a/paddle/gserver/tests/pyDataProvider.py b/paddle/legacy/gserver/tests/pyDataProvider.py similarity index 100% rename from paddle/gserver/tests/pyDataProvider.py rename to paddle/legacy/gserver/tests/pyDataProvider.py diff --git a/paddle/gserver/tests/pyDataProvider/pyDataProviderList b/paddle/legacy/gserver/tests/pyDataProvider/pyDataProviderList similarity index 100% rename from paddle/gserver/tests/pyDataProvider/pyDataProviderList rename to paddle/legacy/gserver/tests/pyDataProvider/pyDataProviderList diff --git a/paddle/gserver/tests/pyDataProvider/trainer.conf b/paddle/legacy/gserver/tests/pyDataProvider/trainer.conf similarity index 100% rename from paddle/gserver/tests/pyDataProvider/trainer.conf rename to paddle/legacy/gserver/tests/pyDataProvider/trainer.conf diff --git a/paddle/gserver/tests/rnn_data_provider.py b/paddle/legacy/gserver/tests/rnn_data_provider.py similarity index 100% rename from paddle/gserver/tests/rnn_data_provider.py rename to paddle/legacy/gserver/tests/rnn_data_provider.py diff --git a/paddle/gserver/tests/sequenceGen.py b/paddle/legacy/gserver/tests/sequenceGen.py similarity index 100% rename from paddle/gserver/tests/sequenceGen.py rename to paddle/legacy/gserver/tests/sequenceGen.py diff --git a/paddle/gserver/tests/sequence_layer_group.conf b/paddle/legacy/gserver/tests/sequence_layer_group.conf similarity index 100% rename from paddle/gserver/tests/sequence_layer_group.conf rename to paddle/legacy/gserver/tests/sequence_layer_group.conf diff --git a/paddle/gserver/tests/sequence_lstm.conf b/paddle/legacy/gserver/tests/sequence_lstm.conf similarity index 100% rename from paddle/gserver/tests/sequence_lstm.conf rename to paddle/legacy/gserver/tests/sequence_lstm.conf diff --git a/paddle/gserver/tests/sequence_nest_layer_group.conf b/paddle/legacy/gserver/tests/sequence_nest_layer_group.conf similarity index 100% rename from paddle/gserver/tests/sequence_nest_layer_group.conf rename to paddle/legacy/gserver/tests/sequence_nest_layer_group.conf diff --git a/paddle/gserver/tests/sequence_nest_rnn.conf b/paddle/legacy/gserver/tests/sequence_nest_rnn.conf similarity index 100% rename from paddle/gserver/tests/sequence_nest_rnn.conf rename to paddle/legacy/gserver/tests/sequence_nest_rnn.conf diff --git a/paddle/gserver/tests/sequence_nest_rnn_multi_input.conf b/paddle/legacy/gserver/tests/sequence_nest_rnn_multi_input.conf similarity index 100% rename from paddle/gserver/tests/sequence_nest_rnn_multi_input.conf rename to paddle/legacy/gserver/tests/sequence_nest_rnn_multi_input.conf diff --git a/paddle/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py b/paddle/legacy/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py similarity index 100% rename from paddle/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py rename to paddle/legacy/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py diff --git a/paddle/gserver/tests/sequence_recurrent.py b/paddle/legacy/gserver/tests/sequence_recurrent.py similarity index 100% rename from paddle/gserver/tests/sequence_recurrent.py rename to paddle/legacy/gserver/tests/sequence_recurrent.py diff --git a/paddle/gserver/tests/sequence_recurrent_group.py b/paddle/legacy/gserver/tests/sequence_recurrent_group.py similarity index 100% rename from paddle/gserver/tests/sequence_recurrent_group.py rename to paddle/legacy/gserver/tests/sequence_recurrent_group.py diff --git a/paddle/gserver/tests/sequence_rnn.conf b/paddle/legacy/gserver/tests/sequence_rnn.conf similarity index 100% rename from paddle/gserver/tests/sequence_rnn.conf rename to paddle/legacy/gserver/tests/sequence_rnn.conf diff --git a/paddle/gserver/tests/sequence_rnn_matched_inputs.py b/paddle/legacy/gserver/tests/sequence_rnn_matched_inputs.py similarity index 100% rename from paddle/gserver/tests/sequence_rnn_matched_inputs.py rename to paddle/legacy/gserver/tests/sequence_rnn_matched_inputs.py diff --git a/paddle/gserver/tests/sequence_rnn_mixed_inputs.py b/paddle/legacy/gserver/tests/sequence_rnn_mixed_inputs.py similarity index 100% rename from paddle/gserver/tests/sequence_rnn_mixed_inputs.py rename to paddle/legacy/gserver/tests/sequence_rnn_mixed_inputs.py diff --git a/paddle/gserver/tests/sequence_rnn_multi_input.conf b/paddle/legacy/gserver/tests/sequence_rnn_multi_input.conf similarity index 100% rename from paddle/gserver/tests/sequence_rnn_multi_input.conf rename to paddle/legacy/gserver/tests/sequence_rnn_multi_input.conf diff --git a/paddle/gserver/tests/sequence_rnn_multi_unequalength_inputs.py b/paddle/legacy/gserver/tests/sequence_rnn_multi_unequalength_inputs.py similarity index 100% rename from paddle/gserver/tests/sequence_rnn_multi_unequalength_inputs.py rename to paddle/legacy/gserver/tests/sequence_rnn_multi_unequalength_inputs.py diff --git a/paddle/gserver/tests/test_ActivationGrad.cpp b/paddle/legacy/gserver/tests/test_ActivationGrad.cpp similarity index 98% rename from paddle/gserver/tests/test_ActivationGrad.cpp rename to paddle/legacy/gserver/tests/test_ActivationGrad.cpp index b5e4af26dc..f468d229a8 100644 --- a/paddle/gserver/tests/test_ActivationGrad.cpp +++ b/paddle/legacy/gserver/tests/test_ActivationGrad.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include #include #include "ModelConfig.pb.h" -#include "paddle/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" #include "LayerGradUtil.h" #include "paddle/testing/TestUtil.h" diff --git a/paddle/gserver/tests/test_BatchNorm.cpp b/paddle/legacy/gserver/tests/test_BatchNorm.cpp similarity index 99% rename from paddle/gserver/tests/test_BatchNorm.cpp rename to paddle/legacy/gserver/tests/test_BatchNorm.cpp index a3ec66c758..528a3db978 100644 --- a/paddle/gserver/tests/test_BatchNorm.cpp +++ b/paddle/legacy/gserver/tests/test_BatchNorm.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include #include #include "ModelConfig.pb.h" -#include "paddle/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" #include "paddle/utils/GlobalConstants.h" #include "LayerGradUtil.h" diff --git a/paddle/gserver/tests/test_CRFLayerGrad.cpp b/paddle/legacy/gserver/tests/test_CRFLayerGrad.cpp similarity index 97% rename from paddle/gserver/tests/test_CRFLayerGrad.cpp rename to paddle/legacy/gserver/tests/test_CRFLayerGrad.cpp index 9f3d293656..1dafd1de4d 100644 --- a/paddle/gserver/tests/test_CRFLayerGrad.cpp +++ b/paddle/legacy/gserver/tests/test_CRFLayerGrad.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include #include "ModelConfig.pb.h" -#include "paddle/gserver/layers/DataLayer.h" -#include "paddle/gserver/layers/LinearChainCRF.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/LinearChainCRF.h" #include "LayerGradUtil.h" #include "paddle/testing/TestUtil.h" diff --git a/paddle/gserver/tests/test_CompareSparse.cpp b/paddle/legacy/gserver/tests/test_CompareSparse.cpp similarity index 100% rename from paddle/gserver/tests/test_CompareSparse.cpp rename to paddle/legacy/gserver/tests/test_CompareSparse.cpp diff --git a/paddle/gserver/tests/test_CompareTwoNets.cpp b/paddle/legacy/gserver/tests/test_CompareTwoNets.cpp similarity index 100% rename from paddle/gserver/tests/test_CompareTwoNets.cpp rename to paddle/legacy/gserver/tests/test_CompareTwoNets.cpp diff --git a/paddle/gserver/tests/test_ConvTrans.cpp b/paddle/legacy/gserver/tests/test_ConvTrans.cpp similarity index 99% rename from paddle/gserver/tests/test_ConvTrans.cpp rename to paddle/legacy/gserver/tests/test_ConvTrans.cpp index 2e394a74b7..b858094b13 100644 --- a/paddle/gserver/tests/test_ConvTrans.cpp +++ b/paddle/legacy/gserver/tests/test_ConvTrans.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include #include #include "ModelConfig.pb.h" -#include "paddle/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" #include "paddle/math/MathUtils.h" #include "paddle/utils/GlobalConstants.h" diff --git a/paddle/gserver/tests/test_ConvUnify.cpp b/paddle/legacy/gserver/tests/test_ConvUnify.cpp similarity index 99% rename from paddle/gserver/tests/test_ConvUnify.cpp rename to paddle/legacy/gserver/tests/test_ConvUnify.cpp index ba820d9a2a..325276d37e 100644 --- a/paddle/gserver/tests/test_ConvUnify.cpp +++ b/paddle/legacy/gserver/tests/test_ConvUnify.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include #include #include "ModelConfig.pb.h" -#include "paddle/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" #include "paddle/math/MathUtils.h" #include "paddle/utils/GlobalConstants.h" diff --git a/paddle/gserver/tests/test_CrossEntropyOverBeamGrad.cpp b/paddle/legacy/gserver/tests/test_CrossEntropyOverBeamGrad.cpp similarity index 99% rename from paddle/gserver/tests/test_CrossEntropyOverBeamGrad.cpp rename to paddle/legacy/gserver/tests/test_CrossEntropyOverBeamGrad.cpp index 0041ed3093..34eb0dedff 100644 --- a/paddle/gserver/tests/test_CrossEntropyOverBeamGrad.cpp +++ b/paddle/legacy/gserver/tests/test_CrossEntropyOverBeamGrad.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include #include "ModelConfig.pb.h" -#include "paddle/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" #include "LayerGradUtil.h" #include "paddle/testing/TestUtil.h" diff --git a/paddle/gserver/tests/test_DetectionOutput.cpp b/paddle/legacy/gserver/tests/test_DetectionOutput.cpp similarity index 100% rename from paddle/gserver/tests/test_DetectionOutput.cpp rename to paddle/legacy/gserver/tests/test_DetectionOutput.cpp diff --git a/paddle/gserver/tests/test_Evaluator.cpp b/paddle/legacy/gserver/tests/test_Evaluator.cpp similarity index 100% rename from paddle/gserver/tests/test_Evaluator.cpp rename to paddle/legacy/gserver/tests/test_Evaluator.cpp diff --git a/paddle/gserver/tests/test_Expand.cpp b/paddle/legacy/gserver/tests/test_Expand.cpp similarity index 100% rename from paddle/gserver/tests/test_Expand.cpp rename to paddle/legacy/gserver/tests/test_Expand.cpp diff --git a/paddle/gserver/tests/test_KmaxSeqScore.cpp b/paddle/legacy/gserver/tests/test_KmaxSeqScore.cpp similarity index 99% rename from paddle/gserver/tests/test_KmaxSeqScore.cpp rename to paddle/legacy/gserver/tests/test_KmaxSeqScore.cpp index 168ffbdac8..6a1cfdc705 100644 --- a/paddle/gserver/tests/test_KmaxSeqScore.cpp +++ b/paddle/legacy/gserver/tests/test_KmaxSeqScore.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include #include #include "ModelConfig.pb.h" -#include "paddle/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" #include "paddle/utils/GlobalConstants.h" #include "LayerGradUtil.h" diff --git a/paddle/gserver/tests/test_LayerGrad.cpp b/paddle/legacy/gserver/tests/test_LayerGrad.cpp similarity index 99% rename from paddle/gserver/tests/test_LayerGrad.cpp rename to paddle/legacy/gserver/tests/test_LayerGrad.cpp index 1254d58050..7cd33e8d43 100644 --- a/paddle/gserver/tests/test_LayerGrad.cpp +++ b/paddle/legacy/gserver/tests/test_LayerGrad.cpp @@ -19,7 +19,7 @@ limitations under the License. */ #include #include #include "ModelConfig.pb.h" -#include "paddle/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" #include "paddle/math/MathUtils.h" #include "LayerGradUtil.h" diff --git a/paddle/gserver/tests/test_LinearChainCRF.cpp b/paddle/legacy/gserver/tests/test_LinearChainCRF.cpp similarity index 97% rename from paddle/gserver/tests/test_LinearChainCRF.cpp rename to paddle/legacy/gserver/tests/test_LinearChainCRF.cpp index 423c31e27d..1c95492551 100644 --- a/paddle/gserver/tests/test_LinearChainCRF.cpp +++ b/paddle/legacy/gserver/tests/test_LinearChainCRF.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include #include -#include "paddle/gserver/layers/LinearChainCRF.h" +#include "paddle/legacy/gserver/layers/LinearChainCRF.h" #include "paddle/utils/Util.h" using namespace paddle; // NOLINT diff --git a/paddle/gserver/tests/test_MKLDNN.cpp b/paddle/legacy/gserver/tests/test_MKLDNN.cpp similarity index 99% rename from paddle/gserver/tests/test_MKLDNN.cpp rename to paddle/legacy/gserver/tests/test_MKLDNN.cpp index a34a3f6206..c1f52540a6 100644 --- a/paddle/gserver/tests/test_MKLDNN.cpp +++ b/paddle/legacy/gserver/tests/test_MKLDNN.cpp @@ -18,7 +18,7 @@ limitations under the License. */ #include #include "MKLDNNTester.h" #include "ModelConfig.pb.h" -#include "paddle/gserver/activations/MKLDNNActivation.h" +#include "paddle/legacy/gserver/activations/MKLDNNActivation.h" #include "paddle/math/MathUtils.h" using namespace paddle; // NOLINT diff --git a/paddle/gserver/tests/test_MaxPoolingWithMaskOutput.cpp b/paddle/legacy/gserver/tests/test_MaxPoolingWithMaskOutput.cpp similarity index 100% rename from paddle/gserver/tests/test_MaxPoolingWithMaskOutput.cpp rename to paddle/legacy/gserver/tests/test_MaxPoolingWithMaskOutput.cpp diff --git a/paddle/gserver/tests/test_MultinomialSampler.cpp b/paddle/legacy/gserver/tests/test_MultinomialSampler.cpp similarity index 98% rename from paddle/gserver/tests/test_MultinomialSampler.cpp rename to paddle/legacy/gserver/tests/test_MultinomialSampler.cpp index 043025239e..ca1a588d83 100644 --- a/paddle/gserver/tests/test_MultinomialSampler.cpp +++ b/paddle/legacy/gserver/tests/test_MultinomialSampler.cpp @@ -20,7 +20,7 @@ limitations under the License. */ #undef PADDLE_DISABLE_TIMER #include "paddle/utils/Stat.h" -#include "paddle/gserver/layers/MultinomialSampler.h" +#include "paddle/legacy/gserver/layers/MultinomialSampler.h" #include "paddle/utils/Util.h" using namespace paddle; // NOLINT diff --git a/paddle/gserver/tests/test_NetworkCompare.cpp b/paddle/legacy/gserver/tests/test_NetworkCompare.cpp similarity index 100% rename from paddle/gserver/tests/test_NetworkCompare.cpp rename to paddle/legacy/gserver/tests/test_NetworkCompare.cpp diff --git a/paddle/gserver/tests/test_PriorBox.cpp b/paddle/legacy/gserver/tests/test_PriorBox.cpp similarity index 100% rename from paddle/gserver/tests/test_PriorBox.cpp rename to paddle/legacy/gserver/tests/test_PriorBox.cpp diff --git a/paddle/gserver/tests/test_PyDataProvider.cpp b/paddle/legacy/gserver/tests/test_PyDataProvider.cpp similarity index 99% rename from paddle/gserver/tests/test_PyDataProvider.cpp rename to paddle/legacy/gserver/tests/test_PyDataProvider.cpp index a1dee97950..f956b825aa 100644 --- a/paddle/gserver/tests/test_PyDataProvider.cpp +++ b/paddle/legacy/gserver/tests/test_PyDataProvider.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include -#include "paddle/gserver/dataproviders/PyDataProvider.h" +#include "paddle/legacy/gserver/dataproviders/PyDataProvider.h" #include "paddle/utils/Util.h" #include "paddle/testing/TestUtil.h" diff --git a/paddle/gserver/tests/test_PyDataProvider2.cpp b/paddle/legacy/gserver/tests/test_PyDataProvider2.cpp similarity index 99% rename from paddle/gserver/tests/test_PyDataProvider2.cpp rename to paddle/legacy/gserver/tests/test_PyDataProvider2.cpp index b39fb35345..7f5a087b9a 100644 --- a/paddle/gserver/tests/test_PyDataProvider2.cpp +++ b/paddle/legacy/gserver/tests/test_PyDataProvider2.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #ifndef PADDLE_NO_PYTHON #include #include -#include "paddle/gserver/dataproviders/DataProvider.h" +#include "paddle/legacy/gserver/dataproviders/DataProvider.h" #include "paddle/utils/PythonUtil.h" #include "paddle/utils/Util.h" diff --git a/paddle/gserver/tests/test_PyDataProvider2.py b/paddle/legacy/gserver/tests/test_PyDataProvider2.py similarity index 100% rename from paddle/gserver/tests/test_PyDataProvider2.py rename to paddle/legacy/gserver/tests/test_PyDataProvider2.py diff --git a/paddle/gserver/tests/test_RecurrentGradientMachine.cpp b/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp similarity index 98% rename from paddle/gserver/tests/test_RecurrentGradientMachine.cpp rename to paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp index 9770567b88..29b9ca41b6 100644 --- a/paddle/gserver/tests/test_RecurrentGradientMachine.cpp +++ b/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include +#include #include #include #include diff --git a/paddle/gserver/tests/test_RecurrentLayer.cpp b/paddle/legacy/gserver/tests/test_RecurrentLayer.cpp similarity index 98% rename from paddle/gserver/tests/test_RecurrentLayer.cpp rename to paddle/legacy/gserver/tests/test_RecurrentLayer.cpp index b54e37b7db..852a08d493 100644 --- a/paddle/gserver/tests/test_RecurrentLayer.cpp +++ b/paddle/legacy/gserver/tests/test_RecurrentLayer.cpp @@ -16,8 +16,8 @@ limitations under the License. */ #include #include #include "ModelConfig.pb.h" -#include "paddle/gserver/layers/DataLayer.h" -#include "paddle/gserver/layers/Layer.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/Layer.h" #include "paddle/testing/TestUtil.h" @@ -220,9 +220,9 @@ TEST(Layer, RecurrentLayer) { } #define protected public -#include "paddle/gserver/layers/GatedRecurrentLayer.h" -#include "paddle/gserver/layers/LstmLayer.h" -#include "paddle/gserver/layers/RecurrentLayer.h" +#include "paddle/legacy/gserver/layers/GatedRecurrentLayer.h" +#include "paddle/legacy/gserver/layers/LstmLayer.h" +#include "paddle/legacy/gserver/layers/RecurrentLayer.h" template class TestRecurrentLayer { public: @@ -423,7 +423,7 @@ TEST(Layer, LstmLayer) { #ifdef PADDLE_WITH_MKLML -#include "paddle/gserver/layers/MKLPackedRecurrentLayer.h" +#include "paddle/legacy/gserver/layers/MKLPackedRecurrentLayer.h" LayerPtr initMKLPackedLayer(LayerConfig layerConfig, bool reversed, diff --git a/paddle/gserver/tests/test_SelectiveFCLayer.cpp b/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp similarity index 98% rename from paddle/gserver/tests/test_SelectiveFCLayer.cpp rename to paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp index 583e3bc545..b5033d5fcb 100644 --- a/paddle/gserver/tests/test_SelectiveFCLayer.cpp +++ b/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp @@ -19,10 +19,10 @@ limitations under the License. */ #include #include #include "ModelConfig.pb.h" -#include "paddle/gserver/layers/DataLayer.h" -#include "paddle/gserver/layers/FullyConnectedLayer.h" -#include "paddle/gserver/layers/Layer.h" -#include "paddle/gserver/layers/SelectiveFullyConnectedLayer.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/FullyConnectedLayer.h" +#include "paddle/legacy/gserver/layers/Layer.h" +#include "paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.h" #include "paddle/math/CpuSparseMatrix.h" using namespace paddle; // NOLINT diff --git a/paddle/gserver/tests/test_SeqSliceLayerGrad.cpp b/paddle/legacy/gserver/tests/test_SeqSliceLayerGrad.cpp similarity index 99% rename from paddle/gserver/tests/test_SeqSliceLayerGrad.cpp rename to paddle/legacy/gserver/tests/test_SeqSliceLayerGrad.cpp index 406ca63b6e..05acd71421 100644 --- a/paddle/gserver/tests/test_SeqSliceLayerGrad.cpp +++ b/paddle/legacy/gserver/tests/test_SeqSliceLayerGrad.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include #include "ModelConfig.pb.h" -#include "paddle/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" #include "LayerGradUtil.h" #include "paddle/testing/TestUtil.h" diff --git a/paddle/gserver/tests/test_Upsample.cpp b/paddle/legacy/gserver/tests/test_Upsample.cpp similarity index 100% rename from paddle/gserver/tests/test_Upsample.cpp rename to paddle/legacy/gserver/tests/test_Upsample.cpp diff --git a/paddle/gserver/tests/test_WarpCTCLayer.cpp b/paddle/legacy/gserver/tests/test_WarpCTCLayer.cpp similarity index 97% rename from paddle/gserver/tests/test_WarpCTCLayer.cpp rename to paddle/legacy/gserver/tests/test_WarpCTCLayer.cpp index f2299d7da2..34b88e6893 100644 --- a/paddle/gserver/tests/test_WarpCTCLayer.cpp +++ b/paddle/legacy/gserver/tests/test_WarpCTCLayer.cpp @@ -15,10 +15,10 @@ limitations under the License. */ #include #include #include "ModelConfig.pb.h" -#include "paddle/gserver/layers/CTCLayer.h" -#include "paddle/gserver/layers/DataLayer.h" -#include "paddle/gserver/layers/Layer.h" -#include "paddle/gserver/layers/WarpCTCLayer.h" +#include "paddle/legacy/gserver/layers/CTCLayer.h" +#include "paddle/legacy/gserver/layers/DataLayer.h" +#include "paddle/legacy/gserver/layers/Layer.h" +#include "paddle/legacy/gserver/layers/WarpCTCLayer.h" #include "paddle/testing/TestUtil.h" diff --git a/paddle/trainer/ParamUtil.cpp b/paddle/trainer/ParamUtil.cpp index ffbca42e10..b577e3e868 100644 --- a/paddle/trainer/ParamUtil.cpp +++ b/paddle/trainer/ParamUtil.cpp @@ -31,8 +31,8 @@ limitations under the License. */ #include "paddle/utils/Util.h" #include "TesterConfig.h" -#include "paddle/gserver/gradientmachines/NeuralNetwork.h" -#include "paddle/gserver/layers/ValidationLayer.h" +#include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" +#include "paddle/legacy/gserver/layers/ValidationLayer.h" namespace paddle { diff --git a/paddle/trainer/ParamUtil.h b/paddle/trainer/ParamUtil.h index 10746b4d58..c34e079b90 100644 --- a/paddle/trainer/ParamUtil.h +++ b/paddle/trainer/ParamUtil.h @@ -19,8 +19,8 @@ limitations under the License. */ #include #include "hl_gpu.h" -#include "paddle/gserver/dataproviders/DataProvider.h" -#include "paddle/gserver/gradientmachines/GradientMachine.h" +#include "paddle/legacy/gserver/dataproviders/DataProvider.h" +#include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" #include #include diff --git a/paddle/trainer/ParameterUpdater.h b/paddle/trainer/ParameterUpdater.h index ef7ab92eca..4ad9b5af0f 100644 --- a/paddle/trainer/ParameterUpdater.h +++ b/paddle/trainer/ParameterUpdater.h @@ -25,7 +25,7 @@ limitations under the License. */ #include "paddle/parameter/ParameterUpdaterBase.h" #include "TrainerConfig.pb.h" -#include "paddle/gserver/layers/Layer.h" +#include "paddle/legacy/gserver/layers/Layer.h" #include #include diff --git a/paddle/trainer/Tester.cpp b/paddle/trainer/Tester.cpp index 16e676d602..f7daf1327b 100644 --- a/paddle/trainer/Tester.cpp +++ b/paddle/trainer/Tester.cpp @@ -30,9 +30,9 @@ limitations under the License. */ #include "paddle/utils/Util.h" #include "TesterConfig.h" -#include "paddle/gserver/gradientmachines/GradientMachineMode.h" -#include "paddle/gserver/gradientmachines/NeuralNetwork.h" -#include "paddle/gserver/layers/ValidationLayer.h" +#include "paddle/legacy/gserver/gradientmachines/GradientMachineMode.h" +#include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" +#include "paddle/legacy/gserver/layers/ValidationLayer.h" namespace paddle { diff --git a/paddle/trainer/Tester.h b/paddle/trainer/Tester.h index 801c77e311..bce9775a09 100644 --- a/paddle/trainer/Tester.h +++ b/paddle/trainer/Tester.h @@ -19,8 +19,8 @@ limitations under the License. */ #include #include "hl_gpu.h" -#include "paddle/gserver/dataproviders/DataProvider.h" -#include "paddle/gserver/gradientmachines/GradientMachine.h" +#include "paddle/legacy/gserver/dataproviders/DataProvider.h" +#include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" #include "TrainerConfig.pb.h" diff --git a/paddle/trainer/TesterConfig.h b/paddle/trainer/TesterConfig.h index 68d4c931ff..ef10c7dbf7 100644 --- a/paddle/trainer/TesterConfig.h +++ b/paddle/trainer/TesterConfig.h @@ -19,7 +19,7 @@ limitations under the License. */ #include #include "hl_gpu.h" -#include "paddle/gserver/gradientmachines/GradientMachine.h" +#include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" #include "TrainerConfig.pb.h" diff --git a/paddle/trainer/Trainer.cpp b/paddle/trainer/Trainer.cpp index 3e4a2b5fa8..edfd72197e 100644 --- a/paddle/trainer/Trainer.cpp +++ b/paddle/trainer/Trainer.cpp @@ -33,9 +33,9 @@ limitations under the License. */ #include "TesterConfig.h" #include "ThreadParameterUpdater.h" #include "TrainerConfigHelper.h" -#include "paddle/gserver/gradientmachines/GradientMachineMode.h" -#include "paddle/gserver/gradientmachines/NeuralNetwork.h" -#include "paddle/gserver/layers/ValidationLayer.h" +#include "paddle/legacy/gserver/gradientmachines/GradientMachineMode.h" +#include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" +#include "paddle/legacy/gserver/layers/ValidationLayer.h" DEFINE_string(config, "", "Trainer config file"); diff --git a/paddle/trainer/Trainer.h b/paddle/trainer/Trainer.h index 78127b7be5..58acec1781 100644 --- a/paddle/trainer/Trainer.h +++ b/paddle/trainer/Trainer.h @@ -19,8 +19,8 @@ limitations under the License. */ #include #include "hl_gpu.h" -#include "paddle/gserver/dataproviders/DataProvider.h" -#include "paddle/gserver/gradientmachines/GradientMachine.h" +#include "paddle/legacy/gserver/dataproviders/DataProvider.h" +#include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" #include #include diff --git a/paddle/trainer/TrainerInternal.cpp b/paddle/trainer/TrainerInternal.cpp index 4c5d4a0913..b4b1a87cd5 100644 --- a/paddle/trainer/TrainerInternal.cpp +++ b/paddle/trainer/TrainerInternal.cpp @@ -24,8 +24,8 @@ limitations under the License. */ #include -#include "paddle/gserver/gradientmachines/NeuralNetwork.h" -#include "paddle/gserver/layers/ValidationLayer.h" +#include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" +#include "paddle/legacy/gserver/layers/ValidationLayer.h" #include "paddle/utils/GlobalConstants.h" #include "paddle/utils/PythonUtil.h" #include "paddle/utils/Stat.h" diff --git a/paddle/trainer/TrainerInternal.h b/paddle/trainer/TrainerInternal.h index 48ee53a5e6..ecc87966dc 100644 --- a/paddle/trainer/TrainerInternal.h +++ b/paddle/trainer/TrainerInternal.h @@ -25,7 +25,7 @@ limitations under the License. */ #include "TrainerConfigHelper.h" #include "TrainerInternalConfig.h" #include "hl_gpu.h" -#include "paddle/gserver/gradientmachines/GradientMachine.h" +#include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" namespace paddle { diff --git a/paddle/trainer/TrainerInternalConfig.h b/paddle/trainer/TrainerInternalConfig.h index 43aae38102..29d588e1be 100644 --- a/paddle/trainer/TrainerInternalConfig.h +++ b/paddle/trainer/TrainerInternalConfig.h @@ -19,7 +19,7 @@ limitations under the License. */ #include #include "hl_gpu.h" -#include "paddle/gserver/gradientmachines/GradientMachine.h" +#include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" #include "TrainerConfig.pb.h" diff --git a/paddle/trainer/tests/test_PyDataProviderWrapper.cpp b/paddle/trainer/tests/test_PyDataProviderWrapper.cpp index 92dc8aa9ec..675db2e052 100644 --- a/paddle/trainer/tests/test_PyDataProviderWrapper.cpp +++ b/paddle/trainer/tests/test_PyDataProviderWrapper.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #ifndef PADDLE_NO_PYTHON #include #include -#include +#include #include #include #include diff --git a/python/paddle/trainer_config_helpers/layers.py b/python/paddle/trainer_config_helpers/layers.py index e6a03759ef..d9787ef42a 100644 --- a/python/paddle/trainer_config_helpers/layers.py +++ b/python/paddle/trainer_config_helpers/layers.py @@ -4182,9 +4182,9 @@ def recurrent_group(step, input, reverse=False, name=None, targetInlink=None): You can see following configs for further usages: - - time steps: lstmemory_group, paddle/gserver/tests/sequence_layer_group.conf, \ + - time steps: lstmemory_group, paddle/legacy/gserver/tests/sequence_layer_group.conf, \ demo/seqToseq/seqToseq_net.py - - sequence steps: paddle/gserver/tests/sequence_nest_layer_group.conf + - sequence steps: paddle/legacy/gserver/tests/sequence_nest_layer_group.conf :param step: A step function which takes the input of recurrent_group as its own input and returns values as recurrent_group's output every time step. diff --git a/tools/codestyle/cpplint_pre_commit.hook b/tools/codestyle/cpplint_pre_commit.hook index a9775e10ef..fde9c9ac1f 100755 --- a/tools/codestyle/cpplint_pre_commit.hook +++ b/tools/codestyle/cpplint_pre_commit.hook @@ -4,7 +4,7 @@ TOTAL_ERRORS=0 # The trick to remove deleted files: https://stackoverflow.com/a/2413151 for file in $(git diff --cached --name-status | awk '$1 != "D" {print $2}'); do - if [[ $file =~ ^(paddle/api/.*|paddle/capi/.*|paddle/contrib/.*|paddle/cuda/.*|paddle/function/.*|paddle/gserver/.*|paddle/math/.*|paddle/optimizer/.*|paddle/parameter/.*|paddle/pserver/.*|paddle/trainer/.*|paddle/utils/.*) ]]; then + if [[ $file =~ ^(paddle/api/.*|paddle/capi/.*|paddle/contrib/.*|paddle/cuda/.*|paddle/function/.*|paddle/legacy/gserver/.*|paddle/math/.*|paddle/optimizer/.*|paddle/parameter/.*|paddle/pserver/.*|paddle/trainer/.*|paddle/utils/.*) ]]; then continue; else cpplint --filter=-readability/fn_size $file; From 4121ad3edc0959f84a86d92c45d955dca327aeb1 Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Sun, 1 Jul 2018 11:58:24 +0800 Subject: [PATCH 088/130] fix test paths --- .../gserver/tests/test_CompareSparse.cpp | 2 +- .../gserver/tests/test_CompareTwoNets.cpp | 5 ++-- paddle/legacy/gserver/tests/test_MKLDNN.cpp | 2 +- .../gserver/tests/test_NetworkCompare.cpp | 28 +++++++++---------- .../gserver/tests/test_PyDataProvider.cpp | 6 ++-- .../tests/test_RecurrentGradientMachine.cpp | 24 ++++++++-------- .../gserver/tests/test_SelectiveFCLayer.cpp | 14 +++++----- 7 files changed, 42 insertions(+), 39 deletions(-) diff --git a/paddle/legacy/gserver/tests/test_CompareSparse.cpp b/paddle/legacy/gserver/tests/test_CompareSparse.cpp index 2fbc404125..c14e80036c 100644 --- a/paddle/legacy/gserver/tests/test_CompareSparse.cpp +++ b/paddle/legacy/gserver/tests/test_CompareSparse.cpp @@ -22,7 +22,7 @@ limitations under the License. */ using namespace paddle; // NOLINT using namespace std; // NOLINT -static const string& configFile1 = "gserver/tests/sequence_lstm.conf"; +static const string& configFile1 = "legacy/gserver/tests/sequence_lstm.conf"; DECLARE_bool(use_gpu); DECLARE_string(config); diff --git a/paddle/legacy/gserver/tests/test_CompareTwoNets.cpp b/paddle/legacy/gserver/tests/test_CompareTwoNets.cpp index 1c9b4002a3..3ac86ce516 100644 --- a/paddle/legacy/gserver/tests/test_CompareTwoNets.cpp +++ b/paddle/legacy/gserver/tests/test_CompareTwoNets.cpp @@ -40,9 +40,10 @@ DEFINE_double( DECLARE_bool(thread_local_rand_use_global_seed); DECLARE_int32(seed); -static const string& config_file_a = "gserver/tests/sequence_recurrent.py"; +static const string& config_file_a = + "legacy/gserver/tests/sequence_recurrent.py"; static const string& config_file_b = - "gserver/tests/sequence_recurrent_group.py"; + "legacy/gserver/tests/sequence_recurrent_group.py"; struct ComData { vector outArgs; diff --git a/paddle/legacy/gserver/tests/test_MKLDNN.cpp b/paddle/legacy/gserver/tests/test_MKLDNN.cpp index c1f52540a6..80dea89f3c 100644 --- a/paddle/legacy/gserver/tests/test_MKLDNN.cpp +++ b/paddle/legacy/gserver/tests/test_MKLDNN.cpp @@ -426,7 +426,7 @@ DECLARE_string(config_args); TEST(MKLDNNNet, net) { std::vector cases = {"simple", "branch"}; for (auto name : cases) { - std::string config = "./gserver/tests/mkldnn_" + name + "_net.conf"; + std::string config = "./legacy/gserver/tests/mkldnn_" + name + "_net.conf"; for (auto channels : {2, 32}) { std::ostringstream oss; oss << "channels=" << channels; diff --git a/paddle/legacy/gserver/tests/test_NetworkCompare.cpp b/paddle/legacy/gserver/tests/test_NetworkCompare.cpp index fda3f2f793..5a6b224583 100644 --- a/paddle/legacy/gserver/tests/test_NetworkCompare.cpp +++ b/paddle/legacy/gserver/tests/test_NetworkCompare.cpp @@ -220,33 +220,33 @@ void compareNetwork(const std::string& config_file_a, } TEST(Compare, concat_dotmul) { - std::string config_file_a = "./gserver/tests/concat_dotmul_a.conf"; - std::string config_file_b = "./gserver/tests/concat_dotmul_b.conf"; + std::string config_file_a = "./legacy/gserver/tests/concat_dotmul_a.conf"; + std::string config_file_b = "./legacy/gserver/tests/concat_dotmul_b.conf"; compareNetwork(config_file_a, config_file_b); } TEST(Compare, concat_fullmatrix) { - std::string config_file_a = "./gserver/tests/concat_fullmatrix_a.conf"; - std::string config_file_b = "./gserver/tests/concat_fullmatrix_b.conf"; + std::string config_file_a = "./legacy/gserver/tests/concat_fullmatrix_a.conf"; + std::string config_file_b = "./legacy/gserver/tests/concat_fullmatrix_b.conf"; compareNetwork(config_file_a, config_file_b); } TEST(Compare, concat_table) { - std::string config_file_a = "./gserver/tests/concat_table_a.conf"; - std::string config_file_b = "./gserver/tests/concat_table_b.conf"; + std::string config_file_a = "./legacy/gserver/tests/concat_table_a.conf"; + std::string config_file_b = "./legacy/gserver/tests/concat_table_b.conf"; compareNetwork(config_file_a, config_file_b); } TEST(Compare, concat_slice) { - std::string config_file_a = "./gserver/tests/concat_slice_a.conf"; - std::string config_file_b = "./gserver/tests/concat_slice_b.conf"; + std::string config_file_a = "./legacy/gserver/tests/concat_slice_a.conf"; + std::string config_file_b = "./legacy/gserver/tests/concat_slice_b.conf"; compareNetwork(config_file_a, config_file_b); } #ifdef PADDLE_WITH_CUDA TEST(Compare, img_pool) { - std::string config_file_a = "./gserver/tests/img_pool_a.conf"; - std::string config_file_b = "./gserver/tests/img_pool_b.conf"; + std::string config_file_a = "./legacy/gserver/tests/img_pool_a.conf"; + std::string config_file_b = "./legacy/gserver/tests/img_pool_b.conf"; bool useGpu = FLAGS_use_gpu; FLAGS_use_gpu = true; compareNetwork(config_file_a, config_file_b); @@ -254,8 +254,8 @@ TEST(Compare, img_pool) { } TEST(Compare, img_conv) { - std::string config_file_a = "./gserver/tests/img_conv_a.conf"; - std::string config_file_b = "./gserver/tests/img_conv_b.conf"; + std::string config_file_a = "./legacy/gserver/tests/img_conv_a.conf"; + std::string config_file_b = "./legacy/gserver/tests/img_conv_b.conf"; bool useGpu = FLAGS_use_gpu; FLAGS_use_gpu = true; compareNetwork(config_file_a, config_file_b); @@ -264,8 +264,8 @@ TEST(Compare, img_conv) { // Test cudnn_conv and exconv give the same result TEST(Compare, img_conv2) { - std::string config_file_a = "./gserver/tests/img_conv_cudnn.py"; - std::string config_file_b = "./gserver/tests/img_conv_exconv.py"; + std::string config_file_a = "./legacy/gserver/tests/img_conv_cudnn.py"; + std::string config_file_b = "./legacy/gserver/tests/img_conv_exconv.py"; bool useGpu = FLAGS_use_gpu; double eps = FLAGS_checkgrad_eps; FLAGS_use_gpu = true; diff --git a/paddle/legacy/gserver/tests/test_PyDataProvider.cpp b/paddle/legacy/gserver/tests/test_PyDataProvider.cpp index f956b825aa..9cde4ecca5 100644 --- a/paddle/legacy/gserver/tests/test_PyDataProvider.cpp +++ b/paddle/legacy/gserver/tests/test_PyDataProvider.cpp @@ -35,7 +35,8 @@ TEST(PyDataProvider, py_fill_slots) { config.set_load_data_module(std::string("pyDataProvider")); config.set_load_data_object(std::string("SimpleDataProvider")); config.clear_files(); - std::string dataFile = "gserver/tests/pyDataProvider/pyDataProviderList"; + std::string dataFile = + "legacy/gserver/tests/pyDataProvider/pyDataProviderList"; config.set_files(dataFile); #ifndef PADDLE_WITH_CUDA bool useGpu = false; @@ -68,7 +69,8 @@ TEST(PyDataProvider, py_fill_nest_slots) { config.set_load_data_module(std::string("pyDataProvider")); config.set_load_data_object(std::string("SimpleNestDataProvider")); config.clear_files(); - std::string dataFile = "gserver/tests/pyDataProvider/pyDataProviderList"; + std::string dataFile = + "legacy/gserver/tests/pyDataProvider/pyDataProviderList"; config.set_files(dataFile); EXPECT_EQ(config.IsInitialized(), true); #ifndef PADDLE_WITH_CUDA diff --git a/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp b/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp index 29b9ca41b6..405a45b086 100644 --- a/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp +++ b/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp @@ -102,11 +102,11 @@ void test(const string& conf1, const string& conf2, double eps, bool useGpu) { FLAGS_use_gpu = useGpu; int num_passes = 5; real* cost1 = new real[num_passes]; - const string dir1 = "gserver/tests/t1"; + const string dir1 = "legacy/gserver/tests/t1"; CalCost(conf1, dir1, cost1, num_passes); real* cost2 = new real[num_passes]; - const string dir2 = "gserver/tests/t2"; + const string dir2 = "legacy/gserver/tests/t2"; CalCost(conf2, dir2, cost2, num_passes); for (int i = 0; i < num_passes; i++) { @@ -121,8 +121,8 @@ void test(const string& conf1, const string& conf2, double eps, bool useGpu) { TEST(RecurrentGradientMachine, HasSubSequence) { for (bool useGpu : {false, true}) { - test("gserver/tests/sequence_layer_group.conf", - "gserver/tests/sequence_nest_layer_group.conf", + test("legacy/gserver/tests/sequence_layer_group.conf", + "legacy/gserver/tests/sequence_nest_layer_group.conf", 1e-5, useGpu); } @@ -130,8 +130,8 @@ TEST(RecurrentGradientMachine, HasSubSequence) { TEST(RecurrentGradientMachine, rnn) { for (bool useGpu : {false, true}) { - test("gserver/tests/sequence_rnn.conf", - "gserver/tests/sequence_nest_rnn.conf", + test("legacy/gserver/tests/sequence_rnn.conf", + "legacy/gserver/tests/sequence_nest_rnn.conf", 1e-6, useGpu); } @@ -139,8 +139,8 @@ TEST(RecurrentGradientMachine, rnn) { TEST(RecurrentGradientMachine, rnn_multi_input) { for (bool useGpu : {false, true}) { - test("gserver/tests/sequence_rnn_multi_input.conf", - "gserver/tests/sequence_nest_rnn_multi_input.conf", + test("legacy/gserver/tests/sequence_rnn_multi_input.conf", + "legacy/gserver/tests/sequence_nest_rnn_multi_input.conf", 1e-6, useGpu); } @@ -148,8 +148,8 @@ TEST(RecurrentGradientMachine, rnn_multi_input) { TEST(RecurrentGradientMachine, rnn_multi_unequalength_input) { for (bool useGpu : {false, true}) { - test("gserver/tests/sequence_rnn_multi_unequalength_inputs.py", - "gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py", + test("legacy/gserver/tests/sequence_rnn_multi_unequalength_inputs.py", + "legacy/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py", 1e-6, useGpu); } @@ -157,8 +157,8 @@ TEST(RecurrentGradientMachine, rnn_multi_unequalength_input) { TEST(RecurrentGradientMachine, rnn_mixed_input) { for (bool useGpu : {false, true}) { - test("gserver/tests/sequence_rnn_mixed_inputs.py", - "gserver/tests/sequence_rnn_matched_inputs.py", + test("legacy/gserver/tests/sequence_rnn_mixed_inputs.py", + "legacy/gserver/tests/sequence_rnn_matched_inputs.py", 1e-6, useGpu); } diff --git a/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp b/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp index b5033d5fcb..2ae051b4d7 100644 --- a/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp +++ b/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp @@ -76,7 +76,7 @@ void calcOutput(ComData& comData, FLAGS_config = configFile; FLAGS_config_args = configArgs; FLAGS_use_gpu = useGpu; - FLAGS_init_model_path = "gserver/tests/SelectiveFcTest/model"; + FLAGS_init_model_path = "legacy/gserver/tests/SelectiveFcTest/model"; *ThreadLocalRand::getSeed() = 0; srand(0); @@ -311,13 +311,13 @@ LayerPtr initFcLayer(LayerPtr dataLayer, #ifndef PADDLE_TYPE_DOUBLE // The parameter file used in fc.conf and selective_fc.conf is float TEST(Layer, SelectiveFcLayer_train_dense_mul) { - const string& fcConfig = "gserver/tests/SelectiveFcTest/conf/fc.conf"; + const string& fcConfig = "legacy/gserver/tests/SelectiveFcTest/conf/fc.conf"; const string& fcConfigArgs = - "filelist=gserver/tests/SelectiveFcTest/dense_mul_list"; + "filelist=legacy/gserver/tests/SelectiveFcTest/dense_mul_list"; const string& selFcConfig = - "gserver/tests/SelectiveFcTest/conf/selective_fc.conf"; + "legacy/gserver/tests/SelectiveFcTest/conf/selective_fc.conf"; const string& selConfigArgs = - "filelist=gserver/tests/SelectiveFcTest/dense_mul_list"; + "filelist=legacy/gserver/tests/SelectiveFcTest/dense_mul_list"; for (auto useGpu : {false, true}) { #ifndef PADDLE_WITH_CUDA @@ -350,7 +350,7 @@ void testSelectiveFcLayerTrainSparseMul(const LayerConfig& config, creatDataLayer("data", batchSize, dataLayerSize, values, useGpu); const string& selfcParaFile = - "gserver/tests/SelectiveFcTest/model/rand_fc_param.w.transpose"; + "legacy/gserver/tests/SelectiveFcTest/model/rand_fc_param.w.transpose"; const string& selfcParaName = "rand_fc_param.w.transpose"; std::shared_ptr selfcLayer = @@ -396,7 +396,7 @@ void testSelectiveFcLayerTrainSparseMul(const LayerConfig& config, size_t nnz = cpuOutMatSelfc->getElementCnt(); const string& fcParaFile = - "gserver/tests/SelectiveFcTest/model/rand_fc_param.w"; + "legacy/gserver/tests/SelectiveFcTest/model/rand_fc_param.w"; const string& fcParaName = "rand_fc_param.w"; LayerConfig fcLayerConfig; fcLayerConfig.set_name("fc_layer"); From 060811cc1b2300f0be75f89d241de8092d7a262f Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Sun, 1 Jul 2018 13:16:48 +0800 Subject: [PATCH 089/130] fix paths --- paddle/legacy/gserver/tests/sequence_layer_group.conf | 4 ++-- paddle/legacy/gserver/tests/sequence_lstm.conf | 4 ++-- paddle/legacy/gserver/tests/sequence_nest_layer_group.conf | 4 ++-- paddle/legacy/gserver/tests/sequence_nest_rnn.conf | 2 +- .../legacy/gserver/tests/sequence_nest_rnn_multi_input.conf | 2 +- .../tests/sequence_nest_rnn_multi_unequalength_inputs.py | 2 +- paddle/legacy/gserver/tests/sequence_recurrent.py | 4 ++-- paddle/legacy/gserver/tests/sequence_recurrent_group.py | 4 ++-- paddle/legacy/gserver/tests/sequence_rnn.conf | 2 +- paddle/legacy/gserver/tests/sequence_rnn_matched_inputs.py | 2 +- paddle/legacy/gserver/tests/sequence_rnn_mixed_inputs.py | 2 +- paddle/legacy/gserver/tests/sequence_rnn_multi_input.conf | 2 +- .../gserver/tests/sequence_rnn_multi_unequalength_inputs.py | 2 +- paddle/trainer/tests/config_parser_test.py | 3 ++- 14 files changed, 20 insertions(+), 19 deletions(-) diff --git a/paddle/legacy/gserver/tests/sequence_layer_group.conf b/paddle/legacy/gserver/tests/sequence_layer_group.conf index 50f2d89d02..ad1b61d582 100644 --- a/paddle/legacy/gserver/tests/sequence_layer_group.conf +++ b/paddle/legacy/gserver/tests/sequence_layer_group.conf @@ -16,13 +16,13 @@ from paddle.trainer_config_helpers import * ######################## data source ################################ -dict_path = 'gserver/tests/Sequence/tour_dict_phrase.dict' +dict_path = 'legacy/gserver/tests/Sequence/tour_dict_phrase.dict' dict_file = dict() for line_count, line in enumerate(open(dict_path, "r")): dict_file[line.strip()] = line_count define_py_data_sources2( - train_list='gserver/tests/Sequence/train.list', + train_list='legacy/gserver/tests/Sequence/train.list', test_list=None, module='sequenceGen', obj='process', diff --git a/paddle/legacy/gserver/tests/sequence_lstm.conf b/paddle/legacy/gserver/tests/sequence_lstm.conf index f49a827f22..6ab70e7071 100644 --- a/paddle/legacy/gserver/tests/sequence_lstm.conf +++ b/paddle/legacy/gserver/tests/sequence_lstm.conf @@ -16,13 +16,13 @@ from paddle.trainer_config_helpers import * ######################## data source ################################ -dict_path = 'gserver/tests/Sequence/tour_dict_phrase.dict' +dict_path = 'legacy/gserver/tests/Sequence/tour_dict_phrase.dict' dict_file = dict() for line_count, line in enumerate(open(dict_path, "r")): dict_file[line.strip()] = line_count define_py_data_sources2( - train_list='gserver/tests/Sequence/train.list', + train_list='legacy/gserver/tests/Sequence/train.list', test_list=None, module='sequenceGen', obj='process', diff --git a/paddle/legacy/gserver/tests/sequence_nest_layer_group.conf b/paddle/legacy/gserver/tests/sequence_nest_layer_group.conf index 71ef53d08a..75c36b1189 100644 --- a/paddle/legacy/gserver/tests/sequence_nest_layer_group.conf +++ b/paddle/legacy/gserver/tests/sequence_nest_layer_group.conf @@ -16,13 +16,13 @@ from paddle.trainer_config_helpers import * ######################## data source ################################ -dict_path = 'gserver/tests/Sequence/tour_dict_phrase.dict' +dict_path = 'legacy/gserver/tests/Sequence/tour_dict_phrase.dict' dict_file = dict() for line_count, line in enumerate(open(dict_path, "r")): dict_file[line.strip()] = line_count define_py_data_sources2( - train_list='gserver/tests/Sequence/train.list.nest', + train_list='legacy/gserver/tests/Sequence/train.list.nest', test_list=None, module='sequenceGen', obj='process2', diff --git a/paddle/legacy/gserver/tests/sequence_nest_rnn.conf b/paddle/legacy/gserver/tests/sequence_nest_rnn.conf index 2873a59966..bc3b22c2a9 100644 --- a/paddle/legacy/gserver/tests/sequence_nest_rnn.conf +++ b/paddle/legacy/gserver/tests/sequence_nest_rnn.conf @@ -16,7 +16,7 @@ from paddle.trainer_config_helpers import * ######################## data source ################################ -define_py_data_sources2(train_list='gserver/tests/Sequence/dummy.list', +define_py_data_sources2(train_list='legacy/gserver/tests/Sequence/dummy.list', test_list=None, module='rnn_data_provider', obj='process_subseq') diff --git a/paddle/legacy/gserver/tests/sequence_nest_rnn_multi_input.conf b/paddle/legacy/gserver/tests/sequence_nest_rnn_multi_input.conf index afdacfffd7..165ab22989 100644 --- a/paddle/legacy/gserver/tests/sequence_nest_rnn_multi_input.conf +++ b/paddle/legacy/gserver/tests/sequence_nest_rnn_multi_input.conf @@ -16,7 +16,7 @@ from paddle.trainer_config_helpers import * ######################## data source ################################ -define_py_data_sources2(train_list='gserver/tests/Sequence/dummy.list', +define_py_data_sources2(train_list='legacy/gserver/tests/Sequence/dummy.list', test_list=None, module='rnn_data_provider', obj='process_subseq') diff --git a/paddle/legacy/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py b/paddle/legacy/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py index 569d3c094b..9a48b7f25c 100644 --- a/paddle/legacy/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py +++ b/paddle/legacy/gserver/tests/sequence_nest_rnn_multi_unequalength_inputs.py @@ -15,7 +15,7 @@ from paddle.trainer_config_helpers import * ######################## data source ################################ define_py_data_sources2( - train_list='gserver/tests/Sequence/dummy.list', + train_list='legacy/gserver/tests/Sequence/dummy.list', test_list=None, module='rnn_data_provider', obj='process_unequalength_subseq') diff --git a/paddle/legacy/gserver/tests/sequence_recurrent.py b/paddle/legacy/gserver/tests/sequence_recurrent.py index b88c09084e..e2c6a7935c 100644 --- a/paddle/legacy/gserver/tests/sequence_recurrent.py +++ b/paddle/legacy/gserver/tests/sequence_recurrent.py @@ -15,13 +15,13 @@ from paddle.trainer_config_helpers import * ######################## data source ################################ -dict_path = 'gserver/tests/Sequence/tour_dict_phrase.dict' +dict_path = 'legacy/gserver/tests/Sequence/tour_dict_phrase.dict' dict_file = dict() for line_count, line in enumerate(open(dict_path, "r")): dict_file[line.strip()] = line_count define_py_data_sources2( - train_list='gserver/tests/Sequence/train.list', + train_list='legacy/gserver/tests/Sequence/train.list', test_list=None, module='sequenceGen', obj='process', diff --git a/paddle/legacy/gserver/tests/sequence_recurrent_group.py b/paddle/legacy/gserver/tests/sequence_recurrent_group.py index 0daf746700..b4638bd907 100644 --- a/paddle/legacy/gserver/tests/sequence_recurrent_group.py +++ b/paddle/legacy/gserver/tests/sequence_recurrent_group.py @@ -14,13 +14,13 @@ from paddle.trainer_config_helpers import * ######################## data source ################################ -dict_path = 'gserver/tests/Sequence/tour_dict_phrase.dict' +dict_path = 'legacy/gserver/tests/Sequence/tour_dict_phrase.dict' dict_file = dict() for line_count, line in enumerate(open(dict_path, "r")): dict_file[line.strip()] = line_count define_py_data_sources2( - train_list='gserver/tests/Sequence/train.list', + train_list='legacy/gserver/tests/Sequence/train.list', test_list=None, module='sequenceGen', obj='process', diff --git a/paddle/legacy/gserver/tests/sequence_rnn.conf b/paddle/legacy/gserver/tests/sequence_rnn.conf index 1084edfe70..3133595c9c 100644 --- a/paddle/legacy/gserver/tests/sequence_rnn.conf +++ b/paddle/legacy/gserver/tests/sequence_rnn.conf @@ -16,7 +16,7 @@ from paddle.trainer_config_helpers import * ######################## data source ################################ -define_py_data_sources2(train_list='gserver/tests/Sequence/dummy.list', +define_py_data_sources2(train_list='legacy/gserver/tests/Sequence/dummy.list', test_list=None, module='rnn_data_provider', obj='process_seq') diff --git a/paddle/legacy/gserver/tests/sequence_rnn_matched_inputs.py b/paddle/legacy/gserver/tests/sequence_rnn_matched_inputs.py index 41a581e0cc..921cef04dd 100644 --- a/paddle/legacy/gserver/tests/sequence_rnn_matched_inputs.py +++ b/paddle/legacy/gserver/tests/sequence_rnn_matched_inputs.py @@ -16,7 +16,7 @@ from paddle.trainer_config_helpers import * ######################## data source ################################ define_py_data_sources2( - train_list='gserver/tests/Sequence/dummy.list', + train_list='legacy/gserver/tests/Sequence/dummy.list', test_list=None, module='rnn_data_provider', obj='process_mixed') diff --git a/paddle/legacy/gserver/tests/sequence_rnn_mixed_inputs.py b/paddle/legacy/gserver/tests/sequence_rnn_mixed_inputs.py index ae89d8e2bb..c7bcaf6c4b 100644 --- a/paddle/legacy/gserver/tests/sequence_rnn_mixed_inputs.py +++ b/paddle/legacy/gserver/tests/sequence_rnn_mixed_inputs.py @@ -16,7 +16,7 @@ from paddle.trainer_config_helpers import * ######################## data source ################################ define_py_data_sources2( - train_list='gserver/tests/Sequence/dummy.list', + train_list='legacy/gserver/tests/Sequence/dummy.list', test_list=None, module='rnn_data_provider', obj='process_mixed') diff --git a/paddle/legacy/gserver/tests/sequence_rnn_multi_input.conf b/paddle/legacy/gserver/tests/sequence_rnn_multi_input.conf index 9fae974f30..bf4be779a2 100644 --- a/paddle/legacy/gserver/tests/sequence_rnn_multi_input.conf +++ b/paddle/legacy/gserver/tests/sequence_rnn_multi_input.conf @@ -16,7 +16,7 @@ from paddle.trainer_config_helpers import * ######################## data source ################################ -define_py_data_sources2(train_list='gserver/tests/Sequence/dummy.list', +define_py_data_sources2(train_list='legacy/gserver/tests/Sequence/dummy.list', test_list=None, module='rnn_data_provider', obj='process_seq') diff --git a/paddle/legacy/gserver/tests/sequence_rnn_multi_unequalength_inputs.py b/paddle/legacy/gserver/tests/sequence_rnn_multi_unequalength_inputs.py index 6473fb3f3e..3612b49c22 100644 --- a/paddle/legacy/gserver/tests/sequence_rnn_multi_unequalength_inputs.py +++ b/paddle/legacy/gserver/tests/sequence_rnn_multi_unequalength_inputs.py @@ -16,7 +16,7 @@ from paddle.trainer_config_helpers import * ######################## data source ################################ define_py_data_sources2( - train_list='gserver/tests/Sequence/dummy.list', + train_list='legacy/gserver/tests/Sequence/dummy.list', test_list=None, module='rnn_data_provider', obj='process_unequalength_seq') diff --git a/paddle/trainer/tests/config_parser_test.py b/paddle/trainer/tests/config_parser_test.py index db66ebb5b7..88646e11f7 100644 --- a/paddle/trainer/tests/config_parser_test.py +++ b/paddle/trainer/tests/config_parser_test.py @@ -19,4 +19,5 @@ if __name__ == '__main__': parse_config_and_serialize( 'trainer/tests/sample_trainer_config.conf', 'extension_module_name=paddle.trainer.config_parser_extension') - parse_config_and_serialize('gserver/tests/pyDataProvider/trainer.conf', '') + parse_config_and_serialize( + 'legacy/gserver/tests/pyDataProvider/trainer.conf', '') From c2b3df6599bd3198e6a1bd3b587f5234968d8df2 Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Sun, 1 Jul 2018 14:32:39 +0800 Subject: [PATCH 090/130] fix path --- paddle/legacy/gserver/tests/Sequence/train.list | 2 +- paddle/legacy/gserver/tests/Sequence/train.list.nest | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/paddle/legacy/gserver/tests/Sequence/train.list b/paddle/legacy/gserver/tests/Sequence/train.list index be27acb3a5..1109a24492 100644 --- a/paddle/legacy/gserver/tests/Sequence/train.list +++ b/paddle/legacy/gserver/tests/Sequence/train.list @@ -1 +1 @@ -gserver/tests/Sequence/tour_train_wdseg +legacy/gserver/tests/Sequence/tour_train_wdseg diff --git a/paddle/legacy/gserver/tests/Sequence/train.list.nest b/paddle/legacy/gserver/tests/Sequence/train.list.nest index 7683ebc68e..a67df35024 100644 --- a/paddle/legacy/gserver/tests/Sequence/train.list.nest +++ b/paddle/legacy/gserver/tests/Sequence/train.list.nest @@ -1 +1 @@ -gserver/tests/Sequence/tour_train_wdseg.nest +legacy/gserver/tests/Sequence/tour_train_wdseg.nest From a9086bf320f59338d4c316b6bb24f9ee7b52ba0f Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Sun, 1 Jul 2018 13:03:24 +0800 Subject: [PATCH 091/130] also move a few other dir to legacy/ --- CMakeLists.txt | 4 ++-- CONTRIBUTING.md | 2 +- doc/v2/design/interface/00.why_plain_c.md | 2 +- doc/v2/dev/new_layer_cn.rst | 2 +- doc/v2/dev/new_layer_en.rst | 2 +- doc/v2/howto/optimization/gpu_profiling_cn.rst | 18 +++++++++--------- doc/v2/howto/optimization/gpu_profiling_en.rst | 16 ++++++++-------- go/pserver/optimizer.go | 2 +- paddle/CMakeLists.txt | 10 +++++----- paddle/api/Arguments.cpp | 2 +- paddle/api/Matrix.cpp | 6 +++--- paddle/api/PaddleAPIPrivate.h | 2 +- paddle/api/Parameter.cpp | 2 +- paddle/api/ParameterOptimizer.cpp | 2 +- paddle/api/SequenceGenerator.cpp | 2 +- paddle/api/Util.cpp | 2 +- paddle/api/Vector.cpp | 2 +- paddle/capi/capi_private.h | 6 +++--- paddle/fluid/inference/analysis/README.md | 2 +- .../operators/math/detail/avx_functions.cc | 2 +- paddle/{ => legacy}/cuda/CMakeLists.txt | 0 .../cuda/include/hl_activation_functions.h | 0 .../{ => legacy}/cuda/include/hl_aggregate.h | 0 .../cuda/include/hl_avx_functions.h | 0 paddle/{ => legacy}/cuda/include/hl_base.h | 2 +- .../{ => legacy}/cuda/include/hl_batch_norm.h | 0 .../cuda/include/hl_batch_transpose.h | 0 paddle/{ => legacy}/cuda/include/hl_cnn.h | 0 .../{ => legacy}/cuda/include/hl_cpu_gru.cuh | 0 .../{ => legacy}/cuda/include/hl_cpu_lstm.cuh | 0 .../cuda/include/hl_cpu_matrix_kernel.cuh | 0 .../include/hl_cpu_matrix_kernel_detail.cuh | 0 .../cuda/include/hl_cpu_scalar.cuh | 0 .../cuda/include/hl_cpu_simd_neon.cuh | 0 .../cuda/include/hl_cpu_simd_sse.cuh | 0 paddle/{ => legacy}/cuda/include/hl_cuda.h | 0 paddle/{ => legacy}/cuda/include/hl_cuda.ph | 0 .../{ => legacy}/cuda/include/hl_cuda_cublas.h | 0 .../{ => legacy}/cuda/include/hl_cuda_cudnn.h | 0 .../{ => legacy}/cuda/include/hl_cuda_cudnn.ph | 0 .../cuda/include/hl_device_functions.cuh | 0 .../{ => legacy}/cuda/include/hl_functions.h | 0 paddle/{ => legacy}/cuda/include/hl_gpu.h | 0 .../cuda/include/hl_gpu_functions.cuh | 0 .../{ => legacy}/cuda/include/hl_gpu_gru.cuh | 0 .../{ => legacy}/cuda/include/hl_gpu_lstm.cuh | 0 .../cuda/include/hl_gpu_matrix_kernel.cuh | 0 .../{ => legacy}/cuda/include/hl_gru_ops.cuh | 0 paddle/{ => legacy}/cuda/include/hl_lstm.h | 0 .../{ => legacy}/cuda/include/hl_lstm_ops.cuh | 0 paddle/{ => legacy}/cuda/include/hl_matrix.h | 0 .../cuda/include/hl_matrix_apply.cuh | 0 .../cuda/include/hl_matrix_base.cuh | 0 .../cuda/include/hl_matrix_base_detail.cuh | 0 .../cuda/include/hl_matrix_ops.cuh | 0 .../cuda/include/hl_matrix_type.cuh | 0 .../cuda/include/hl_perturbation_util.cuh | 0 .../cuda/include/hl_recurrent_apply.cuh | 0 paddle/{ => legacy}/cuda/include/hl_sequence.h | 0 paddle/{ => legacy}/cuda/include/hl_sparse.h | 0 paddle/{ => legacy}/cuda/include/hl_sparse.ph | 0 .../{ => legacy}/cuda/include/hl_table_apply.h | 0 .../{ => legacy}/cuda/include/hl_tensor_ops.h | 0 paddle/{ => legacy}/cuda/include/hl_thread.ph | 0 paddle/{ => legacy}/cuda/include/hl_time.h | 0 paddle/{ => legacy}/cuda/include/hl_top_k.h | 0 .../cuda/include/hl_warpctc_wrap.h | 0 .../cuda/include/stub/hl_aggregate_stub.h | 0 .../cuda/include/stub/hl_cnn_stub.h | 0 .../cuda/include/stub/hl_cuda_cublas_stub.h | 0 .../cuda/include/stub/hl_cuda_cudnn_stub.h | 0 .../cuda/include/stub/hl_cuda_stub.h | 0 .../cuda/include/stub/hl_lstm_stub.h | 0 .../cuda/include/stub/hl_matrix_stub.h | 0 .../cuda/include/stub/hl_sequence_stub.h | 0 .../cuda/include/stub/hl_sparse_stub.h | 0 paddle/{ => legacy}/cuda/src/avx_mathfun.h | 0 .../{ => legacy}/cuda/src/hl_avx_functions.cc | 0 paddle/{ => legacy}/cuda/src/hl_batch_norm.cu | 0 .../cuda/src/hl_batch_transpose.cu | 0 .../{ => legacy}/cuda/src/hl_cpu_functions.cc | 0 .../{ => legacy}/cuda/src/hl_cuda_aggregate.cu | 0 paddle/{ => legacy}/cuda/src/hl_cuda_cnn.cu | 0 paddle/{ => legacy}/cuda/src/hl_cuda_cublas.cc | 0 paddle/{ => legacy}/cuda/src/hl_cuda_cudnn.cc | 0 paddle/{ => legacy}/cuda/src/hl_cuda_device.cc | 0 paddle/{ => legacy}/cuda/src/hl_cuda_lstm.cu | 0 paddle/{ => legacy}/cuda/src/hl_cuda_matrix.cu | 0 .../{ => legacy}/cuda/src/hl_cuda_sequence.cu | 0 paddle/{ => legacy}/cuda/src/hl_cuda_sparse.cu | 0 .../{ => legacy}/cuda/src/hl_cuda_sparse.cuh | 0 paddle/{ => legacy}/cuda/src/hl_math.cc | 0 .../cuda/src/hl_perturbation_util.cu | 0 paddle/{ => legacy}/cuda/src/hl_table_apply.cu | 0 paddle/{ => legacy}/cuda/src/hl_time.cc | 0 paddle/{ => legacy}/cuda/src/hl_top_k.cu | 6 +++--- .../{ => legacy}/cuda/src/hl_warpctc_wrap.cc | 0 paddle/{ => legacy}/function/BlockExpandOp.cpp | 0 .../function/BlockExpandOpTest.cpp | 0 paddle/{ => legacy}/function/BufferArg.cpp | 2 +- paddle/{ => legacy}/function/BufferArg.h | 2 +- paddle/{ => legacy}/function/BufferArgTest.cpp | 2 +- paddle/{ => legacy}/function/CMakeLists.txt | 0 .../function/ContextProjectionOp.cpp | 4 ++-- .../function/ContextProjectionOp.h | 0 .../function/ContextProjectionOpGpu.cu | 0 .../function/ContextProjectionOpTest.cpp | 2 +- paddle/{ => legacy}/function/ConvOp.h | 0 paddle/{ => legacy}/function/ConvOpTest.h | 0 paddle/{ => legacy}/function/CosSimOp.cpp | 4 ++-- paddle/{ => legacy}/function/CosSimOp.h | 0 paddle/{ => legacy}/function/CosSimOpGpu.cu | 0 paddle/{ => legacy}/function/CosSimOpTest.cpp | 2 +- paddle/{ => legacy}/function/CropOp.cpp | 4 ++-- paddle/{ => legacy}/function/CropOp.h | 0 paddle/{ => legacy}/function/CropOpGpu.cu | 0 paddle/{ => legacy}/function/CropOpTest.cpp | 0 .../{ => legacy}/function/CrossMapNormalOp.cpp | 2 +- .../{ => legacy}/function/CrossMapNormalOp.h | 0 .../function/CrossMapNormalOpGpu.cu | 0 .../function/CrossMapNormalOpTest.cpp | 0 .../{ => legacy}/function/DepthwiseConvOp.cpp | 0 paddle/{ => legacy}/function/DepthwiseConvOp.h | 0 .../function/DepthwiseConvOpGpu.cu | 2 +- .../function/DepthwiseConvOpTest.cpp | 0 paddle/{ => legacy}/function/EigenGemm.cpp | 2 +- .../{ => legacy}/function/EigenThreadDevice.h | 0 paddle/{ => legacy}/function/Function.cpp | 0 paddle/{ => legacy}/function/Function.h | 2 +- paddle/{ => legacy}/function/FunctionTest.cpp | 2 +- paddle/{ => legacy}/function/FunctionTest.h | 6 +++--- paddle/{ => legacy}/function/GemmConvOp.cpp | 2 +- .../{ => legacy}/function/GemmConvOpTest.cpp | 0 paddle/{ => legacy}/function/GemmFunctor.cpp | 2 +- paddle/{ => legacy}/function/GemmFunctor.h | 0 paddle/{ => legacy}/function/GruFunctor.h | 0 paddle/{ => legacy}/function/Im2Col.h | 0 paddle/{ => legacy}/function/Im2ColOp.cpp | 0 paddle/{ => legacy}/function/Im2ColOpGpu.cu | 0 paddle/{ => legacy}/function/Im2ColTest.cpp | 4 ++-- paddle/{ => legacy}/function/MulOp.cpp | 2 +- paddle/{ => legacy}/function/MulOp.h | 4 ++-- paddle/{ => legacy}/function/MulOpGpu.cu | 4 ++-- paddle/{ => legacy}/function/MulOpTest.cpp | 6 +++--- paddle/{ => legacy}/function/NaiveConvOp.cpp | 0 paddle/{ => legacy}/function/PadOp.cpp | 2 +- paddle/{ => legacy}/function/PadOp.h | 0 paddle/{ => legacy}/function/PadOpGpu.cu | 0 paddle/{ => legacy}/function/PadOpTest.cpp | 0 paddle/{ => legacy}/function/RowConvOp.cpp | 2 +- paddle/{ => legacy}/function/RowConvOp.h | 0 paddle/{ => legacy}/function/RowConvOpGpu.cu | 4 ++-- paddle/{ => legacy}/function/RowConvOpTest.cpp | 0 .../{ => legacy}/function/ScaleSubRegionOp.cpp | 2 +- .../{ => legacy}/function/ScaleSubRegionOp.h | 0 .../function/ScaleSubRegionOpGpu.cu | 0 .../function/ScaleSubRegionOpTest.cpp | 0 paddle/{ => legacy}/function/SwitchOp.cpp | 2 +- paddle/{ => legacy}/function/SwitchOp.h | 0 paddle/{ => legacy}/function/SwitchOpGpu.cu | 0 paddle/{ => legacy}/function/SwitchOpTest.cpp | 0 paddle/{ => legacy}/function/TensorShape.h | 0 .../{ => legacy}/function/TensorShapeTest.cpp | 0 paddle/{ => legacy}/function/TensorType.h | 2 +- .../{ => legacy}/function/TensorTypeTest.cpp | 0 .../function/neon/NeonDepthwiseConv.cpp | 2 +- .../function/neon/NeonDepthwiseConv.h | 0 .../neon/NeonDepthwiseConvTranspose.cpp | 2 +- paddle/{ => legacy}/function/neon/neon_util.h | 0 .../function/nnpack/NNPACKConvOp.cpp | 2 +- .../function/nnpack/NNPACKConvOpTest.cpp | 2 +- .../gserver/activations/ActivationFunction.cpp | 2 +- .../gserver/activations/MKLDNNActivation.h | 4 ++-- .../gserver/dataproviders/DataProvider.h | 8 ++++---- .../gserver/evaluators/ChunkEvaluator.cpp | 2 +- paddle/legacy/gserver/evaluators/Evaluator.h | 4 ++-- .../gserver/gradientmachines/GradientMachine.h | 6 +++--- .../gserver/gradientmachines/NeuralNetwork.h | 2 +- paddle/legacy/gserver/layers/AddtoLayer.h | 2 +- paddle/legacy/gserver/layers/AgentLayer.h | 2 +- paddle/legacy/gserver/layers/AverageLayer.h | 2 +- .../gserver/layers/BilinearInterpLayer.h | 2 +- .../legacy/gserver/layers/BlockExpandLayer.h | 2 +- paddle/legacy/gserver/layers/Conv3DLayer.h | 4 ++-- paddle/legacy/gserver/layers/ConvBaseLayer.cpp | 2 +- paddle/legacy/gserver/layers/ConvBaseLayer.h | 2 +- .../legacy/gserver/layers/ConvBaseOperator.cpp | 4 ++-- .../legacy/gserver/layers/ConvBaseOperator.h | 4 ++-- .../legacy/gserver/layers/ConvBaseProjection.h | 2 +- paddle/legacy/gserver/layers/ConvOperator.cpp | 4 ++-- paddle/legacy/gserver/layers/ConvOperator.h | 4 ++-- paddle/legacy/gserver/layers/ConvProjection.h | 2 +- .../legacy/gserver/layers/ConvShiftLayer.cpp | 2 +- .../gserver/layers/ConvTransOperator.cpp | 4 ++-- .../legacy/gserver/layers/ConvTransOperator.h | 4 ++-- .../gserver/layers/ConvTransProjection.h | 2 +- .../gserver/layers/ConvexCombinationLayer.cpp | 2 +- paddle/legacy/gserver/layers/CosSimLayer.h | 2 +- .../gserver/layers/CosSimVecMatLayer.cpp | 2 +- paddle/legacy/gserver/layers/CostLayer.cpp | 2 +- .../gserver/layers/CrossChannelNormLayer.cpp | 4 ++-- .../gserver/layers/CudnnBatchNormLayer.cpp | 2 +- .../legacy/gserver/layers/CudnnConvBaseLayer.h | 2 +- .../legacy/gserver/layers/CudnnPoolLayer.cpp | 2 +- paddle/legacy/gserver/layers/DataNormLayer.h | 2 +- paddle/legacy/gserver/layers/DeConv3DLayer.h | 4 ++-- paddle/legacy/gserver/layers/DetectionUtil.h | 2 +- paddle/legacy/gserver/layers/DotProdLayer.cpp | 2 +- paddle/legacy/gserver/layers/ExpandConvLayer.h | 2 +- paddle/legacy/gserver/layers/ExpandLayer.h | 2 +- .../layers/FactorizationMachineLayer.cpp | 2 +- .../gserver/layers/FactorizationMachineLayer.h | 2 +- .../gserver/layers/FeatureMapExpandLayer.cpp | 2 +- .../gserver/layers/FullyConnectedLayer.cpp | 2 +- .../gserver/layers/FullyConnectedLayer.h | 2 +- .../gserver/layers/GatedRecurrentLayer.h | 2 +- paddle/legacy/gserver/layers/GruCompute.cpp | 2 +- .../gserver/layers/InterpolationLayer.cpp | 2 +- paddle/legacy/gserver/layers/L2DistanceLayer.h | 2 +- paddle/legacy/gserver/layers/Layer.cpp | 2 +- paddle/legacy/gserver/layers/Layer.h | 10 +++++----- paddle/legacy/gserver/layers/LinearChainCRF.h | 2 +- paddle/legacy/gserver/layers/LinearChainCTC.h | 2 +- paddle/legacy/gserver/layers/LstmLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/LstmLayer.h | 4 ++-- paddle/legacy/gserver/layers/MDLstmLayer.cpp | 4 ++-- .../legacy/gserver/layers/MKLDNNConvLayer.cpp | 2 +- paddle/legacy/gserver/layers/MKLDNNLayer.h | 2 +- .../legacy/gserver/layers/MKLDNNPoolLayer.cpp | 2 +- paddle/legacy/gserver/layers/MKLPackedWeight.h | 6 +++--- paddle/legacy/gserver/layers/MaxLayer.h | 2 +- paddle/legacy/gserver/layers/MaxOutLayer.h | 2 +- .../gserver/layers/MaxPoolWithMaskLayer.h | 2 +- .../legacy/gserver/layers/MultiplexLayer.cpp | 2 +- paddle/legacy/gserver/layers/NCELayer.cpp | 2 +- paddle/legacy/gserver/layers/NormLayer.h | 2 +- .../gserver/layers/NormProjectionLayer.h | 2 +- paddle/legacy/gserver/layers/Operator.h | 4 ++-- .../legacy/gserver/layers/OuterProdLayer.cpp | 2 +- .../legacy/gserver/layers/ParameterReluLayer.h | 2 +- paddle/legacy/gserver/layers/Pool3DLayer.h | 4 ++-- paddle/legacy/gserver/layers/PoolLayer.h | 4 ++-- paddle/legacy/gserver/layers/PoolProjection.h | 2 +- .../gserver/layers/PoolProjectionLayer.h | 2 +- paddle/legacy/gserver/layers/PowerLayer.cpp | 2 +- paddle/legacy/gserver/layers/PriorBox.cpp | 4 ++-- paddle/legacy/gserver/layers/Projection.h | 2 +- paddle/legacy/gserver/layers/ResizeLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/RotateLayer.h | 2 +- paddle/legacy/gserver/layers/ScalingLayer.cpp | 2 +- .../layers/SelectiveFullyConnectedLayer.cpp | 2 +- .../layers/SelectiveFullyConnectedLayer.h | 2 +- .../gserver/layers/SequenceConcatLayer.cpp | 2 +- .../layers/SequenceLastInstanceLayer.cpp | 2 +- .../legacy/gserver/layers/SequencePoolLayer.h | 2 +- .../gserver/layers/SequenceReshapeLayer.cpp | 2 +- .../gserver/layers/SequenceSliceLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/SequenceToBatch.h | 4 ++-- .../gserver/layers/SlopeInterceptLayer.cpp | 2 +- .../gserver/layers/SpatialPyramidPoolLayer.h | 2 +- .../gserver/layers/SubNestedSequenceLayer.cpp | 4 ++-- .../legacy/gserver/layers/SubSequenceLayer.cpp | 4 ++-- .../gserver/layers/SumToOneNormLayer.cpp | 2 +- paddle/legacy/gserver/layers/TensorLayer.h | 2 +- paddle/legacy/gserver/layers/TransLayer.h | 2 +- paddle/legacy/gserver/layers/UpsampleLayer.h | 2 +- paddle/legacy/gserver/tests/test_BatchNorm.cpp | 4 ++-- .../gserver/tests/test_CompareSparse.cpp | 2 +- paddle/legacy/gserver/tests/test_ConvTrans.cpp | 2 +- paddle/legacy/gserver/tests/test_ConvUnify.cpp | 2 +- paddle/legacy/gserver/tests/test_LayerGrad.cpp | 2 +- paddle/legacy/gserver/tests/test_MKLDNN.cpp | 2 +- .../tests/test_MaxPoolingWithMaskOutput.cpp | 2 +- .../tests/test_RecurrentGradientMachine.cpp | 2 +- .../gserver/tests/test_SelectiveFCLayer.cpp | 2 +- paddle/legacy/gserver/tests/test_Upsample.cpp | 2 +- paddle/{ => legacy}/math/Allocator.h | 0 paddle/{ => legacy}/math/BaseMatrix.cu | 0 paddle/{ => legacy}/math/BaseMatrix.h | 0 paddle/{ => legacy}/math/CMakeLists.txt | 8 ++++---- paddle/{ => legacy}/math/CpuSparseMatrix.cpp | 2 +- paddle/{ => legacy}/math/CpuSparseMatrix.h | 0 paddle/{ => legacy}/math/ExecViaCpu.h | 0 paddle/{ => legacy}/math/MKLDNNMatrix.cpp | 0 paddle/{ => legacy}/math/MKLDNNMatrix.h | 2 +- paddle/{ => legacy}/math/MathFunctions.cpp | 2 +- paddle/{ => legacy}/math/MathFunctions.h | 0 paddle/{ => legacy}/math/MathUtils.cpp | 0 paddle/{ => legacy}/math/MathUtils.h | 0 paddle/{ => legacy}/math/Matrix.cpp | 2 +- paddle/{ => legacy}/math/Matrix.h | 4 ++-- paddle/{ => legacy}/math/MatrixBitCode.cpp | 0 paddle/{ => legacy}/math/MemoryHandle.cpp | 0 paddle/{ => legacy}/math/MemoryHandle.h | 0 paddle/{ => legacy}/math/NEONFunctions.cpp | 0 paddle/{ => legacy}/math/NEONFunctions.h | 0 paddle/{ => legacy}/math/PoolAllocator.cpp | 0 paddle/{ => legacy}/math/PoolAllocator.h | 0 paddle/{ => legacy}/math/RowBuffer.h | 0 paddle/{ => legacy}/math/SIMDFunctions.cpp | 0 paddle/{ => legacy}/math/SIMDFunctions.h | 0 paddle/{ => legacy}/math/SparseMatrix.cpp | 0 paddle/{ => legacy}/math/SparseMatrix.h | 0 paddle/{ => legacy}/math/SparseRowMatrix.cpp | 0 paddle/{ => legacy}/math/SparseRowMatrix.h | 0 paddle/{ => legacy}/math/Storage.cpp | 0 paddle/{ => legacy}/math/Storage.h | 0 paddle/{ => legacy}/math/TensorApply.h | 0 paddle/{ => legacy}/math/TensorAssign.h | 0 paddle/{ => legacy}/math/TensorEvaluate.h | 0 paddle/{ => legacy}/math/TensorExpression.h | 0 .../{ => legacy}/math/TrainingAlgorithmOp.cu | 0 paddle/{ => legacy}/math/TrainingAlgorithmOp.h | 0 paddle/{ => legacy}/math/Vector.cpp | 0 paddle/{ => legacy}/math/Vector.h | 0 paddle/{ => legacy}/math/tests/CMakeLists.txt | 0 .../math/tests/OriginalOptimizerApi.h | 2 +- paddle/{ => legacy}/math/tests/PerfUtils.h | 0 paddle/{ => legacy}/math/tests/TensorCheck.h | 2 +- paddle/{ => legacy}/math/tests/TestUtils.h | 4 ++-- .../{ => legacy}/math/tests/test_Allocator.cpp | 6 +++--- .../math/tests/test_BaseMatrix.cpp | 2 +- .../math/tests/test_CpuGpuVector.cpp | 2 +- .../math/tests/test_ExecViaCpu.cpp | 2 +- .../math/tests/test_FPException.cpp | 2 +- .../math/tests/test_GpuProfiler.cpp | 4 ++-- paddle/{ => legacy}/math/tests/test_Matrix.cpp | 0 .../{ => legacy}/math/tests/test_RowBuffer.cpp | 2 +- .../math/tests/test_SIMDFunctions.cpp | 2 +- .../math/tests/test_SparseMatrix.cpp | 0 paddle/{ => legacy}/math/tests/test_Tensor.cu | 2 +- .../math/tests/test_TrainingAlgorithm.cpp | 2 +- .../math/tests/test_batchTranspose.cpp | 0 .../{ => legacy}/math/tests/test_lazyAssign.cu | 4 ++-- .../math/tests/test_matrixCompare.cpp | 6 +++--- .../{ => legacy}/math/tests/test_matrixUtil.h | 2 +- .../math/tests/test_perturbation.cpp | 0 .../math/tests/test_sparseMatrixCompare.cpp | 2 +- paddle/{ => legacy}/optimizer/CMakeLists.txt | 0 .../optimizer/adadelta_optimizer.cc | 0 .../optimizer/adadelta_optimizer.h | 0 .../optimizer/adagrad_optimizer.cc | 0 .../{ => legacy}/optimizer/adagrad_optimizer.h | 0 .../{ => legacy}/optimizer/adam_optimizer.cc | 0 paddle/{ => legacy}/optimizer/adam_optimizer.h | 0 paddle/{ => legacy}/optimizer/lr_policy.h | 0 paddle/{ => legacy}/optimizer/optimizer.cc | 0 paddle/{ => legacy}/optimizer/optimizer.h | 0 .../optimizer/parameter_optimizer.cc | 0 .../optimizer/parameter_optimizer.h | 0 .../optimizer/parameter_optimizer_test.cc | 0 paddle/{ => legacy}/optimizer/serialization.h | 0 .../optimizer/serialization_test.cc | 0 paddle/{ => legacy}/optimizer/sgd_optimizer.cc | 0 paddle/{ => legacy}/optimizer/sgd_optimizer.h | 0 paddle/{ => legacy}/optimizer/tensor.h | 0 paddle/{ => legacy}/parameter/Argument.cpp | 2 +- paddle/{ => legacy}/parameter/Argument.h | 6 +++--- .../parameter/AverageOptimizer.cpp | 0 .../{ => legacy}/parameter/AverageOptimizer.h | 0 paddle/{ => legacy}/parameter/CMakeLists.txt | 0 .../parameter/FirstOrderOptimizer.cpp | 2 +- .../parameter/FirstOrderOptimizer.h | 0 .../parameter/LearningRateScheduler.cpp | 0 .../parameter/LearningRateScheduler.h | 0 .../parameter/OptimizerFunctions.cpp | 0 .../parameter/OptimizerFunctions.h | 0 .../parameter/OptimizerWithRegularizer.cpp | 0 .../parameter/OptimizerWithRegularizer.h | 0 paddle/{ => legacy}/parameter/Parameter.cpp | 6 +++--- paddle/{ => legacy}/parameter/Parameter.h | 4 ++-- .../parameter/ParameterOptimizer.cpp | 0 .../parameter/ParameterOptimizer.h | 0 .../parameter/ParameterUpdateFunctions.cpp | 0 .../parameter/ParameterUpdateFunctions.h | 2 +- .../parameter/ParameterUpdaterBase.cpp | 0 .../parameter/ParameterUpdaterBase.h | 0 .../parameter/ParameterUpdaterHook.cpp | 4 ++-- .../parameter/ParameterUpdaterHook.h | 0 paddle/{ => legacy}/parameter/Regularizer.cpp | 0 paddle/{ => legacy}/parameter/Regularizer.h | 0 .../parameter/ThreadLocalBuffer.cpp | 0 .../{ => legacy}/parameter/ThreadLocalBuffer.h | 2 +- paddle/{ => legacy}/parameter/Weight.cpp | 0 paddle/{ => legacy}/parameter/Weight.h | 6 +++--- .../parameter/tests/CMakeLists.txt | 0 .../parameter/tests/test_argument.cpp | 2 +- .../parameter/tests/test_common.cpp | 2 +- paddle/{ => legacy}/pserver/BaseClient.cpp | 0 paddle/{ => legacy}/pserver/BaseClient.h | 4 ++-- paddle/{ => legacy}/pserver/CMakeLists.txt | 0 paddle/{ => legacy}/pserver/LightNetwork.cpp | 0 paddle/{ => legacy}/pserver/LightNetwork.h | 0 .../{ => legacy}/pserver/ParameterClient2.cpp | 2 +- paddle/{ => legacy}/pserver/ParameterClient2.h | 8 ++++---- .../{ => legacy}/pserver/ParameterServer2.cpp | 18 +++++++++--------- paddle/{ => legacy}/pserver/ParameterServer2.h | 8 ++++---- .../pserver/ParameterServer2Main.cpp | 0 .../pserver/ParameterServerController.cpp | 0 .../pserver/ParameterServerController.h | 0 paddle/{ => legacy}/pserver/ProtoServer.cpp | 0 paddle/{ => legacy}/pserver/ProtoServer.h | 0 paddle/{ => legacy}/pserver/RDMANetwork.h | 0 paddle/{ => legacy}/pserver/SocketChannel.cpp | 0 paddle/{ => legacy}/pserver/SocketChannel.h | 0 .../pserver/SparseParameterDistribution.cpp | 0 .../pserver/SparseParameterDistribution.h | 0 paddle/{ => legacy}/pserver/test/.gitignore | 0 .../{ => legacy}/pserver/test/CMakeLists.txt | 0 .../{ => legacy}/pserver/test/SocketTest.cpp | 2 +- .../pserver/test/test_ParameterServer2.cpp | 4 ++-- .../pserver/test/test_ProtoServer.cpp | 4 ++-- .../pserver/test/test_ProtoServer.sh | 2 +- paddle/testing/TestUtil.cpp | 2 +- paddle/testing/TestUtil.h | 2 +- paddle/trainer/MergeModel.cpp | 2 +- paddle/trainer/NewRemoteParameterUpdater.h | 2 +- paddle/trainer/ParameterUpdater.h | 12 ++++++------ paddle/trainer/RemoteParameterUpdater.h | 2 +- paddle/trainer/ThreadParameterUpdater.cpp | 4 ++-- paddle/trainer/ThreadParameterUpdater.h | 12 ++++++------ paddle/trainer/TrainerMain.cpp | 2 +- .../tests/test_PyDataProviderWrapper.cpp | 4 ++-- paddle/trainer/tests/test_TrainerOnePass.cpp | 2 +- python/paddle/v2/inference.py | 2 +- python/setup.py.in | 2 +- tools/codestyle/cpplint_pre_commit.hook | 2 +- 427 files changed, 335 insertions(+), 335 deletions(-) rename paddle/{ => legacy}/cuda/CMakeLists.txt (100%) rename paddle/{ => legacy}/cuda/include/hl_activation_functions.h (100%) rename paddle/{ => legacy}/cuda/include/hl_aggregate.h (100%) rename paddle/{ => legacy}/cuda/include/hl_avx_functions.h (100%) rename paddle/{ => legacy}/cuda/include/hl_base.h (99%) rename paddle/{ => legacy}/cuda/include/hl_batch_norm.h (100%) rename paddle/{ => legacy}/cuda/include/hl_batch_transpose.h (100%) rename paddle/{ => legacy}/cuda/include/hl_cnn.h (100%) rename paddle/{ => legacy}/cuda/include/hl_cpu_gru.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_cpu_lstm.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_cpu_matrix_kernel.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_cpu_matrix_kernel_detail.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_cpu_scalar.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_cpu_simd_neon.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_cpu_simd_sse.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_cuda.h (100%) rename paddle/{ => legacy}/cuda/include/hl_cuda.ph (100%) rename paddle/{ => legacy}/cuda/include/hl_cuda_cublas.h (100%) rename paddle/{ => legacy}/cuda/include/hl_cuda_cudnn.h (100%) rename paddle/{ => legacy}/cuda/include/hl_cuda_cudnn.ph (100%) rename paddle/{ => legacy}/cuda/include/hl_device_functions.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_functions.h (100%) rename paddle/{ => legacy}/cuda/include/hl_gpu.h (100%) rename paddle/{ => legacy}/cuda/include/hl_gpu_functions.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_gpu_gru.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_gpu_lstm.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_gpu_matrix_kernel.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_gru_ops.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_lstm.h (100%) rename paddle/{ => legacy}/cuda/include/hl_lstm_ops.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_matrix.h (100%) rename paddle/{ => legacy}/cuda/include/hl_matrix_apply.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_matrix_base.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_matrix_base_detail.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_matrix_ops.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_matrix_type.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_perturbation_util.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_recurrent_apply.cuh (100%) rename paddle/{ => legacy}/cuda/include/hl_sequence.h (100%) rename paddle/{ => legacy}/cuda/include/hl_sparse.h (100%) rename paddle/{ => legacy}/cuda/include/hl_sparse.ph (100%) rename paddle/{ => legacy}/cuda/include/hl_table_apply.h (100%) rename paddle/{ => legacy}/cuda/include/hl_tensor_ops.h (100%) rename paddle/{ => legacy}/cuda/include/hl_thread.ph (100%) rename paddle/{ => legacy}/cuda/include/hl_time.h (100%) rename paddle/{ => legacy}/cuda/include/hl_top_k.h (100%) rename paddle/{ => legacy}/cuda/include/hl_warpctc_wrap.h (100%) rename paddle/{ => legacy}/cuda/include/stub/hl_aggregate_stub.h (100%) rename paddle/{ => legacy}/cuda/include/stub/hl_cnn_stub.h (100%) rename paddle/{ => legacy}/cuda/include/stub/hl_cuda_cublas_stub.h (100%) rename paddle/{ => legacy}/cuda/include/stub/hl_cuda_cudnn_stub.h (100%) rename paddle/{ => legacy}/cuda/include/stub/hl_cuda_stub.h (100%) rename paddle/{ => legacy}/cuda/include/stub/hl_lstm_stub.h (100%) rename paddle/{ => legacy}/cuda/include/stub/hl_matrix_stub.h (100%) rename paddle/{ => legacy}/cuda/include/stub/hl_sequence_stub.h (100%) rename paddle/{ => legacy}/cuda/include/stub/hl_sparse_stub.h (100%) rename paddle/{ => legacy}/cuda/src/avx_mathfun.h (100%) rename paddle/{ => legacy}/cuda/src/hl_avx_functions.cc (100%) rename paddle/{ => legacy}/cuda/src/hl_batch_norm.cu (100%) rename paddle/{ => legacy}/cuda/src/hl_batch_transpose.cu (100%) rename paddle/{ => legacy}/cuda/src/hl_cpu_functions.cc (100%) rename paddle/{ => legacy}/cuda/src/hl_cuda_aggregate.cu (100%) rename paddle/{ => legacy}/cuda/src/hl_cuda_cnn.cu (100%) rename paddle/{ => legacy}/cuda/src/hl_cuda_cublas.cc (100%) rename paddle/{ => legacy}/cuda/src/hl_cuda_cudnn.cc (100%) rename paddle/{ => legacy}/cuda/src/hl_cuda_device.cc (100%) rename paddle/{ => legacy}/cuda/src/hl_cuda_lstm.cu (100%) rename paddle/{ => legacy}/cuda/src/hl_cuda_matrix.cu (100%) rename paddle/{ => legacy}/cuda/src/hl_cuda_sequence.cu (100%) rename paddle/{ => legacy}/cuda/src/hl_cuda_sparse.cu (100%) rename paddle/{ => legacy}/cuda/src/hl_cuda_sparse.cuh (100%) rename paddle/{ => legacy}/cuda/src/hl_math.cc (100%) rename paddle/{ => legacy}/cuda/src/hl_perturbation_util.cu (100%) rename paddle/{ => legacy}/cuda/src/hl_table_apply.cu (100%) rename paddle/{ => legacy}/cuda/src/hl_time.cc (100%) rename paddle/{ => legacy}/cuda/src/hl_top_k.cu (98%) rename paddle/{ => legacy}/cuda/src/hl_warpctc_wrap.cc (100%) rename paddle/{ => legacy}/function/BlockExpandOp.cpp (100%) rename paddle/{ => legacy}/function/BlockExpandOpTest.cpp (100%) rename paddle/{ => legacy}/function/BufferArg.cpp (97%) rename paddle/{ => legacy}/function/BufferArg.h (99%) rename paddle/{ => legacy}/function/BufferArgTest.cpp (96%) rename paddle/{ => legacy}/function/CMakeLists.txt (100%) rename paddle/{ => legacy}/function/ContextProjectionOp.cpp (99%) rename paddle/{ => legacy}/function/ContextProjectionOp.h (100%) rename paddle/{ => legacy}/function/ContextProjectionOpGpu.cu (100%) rename paddle/{ => legacy}/function/ContextProjectionOpTest.cpp (99%) rename paddle/{ => legacy}/function/ConvOp.h (100%) rename paddle/{ => legacy}/function/ConvOpTest.h (100%) rename paddle/{ => legacy}/function/CosSimOp.cpp (99%) rename paddle/{ => legacy}/function/CosSimOp.h (100%) rename paddle/{ => legacy}/function/CosSimOpGpu.cu (100%) rename paddle/{ => legacy}/function/CosSimOpTest.cpp (98%) rename paddle/{ => legacy}/function/CropOp.cpp (98%) rename paddle/{ => legacy}/function/CropOp.h (100%) rename paddle/{ => legacy}/function/CropOpGpu.cu (100%) rename paddle/{ => legacy}/function/CropOpTest.cpp (100%) rename paddle/{ => legacy}/function/CrossMapNormalOp.cpp (99%) rename paddle/{ => legacy}/function/CrossMapNormalOp.h (100%) rename paddle/{ => legacy}/function/CrossMapNormalOpGpu.cu (100%) rename paddle/{ => legacy}/function/CrossMapNormalOpTest.cpp (100%) rename paddle/{ => legacy}/function/DepthwiseConvOp.cpp (100%) rename paddle/{ => legacy}/function/DepthwiseConvOp.h (100%) rename paddle/{ => legacy}/function/DepthwiseConvOpGpu.cu (99%) rename paddle/{ => legacy}/function/DepthwiseConvOpTest.cpp (100%) rename paddle/{ => legacy}/function/EigenGemm.cpp (98%) rename paddle/{ => legacy}/function/EigenThreadDevice.h (100%) rename paddle/{ => legacy}/function/Function.cpp (100%) rename paddle/{ => legacy}/function/Function.h (99%) rename paddle/{ => legacy}/function/FunctionTest.cpp (99%) rename paddle/{ => legacy}/function/FunctionTest.h (99%) rename paddle/{ => legacy}/function/GemmConvOp.cpp (99%) rename paddle/{ => legacy}/function/GemmConvOpTest.cpp (100%) rename paddle/{ => legacy}/function/GemmFunctor.cpp (98%) rename paddle/{ => legacy}/function/GemmFunctor.h (100%) rename paddle/{ => legacy}/function/GruFunctor.h (100%) rename paddle/{ => legacy}/function/Im2Col.h (100%) rename paddle/{ => legacy}/function/Im2ColOp.cpp (100%) rename paddle/{ => legacy}/function/Im2ColOpGpu.cu (100%) rename paddle/{ => legacy}/function/Im2ColTest.cpp (99%) rename paddle/{ => legacy}/function/MulOp.cpp (99%) rename paddle/{ => legacy}/function/MulOp.h (97%) rename paddle/{ => legacy}/function/MulOpGpu.cu (98%) rename paddle/{ => legacy}/function/MulOpTest.cpp (98%) rename paddle/{ => legacy}/function/NaiveConvOp.cpp (100%) rename paddle/{ => legacy}/function/PadOp.cpp (99%) rename paddle/{ => legacy}/function/PadOp.h (100%) rename paddle/{ => legacy}/function/PadOpGpu.cu (100%) rename paddle/{ => legacy}/function/PadOpTest.cpp (100%) rename paddle/{ => legacy}/function/RowConvOp.cpp (99%) rename paddle/{ => legacy}/function/RowConvOp.h (100%) rename paddle/{ => legacy}/function/RowConvOpGpu.cu (99%) rename paddle/{ => legacy}/function/RowConvOpTest.cpp (100%) rename paddle/{ => legacy}/function/ScaleSubRegionOp.cpp (99%) rename paddle/{ => legacy}/function/ScaleSubRegionOp.h (100%) rename paddle/{ => legacy}/function/ScaleSubRegionOpGpu.cu (100%) rename paddle/{ => legacy}/function/ScaleSubRegionOpTest.cpp (100%) rename paddle/{ => legacy}/function/SwitchOp.cpp (99%) rename paddle/{ => legacy}/function/SwitchOp.h (100%) rename paddle/{ => legacy}/function/SwitchOpGpu.cu (100%) rename paddle/{ => legacy}/function/SwitchOpTest.cpp (100%) rename paddle/{ => legacy}/function/TensorShape.h (100%) rename paddle/{ => legacy}/function/TensorShapeTest.cpp (100%) rename paddle/{ => legacy}/function/TensorType.h (98%) rename paddle/{ => legacy}/function/TensorTypeTest.cpp (100%) rename paddle/{ => legacy}/function/neon/NeonDepthwiseConv.cpp (98%) rename paddle/{ => legacy}/function/neon/NeonDepthwiseConv.h (100%) rename paddle/{ => legacy}/function/neon/NeonDepthwiseConvTranspose.cpp (99%) rename paddle/{ => legacy}/function/neon/neon_util.h (100%) rename paddle/{ => legacy}/function/nnpack/NNPACKConvOp.cpp (99%) rename paddle/{ => legacy}/function/nnpack/NNPACKConvOpTest.cpp (95%) rename paddle/{ => legacy}/math/Allocator.h (100%) rename paddle/{ => legacy}/math/BaseMatrix.cu (100%) rename paddle/{ => legacy}/math/BaseMatrix.h (100%) rename paddle/{ => legacy}/math/CMakeLists.txt (84%) rename paddle/{ => legacy}/math/CpuSparseMatrix.cpp (99%) rename paddle/{ => legacy}/math/CpuSparseMatrix.h (100%) rename paddle/{ => legacy}/math/ExecViaCpu.h (100%) rename paddle/{ => legacy}/math/MKLDNNMatrix.cpp (100%) rename paddle/{ => legacy}/math/MKLDNNMatrix.h (99%) rename paddle/{ => legacy}/math/MathFunctions.cpp (99%) rename paddle/{ => legacy}/math/MathFunctions.h (100%) rename paddle/{ => legacy}/math/MathUtils.cpp (100%) rename paddle/{ => legacy}/math/MathUtils.h (100%) rename paddle/{ => legacy}/math/Matrix.cpp (99%) rename paddle/{ => legacy}/math/Matrix.h (99%) rename paddle/{ => legacy}/math/MatrixBitCode.cpp (100%) rename paddle/{ => legacy}/math/MemoryHandle.cpp (100%) rename paddle/{ => legacy}/math/MemoryHandle.h (100%) rename paddle/{ => legacy}/math/NEONFunctions.cpp (100%) rename paddle/{ => legacy}/math/NEONFunctions.h (100%) rename paddle/{ => legacy}/math/PoolAllocator.cpp (100%) rename paddle/{ => legacy}/math/PoolAllocator.h (100%) rename paddle/{ => legacy}/math/RowBuffer.h (100%) rename paddle/{ => legacy}/math/SIMDFunctions.cpp (100%) rename paddle/{ => legacy}/math/SIMDFunctions.h (100%) rename paddle/{ => legacy}/math/SparseMatrix.cpp (100%) rename paddle/{ => legacy}/math/SparseMatrix.h (100%) rename paddle/{ => legacy}/math/SparseRowMatrix.cpp (100%) rename paddle/{ => legacy}/math/SparseRowMatrix.h (100%) rename paddle/{ => legacy}/math/Storage.cpp (100%) rename paddle/{ => legacy}/math/Storage.h (100%) rename paddle/{ => legacy}/math/TensorApply.h (100%) rename paddle/{ => legacy}/math/TensorAssign.h (100%) rename paddle/{ => legacy}/math/TensorEvaluate.h (100%) rename paddle/{ => legacy}/math/TensorExpression.h (100%) rename paddle/{ => legacy}/math/TrainingAlgorithmOp.cu (100%) rename paddle/{ => legacy}/math/TrainingAlgorithmOp.h (100%) rename paddle/{ => legacy}/math/Vector.cpp (100%) rename paddle/{ => legacy}/math/Vector.h (100%) rename paddle/{ => legacy}/math/tests/CMakeLists.txt (100%) rename paddle/{ => legacy}/math/tests/OriginalOptimizerApi.h (99%) rename paddle/{ => legacy}/math/tests/PerfUtils.h (100%) rename paddle/{ => legacy}/math/tests/TensorCheck.h (99%) rename paddle/{ => legacy}/math/tests/TestUtils.h (98%) rename paddle/{ => legacy}/math/tests/test_Allocator.cpp (96%) rename paddle/{ => legacy}/math/tests/test_BaseMatrix.cpp (99%) rename paddle/{ => legacy}/math/tests/test_CpuGpuVector.cpp (98%) rename paddle/{ => legacy}/math/tests/test_ExecViaCpu.cpp (98%) rename paddle/{ => legacy}/math/tests/test_FPException.cpp (98%) rename paddle/{ => legacy}/math/tests/test_GpuProfiler.cpp (98%) rename paddle/{ => legacy}/math/tests/test_Matrix.cpp (100%) rename paddle/{ => legacy}/math/tests/test_RowBuffer.cpp (98%) rename paddle/{ => legacy}/math/tests/test_SIMDFunctions.cpp (99%) rename paddle/{ => legacy}/math/tests/test_SparseMatrix.cpp (100%) rename paddle/{ => legacy}/math/tests/test_Tensor.cu (99%) rename paddle/{ => legacy}/math/tests/test_TrainingAlgorithm.cpp (99%) rename paddle/{ => legacy}/math/tests/test_batchTranspose.cpp (100%) rename paddle/{ => legacy}/math/tests/test_lazyAssign.cu (97%) rename paddle/{ => legacy}/math/tests/test_matrixCompare.cpp (99%) rename paddle/{ => legacy}/math/tests/test_matrixUtil.h (99%) rename paddle/{ => legacy}/math/tests/test_perturbation.cpp (100%) rename paddle/{ => legacy}/math/tests/test_sparseMatrixCompare.cpp (99%) rename paddle/{ => legacy}/optimizer/CMakeLists.txt (100%) rename paddle/{ => legacy}/optimizer/adadelta_optimizer.cc (100%) rename paddle/{ => legacy}/optimizer/adadelta_optimizer.h (100%) rename paddle/{ => legacy}/optimizer/adagrad_optimizer.cc (100%) rename paddle/{ => legacy}/optimizer/adagrad_optimizer.h (100%) rename paddle/{ => legacy}/optimizer/adam_optimizer.cc (100%) rename paddle/{ => legacy}/optimizer/adam_optimizer.h (100%) rename paddle/{ => legacy}/optimizer/lr_policy.h (100%) rename paddle/{ => legacy}/optimizer/optimizer.cc (100%) rename paddle/{ => legacy}/optimizer/optimizer.h (100%) rename paddle/{ => legacy}/optimizer/parameter_optimizer.cc (100%) rename paddle/{ => legacy}/optimizer/parameter_optimizer.h (100%) rename paddle/{ => legacy}/optimizer/parameter_optimizer_test.cc (100%) rename paddle/{ => legacy}/optimizer/serialization.h (100%) rename paddle/{ => legacy}/optimizer/serialization_test.cc (100%) rename paddle/{ => legacy}/optimizer/sgd_optimizer.cc (100%) rename paddle/{ => legacy}/optimizer/sgd_optimizer.h (100%) rename paddle/{ => legacy}/optimizer/tensor.h (100%) rename paddle/{ => legacy}/parameter/Argument.cpp (99%) rename paddle/{ => legacy}/parameter/Argument.h (98%) rename paddle/{ => legacy}/parameter/AverageOptimizer.cpp (100%) rename paddle/{ => legacy}/parameter/AverageOptimizer.h (100%) rename paddle/{ => legacy}/parameter/CMakeLists.txt (100%) rename paddle/{ => legacy}/parameter/FirstOrderOptimizer.cpp (99%) rename paddle/{ => legacy}/parameter/FirstOrderOptimizer.h (100%) rename paddle/{ => legacy}/parameter/LearningRateScheduler.cpp (100%) rename paddle/{ => legacy}/parameter/LearningRateScheduler.h (100%) rename paddle/{ => legacy}/parameter/OptimizerFunctions.cpp (100%) rename paddle/{ => legacy}/parameter/OptimizerFunctions.h (100%) rename paddle/{ => legacy}/parameter/OptimizerWithRegularizer.cpp (100%) rename paddle/{ => legacy}/parameter/OptimizerWithRegularizer.h (100%) rename paddle/{ => legacy}/parameter/Parameter.cpp (99%) rename paddle/{ => legacy}/parameter/Parameter.h (99%) rename paddle/{ => legacy}/parameter/ParameterOptimizer.cpp (100%) rename paddle/{ => legacy}/parameter/ParameterOptimizer.h (100%) rename paddle/{ => legacy}/parameter/ParameterUpdateFunctions.cpp (100%) rename paddle/{ => legacy}/parameter/ParameterUpdateFunctions.h (97%) rename paddle/{ => legacy}/parameter/ParameterUpdaterBase.cpp (100%) rename paddle/{ => legacy}/parameter/ParameterUpdaterBase.h (100%) rename paddle/{ => legacy}/parameter/ParameterUpdaterHook.cpp (98%) rename paddle/{ => legacy}/parameter/ParameterUpdaterHook.h (100%) rename paddle/{ => legacy}/parameter/Regularizer.cpp (100%) rename paddle/{ => legacy}/parameter/Regularizer.h (100%) rename paddle/{ => legacy}/parameter/ThreadLocalBuffer.cpp (100%) rename paddle/{ => legacy}/parameter/ThreadLocalBuffer.h (94%) rename paddle/{ => legacy}/parameter/Weight.cpp (100%) rename paddle/{ => legacy}/parameter/Weight.h (90%) rename paddle/{ => legacy}/parameter/tests/CMakeLists.txt (100%) rename paddle/{ => legacy}/parameter/tests/test_argument.cpp (97%) rename paddle/{ => legacy}/parameter/tests/test_common.cpp (98%) rename paddle/{ => legacy}/pserver/BaseClient.cpp (100%) rename paddle/{ => legacy}/pserver/BaseClient.h (99%) rename paddle/{ => legacy}/pserver/CMakeLists.txt (100%) rename paddle/{ => legacy}/pserver/LightNetwork.cpp (100%) rename paddle/{ => legacy}/pserver/LightNetwork.h (100%) rename paddle/{ => legacy}/pserver/ParameterClient2.cpp (99%) rename paddle/{ => legacy}/pserver/ParameterClient2.h (99%) rename paddle/{ => legacy}/pserver/ParameterServer2.cpp (99%) rename paddle/{ => legacy}/pserver/ParameterServer2.h (99%) rename paddle/{ => legacy}/pserver/ParameterServer2Main.cpp (100%) rename paddle/{ => legacy}/pserver/ParameterServerController.cpp (100%) rename paddle/{ => legacy}/pserver/ParameterServerController.h (100%) rename paddle/{ => legacy}/pserver/ProtoServer.cpp (100%) rename paddle/{ => legacy}/pserver/ProtoServer.h (100%) rename paddle/{ => legacy}/pserver/RDMANetwork.h (100%) rename paddle/{ => legacy}/pserver/SocketChannel.cpp (100%) rename paddle/{ => legacy}/pserver/SocketChannel.h (100%) rename paddle/{ => legacy}/pserver/SparseParameterDistribution.cpp (100%) rename paddle/{ => legacy}/pserver/SparseParameterDistribution.h (100%) rename paddle/{ => legacy}/pserver/test/.gitignore (100%) rename paddle/{ => legacy}/pserver/test/CMakeLists.txt (100%) rename paddle/{ => legacy}/pserver/test/SocketTest.cpp (99%) rename paddle/{ => legacy}/pserver/test/test_ParameterServer2.cpp (99%) rename paddle/{ => legacy}/pserver/test/test_ProtoServer.cpp (98%) rename paddle/{ => legacy}/pserver/test/test_ProtoServer.sh (94%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4117f07721..6141c7c270 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -178,7 +178,7 @@ include(inference_lib) # add paddle fluid inference libraries include_directories("${PADDLE_SOURCE_DIR}") -include_directories("${PADDLE_SOURCE_DIR}/paddle/cuda/include") +include_directories("${PADDLE_SOURCE_DIR}/paddle/legacy/cuda/include") include_directories("${CMAKE_CURRENT_BINARY_DIR}/proto") include_directories("${CMAKE_CURRENT_BINARY_DIR}/go/pserver/client/c") @@ -222,7 +222,7 @@ add_subdirectory(proto) if(NOT MOBILE_INFERENCE AND NOT WITH_FLUID_ONLY) # "add_subdirectory(go)" should be placed after the following loine, # because it depends on paddle/optimizer. - add_subdirectory(paddle/optimizer) + add_subdirectory(paddle/legacy/optimizer) endif() # "add_subdirectory(paddle)" and "add_subdirectory(python)" should be diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b1b02bcc2f..b878f37a5b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -159,4 +159,4 @@ This will enable VLOG messages generated by `buddy_allocator.{h,cc}` and in the - verbose level 1: [framework](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/framework) - verbose level 3: [operators](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/operators) - verbose level 5: [memory](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/memory), [platform](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/platform) -- verbose level 7: [math](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/math) +- verbose level 7: [math](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/legacy/math) diff --git a/doc/v2/design/interface/00.why_plain_c.md b/doc/v2/design/interface/00.why_plain_c.md index a144309334..826ff3141b 100644 --- a/doc/v2/design/interface/00.why_plain_c.md +++ b/doc/v2/design/interface/00.why_plain_c.md @@ -65,7 +65,7 @@ paddle_error paddle_matrix_get_shape(paddle_matrix matrix, 而在CPP里面实现这个C的接口,文件 `paddle_matrix.cpp` ```cpp -#include "paddle/math/matrix.h" +#include "paddle/legacy/math/matrix.h" extern "C" paddle_error paddle_matrix_shape(paddle_matrix matrix, uint64_t *width, diff --git a/doc/v2/dev/new_layer_cn.rst b/doc/v2/dev/new_layer_cn.rst index 49db2160dc..e5a1434612 100644 --- a/doc/v2/dev/new_layer_cn.rst +++ b/doc/v2/dev/new_layer_cn.rst @@ -153,7 +153,7 @@ PaddlePaddle的base layer类可以自动计算上面的导数。 - 每个层在其 :code:`forward` 函数的开头必须调用 :code:`Layer::forward(passType);` 。 - 之后使用 :code:`reserveOutput(batchSize, size);` 为输出分配内存。由于我们支持训练数据有不同的批次大小,所以这一步是必要的。 :code:`reserveOutput` 会相应地改变输出的尺寸。为了保证效率,如果需要扩大矩阵,我们会重新分配内存;如果需要缩减矩阵,我们会继续使用现有的内存块。 -- 之后使用矩阵运算函数来计算 :math:`\sum_i W_i x + b`。:code:`getInput(i).value` 返回第i个输入矩阵。每个输入都是一个 :math:`batchSize \times dim` 的矩阵,每行表示一个批次中的单个输入。对于我们支持的全部矩阵操作,请参考 :code:`paddle/math/Matrix.h`和:code:`paddle/math/BaseMatrix.h` 。 +- 之后使用矩阵运算函数来计算 :math:`\sum_i W_i x + b`。:code:`getInput(i).value` 返回第i个输入矩阵。每个输入都是一个 :math:`batchSize \times dim` 的矩阵,每行表示一个批次中的单个输入。对于我们支持的全部矩阵操作,请参考 :code:`paddle/legacy/math/Matrix.h`和:code:`paddle/legacy/math/BaseMatrix.h` 。 - 最终,使用 :code:`forwardActivation();` 进行激活操作。这会自动进行网络配置中声明的激活操作。 diff --git a/doc/v2/dev/new_layer_en.rst b/doc/v2/dev/new_layer_en.rst index 8ac381699e..6a848a020d 100644 --- a/doc/v2/dev/new_layer_en.rst +++ b/doc/v2/dev/new_layer_en.rst @@ -154,7 +154,7 @@ The implementation of the forward part has the following steps. - Every layer must call :code:`Layer::forward(passType);` at the beginning of its :code:`forward` function. - Then it allocates memory for the output using :code:`reserveOutput(batchSize, size);`. This step is necessary because we support the batches to have different batch sizes. :code:`reserveOutput` will change the size of the output accordingly. For the sake of efficiency, we will allocate new memory if we want to expand the matrix, but we will reuse the existing memory block if we want to shrink the matrix. -- Then it computes :math:`\sum_i W_i x + b` using Matrix operations. :code:`getInput(i).value` retrieve the matrix of the i-th input. Each input is a :math:`batchSize \times dim` matrix, where each row represents an single input in a batch. For a complete lists of supported matrix operations, please refer to :code:`paddle/math/Matrix.h` and :code:`paddle/math/BaseMatrix.h`. +- Then it computes :math:`\sum_i W_i x + b` using Matrix operations. :code:`getInput(i).value` retrieve the matrix of the i-th input. Each input is a :math:`batchSize \times dim` matrix, where each row represents an single input in a batch. For a complete lists of supported matrix operations, please refer to :code:`paddle/legacy/math/Matrix.h` and :code:`paddle/legacy/math/BaseMatrix.h`. - Finally it applies the activation function using :code:`forwardActivation();`. It will automatically applies the corresponding activation function specifies in the network configuration. diff --git a/doc/v2/howto/optimization/gpu_profiling_cn.rst b/doc/v2/howto/optimization/gpu_profiling_cn.rst index 25bcaccb69..f2396716bd 100644 --- a/doc/v2/howto/optimization/gpu_profiling_cn.rst +++ b/doc/v2/howto/optimization/gpu_profiling_cn.rst @@ -50,12 +50,12 @@ GPU则还需要高并行性,才能发挥其全部能力。这正是它们速 **nvprof** 是Nvidia性能分析工具, **nvvp** 则是带GUI的Nvidia可视化性能分析工具。 在这个教程中,我们主要会介绍nvprof和nvvp。 -:code:`test_GpuProfiler` from :code:`paddle/math/tests` directory will be used to evaluate +:code:`test_GpuProfiler` from :code:`paddle/legacy/math/tests` directory will be used to evaluate above profilers. -:code:`paddle/math/test` 目录中的 :code:`test_GpuProfiler` 就是用于展示上述分析工具的用法。 +:code:`paddle/legacy/math/test` 目录中的 :code:`test_GpuProfiler` 就是用于展示上述分析工具的用法。 -.. literalinclude:: ../../../../paddle/math/tests/test_GpuProfiler.cpp +.. literalinclude:: ../../../../paddle/legacy/math/tests/test_GpuProfiler.cpp :language: c++ :lines: 137-151 :linenos: @@ -83,7 +83,7 @@ program crashes when CPU version of PaddlePaddle invokes them. 1. 加入 :code:`REGISTER_TIMER_INFO` 和 :code:`printAllStatus` 函数(如高亮部分)。 - .. literalinclude:: ../../../../paddle/math/tests/test_GpuProfiler.cpp + .. literalinclude:: ../../../../paddle/legacy/math/tests/test_GpuProfiler.cpp :language: c++ :lines: 137-151 :emphasize-lines: 8-12,14 @@ -101,8 +101,8 @@ program crashes when CPU version of PaddlePaddle invokes them. .. code-block:: bash :emphasize-lines: 1,12-15 - > ./paddle/math/tests/test_GpuProfiler - I1117 11:13:42.313065 2522362816 Util.cpp:155] commandline: ./paddle/math/tests/test_GpuProfiler + > ./paddle/legacy/math/tests/test_GpuProfiler + I1117 11:13:42.313065 2522362816 Util.cpp:155] commandline: ./paddle/legacy/math/tests/test_GpuProfiler I1117 11:13:42.845065 2522362816 Util.cpp:130] Calling runInitFunctions I1117 11:13:42.845208 2522362816 Util.cpp:143] Call runInitFunctions done. [==========] Running 1 test from 1 test case. @@ -130,7 +130,7 @@ nvprof 工具 1. 将 :code:`REGISTER_GPU_PROFILER` 函数加到代码中(参考强调部分)。 - .. literalinclude:: ../../../../paddle/math/tests/test_GpuProfiler.cpp + .. literalinclude:: ../../../../paddle/legacy/math/tests/test_GpuProfiler.cpp :language: c++ :lines: 137-151 :emphasize-lines: 6-7 @@ -147,13 +147,13 @@ nvprof 工具 .. code-block:: bash - nvprof ./paddle/math/tests/test_GpuProfiler + nvprof ./paddle/legacy/math/tests/test_GpuProfiler 然后,您就能获得如下的分析结果: .. code-block:: bash - ==78544== Profiling application: ./paddle/math/tests/test_GpuProfiler + ==78544== Profiling application: ./paddle/legacy/math/tests/test_GpuProfiler ==78544== Profiling result: Time(%) Time Calls Avg Min Max Name 27.60% 9.6305ms 5 1.9261ms 3.4560us 6.4035ms [CUDA memcpy HtoD] diff --git a/doc/v2/howto/optimization/gpu_profiling_en.rst b/doc/v2/howto/optimization/gpu_profiling_en.rst index 50adb7da24..6e439be9bb 100644 --- a/doc/v2/howto/optimization/gpu_profiling_en.rst +++ b/doc/v2/howto/optimization/gpu_profiling_en.rst @@ -51,10 +51,10 @@ For general GPU profiling, a bunch of tools are provided from both NVIDIA and th **nvprof** is Nvidia profiler and **nvvp** is (GUI based) Nvidia visual profiler. In this tutorial, we will focus on nvprof and nvvp. -:code:`test_GpuProfiler` from :code:`paddle/math/tests` directory will be used to evaluate +:code:`test_GpuProfiler` from :code:`paddle/legacy/math/tests` directory will be used to evaluate above profilers. -.. literalinclude:: ../../../../paddle/math/tests/test_GpuProfiler.cpp +.. literalinclude:: ../../../../paddle/legacy/math/tests/test_GpuProfiler.cpp :language: c++ :lines: 137-151 :linenos: @@ -80,7 +80,7 @@ As a simple example, consider the following: 1. Add :code:`REGISTER_TIMER_INFO` and :code:`printAllStatus` functions (see the emphasize-lines). - .. literalinclude:: ../../../../paddle/math/tests/test_GpuProfiler.cpp + .. literalinclude:: ../../../../paddle/legacy/math/tests/test_GpuProfiler.cpp :language: c++ :lines: 137-151 :emphasize-lines: 8-12,14 @@ -98,8 +98,8 @@ As a simple example, consider the following: .. code-block:: bash :emphasize-lines: 1,12-15 - > ./paddle/math/tests/test_GpuProfiler - I1117 11:13:42.313065 2522362816 Util.cpp:155] commandline: ./paddle/math/tests/test_GpuProfiler + > ./paddle/legacy/math/tests/test_GpuProfiler + I1117 11:13:42.313065 2522362816 Util.cpp:155] commandline: ./paddle/legacy/math/tests/test_GpuProfiler I1117 11:13:42.845065 2522362816 Util.cpp:130] Calling runInitFunctions I1117 11:13:42.845208 2522362816 Util.cpp:143] Call runInitFunctions done. [==========] Running 1 test from 1 test case. @@ -127,7 +127,7 @@ To use this command line profiler **nvprof**, you can simply issue the following 1. Add :code:`REGISTER_GPU_PROFILER` function (see the emphasize-lines). - .. literalinclude:: ../../../../paddle/math/tests/test_GpuProfiler.cpp + .. literalinclude:: ../../../../paddle/legacy/math/tests/test_GpuProfiler.cpp :language: c++ :lines: 137-151 :emphasize-lines: 6-7 @@ -144,13 +144,13 @@ To use this command line profiler **nvprof**, you can simply issue the following .. code-block:: bash - nvprof ./paddle/math/tests/test_GpuProfiler + nvprof ./paddle/legacy/math/tests/test_GpuProfiler Then, you can get the following profiling result: .. code-block:: bash - ==78544== Profiling application: ./paddle/math/tests/test_GpuProfiler + ==78544== Profiling application: ./paddle/legacy/math/tests/test_GpuProfiler ==78544== Profiling result: Time(%) Time Calls Avg Min Max Name 27.60% 9.6305ms 5 1.9261ms 3.4560us 6.4035ms [CUDA memcpy HtoD] diff --git a/go/pserver/optimizer.go b/go/pserver/optimizer.go index f17577997b..eba0c47e19 100644 --- a/go/pserver/optimizer.go +++ b/go/pserver/optimizer.go @@ -16,7 +16,7 @@ package pserver // #cgo CFLAGS: -I ../../ // #cgo LDFLAGS: ${SRCDIR}/client/c/libpaddle_go_optimizer.a -lstdc++ -lm -// #include "paddle/optimizer/optimizer.h" +// #include "paddle/legacy/optimizer/optimizer.h" // #include // #include import "C" diff --git a/paddle/CMakeLists.txt b/paddle/CMakeLists.txt index fb90b9febd..efa59fc4a5 100644 --- a/paddle/CMakeLists.txt +++ b/paddle/CMakeLists.txt @@ -1,15 +1,15 @@ if(NOT WITH_FLUID_ONLY) - add_subdirectory(cuda) - add_subdirectory(function) + add_subdirectory(legacy/cuda) + add_subdirectory(legacy/function) add_subdirectory(utils) - add_subdirectory(math) + add_subdirectory(legacy/math) add_subdirectory(legacy/gserver) - add_subdirectory(parameter) + add_subdirectory(legacy/parameter) if(MOBILE_INFERENCE) add_subdirectory(capi) else() - add_subdirectory(pserver) + add_subdirectory(legacy/pserver) add_subdirectory(trainer) add_subdirectory(scripts) diff --git a/paddle/api/Arguments.cpp b/paddle/api/Arguments.cpp index 62d6a574d5..7bb5a6f75b 100644 --- a/paddle/api/Arguments.cpp +++ b/paddle/api/Arguments.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "PaddleAPI.h" #include "PaddleAPIPrivate.h" -#include "paddle/parameter/Argument.h" +#include "paddle/legacy/parameter/Argument.h" size_t Arguments::getSlotNum() const { return m->outputs.size(); } diff --git a/paddle/api/Matrix.cpp b/paddle/api/Matrix.cpp index 8282b4629d..8862d0ea92 100644 --- a/paddle/api/Matrix.cpp +++ b/paddle/api/Matrix.cpp @@ -12,12 +12,12 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include #include #include "PaddleAPI.h" -#include "paddle/math/CpuSparseMatrix.h" -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/CpuSparseMatrix.h" +#include "paddle/legacy/math/SparseMatrix.h" struct MatrixPrivate { std::shared_ptr mat; diff --git a/paddle/api/PaddleAPIPrivate.h b/paddle/api/PaddleAPIPrivate.h index 330ca1a5f2..2e1c504d2e 100644 --- a/paddle/api/PaddleAPIPrivate.h +++ b/paddle/api/PaddleAPIPrivate.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "PaddleAPI.h" #include "paddle/legacy/gserver/evaluators/Evaluator.h" #include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" -#include "paddle/parameter/ParameterUpdaterBase.h" +#include "paddle/legacy/parameter/ParameterUpdaterBase.h" #include "paddle/trainer/TrainerConfigHelper.h" struct GradientMachinePrivate { diff --git a/paddle/api/Parameter.cpp b/paddle/api/Parameter.cpp index 589d22e74e..f05740eb75 100644 --- a/paddle/api/Parameter.cpp +++ b/paddle/api/Parameter.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/parameter/Parameter.h" +#include "paddle/legacy/parameter/Parameter.h" #include "PaddleAPI.h" #include "PaddleAPIPrivate.h" diff --git a/paddle/api/ParameterOptimizer.cpp b/paddle/api/ParameterOptimizer.cpp index d4620be3e6..477d9dae44 100644 --- a/paddle/api/ParameterOptimizer.cpp +++ b/paddle/api/ParameterOptimizer.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/parameter/ParameterOptimizer.h" +#include "paddle/legacy/parameter/ParameterOptimizer.h" #include #include "Internal.h" #include "PaddleAPI.h" diff --git a/paddle/api/SequenceGenerator.cpp b/paddle/api/SequenceGenerator.cpp index 187faaf28c..96e075df50 100644 --- a/paddle/api/SequenceGenerator.cpp +++ b/paddle/api/SequenceGenerator.cpp @@ -18,7 +18,7 @@ limitations under the License. */ #include #include "PaddleAPI.h" #include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" -#include "paddle/parameter/Argument.h" +#include "paddle/legacy/parameter/Argument.h" #include "paddle/utils/Flags.h" // used to represent partial sequence diff --git a/paddle/api/Util.cpp b/paddle/api/Util.cpp index 618e87e964..d98daadbde 100644 --- a/paddle/api/Util.cpp +++ b/paddle/api/Util.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "PaddleAPI.h" -#include "paddle/parameter/Parameter.h" +#include "paddle/legacy/parameter/Parameter.h" #include "paddle/utils/Common.h" #include "paddle/utils/Flags.h" #include "paddle/utils/PythonUtil.h" diff --git a/paddle/api/Vector.cpp b/paddle/api/Vector.cpp index e2a7b974ca..73b6d3a15d 100644 --- a/paddle/api/Vector.cpp +++ b/paddle/api/Vector.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "PaddleAPI.h" -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Vector.h" #include diff --git a/paddle/capi/capi_private.h b/paddle/capi/capi_private.h index f9a55a92d9..e5f8c8c5c8 100644 --- a/paddle/capi/capi_private.h +++ b/paddle/capi/capi_private.h @@ -14,9 +14,9 @@ limitations under the License. */ #include "capi.h" #include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/Vector.h" -#include "paddle/parameter/Argument.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/Vector.h" +#include "paddle/legacy/parameter/Argument.h" #pragma once namespace paddle { diff --git a/paddle/fluid/inference/analysis/README.md b/paddle/fluid/inference/analysis/README.md index 4c5de189cd..6fd73958bc 100644 --- a/paddle/fluid/inference/analysis/README.md +++ b/paddle/fluid/inference/analysis/README.md @@ -51,7 +51,7 @@ It can be used as a helper class that draws the modified graph after each pass. ## Utilities -There is some helper function/class for analysis. +There is some helper legacy/function/class for analysis. - [dot.h](./dot.h) give a easy to use interface for generating `DOT` codes, - [graph_traits.h](./graph_traits.h) contains the graph traversal algorithms, it uses `iterator` to make the algorithms easy to share across different passes. diff --git a/paddle/fluid/operators/math/detail/avx_functions.cc b/paddle/fluid/operators/math/detail/avx_functions.cc index b95109d3f7..5641f91452 100644 --- a/paddle/fluid/operators/math/detail/avx_functions.cc +++ b/paddle/fluid/operators/math/detail/avx_functions.cc @@ -17,7 +17,7 @@ limitations under the License. */ #include #include "paddle/fluid/operators/math/detail/activation_functions.h" // TODO(qingqing) refine this dependence -#include "paddle/cuda/src/avx_mathfun.h" +#include "paddle/legacy/cuda/src/avx_mathfun.h" namespace paddle { namespace operators { diff --git a/paddle/cuda/CMakeLists.txt b/paddle/legacy/cuda/CMakeLists.txt similarity index 100% rename from paddle/cuda/CMakeLists.txt rename to paddle/legacy/cuda/CMakeLists.txt diff --git a/paddle/cuda/include/hl_activation_functions.h b/paddle/legacy/cuda/include/hl_activation_functions.h similarity index 100% rename from paddle/cuda/include/hl_activation_functions.h rename to paddle/legacy/cuda/include/hl_activation_functions.h diff --git a/paddle/cuda/include/hl_aggregate.h b/paddle/legacy/cuda/include/hl_aggregate.h similarity index 100% rename from paddle/cuda/include/hl_aggregate.h rename to paddle/legacy/cuda/include/hl_aggregate.h diff --git a/paddle/cuda/include/hl_avx_functions.h b/paddle/legacy/cuda/include/hl_avx_functions.h similarity index 100% rename from paddle/cuda/include/hl_avx_functions.h rename to paddle/legacy/cuda/include/hl_avx_functions.h diff --git a/paddle/cuda/include/hl_base.h b/paddle/legacy/cuda/include/hl_base.h similarity index 99% rename from paddle/cuda/include/hl_base.h rename to paddle/legacy/cuda/include/hl_base.h index 77f5d82dbe..8451d2546d 100644 --- a/paddle/cuda/include/hl_base.h +++ b/paddle/legacy/cuda/include/hl_base.h @@ -207,7 +207,7 @@ typedef struct { #ifdef __NVCC__ #include -#include "paddle/cuda/include/hl_cuda.h" +#include "paddle/legacy/cuda/include/hl_cuda.h" #include "paddle/utils/Logging.h" extern __thread bool g_sync_flag; diff --git a/paddle/cuda/include/hl_batch_norm.h b/paddle/legacy/cuda/include/hl_batch_norm.h similarity index 100% rename from paddle/cuda/include/hl_batch_norm.h rename to paddle/legacy/cuda/include/hl_batch_norm.h diff --git a/paddle/cuda/include/hl_batch_transpose.h b/paddle/legacy/cuda/include/hl_batch_transpose.h similarity index 100% rename from paddle/cuda/include/hl_batch_transpose.h rename to paddle/legacy/cuda/include/hl_batch_transpose.h diff --git a/paddle/cuda/include/hl_cnn.h b/paddle/legacy/cuda/include/hl_cnn.h similarity index 100% rename from paddle/cuda/include/hl_cnn.h rename to paddle/legacy/cuda/include/hl_cnn.h diff --git a/paddle/cuda/include/hl_cpu_gru.cuh b/paddle/legacy/cuda/include/hl_cpu_gru.cuh similarity index 100% rename from paddle/cuda/include/hl_cpu_gru.cuh rename to paddle/legacy/cuda/include/hl_cpu_gru.cuh diff --git a/paddle/cuda/include/hl_cpu_lstm.cuh b/paddle/legacy/cuda/include/hl_cpu_lstm.cuh similarity index 100% rename from paddle/cuda/include/hl_cpu_lstm.cuh rename to paddle/legacy/cuda/include/hl_cpu_lstm.cuh diff --git a/paddle/cuda/include/hl_cpu_matrix_kernel.cuh b/paddle/legacy/cuda/include/hl_cpu_matrix_kernel.cuh similarity index 100% rename from paddle/cuda/include/hl_cpu_matrix_kernel.cuh rename to paddle/legacy/cuda/include/hl_cpu_matrix_kernel.cuh diff --git a/paddle/cuda/include/hl_cpu_matrix_kernel_detail.cuh b/paddle/legacy/cuda/include/hl_cpu_matrix_kernel_detail.cuh similarity index 100% rename from paddle/cuda/include/hl_cpu_matrix_kernel_detail.cuh rename to paddle/legacy/cuda/include/hl_cpu_matrix_kernel_detail.cuh diff --git a/paddle/cuda/include/hl_cpu_scalar.cuh b/paddle/legacy/cuda/include/hl_cpu_scalar.cuh similarity index 100% rename from paddle/cuda/include/hl_cpu_scalar.cuh rename to paddle/legacy/cuda/include/hl_cpu_scalar.cuh diff --git a/paddle/cuda/include/hl_cpu_simd_neon.cuh b/paddle/legacy/cuda/include/hl_cpu_simd_neon.cuh similarity index 100% rename from paddle/cuda/include/hl_cpu_simd_neon.cuh rename to paddle/legacy/cuda/include/hl_cpu_simd_neon.cuh diff --git a/paddle/cuda/include/hl_cpu_simd_sse.cuh b/paddle/legacy/cuda/include/hl_cpu_simd_sse.cuh similarity index 100% rename from paddle/cuda/include/hl_cpu_simd_sse.cuh rename to paddle/legacy/cuda/include/hl_cpu_simd_sse.cuh diff --git a/paddle/cuda/include/hl_cuda.h b/paddle/legacy/cuda/include/hl_cuda.h similarity index 100% rename from paddle/cuda/include/hl_cuda.h rename to paddle/legacy/cuda/include/hl_cuda.h diff --git a/paddle/cuda/include/hl_cuda.ph b/paddle/legacy/cuda/include/hl_cuda.ph similarity index 100% rename from paddle/cuda/include/hl_cuda.ph rename to paddle/legacy/cuda/include/hl_cuda.ph diff --git a/paddle/cuda/include/hl_cuda_cublas.h b/paddle/legacy/cuda/include/hl_cuda_cublas.h similarity index 100% rename from paddle/cuda/include/hl_cuda_cublas.h rename to paddle/legacy/cuda/include/hl_cuda_cublas.h diff --git a/paddle/cuda/include/hl_cuda_cudnn.h b/paddle/legacy/cuda/include/hl_cuda_cudnn.h similarity index 100% rename from paddle/cuda/include/hl_cuda_cudnn.h rename to paddle/legacy/cuda/include/hl_cuda_cudnn.h diff --git a/paddle/cuda/include/hl_cuda_cudnn.ph b/paddle/legacy/cuda/include/hl_cuda_cudnn.ph similarity index 100% rename from paddle/cuda/include/hl_cuda_cudnn.ph rename to paddle/legacy/cuda/include/hl_cuda_cudnn.ph diff --git a/paddle/cuda/include/hl_device_functions.cuh b/paddle/legacy/cuda/include/hl_device_functions.cuh similarity index 100% rename from paddle/cuda/include/hl_device_functions.cuh rename to paddle/legacy/cuda/include/hl_device_functions.cuh diff --git a/paddle/cuda/include/hl_functions.h b/paddle/legacy/cuda/include/hl_functions.h similarity index 100% rename from paddle/cuda/include/hl_functions.h rename to paddle/legacy/cuda/include/hl_functions.h diff --git a/paddle/cuda/include/hl_gpu.h b/paddle/legacy/cuda/include/hl_gpu.h similarity index 100% rename from paddle/cuda/include/hl_gpu.h rename to paddle/legacy/cuda/include/hl_gpu.h diff --git a/paddle/cuda/include/hl_gpu_functions.cuh b/paddle/legacy/cuda/include/hl_gpu_functions.cuh similarity index 100% rename from paddle/cuda/include/hl_gpu_functions.cuh rename to paddle/legacy/cuda/include/hl_gpu_functions.cuh diff --git a/paddle/cuda/include/hl_gpu_gru.cuh b/paddle/legacy/cuda/include/hl_gpu_gru.cuh similarity index 100% rename from paddle/cuda/include/hl_gpu_gru.cuh rename to paddle/legacy/cuda/include/hl_gpu_gru.cuh diff --git a/paddle/cuda/include/hl_gpu_lstm.cuh b/paddle/legacy/cuda/include/hl_gpu_lstm.cuh similarity index 100% rename from paddle/cuda/include/hl_gpu_lstm.cuh rename to paddle/legacy/cuda/include/hl_gpu_lstm.cuh diff --git a/paddle/cuda/include/hl_gpu_matrix_kernel.cuh b/paddle/legacy/cuda/include/hl_gpu_matrix_kernel.cuh similarity index 100% rename from paddle/cuda/include/hl_gpu_matrix_kernel.cuh rename to paddle/legacy/cuda/include/hl_gpu_matrix_kernel.cuh diff --git a/paddle/cuda/include/hl_gru_ops.cuh b/paddle/legacy/cuda/include/hl_gru_ops.cuh similarity index 100% rename from paddle/cuda/include/hl_gru_ops.cuh rename to paddle/legacy/cuda/include/hl_gru_ops.cuh diff --git a/paddle/cuda/include/hl_lstm.h b/paddle/legacy/cuda/include/hl_lstm.h similarity index 100% rename from paddle/cuda/include/hl_lstm.h rename to paddle/legacy/cuda/include/hl_lstm.h diff --git a/paddle/cuda/include/hl_lstm_ops.cuh b/paddle/legacy/cuda/include/hl_lstm_ops.cuh similarity index 100% rename from paddle/cuda/include/hl_lstm_ops.cuh rename to paddle/legacy/cuda/include/hl_lstm_ops.cuh diff --git a/paddle/cuda/include/hl_matrix.h b/paddle/legacy/cuda/include/hl_matrix.h similarity index 100% rename from paddle/cuda/include/hl_matrix.h rename to paddle/legacy/cuda/include/hl_matrix.h diff --git a/paddle/cuda/include/hl_matrix_apply.cuh b/paddle/legacy/cuda/include/hl_matrix_apply.cuh similarity index 100% rename from paddle/cuda/include/hl_matrix_apply.cuh rename to paddle/legacy/cuda/include/hl_matrix_apply.cuh diff --git a/paddle/cuda/include/hl_matrix_base.cuh b/paddle/legacy/cuda/include/hl_matrix_base.cuh similarity index 100% rename from paddle/cuda/include/hl_matrix_base.cuh rename to paddle/legacy/cuda/include/hl_matrix_base.cuh diff --git a/paddle/cuda/include/hl_matrix_base_detail.cuh b/paddle/legacy/cuda/include/hl_matrix_base_detail.cuh similarity index 100% rename from paddle/cuda/include/hl_matrix_base_detail.cuh rename to paddle/legacy/cuda/include/hl_matrix_base_detail.cuh diff --git a/paddle/cuda/include/hl_matrix_ops.cuh b/paddle/legacy/cuda/include/hl_matrix_ops.cuh similarity index 100% rename from paddle/cuda/include/hl_matrix_ops.cuh rename to paddle/legacy/cuda/include/hl_matrix_ops.cuh diff --git a/paddle/cuda/include/hl_matrix_type.cuh b/paddle/legacy/cuda/include/hl_matrix_type.cuh similarity index 100% rename from paddle/cuda/include/hl_matrix_type.cuh rename to paddle/legacy/cuda/include/hl_matrix_type.cuh diff --git a/paddle/cuda/include/hl_perturbation_util.cuh b/paddle/legacy/cuda/include/hl_perturbation_util.cuh similarity index 100% rename from paddle/cuda/include/hl_perturbation_util.cuh rename to paddle/legacy/cuda/include/hl_perturbation_util.cuh diff --git a/paddle/cuda/include/hl_recurrent_apply.cuh b/paddle/legacy/cuda/include/hl_recurrent_apply.cuh similarity index 100% rename from paddle/cuda/include/hl_recurrent_apply.cuh rename to paddle/legacy/cuda/include/hl_recurrent_apply.cuh diff --git a/paddle/cuda/include/hl_sequence.h b/paddle/legacy/cuda/include/hl_sequence.h similarity index 100% rename from paddle/cuda/include/hl_sequence.h rename to paddle/legacy/cuda/include/hl_sequence.h diff --git a/paddle/cuda/include/hl_sparse.h b/paddle/legacy/cuda/include/hl_sparse.h similarity index 100% rename from paddle/cuda/include/hl_sparse.h rename to paddle/legacy/cuda/include/hl_sparse.h diff --git a/paddle/cuda/include/hl_sparse.ph b/paddle/legacy/cuda/include/hl_sparse.ph similarity index 100% rename from paddle/cuda/include/hl_sparse.ph rename to paddle/legacy/cuda/include/hl_sparse.ph diff --git a/paddle/cuda/include/hl_table_apply.h b/paddle/legacy/cuda/include/hl_table_apply.h similarity index 100% rename from paddle/cuda/include/hl_table_apply.h rename to paddle/legacy/cuda/include/hl_table_apply.h diff --git a/paddle/cuda/include/hl_tensor_ops.h b/paddle/legacy/cuda/include/hl_tensor_ops.h similarity index 100% rename from paddle/cuda/include/hl_tensor_ops.h rename to paddle/legacy/cuda/include/hl_tensor_ops.h diff --git a/paddle/cuda/include/hl_thread.ph b/paddle/legacy/cuda/include/hl_thread.ph similarity index 100% rename from paddle/cuda/include/hl_thread.ph rename to paddle/legacy/cuda/include/hl_thread.ph diff --git a/paddle/cuda/include/hl_time.h b/paddle/legacy/cuda/include/hl_time.h similarity index 100% rename from paddle/cuda/include/hl_time.h rename to paddle/legacy/cuda/include/hl_time.h diff --git a/paddle/cuda/include/hl_top_k.h b/paddle/legacy/cuda/include/hl_top_k.h similarity index 100% rename from paddle/cuda/include/hl_top_k.h rename to paddle/legacy/cuda/include/hl_top_k.h diff --git a/paddle/cuda/include/hl_warpctc_wrap.h b/paddle/legacy/cuda/include/hl_warpctc_wrap.h similarity index 100% rename from paddle/cuda/include/hl_warpctc_wrap.h rename to paddle/legacy/cuda/include/hl_warpctc_wrap.h diff --git a/paddle/cuda/include/stub/hl_aggregate_stub.h b/paddle/legacy/cuda/include/stub/hl_aggregate_stub.h similarity index 100% rename from paddle/cuda/include/stub/hl_aggregate_stub.h rename to paddle/legacy/cuda/include/stub/hl_aggregate_stub.h diff --git a/paddle/cuda/include/stub/hl_cnn_stub.h b/paddle/legacy/cuda/include/stub/hl_cnn_stub.h similarity index 100% rename from paddle/cuda/include/stub/hl_cnn_stub.h rename to paddle/legacy/cuda/include/stub/hl_cnn_stub.h diff --git a/paddle/cuda/include/stub/hl_cuda_cublas_stub.h b/paddle/legacy/cuda/include/stub/hl_cuda_cublas_stub.h similarity index 100% rename from paddle/cuda/include/stub/hl_cuda_cublas_stub.h rename to paddle/legacy/cuda/include/stub/hl_cuda_cublas_stub.h diff --git a/paddle/cuda/include/stub/hl_cuda_cudnn_stub.h b/paddle/legacy/cuda/include/stub/hl_cuda_cudnn_stub.h similarity index 100% rename from paddle/cuda/include/stub/hl_cuda_cudnn_stub.h rename to paddle/legacy/cuda/include/stub/hl_cuda_cudnn_stub.h diff --git a/paddle/cuda/include/stub/hl_cuda_stub.h b/paddle/legacy/cuda/include/stub/hl_cuda_stub.h similarity index 100% rename from paddle/cuda/include/stub/hl_cuda_stub.h rename to paddle/legacy/cuda/include/stub/hl_cuda_stub.h diff --git a/paddle/cuda/include/stub/hl_lstm_stub.h b/paddle/legacy/cuda/include/stub/hl_lstm_stub.h similarity index 100% rename from paddle/cuda/include/stub/hl_lstm_stub.h rename to paddle/legacy/cuda/include/stub/hl_lstm_stub.h diff --git a/paddle/cuda/include/stub/hl_matrix_stub.h b/paddle/legacy/cuda/include/stub/hl_matrix_stub.h similarity index 100% rename from paddle/cuda/include/stub/hl_matrix_stub.h rename to paddle/legacy/cuda/include/stub/hl_matrix_stub.h diff --git a/paddle/cuda/include/stub/hl_sequence_stub.h b/paddle/legacy/cuda/include/stub/hl_sequence_stub.h similarity index 100% rename from paddle/cuda/include/stub/hl_sequence_stub.h rename to paddle/legacy/cuda/include/stub/hl_sequence_stub.h diff --git a/paddle/cuda/include/stub/hl_sparse_stub.h b/paddle/legacy/cuda/include/stub/hl_sparse_stub.h similarity index 100% rename from paddle/cuda/include/stub/hl_sparse_stub.h rename to paddle/legacy/cuda/include/stub/hl_sparse_stub.h diff --git a/paddle/cuda/src/avx_mathfun.h b/paddle/legacy/cuda/src/avx_mathfun.h similarity index 100% rename from paddle/cuda/src/avx_mathfun.h rename to paddle/legacy/cuda/src/avx_mathfun.h diff --git a/paddle/cuda/src/hl_avx_functions.cc b/paddle/legacy/cuda/src/hl_avx_functions.cc similarity index 100% rename from paddle/cuda/src/hl_avx_functions.cc rename to paddle/legacy/cuda/src/hl_avx_functions.cc diff --git a/paddle/cuda/src/hl_batch_norm.cu b/paddle/legacy/cuda/src/hl_batch_norm.cu similarity index 100% rename from paddle/cuda/src/hl_batch_norm.cu rename to paddle/legacy/cuda/src/hl_batch_norm.cu diff --git a/paddle/cuda/src/hl_batch_transpose.cu b/paddle/legacy/cuda/src/hl_batch_transpose.cu similarity index 100% rename from paddle/cuda/src/hl_batch_transpose.cu rename to paddle/legacy/cuda/src/hl_batch_transpose.cu diff --git a/paddle/cuda/src/hl_cpu_functions.cc b/paddle/legacy/cuda/src/hl_cpu_functions.cc similarity index 100% rename from paddle/cuda/src/hl_cpu_functions.cc rename to paddle/legacy/cuda/src/hl_cpu_functions.cc diff --git a/paddle/cuda/src/hl_cuda_aggregate.cu b/paddle/legacy/cuda/src/hl_cuda_aggregate.cu similarity index 100% rename from paddle/cuda/src/hl_cuda_aggregate.cu rename to paddle/legacy/cuda/src/hl_cuda_aggregate.cu diff --git a/paddle/cuda/src/hl_cuda_cnn.cu b/paddle/legacy/cuda/src/hl_cuda_cnn.cu similarity index 100% rename from paddle/cuda/src/hl_cuda_cnn.cu rename to paddle/legacy/cuda/src/hl_cuda_cnn.cu diff --git a/paddle/cuda/src/hl_cuda_cublas.cc b/paddle/legacy/cuda/src/hl_cuda_cublas.cc similarity index 100% rename from paddle/cuda/src/hl_cuda_cublas.cc rename to paddle/legacy/cuda/src/hl_cuda_cublas.cc diff --git a/paddle/cuda/src/hl_cuda_cudnn.cc b/paddle/legacy/cuda/src/hl_cuda_cudnn.cc similarity index 100% rename from paddle/cuda/src/hl_cuda_cudnn.cc rename to paddle/legacy/cuda/src/hl_cuda_cudnn.cc diff --git a/paddle/cuda/src/hl_cuda_device.cc b/paddle/legacy/cuda/src/hl_cuda_device.cc similarity index 100% rename from paddle/cuda/src/hl_cuda_device.cc rename to paddle/legacy/cuda/src/hl_cuda_device.cc diff --git a/paddle/cuda/src/hl_cuda_lstm.cu b/paddle/legacy/cuda/src/hl_cuda_lstm.cu similarity index 100% rename from paddle/cuda/src/hl_cuda_lstm.cu rename to paddle/legacy/cuda/src/hl_cuda_lstm.cu diff --git a/paddle/cuda/src/hl_cuda_matrix.cu b/paddle/legacy/cuda/src/hl_cuda_matrix.cu similarity index 100% rename from paddle/cuda/src/hl_cuda_matrix.cu rename to paddle/legacy/cuda/src/hl_cuda_matrix.cu diff --git a/paddle/cuda/src/hl_cuda_sequence.cu b/paddle/legacy/cuda/src/hl_cuda_sequence.cu similarity index 100% rename from paddle/cuda/src/hl_cuda_sequence.cu rename to paddle/legacy/cuda/src/hl_cuda_sequence.cu diff --git a/paddle/cuda/src/hl_cuda_sparse.cu b/paddle/legacy/cuda/src/hl_cuda_sparse.cu similarity index 100% rename from paddle/cuda/src/hl_cuda_sparse.cu rename to paddle/legacy/cuda/src/hl_cuda_sparse.cu diff --git a/paddle/cuda/src/hl_cuda_sparse.cuh b/paddle/legacy/cuda/src/hl_cuda_sparse.cuh similarity index 100% rename from paddle/cuda/src/hl_cuda_sparse.cuh rename to paddle/legacy/cuda/src/hl_cuda_sparse.cuh diff --git a/paddle/cuda/src/hl_math.cc b/paddle/legacy/cuda/src/hl_math.cc similarity index 100% rename from paddle/cuda/src/hl_math.cc rename to paddle/legacy/cuda/src/hl_math.cc diff --git a/paddle/cuda/src/hl_perturbation_util.cu b/paddle/legacy/cuda/src/hl_perturbation_util.cu similarity index 100% rename from paddle/cuda/src/hl_perturbation_util.cu rename to paddle/legacy/cuda/src/hl_perturbation_util.cu diff --git a/paddle/cuda/src/hl_table_apply.cu b/paddle/legacy/cuda/src/hl_table_apply.cu similarity index 100% rename from paddle/cuda/src/hl_table_apply.cu rename to paddle/legacy/cuda/src/hl_table_apply.cu diff --git a/paddle/cuda/src/hl_time.cc b/paddle/legacy/cuda/src/hl_time.cc similarity index 100% rename from paddle/cuda/src/hl_time.cc rename to paddle/legacy/cuda/src/hl_time.cc diff --git a/paddle/cuda/src/hl_top_k.cu b/paddle/legacy/cuda/src/hl_top_k.cu similarity index 98% rename from paddle/cuda/src/hl_top_k.cu rename to paddle/legacy/cuda/src/hl_top_k.cu index b17290557c..14b9a7f50f 100644 --- a/paddle/cuda/src/hl_top_k.cu +++ b/paddle/legacy/cuda/src/hl_top_k.cu @@ -12,9 +12,9 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/cuda/include/hl_base.h" -#include "paddle/cuda/include/hl_sparse.ph" -#include "paddle/cuda/include/hl_top_k.h" +#include "paddle/legacy/cuda/include/hl_base.h" +#include "paddle/legacy/cuda/include/hl_sparse.ph" +#include "paddle/legacy/cuda/include/hl_top_k.h" #include "paddle/utils/Logging.h" // using namespace hppl; diff --git a/paddle/cuda/src/hl_warpctc_wrap.cc b/paddle/legacy/cuda/src/hl_warpctc_wrap.cc similarity index 100% rename from paddle/cuda/src/hl_warpctc_wrap.cc rename to paddle/legacy/cuda/src/hl_warpctc_wrap.cc diff --git a/paddle/function/BlockExpandOp.cpp b/paddle/legacy/function/BlockExpandOp.cpp similarity index 100% rename from paddle/function/BlockExpandOp.cpp rename to paddle/legacy/function/BlockExpandOp.cpp diff --git a/paddle/function/BlockExpandOpTest.cpp b/paddle/legacy/function/BlockExpandOpTest.cpp similarity index 100% rename from paddle/function/BlockExpandOpTest.cpp rename to paddle/legacy/function/BlockExpandOpTest.cpp diff --git a/paddle/function/BufferArg.cpp b/paddle/legacy/function/BufferArg.cpp similarity index 97% rename from paddle/function/BufferArg.cpp rename to paddle/legacy/function/BufferArg.cpp index 2dc931c5d7..1f3d505c31 100644 --- a/paddle/function/BufferArg.cpp +++ b/paddle/legacy/function/BufferArg.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include #include "BufferArg.h" -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/SparseMatrix.h" namespace paddle { diff --git a/paddle/function/BufferArg.h b/paddle/legacy/function/BufferArg.h similarity index 99% rename from paddle/function/BufferArg.h rename to paddle/legacy/function/BufferArg.h index 6de8c94e77..1f47ad556d 100644 --- a/paddle/function/BufferArg.h +++ b/paddle/legacy/function/BufferArg.h @@ -18,7 +18,7 @@ limitations under the License. */ #include "TensorShape.h" #include "TensorType.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/function/BufferArgTest.cpp b/paddle/legacy/function/BufferArgTest.cpp similarity index 96% rename from paddle/function/BufferArgTest.cpp rename to paddle/legacy/function/BufferArgTest.cpp index 1a6e0110af..1ec153bea8 100644 --- a/paddle/function/BufferArgTest.cpp +++ b/paddle/legacy/function/BufferArgTest.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "BufferArg.h" #include -#include "paddle/math/MemoryHandle.h" +#include "paddle/legacy/math/MemoryHandle.h" namespace paddle { diff --git a/paddle/function/CMakeLists.txt b/paddle/legacy/function/CMakeLists.txt similarity index 100% rename from paddle/function/CMakeLists.txt rename to paddle/legacy/function/CMakeLists.txt diff --git a/paddle/function/ContextProjectionOp.cpp b/paddle/legacy/function/ContextProjectionOp.cpp similarity index 99% rename from paddle/function/ContextProjectionOp.cpp rename to paddle/legacy/function/ContextProjectionOp.cpp index 1187842452..05a3f91586 100644 --- a/paddle/function/ContextProjectionOp.cpp +++ b/paddle/legacy/function/ContextProjectionOp.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ContextProjectionOp.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/Vector.h" namespace paddle { /** diff --git a/paddle/function/ContextProjectionOp.h b/paddle/legacy/function/ContextProjectionOp.h similarity index 100% rename from paddle/function/ContextProjectionOp.h rename to paddle/legacy/function/ContextProjectionOp.h diff --git a/paddle/function/ContextProjectionOpGpu.cu b/paddle/legacy/function/ContextProjectionOpGpu.cu similarity index 100% rename from paddle/function/ContextProjectionOpGpu.cu rename to paddle/legacy/function/ContextProjectionOpGpu.cu diff --git a/paddle/function/ContextProjectionOpTest.cpp b/paddle/legacy/function/ContextProjectionOpTest.cpp similarity index 99% rename from paddle/function/ContextProjectionOpTest.cpp rename to paddle/legacy/function/ContextProjectionOpTest.cpp index d805c3ae92..3b0a34567f 100644 --- a/paddle/function/ContextProjectionOpTest.cpp +++ b/paddle/legacy/function/ContextProjectionOpTest.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include #include "FunctionTest.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/testing/TestUtil.h" using namespace paddle; // NOLINT diff --git a/paddle/function/ConvOp.h b/paddle/legacy/function/ConvOp.h similarity index 100% rename from paddle/function/ConvOp.h rename to paddle/legacy/function/ConvOp.h diff --git a/paddle/function/ConvOpTest.h b/paddle/legacy/function/ConvOpTest.h similarity index 100% rename from paddle/function/ConvOpTest.h rename to paddle/legacy/function/ConvOpTest.h diff --git a/paddle/function/CosSimOp.cpp b/paddle/legacy/function/CosSimOp.cpp similarity index 99% rename from paddle/function/CosSimOp.cpp rename to paddle/legacy/function/CosSimOp.cpp index 2c25e1af44..d04f4396ca 100644 --- a/paddle/function/CosSimOp.cpp +++ b/paddle/legacy/function/CosSimOp.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "CosSimOp.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/Vector.h" namespace paddle { /** diff --git a/paddle/function/CosSimOp.h b/paddle/legacy/function/CosSimOp.h similarity index 100% rename from paddle/function/CosSimOp.h rename to paddle/legacy/function/CosSimOp.h diff --git a/paddle/function/CosSimOpGpu.cu b/paddle/legacy/function/CosSimOpGpu.cu similarity index 100% rename from paddle/function/CosSimOpGpu.cu rename to paddle/legacy/function/CosSimOpGpu.cu diff --git a/paddle/function/CosSimOpTest.cpp b/paddle/legacy/function/CosSimOpTest.cpp similarity index 98% rename from paddle/function/CosSimOpTest.cpp rename to paddle/legacy/function/CosSimOpTest.cpp index 42b02da0cb..31bb43e1ba 100644 --- a/paddle/function/CosSimOpTest.cpp +++ b/paddle/legacy/function/CosSimOpTest.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include #include "FunctionTest.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" using namespace paddle; // NOLINT diff --git a/paddle/function/CropOp.cpp b/paddle/legacy/function/CropOp.cpp similarity index 98% rename from paddle/function/CropOp.cpp rename to paddle/legacy/function/CropOp.cpp index 5bd98910fe..e22678822f 100644 --- a/paddle/function/CropOp.cpp +++ b/paddle/legacy/function/CropOp.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "CropOp.h" -#include "paddle/function/TensorShape.h" -#include "paddle/math/Vector.h" +#include "paddle/legacy/function/TensorShape.h" +#include "paddle/legacy/math/Vector.h" namespace paddle { diff --git a/paddle/function/CropOp.h b/paddle/legacy/function/CropOp.h similarity index 100% rename from paddle/function/CropOp.h rename to paddle/legacy/function/CropOp.h diff --git a/paddle/function/CropOpGpu.cu b/paddle/legacy/function/CropOpGpu.cu similarity index 100% rename from paddle/function/CropOpGpu.cu rename to paddle/legacy/function/CropOpGpu.cu diff --git a/paddle/function/CropOpTest.cpp b/paddle/legacy/function/CropOpTest.cpp similarity index 100% rename from paddle/function/CropOpTest.cpp rename to paddle/legacy/function/CropOpTest.cpp diff --git a/paddle/function/CrossMapNormalOp.cpp b/paddle/legacy/function/CrossMapNormalOp.cpp similarity index 99% rename from paddle/function/CrossMapNormalOp.cpp rename to paddle/legacy/function/CrossMapNormalOp.cpp index 7ff9227e5c..f28703af00 100644 --- a/paddle/function/CrossMapNormalOp.cpp +++ b/paddle/legacy/function/CrossMapNormalOp.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "CrossMapNormalOp.h" -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Vector.h" namespace paddle { diff --git a/paddle/function/CrossMapNormalOp.h b/paddle/legacy/function/CrossMapNormalOp.h similarity index 100% rename from paddle/function/CrossMapNormalOp.h rename to paddle/legacy/function/CrossMapNormalOp.h diff --git a/paddle/function/CrossMapNormalOpGpu.cu b/paddle/legacy/function/CrossMapNormalOpGpu.cu similarity index 100% rename from paddle/function/CrossMapNormalOpGpu.cu rename to paddle/legacy/function/CrossMapNormalOpGpu.cu diff --git a/paddle/function/CrossMapNormalOpTest.cpp b/paddle/legacy/function/CrossMapNormalOpTest.cpp similarity index 100% rename from paddle/function/CrossMapNormalOpTest.cpp rename to paddle/legacy/function/CrossMapNormalOpTest.cpp diff --git a/paddle/function/DepthwiseConvOp.cpp b/paddle/legacy/function/DepthwiseConvOp.cpp similarity index 100% rename from paddle/function/DepthwiseConvOp.cpp rename to paddle/legacy/function/DepthwiseConvOp.cpp diff --git a/paddle/function/DepthwiseConvOp.h b/paddle/legacy/function/DepthwiseConvOp.h similarity index 100% rename from paddle/function/DepthwiseConvOp.h rename to paddle/legacy/function/DepthwiseConvOp.h diff --git a/paddle/function/DepthwiseConvOpGpu.cu b/paddle/legacy/function/DepthwiseConvOpGpu.cu similarity index 99% rename from paddle/function/DepthwiseConvOpGpu.cu rename to paddle/legacy/function/DepthwiseConvOpGpu.cu index 2c0e71b19b..17138cc563 100644 --- a/paddle/function/DepthwiseConvOpGpu.cu +++ b/paddle/legacy/function/DepthwiseConvOpGpu.cu @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "DepthwiseConvOp.h" -#include "paddle/math/BaseMatrix.h" +#include "paddle/legacy/math/BaseMatrix.h" namespace paddle { diff --git a/paddle/function/DepthwiseConvOpTest.cpp b/paddle/legacy/function/DepthwiseConvOpTest.cpp similarity index 100% rename from paddle/function/DepthwiseConvOpTest.cpp rename to paddle/legacy/function/DepthwiseConvOpTest.cpp diff --git a/paddle/function/EigenGemm.cpp b/paddle/legacy/function/EigenGemm.cpp similarity index 98% rename from paddle/function/EigenGemm.cpp rename to paddle/legacy/function/EigenGemm.cpp index 8e9dbbd7a1..5929c5c68e 100644 --- a/paddle/function/EigenGemm.cpp +++ b/paddle/legacy/function/EigenGemm.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include "paddle/function/EigenThreadDevice.h" +#include "paddle/legacy/function/EigenThreadDevice.h" namespace paddle { diff --git a/paddle/function/EigenThreadDevice.h b/paddle/legacy/function/EigenThreadDevice.h similarity index 100% rename from paddle/function/EigenThreadDevice.h rename to paddle/legacy/function/EigenThreadDevice.h diff --git a/paddle/function/Function.cpp b/paddle/legacy/function/Function.cpp similarity index 100% rename from paddle/function/Function.cpp rename to paddle/legacy/function/Function.cpp diff --git a/paddle/function/Function.h b/paddle/legacy/function/Function.h similarity index 99% rename from paddle/function/Function.h rename to paddle/legacy/function/Function.h index a6c14ef29b..cc6f999a0e 100644 --- a/paddle/function/Function.h +++ b/paddle/legacy/function/Function.h @@ -17,7 +17,7 @@ limitations under the License. */ #include #include #include "BufferArg.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Any.h" #include "paddle/utils/ClassRegistrar.h" #include "paddle/utils/Error.h" diff --git a/paddle/function/FunctionTest.cpp b/paddle/legacy/function/FunctionTest.cpp similarity index 99% rename from paddle/function/FunctionTest.cpp rename to paddle/legacy/function/FunctionTest.cpp index f5e6ca3f51..1a0993e313 100644 --- a/paddle/function/FunctionTest.cpp +++ b/paddle/legacy/function/FunctionTest.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "Function.h" #include -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/SparseMatrix.h" namespace paddle { diff --git a/paddle/function/FunctionTest.h b/paddle/legacy/function/FunctionTest.h similarity index 99% rename from paddle/function/FunctionTest.h rename to paddle/legacy/function/FunctionTest.h index 14003d2c88..6f01981a34 100644 --- a/paddle/function/FunctionTest.h +++ b/paddle/legacy/function/FunctionTest.h @@ -13,9 +13,9 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Function.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/SparseMatrix.h" -#include "paddle/math/tests/TensorCheck.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/SparseMatrix.h" +#include "paddle/legacy/math/tests/TensorCheck.h" #include "paddle/testing/TestUtil.h" namespace paddle { diff --git a/paddle/function/GemmConvOp.cpp b/paddle/legacy/function/GemmConvOp.cpp similarity index 99% rename from paddle/function/GemmConvOp.cpp rename to paddle/legacy/function/GemmConvOp.cpp index 5b023e2c10..5a81315661 100644 --- a/paddle/function/GemmConvOp.cpp +++ b/paddle/legacy/function/GemmConvOp.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "ConvOp.h" #include "GemmFunctor.h" #include "Im2Col.h" -#include "paddle/math/MemoryHandle.h" +#include "paddle/legacy/math/MemoryHandle.h" namespace paddle { diff --git a/paddle/function/GemmConvOpTest.cpp b/paddle/legacy/function/GemmConvOpTest.cpp similarity index 100% rename from paddle/function/GemmConvOpTest.cpp rename to paddle/legacy/function/GemmConvOpTest.cpp diff --git a/paddle/function/GemmFunctor.cpp b/paddle/legacy/function/GemmFunctor.cpp similarity index 98% rename from paddle/function/GemmFunctor.cpp rename to paddle/legacy/function/GemmFunctor.cpp index 0b1fe1b67d..450293dfee 100644 --- a/paddle/function/GemmFunctor.cpp +++ b/paddle/legacy/function/GemmFunctor.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "GemmFunctor.h" -#include "paddle/math/MathFunctions.h" +#include "paddle/legacy/math/MathFunctions.h" namespace paddle { diff --git a/paddle/function/GemmFunctor.h b/paddle/legacy/function/GemmFunctor.h similarity index 100% rename from paddle/function/GemmFunctor.h rename to paddle/legacy/function/GemmFunctor.h diff --git a/paddle/function/GruFunctor.h b/paddle/legacy/function/GruFunctor.h similarity index 100% rename from paddle/function/GruFunctor.h rename to paddle/legacy/function/GruFunctor.h diff --git a/paddle/function/Im2Col.h b/paddle/legacy/function/Im2Col.h similarity index 100% rename from paddle/function/Im2Col.h rename to paddle/legacy/function/Im2Col.h diff --git a/paddle/function/Im2ColOp.cpp b/paddle/legacy/function/Im2ColOp.cpp similarity index 100% rename from paddle/function/Im2ColOp.cpp rename to paddle/legacy/function/Im2ColOp.cpp diff --git a/paddle/function/Im2ColOpGpu.cu b/paddle/legacy/function/Im2ColOpGpu.cu similarity index 100% rename from paddle/function/Im2ColOpGpu.cu rename to paddle/legacy/function/Im2ColOpGpu.cu diff --git a/paddle/function/Im2ColTest.cpp b/paddle/legacy/function/Im2ColTest.cpp similarity index 99% rename from paddle/function/Im2ColTest.cpp rename to paddle/legacy/function/Im2ColTest.cpp index 967c5b9153..2c5f06f389 100644 --- a/paddle/function/Im2ColTest.cpp +++ b/paddle/legacy/function/Im2ColTest.cpp @@ -15,8 +15,8 @@ limitations under the License. */ #include "Im2Col.h" #include #include "Function.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/tests/TensorCheck.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/tests/TensorCheck.h" namespace paddle { diff --git a/paddle/function/MulOp.cpp b/paddle/legacy/function/MulOp.cpp similarity index 99% rename from paddle/function/MulOp.cpp rename to paddle/legacy/function/MulOp.cpp index 7bf36c8050..1401031752 100644 --- a/paddle/function/MulOp.cpp +++ b/paddle/legacy/function/MulOp.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "MulOp.h" #include "GemmFunctor.h" -#include "paddle/math/SIMDFunctions.h" +#include "paddle/legacy/math/SIMDFunctions.h" #include "paddle/utils/ThreadLocal.h" namespace { diff --git a/paddle/function/MulOp.h b/paddle/legacy/function/MulOp.h similarity index 97% rename from paddle/function/MulOp.h rename to paddle/legacy/function/MulOp.h index e6057be4e5..ab33bde172 100644 --- a/paddle/function/MulOp.h +++ b/paddle/legacy/function/MulOp.h @@ -15,8 +15,8 @@ limitations under the License. */ #pragma once #include "Function.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/SparseMatrix.h" namespace paddle { /// CPU, dense matrix (+)= dense matrix * dense matrix diff --git a/paddle/function/MulOpGpu.cu b/paddle/legacy/function/MulOpGpu.cu similarity index 98% rename from paddle/function/MulOpGpu.cu rename to paddle/legacy/function/MulOpGpu.cu index d63416a8e4..217c983cb7 100644 --- a/paddle/function/MulOpGpu.cu +++ b/paddle/legacy/function/MulOpGpu.cu @@ -14,8 +14,8 @@ limitations under the License. */ #include "MulOp.h" #include "hl_base.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/SparseMatrix.h" namespace paddle { /// dense matrix (+)= dense matrix * dense matrix diff --git a/paddle/function/MulOpTest.cpp b/paddle/legacy/function/MulOpTest.cpp similarity index 98% rename from paddle/function/MulOpTest.cpp rename to paddle/legacy/function/MulOpTest.cpp index 4e1ebd749c..ab08b6f869 100644 --- a/paddle/function/MulOpTest.cpp +++ b/paddle/legacy/function/MulOpTest.cpp @@ -14,9 +14,9 @@ limitations under the License. */ #include #include "FunctionTest.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/SparseMatrix.h" -#include "paddle/math/tests/test_matrixUtil.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/SparseMatrix.h" +#include "paddle/legacy/math/tests/test_matrixUtil.h" #include "paddle/testing/TestUtil.h" using namespace paddle; // NOLINT diff --git a/paddle/function/NaiveConvOp.cpp b/paddle/legacy/function/NaiveConvOp.cpp similarity index 100% rename from paddle/function/NaiveConvOp.cpp rename to paddle/legacy/function/NaiveConvOp.cpp diff --git a/paddle/function/PadOp.cpp b/paddle/legacy/function/PadOp.cpp similarity index 99% rename from paddle/function/PadOp.cpp rename to paddle/legacy/function/PadOp.cpp index 5d7515e8c0..9d011d28e6 100644 --- a/paddle/function/PadOp.cpp +++ b/paddle/legacy/function/PadOp.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "PadOp.h" -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Vector.h" namespace paddle { diff --git a/paddle/function/PadOp.h b/paddle/legacy/function/PadOp.h similarity index 100% rename from paddle/function/PadOp.h rename to paddle/legacy/function/PadOp.h diff --git a/paddle/function/PadOpGpu.cu b/paddle/legacy/function/PadOpGpu.cu similarity index 100% rename from paddle/function/PadOpGpu.cu rename to paddle/legacy/function/PadOpGpu.cu diff --git a/paddle/function/PadOpTest.cpp b/paddle/legacy/function/PadOpTest.cpp similarity index 100% rename from paddle/function/PadOpTest.cpp rename to paddle/legacy/function/PadOpTest.cpp diff --git a/paddle/function/RowConvOp.cpp b/paddle/legacy/function/RowConvOp.cpp similarity index 99% rename from paddle/function/RowConvOp.cpp rename to paddle/legacy/function/RowConvOp.cpp index 129e933458..3be50e80d7 100644 --- a/paddle/function/RowConvOp.cpp +++ b/paddle/legacy/function/RowConvOp.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "RowConvOp.h" #include -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Vector.h" namespace paddle { diff --git a/paddle/function/RowConvOp.h b/paddle/legacy/function/RowConvOp.h similarity index 100% rename from paddle/function/RowConvOp.h rename to paddle/legacy/function/RowConvOp.h diff --git a/paddle/function/RowConvOpGpu.cu b/paddle/legacy/function/RowConvOpGpu.cu similarity index 99% rename from paddle/function/RowConvOpGpu.cu rename to paddle/legacy/function/RowConvOpGpu.cu index f820ee9a97..a6d2e4c7e3 100644 --- a/paddle/function/RowConvOpGpu.cu +++ b/paddle/legacy/function/RowConvOpGpu.cu @@ -12,8 +12,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/cuda/include/hl_base.h" -#include "paddle/function/RowConvOp.h" +#include "paddle/legacy/cuda/include/hl_base.h" +#include "paddle/legacy/function/RowConvOp.h" namespace paddle { diff --git a/paddle/function/RowConvOpTest.cpp b/paddle/legacy/function/RowConvOpTest.cpp similarity index 100% rename from paddle/function/RowConvOpTest.cpp rename to paddle/legacy/function/RowConvOpTest.cpp diff --git a/paddle/function/ScaleSubRegionOp.cpp b/paddle/legacy/function/ScaleSubRegionOp.cpp similarity index 99% rename from paddle/function/ScaleSubRegionOp.cpp rename to paddle/legacy/function/ScaleSubRegionOp.cpp index 9a06ef2a96..03a422a740 100644 --- a/paddle/function/ScaleSubRegionOp.cpp +++ b/paddle/legacy/function/ScaleSubRegionOp.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ScaleSubRegionOp.h" -#include "paddle/function/TensorShape.h" +#include "paddle/legacy/function/TensorShape.h" namespace paddle { diff --git a/paddle/function/ScaleSubRegionOp.h b/paddle/legacy/function/ScaleSubRegionOp.h similarity index 100% rename from paddle/function/ScaleSubRegionOp.h rename to paddle/legacy/function/ScaleSubRegionOp.h diff --git a/paddle/function/ScaleSubRegionOpGpu.cu b/paddle/legacy/function/ScaleSubRegionOpGpu.cu similarity index 100% rename from paddle/function/ScaleSubRegionOpGpu.cu rename to paddle/legacy/function/ScaleSubRegionOpGpu.cu diff --git a/paddle/function/ScaleSubRegionOpTest.cpp b/paddle/legacy/function/ScaleSubRegionOpTest.cpp similarity index 100% rename from paddle/function/ScaleSubRegionOpTest.cpp rename to paddle/legacy/function/ScaleSubRegionOpTest.cpp diff --git a/paddle/function/SwitchOp.cpp b/paddle/legacy/function/SwitchOp.cpp similarity index 99% rename from paddle/function/SwitchOp.cpp rename to paddle/legacy/function/SwitchOp.cpp index 750fb6bf28..c6accd1803 100644 --- a/paddle/function/SwitchOp.cpp +++ b/paddle/legacy/function/SwitchOp.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "SwitchOp.h" -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Vector.h" namespace paddle { diff --git a/paddle/function/SwitchOp.h b/paddle/legacy/function/SwitchOp.h similarity index 100% rename from paddle/function/SwitchOp.h rename to paddle/legacy/function/SwitchOp.h diff --git a/paddle/function/SwitchOpGpu.cu b/paddle/legacy/function/SwitchOpGpu.cu similarity index 100% rename from paddle/function/SwitchOpGpu.cu rename to paddle/legacy/function/SwitchOpGpu.cu diff --git a/paddle/function/SwitchOpTest.cpp b/paddle/legacy/function/SwitchOpTest.cpp similarity index 100% rename from paddle/function/SwitchOpTest.cpp rename to paddle/legacy/function/SwitchOpTest.cpp diff --git a/paddle/function/TensorShape.h b/paddle/legacy/function/TensorShape.h similarity index 100% rename from paddle/function/TensorShape.h rename to paddle/legacy/function/TensorShape.h diff --git a/paddle/function/TensorShapeTest.cpp b/paddle/legacy/function/TensorShapeTest.cpp similarity index 100% rename from paddle/function/TensorShapeTest.cpp rename to paddle/legacy/function/TensorShapeTest.cpp diff --git a/paddle/function/TensorType.h b/paddle/legacy/function/TensorType.h similarity index 98% rename from paddle/function/TensorType.h rename to paddle/legacy/function/TensorType.h index b384591bd8..13994821be 100644 --- a/paddle/function/TensorType.h +++ b/paddle/legacy/function/TensorType.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/function/TensorTypeTest.cpp b/paddle/legacy/function/TensorTypeTest.cpp similarity index 100% rename from paddle/function/TensorTypeTest.cpp rename to paddle/legacy/function/TensorTypeTest.cpp diff --git a/paddle/function/neon/NeonDepthwiseConv.cpp b/paddle/legacy/function/neon/NeonDepthwiseConv.cpp similarity index 98% rename from paddle/function/neon/NeonDepthwiseConv.cpp rename to paddle/legacy/function/neon/NeonDepthwiseConv.cpp index d7ac83da41..6179635a9f 100644 --- a/paddle/function/neon/NeonDepthwiseConv.cpp +++ b/paddle/legacy/function/neon/NeonDepthwiseConv.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "NeonDepthwiseConv.h" -#include "paddle/function/ConvOp.h" +#include "paddle/legacy/function/ConvOp.h" namespace paddle { diff --git a/paddle/function/neon/NeonDepthwiseConv.h b/paddle/legacy/function/neon/NeonDepthwiseConv.h similarity index 100% rename from paddle/function/neon/NeonDepthwiseConv.h rename to paddle/legacy/function/neon/NeonDepthwiseConv.h diff --git a/paddle/function/neon/NeonDepthwiseConvTranspose.cpp b/paddle/legacy/function/neon/NeonDepthwiseConvTranspose.cpp similarity index 99% rename from paddle/function/neon/NeonDepthwiseConvTranspose.cpp rename to paddle/legacy/function/neon/NeonDepthwiseConvTranspose.cpp index 1fc5daf607..feb77e1ff9 100644 --- a/paddle/function/neon/NeonDepthwiseConvTranspose.cpp +++ b/paddle/legacy/function/neon/NeonDepthwiseConvTranspose.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "NeonDepthwiseConv.h" -#include "paddle/function/ConvOp.h" +#include "paddle/legacy/function/ConvOp.h" namespace paddle { diff --git a/paddle/function/neon/neon_util.h b/paddle/legacy/function/neon/neon_util.h similarity index 100% rename from paddle/function/neon/neon_util.h rename to paddle/legacy/function/neon/neon_util.h diff --git a/paddle/function/nnpack/NNPACKConvOp.cpp b/paddle/legacy/function/nnpack/NNPACKConvOp.cpp similarity index 99% rename from paddle/function/nnpack/NNPACKConvOp.cpp rename to paddle/legacy/function/nnpack/NNPACKConvOp.cpp index 48c997b50d..81c832e774 100644 --- a/paddle/function/nnpack/NNPACKConvOp.cpp +++ b/paddle/legacy/function/nnpack/NNPACKConvOp.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "nnpack.h" -#include "paddle/function/ConvOp.h" +#include "paddle/legacy/function/ConvOp.h" DEFINE_bool(nnpack_allocate_outside, true, diff --git a/paddle/function/nnpack/NNPACKConvOpTest.cpp b/paddle/legacy/function/nnpack/NNPACKConvOpTest.cpp similarity index 95% rename from paddle/function/nnpack/NNPACKConvOpTest.cpp rename to paddle/legacy/function/nnpack/NNPACKConvOpTest.cpp index c80ffb5d5d..a2db83f5a3 100644 --- a/paddle/function/nnpack/NNPACKConvOpTest.cpp +++ b/paddle/legacy/function/nnpack/NNPACKConvOpTest.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include "paddle/function/ConvOpTest.h" +#include "paddle/legacy/function/ConvOpTest.h" namespace paddle { diff --git a/paddle/legacy/gserver/activations/ActivationFunction.cpp b/paddle/legacy/gserver/activations/ActivationFunction.cpp index 71c238fbfe..69f34db5ac 100644 --- a/paddle/legacy/gserver/activations/ActivationFunction.cpp +++ b/paddle/legacy/gserver/activations/ActivationFunction.cpp @@ -20,7 +20,7 @@ limitations under the License. */ #include #include #include -#include "paddle/parameter/Argument.h" +#include "paddle/legacy/parameter/Argument.h" #include "paddle/utils/ClassRegistrar.h" #include "paddle/utils/Logging.h" diff --git a/paddle/legacy/gserver/activations/MKLDNNActivation.h b/paddle/legacy/gserver/activations/MKLDNNActivation.h index dd1ff6a9aa..59c447ad07 100644 --- a/paddle/legacy/gserver/activations/MKLDNNActivation.h +++ b/paddle/legacy/gserver/activations/MKLDNNActivation.h @@ -16,8 +16,8 @@ limitations under the License. */ #include "ActivationFunction.h" #include "mkldnn.hpp" #include "paddle/legacy/gserver/layers/MKLDNNBase.h" -#include "paddle/math/MKLDNNMatrix.h" -#include "paddle/parameter/Argument.h" +#include "paddle/legacy/math/MKLDNNMatrix.h" +#include "paddle/legacy/parameter/Argument.h" namespace paddle { diff --git a/paddle/legacy/gserver/dataproviders/DataProvider.h b/paddle/legacy/gserver/dataproviders/DataProvider.h index 21822b10c2..b6f74afed0 100644 --- a/paddle/legacy/gserver/dataproviders/DataProvider.h +++ b/paddle/legacy/gserver/dataproviders/DataProvider.h @@ -25,10 +25,10 @@ limitations under the License. */ #include #include "DataConfig.pb.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/SparseMatrix.h" -#include "paddle/math/Vector.h" -#include "paddle/parameter/Argument.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/SparseMatrix.h" +#include "paddle/legacy/math/Vector.h" +#include "paddle/legacy/parameter/Argument.h" #include "paddle/utils/ClassRegistrar.h" #include "paddle/utils/Common.h" #include "paddle/utils/Locks.h" diff --git a/paddle/legacy/gserver/evaluators/ChunkEvaluator.cpp b/paddle/legacy/gserver/evaluators/ChunkEvaluator.cpp index a2216293b1..ea5c609a63 100644 --- a/paddle/legacy/gserver/evaluators/ChunkEvaluator.cpp +++ b/paddle/legacy/gserver/evaluators/ChunkEvaluator.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include #include -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Vector.h" #include "paddle/utils/StringUtil.h" #include "Evaluator.h" diff --git a/paddle/legacy/gserver/evaluators/Evaluator.h b/paddle/legacy/gserver/evaluators/Evaluator.h index 42948f1097..90989bb0b6 100644 --- a/paddle/legacy/gserver/evaluators/Evaluator.h +++ b/paddle/legacy/gserver/evaluators/Evaluator.h @@ -16,8 +16,8 @@ limitations under the License. */ #include #include "ModelConfig.pb.h" -#include "paddle/parameter/Argument.h" -#include "paddle/pserver/ParameterClient2.h" +#include "paddle/legacy/parameter/Argument.h" +#include "paddle/legacy/pserver/ParameterClient2.h" #include "paddle/utils/ClassRegistrar.h" #include "paddle/utils/Error.h" diff --git a/paddle/legacy/gserver/gradientmachines/GradientMachine.h b/paddle/legacy/gserver/gradientmachines/GradientMachine.h index d732739c87..48f5141ce1 100644 --- a/paddle/legacy/gserver/gradientmachines/GradientMachine.h +++ b/paddle/legacy/gserver/gradientmachines/GradientMachine.h @@ -21,9 +21,9 @@ limitations under the License. */ #include "TrainerConfig.pb.h" #include "paddle/legacy/gserver/dataproviders/DataProvider.h" #include "paddle/legacy/gserver/layers/Layer.h" -#include "paddle/math/Matrix.h" -#include "paddle/parameter/Parameter.h" -#include "paddle/parameter/ParameterUpdaterBase.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/parameter/Parameter.h" +#include "paddle/legacy/parameter/ParameterUpdaterBase.h" #include "paddle/utils/Thread.h" #ifndef PADDLE_MOBILE_INFERENCE diff --git a/paddle/legacy/gserver/gradientmachines/NeuralNetwork.h b/paddle/legacy/gserver/gradientmachines/NeuralNetwork.h index e5ccb72e62..5a0909b99b 100644 --- a/paddle/legacy/gserver/gradientmachines/NeuralNetwork.h +++ b/paddle/legacy/gserver/gradientmachines/NeuralNetwork.h @@ -24,7 +24,7 @@ limitations under the License. */ #include "paddle/legacy/gserver/layers/CostLayer.h" #include "paddle/legacy/gserver/layers/DataLayer.h" #include "paddle/legacy/gserver/layers/Layer.h" -#include "paddle/parameter/Parameter.h" +#include "paddle/legacy/parameter/Parameter.h" #include "paddle/utils/ClassRegistrar.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/AddtoLayer.h b/paddle/legacy/gserver/layers/AddtoLayer.h index 6ea54f4a53..1f948de475 100644 --- a/paddle/legacy/gserver/layers/AddtoLayer.h +++ b/paddle/legacy/gserver/layers/AddtoLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/AgentLayer.h b/paddle/legacy/gserver/layers/AgentLayer.h index 51f346d5c9..f506db2f2d 100644 --- a/paddle/legacy/gserver/layers/AgentLayer.h +++ b/paddle/legacy/gserver/layers/AgentLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/AverageLayer.h b/paddle/legacy/gserver/layers/AverageLayer.h index 03e2673b55..a0d457d35f 100644 --- a/paddle/legacy/gserver/layers/AverageLayer.h +++ b/paddle/legacy/gserver/layers/AverageLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "SequencePoolLayer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/BilinearInterpLayer.h b/paddle/legacy/gserver/layers/BilinearInterpLayer.h index 8e08c2e1ce..c585a5ed10 100644 --- a/paddle/legacy/gserver/layers/BilinearInterpLayer.h +++ b/paddle/legacy/gserver/layers/BilinearInterpLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/BlockExpandLayer.h b/paddle/legacy/gserver/layers/BlockExpandLayer.h index 9d76584f3a..8b90249bfb 100644 --- a/paddle/legacy/gserver/layers/BlockExpandLayer.h +++ b/paddle/legacy/gserver/layers/BlockExpandLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/Conv3DLayer.h b/paddle/legacy/gserver/layers/Conv3DLayer.h index 07b804bad0..cb42a2f36d 100644 --- a/paddle/legacy/gserver/layers/Conv3DLayer.h +++ b/paddle/legacy/gserver/layers/Conv3DLayer.h @@ -15,8 +15,8 @@ limitations under the License. */ #pragma once #include #include "ConvBaseLayer.h" -#include "paddle/math/MathUtils.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/MathUtils.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvBaseLayer.cpp b/paddle/legacy/gserver/layers/ConvBaseLayer.cpp index 56bf4f9fcb..d8997527fb 100644 --- a/paddle/legacy/gserver/layers/ConvBaseLayer.cpp +++ b/paddle/legacy/gserver/layers/ConvBaseLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ConvBaseLayer.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" #include "paddle/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvBaseLayer.h b/paddle/legacy/gserver/layers/ConvBaseLayer.h index 801bc4f888..01e90e9996 100644 --- a/paddle/legacy/gserver/layers/ConvBaseLayer.h +++ b/paddle/legacy/gserver/layers/ConvBaseLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/ConvBaseOperator.cpp b/paddle/legacy/gserver/layers/ConvBaseOperator.cpp index 317e7d5c60..e8e59b3bfe 100644 --- a/paddle/legacy/gserver/layers/ConvBaseOperator.cpp +++ b/paddle/legacy/gserver/layers/ConvBaseOperator.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ConvBaseOperator.h" -#include "paddle/math/MathUtils.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/MathUtils.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvBaseOperator.h b/paddle/legacy/gserver/layers/ConvBaseOperator.h index c3c647cb69..4ac77f2d74 100644 --- a/paddle/legacy/gserver/layers/ConvBaseOperator.h +++ b/paddle/legacy/gserver/layers/ConvBaseOperator.h @@ -14,8 +14,8 @@ limitations under the License. */ #pragma once #include "Operator.h" -#include "paddle/math/MathUtils.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/MathUtils.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvBaseProjection.h b/paddle/legacy/gserver/layers/ConvBaseProjection.h index f3266ae1ab..dcf5ce0f48 100644 --- a/paddle/legacy/gserver/layers/ConvBaseProjection.h +++ b/paddle/legacy/gserver/layers/ConvBaseProjection.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Projection.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvOperator.cpp b/paddle/legacy/gserver/layers/ConvOperator.cpp index 45498b92d3..5276b2c392 100644 --- a/paddle/legacy/gserver/layers/ConvOperator.cpp +++ b/paddle/legacy/gserver/layers/ConvOperator.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ConvOperator.h" -#include "paddle/math/MathUtils.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/MathUtils.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvOperator.h b/paddle/legacy/gserver/layers/ConvOperator.h index 527dbf8c27..8f31620111 100644 --- a/paddle/legacy/gserver/layers/ConvOperator.h +++ b/paddle/legacy/gserver/layers/ConvOperator.h @@ -14,8 +14,8 @@ limitations under the License. */ #pragma once #include "ConvBaseOperator.h" -#include "paddle/math/MathUtils.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/MathUtils.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvProjection.h b/paddle/legacy/gserver/layers/ConvProjection.h index 22a2202bb6..890a17e2f8 100644 --- a/paddle/legacy/gserver/layers/ConvProjection.h +++ b/paddle/legacy/gserver/layers/ConvProjection.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "ConvBaseProjection.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvShiftLayer.cpp b/paddle/legacy/gserver/layers/ConvShiftLayer.cpp index 615c347806..dda1a91e45 100644 --- a/paddle/legacy/gserver/layers/ConvShiftLayer.cpp +++ b/paddle/legacy/gserver/layers/ConvShiftLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/ConvTransOperator.cpp b/paddle/legacy/gserver/layers/ConvTransOperator.cpp index ac41d6f9a4..f4ce2affb1 100644 --- a/paddle/legacy/gserver/layers/ConvTransOperator.cpp +++ b/paddle/legacy/gserver/layers/ConvTransOperator.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ConvTransOperator.h" -#include "paddle/math/MathUtils.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/MathUtils.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvTransOperator.h b/paddle/legacy/gserver/layers/ConvTransOperator.h index 53cb7a21b4..206335a01f 100644 --- a/paddle/legacy/gserver/layers/ConvTransOperator.h +++ b/paddle/legacy/gserver/layers/ConvTransOperator.h @@ -14,8 +14,8 @@ limitations under the License. */ #pragma once #include "ConvBaseOperator.h" -#include "paddle/math/MathUtils.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/MathUtils.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvTransProjection.h b/paddle/legacy/gserver/layers/ConvTransProjection.h index 0f9ed720d3..9b63dd4735 100644 --- a/paddle/legacy/gserver/layers/ConvTransProjection.h +++ b/paddle/legacy/gserver/layers/ConvTransProjection.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "ConvBaseProjection.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvexCombinationLayer.cpp b/paddle/legacy/gserver/layers/ConvexCombinationLayer.cpp index 31363d97c4..29a71fc1d9 100644 --- a/paddle/legacy/gserver/layers/ConvexCombinationLayer.cpp +++ b/paddle/legacy/gserver/layers/ConvexCombinationLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/CosSimLayer.h b/paddle/legacy/gserver/layers/CosSimLayer.h index d9fe1ff270..2e53de414d 100644 --- a/paddle/legacy/gserver/layers/CosSimLayer.h +++ b/paddle/legacy/gserver/layers/CosSimLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/CosSimVecMatLayer.cpp b/paddle/legacy/gserver/layers/CosSimVecMatLayer.cpp index 230ecc768b..da3ddf11dc 100644 --- a/paddle/legacy/gserver/layers/CosSimVecMatLayer.cpp +++ b/paddle/legacy/gserver/layers/CosSimVecMatLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/CostLayer.cpp b/paddle/legacy/gserver/layers/CostLayer.cpp index 1327616950..2c0762be25 100644 --- a/paddle/legacy/gserver/layers/CostLayer.cpp +++ b/paddle/legacy/gserver/layers/CostLayer.cpp @@ -18,7 +18,7 @@ limitations under the License. */ #include #include "paddle/utils/Logging.h" -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/SparseMatrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/CrossChannelNormLayer.cpp b/paddle/legacy/gserver/layers/CrossChannelNormLayer.cpp index 644450291e..0fe100a96c 100644 --- a/paddle/legacy/gserver/layers/CrossChannelNormLayer.cpp +++ b/paddle/legacy/gserver/layers/CrossChannelNormLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "NormLayer.h" -#include "paddle/math/BaseMatrix.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/BaseMatrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/CudnnBatchNormLayer.cpp b/paddle/legacy/gserver/layers/CudnnBatchNormLayer.cpp index 9a29e6a55e..3f4e17c018 100644 --- a/paddle/legacy/gserver/layers/CudnnBatchNormLayer.cpp +++ b/paddle/legacy/gserver/layers/CudnnBatchNormLayer.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "CudnnBatchNormLayer.h" #include "Layer.h" -#include "paddle/cuda/include/hl_batch_norm.h" +#include "paddle/legacy/cuda/include/hl_batch_norm.h" #include "paddle/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/CudnnConvBaseLayer.h b/paddle/legacy/gserver/layers/CudnnConvBaseLayer.h index 1ee1aa100d..d050183eb7 100644 --- a/paddle/legacy/gserver/layers/CudnnConvBaseLayer.h +++ b/paddle/legacy/gserver/layers/CudnnConvBaseLayer.h @@ -17,7 +17,7 @@ limitations under the License. */ #include #include "ConvBaseLayer.h" #include "Projection.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/CudnnPoolLayer.cpp b/paddle/legacy/gserver/layers/CudnnPoolLayer.cpp index ac6d2168f4..9739ed9da4 100644 --- a/paddle/legacy/gserver/layers/CudnnPoolLayer.cpp +++ b/paddle/legacy/gserver/layers/CudnnPoolLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "CudnnPoolLayer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/DataNormLayer.h b/paddle/legacy/gserver/layers/DataNormLayer.h index 7ae67a877b..556d7f4d66 100644 --- a/paddle/legacy/gserver/layers/DataNormLayer.h +++ b/paddle/legacy/gserver/layers/DataNormLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/DeConv3DLayer.h b/paddle/legacy/gserver/layers/DeConv3DLayer.h index 13d1d07cf5..9931bccb12 100644 --- a/paddle/legacy/gserver/layers/DeConv3DLayer.h +++ b/paddle/legacy/gserver/layers/DeConv3DLayer.h @@ -16,8 +16,8 @@ limitations under the License. */ #include #include "ConvBaseLayer.h" -#include "paddle/math/MathUtils.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/MathUtils.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/DetectionUtil.h b/paddle/legacy/gserver/layers/DetectionUtil.h index d6502fcf8f..c1e0bb809a 100644 --- a/paddle/legacy/gserver/layers/DetectionUtil.h +++ b/paddle/legacy/gserver/layers/DetectionUtil.h @@ -17,7 +17,7 @@ limitations under the License. */ #include #include #include -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" using std::vector; using std::pair; diff --git a/paddle/legacy/gserver/layers/DotProdLayer.cpp b/paddle/legacy/gserver/layers/DotProdLayer.cpp index 72b0c707b2..445361b101 100644 --- a/paddle/legacy/gserver/layers/DotProdLayer.cpp +++ b/paddle/legacy/gserver/layers/DotProdLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/ExpandConvLayer.h b/paddle/legacy/gserver/layers/ExpandConvLayer.h index 6919ef7135..c0eff3ab06 100644 --- a/paddle/legacy/gserver/layers/ExpandConvLayer.h +++ b/paddle/legacy/gserver/layers/ExpandConvLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include #include "ConvBaseLayer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ExpandLayer.h b/paddle/legacy/gserver/layers/ExpandLayer.h index 06bd4ef05e..75a1ec7568 100644 --- a/paddle/legacy/gserver/layers/ExpandLayer.h +++ b/paddle/legacy/gserver/layers/ExpandLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/FactorizationMachineLayer.cpp b/paddle/legacy/gserver/layers/FactorizationMachineLayer.cpp index 1744faada2..ddd202e1c6 100644 --- a/paddle/legacy/gserver/layers/FactorizationMachineLayer.cpp +++ b/paddle/legacy/gserver/layers/FactorizationMachineLayer.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "FactorizationMachineLayer.h" #include #include -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/SparseMatrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/FactorizationMachineLayer.h b/paddle/legacy/gserver/layers/FactorizationMachineLayer.h index 148abe2381..1070ebd097 100644 --- a/paddle/legacy/gserver/layers/FactorizationMachineLayer.h +++ b/paddle/legacy/gserver/layers/FactorizationMachineLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/FeatureMapExpandLayer.cpp b/paddle/legacy/gserver/layers/FeatureMapExpandLayer.cpp index d95f0b9b3d..417756a286 100644 --- a/paddle/legacy/gserver/layers/FeatureMapExpandLayer.cpp +++ b/paddle/legacy/gserver/layers/FeatureMapExpandLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/FullyConnectedLayer.cpp b/paddle/legacy/gserver/layers/FullyConnectedLayer.cpp index 21ffa01d95..0ffb4876f8 100644 --- a/paddle/legacy/gserver/layers/FullyConnectedLayer.cpp +++ b/paddle/legacy/gserver/layers/FullyConnectedLayer.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "FullyConnectedLayer.h" #include #include -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/SparseMatrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/FullyConnectedLayer.h b/paddle/legacy/gserver/layers/FullyConnectedLayer.h index e0f9d6ce55..a8a1c54e55 100644 --- a/paddle/legacy/gserver/layers/FullyConnectedLayer.h +++ b/paddle/legacy/gserver/layers/FullyConnectedLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/GatedRecurrentLayer.h b/paddle/legacy/gserver/layers/GatedRecurrentLayer.h index 46508dc977..8bbf01ce20 100644 --- a/paddle/legacy/gserver/layers/GatedRecurrentLayer.h +++ b/paddle/legacy/gserver/layers/GatedRecurrentLayer.h @@ -17,7 +17,7 @@ limitations under the License. */ #include "GruCompute.h" #include "Layer.h" #include "SequenceToBatch.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/GruCompute.cpp b/paddle/legacy/gserver/layers/GruCompute.cpp index 48ddbc413e..d50c959e43 100644 --- a/paddle/legacy/gserver/layers/GruCompute.cpp +++ b/paddle/legacy/gserver/layers/GruCompute.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "GruCompute.h" #include "hl_recurrent_apply.cuh" -#include "paddle/function/GruFunctor.h" +#include "paddle/legacy/function/GruFunctor.h" #include "paddle/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/InterpolationLayer.cpp b/paddle/legacy/gserver/layers/InterpolationLayer.cpp index 509c07cf22..aabfdc55ba 100644 --- a/paddle/legacy/gserver/layers/InterpolationLayer.cpp +++ b/paddle/legacy/gserver/layers/InterpolationLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/L2DistanceLayer.h b/paddle/legacy/gserver/layers/L2DistanceLayer.h index 44e688e137..aa8aabd9ca 100644 --- a/paddle/legacy/gserver/layers/L2DistanceLayer.h +++ b/paddle/legacy/gserver/layers/L2DistanceLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/Layer.cpp b/paddle/legacy/gserver/layers/Layer.cpp index 32e2f4c9dd..f580b8e697 100644 --- a/paddle/legacy/gserver/layers/Layer.cpp +++ b/paddle/legacy/gserver/layers/Layer.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "paddle/utils/Util.h" #include "CostLayer.h" -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/SparseMatrix.h" #include "paddle/utils/Error.h" #include "paddle/utils/Logging.h" diff --git a/paddle/legacy/gserver/layers/Layer.h b/paddle/legacy/gserver/layers/Layer.h index 1df5404240..65ec3bd03f 100644 --- a/paddle/legacy/gserver/layers/Layer.h +++ b/paddle/legacy/gserver/layers/Layer.h @@ -17,12 +17,12 @@ limitations under the License. */ #include #include #include "ModelConfig.pb.h" -#include "paddle/function/Function.h" +#include "paddle/legacy/function/Function.h" #include "paddle/legacy/gserver/activations/ActivationFunction.h" -#include "paddle/math/CpuSparseMatrix.h" -#include "paddle/parameter/Argument.h" -#include "paddle/parameter/Parameter.h" -#include "paddle/parameter/Weight.h" +#include "paddle/legacy/math/CpuSparseMatrix.h" +#include "paddle/legacy/parameter/Argument.h" +#include "paddle/legacy/parameter/Parameter.h" +#include "paddle/legacy/parameter/Weight.h" #include "paddle/utils/ClassRegistrar.h" #include "paddle/utils/Util.h" diff --git a/paddle/legacy/gserver/layers/LinearChainCRF.h b/paddle/legacy/gserver/layers/LinearChainCRF.h index e802b701d0..65e2390543 100644 --- a/paddle/legacy/gserver/layers/LinearChainCRF.h +++ b/paddle/legacy/gserver/layers/LinearChainCRF.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/LinearChainCTC.h b/paddle/legacy/gserver/layers/LinearChainCTC.h index 5b325a0deb..e6c4c7bfe0 100644 --- a/paddle/legacy/gserver/layers/LinearChainCTC.h +++ b/paddle/legacy/gserver/layers/LinearChainCTC.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/LstmLayer.cpp b/paddle/legacy/gserver/layers/LstmLayer.cpp index f65ae6a3e6..bb40ec0585 100644 --- a/paddle/legacy/gserver/layers/LstmLayer.cpp +++ b/paddle/legacy/gserver/layers/LstmLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "LstmLayer.h" -#include "paddle/math/BaseMatrix.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/BaseMatrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Stat.h" DECLARE_bool(prev_batch_state); diff --git a/paddle/legacy/gserver/layers/LstmLayer.h b/paddle/legacy/gserver/layers/LstmLayer.h index 76dfe8146b..8c8b382f50 100644 --- a/paddle/legacy/gserver/layers/LstmLayer.h +++ b/paddle/legacy/gserver/layers/LstmLayer.h @@ -17,8 +17,8 @@ limitations under the License. */ #include "Layer.h" #include "LstmCompute.h" #include "SequenceToBatch.h" -#include "paddle/math/BaseMatrix.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/BaseMatrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/MDLstmLayer.cpp b/paddle/legacy/gserver/layers/MDLstmLayer.cpp index 22c28157c5..4838183e8c 100644 --- a/paddle/legacy/gserver/layers/MDLstmLayer.cpp +++ b/paddle/legacy/gserver/layers/MDLstmLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "LstmLayer.h" -#include "paddle/math/BaseMatrix.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/BaseMatrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/MKLDNNConvLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNConvLayer.cpp index a442a0a013..01c20d240b 100644 --- a/paddle/legacy/gserver/layers/MKLDNNConvLayer.cpp +++ b/paddle/legacy/gserver/layers/MKLDNNConvLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "MKLDNNConvLayer.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" #include "paddle/utils/Logging.h" using namespace mkldnn; // NOLINT diff --git a/paddle/legacy/gserver/layers/MKLDNNLayer.h b/paddle/legacy/gserver/layers/MKLDNNLayer.h index 2b164d0d3b..b8f292684c 100644 --- a/paddle/legacy/gserver/layers/MKLDNNLayer.h +++ b/paddle/legacy/gserver/layers/MKLDNNLayer.h @@ -18,7 +18,7 @@ limitations under the License. */ #include "Layer.h" #include "MKLDNNBase.h" #include "mkldnn.hpp" -#include "paddle/math/MKLDNNMatrix.h" +#include "paddle/legacy/math/MKLDNNMatrix.h" #include "paddle/utils/Stat.h" DECLARE_bool(use_mkldnn); diff --git a/paddle/legacy/gserver/layers/MKLDNNPoolLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNPoolLayer.cpp index 3be848c749..99c419be88 100644 --- a/paddle/legacy/gserver/layers/MKLDNNPoolLayer.cpp +++ b/paddle/legacy/gserver/layers/MKLDNNPoolLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "MKLDNNPoolLayer.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" #include "paddle/utils/Logging.h" using namespace mkldnn; // NOLINT diff --git a/paddle/legacy/gserver/layers/MKLPackedWeight.h b/paddle/legacy/gserver/layers/MKLPackedWeight.h index b01a961d00..47f225bd03 100644 --- a/paddle/legacy/gserver/layers/MKLPackedWeight.h +++ b/paddle/legacy/gserver/layers/MKLPackedWeight.h @@ -14,9 +14,9 @@ limitations under the License. */ #pragma once -#include "paddle/math/MathFunctions.h" -#include "paddle/parameter/Parameter.h" -#include "paddle/parameter/Weight.h" +#include "paddle/legacy/math/MathFunctions.h" +#include "paddle/legacy/parameter/Parameter.h" +#include "paddle/legacy/parameter/Weight.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/MaxLayer.h b/paddle/legacy/gserver/layers/MaxLayer.h index e46f997c34..6b3491cde5 100644 --- a/paddle/legacy/gserver/layers/MaxLayer.h +++ b/paddle/legacy/gserver/layers/MaxLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "SequencePoolLayer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/MaxOutLayer.h b/paddle/legacy/gserver/layers/MaxOutLayer.h index 0eb8674b4c..e56f34b8e0 100644 --- a/paddle/legacy/gserver/layers/MaxOutLayer.h +++ b/paddle/legacy/gserver/layers/MaxOutLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/MaxPoolWithMaskLayer.h b/paddle/legacy/gserver/layers/MaxPoolWithMaskLayer.h index c948364f6b..fcd5388abe 100644 --- a/paddle/legacy/gserver/layers/MaxPoolWithMaskLayer.h +++ b/paddle/legacy/gserver/layers/MaxPoolWithMaskLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include #include "PoolLayer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/MultiplexLayer.cpp b/paddle/legacy/gserver/layers/MultiplexLayer.cpp index 43ecc48cd9..54a554a1a9 100644 --- a/paddle/legacy/gserver/layers/MultiplexLayer.cpp +++ b/paddle/legacy/gserver/layers/MultiplexLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/NCELayer.cpp b/paddle/legacy/gserver/layers/NCELayer.cpp index cc48fe100f..ae4d640816 100644 --- a/paddle/legacy/gserver/layers/NCELayer.cpp +++ b/paddle/legacy/gserver/layers/NCELayer.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include "Layer.h" #include "MultinomialSampler.h" -#include "paddle/math/MathFunctions.h" +#include "paddle/legacy/math/MathFunctions.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/NormLayer.h b/paddle/legacy/gserver/layers/NormLayer.h index 3807584415..5ac00034d0 100644 --- a/paddle/legacy/gserver/layers/NormLayer.h +++ b/paddle/legacy/gserver/layers/NormLayer.h @@ -17,7 +17,7 @@ limitations under the License. */ #include #include "Layer.h" #include "NormLayer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/NormProjectionLayer.h b/paddle/legacy/gserver/layers/NormProjectionLayer.h index 64803a1603..492d1fcb72 100644 --- a/paddle/legacy/gserver/layers/NormProjectionLayer.h +++ b/paddle/legacy/gserver/layers/NormProjectionLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include #include "NormLayer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/Operator.h b/paddle/legacy/gserver/layers/Operator.h index 42d525ef3e..20a248985e 100644 --- a/paddle/legacy/gserver/layers/Operator.h +++ b/paddle/legacy/gserver/layers/Operator.h @@ -15,10 +15,10 @@ limitations under the License. */ #pragma once #include "ModelConfig.pb.h" -#include "paddle/parameter/Parameter.h" +#include "paddle/legacy/parameter/Parameter.h" #include "Layer.h" -#include "paddle/parameter/Argument.h" +#include "paddle/legacy/parameter/Argument.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/OuterProdLayer.cpp b/paddle/legacy/gserver/layers/OuterProdLayer.cpp index 11a910f331..7988560d5a 100644 --- a/paddle/legacy/gserver/layers/OuterProdLayer.cpp +++ b/paddle/legacy/gserver/layers/OuterProdLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/ParameterReluLayer.h b/paddle/legacy/gserver/layers/ParameterReluLayer.h index 4553413fcd..a4abd7af75 100644 --- a/paddle/legacy/gserver/layers/ParameterReluLayer.h +++ b/paddle/legacy/gserver/layers/ParameterReluLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/Pool3DLayer.h b/paddle/legacy/gserver/layers/Pool3DLayer.h index 32605f8b70..6851c44ab2 100644 --- a/paddle/legacy/gserver/layers/Pool3DLayer.h +++ b/paddle/legacy/gserver/layers/Pool3DLayer.h @@ -16,8 +16,8 @@ limitations under the License. */ #include #include "Layer.h" -#include "paddle/math/MathUtils.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/MathUtils.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/PoolLayer.h b/paddle/legacy/gserver/layers/PoolLayer.h index 99f8f148e2..0808dfae84 100644 --- a/paddle/legacy/gserver/layers/PoolLayer.h +++ b/paddle/legacy/gserver/layers/PoolLayer.h @@ -16,8 +16,8 @@ limitations under the License. */ #include #include "Layer.h" -#include "paddle/math/MathUtils.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/MathUtils.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/PoolProjection.h b/paddle/legacy/gserver/layers/PoolProjection.h index 8004cc1550..d01b6a13f0 100644 --- a/paddle/legacy/gserver/layers/PoolProjection.h +++ b/paddle/legacy/gserver/layers/PoolProjection.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Projection.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/PoolProjectionLayer.h b/paddle/legacy/gserver/layers/PoolProjectionLayer.h index 9ad144cc2a..fcd35bbba4 100644 --- a/paddle/legacy/gserver/layers/PoolProjectionLayer.h +++ b/paddle/legacy/gserver/layers/PoolProjectionLayer.h @@ -17,7 +17,7 @@ limitations under the License. */ #include #include "PoolLayer.h" #include "PoolProjection.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/PowerLayer.cpp b/paddle/legacy/gserver/layers/PowerLayer.cpp index 7e8d60db8f..26a57fcfdd 100644 --- a/paddle/legacy/gserver/layers/PowerLayer.cpp +++ b/paddle/legacy/gserver/layers/PowerLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/PriorBox.cpp b/paddle/legacy/gserver/layers/PriorBox.cpp index 39d2c2d737..83aab6e366 100644 --- a/paddle/legacy/gserver/layers/PriorBox.cpp +++ b/paddle/legacy/gserver/layers/PriorBox.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/BaseMatrix.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/BaseMatrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/Projection.h b/paddle/legacy/gserver/layers/Projection.h index 88a41355cf..974f5a2cac 100644 --- a/paddle/legacy/gserver/layers/Projection.h +++ b/paddle/legacy/gserver/layers/Projection.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "Layer.h" #include "ModelConfig.pb.h" -#include "paddle/parameter/Parameter.h" +#include "paddle/legacy/parameter/Parameter.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ResizeLayer.cpp b/paddle/legacy/gserver/layers/ResizeLayer.cpp index d4ae994593..8f8aad820f 100644 --- a/paddle/legacy/gserver/layers/ResizeLayer.cpp +++ b/paddle/legacy/gserver/layers/ResizeLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/BaseMatrix.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/BaseMatrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/RotateLayer.h b/paddle/legacy/gserver/layers/RotateLayer.h index 7ecbff2016..498e24372b 100644 --- a/paddle/legacy/gserver/layers/RotateLayer.h +++ b/paddle/legacy/gserver/layers/RotateLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/ScalingLayer.cpp b/paddle/legacy/gserver/layers/ScalingLayer.cpp index 15e07daebe..e68ff8905e 100644 --- a/paddle/legacy/gserver/layers/ScalingLayer.cpp +++ b/paddle/legacy/gserver/layers/ScalingLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.cpp b/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.cpp index 43c98993f3..a181f55d91 100644 --- a/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.cpp +++ b/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "SelectiveFullyConnectedLayer.h" #include #include -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/SparseMatrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.h b/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.h index 4b32ce8b16..068da57d8d 100644 --- a/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.h +++ b/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SequenceConcatLayer.cpp b/paddle/legacy/gserver/layers/SequenceConcatLayer.cpp index c84c3ce4f0..024ca048b4 100644 --- a/paddle/legacy/gserver/layers/SequenceConcatLayer.cpp +++ b/paddle/legacy/gserver/layers/SequenceConcatLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/SequenceLastInstanceLayer.cpp b/paddle/legacy/gserver/layers/SequenceLastInstanceLayer.cpp index 28d0a9296d..b00bf65997 100644 --- a/paddle/legacy/gserver/layers/SequenceLastInstanceLayer.cpp +++ b/paddle/legacy/gserver/layers/SequenceLastInstanceLayer.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "paddle/utils/Logging.h" #include "SequencePoolLayer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SequencePoolLayer.h b/paddle/legacy/gserver/layers/SequencePoolLayer.h index 01183060af..1c019b3130 100644 --- a/paddle/legacy/gserver/layers/SequencePoolLayer.h +++ b/paddle/legacy/gserver/layers/SequencePoolLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/SequenceReshapeLayer.cpp b/paddle/legacy/gserver/layers/SequenceReshapeLayer.cpp index 319310af8c..f72acadec9 100644 --- a/paddle/legacy/gserver/layers/SequenceReshapeLayer.cpp +++ b/paddle/legacy/gserver/layers/SequenceReshapeLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/SequenceSliceLayer.cpp b/paddle/legacy/gserver/layers/SequenceSliceLayer.cpp index a6d810b583..65b4787fed 100644 --- a/paddle/legacy/gserver/layers/SequenceSliceLayer.cpp +++ b/paddle/legacy/gserver/layers/SequenceSliceLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/Vector.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/SequenceToBatch.h b/paddle/legacy/gserver/layers/SequenceToBatch.h index 5200e702d9..7ed517937d 100644 --- a/paddle/legacy/gserver/layers/SequenceToBatch.h +++ b/paddle/legacy/gserver/layers/SequenceToBatch.h @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #pragma once -#include "paddle/math/Matrix.h" -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/Vector.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SlopeInterceptLayer.cpp b/paddle/legacy/gserver/layers/SlopeInterceptLayer.cpp index f7f4735c1b..beb288e4ad 100644 --- a/paddle/legacy/gserver/layers/SlopeInterceptLayer.cpp +++ b/paddle/legacy/gserver/layers/SlopeInterceptLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/SpatialPyramidPoolLayer.h b/paddle/legacy/gserver/layers/SpatialPyramidPoolLayer.h index 421bdfe09c..6cdfba33b3 100644 --- a/paddle/legacy/gserver/layers/SpatialPyramidPoolLayer.h +++ b/paddle/legacy/gserver/layers/SpatialPyramidPoolLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "Layer.h" #include "PoolProjection.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" #include "paddle/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SubNestedSequenceLayer.cpp b/paddle/legacy/gserver/layers/SubNestedSequenceLayer.cpp index e2bb00bbfa..4f648ec01c 100644 --- a/paddle/legacy/gserver/layers/SubNestedSequenceLayer.cpp +++ b/paddle/legacy/gserver/layers/SubNestedSequenceLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/Vector.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/SubSequenceLayer.cpp b/paddle/legacy/gserver/layers/SubSequenceLayer.cpp index ba49f5710f..6b27550048 100644 --- a/paddle/legacy/gserver/layers/SubSequenceLayer.cpp +++ b/paddle/legacy/gserver/layers/SubSequenceLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/Vector.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/SumToOneNormLayer.cpp b/paddle/legacy/gserver/layers/SumToOneNormLayer.cpp index 00764717e8..4cd173a8c7 100644 --- a/paddle/legacy/gserver/layers/SumToOneNormLayer.cpp +++ b/paddle/legacy/gserver/layers/SumToOneNormLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/layers/TensorLayer.h b/paddle/legacy/gserver/layers/TensorLayer.h index 5c1ee40ced..1c30f7c889 100644 --- a/paddle/legacy/gserver/layers/TensorLayer.h +++ b/paddle/legacy/gserver/layers/TensorLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/TransLayer.h b/paddle/legacy/gserver/layers/TransLayer.h index 1cd8fd91f7..0a6b13933f 100644 --- a/paddle/legacy/gserver/layers/TransLayer.h +++ b/paddle/legacy/gserver/layers/TransLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/UpsampleLayer.h b/paddle/legacy/gserver/layers/UpsampleLayer.h index c9d079c314..ea12a711a8 100644 --- a/paddle/legacy/gserver/layers/UpsampleLayer.h +++ b/paddle/legacy/gserver/layers/UpsampleLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include #include "Layer.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" diff --git a/paddle/legacy/gserver/tests/test_BatchNorm.cpp b/paddle/legacy/gserver/tests/test_BatchNorm.cpp index 528a3db978..c7a65a3051 100644 --- a/paddle/legacy/gserver/tests/test_BatchNorm.cpp +++ b/paddle/legacy/gserver/tests/test_BatchNorm.cpp @@ -20,8 +20,8 @@ limitations under the License. */ #include "paddle/utils/GlobalConstants.h" #include "LayerGradUtil.h" -#include "paddle/cuda/include/hl_batch_norm.h" -#include "paddle/math/tests/TensorCheck.h" +#include "paddle/legacy/cuda/include/hl_batch_norm.h" +#include "paddle/legacy/math/tests/TensorCheck.h" #include "paddle/testing/TestUtil.h" using namespace paddle; // NOLINT diff --git a/paddle/legacy/gserver/tests/test_CompareSparse.cpp b/paddle/legacy/gserver/tests/test_CompareSparse.cpp index c14e80036c..51433c9aaa 100644 --- a/paddle/legacy/gserver/tests/test_CompareSparse.cpp +++ b/paddle/legacy/gserver/tests/test_CompareSparse.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include "paddle/trainer/Trainer.h" #include -#include +#include using namespace paddle; // NOLINT using namespace std; // NOLINT diff --git a/paddle/legacy/gserver/tests/test_ConvTrans.cpp b/paddle/legacy/gserver/tests/test_ConvTrans.cpp index b858094b13..41a03f3b44 100644 --- a/paddle/legacy/gserver/tests/test_ConvTrans.cpp +++ b/paddle/legacy/gserver/tests/test_ConvTrans.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include #include "ModelConfig.pb.h" #include "paddle/legacy/gserver/layers/DataLayer.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" #include "paddle/utils/GlobalConstants.h" #include "LayerGradUtil.h" diff --git a/paddle/legacy/gserver/tests/test_ConvUnify.cpp b/paddle/legacy/gserver/tests/test_ConvUnify.cpp index 325276d37e..a01a2b6937 100644 --- a/paddle/legacy/gserver/tests/test_ConvUnify.cpp +++ b/paddle/legacy/gserver/tests/test_ConvUnify.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include #include "ModelConfig.pb.h" #include "paddle/legacy/gserver/layers/DataLayer.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" #include "paddle/utils/GlobalConstants.h" #include "LayerGradUtil.h" diff --git a/paddle/legacy/gserver/tests/test_LayerGrad.cpp b/paddle/legacy/gserver/tests/test_LayerGrad.cpp index 7cd33e8d43..979cf8ee67 100644 --- a/paddle/legacy/gserver/tests/test_LayerGrad.cpp +++ b/paddle/legacy/gserver/tests/test_LayerGrad.cpp @@ -20,7 +20,7 @@ limitations under the License. */ #include #include "ModelConfig.pb.h" #include "paddle/legacy/gserver/layers/DataLayer.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" #include "LayerGradUtil.h" #include "paddle/testing/TestUtil.h" diff --git a/paddle/legacy/gserver/tests/test_MKLDNN.cpp b/paddle/legacy/gserver/tests/test_MKLDNN.cpp index 80dea89f3c..a20ccfb772 100644 --- a/paddle/legacy/gserver/tests/test_MKLDNN.cpp +++ b/paddle/legacy/gserver/tests/test_MKLDNN.cpp @@ -19,7 +19,7 @@ limitations under the License. */ #include "MKLDNNTester.h" #include "ModelConfig.pb.h" #include "paddle/legacy/gserver/activations/MKLDNNActivation.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" using namespace paddle; // NOLINT diff --git a/paddle/legacy/gserver/tests/test_MaxPoolingWithMaskOutput.cpp b/paddle/legacy/gserver/tests/test_MaxPoolingWithMaskOutput.cpp index 5188d2abed..2bc261b4a8 100644 --- a/paddle/legacy/gserver/tests/test_MaxPoolingWithMaskOutput.cpp +++ b/paddle/legacy/gserver/tests/test_MaxPoolingWithMaskOutput.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include #include "LayerGradUtil.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" #include "paddle/testing/TestUtil.h" using namespace paddle; diff --git a/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp b/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp index 405a45b086..9f9fee7ef6 100644 --- a/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp +++ b/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include #include -#include +#include #include #include #include diff --git a/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp b/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp index 2ae051b4d7..160d95f158 100644 --- a/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp +++ b/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp @@ -23,7 +23,7 @@ limitations under the License. */ #include "paddle/legacy/gserver/layers/FullyConnectedLayer.h" #include "paddle/legacy/gserver/layers/Layer.h" #include "paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.h" -#include "paddle/math/CpuSparseMatrix.h" +#include "paddle/legacy/math/CpuSparseMatrix.h" using namespace paddle; // NOLINT using namespace std; // NOLINT diff --git a/paddle/legacy/gserver/tests/test_Upsample.cpp b/paddle/legacy/gserver/tests/test_Upsample.cpp index 39b902fcc7..940d46baf7 100644 --- a/paddle/legacy/gserver/tests/test_Upsample.cpp +++ b/paddle/legacy/gserver/tests/test_Upsample.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include #include "LayerGradUtil.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" #include "paddle/testing/TestUtil.h" void setPoolConfig(paddle::TestConfig* config, diff --git a/paddle/math/Allocator.h b/paddle/legacy/math/Allocator.h similarity index 100% rename from paddle/math/Allocator.h rename to paddle/legacy/math/Allocator.h diff --git a/paddle/math/BaseMatrix.cu b/paddle/legacy/math/BaseMatrix.cu similarity index 100% rename from paddle/math/BaseMatrix.cu rename to paddle/legacy/math/BaseMatrix.cu diff --git a/paddle/math/BaseMatrix.h b/paddle/legacy/math/BaseMatrix.h similarity index 100% rename from paddle/math/BaseMatrix.h rename to paddle/legacy/math/BaseMatrix.h diff --git a/paddle/math/CMakeLists.txt b/paddle/legacy/math/CMakeLists.txt similarity index 84% rename from paddle/math/CMakeLists.txt rename to paddle/legacy/math/CMakeLists.txt index 3c897b5f3e..9992ec71f4 100644 --- a/paddle/math/CMakeLists.txt +++ b/paddle/legacy/math/CMakeLists.txt @@ -37,13 +37,13 @@ if(MOBILE_INFERENCE) ${CMAKE_CURRENT_SOURCE_DIR}/SparseRowMatrix.cpp) endif() set(MATH_SOURCES - "${PADDLE_SOURCE_DIR}/paddle/math/BaseMatrix.cu" - "${PADDLE_SOURCE_DIR}/paddle/math/TrainingAlgorithmOp.cu" + "${PADDLE_SOURCE_DIR}/paddle/legacy/math/BaseMatrix.cu" + "${PADDLE_SOURCE_DIR}/paddle/legacy/math/TrainingAlgorithmOp.cu" ${MATH_SOURCES}) if(NOT WITH_GPU) # then compile BaseMatrix.cu as c++ file - compile_cu_as_cpp("${PADDLE_SOURCE_DIR}/paddle/math/BaseMatrix.cu") - compile_cu_as_cpp("${PADDLE_SOURCE_DIR}/paddle/math/TrainingAlgorithmOp.cu") + compile_cu_as_cpp("${PADDLE_SOURCE_DIR}/paddle/legacy/math/BaseMatrix.cu") + compile_cu_as_cpp("${PADDLE_SOURCE_DIR}/paddle/legacy/math/TrainingAlgorithmOp.cu") add_library(paddle_math STATIC ${MATH_SOURCES}) else() diff --git a/paddle/math/CpuSparseMatrix.cpp b/paddle/legacy/math/CpuSparseMatrix.cpp similarity index 99% rename from paddle/math/CpuSparseMatrix.cpp rename to paddle/legacy/math/CpuSparseMatrix.cpp index 023450ffb7..88683ec984 100644 --- a/paddle/math/CpuSparseMatrix.cpp +++ b/paddle/legacy/math/CpuSparseMatrix.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include "SparseMatrix.h" #include "float.h" #include "hl_gpu.h" -#include "paddle/math/MathUtils.h" +#include "paddle/legacy/math/MathUtils.h" #include "paddle/utils/Util.h" namespace paddle { diff --git a/paddle/math/CpuSparseMatrix.h b/paddle/legacy/math/CpuSparseMatrix.h similarity index 100% rename from paddle/math/CpuSparseMatrix.h rename to paddle/legacy/math/CpuSparseMatrix.h diff --git a/paddle/math/ExecViaCpu.h b/paddle/legacy/math/ExecViaCpu.h similarity index 100% rename from paddle/math/ExecViaCpu.h rename to paddle/legacy/math/ExecViaCpu.h diff --git a/paddle/math/MKLDNNMatrix.cpp b/paddle/legacy/math/MKLDNNMatrix.cpp similarity index 100% rename from paddle/math/MKLDNNMatrix.cpp rename to paddle/legacy/math/MKLDNNMatrix.cpp diff --git a/paddle/math/MKLDNNMatrix.h b/paddle/legacy/math/MKLDNNMatrix.h similarity index 99% rename from paddle/math/MKLDNNMatrix.h rename to paddle/legacy/math/MKLDNNMatrix.h index d4a78f3e54..5a0e5f8592 100644 --- a/paddle/math/MKLDNNMatrix.h +++ b/paddle/legacy/math/MKLDNNMatrix.h @@ -17,7 +17,7 @@ limitations under the License. */ #include #include "Matrix.h" #include "mkldnn.hpp" -#include "paddle/parameter/Parameter.h" +#include "paddle/legacy/parameter/Parameter.h" namespace paddle { diff --git a/paddle/math/MathFunctions.cpp b/paddle/legacy/math/MathFunctions.cpp similarity index 99% rename from paddle/math/MathFunctions.cpp rename to paddle/legacy/math/MathFunctions.cpp index f48119aa51..152aeb5d64 100644 --- a/paddle/math/MathFunctions.cpp +++ b/paddle/legacy/math/MathFunctions.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/math/MathFunctions.h" +#include "paddle/legacy/math/MathFunctions.h" #include "hl_matrix_apply.cuh" #include "hl_matrix_ops.cuh" #include "paddle/utils/DynamicLoader.h" diff --git a/paddle/math/MathFunctions.h b/paddle/legacy/math/MathFunctions.h similarity index 100% rename from paddle/math/MathFunctions.h rename to paddle/legacy/math/MathFunctions.h diff --git a/paddle/math/MathUtils.cpp b/paddle/legacy/math/MathUtils.cpp similarity index 100% rename from paddle/math/MathUtils.cpp rename to paddle/legacy/math/MathUtils.cpp diff --git a/paddle/math/MathUtils.h b/paddle/legacy/math/MathUtils.h similarity index 100% rename from paddle/math/MathUtils.h rename to paddle/legacy/math/MathUtils.h diff --git a/paddle/math/Matrix.cpp b/paddle/legacy/math/Matrix.cpp similarity index 99% rename from paddle/math/Matrix.cpp rename to paddle/legacy/math/Matrix.cpp index bcd6dfe1fd..50b0bc5011 100644 --- a/paddle/math/Matrix.cpp +++ b/paddle/legacy/math/Matrix.cpp @@ -29,7 +29,7 @@ limitations under the License. */ #include "paddle/utils/Logging.h" #include "NEONFunctions.h" -#include "paddle/function/GemmFunctor.h" +#include "paddle/legacy/function/GemmFunctor.h" #include "paddle/utils/ThreadLocal.h" #include "SIMDFunctions.h" diff --git a/paddle/math/Matrix.h b/paddle/legacy/math/Matrix.h similarity index 99% rename from paddle/math/Matrix.h rename to paddle/legacy/math/Matrix.h index 4c3b2c9536..74dc690792 100644 --- a/paddle/math/Matrix.h +++ b/paddle/legacy/math/Matrix.h @@ -31,7 +31,7 @@ limitations under the License. */ namespace paddle { -/// TODO(tianbing), move to paddle/function/TensorType.h +/// TODO(tianbing), move to paddle/legacy/function/TensorType.h enum SparseValueType { NO_VALUE = 0, FLOAT_VALUE = 1 }; /** @@ -57,7 +57,7 @@ enum SparseValueType { NO_VALUE = 0, FLOAT_VALUE = 1 }; * value [1, 1, 2, 2, 5] * @endcode */ -/// TODO(tianbing), move to paddle/function/TensorType.h +/// TODO(tianbing), move to paddle/legacy/function/TensorType.h enum SparseFormat { SPARSE_CSR = 0, SPARSE_CSC = 1 }; class Matrix; diff --git a/paddle/math/MatrixBitCode.cpp b/paddle/legacy/math/MatrixBitCode.cpp similarity index 100% rename from paddle/math/MatrixBitCode.cpp rename to paddle/legacy/math/MatrixBitCode.cpp diff --git a/paddle/math/MemoryHandle.cpp b/paddle/legacy/math/MemoryHandle.cpp similarity index 100% rename from paddle/math/MemoryHandle.cpp rename to paddle/legacy/math/MemoryHandle.cpp diff --git a/paddle/math/MemoryHandle.h b/paddle/legacy/math/MemoryHandle.h similarity index 100% rename from paddle/math/MemoryHandle.h rename to paddle/legacy/math/MemoryHandle.h diff --git a/paddle/math/NEONFunctions.cpp b/paddle/legacy/math/NEONFunctions.cpp similarity index 100% rename from paddle/math/NEONFunctions.cpp rename to paddle/legacy/math/NEONFunctions.cpp diff --git a/paddle/math/NEONFunctions.h b/paddle/legacy/math/NEONFunctions.h similarity index 100% rename from paddle/math/NEONFunctions.h rename to paddle/legacy/math/NEONFunctions.h diff --git a/paddle/math/PoolAllocator.cpp b/paddle/legacy/math/PoolAllocator.cpp similarity index 100% rename from paddle/math/PoolAllocator.cpp rename to paddle/legacy/math/PoolAllocator.cpp diff --git a/paddle/math/PoolAllocator.h b/paddle/legacy/math/PoolAllocator.h similarity index 100% rename from paddle/math/PoolAllocator.h rename to paddle/legacy/math/PoolAllocator.h diff --git a/paddle/math/RowBuffer.h b/paddle/legacy/math/RowBuffer.h similarity index 100% rename from paddle/math/RowBuffer.h rename to paddle/legacy/math/RowBuffer.h diff --git a/paddle/math/SIMDFunctions.cpp b/paddle/legacy/math/SIMDFunctions.cpp similarity index 100% rename from paddle/math/SIMDFunctions.cpp rename to paddle/legacy/math/SIMDFunctions.cpp diff --git a/paddle/math/SIMDFunctions.h b/paddle/legacy/math/SIMDFunctions.h similarity index 100% rename from paddle/math/SIMDFunctions.h rename to paddle/legacy/math/SIMDFunctions.h diff --git a/paddle/math/SparseMatrix.cpp b/paddle/legacy/math/SparseMatrix.cpp similarity index 100% rename from paddle/math/SparseMatrix.cpp rename to paddle/legacy/math/SparseMatrix.cpp diff --git a/paddle/math/SparseMatrix.h b/paddle/legacy/math/SparseMatrix.h similarity index 100% rename from paddle/math/SparseMatrix.h rename to paddle/legacy/math/SparseMatrix.h diff --git a/paddle/math/SparseRowMatrix.cpp b/paddle/legacy/math/SparseRowMatrix.cpp similarity index 100% rename from paddle/math/SparseRowMatrix.cpp rename to paddle/legacy/math/SparseRowMatrix.cpp diff --git a/paddle/math/SparseRowMatrix.h b/paddle/legacy/math/SparseRowMatrix.h similarity index 100% rename from paddle/math/SparseRowMatrix.h rename to paddle/legacy/math/SparseRowMatrix.h diff --git a/paddle/math/Storage.cpp b/paddle/legacy/math/Storage.cpp similarity index 100% rename from paddle/math/Storage.cpp rename to paddle/legacy/math/Storage.cpp diff --git a/paddle/math/Storage.h b/paddle/legacy/math/Storage.h similarity index 100% rename from paddle/math/Storage.h rename to paddle/legacy/math/Storage.h diff --git a/paddle/math/TensorApply.h b/paddle/legacy/math/TensorApply.h similarity index 100% rename from paddle/math/TensorApply.h rename to paddle/legacy/math/TensorApply.h diff --git a/paddle/math/TensorAssign.h b/paddle/legacy/math/TensorAssign.h similarity index 100% rename from paddle/math/TensorAssign.h rename to paddle/legacy/math/TensorAssign.h diff --git a/paddle/math/TensorEvaluate.h b/paddle/legacy/math/TensorEvaluate.h similarity index 100% rename from paddle/math/TensorEvaluate.h rename to paddle/legacy/math/TensorEvaluate.h diff --git a/paddle/math/TensorExpression.h b/paddle/legacy/math/TensorExpression.h similarity index 100% rename from paddle/math/TensorExpression.h rename to paddle/legacy/math/TensorExpression.h diff --git a/paddle/math/TrainingAlgorithmOp.cu b/paddle/legacy/math/TrainingAlgorithmOp.cu similarity index 100% rename from paddle/math/TrainingAlgorithmOp.cu rename to paddle/legacy/math/TrainingAlgorithmOp.cu diff --git a/paddle/math/TrainingAlgorithmOp.h b/paddle/legacy/math/TrainingAlgorithmOp.h similarity index 100% rename from paddle/math/TrainingAlgorithmOp.h rename to paddle/legacy/math/TrainingAlgorithmOp.h diff --git a/paddle/math/Vector.cpp b/paddle/legacy/math/Vector.cpp similarity index 100% rename from paddle/math/Vector.cpp rename to paddle/legacy/math/Vector.cpp diff --git a/paddle/math/Vector.h b/paddle/legacy/math/Vector.h similarity index 100% rename from paddle/math/Vector.h rename to paddle/legacy/math/Vector.h diff --git a/paddle/math/tests/CMakeLists.txt b/paddle/legacy/math/tests/CMakeLists.txt similarity index 100% rename from paddle/math/tests/CMakeLists.txt rename to paddle/legacy/math/tests/CMakeLists.txt diff --git a/paddle/math/tests/OriginalOptimizerApi.h b/paddle/legacy/math/tests/OriginalOptimizerApi.h similarity index 99% rename from paddle/math/tests/OriginalOptimizerApi.h rename to paddle/legacy/math/tests/OriginalOptimizerApi.h index e30d784b23..1f942e28f4 100644 --- a/paddle/math/tests/OriginalOptimizerApi.h +++ b/paddle/legacy/math/tests/OriginalOptimizerApi.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Vector.h" #include "paddle/utils/GlobalConstants.h" using namespace paddle; // NOLINT diff --git a/paddle/math/tests/PerfUtils.h b/paddle/legacy/math/tests/PerfUtils.h similarity index 100% rename from paddle/math/tests/PerfUtils.h rename to paddle/legacy/math/tests/PerfUtils.h diff --git a/paddle/math/tests/TensorCheck.h b/paddle/legacy/math/tests/TensorCheck.h similarity index 99% rename from paddle/math/tests/TensorCheck.h rename to paddle/legacy/math/tests/TensorCheck.h index 40ac04ef5d..41c8ece282 100644 --- a/paddle/math/tests/TensorCheck.h +++ b/paddle/legacy/math/tests/TensorCheck.h @@ -20,7 +20,7 @@ limitations under the License. */ */ #include -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace autotest { diff --git a/paddle/math/tests/TestUtils.h b/paddle/legacy/math/tests/TestUtils.h similarity index 98% rename from paddle/math/tests/TestUtils.h rename to paddle/legacy/math/tests/TestUtils.h index e1966ec8a7..60e76359da 100644 --- a/paddle/math/tests/TestUtils.h +++ b/paddle/legacy/math/tests/TestUtils.h @@ -41,8 +41,8 @@ limitations under the License. */ #include #include "TensorCheck.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/SparseMatrix.h" namespace autotest { diff --git a/paddle/math/tests/test_Allocator.cpp b/paddle/legacy/math/tests/test_Allocator.cpp similarity index 96% rename from paddle/math/tests/test_Allocator.cpp rename to paddle/legacy/math/tests/test_Allocator.cpp index 84bc1c1d9e..710b55f57e 100644 --- a/paddle/math/tests/test_Allocator.cpp +++ b/paddle/legacy/math/tests/test_Allocator.cpp @@ -16,9 +16,9 @@ limitations under the License. */ #include "paddle/utils/Logging.h" #include "paddle/utils/Util.h" #define private public -#include "paddle/math/Allocator.h" -#include "paddle/math/MemoryHandle.h" -#include "paddle/math/PoolAllocator.h" +#include "paddle/legacy/math/Allocator.h" +#include "paddle/legacy/math/MemoryHandle.h" +#include "paddle/legacy/math/PoolAllocator.h" using namespace paddle; // NOLINT diff --git a/paddle/math/tests/test_BaseMatrix.cpp b/paddle/legacy/math/tests/test_BaseMatrix.cpp similarity index 99% rename from paddle/math/tests/test_BaseMatrix.cpp rename to paddle/legacy/math/tests/test_BaseMatrix.cpp index 6f7beb60c8..488765c6ac 100644 --- a/paddle/math/tests/test_BaseMatrix.cpp +++ b/paddle/legacy/math/tests/test_BaseMatrix.cpp @@ -21,7 +21,7 @@ limitations under the License. */ #include #include "TestUtils.h" -#include "paddle/math/BaseMatrix.h" +#include "paddle/legacy/math/BaseMatrix.h" using paddle::BaseMatrix; using paddle::Matrix; diff --git a/paddle/math/tests/test_CpuGpuVector.cpp b/paddle/legacy/math/tests/test_CpuGpuVector.cpp similarity index 98% rename from paddle/math/tests/test_CpuGpuVector.cpp rename to paddle/legacy/math/tests/test_CpuGpuVector.cpp index 395541a76a..3807158200 100644 --- a/paddle/math/tests/test_CpuGpuVector.cpp +++ b/paddle/legacy/math/tests/test_CpuGpuVector.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #ifdef PADDLE_WITH_CUDA #include -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Vector.h" #include "paddle/utils/Util.h" #include "test_matrixUtil.h" diff --git a/paddle/math/tests/test_ExecViaCpu.cpp b/paddle/legacy/math/tests/test_ExecViaCpu.cpp similarity index 98% rename from paddle/math/tests/test_ExecViaCpu.cpp rename to paddle/legacy/math/tests/test_ExecViaCpu.cpp index 72256cb9d4..55a3f5f505 100644 --- a/paddle/math/tests/test_ExecViaCpu.cpp +++ b/paddle/legacy/math/tests/test_ExecViaCpu.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include #include #include -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/SparseMatrix.h" using namespace paddle; // NOLINT diff --git a/paddle/math/tests/test_FPException.cpp b/paddle/legacy/math/tests/test_FPException.cpp similarity index 98% rename from paddle/math/tests/test_FPException.cpp rename to paddle/legacy/math/tests/test_FPException.cpp index d87fdcda9e..6fd17f2969 100644 --- a/paddle/math/tests/test_FPException.cpp +++ b/paddle/legacy/math/tests/test_FPException.cpp @@ -30,7 +30,7 @@ limitations under the License. */ */ #include -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Common.h" using namespace paddle; // NOLINT diff --git a/paddle/math/tests/test_GpuProfiler.cpp b/paddle/legacy/math/tests/test_GpuProfiler.cpp similarity index 98% rename from paddle/math/tests/test_GpuProfiler.cpp rename to paddle/legacy/math/tests/test_GpuProfiler.cpp index 828159660b..450c9a035e 100644 --- a/paddle/math/tests/test_GpuProfiler.cpp +++ b/paddle/legacy/math/tests/test_GpuProfiler.cpp @@ -15,8 +15,8 @@ limitations under the License. */ #ifdef PADDLE_WITH_CUDA #include -#include "paddle/math/Matrix.h" -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/SparseMatrix.h" #include "paddle/testing/TestUtil.h" #include "paddle/utils/Stat.h" #include "paddle/utils/Util.h" diff --git a/paddle/math/tests/test_Matrix.cpp b/paddle/legacy/math/tests/test_Matrix.cpp similarity index 100% rename from paddle/math/tests/test_Matrix.cpp rename to paddle/legacy/math/tests/test_Matrix.cpp diff --git a/paddle/math/tests/test_RowBuffer.cpp b/paddle/legacy/math/tests/test_RowBuffer.cpp similarity index 98% rename from paddle/math/tests/test_RowBuffer.cpp rename to paddle/legacy/math/tests/test_RowBuffer.cpp index e38de853e0..2ef8cd303d 100644 --- a/paddle/math/tests/test_RowBuffer.cpp +++ b/paddle/legacy/math/tests/test_RowBuffer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include "paddle/math/RowBuffer.h" +#include "paddle/legacy/math/RowBuffer.h" TEST(RowBuffer, testAutoGrow) { paddle::RowBuffer buf(128); diff --git a/paddle/math/tests/test_SIMDFunctions.cpp b/paddle/legacy/math/tests/test_SIMDFunctions.cpp similarity index 99% rename from paddle/math/tests/test_SIMDFunctions.cpp rename to paddle/legacy/math/tests/test_SIMDFunctions.cpp index b692679436..eef281b3f7 100644 --- a/paddle/math/tests/test_SIMDFunctions.cpp +++ b/paddle/legacy/math/tests/test_SIMDFunctions.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/math/SIMDFunctions.h" +#include "paddle/legacy/math/SIMDFunctions.h" #include "paddle/utils/Util.h" #include diff --git a/paddle/math/tests/test_SparseMatrix.cpp b/paddle/legacy/math/tests/test_SparseMatrix.cpp similarity index 100% rename from paddle/math/tests/test_SparseMatrix.cpp rename to paddle/legacy/math/tests/test_SparseMatrix.cpp diff --git a/paddle/math/tests/test_Tensor.cu b/paddle/legacy/math/tests/test_Tensor.cu similarity index 99% rename from paddle/math/tests/test_Tensor.cu rename to paddle/legacy/math/tests/test_Tensor.cu index acb2da86d0..3ce056d661 100644 --- a/paddle/math/tests/test_Tensor.cu +++ b/paddle/legacy/math/tests/test_Tensor.cu @@ -14,7 +14,7 @@ limitations under the License. */ #include #include "TensorCheck.h" -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" using paddle::Matrix; using paddle::CpuMatrix; diff --git a/paddle/math/tests/test_TrainingAlgorithm.cpp b/paddle/legacy/math/tests/test_TrainingAlgorithm.cpp similarity index 99% rename from paddle/math/tests/test_TrainingAlgorithm.cpp rename to paddle/legacy/math/tests/test_TrainingAlgorithm.cpp index fb58d26734..3ae9cf111a 100644 --- a/paddle/math/tests/test_TrainingAlgorithm.cpp +++ b/paddle/legacy/math/tests/test_TrainingAlgorithm.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include "OriginalOptimizerApi.h" #include "PerfUtils.h" #include "TensorCheck.h" -#include "paddle/math/TrainingAlgorithmOp.h" +#include "paddle/legacy/math/TrainingAlgorithmOp.h" #include "paddle/utils/Util.h" using namespace paddle; // NOLINT diff --git a/paddle/math/tests/test_batchTranspose.cpp b/paddle/legacy/math/tests/test_batchTranspose.cpp similarity index 100% rename from paddle/math/tests/test_batchTranspose.cpp rename to paddle/legacy/math/tests/test_batchTranspose.cpp diff --git a/paddle/math/tests/test_lazyAssign.cu b/paddle/legacy/math/tests/test_lazyAssign.cu similarity index 97% rename from paddle/math/tests/test_lazyAssign.cu rename to paddle/legacy/math/tests/test_lazyAssign.cu index cbd74bbfe3..cf8c3d7719 100644 --- a/paddle/math/tests/test_lazyAssign.cu +++ b/paddle/legacy/math/tests/test_lazyAssign.cu @@ -15,8 +15,8 @@ limitations under the License. */ #include #include "PerfUtils.h" #include "TensorCheck.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/TensorAssign.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/TensorAssign.h" using paddle::BaseMatrix; using paddle::CpuMatrix; diff --git a/paddle/math/tests/test_matrixCompare.cpp b/paddle/legacy/math/tests/test_matrixCompare.cpp similarity index 99% rename from paddle/math/tests/test_matrixCompare.cpp rename to paddle/legacy/math/tests/test_matrixCompare.cpp index e45ddd433f..98521aeb04 100644 --- a/paddle/math/tests/test_matrixCompare.cpp +++ b/paddle/legacy/math/tests/test_matrixCompare.cpp @@ -18,9 +18,9 @@ limitations under the License. */ #include #include "TensorCheck.h" -#include "paddle/math/MathUtils.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/MathUtils.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/SparseMatrix.h" #include "paddle/testing/TestUtil.h" #include "paddle/utils/DynamicLoader.h" #include "paddle/utils/Stat.h" diff --git a/paddle/math/tests/test_matrixUtil.h b/paddle/legacy/math/tests/test_matrixUtil.h similarity index 99% rename from paddle/math/tests/test_matrixUtil.h rename to paddle/legacy/math/tests/test_matrixUtil.h index 86297547dc..bb80172b1e 100644 --- a/paddle/math/tests/test_matrixUtil.h +++ b/paddle/legacy/math/tests/test_matrixUtil.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include #include -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/SparseMatrix.h" namespace paddle { diff --git a/paddle/math/tests/test_perturbation.cpp b/paddle/legacy/math/tests/test_perturbation.cpp similarity index 100% rename from paddle/math/tests/test_perturbation.cpp rename to paddle/legacy/math/tests/test_perturbation.cpp diff --git a/paddle/math/tests/test_sparseMatrixCompare.cpp b/paddle/legacy/math/tests/test_sparseMatrixCompare.cpp similarity index 99% rename from paddle/math/tests/test_sparseMatrixCompare.cpp rename to paddle/legacy/math/tests/test_sparseMatrixCompare.cpp index 12647d21a2..959c9d40b0 100644 --- a/paddle/math/tests/test_sparseMatrixCompare.cpp +++ b/paddle/legacy/math/tests/test_sparseMatrixCompare.cpp @@ -18,7 +18,7 @@ limitations under the License. */ /// only cpu version. #include -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" #include "paddle/utils/Util.h" #include "test_matrixUtil.h" diff --git a/paddle/optimizer/CMakeLists.txt b/paddle/legacy/optimizer/CMakeLists.txt similarity index 100% rename from paddle/optimizer/CMakeLists.txt rename to paddle/legacy/optimizer/CMakeLists.txt diff --git a/paddle/optimizer/adadelta_optimizer.cc b/paddle/legacy/optimizer/adadelta_optimizer.cc similarity index 100% rename from paddle/optimizer/adadelta_optimizer.cc rename to paddle/legacy/optimizer/adadelta_optimizer.cc diff --git a/paddle/optimizer/adadelta_optimizer.h b/paddle/legacy/optimizer/adadelta_optimizer.h similarity index 100% rename from paddle/optimizer/adadelta_optimizer.h rename to paddle/legacy/optimizer/adadelta_optimizer.h diff --git a/paddle/optimizer/adagrad_optimizer.cc b/paddle/legacy/optimizer/adagrad_optimizer.cc similarity index 100% rename from paddle/optimizer/adagrad_optimizer.cc rename to paddle/legacy/optimizer/adagrad_optimizer.cc diff --git a/paddle/optimizer/adagrad_optimizer.h b/paddle/legacy/optimizer/adagrad_optimizer.h similarity index 100% rename from paddle/optimizer/adagrad_optimizer.h rename to paddle/legacy/optimizer/adagrad_optimizer.h diff --git a/paddle/optimizer/adam_optimizer.cc b/paddle/legacy/optimizer/adam_optimizer.cc similarity index 100% rename from paddle/optimizer/adam_optimizer.cc rename to paddle/legacy/optimizer/adam_optimizer.cc diff --git a/paddle/optimizer/adam_optimizer.h b/paddle/legacy/optimizer/adam_optimizer.h similarity index 100% rename from paddle/optimizer/adam_optimizer.h rename to paddle/legacy/optimizer/adam_optimizer.h diff --git a/paddle/optimizer/lr_policy.h b/paddle/legacy/optimizer/lr_policy.h similarity index 100% rename from paddle/optimizer/lr_policy.h rename to paddle/legacy/optimizer/lr_policy.h diff --git a/paddle/optimizer/optimizer.cc b/paddle/legacy/optimizer/optimizer.cc similarity index 100% rename from paddle/optimizer/optimizer.cc rename to paddle/legacy/optimizer/optimizer.cc diff --git a/paddle/optimizer/optimizer.h b/paddle/legacy/optimizer/optimizer.h similarity index 100% rename from paddle/optimizer/optimizer.h rename to paddle/legacy/optimizer/optimizer.h diff --git a/paddle/optimizer/parameter_optimizer.cc b/paddle/legacy/optimizer/parameter_optimizer.cc similarity index 100% rename from paddle/optimizer/parameter_optimizer.cc rename to paddle/legacy/optimizer/parameter_optimizer.cc diff --git a/paddle/optimizer/parameter_optimizer.h b/paddle/legacy/optimizer/parameter_optimizer.h similarity index 100% rename from paddle/optimizer/parameter_optimizer.h rename to paddle/legacy/optimizer/parameter_optimizer.h diff --git a/paddle/optimizer/parameter_optimizer_test.cc b/paddle/legacy/optimizer/parameter_optimizer_test.cc similarity index 100% rename from paddle/optimizer/parameter_optimizer_test.cc rename to paddle/legacy/optimizer/parameter_optimizer_test.cc diff --git a/paddle/optimizer/serialization.h b/paddle/legacy/optimizer/serialization.h similarity index 100% rename from paddle/optimizer/serialization.h rename to paddle/legacy/optimizer/serialization.h diff --git a/paddle/optimizer/serialization_test.cc b/paddle/legacy/optimizer/serialization_test.cc similarity index 100% rename from paddle/optimizer/serialization_test.cc rename to paddle/legacy/optimizer/serialization_test.cc diff --git a/paddle/optimizer/sgd_optimizer.cc b/paddle/legacy/optimizer/sgd_optimizer.cc similarity index 100% rename from paddle/optimizer/sgd_optimizer.cc rename to paddle/legacy/optimizer/sgd_optimizer.cc diff --git a/paddle/optimizer/sgd_optimizer.h b/paddle/legacy/optimizer/sgd_optimizer.h similarity index 100% rename from paddle/optimizer/sgd_optimizer.h rename to paddle/legacy/optimizer/sgd_optimizer.h diff --git a/paddle/optimizer/tensor.h b/paddle/legacy/optimizer/tensor.h similarity index 100% rename from paddle/optimizer/tensor.h rename to paddle/legacy/optimizer/tensor.h diff --git a/paddle/parameter/Argument.cpp b/paddle/legacy/parameter/Argument.cpp similarity index 99% rename from paddle/parameter/Argument.cpp rename to paddle/legacy/parameter/Argument.cpp index 94522f718a..3f1d599e90 100644 --- a/paddle/parameter/Argument.cpp +++ b/paddle/legacy/parameter/Argument.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Argument.h" -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/SparseMatrix.h" #include diff --git a/paddle/parameter/Argument.h b/paddle/legacy/parameter/Argument.h similarity index 98% rename from paddle/parameter/Argument.h rename to paddle/legacy/parameter/Argument.h index e580d38216..f936d944cb 100644 --- a/paddle/parameter/Argument.h +++ b/paddle/legacy/parameter/Argument.h @@ -13,9 +13,9 @@ limitations under the License. */ #include "hl_gpu.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/Vector.h" -#include "paddle/parameter/Parameter.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/Vector.h" +#include "paddle/legacy/parameter/Parameter.h" #include "paddle/utils/Locks.h" #include "paddle/utils/Util.h" diff --git a/paddle/parameter/AverageOptimizer.cpp b/paddle/legacy/parameter/AverageOptimizer.cpp similarity index 100% rename from paddle/parameter/AverageOptimizer.cpp rename to paddle/legacy/parameter/AverageOptimizer.cpp diff --git a/paddle/parameter/AverageOptimizer.h b/paddle/legacy/parameter/AverageOptimizer.h similarity index 100% rename from paddle/parameter/AverageOptimizer.h rename to paddle/legacy/parameter/AverageOptimizer.h diff --git a/paddle/parameter/CMakeLists.txt b/paddle/legacy/parameter/CMakeLists.txt similarity index 100% rename from paddle/parameter/CMakeLists.txt rename to paddle/legacy/parameter/CMakeLists.txt diff --git a/paddle/parameter/FirstOrderOptimizer.cpp b/paddle/legacy/parameter/FirstOrderOptimizer.cpp similarity index 99% rename from paddle/parameter/FirstOrderOptimizer.cpp rename to paddle/legacy/parameter/FirstOrderOptimizer.cpp index 182e833405..89bb840f82 100644 --- a/paddle/parameter/FirstOrderOptimizer.cpp +++ b/paddle/legacy/parameter/FirstOrderOptimizer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "FirstOrderOptimizer.h" -#include "paddle/math/TrainingAlgorithmOp.h" +#include "paddle/legacy/math/TrainingAlgorithmOp.h" #include "paddle/utils/Flags.h" #include "paddle/utils/Util.h" diff --git a/paddle/parameter/FirstOrderOptimizer.h b/paddle/legacy/parameter/FirstOrderOptimizer.h similarity index 100% rename from paddle/parameter/FirstOrderOptimizer.h rename to paddle/legacy/parameter/FirstOrderOptimizer.h diff --git a/paddle/parameter/LearningRateScheduler.cpp b/paddle/legacy/parameter/LearningRateScheduler.cpp similarity index 100% rename from paddle/parameter/LearningRateScheduler.cpp rename to paddle/legacy/parameter/LearningRateScheduler.cpp diff --git a/paddle/parameter/LearningRateScheduler.h b/paddle/legacy/parameter/LearningRateScheduler.h similarity index 100% rename from paddle/parameter/LearningRateScheduler.h rename to paddle/legacy/parameter/LearningRateScheduler.h diff --git a/paddle/parameter/OptimizerFunctions.cpp b/paddle/legacy/parameter/OptimizerFunctions.cpp similarity index 100% rename from paddle/parameter/OptimizerFunctions.cpp rename to paddle/legacy/parameter/OptimizerFunctions.cpp diff --git a/paddle/parameter/OptimizerFunctions.h b/paddle/legacy/parameter/OptimizerFunctions.h similarity index 100% rename from paddle/parameter/OptimizerFunctions.h rename to paddle/legacy/parameter/OptimizerFunctions.h diff --git a/paddle/parameter/OptimizerWithRegularizer.cpp b/paddle/legacy/parameter/OptimizerWithRegularizer.cpp similarity index 100% rename from paddle/parameter/OptimizerWithRegularizer.cpp rename to paddle/legacy/parameter/OptimizerWithRegularizer.cpp diff --git a/paddle/parameter/OptimizerWithRegularizer.h b/paddle/legacy/parameter/OptimizerWithRegularizer.h similarity index 100% rename from paddle/parameter/OptimizerWithRegularizer.h rename to paddle/legacy/parameter/OptimizerWithRegularizer.h diff --git a/paddle/parameter/Parameter.cpp b/paddle/legacy/parameter/Parameter.cpp similarity index 99% rename from paddle/parameter/Parameter.cpp rename to paddle/legacy/parameter/Parameter.cpp index 0e6ea90f3d..d00019027b 100644 --- a/paddle/parameter/Parameter.cpp +++ b/paddle/legacy/parameter/Parameter.cpp @@ -22,9 +22,9 @@ limitations under the License. */ #include "ParameterUpdateFunctions.h" #include "ThreadLocalBuffer.h" #include "hl_gpu.h" -#include "paddle/math/CpuSparseMatrix.h" -#include "paddle/math/MathUtils.h" -#include "paddle/math/SparseRowMatrix.h" +#include "paddle/legacy/math/CpuSparseMatrix.h" +#include "paddle/legacy/math/MathUtils.h" +#include "paddle/legacy/math/SparseRowMatrix.h" #include "paddle/utils/Logging.h" DEFINE_int32(enable_grad_share, diff --git a/paddle/parameter/Parameter.h b/paddle/legacy/parameter/Parameter.h similarity index 99% rename from paddle/parameter/Parameter.h rename to paddle/legacy/parameter/Parameter.h index ef519bf35a..75cfb3f4aa 100644 --- a/paddle/parameter/Parameter.h +++ b/paddle/legacy/parameter/Parameter.h @@ -24,8 +24,8 @@ limitations under the License. */ #include "TrainerConfig.pb.h" #include "ParameterUpdaterHook.h" -#include "paddle/math/Matrix.h" -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/Vector.h" #include "paddle/utils/Common.h" #include "paddle/utils/GlobalConstants.h" #include "paddle/utils/Locks.h" diff --git a/paddle/parameter/ParameterOptimizer.cpp b/paddle/legacy/parameter/ParameterOptimizer.cpp similarity index 100% rename from paddle/parameter/ParameterOptimizer.cpp rename to paddle/legacy/parameter/ParameterOptimizer.cpp diff --git a/paddle/parameter/ParameterOptimizer.h b/paddle/legacy/parameter/ParameterOptimizer.h similarity index 100% rename from paddle/parameter/ParameterOptimizer.h rename to paddle/legacy/parameter/ParameterOptimizer.h diff --git a/paddle/parameter/ParameterUpdateFunctions.cpp b/paddle/legacy/parameter/ParameterUpdateFunctions.cpp similarity index 100% rename from paddle/parameter/ParameterUpdateFunctions.cpp rename to paddle/legacy/parameter/ParameterUpdateFunctions.cpp diff --git a/paddle/parameter/ParameterUpdateFunctions.h b/paddle/legacy/parameter/ParameterUpdateFunctions.h similarity index 97% rename from paddle/parameter/ParameterUpdateFunctions.h rename to paddle/legacy/parameter/ParameterUpdateFunctions.h index 7434baa2d3..3dbde93b91 100644 --- a/paddle/parameter/ParameterUpdateFunctions.h +++ b/paddle/legacy/parameter/ParameterUpdateFunctions.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Vector.h" #include "paddle/utils/Common.h" namespace paddle { diff --git a/paddle/parameter/ParameterUpdaterBase.cpp b/paddle/legacy/parameter/ParameterUpdaterBase.cpp similarity index 100% rename from paddle/parameter/ParameterUpdaterBase.cpp rename to paddle/legacy/parameter/ParameterUpdaterBase.cpp diff --git a/paddle/parameter/ParameterUpdaterBase.h b/paddle/legacy/parameter/ParameterUpdaterBase.h similarity index 100% rename from paddle/parameter/ParameterUpdaterBase.h rename to paddle/legacy/parameter/ParameterUpdaterBase.h diff --git a/paddle/parameter/ParameterUpdaterHook.cpp b/paddle/legacy/parameter/ParameterUpdaterHook.cpp similarity index 98% rename from paddle/parameter/ParameterUpdaterHook.cpp rename to paddle/legacy/parameter/ParameterUpdaterHook.cpp index 989185b66a..e4677f894a 100644 --- a/paddle/parameter/ParameterUpdaterHook.cpp +++ b/paddle/legacy/parameter/ParameterUpdaterHook.cpp @@ -22,8 +22,8 @@ limitations under the License. */ #include #include -#include "paddle/math/Vector.h" -#include "paddle/parameter/Parameter.h" +#include "paddle/legacy/math/Vector.h" +#include "paddle/legacy/parameter/Parameter.h" #include "paddle/utils/Flags.h" #include "paddle/utils/Util.h" diff --git a/paddle/parameter/ParameterUpdaterHook.h b/paddle/legacy/parameter/ParameterUpdaterHook.h similarity index 100% rename from paddle/parameter/ParameterUpdaterHook.h rename to paddle/legacy/parameter/ParameterUpdaterHook.h diff --git a/paddle/parameter/Regularizer.cpp b/paddle/legacy/parameter/Regularizer.cpp similarity index 100% rename from paddle/parameter/Regularizer.cpp rename to paddle/legacy/parameter/Regularizer.cpp diff --git a/paddle/parameter/Regularizer.h b/paddle/legacy/parameter/Regularizer.h similarity index 100% rename from paddle/parameter/Regularizer.h rename to paddle/legacy/parameter/Regularizer.h diff --git a/paddle/parameter/ThreadLocalBuffer.cpp b/paddle/legacy/parameter/ThreadLocalBuffer.cpp similarity index 100% rename from paddle/parameter/ThreadLocalBuffer.cpp rename to paddle/legacy/parameter/ThreadLocalBuffer.cpp diff --git a/paddle/parameter/ThreadLocalBuffer.h b/paddle/legacy/parameter/ThreadLocalBuffer.h similarity index 94% rename from paddle/parameter/ThreadLocalBuffer.h rename to paddle/legacy/parameter/ThreadLocalBuffer.h index 07c96e59d0..d360feeed6 100644 --- a/paddle/parameter/ThreadLocalBuffer.h +++ b/paddle/legacy/parameter/ThreadLocalBuffer.h @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #pragma once -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Vector.h" namespace paddle { namespace parameter { diff --git a/paddle/parameter/Weight.cpp b/paddle/legacy/parameter/Weight.cpp similarity index 100% rename from paddle/parameter/Weight.cpp rename to paddle/legacy/parameter/Weight.cpp diff --git a/paddle/parameter/Weight.h b/paddle/legacy/parameter/Weight.h similarity index 90% rename from paddle/parameter/Weight.h rename to paddle/legacy/parameter/Weight.h index 113dd6530c..241c8d829c 100644 --- a/paddle/parameter/Weight.h +++ b/paddle/legacy/parameter/Weight.h @@ -16,9 +16,9 @@ limitations under the License. */ #include #include -#include "paddle/math/Matrix.h" -#include "paddle/math/SparseRowMatrix.h" -#include "paddle/parameter/Parameter.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/SparseRowMatrix.h" +#include "paddle/legacy/parameter/Parameter.h" namespace paddle { diff --git a/paddle/parameter/tests/CMakeLists.txt b/paddle/legacy/parameter/tests/CMakeLists.txt similarity index 100% rename from paddle/parameter/tests/CMakeLists.txt rename to paddle/legacy/parameter/tests/CMakeLists.txt diff --git a/paddle/parameter/tests/test_argument.cpp b/paddle/legacy/parameter/tests/test_argument.cpp similarity index 97% rename from paddle/parameter/tests/test_argument.cpp rename to paddle/legacy/parameter/tests/test_argument.cpp index 54ceb3e087..0c632e0cd1 100644 --- a/paddle/parameter/tests/test_argument.cpp +++ b/paddle/legacy/parameter/tests/test_argument.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include +#include using namespace paddle; // NOLINT diff --git a/paddle/parameter/tests/test_common.cpp b/paddle/legacy/parameter/tests/test_common.cpp similarity index 98% rename from paddle/parameter/tests/test_common.cpp rename to paddle/legacy/parameter/tests/test_common.cpp index 89dcc6c751..3c4ee11934 100644 --- a/paddle/parameter/tests/test_common.cpp +++ b/paddle/legacy/parameter/tests/test_common.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include #include -#include +#include #include #include #include diff --git a/paddle/pserver/BaseClient.cpp b/paddle/legacy/pserver/BaseClient.cpp similarity index 100% rename from paddle/pserver/BaseClient.cpp rename to paddle/legacy/pserver/BaseClient.cpp diff --git a/paddle/pserver/BaseClient.h b/paddle/legacy/pserver/BaseClient.h similarity index 99% rename from paddle/pserver/BaseClient.h rename to paddle/legacy/pserver/BaseClient.h index d50230e73a..92bb0a8b6a 100644 --- a/paddle/pserver/BaseClient.h +++ b/paddle/legacy/pserver/BaseClient.h @@ -15,8 +15,8 @@ limitations under the License. */ #pragma once #include "ParameterService.pb.h" -#include "paddle/math/Matrix.h" -#include "paddle/pserver/ProtoServer.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/pserver/ProtoServer.h" #include "paddle/utils/Common.h" #include "paddle/utils/Queue.h" diff --git a/paddle/pserver/CMakeLists.txt b/paddle/legacy/pserver/CMakeLists.txt similarity index 100% rename from paddle/pserver/CMakeLists.txt rename to paddle/legacy/pserver/CMakeLists.txt diff --git a/paddle/pserver/LightNetwork.cpp b/paddle/legacy/pserver/LightNetwork.cpp similarity index 100% rename from paddle/pserver/LightNetwork.cpp rename to paddle/legacy/pserver/LightNetwork.cpp diff --git a/paddle/pserver/LightNetwork.h b/paddle/legacy/pserver/LightNetwork.h similarity index 100% rename from paddle/pserver/LightNetwork.h rename to paddle/legacy/pserver/LightNetwork.h diff --git a/paddle/pserver/ParameterClient2.cpp b/paddle/legacy/pserver/ParameterClient2.cpp similarity index 99% rename from paddle/pserver/ParameterClient2.cpp rename to paddle/legacy/pserver/ParameterClient2.cpp index 43e4902b0f..98b3966250 100644 --- a/paddle/pserver/ParameterClient2.cpp +++ b/paddle/legacy/pserver/ParameterClient2.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include #include "ParameterClient2.h" -#include "paddle/math/SparseRowMatrix.h" +#include "paddle/legacy/math/SparseRowMatrix.h" #include "paddle/utils/Flags.h" #include "paddle/utils/Stat.h" #include "paddle/utils/StringUtil.h" diff --git a/paddle/pserver/ParameterClient2.h b/paddle/legacy/pserver/ParameterClient2.h similarity index 99% rename from paddle/pserver/ParameterClient2.h rename to paddle/legacy/pserver/ParameterClient2.h index c96bb78715..2bc0e47866 100644 --- a/paddle/pserver/ParameterClient2.h +++ b/paddle/legacy/pserver/ParameterClient2.h @@ -19,10 +19,10 @@ limitations under the License. */ #include #include -#include "paddle/math/Matrix.h" -#include "paddle/math/Vector.h" -#include "paddle/parameter/Parameter.h" -#include "paddle/pserver/BaseClient.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/Vector.h" +#include "paddle/legacy/parameter/Parameter.h" +#include "paddle/legacy/pserver/BaseClient.h" #include "paddle/utils/Common.h" #include "paddle/utils/Flags.h" #include "paddle/utils/Locks.h" diff --git a/paddle/pserver/ParameterServer2.cpp b/paddle/legacy/pserver/ParameterServer2.cpp similarity index 99% rename from paddle/pserver/ParameterServer2.cpp rename to paddle/legacy/pserver/ParameterServer2.cpp index f8814714c2..293fc7ca69 100644 --- a/paddle/pserver/ParameterServer2.cpp +++ b/paddle/legacy/pserver/ParameterServer2.cpp @@ -17,15 +17,15 @@ limitations under the License. */ #include #include -#include "paddle/math/SIMDFunctions.h" -#include "paddle/parameter/AverageOptimizer.h" -#include "paddle/parameter/FirstOrderOptimizer.h" -#include "paddle/parameter/OptimizerFunctions.h" -#include "paddle/parameter/OptimizerWithRegularizer.h" -#include "paddle/parameter/ParameterOptimizer.h" -#include "paddle/parameter/ParameterUpdateFunctions.h" -#include "paddle/parameter/Regularizer.h" -#include "paddle/parameter/ThreadLocalBuffer.h" +#include "paddle/legacy/math/SIMDFunctions.h" +#include "paddle/legacy/parameter/AverageOptimizer.h" +#include "paddle/legacy/parameter/FirstOrderOptimizer.h" +#include "paddle/legacy/parameter/OptimizerFunctions.h" +#include "paddle/legacy/parameter/OptimizerWithRegularizer.h" +#include "paddle/legacy/parameter/ParameterOptimizer.h" +#include "paddle/legacy/parameter/ParameterUpdateFunctions.h" +#include "paddle/legacy/parameter/Regularizer.h" +#include "paddle/legacy/parameter/ThreadLocalBuffer.h" #include "paddle/utils/Flags.h" #include "paddle/utils/GlobalConstants.h" #include "paddle/utils/Stat.h" diff --git a/paddle/pserver/ParameterServer2.h b/paddle/legacy/pserver/ParameterServer2.h similarity index 99% rename from paddle/pserver/ParameterServer2.h rename to paddle/legacy/pserver/ParameterServer2.h index 0b8ef5c170..040699878d 100644 --- a/paddle/pserver/ParameterServer2.h +++ b/paddle/legacy/pserver/ParameterServer2.h @@ -25,10 +25,10 @@ limitations under the License. */ #include #include -#include "paddle/math/Matrix.h" -#include "paddle/math/Vector.h" -#include "paddle/parameter/Parameter.h" -#include "paddle/parameter/ParameterOptimizer.h" +#include "paddle/legacy/math/Matrix.h" +#include "paddle/legacy/math/Vector.h" +#include "paddle/legacy/parameter/Parameter.h" +#include "paddle/legacy/parameter/ParameterOptimizer.h" #include "paddle/utils/Common.h" #include "paddle/utils/Locks.h" #include "paddle/utils/Stat.h" diff --git a/paddle/pserver/ParameterServer2Main.cpp b/paddle/legacy/pserver/ParameterServer2Main.cpp similarity index 100% rename from paddle/pserver/ParameterServer2Main.cpp rename to paddle/legacy/pserver/ParameterServer2Main.cpp diff --git a/paddle/pserver/ParameterServerController.cpp b/paddle/legacy/pserver/ParameterServerController.cpp similarity index 100% rename from paddle/pserver/ParameterServerController.cpp rename to paddle/legacy/pserver/ParameterServerController.cpp diff --git a/paddle/pserver/ParameterServerController.h b/paddle/legacy/pserver/ParameterServerController.h similarity index 100% rename from paddle/pserver/ParameterServerController.h rename to paddle/legacy/pserver/ParameterServerController.h diff --git a/paddle/pserver/ProtoServer.cpp b/paddle/legacy/pserver/ProtoServer.cpp similarity index 100% rename from paddle/pserver/ProtoServer.cpp rename to paddle/legacy/pserver/ProtoServer.cpp diff --git a/paddle/pserver/ProtoServer.h b/paddle/legacy/pserver/ProtoServer.h similarity index 100% rename from paddle/pserver/ProtoServer.h rename to paddle/legacy/pserver/ProtoServer.h diff --git a/paddle/pserver/RDMANetwork.h b/paddle/legacy/pserver/RDMANetwork.h similarity index 100% rename from paddle/pserver/RDMANetwork.h rename to paddle/legacy/pserver/RDMANetwork.h diff --git a/paddle/pserver/SocketChannel.cpp b/paddle/legacy/pserver/SocketChannel.cpp similarity index 100% rename from paddle/pserver/SocketChannel.cpp rename to paddle/legacy/pserver/SocketChannel.cpp diff --git a/paddle/pserver/SocketChannel.h b/paddle/legacy/pserver/SocketChannel.h similarity index 100% rename from paddle/pserver/SocketChannel.h rename to paddle/legacy/pserver/SocketChannel.h diff --git a/paddle/pserver/SparseParameterDistribution.cpp b/paddle/legacy/pserver/SparseParameterDistribution.cpp similarity index 100% rename from paddle/pserver/SparseParameterDistribution.cpp rename to paddle/legacy/pserver/SparseParameterDistribution.cpp diff --git a/paddle/pserver/SparseParameterDistribution.h b/paddle/legacy/pserver/SparseParameterDistribution.h similarity index 100% rename from paddle/pserver/SparseParameterDistribution.h rename to paddle/legacy/pserver/SparseParameterDistribution.h diff --git a/paddle/pserver/test/.gitignore b/paddle/legacy/pserver/test/.gitignore similarity index 100% rename from paddle/pserver/test/.gitignore rename to paddle/legacy/pserver/test/.gitignore diff --git a/paddle/pserver/test/CMakeLists.txt b/paddle/legacy/pserver/test/CMakeLists.txt similarity index 100% rename from paddle/pserver/test/CMakeLists.txt rename to paddle/legacy/pserver/test/CMakeLists.txt diff --git a/paddle/pserver/test/SocketTest.cpp b/paddle/legacy/pserver/test/SocketTest.cpp similarity index 99% rename from paddle/pserver/test/SocketTest.cpp rename to paddle/legacy/pserver/test/SocketTest.cpp index 206cd17c37..bb9ee355dd 100644 --- a/paddle/pserver/test/SocketTest.cpp +++ b/paddle/legacy/pserver/test/SocketTest.cpp @@ -22,7 +22,7 @@ limitations under the License. */ #include -#include "paddle/math/Vector.h" +#include "paddle/legacy/math/Vector.h" #include "paddle/utils/Logging.h" struct MessageHeader { diff --git a/paddle/pserver/test/test_ParameterServer2.cpp b/paddle/legacy/pserver/test/test_ParameterServer2.cpp similarity index 99% rename from paddle/pserver/test/test_ParameterServer2.cpp rename to paddle/legacy/pserver/test/test_ParameterServer2.cpp index 01d179258d..60419f3a4a 100644 --- a/paddle/pserver/test/test_ParameterServer2.cpp +++ b/paddle/legacy/pserver/test/test_ParameterServer2.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include -#include +#include +#include #include #include diff --git a/paddle/pserver/test/test_ProtoServer.cpp b/paddle/legacy/pserver/test/test_ProtoServer.cpp similarity index 98% rename from paddle/pserver/test/test_ProtoServer.cpp rename to paddle/legacy/pserver/test/test_ProtoServer.cpp index a66b14a1cc..8d5e26f995 100644 --- a/paddle/pserver/test/test_ProtoServer.cpp +++ b/paddle/legacy/pserver/test/test_ProtoServer.cpp @@ -15,8 +15,8 @@ limitations under the License. */ #include #include #include "ParameterService.pb.h" -#include "paddle/math/Vector.h" -#include "paddle/pserver/ProtoServer.h" +#include "paddle/legacy/math/Vector.h" +#include "paddle/legacy/pserver/ProtoServer.h" #include "paddle/utils/Stat.h" #include "paddle/utils/Util.h" diff --git a/paddle/pserver/test/test_ProtoServer.sh b/paddle/legacy/pserver/test/test_ProtoServer.sh similarity index 94% rename from paddle/pserver/test/test_ProtoServer.sh rename to paddle/legacy/pserver/test/test_ProtoServer.sh index 970c90b494..1439350847 100755 --- a/paddle/pserver/test/test_ProtoServer.sh +++ b/paddle/legacy/pserver/test/test_ProtoServer.sh @@ -19,7 +19,7 @@ do if [ $port_used_num -eq 0 ] then echo $port; - pserver/test/test_ProtoServer --port=$port + legacy/pserver/test/test_ProtoServer --port=$port if [ $? -eq 0 ] then exit 0 diff --git a/paddle/testing/TestUtil.cpp b/paddle/testing/TestUtil.cpp index cfb8c713d9..fa8efc20f5 100644 --- a/paddle/testing/TestUtil.cpp +++ b/paddle/testing/TestUtil.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "TestUtil.h" #include -#include "paddle/math/SparseMatrix.h" +#include "paddle/legacy/math/SparseMatrix.h" DEFINE_int32(fixed_seq_length, 0, "Produce some sequence of fixed length"); diff --git a/paddle/testing/TestUtil.h b/paddle/testing/TestUtil.h index ec86469aeb..98b864e3c5 100644 --- a/paddle/testing/TestUtil.h +++ b/paddle/testing/TestUtil.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include -#include "paddle/math/Matrix.h" +#include "paddle/legacy/math/Matrix.h" namespace paddle { diff --git a/paddle/trainer/MergeModel.cpp b/paddle/trainer/MergeModel.cpp index 56c38015fb..6624d6d27b 100644 --- a/paddle/trainer/MergeModel.cpp +++ b/paddle/trainer/MergeModel.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include "ParamUtil.h" #include "Trainer.h" -#include "paddle/pserver/ParameterServer2.h" +#include "paddle/legacy/pserver/ParameterServer2.h" #include "paddle/utils/PythonUtil.h" DEFINE_string(model_dir, "", "Directory for separated model files"); diff --git a/paddle/trainer/NewRemoteParameterUpdater.h b/paddle/trainer/NewRemoteParameterUpdater.h index 02693c675e..33c1fa7bdf 100644 --- a/paddle/trainer/NewRemoteParameterUpdater.h +++ b/paddle/trainer/NewRemoteParameterUpdater.h @@ -19,7 +19,7 @@ limitations under the License. */ #include "OptimizerConfig.pb.h" #include "ParameterUpdater.h" #include "libpaddle_pserver_cclient.h" -#include "paddle/pserver/ParameterClient2.h" +#include "paddle/legacy/pserver/ParameterClient2.h" #include "paddle/utils/Queue.h" #include "paddle/utils/Util.h" diff --git a/paddle/trainer/ParameterUpdater.h b/paddle/trainer/ParameterUpdater.h index 4ad9b5af0f..0070254d1c 100644 --- a/paddle/trainer/ParameterUpdater.h +++ b/paddle/trainer/ParameterUpdater.h @@ -17,12 +17,12 @@ limitations under the License. */ #include "paddle/utils/Thread.h" #include "paddle/utils/Util.h" -#include "paddle/parameter/AverageOptimizer.h" -#include "paddle/parameter/FirstOrderOptimizer.h" -#include "paddle/parameter/OptimizerFunctions.h" -#include "paddle/parameter/OptimizerWithRegularizer.h" -#include "paddle/parameter/Parameter.h" -#include "paddle/parameter/ParameterUpdaterBase.h" +#include "paddle/legacy/parameter/AverageOptimizer.h" +#include "paddle/legacy/parameter/FirstOrderOptimizer.h" +#include "paddle/legacy/parameter/OptimizerFunctions.h" +#include "paddle/legacy/parameter/OptimizerWithRegularizer.h" +#include "paddle/legacy/parameter/Parameter.h" +#include "paddle/legacy/parameter/ParameterUpdaterBase.h" #include "TrainerConfig.pb.h" #include "paddle/legacy/gserver/layers/Layer.h" diff --git a/paddle/trainer/RemoteParameterUpdater.h b/paddle/trainer/RemoteParameterUpdater.h index 3a40a46354..7a9b687ac2 100644 --- a/paddle/trainer/RemoteParameterUpdater.h +++ b/paddle/trainer/RemoteParameterUpdater.h @@ -17,7 +17,7 @@ limitations under the License. */ #include #include #include "ParameterUpdater.h" -#include "paddle/pserver/ParameterClient2.h" +#include "paddle/legacy/pserver/ParameterClient2.h" #include "paddle/utils/Queue.h" #include "paddle/utils/Util.h" diff --git a/paddle/trainer/ThreadParameterUpdater.cpp b/paddle/trainer/ThreadParameterUpdater.cpp index 3c85c3aaac..39e63c333e 100644 --- a/paddle/trainer/ThreadParameterUpdater.cpp +++ b/paddle/trainer/ThreadParameterUpdater.cpp @@ -16,8 +16,8 @@ limitations under the License. */ #include "paddle/utils/Logging.h" -#include "paddle/math/SparseRowMatrix.h" -#include "paddle/parameter/ThreadLocalBuffer.h" +#include "paddle/legacy/math/SparseRowMatrix.h" +#include "paddle/legacy/parameter/ThreadLocalBuffer.h" #include "paddle/utils/Thread.h" DECLARE_int32(trainer_count); diff --git a/paddle/trainer/ThreadParameterUpdater.h b/paddle/trainer/ThreadParameterUpdater.h index b5e6a7ce3c..bd0ce99078 100644 --- a/paddle/trainer/ThreadParameterUpdater.h +++ b/paddle/trainer/ThreadParameterUpdater.h @@ -14,12 +14,12 @@ limitations under the License. */ #pragma once -#include "paddle/parameter/AverageOptimizer.h" -#include "paddle/parameter/FirstOrderOptimizer.h" -#include "paddle/parameter/OptimizerFunctions.h" -#include "paddle/parameter/OptimizerWithRegularizer.h" -#include "paddle/parameter/Parameter.h" -#include "paddle/parameter/Regularizer.h" +#include "paddle/legacy/parameter/AverageOptimizer.h" +#include "paddle/legacy/parameter/FirstOrderOptimizer.h" +#include "paddle/legacy/parameter/OptimizerFunctions.h" +#include "paddle/legacy/parameter/OptimizerWithRegularizer.h" +#include "paddle/legacy/parameter/Parameter.h" +#include "paddle/legacy/parameter/Regularizer.h" #include "paddle/utils/Util.h" #include diff --git a/paddle/trainer/TrainerMain.cpp b/paddle/trainer/TrainerMain.cpp index c5c1d484e5..115e5d88a2 100644 --- a/paddle/trainer/TrainerMain.cpp +++ b/paddle/trainer/TrainerMain.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include "paddle/pserver/ParameterServerController.h" +#include "paddle/legacy/pserver/ParameterServerController.h" #include "paddle/utils/PythonUtil.h" #include "ParamUtil.h" diff --git a/paddle/trainer/tests/test_PyDataProviderWrapper.cpp b/paddle/trainer/tests/test_PyDataProviderWrapper.cpp index 675db2e052..e3cd1c904d 100644 --- a/paddle/trainer/tests/test_PyDataProviderWrapper.cpp +++ b/paddle/trainer/tests/test_PyDataProviderWrapper.cpp @@ -16,8 +16,8 @@ limitations under the License. */ #include #include #include -#include -#include +#include +#include #include #include #include diff --git a/paddle/trainer/tests/test_TrainerOnePass.cpp b/paddle/trainer/tests/test_TrainerOnePass.cpp index de12c4d649..1e1b2d2bf4 100644 --- a/paddle/trainer/tests/test_TrainerOnePass.cpp +++ b/paddle/trainer/tests/test_TrainerOnePass.cpp @@ -18,7 +18,7 @@ limitations under the License. */ #include "paddle/trainer/TrainerInternal.h" #include -#include +#include using namespace paddle; // NOLINT using namespace std; // NOLINT diff --git a/python/paddle/v2/inference.py b/python/paddle/v2/inference.py index 14b64742fd..28ee042282 100644 --- a/python/paddle/v2/inference.py +++ b/python/paddle/v2/inference.py @@ -63,7 +63,7 @@ class Inference(object): assert isinstance(val, api.Vector) val.copyFromNumpyArray(parameters.get(name).flatten()) # the setValueUpdated function is called in randomize, zeroMem, - # load function in paddle/parameter/Parameter.cpp. But in the + # load function in paddle/legacy/parameter/Parameter.cpp. But in the # inference mode, the setValueUpdated is never called, it will # cause the parameter will not be dispatched # in MultiGradientMachine for multi-GPU. So setValueUpdated is diff --git a/python/setup.py.in b/python/setup.py.in index 8257f1d5e2..032784f4a2 100644 --- a/python/setup.py.in +++ b/python/setup.py.in @@ -95,7 +95,7 @@ if '${WITH_FLUID_ONLY}'== 'OFF': paddle_bin_dir = 'opt/paddle/bin' paddle_bins = ['${PADDLE_BINARY_DIR}/paddle/trainer/paddle_trainer', '${PADDLE_BINARY_DIR}/paddle/trainer/paddle_merge_model', - '${PADDLE_BINARY_DIR}/paddle/pserver/paddle_pserver_main', + '${PADDLE_BINARY_DIR}/paddle/legacy/pserver/paddle_pserver_main', '${PADDLE_BINARY_DIR}/paddle/scripts/paddle'] package_data={'paddle.fluid': ['core.so']} diff --git a/tools/codestyle/cpplint_pre_commit.hook b/tools/codestyle/cpplint_pre_commit.hook index fde9c9ac1f..041ba868af 100755 --- a/tools/codestyle/cpplint_pre_commit.hook +++ b/tools/codestyle/cpplint_pre_commit.hook @@ -4,7 +4,7 @@ TOTAL_ERRORS=0 # The trick to remove deleted files: https://stackoverflow.com/a/2413151 for file in $(git diff --cached --name-status | awk '$1 != "D" {print $2}'); do - if [[ $file =~ ^(paddle/api/.*|paddle/capi/.*|paddle/contrib/.*|paddle/cuda/.*|paddle/function/.*|paddle/legacy/gserver/.*|paddle/math/.*|paddle/optimizer/.*|paddle/parameter/.*|paddle/pserver/.*|paddle/trainer/.*|paddle/utils/.*) ]]; then + if [[ $file =~ ^(paddle/api/.*|paddle/capi/.*|paddle/contrib/.*|paddle/legacy/cuda/.*|paddle/legacy/function/.*|paddle/legacy/gserver/.*|paddle/legacy/math/.*|paddle/legacy/optimizer/.*|paddle/legacy/parameter/.*|paddle/legacy/pserver/.*|paddle/trainer/.*|paddle/utils/.*|paddle/testing/TestUtil.*) ]]; then continue; else cpplint --filter=-readability/fn_size $file; From 1366832a41785ece0480dbf5d997b80f4080af7a Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Sun, 1 Jul 2018 18:04:48 +0800 Subject: [PATCH 092/130] add dist pass barrier --- paddle/fluid/framework/executor.cc | 18 +++++++--- paddle/fluid/framework/executor.h | 9 +++-- .../operators/distributed/grpc_client.cc | 29 ++++++++++++--- .../fluid/operators/distributed/grpc_client.h | 24 ++++++++----- .../operators/distributed/request_handler.h | 3 ++ .../distributed/request_handler_impl.cc | 36 +++++++++---------- .../fluid/operators/distributed/rpc_client.cc | 2 +- .../fluid/operators/distributed/rpc_client.h | 15 +++++--- .../fluid/operators/distributed/rpc_server.cc | 22 ++++++++++-- .../fluid/operators/distributed/rpc_server.h | 8 ++++- paddle/fluid/pybind/pybind.cc | 3 +- python/paddle/fluid/executor.py | 6 ++++ 12 files changed, 128 insertions(+), 47 deletions(-) diff --git a/paddle/fluid/framework/executor.cc b/paddle/fluid/framework/executor.cc index ae98fccc96..87b0ff0c80 100644 --- a/paddle/fluid/framework/executor.cc +++ b/paddle/fluid/framework/executor.cc @@ -48,10 +48,20 @@ ExecutorPrepareContext::~ExecutorPrepareContext() { Executor::Executor(const platform::Place& place) : place_(place) {} #ifdef PADDLE_WITH_DISTRIBUTE -void Executor::Complete() { - ::paddle::operators::distributed::RPCClient::GetInstance< - ::paddle::operators::distributed::GRPCClient>() - ->SendComplete(); +void Executor::BeginPass() { + auto client = ::paddle::operators::distributed::RPCClient::GetInstance< + ::paddle::operators::distributed::GRPCClient>(); + + client->SendBeginPass(); + client->Wait(); +} + +void Executor::EndPass() { + auto client = ::paddle::operators::distributed::RPCClient::GetInstance< + ::paddle::operators::distributed::GRPCClient>(); + + client->SendEndPass(); + client->Wait(); } #endif diff --git a/paddle/fluid/framework/executor.h b/paddle/fluid/framework/executor.h index 3aa5ffef69..563a4b2bb6 100644 --- a/paddle/fluid/framework/executor.h +++ b/paddle/fluid/framework/executor.h @@ -46,9 +46,14 @@ class Executor { #ifdef PADDLE_WITH_DISTRIBUTE /* - * Sending signal to pserver to mark current trainer stop. + * Sending signal to pserver to mark current pass started. */ - void Complete(); + void BeginPass(); + + /* + * Sending signal to pserver to mark current pass finished. + */ + void EndPass(); #endif /* @Brief diff --git a/paddle/fluid/operators/distributed/grpc_client.cc b/paddle/fluid/operators/distributed/grpc_client.cc index 8228a8c5a3..d8dc667fe7 100644 --- a/paddle/fluid/operators/distributed/grpc_client.cc +++ b/paddle/fluid/operators/distributed/grpc_client.cc @@ -35,9 +35,17 @@ void GRPCClient::InitEventLoop() { client_thread_.reset(new std::thread(std::bind(&GRPCClient::Proceed, this))); } -void GRPCClient::SendComplete() { +void GRPCClient::SendBeginPass() { for (auto& it : channels_) { - this->AsyncSendComplete(it.first); + VLOG(3) << "send begin pass to: " it.first; + this->AsyncSendBeginPass(it.first); + } +} + +void GRPCClient::SendEndPass() { + for (auto& it : channels_) { + VLOG(3) << "send end pass to " << it.first; + this->AsyncSendEndPass(it.first); } } @@ -226,19 +234,32 @@ void GRPCClient::AsyncSendFetchBarrier(const std::string& ep, req_count_++; } -void GRPCClient::AsyncSendComplete(const std::string& ep, int64_t time_out) { +void GRPCClient::AsyncSendBeginPass(const std::string& ep, int64_t time_out) { const auto ch = GetChannel(ep); BatchBarrierProcessor* s = new BatchBarrierProcessor(ch); s->Prepare(time_out); sendrecv::VariableMessage req; - req.set_varname(COMPLETE_MESSAGE); + req.set_varname(BEGIN_PASS_MESSAGE); auto rpc = s->stub_->AsyncSendVariable(s->context_.get(), req, &cq_); rpc->Finish(&s->reply_, &s->status_, reinterpret_cast(s)); req_count_++; } +void GRPCClient::AsyncSendEndPass(const std::string& ep, int64_t time_out) { + const auto ch = GetChannel(ep); + + FetchBarrierProcessor* s = new FetchBarrierProcessor(ch); + s->Prepare(time_out); + + sendrecv::VariableMessage req; + req.set_varname(END_PASS_MESSAGE); + auto rpc = s->stub_->AsyncGetVariable(s->context_.get(), req, &cq_); + rpc->Finish(&s->reply_, &s->status_, reinterpret_cast(s)); + req_count_++; +} + void GRPCClient::AsyncCheckpointNotify(const std::string& ep, const std::string& dir, int64_t time_out) { diff --git a/paddle/fluid/operators/distributed/grpc_client.h b/paddle/fluid/operators/distributed/grpc_client.h index 7a08f2d3a4..5dae20155e 100644 --- a/paddle/fluid/operators/distributed/grpc_client.h +++ b/paddle/fluid/operators/distributed/grpc_client.h @@ -77,11 +77,12 @@ class BaseProcessor { context_.reset(new grpc::ClientContext()); var_h_ = var_info; context_->set_wait_for_ready(true); - - std::chrono::system_clock::time_point deadline = - std::chrono::system_clock::now() + std::chrono::milliseconds(time_out); - - context_->set_deadline(deadline); + if (time_out) { + std::chrono::system_clock::time_point deadline = + std::chrono::system_clock::now() + + std::chrono::milliseconds(time_out); + context_->set_deadline(deadline); + } } virtual void Prepare(int64_t time_out) { @@ -214,9 +215,17 @@ class GRPCClient : public RPCClient { void AsyncCheckpointNotify(const std::string& ep, const std::string& dir, int64_t time_out = FLAGS_rpc_deadline) override; + void AsyncSendBeginPass(const std::string& ep, + int64_t time_out = FLAGS_rpc_deadline) override; + + void AsyncSendEndPass(const std::string& ep, + int64_t time_out = FLAGS_rpc_deadline) override; + void Wait() override; - void SendComplete() override; + void SendBeginPass() override; + + void SendEndPass() override; protected: void InitImpl() override; @@ -227,9 +236,6 @@ class GRPCClient : public RPCClient { void Proceed(); - void AsyncSendComplete(const std::string& ep, - int64_t time_out = FLAGS_rpc_deadline); - std::shared_ptr GetChannel(const std::string& ep); private: diff --git a/paddle/fluid/operators/distributed/request_handler.h b/paddle/fluid/operators/distributed/request_handler.h index 90742a201a..271306d5d2 100644 --- a/paddle/fluid/operators/distributed/request_handler.h +++ b/paddle/fluid/operators/distributed/request_handler.h @@ -37,11 +37,14 @@ constexpr char kRequestSend[] = "RequestSend"; constexpr char kRequestGet[] = "RequestGet"; constexpr char kRequestPrefetch[] = "RequestPrefetch"; constexpr char kRequestCheckpoint[] = "RequestCheckpoint"; +constexpr char kRequestPassBarrier[] = "RequestPassBarrier"; #define LISTEN_TERMINATE_MESSAGE "TERMINATE@RECV" #define BATCH_BARRIER_MESSAGE "BATCH_BARRIER@RECV" #define FETCH_BARRIER_MESSAGE "FETCH_BARRIER@RECV" #define COMPLETE_MESSAGE "COMPLETE@RECV" +#define BEGIN_PASS_MESSAGE "BEGIN_PASS@RECV" +#define END_PASS_MESSAGE "END_PASS@RECV" #define CHECKPOINT_SAVE_MESSAGE "SAVE@CHECKPOINTNOTIFY" #define CHECKPOINT_LOAD_MESSAGE "LOAD@CHECKPOINTNOTIFY" diff --git a/paddle/fluid/operators/distributed/request_handler_impl.cc b/paddle/fluid/operators/distributed/request_handler_impl.cc index 163154c678..5e6bff20f5 100644 --- a/paddle/fluid/operators/distributed/request_handler_impl.cc +++ b/paddle/fluid/operators/distributed/request_handler_impl.cc @@ -55,14 +55,14 @@ bool RequestSendHandler::Handle(const std::string& varname, if (varname == BATCH_BARRIER_MESSAGE) { VLOG(3) << "sync: recv batch barrier message"; rpc_server_->IncreaseBatchBarrier(kRequestSend); - } else if (varname == COMPLETE_MESSAGE) { - VLOG(3) << "sync: recv complete message"; - rpc_server_->DecreaseClientNum(); + } else if (varname == BEGIN_PASS_MESSAGE) { + VLOG(3) << "sync: recv begin pass message"; + rpc_server_->WaitCond(kRequestSend); + rpc_server_->BeginPass(); } else { VLOG(3) << "sync: received var_name: " << varname; - if (sync_mode_) { - rpc_server_->WaitCond(kRequestSend); - } + rpc_server_->WaitCond(kRequestSend); + VLOG(3) << "sync: processing received var: " << varname; if (invar == nullptr) { LOG(ERROR) << "sync: Can not find server side var: " << varname; @@ -91,21 +91,21 @@ bool RequestGetHandler::Handle(const std::string& varname, framework::Variable** outvar, const std::string& out_var_name) { VLOG(4) << "RequestGetHandler:" << varname; - - if (varname != FETCH_BARRIER_MESSAGE) { - if (sync_mode_) { + if (sync_mode_) { + if (varname == FETCH_BARRIER_MESSAGE) { + VLOG(3) << "sync: recv fetch barrier message"; + rpc_server_->IncreaseBatchBarrier(kRequestGet); + } else if (varname == END_PASS_MESSAGE) { + rpc_server_->EndPass(); + } else { rpc_server_->WaitCond(kRequestGet); + *outvar = scope_->FindVar(varname); + } + } else { + if (varname != FETCH_BARRIER_MESSAGE && varname != END_PASS_MESSAGE) { + *outvar = scope_->FindVar(varname); } - *outvar = scope_->FindVar(varname); - return true; - } - - // FETCH_BARRIER_MESSAGE - if (sync_mode_) { - VLOG(3) << "sync: recv fetch barrier message"; - rpc_server_->IncreaseBatchBarrier(kRequestGet); } - return true; } diff --git a/paddle/fluid/operators/distributed/rpc_client.cc b/paddle/fluid/operators/distributed/rpc_client.cc index b5ec9fe536..382b65d637 100644 --- a/paddle/fluid/operators/distributed/rpc_client.cc +++ b/paddle/fluid/operators/distributed/rpc_client.cc @@ -16,7 +16,7 @@ #include "gflags/gflags.h" // default to 3min to avoid temprary network failures. -DEFINE_int32(rpc_deadline, 180000, "deadline timeouts for rpc"); +DEFINE_int32(rpc_deadline, 30000, "deadline timeouts for rpc"); namespace paddle { namespace operators { diff --git a/paddle/fluid/operators/distributed/rpc_client.h b/paddle/fluid/operators/distributed/rpc_client.h index 37783b78ec..6479d3a97b 100644 --- a/paddle/fluid/operators/distributed/rpc_client.h +++ b/paddle/fluid/operators/distributed/rpc_client.h @@ -60,10 +60,17 @@ class RPCClient { const std::string& dir, int64_t time_out = FLAGS_rpc_deadline) = 0; - // SendComplete tells all the server that current trainer have no more data - // to train, so that the pserver can reduce it's barrier count, and continue - // to train with other trainers. - virtual void SendComplete() = 0; + virtual void AsyncSendBeginPass(const std::string& ep, + int64_t time_out = FLAGS_rpc_deadline) = 0; + + virtual void AsyncSendEndPass(const std::string& ep, + int64_t time_out = FLAGS_rpc_deadline) = 0; + + // BeginePass/EndPass tells all the pserver that start/end a pass, so that + // the pserver can increase/reduce it's barrier count, and continue to train + // with other trainers. + virtual void SendBeginPass() = 0; + virtual void SendEndPass() = 0; virtual void Wait() = 0; diff --git a/paddle/fluid/operators/distributed/rpc_server.cc b/paddle/fluid/operators/distributed/rpc_server.cc index c0520e248d..5f4c134837 100644 --- a/paddle/fluid/operators/distributed/rpc_server.cc +++ b/paddle/fluid/operators/distributed/rpc_server.cc @@ -44,7 +44,8 @@ void RPCServer::SavePort() const { void RPCServer::WaitBarrier(const std::string& rpc_name) { std::unique_lock lock(this->mutex_); barrier_cond_.wait(lock, [this, &rpc_name] { - return (barrier_counter_[rpc_name] >= client_num_ || exit_flag_.load()); + return ((barrier_counter_[rpc_name] == client_num_ && client_num_ != 0) || + exit_flag_.load()); }); VLOG(3) << "batch_barrier_: " << rpc_name << " " @@ -63,10 +64,25 @@ void RPCServer::IncreaseBatchBarrier(const std::string rpc_name) { } } -void RPCServer::DecreaseClientNum() { +void RPCServer::BeginPass() { + VLOG(4) << "RPCServer begin increase pass barrier"; { - std::unique_lock lock(mutex_); + std::unique_lock locl(mutex_); + client_num_++; + VLOG(4) << "increase client_num to: " << client_num_; + } + barrier_cond_.notify_all(); +} + +void RPCServer::EndPass() { + VLOG(4) << "RPCServer begin increase pass barrier"; + { + std::unique_lock locl(mutex_); client_num_--; + VLOG(4) << "decrease client_num to: " << client_num_; + if (cur_cond_.load() == rpc_cond_map_[kRequestGet]) { + barrier_counter_[kRequestGet]--; + } } barrier_cond_.notify_all(); } diff --git a/paddle/fluid/operators/distributed/rpc_server.h b/paddle/fluid/operators/distributed/rpc_server.h index cf25e78435..833991c8aa 100644 --- a/paddle/fluid/operators/distributed/rpc_server.h +++ b/paddle/fluid/operators/distributed/rpc_server.h @@ -43,6 +43,9 @@ class RPCServer { bool IsExit() { return exit_flag_.load(); } int GetSelectedPort() const { return selected_port_; } + + int GetClientNum() const; + void SavePort() const; // RegisterRPC, register the rpc method name to a handler @@ -60,7 +63,10 @@ class RPCServer { void SetCond(const std::string& rpc_name); void WaitCond(const std::string& rpc_name); void IncreaseBatchBarrier(const std::string rpc_name); - void DecreaseClientNum(); + + void BeginPass(); + void EndPass(); + void ResetBarrierCounter(); protected: diff --git a/paddle/fluid/pybind/pybind.cc b/paddle/fluid/pybind/pybind.cc index 36d0809968..3f1e2ceedb 100644 --- a/paddle/fluid/pybind/pybind.cc +++ b/paddle/fluid/pybind/pybind.cc @@ -493,7 +493,8 @@ All parameter, weight, gradient are variables in Paddle. py::class_(m, "Executor") .def(py::init()) #ifdef PADDLE_WITH_DISTRIBUTE - .def("complete", &Executor::Complete) + .def("begin_pass", &Executor::BeginPass) + .def("end_pass", &Executor::EndPass) #endif .def("run", [](Executor &self, const ProgramDesc &prog, Scope *scope, int block_id, bool create_local_scope, bool create_vars) { diff --git a/python/paddle/fluid/executor.py b/python/paddle/fluid/executor.py index 145f1423e4..b436dfe70a 100644 --- a/python/paddle/fluid/executor.py +++ b/python/paddle/fluid/executor.py @@ -348,6 +348,12 @@ class Executor(object): ] return outs + def begin_pass(self): + self.executor.begin_pass() + + def end_pass(self): + self.executor.end_pass() + def run(self, program=None, feed=None, From 029425a5f46cdf0643deace411f1681fb0f37b8b Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Sun, 1 Jul 2018 23:12:53 +0800 Subject: [PATCH 093/130] update --- paddle/fluid/operators/distributed/grpc_client.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/fluid/operators/distributed/grpc_client.cc b/paddle/fluid/operators/distributed/grpc_client.cc index d8dc667fe7..5d2e368879 100644 --- a/paddle/fluid/operators/distributed/grpc_client.cc +++ b/paddle/fluid/operators/distributed/grpc_client.cc @@ -37,7 +37,7 @@ void GRPCClient::InitEventLoop() { void GRPCClient::SendBeginPass() { for (auto& it : channels_) { - VLOG(3) << "send begin pass to: " it.first; + VLOG(3) << "send begin pass to: " << it.first; this->AsyncSendBeginPass(it.first); } } From 5056d3ec56c2bf391ecd5a1110b900eb78e2d4c8 Mon Sep 17 00:00:00 2001 From: Xingyuan Bu Date: Mon, 2 Jul 2018 09:57:27 +0800 Subject: [PATCH 094/130] FasterRCNN Anchor Generator Op (#11218) * Add anchor generator operator for Faster-RCNN. * Add unittest testing. * Add Python API. --- .../fluid/operators/detection/CMakeLists.txt | 2 + .../detection/anchor_generator_op.cc | 154 ++++++++++++++++++ .../detection/anchor_generator_op.cu | 132 +++++++++++++++ .../operators/detection/anchor_generator_op.h | 109 +++++++++++++ python/paddle/fluid/layers/detection.py | 93 +++++++++++ python/paddle/fluid/tests/test_detection.py | 18 ++ .../unittests/test_anchor_generator_op.py | 110 +++++++++++++ 7 files changed, 618 insertions(+) create mode 100644 paddle/fluid/operators/detection/anchor_generator_op.cc create mode 100644 paddle/fluid/operators/detection/anchor_generator_op.cu create mode 100644 paddle/fluid/operators/detection/anchor_generator_op.h create mode 100644 python/paddle/fluid/tests/unittests/test_anchor_generator_op.py diff --git a/paddle/fluid/operators/detection/CMakeLists.txt b/paddle/fluid/operators/detection/CMakeLists.txt index 20d960f9fe..6d296ff7bf 100644 --- a/paddle/fluid/operators/detection/CMakeLists.txt +++ b/paddle/fluid/operators/detection/CMakeLists.txt @@ -22,6 +22,8 @@ iou_similarity_op.cu) detection_library(mine_hard_examples_op SRCS mine_hard_examples_op.cc) detection_library(multiclass_nms_op SRCS multiclass_nms_op.cc) detection_library(prior_box_op SRCS prior_box_op.cc prior_box_op.cu) +detection_library(anchor_generator_op SRCS anchor_generator_op.cc +anchor_generator_op.cu) detection_library(target_assign_op SRCS target_assign_op.cc target_assign_op.cu) detection_library(polygon_box_transform_op SRCS polygon_box_transform_op.cc diff --git a/paddle/fluid/operators/detection/anchor_generator_op.cc b/paddle/fluid/operators/detection/anchor_generator_op.cc new file mode 100644 index 0000000000..0c0155a0a9 --- /dev/null +++ b/paddle/fluid/operators/detection/anchor_generator_op.cc @@ -0,0 +1,154 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#include "paddle/fluid/operators/detection/anchor_generator_op.h" + +namespace paddle { +namespace operators { + +class AnchorGeneratorOp : public framework::OperatorWithKernel { + public: + using framework::OperatorWithKernel::OperatorWithKernel; + + void InferShape(framework::InferShapeContext* ctx) const override { + PADDLE_ENFORCE(ctx->HasInput("Input"), + "Input(Input) of AnchorGeneratorOp should not be null."); + PADDLE_ENFORCE(ctx->HasOutput("Anchors"), + "Output(Anchors) of AnchorGeneratorOp should not be null."); + PADDLE_ENFORCE( + ctx->HasOutput("Variances"), + "Output(Variances) of AnchorGeneratorOp should not be null."); + + auto input_dims = ctx->GetInputDim("Input"); + PADDLE_ENFORCE(input_dims.size() == 4, "The layout of input is NCHW."); + + auto anchor_sizes = ctx->Attrs().Get>("anchor_sizes"); + auto aspect_ratios = ctx->Attrs().Get>("aspect_ratios"); + auto stride = ctx->Attrs().Get>("stride"); + auto variances = ctx->Attrs().Get>("variances"); + + size_t num_anchors = aspect_ratios.size() * anchor_sizes.size(); + + std::vector dim_vec(4); + dim_vec[0] = input_dims[2]; + dim_vec[1] = input_dims[3]; + dim_vec[2] = num_anchors; + dim_vec[3] = 4; + ctx->SetOutputDim("Anchors", framework::make_ddim(dim_vec)); + ctx->SetOutputDim("Variances", framework::make_ddim(dim_vec)); + } + + protected: + framework::OpKernelType GetExpectedKernelType( + const framework::ExecutionContext& ctx) const override { + return framework::OpKernelType( + framework::ToDataType(ctx.Input("Input")->type()), + ctx.device_context()); + } +}; + +class AnchorGeneratorOpMaker : public framework::OpProtoAndCheckerMaker { + public: + void Make() override { + AddInput("Input", + "(Tensor, default Tensor), " + "the input feature is a tensor with a rank of 4. " + "The layout is NCHW."); + AddOutput("Anchors", + "(Tensor, default Tensor), the output is a " + "tensor with a rank of 4. The layout is [H, W, num_anchors, 4]. " + "H is the height of input, W is the width of input, num_anchors " + "is the box count of each position. " + "Each anchor is in (xmin, ymin, xmax, ymax) format"); + AddOutput("Variances", + "(Tensor, default Tensor), the expanded variances for " + "normalizing bbox regression targets. The layout is [H, W, " + "num_anchors, 4]. " + "H is the height of input, W is the width of input, num_anchors " + "is the box count of each position. " + "Each variance is in (xcenter, ycenter, w, h) format"); + + AddAttr>( + "anchor_sizes", + "(vector) List of Region Proposal Network(RPN) anchor sizes " + " given in absolute pixels e.g. (64, 128, 256, 512)." + " For instance, the anchor size of 64 means the area of this anchor " + "equals to 64**2.") + .AddCustomChecker([](const std::vector& anchor_sizes) { + PADDLE_ENFORCE_GT(anchor_sizes.size(), 0, + "Size of anchor_sizes must be at least 1."); + for (size_t i = 0; i < anchor_sizes.size(); ++i) { + PADDLE_ENFORCE_GT(anchor_sizes[i], 0.0, + "anchor_sizes[%d] must be positive.", i); + } + }); + AddAttr>( + "aspect_ratios", + "(vector) List of Region Proposal Network(RPN) anchor aspect " + "ratios, e.g. (0.5, 1, 2)." + "For instacne, the aspect ratio of 0.5 means the height / width of " + "this anchor equals 0.5."); + + AddAttr>("variances", + "(vector) List of variances to be used " + "in box regression deltas") + .AddCustomChecker([](const std::vector& variances) { + PADDLE_ENFORCE_EQ(variances.size(), 4, + "Must and only provide 4 variance."); + for (size_t i = 0; i < variances.size(); ++i) { + PADDLE_ENFORCE_GT(variances[i], 0.0, + "variance[%d] must be greater than 0.", i); + } + }); + + AddAttr>("stride", + "Anchors stride across width and height, " + "with a default of (16, 16)") + .SetDefault(std::vector(2, 16.0)) + .AddCustomChecker([](const std::vector& stride) { + PADDLE_ENFORCE_EQ( + stride.size(), 2, + "Must and only provide 2 stride for width and height."); + for (size_t i = 0; i < stride.size(); ++i) { + PADDLE_ENFORCE_GT(stride[i], 0.0, + "stride[%d] should be larger than 0.", i); + } + }); + + AddAttr("offset", + "(float) " + "Anchor center offset, with a default of 0.5") + .SetDefault(0.5); + AddComment(R"DOC( +AnchorGenerator operator +Generates anchors for Faster RCNN, FPN etc. algorithm. +Each position of the input produce N anchors, N = + size(anchor_sizes) * size(aspect_ratios). + +Please get more information from the following papers: +https://arxiv.org/abs/1506.01497. +)DOC"); + } +}; + +} // namespace operators +} // namespace paddle + +namespace ops = paddle::operators; +REGISTER_OPERATOR(anchor_generator, ops::AnchorGeneratorOp, + ops::AnchorGeneratorOpMaker, + paddle::framework::EmptyGradOpMaker); + +REGISTER_OP_CPU_KERNEL(anchor_generator, ops::AnchorGeneratorOpKernel, + ops::AnchorGeneratorOpKernel); diff --git a/paddle/fluid/operators/detection/anchor_generator_op.cu b/paddle/fluid/operators/detection/anchor_generator_op.cu new file mode 100644 index 0000000000..3cc9bbeee1 --- /dev/null +++ b/paddle/fluid/operators/detection/anchor_generator_op.cu @@ -0,0 +1,132 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#include "paddle/fluid/operators/detection/anchor_generator_op.h" + +namespace paddle { +namespace operators { + +template +__global__ void GenAnchors(T* out, const T* aspect_ratios, const int ar_num, + const T* anchor_sizes, const int as_num, + const T* stride, const int sd_num, const int height, + const int width, const T offset) { + int num_anchors = as_num * ar_num; + int box_num = height * width * num_anchors; + for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < box_num; + i += blockDim.x * gridDim.x) { + int h_idx = i / (num_anchors * width); + int w_idx = (i / num_anchors) % width; + T stride_width = stride[0]; + T stride_height = stride[1]; + T x_ctr = (w_idx * stride_width) + offset * (stride_width - 1); + T y_ctr = (h_idx * stride_height) + offset * (stride_height - 1); + T area, area_ratios; + T base_w, base_h; + T scale_w, scale_h; + T anchor_width, anchor_height; + int anch_idx = i % num_anchors; + int ar_idx = anch_idx / as_num; + int as_idx = anch_idx % as_num; + T aspect_ratio = aspect_ratios[ar_idx]; + T anchor_size = anchor_sizes[as_idx]; + area = stride_width * stride_height; + area_ratios = area / aspect_ratio; + base_w = round(sqrt(area_ratios)); + base_h = round(base_w * aspect_ratio); + scale_w = anchor_size / stride_width; + scale_h = anchor_size / stride_height; + anchor_width = scale_w * base_w; + anchor_height = scale_h * base_h; + + T xmin = (x_ctr - 0.5 * (anchor_width - 1)); + T ymin = (y_ctr - 0.5 * (anchor_height - 1)); + T xmax = (x_ctr + 0.5 * (anchor_width - 1)); + T ymax = (y_ctr + 0.5 * (anchor_height - 1)); + out[i * 4] = xmin; + out[i * 4 + 1] = ymin; + out[i * 4 + 2] = xmax; + out[i * 4 + 3] = ymax; + } +} + +template +__global__ void SetVariance(T* out, const T* var, const int vnum, + const int num) { + for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < num; + i += blockDim.x * gridDim.x) { + out[i] = var[i % vnum]; + } +} + +template +class AnchorGeneratorOpCUDAKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext& ctx) const override { + auto* input = ctx.Input("Input"); + auto* anchors = ctx.Output("Anchors"); + auto* vars = ctx.Output("Variances"); + + auto anchor_sizes = ctx.Attr>("anchor_sizes"); + auto aspect_ratios = ctx.Attr>("aspect_ratios"); + auto stride = ctx.Attr>("stride"); + auto variances = ctx.Attr>("variances"); + + T offset = static_cast(ctx.Attr("offset")); + + auto width = input->dims()[3]; + auto height = input->dims()[2]; + + int num_anchors = aspect_ratios.size() * anchor_sizes.size(); + + int box_num = width * height * num_anchors; + + int block = 512; + int grid = (box_num + block - 1) / block; + + auto stream = + ctx.template device_context().stream(); + + anchors->mutable_data(ctx.GetPlace()); + vars->mutable_data(ctx.GetPlace()); + + framework::Tensor ar; + framework::TensorFromVector(aspect_ratios, ctx.device_context(), &ar); + + framework::Tensor as; + framework::TensorFromVector(anchor_sizes, ctx.device_context(), &as); + + framework::Tensor sd; + framework::TensorFromVector(stride, ctx.device_context(), &sd); + + GenAnchors<<>>( + anchors->data(), ar.data(), aspect_ratios.size(), as.data(), + anchor_sizes.size(), sd.data(), stride.size(), height, width, + offset); + + framework::Tensor v; + framework::TensorFromVector(variances, ctx.device_context(), &v); + grid = (box_num * 4 + block - 1) / block; + SetVariance<<>>(vars->data(), v.data(), + variances.size(), box_num * 4); + } +}; // namespace operators + +} // namespace operators +} // namespace paddle + +namespace ops = paddle::operators; +REGISTER_OP_CUDA_KERNEL(anchor_generator, + ops::AnchorGeneratorOpCUDAKernel, + ops::AnchorGeneratorOpCUDAKernel); diff --git a/paddle/fluid/operators/detection/anchor_generator_op.h b/paddle/fluid/operators/detection/anchor_generator_op.h new file mode 100644 index 0000000000..e0e499d76a --- /dev/null +++ b/paddle/fluid/operators/detection/anchor_generator_op.h @@ -0,0 +1,109 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#pragma once +#include +#include +#include "paddle/fluid/framework/op_registry.h" +#include "paddle/fluid/operators/math/math_function.h" +#include "paddle/fluid/platform/transform.h" + +namespace paddle { +namespace operators { + +template +class AnchorGeneratorOpKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext& ctx) const override { + auto* input = ctx.Input("Input"); + auto* anchors = ctx.Output("Anchors"); + auto* vars = ctx.Output("Variances"); + + auto anchor_sizes = ctx.Attr>("anchor_sizes"); + auto aspect_ratios = ctx.Attr>("aspect_ratios"); + auto stride = ctx.Attr>("stride"); + auto variances = ctx.Attr>("variances"); + + T offset = static_cast(ctx.Attr("offset")); + + auto feature_width = input->dims()[3]; + auto feature_height = input->dims()[2]; + + T stride_width, stride_height; + stride_width = stride[0]; + stride_height = stride[1]; + + int num_anchors = aspect_ratios.size() * anchor_sizes.size(); + + anchors->mutable_data(ctx.GetPlace()); + vars->mutable_data(ctx.GetPlace()); + + auto e_anchors = framework::EigenTensor::From(*anchors); + for (int h_idx = 0; h_idx < feature_height; ++h_idx) { + for (int w_idx = 0; w_idx < feature_width; ++w_idx) { + T x_ctr = (w_idx * stride_width) + offset * (stride_width - 1); + T y_ctr = (h_idx * stride_height) + offset * (stride_height - 1); + T area, area_ratios; + T base_w, base_h; + T scale_w, scale_h; + T anchor_width, anchor_height; + int idx = 0; + for (size_t r = 0; r < aspect_ratios.size(); ++r) { + auto ar = aspect_ratios[r]; + for (size_t s = 0; s < anchor_sizes.size(); ++s) { + auto anchor_size = anchor_sizes[s]; + area = stride_width * stride_height; + area_ratios = area / ar; + base_w = round(sqrt(area_ratios)); + base_h = round(base_w * ar); + scale_w = anchor_size / stride_width; + scale_h = anchor_size / stride_height; + anchor_width = scale_w * base_w; + anchor_height = scale_h * base_h; + e_anchors(h_idx, w_idx, idx, 0) = + (x_ctr - 0.5 * (anchor_width - 1)); + e_anchors(h_idx, w_idx, idx, 1) = + (y_ctr - 0.5 * (anchor_height - 1)); + e_anchors(h_idx, w_idx, idx, 2) = + (x_ctr + 0.5 * (anchor_width - 1)); + e_anchors(h_idx, w_idx, idx, 3) = + (y_ctr + 0.5 * (anchor_height - 1)); + idx++; + } + } + } + } + + framework::Tensor var_t; + var_t.mutable_data( + framework::make_ddim({1, static_cast(variances.size())}), + ctx.GetPlace()); + auto var_et = framework::EigenTensor::From(var_t); + for (size_t i = 0; i < variances.size(); ++i) { + var_et(0, i) = variances[i]; + } + + int anchor_num = feature_height * feature_width * num_anchors; + auto var_dim = vars->dims(); + vars->Resize({anchor_num, static_cast(variances.size())}); + + auto e_vars = framework::EigenMatrix::From(*vars); + e_vars = var_et.broadcast(Eigen::DSizes(anchor_num, 1)); + + vars->Resize(var_dim); + } +}; // namespace operators + +} // namespace operators +} // namespace paddle diff --git a/python/paddle/fluid/layers/detection.py b/python/paddle/fluid/layers/detection.py index 200db87f17..6af01297df 100644 --- a/python/paddle/fluid/layers/detection.py +++ b/python/paddle/fluid/layers/detection.py @@ -30,6 +30,7 @@ __all__ = [ 'detection_output', 'ssd_loss', 'detection_map', + 'anchor_generator', ] __auto__ = [ @@ -998,3 +999,95 @@ def multi_box_head(inputs, box.stop_gradient = True var.stop_gradient = True return mbox_locs_concat, mbox_confs_concat, box, var + + +def anchor_generator(input, + anchor_sizes=None, + aspect_ratios=None, + variance=[0.1, 0.1, 0.2, 0.2], + stride=None, + offset=0.5, + name=None): + """ + **Anchor generator operator** + + Generate anchors for Faster RCNN algorithm. + Each position of the input produce N anchors, N = + size(anchor_sizes) * size(aspect_ratios). The order of generated anchors + is firstly aspect_ratios loop then anchor_sizes loop. + + Args: + input(Variable): The input feature map, the format is NCHW. + anchor_sizes(list|tuple|float): The anchor sizes of generated anchors, + given in absolute pixels e.g. [64., 128., 256., 512.]. + For instance, the anchor size of 64 means the area of this anchor equals to 64**2. + aspect_ratios(list|tuple|float): The height / width ratios of generated + anchors, e.g. [0.5, 1.0, 2.0]. + variance(list|tuple): The variances to be used in box regression deltas. + Default:[0.1, 0.1, 0.2, 0.2]. + stride(list|turple): The anchors stride across width and height, + e.g. [16.0, 16.0] + offset(float): Prior boxes center offset. Default: 0.5 + name(str): Name of the prior box op. Default: None. + + Returns: + Anchors(Variable): The output anchors with a layout of [H, W, num_anchors, 4]. + H is the height of input, W is the width of input, + num_anchors is the box count of each position. + Each anchor is in (xmin, ymin, xmax, ymax) format an unnormalized. + Variances(Variable): The expanded variances of anchors + with a layout of [H, W, num_priors, 4]. + H is the height of input, W is the width of input + num_anchors is the box count of each position. + Each variance is in (xcenter, ycenter, w, h) format. + + + Examples: + + .. code-block:: python + + anchor, var = anchor_generator( + input=conv1, + anchor_sizes=[64, 128, 256, 512], + aspect_ratios=[0.5, 1.0, 2.0], + variance=[0.1, 0.1, 0.2, 0.2], + stride=[16.0, 16.0], + offset=0.5) + """ + helper = LayerHelper("anchor_generator", **locals()) + dtype = helper.input_dtype() + + def _is_list_or_tuple_(data): + return (isinstance(data, list) or isinstance(data, tuple)) + + if not _is_list_or_tuple_(anchor_sizes): + anchor_sizes = [anchor_sizes] + if not _is_list_or_tuple_(aspect_ratios): + aspect_ratios = [aspect_ratios] + if not (_is_list_or_tuple_(stride) and len(stride) == 2): + raise ValueError('stride should be a list or tuple ', + 'with length 2, (stride_width, stride_height).') + + anchor_sizes = list(map(float, anchor_sizes)) + aspect_ratios = list(map(float, aspect_ratios)) + stride = list(map(float, stride)) + + attrs = { + 'anchor_sizes': anchor_sizes, + 'aspect_ratios': aspect_ratios, + 'variances': variance, + 'stride': stride, + 'offset': offset + } + + anchor = helper.create_tmp_variable(dtype) + var = helper.create_tmp_variable(dtype) + helper.append_op( + type="anchor_generator", + inputs={"Input": input}, + outputs={"Anchors": anchor, + "Variances": var}, + attrs=attrs, ) + anchor.stop_gradient = True + var.stop_gradient = True + return anchor, var diff --git a/python/paddle/fluid/tests/test_detection.py b/python/paddle/fluid/tests/test_detection.py index 8569d838bd..2d70c986b1 100644 --- a/python/paddle/fluid/tests/test_detection.py +++ b/python/paddle/fluid/tests/test_detection.py @@ -127,6 +127,24 @@ class TestPriorBox(unittest.TestCase): assert box.shape[3] == 4 +class TestAnchorGenerator(unittest.TestCase): + def test_anchor_generator(self): + data_shape = [3, 224, 224] + images = fluid.layers.data( + name='pixel', shape=data_shape, dtype='float32') + conv1 = fluid.layers.conv2d(images, 3, 3, 2) + anchor, var = fluid.layers.anchor_generator( + input=conv1, + anchor_sizes=[64, 128, 256, 512], + aspect_ratios=[0.5, 1.0, 2.0], + variance=[0.1, 0.1, 0.2, 0.2], + stride=[16.0, 16.0], + offset=0.5) + assert len(anchor.shape) == 4 + assert anchor.shape == var.shape + assert anchor.shape[3] == 4 + + class TestMultiBoxHead(unittest.TestCase): def test_multi_box_head(self): data_shape = [3, 224, 224] diff --git a/python/paddle/fluid/tests/unittests/test_anchor_generator_op.py b/python/paddle/fluid/tests/unittests/test_anchor_generator_op.py new file mode 100644 index 0000000000..9c7d5d41f0 --- /dev/null +++ b/python/paddle/fluid/tests/unittests/test_anchor_generator_op.py @@ -0,0 +1,110 @@ +# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://w_idxw.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +import numpy as np +import sys +import math +from op_test import OpTest + + +def anchor_generator_in_python(input_feat, anchor_sizes, aspect_ratios, + variances, stride, offset): + num_anchors = len(aspect_ratios) * len(anchor_sizes) + layer_h = input_feat.shape[2] + layer_w = input_feat.shape[3] + out_dim = (layer_h, layer_w, num_anchors, 4) + out_anchors = np.zeros(out_dim).astype('float32') + + for h_idx in range(layer_h): + for w_idx in range(layer_w): + x_ctr = (w_idx * stride[0]) + offset * (stride[0] - 1) + y_ctr = (h_idx * stride[1]) + offset * (stride[1] - 1) + idx = 0 + for r in range(len(aspect_ratios)): + ar = aspect_ratios[r] + for s in range(len(anchor_sizes)): + anchor_size = anchor_sizes[s] + area = stride[0] * stride[1] + area_ratios = area / ar + base_w = np.round(np.sqrt(area_ratios)) + base_h = np.round(base_w * ar) + scale_w = anchor_size / stride[0] + scale_h = anchor_size / stride[1] + w = scale_w * base_w + h = scale_h * base_h + out_anchors[h_idx, w_idx, idx, :] = [ + (x_ctr - 0.5 * (w - 1)), (y_ctr - 0.5 * (h - 1)), + (x_ctr + 0.5 * (w - 1)), (y_ctr + 0.5 * (h - 1)) + ] + idx += 1 + + # set the variance. + out_var = np.tile(variances, (layer_h, layer_w, num_anchors, 1)) + out_anchors = out_anchors.astype('float32') + out_var = out_var.astype('float32') + return out_anchors, out_var + + +class TestAnchorGeneratorOp(OpTest): + def set_data(self): + self.init_test_params() + self.init_test_input() + self.init_test_output() + self.inputs = {'Input': self.input} + + self.attrs = { + 'anchor_sizes': self.anchor_sizes, + 'aspect_ratios': self.aspect_ratios, + 'stride': self.stride, + 'offset': self.offset, + 'variances': self.variances, + } + + self.outputs = {'Anchors': self.out_anchors, 'Variances': self.out_var} + + def test_check_output(self): + self.check_output() + + def setUp(self): + self.op_type = "anchor_generator" + self.set_data() + + def init_test_params(self): + self.batch_size = 1 + self.input_channels = 2 + self.layer_h = 2 + self.layer_w = 2 + + self.anchor_sizes = [64., 128., 256., 512.] + self.aspect_ratios = [0.5, 1., 2.] + self.stride = [16., 16.] + + self.offset = 0.5 + + self.variances = [0.1, 0.1, 0.2, 0.2] + + def init_test_input(self): + self.input = np.random.random( + (self.batch_size, self.input_channels, self.layer_h, + self.layer_w)).astype('float32') + + def init_test_output(self): + self.out_anchors, self.out_var = anchor_generator_in_python( + self.input, self.anchor_sizes, self.aspect_ratios, self.variances, + self.stride, self.offset) + + +if __name__ == '__main__': + unittest.main() From 8c1326c5fefd5c429670a215695d3df682bba7b2 Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Sun, 1 Jul 2018 17:24:09 +0800 Subject: [PATCH 095/130] move v2 api and capi to legacy --- paddle/CMakeLists.txt | 6 +++--- paddle/{ => legacy}/api/Arguments.cpp | 0 paddle/{ => legacy}/api/CMakeLists.txt | 0 paddle/{ => legacy}/api/ConfigParser.cpp | 0 paddle/{ => legacy}/api/Evaluator.cpp | 0 paddle/{ => legacy}/api/GradientMachine.cpp | 0 paddle/{ => legacy}/api/Internal.h | 0 paddle/{ => legacy}/api/Matrix.cpp | 0 paddle/{ => legacy}/api/Paddle.i | 0 paddle/{ => legacy}/api/PaddleAPI.h | 0 paddle/{ => legacy}/api/PaddleAPIPrivate.h | 0 paddle/{ => legacy}/api/Parameter.cpp | 0 paddle/{ => legacy}/api/ParameterOptimizer.cpp | 0 paddle/{ => legacy}/api/ParameterUpdater.cpp | 0 paddle/{ => legacy}/api/SequenceGenerator.cpp | 0 paddle/{ => legacy}/api/Trainer.cpp | 0 paddle/{ => legacy}/api/Util.cpp | 0 paddle/{ => legacy}/api/Vector.cpp | 0 paddle/{ => legacy}/api/__init__.py | 0 paddle/{ => legacy}/api/numpy.i | 0 paddle/{ => legacy}/api/test/.gitignore | 0 paddle/{ => legacy}/api/test/CMakeLists.txt | 0 paddle/{ => legacy}/api/test/testArguments.py | 0 paddle/{ => legacy}/api/test/testGradientMachine.py | 0 paddle/{ => legacy}/api/test/testMatrix.py | 0 paddle/{ => legacy}/api/test/testTrain.py | 0 paddle/{ => legacy}/api/test/testTrainConfig.py | 0 paddle/{ => legacy}/api/test/testTrainer.py | 0 paddle/{ => legacy}/api/test/testVector.py | 0 paddle/{ => legacy}/api/test/util.py | 0 paddle/{ => legacy}/capi/Arguments.cpp | 0 paddle/{ => legacy}/capi/CMakeLists.txt | 0 paddle/{ => legacy}/capi/Main.cpp | 0 paddle/{ => legacy}/capi/Matrix.cpp | 0 paddle/{ => legacy}/capi/Vector.cpp | 0 paddle/{ => legacy}/capi/arguments.h | 0 paddle/{ => legacy}/capi/capi.h | 0 paddle/{ => legacy}/capi/capi_private.h | 0 paddle/{ => legacy}/capi/config.h.in | 0 paddle/{ => legacy}/capi/error.cpp | 0 paddle/{ => legacy}/capi/error.h | 0 paddle/{ => legacy}/capi/examples/.gitignore | 0 paddle/{ => legacy}/capi/examples/README.md | 0 paddle/{ => legacy}/capi/examples/model_inference/README.md | 0 .../capi/examples/model_inference/common/common.h | 0 .../capi/examples/model_inference/dense/CMakeLists.txt | 0 .../capi/examples/model_inference/dense/convert_protobin.sh | 0 .../{ => legacy}/capi/examples/model_inference/dense/main.c | 0 .../capi/examples/model_inference/dense/merge_v2_model.py | 0 .../capi/examples/model_inference/dense/mnist_v2.py | 0 .../capi/examples/model_inference/dense/trainer_config.py | 0 .../capi/examples/model_inference/multi_thread/.gitignore | 0 .../examples/model_inference/multi_thread/CMakeLists.txt | 0 .../model_inference/multi_thread/convert_protobin.sh | 0 .../capi/examples/model_inference/multi_thread/main.c | 0 .../capi/examples/model_inference/multi_thread/main_gpu.c | 0 .../examples/model_inference/multi_thread/trainer_config.py | 0 .../capi/examples/model_inference/sequence/.gitignore | 0 .../capi/examples/model_inference/sequence/CMakeLists.txt | 0 .../examples/model_inference/sequence/convert_protobin.sh | 0 .../capi/examples/model_inference/sequence/main.c | 0 .../examples/model_inference/sequence/trainer_config.py | 0 .../capi/examples/model_inference/sparse_binary/.gitignore | 0 .../examples/model_inference/sparse_binary/CMakeLists.txt | 0 .../model_inference/sparse_binary/convert_protobin.sh | 0 .../capi/examples/model_inference/sparse_binary/main.c | 0 .../model_inference/sparse_binary/trainer_config.py | 0 paddle/{ => legacy}/capi/gradient_machine.cpp | 0 paddle/{ => legacy}/capi/gradient_machine.h | 0 paddle/{ => legacy}/capi/main.h | 0 paddle/{ => legacy}/capi/matrix.h | 0 paddle/{ => legacy}/capi/paddle_capi.map | 0 paddle/{ => legacy}/capi/tests/.gitignore | 0 paddle/{ => legacy}/capi/tests/CMakeLists.txt | 0 paddle/{ => legacy}/capi/tests/test_Arguments.cpp | 0 paddle/{ => legacy}/capi/tests/test_GradientMachine.cpp | 0 paddle/{ => legacy}/capi/tests/test_Matrix.cpp | 0 paddle/{ => legacy}/capi/tests/test_Vector.cpp | 0 paddle/{ => legacy}/capi/tests/test_predict_network.py | 0 paddle/{ => legacy}/capi/vector.h | 0 80 files changed, 3 insertions(+), 3 deletions(-) rename paddle/{ => legacy}/api/Arguments.cpp (100%) rename paddle/{ => legacy}/api/CMakeLists.txt (100%) rename paddle/{ => legacy}/api/ConfigParser.cpp (100%) rename paddle/{ => legacy}/api/Evaluator.cpp (100%) rename paddle/{ => legacy}/api/GradientMachine.cpp (100%) rename paddle/{ => legacy}/api/Internal.h (100%) rename paddle/{ => legacy}/api/Matrix.cpp (100%) rename paddle/{ => legacy}/api/Paddle.i (100%) rename paddle/{ => legacy}/api/PaddleAPI.h (100%) rename paddle/{ => legacy}/api/PaddleAPIPrivate.h (100%) rename paddle/{ => legacy}/api/Parameter.cpp (100%) rename paddle/{ => legacy}/api/ParameterOptimizer.cpp (100%) rename paddle/{ => legacy}/api/ParameterUpdater.cpp (100%) rename paddle/{ => legacy}/api/SequenceGenerator.cpp (100%) rename paddle/{ => legacy}/api/Trainer.cpp (100%) rename paddle/{ => legacy}/api/Util.cpp (100%) rename paddle/{ => legacy}/api/Vector.cpp (100%) rename paddle/{ => legacy}/api/__init__.py (100%) rename paddle/{ => legacy}/api/numpy.i (100%) rename paddle/{ => legacy}/api/test/.gitignore (100%) rename paddle/{ => legacy}/api/test/CMakeLists.txt (100%) rename paddle/{ => legacy}/api/test/testArguments.py (100%) rename paddle/{ => legacy}/api/test/testGradientMachine.py (100%) rename paddle/{ => legacy}/api/test/testMatrix.py (100%) rename paddle/{ => legacy}/api/test/testTrain.py (100%) rename paddle/{ => legacy}/api/test/testTrainConfig.py (100%) rename paddle/{ => legacy}/api/test/testTrainer.py (100%) rename paddle/{ => legacy}/api/test/testVector.py (100%) rename paddle/{ => legacy}/api/test/util.py (100%) rename paddle/{ => legacy}/capi/Arguments.cpp (100%) rename paddle/{ => legacy}/capi/CMakeLists.txt (100%) rename paddle/{ => legacy}/capi/Main.cpp (100%) rename paddle/{ => legacy}/capi/Matrix.cpp (100%) rename paddle/{ => legacy}/capi/Vector.cpp (100%) rename paddle/{ => legacy}/capi/arguments.h (100%) rename paddle/{ => legacy}/capi/capi.h (100%) rename paddle/{ => legacy}/capi/capi_private.h (100%) rename paddle/{ => legacy}/capi/config.h.in (100%) rename paddle/{ => legacy}/capi/error.cpp (100%) rename paddle/{ => legacy}/capi/error.h (100%) rename paddle/{ => legacy}/capi/examples/.gitignore (100%) rename paddle/{ => legacy}/capi/examples/README.md (100%) rename paddle/{ => legacy}/capi/examples/model_inference/README.md (100%) rename paddle/{ => legacy}/capi/examples/model_inference/common/common.h (100%) rename paddle/{ => legacy}/capi/examples/model_inference/dense/CMakeLists.txt (100%) rename paddle/{ => legacy}/capi/examples/model_inference/dense/convert_protobin.sh (100%) rename paddle/{ => legacy}/capi/examples/model_inference/dense/main.c (100%) rename paddle/{ => legacy}/capi/examples/model_inference/dense/merge_v2_model.py (100%) rename paddle/{ => legacy}/capi/examples/model_inference/dense/mnist_v2.py (100%) rename paddle/{ => legacy}/capi/examples/model_inference/dense/trainer_config.py (100%) rename paddle/{ => legacy}/capi/examples/model_inference/multi_thread/.gitignore (100%) rename paddle/{ => legacy}/capi/examples/model_inference/multi_thread/CMakeLists.txt (100%) rename paddle/{ => legacy}/capi/examples/model_inference/multi_thread/convert_protobin.sh (100%) rename paddle/{ => legacy}/capi/examples/model_inference/multi_thread/main.c (100%) rename paddle/{ => legacy}/capi/examples/model_inference/multi_thread/main_gpu.c (100%) rename paddle/{ => legacy}/capi/examples/model_inference/multi_thread/trainer_config.py (100%) rename paddle/{ => legacy}/capi/examples/model_inference/sequence/.gitignore (100%) rename paddle/{ => legacy}/capi/examples/model_inference/sequence/CMakeLists.txt (100%) rename paddle/{ => legacy}/capi/examples/model_inference/sequence/convert_protobin.sh (100%) rename paddle/{ => legacy}/capi/examples/model_inference/sequence/main.c (100%) rename paddle/{ => legacy}/capi/examples/model_inference/sequence/trainer_config.py (100%) rename paddle/{ => legacy}/capi/examples/model_inference/sparse_binary/.gitignore (100%) rename paddle/{ => legacy}/capi/examples/model_inference/sparse_binary/CMakeLists.txt (100%) rename paddle/{ => legacy}/capi/examples/model_inference/sparse_binary/convert_protobin.sh (100%) rename paddle/{ => legacy}/capi/examples/model_inference/sparse_binary/main.c (100%) rename paddle/{ => legacy}/capi/examples/model_inference/sparse_binary/trainer_config.py (100%) rename paddle/{ => legacy}/capi/gradient_machine.cpp (100%) rename paddle/{ => legacy}/capi/gradient_machine.h (100%) rename paddle/{ => legacy}/capi/main.h (100%) rename paddle/{ => legacy}/capi/matrix.h (100%) rename paddle/{ => legacy}/capi/paddle_capi.map (100%) rename paddle/{ => legacy}/capi/tests/.gitignore (100%) rename paddle/{ => legacy}/capi/tests/CMakeLists.txt (100%) rename paddle/{ => legacy}/capi/tests/test_Arguments.cpp (100%) rename paddle/{ => legacy}/capi/tests/test_GradientMachine.cpp (100%) rename paddle/{ => legacy}/capi/tests/test_Matrix.cpp (100%) rename paddle/{ => legacy}/capi/tests/test_Vector.cpp (100%) rename paddle/{ => legacy}/capi/tests/test_predict_network.py (100%) rename paddle/{ => legacy}/capi/vector.h (100%) diff --git a/paddle/CMakeLists.txt b/paddle/CMakeLists.txt index efa59fc4a5..7a4bd9183a 100644 --- a/paddle/CMakeLists.txt +++ b/paddle/CMakeLists.txt @@ -7,18 +7,18 @@ if(NOT WITH_FLUID_ONLY) add_subdirectory(legacy/parameter) if(MOBILE_INFERENCE) - add_subdirectory(capi) + add_subdirectory(legacy/capi) else() add_subdirectory(legacy/pserver) add_subdirectory(trainer) add_subdirectory(scripts) if(WITH_C_API) - add_subdirectory(capi) + add_subdirectory(legacy/capi) endif() if(WITH_SWIG_PY) - add_subdirectory(api) + add_subdirectory(legacy/api) endif() endif() endif() diff --git a/paddle/api/Arguments.cpp b/paddle/legacy/api/Arguments.cpp similarity index 100% rename from paddle/api/Arguments.cpp rename to paddle/legacy/api/Arguments.cpp diff --git a/paddle/api/CMakeLists.txt b/paddle/legacy/api/CMakeLists.txt similarity index 100% rename from paddle/api/CMakeLists.txt rename to paddle/legacy/api/CMakeLists.txt diff --git a/paddle/api/ConfigParser.cpp b/paddle/legacy/api/ConfigParser.cpp similarity index 100% rename from paddle/api/ConfigParser.cpp rename to paddle/legacy/api/ConfigParser.cpp diff --git a/paddle/api/Evaluator.cpp b/paddle/legacy/api/Evaluator.cpp similarity index 100% rename from paddle/api/Evaluator.cpp rename to paddle/legacy/api/Evaluator.cpp diff --git a/paddle/api/GradientMachine.cpp b/paddle/legacy/api/GradientMachine.cpp similarity index 100% rename from paddle/api/GradientMachine.cpp rename to paddle/legacy/api/GradientMachine.cpp diff --git a/paddle/api/Internal.h b/paddle/legacy/api/Internal.h similarity index 100% rename from paddle/api/Internal.h rename to paddle/legacy/api/Internal.h diff --git a/paddle/api/Matrix.cpp b/paddle/legacy/api/Matrix.cpp similarity index 100% rename from paddle/api/Matrix.cpp rename to paddle/legacy/api/Matrix.cpp diff --git a/paddle/api/Paddle.i b/paddle/legacy/api/Paddle.i similarity index 100% rename from paddle/api/Paddle.i rename to paddle/legacy/api/Paddle.i diff --git a/paddle/api/PaddleAPI.h b/paddle/legacy/api/PaddleAPI.h similarity index 100% rename from paddle/api/PaddleAPI.h rename to paddle/legacy/api/PaddleAPI.h diff --git a/paddle/api/PaddleAPIPrivate.h b/paddle/legacy/api/PaddleAPIPrivate.h similarity index 100% rename from paddle/api/PaddleAPIPrivate.h rename to paddle/legacy/api/PaddleAPIPrivate.h diff --git a/paddle/api/Parameter.cpp b/paddle/legacy/api/Parameter.cpp similarity index 100% rename from paddle/api/Parameter.cpp rename to paddle/legacy/api/Parameter.cpp diff --git a/paddle/api/ParameterOptimizer.cpp b/paddle/legacy/api/ParameterOptimizer.cpp similarity index 100% rename from paddle/api/ParameterOptimizer.cpp rename to paddle/legacy/api/ParameterOptimizer.cpp diff --git a/paddle/api/ParameterUpdater.cpp b/paddle/legacy/api/ParameterUpdater.cpp similarity index 100% rename from paddle/api/ParameterUpdater.cpp rename to paddle/legacy/api/ParameterUpdater.cpp diff --git a/paddle/api/SequenceGenerator.cpp b/paddle/legacy/api/SequenceGenerator.cpp similarity index 100% rename from paddle/api/SequenceGenerator.cpp rename to paddle/legacy/api/SequenceGenerator.cpp diff --git a/paddle/api/Trainer.cpp b/paddle/legacy/api/Trainer.cpp similarity index 100% rename from paddle/api/Trainer.cpp rename to paddle/legacy/api/Trainer.cpp diff --git a/paddle/api/Util.cpp b/paddle/legacy/api/Util.cpp similarity index 100% rename from paddle/api/Util.cpp rename to paddle/legacy/api/Util.cpp diff --git a/paddle/api/Vector.cpp b/paddle/legacy/api/Vector.cpp similarity index 100% rename from paddle/api/Vector.cpp rename to paddle/legacy/api/Vector.cpp diff --git a/paddle/api/__init__.py b/paddle/legacy/api/__init__.py similarity index 100% rename from paddle/api/__init__.py rename to paddle/legacy/api/__init__.py diff --git a/paddle/api/numpy.i b/paddle/legacy/api/numpy.i similarity index 100% rename from paddle/api/numpy.i rename to paddle/legacy/api/numpy.i diff --git a/paddle/api/test/.gitignore b/paddle/legacy/api/test/.gitignore similarity index 100% rename from paddle/api/test/.gitignore rename to paddle/legacy/api/test/.gitignore diff --git a/paddle/api/test/CMakeLists.txt b/paddle/legacy/api/test/CMakeLists.txt similarity index 100% rename from paddle/api/test/CMakeLists.txt rename to paddle/legacy/api/test/CMakeLists.txt diff --git a/paddle/api/test/testArguments.py b/paddle/legacy/api/test/testArguments.py similarity index 100% rename from paddle/api/test/testArguments.py rename to paddle/legacy/api/test/testArguments.py diff --git a/paddle/api/test/testGradientMachine.py b/paddle/legacy/api/test/testGradientMachine.py similarity index 100% rename from paddle/api/test/testGradientMachine.py rename to paddle/legacy/api/test/testGradientMachine.py diff --git a/paddle/api/test/testMatrix.py b/paddle/legacy/api/test/testMatrix.py similarity index 100% rename from paddle/api/test/testMatrix.py rename to paddle/legacy/api/test/testMatrix.py diff --git a/paddle/api/test/testTrain.py b/paddle/legacy/api/test/testTrain.py similarity index 100% rename from paddle/api/test/testTrain.py rename to paddle/legacy/api/test/testTrain.py diff --git a/paddle/api/test/testTrainConfig.py b/paddle/legacy/api/test/testTrainConfig.py similarity index 100% rename from paddle/api/test/testTrainConfig.py rename to paddle/legacy/api/test/testTrainConfig.py diff --git a/paddle/api/test/testTrainer.py b/paddle/legacy/api/test/testTrainer.py similarity index 100% rename from paddle/api/test/testTrainer.py rename to paddle/legacy/api/test/testTrainer.py diff --git a/paddle/api/test/testVector.py b/paddle/legacy/api/test/testVector.py similarity index 100% rename from paddle/api/test/testVector.py rename to paddle/legacy/api/test/testVector.py diff --git a/paddle/api/test/util.py b/paddle/legacy/api/test/util.py similarity index 100% rename from paddle/api/test/util.py rename to paddle/legacy/api/test/util.py diff --git a/paddle/capi/Arguments.cpp b/paddle/legacy/capi/Arguments.cpp similarity index 100% rename from paddle/capi/Arguments.cpp rename to paddle/legacy/capi/Arguments.cpp diff --git a/paddle/capi/CMakeLists.txt b/paddle/legacy/capi/CMakeLists.txt similarity index 100% rename from paddle/capi/CMakeLists.txt rename to paddle/legacy/capi/CMakeLists.txt diff --git a/paddle/capi/Main.cpp b/paddle/legacy/capi/Main.cpp similarity index 100% rename from paddle/capi/Main.cpp rename to paddle/legacy/capi/Main.cpp diff --git a/paddle/capi/Matrix.cpp b/paddle/legacy/capi/Matrix.cpp similarity index 100% rename from paddle/capi/Matrix.cpp rename to paddle/legacy/capi/Matrix.cpp diff --git a/paddle/capi/Vector.cpp b/paddle/legacy/capi/Vector.cpp similarity index 100% rename from paddle/capi/Vector.cpp rename to paddle/legacy/capi/Vector.cpp diff --git a/paddle/capi/arguments.h b/paddle/legacy/capi/arguments.h similarity index 100% rename from paddle/capi/arguments.h rename to paddle/legacy/capi/arguments.h diff --git a/paddle/capi/capi.h b/paddle/legacy/capi/capi.h similarity index 100% rename from paddle/capi/capi.h rename to paddle/legacy/capi/capi.h diff --git a/paddle/capi/capi_private.h b/paddle/legacy/capi/capi_private.h similarity index 100% rename from paddle/capi/capi_private.h rename to paddle/legacy/capi/capi_private.h diff --git a/paddle/capi/config.h.in b/paddle/legacy/capi/config.h.in similarity index 100% rename from paddle/capi/config.h.in rename to paddle/legacy/capi/config.h.in diff --git a/paddle/capi/error.cpp b/paddle/legacy/capi/error.cpp similarity index 100% rename from paddle/capi/error.cpp rename to paddle/legacy/capi/error.cpp diff --git a/paddle/capi/error.h b/paddle/legacy/capi/error.h similarity index 100% rename from paddle/capi/error.h rename to paddle/legacy/capi/error.h diff --git a/paddle/capi/examples/.gitignore b/paddle/legacy/capi/examples/.gitignore similarity index 100% rename from paddle/capi/examples/.gitignore rename to paddle/legacy/capi/examples/.gitignore diff --git a/paddle/capi/examples/README.md b/paddle/legacy/capi/examples/README.md similarity index 100% rename from paddle/capi/examples/README.md rename to paddle/legacy/capi/examples/README.md diff --git a/paddle/capi/examples/model_inference/README.md b/paddle/legacy/capi/examples/model_inference/README.md similarity index 100% rename from paddle/capi/examples/model_inference/README.md rename to paddle/legacy/capi/examples/model_inference/README.md diff --git a/paddle/capi/examples/model_inference/common/common.h b/paddle/legacy/capi/examples/model_inference/common/common.h similarity index 100% rename from paddle/capi/examples/model_inference/common/common.h rename to paddle/legacy/capi/examples/model_inference/common/common.h diff --git a/paddle/capi/examples/model_inference/dense/CMakeLists.txt b/paddle/legacy/capi/examples/model_inference/dense/CMakeLists.txt similarity index 100% rename from paddle/capi/examples/model_inference/dense/CMakeLists.txt rename to paddle/legacy/capi/examples/model_inference/dense/CMakeLists.txt diff --git a/paddle/capi/examples/model_inference/dense/convert_protobin.sh b/paddle/legacy/capi/examples/model_inference/dense/convert_protobin.sh similarity index 100% rename from paddle/capi/examples/model_inference/dense/convert_protobin.sh rename to paddle/legacy/capi/examples/model_inference/dense/convert_protobin.sh diff --git a/paddle/capi/examples/model_inference/dense/main.c b/paddle/legacy/capi/examples/model_inference/dense/main.c similarity index 100% rename from paddle/capi/examples/model_inference/dense/main.c rename to paddle/legacy/capi/examples/model_inference/dense/main.c diff --git a/paddle/capi/examples/model_inference/dense/merge_v2_model.py b/paddle/legacy/capi/examples/model_inference/dense/merge_v2_model.py similarity index 100% rename from paddle/capi/examples/model_inference/dense/merge_v2_model.py rename to paddle/legacy/capi/examples/model_inference/dense/merge_v2_model.py diff --git a/paddle/capi/examples/model_inference/dense/mnist_v2.py b/paddle/legacy/capi/examples/model_inference/dense/mnist_v2.py similarity index 100% rename from paddle/capi/examples/model_inference/dense/mnist_v2.py rename to paddle/legacy/capi/examples/model_inference/dense/mnist_v2.py diff --git a/paddle/capi/examples/model_inference/dense/trainer_config.py b/paddle/legacy/capi/examples/model_inference/dense/trainer_config.py similarity index 100% rename from paddle/capi/examples/model_inference/dense/trainer_config.py rename to paddle/legacy/capi/examples/model_inference/dense/trainer_config.py diff --git a/paddle/capi/examples/model_inference/multi_thread/.gitignore b/paddle/legacy/capi/examples/model_inference/multi_thread/.gitignore similarity index 100% rename from paddle/capi/examples/model_inference/multi_thread/.gitignore rename to paddle/legacy/capi/examples/model_inference/multi_thread/.gitignore diff --git a/paddle/capi/examples/model_inference/multi_thread/CMakeLists.txt b/paddle/legacy/capi/examples/model_inference/multi_thread/CMakeLists.txt similarity index 100% rename from paddle/capi/examples/model_inference/multi_thread/CMakeLists.txt rename to paddle/legacy/capi/examples/model_inference/multi_thread/CMakeLists.txt diff --git a/paddle/capi/examples/model_inference/multi_thread/convert_protobin.sh b/paddle/legacy/capi/examples/model_inference/multi_thread/convert_protobin.sh similarity index 100% rename from paddle/capi/examples/model_inference/multi_thread/convert_protobin.sh rename to paddle/legacy/capi/examples/model_inference/multi_thread/convert_protobin.sh diff --git a/paddle/capi/examples/model_inference/multi_thread/main.c b/paddle/legacy/capi/examples/model_inference/multi_thread/main.c similarity index 100% rename from paddle/capi/examples/model_inference/multi_thread/main.c rename to paddle/legacy/capi/examples/model_inference/multi_thread/main.c diff --git a/paddle/capi/examples/model_inference/multi_thread/main_gpu.c b/paddle/legacy/capi/examples/model_inference/multi_thread/main_gpu.c similarity index 100% rename from paddle/capi/examples/model_inference/multi_thread/main_gpu.c rename to paddle/legacy/capi/examples/model_inference/multi_thread/main_gpu.c diff --git a/paddle/capi/examples/model_inference/multi_thread/trainer_config.py b/paddle/legacy/capi/examples/model_inference/multi_thread/trainer_config.py similarity index 100% rename from paddle/capi/examples/model_inference/multi_thread/trainer_config.py rename to paddle/legacy/capi/examples/model_inference/multi_thread/trainer_config.py diff --git a/paddle/capi/examples/model_inference/sequence/.gitignore b/paddle/legacy/capi/examples/model_inference/sequence/.gitignore similarity index 100% rename from paddle/capi/examples/model_inference/sequence/.gitignore rename to paddle/legacy/capi/examples/model_inference/sequence/.gitignore diff --git a/paddle/capi/examples/model_inference/sequence/CMakeLists.txt b/paddle/legacy/capi/examples/model_inference/sequence/CMakeLists.txt similarity index 100% rename from paddle/capi/examples/model_inference/sequence/CMakeLists.txt rename to paddle/legacy/capi/examples/model_inference/sequence/CMakeLists.txt diff --git a/paddle/capi/examples/model_inference/sequence/convert_protobin.sh b/paddle/legacy/capi/examples/model_inference/sequence/convert_protobin.sh similarity index 100% rename from paddle/capi/examples/model_inference/sequence/convert_protobin.sh rename to paddle/legacy/capi/examples/model_inference/sequence/convert_protobin.sh diff --git a/paddle/capi/examples/model_inference/sequence/main.c b/paddle/legacy/capi/examples/model_inference/sequence/main.c similarity index 100% rename from paddle/capi/examples/model_inference/sequence/main.c rename to paddle/legacy/capi/examples/model_inference/sequence/main.c diff --git a/paddle/capi/examples/model_inference/sequence/trainer_config.py b/paddle/legacy/capi/examples/model_inference/sequence/trainer_config.py similarity index 100% rename from paddle/capi/examples/model_inference/sequence/trainer_config.py rename to paddle/legacy/capi/examples/model_inference/sequence/trainer_config.py diff --git a/paddle/capi/examples/model_inference/sparse_binary/.gitignore b/paddle/legacy/capi/examples/model_inference/sparse_binary/.gitignore similarity index 100% rename from paddle/capi/examples/model_inference/sparse_binary/.gitignore rename to paddle/legacy/capi/examples/model_inference/sparse_binary/.gitignore diff --git a/paddle/capi/examples/model_inference/sparse_binary/CMakeLists.txt b/paddle/legacy/capi/examples/model_inference/sparse_binary/CMakeLists.txt similarity index 100% rename from paddle/capi/examples/model_inference/sparse_binary/CMakeLists.txt rename to paddle/legacy/capi/examples/model_inference/sparse_binary/CMakeLists.txt diff --git a/paddle/capi/examples/model_inference/sparse_binary/convert_protobin.sh b/paddle/legacy/capi/examples/model_inference/sparse_binary/convert_protobin.sh similarity index 100% rename from paddle/capi/examples/model_inference/sparse_binary/convert_protobin.sh rename to paddle/legacy/capi/examples/model_inference/sparse_binary/convert_protobin.sh diff --git a/paddle/capi/examples/model_inference/sparse_binary/main.c b/paddle/legacy/capi/examples/model_inference/sparse_binary/main.c similarity index 100% rename from paddle/capi/examples/model_inference/sparse_binary/main.c rename to paddle/legacy/capi/examples/model_inference/sparse_binary/main.c diff --git a/paddle/capi/examples/model_inference/sparse_binary/trainer_config.py b/paddle/legacy/capi/examples/model_inference/sparse_binary/trainer_config.py similarity index 100% rename from paddle/capi/examples/model_inference/sparse_binary/trainer_config.py rename to paddle/legacy/capi/examples/model_inference/sparse_binary/trainer_config.py diff --git a/paddle/capi/gradient_machine.cpp b/paddle/legacy/capi/gradient_machine.cpp similarity index 100% rename from paddle/capi/gradient_machine.cpp rename to paddle/legacy/capi/gradient_machine.cpp diff --git a/paddle/capi/gradient_machine.h b/paddle/legacy/capi/gradient_machine.h similarity index 100% rename from paddle/capi/gradient_machine.h rename to paddle/legacy/capi/gradient_machine.h diff --git a/paddle/capi/main.h b/paddle/legacy/capi/main.h similarity index 100% rename from paddle/capi/main.h rename to paddle/legacy/capi/main.h diff --git a/paddle/capi/matrix.h b/paddle/legacy/capi/matrix.h similarity index 100% rename from paddle/capi/matrix.h rename to paddle/legacy/capi/matrix.h diff --git a/paddle/capi/paddle_capi.map b/paddle/legacy/capi/paddle_capi.map similarity index 100% rename from paddle/capi/paddle_capi.map rename to paddle/legacy/capi/paddle_capi.map diff --git a/paddle/capi/tests/.gitignore b/paddle/legacy/capi/tests/.gitignore similarity index 100% rename from paddle/capi/tests/.gitignore rename to paddle/legacy/capi/tests/.gitignore diff --git a/paddle/capi/tests/CMakeLists.txt b/paddle/legacy/capi/tests/CMakeLists.txt similarity index 100% rename from paddle/capi/tests/CMakeLists.txt rename to paddle/legacy/capi/tests/CMakeLists.txt diff --git a/paddle/capi/tests/test_Arguments.cpp b/paddle/legacy/capi/tests/test_Arguments.cpp similarity index 100% rename from paddle/capi/tests/test_Arguments.cpp rename to paddle/legacy/capi/tests/test_Arguments.cpp diff --git a/paddle/capi/tests/test_GradientMachine.cpp b/paddle/legacy/capi/tests/test_GradientMachine.cpp similarity index 100% rename from paddle/capi/tests/test_GradientMachine.cpp rename to paddle/legacy/capi/tests/test_GradientMachine.cpp diff --git a/paddle/capi/tests/test_Matrix.cpp b/paddle/legacy/capi/tests/test_Matrix.cpp similarity index 100% rename from paddle/capi/tests/test_Matrix.cpp rename to paddle/legacy/capi/tests/test_Matrix.cpp diff --git a/paddle/capi/tests/test_Vector.cpp b/paddle/legacy/capi/tests/test_Vector.cpp similarity index 100% rename from paddle/capi/tests/test_Vector.cpp rename to paddle/legacy/capi/tests/test_Vector.cpp diff --git a/paddle/capi/tests/test_predict_network.py b/paddle/legacy/capi/tests/test_predict_network.py similarity index 100% rename from paddle/capi/tests/test_predict_network.py rename to paddle/legacy/capi/tests/test_predict_network.py diff --git a/paddle/capi/vector.h b/paddle/legacy/capi/vector.h similarity index 100% rename from paddle/capi/vector.h rename to paddle/legacy/capi/vector.h From 96c6e55169154466d8569695d47f4f5a985134c3 Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Sun, 1 Jul 2018 18:27:51 +0800 Subject: [PATCH 096/130] fix --- paddle/legacy/api/Paddle.i | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paddle/legacy/api/Paddle.i b/paddle/legacy/api/Paddle.i index 3237e73745..e6165fb106 100644 --- a/paddle/legacy/api/Paddle.i +++ b/paddle/legacy/api/Paddle.i @@ -2,7 +2,7 @@ %include "std_string.i" %{ #define SWIG_FILE_WITH_INIT -#include "api/PaddleAPI.h" +#include "legacy/api/PaddleAPI.h" %} %include "exception.i" @@ -199,4 +199,4 @@ namespace std { %ignore OptimizationConfigPrivate; %ignore ParameterTraverseCallbackPrivate; %include "utils/GlobalConstants.h" -%include "api/PaddleAPI.h" +%include "legacy/api/PaddleAPI.h" From ff4317cee9bbec749fa41e2fdcfbe84cefbbba2b Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Mon, 2 Jul 2018 11:21:37 +0800 Subject: [PATCH 097/130] follow comments --- paddle/fluid/framework/details/build_strategy.h | 2 ++ paddle/fluid/framework/details/data_balance_op_handle.cc | 8 ++++++-- .../framework/details/multi_devices_graph_builder.cc | 2 +- paddle/fluid/framework/details/op_handle_base.cc | 1 + paddle/fluid/pybind/pybind.cc | 6 +++++- python/paddle/fluid/tests/unittests/.gitignore | 2 ++ 6 files changed, 17 insertions(+), 4 deletions(-) diff --git a/paddle/fluid/framework/details/build_strategy.h b/paddle/fluid/framework/details/build_strategy.h index 64e83acb4d..9c2c845c6e 100644 --- a/paddle/fluid/framework/details/build_strategy.h +++ b/paddle/fluid/framework/details/build_strategy.h @@ -33,6 +33,8 @@ struct BuildStrategy { GradientScaleStrategy gradient_scale_{GradientScaleStrategy::kCoeffNumDevice}; std::string debug_graphviz_path_{""}; + + bool enable_data_balance_{true}; }; } // namespace details diff --git a/paddle/fluid/framework/details/data_balance_op_handle.cc b/paddle/fluid/framework/details/data_balance_op_handle.cc index f8d431ef2a..b914851fe0 100644 --- a/paddle/fluid/framework/details/data_balance_op_handle.cc +++ b/paddle/fluid/framework/details/data_balance_op_handle.cc @@ -73,7 +73,9 @@ std::vector> DataBalanceOpHandle::GetBalancePlan( for (int dst_idx = device_num - empty_num; dst_idx < device_num; ++dst_idx) { if (size_device_vec[src_idx][0] <= expected_device_size) { ++src_idx; - PADDLE_ENFORCE_LT(src_idx, device_num - empty_num); + PADDLE_ENFORCE_LT( + src_idx, device_num - empty_num, + "In current srategy an empty tensor should not be copy source."); } size_device_vec[src_idx][0] -= expected_device_size; size_device_vec[dst_idx][0] += expected_device_size; @@ -113,7 +115,9 @@ void DataBalanceOpHandle::RunImpl() { if (data_idx == 0) { device_sizes.emplace_back(ins_size); } else { - PADDLE_ENFORCE_EQ(ins_size, device_sizes.at(place_idx)); + PADDLE_ENFORCE_EQ( + ins_size, device_sizes.at(place_idx), + "All data on the same device shall have the same batch size."); } } const auto &balance_plan = GetBalancePlan(device_sizes); diff --git a/paddle/fluid/framework/details/multi_devices_graph_builder.cc b/paddle/fluid/framework/details/multi_devices_graph_builder.cc index edfefb8231..46d0c2769c 100644 --- a/paddle/fluid/framework/details/multi_devices_graph_builder.cc +++ b/paddle/fluid/framework/details/multi_devices_graph_builder.cc @@ -216,7 +216,7 @@ std::unique_ptr MultiDevSSAGraphBuilder::Build( } else { // This op runs on all devices, and its output may have parameter's // gradients. - if (op->Type() == "read") { + if (op->Type() == "read" && strategy_.enable_data_balance_) { op->SetAttr("throw_eof_exp", false); CreateComputationalOps(&result, *op, places_.size()); const auto &data_var_names = op->Output("Out"); diff --git a/paddle/fluid/framework/details/op_handle_base.cc b/paddle/fluid/framework/details/op_handle_base.cc index 856124875d..3560fabb42 100644 --- a/paddle/fluid/framework/details/op_handle_base.cc +++ b/paddle/fluid/framework/details/op_handle_base.cc @@ -58,6 +58,7 @@ void OpHandleBase::Run(bool use_cuda) { void OpHandleBase::RecordWaitEventOnCtx(platform::DeviceContext *waited_ctx) { #ifdef PADDLE_WITH_CUDA + PADDLE_ENFORCE_NOT_NULL(waited_ctx); if (platform::is_cpu_place(waited_ctx->GetPlace()) || events_.empty()) { for (auto &dev_ctx : dev_ctxes_) { PADDLE_ENFORCE_NOT_NULL(dev_ctx.second); diff --git a/paddle/fluid/pybind/pybind.cc b/paddle/fluid/pybind/pybind.cc index 36d0809968..9fc647a7d2 100644 --- a/paddle/fluid/pybind/pybind.cc +++ b/paddle/fluid/pybind/pybind.cc @@ -643,7 +643,11 @@ All parameter, weight, gradient are variables in Paddle. [](const BuildStrategy &self) { return self.debug_graphviz_path_; }, [](BuildStrategy &self, const std::string &path) { self.debug_graphviz_path_ = path; - }); + }) + .def_property( + "enable_data_balance", + [](const BuildStrategy &self) { return self.enable_data_balance_; }, + [](BuildStrategy &self, bool b) { self.enable_data_balance_ = b; }); pe.def(py::init &, const std::unordered_set &, diff --git a/python/paddle/fluid/tests/unittests/.gitignore b/python/paddle/fluid/tests/unittests/.gitignore index 3538a9c200..b1e8fda03a 100644 --- a/python/paddle/fluid/tests/unittests/.gitignore +++ b/python/paddle/fluid/tests/unittests/.gitignore @@ -4,3 +4,5 @@ mnist_1.recordio mnist_2.recordio flowers.recordio wmt16.recordio +data_balance_test.recordio +data_balance_with_lod_test.recordio From 7de8d115903b7320623c5e57ea0feda0996aec75 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Mon, 2 Jul 2018 11:38:11 +0800 Subject: [PATCH 098/130] follow comments --- python/paddle/fluid/io.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/python/paddle/fluid/io.py b/python/paddle/fluid/io.py index 954eb0ea62..7f24938d20 100644 --- a/python/paddle/fluid/io.py +++ b/python/paddle/fluid/io.py @@ -762,10 +762,10 @@ def get_test_program(filelist, program=None, startup_program=None): new_var.persistable = True return new_var - def get_test_reader_name(train_reader_name): + def _get_test_reader_name(train_reader_name): return train_reader_name + "_test" - def is_reader_op(op): + def _is_reader_op(op): block = op.block if "Out" in op.output_names: reader_out = block.vars[op.output("Out")[0]] @@ -783,7 +783,7 @@ def get_test_program(filelist, program=None, startup_program=None): startup_reader_op_list = [] for op in startup_block.ops: - if is_reader_op(op): + if _is_reader_op(op): startup_reader_op_list.append(op) if len(startup_reader_op_list) == 0: @@ -799,7 +799,7 @@ def get_test_program(filelist, program=None, startup_program=None): test_reader = _copy_reader_var_( startup_block, train_reader, - new_name=get_test_reader_name(train_reader_name)) + new_name=_get_test_reader_name(train_reader_name)) train_test_reader_map[train_reader.name] = test_reader test_op_inputs = {} @@ -830,7 +830,7 @@ def get_test_program(filelist, program=None, startup_program=None): for var in main_block.vars.values(): if var.type == core.VarDesc.VarType.READER: main_block.rename_var( - str(var.name), str(get_test_reader_name(var.name))) + str(var.name), str(_get_test_reader_name(var.name))) for op in main_block.ops: if op.type == root_reader_op.type: From dd70fb43935c57a2fc7a58baf9994f3d55622d42 Mon Sep 17 00:00:00 2001 From: sneaxiy Date: Mon, 2 Jul 2018 04:27:23 +0000 Subject: [PATCH 099/130] fix type comparation bugs --- paddle/fluid/framework/lod_tensor.cc | 7 ++++--- paddle/fluid/framework/operator.cc | 3 +-- paddle/fluid/framework/var_type.h | 18 ++++++++++++------ paddle/fluid/inference/analysis/helper.h | 15 +++++++-------- paddle/fluid/inference/analysis/node.cc | 4 ++-- paddle/fluid/inference/analysis/node.h | 9 +++++---- paddle/fluid/operators/conditional_block_op.cc | 3 ++- paddle/fluid/operators/print_op.cc | 13 +++++++------ paddle/fluid/operators/while_op.cc | 8 ++++---- 9 files changed, 44 insertions(+), 36 deletions(-) diff --git a/paddle/fluid/framework/lod_tensor.cc b/paddle/fluid/framework/lod_tensor.cc index d29d8ce1c5..2d0611326b 100644 --- a/paddle/fluid/framework/lod_tensor.cc +++ b/paddle/fluid/framework/lod_tensor.cc @@ -20,6 +20,7 @@ limitations under the License. */ #include "paddle/fluid/framework/data_type.h" #include "paddle/fluid/framework/framework.pb.h" #include "paddle/fluid/framework/lod_tensor.h" +#include "paddle/fluid/framework/var_type.h" #include "paddle/fluid/memory/memcpy.h" #include "paddle/fluid/memory/memory.h" @@ -68,9 +69,9 @@ std::ostream &operator<<(std::ostream &os, const LoDTensor &t) { // only print first ten elements int64_t size = t.numel() < 10 ? t.numel() : 10; for (int64_t i = 0; i < size; ++i) { - if (t.type().hash_code() == typeid(float).hash_code()) { + if (IsType(t.type())) { os << t.data()[i] << " "; - } else if (t.type().hash_code() == typeid(int64_t).hash_code()) { + } else if (IsType(t.type())) { os << t.data()[i] << " "; } else { PADDLE_THROW("LoDTensor data type not in [float, int64_t]"); @@ -384,7 +385,7 @@ void LoDTensor::MergeLoDTensor( LoD new_lod = lod_tensors[0]->lod(); for (size_t i = 1; i < lod_tensors.size(); ++i) { auto *t = lod_tensors[i]; - PADDLE_ENFORCE_EQ(new_type.hash_code(), t->type().hash_code()); + PADDLE_ENFORCE_EQ(new_type, t->type()); PADDLE_ENFORCE_EQ(new_layout, t->layout()); PADDLE_ENFORCE_EQ(framework::product(new_dim) / new_dim[0], diff --git a/paddle/fluid/framework/operator.cc b/paddle/fluid/framework/operator.cc index c1329b06d7..4fb2bb45fe 100644 --- a/paddle/fluid/framework/operator.cc +++ b/paddle/fluid/framework/operator.cc @@ -592,8 +592,7 @@ static void CheckTensorNANOrInf(const std::string& name, if (tensor.memory_size() == 0) { return; } - if (tensor.type().hash_code() != typeid(float).hash_code() && // NOLINT - tensor.type().hash_code() != typeid(double).hash_code()) { // NOLINT + if (!IsType(tensor.type()) && !IsType(tensor.type())) { return; } PADDLE_ENFORCE(!framework::TensorContainsInf(tensor), diff --git a/paddle/fluid/framework/var_type.h b/paddle/fluid/framework/var_type.h index 2b646d78f0..429997c8b8 100644 --- a/paddle/fluid/framework/var_type.h +++ b/paddle/fluid/framework/var_type.h @@ -24,18 +24,24 @@ limitations under the License. */ namespace paddle { namespace framework { + +template +bool IsType(const std::type_index& type_index) { + return type_index == std::type_index(typeid(T)); +} + inline proto::VarType::Type ToVarType(std::type_index type) { - if (type.hash_code() == typeid(LoDTensor).hash_code()) { + if (IsType(type)) { return proto::VarType_Type_LOD_TENSOR; - } else if (type.hash_code() == typeid(LoDRankTable).hash_code()) { + } else if (IsType(type)) { return proto::VarType_Type_LOD_RANK_TABLE; - } else if (type.hash_code() == typeid(LoDTensorArray).hash_code()) { + } else if (IsType(type)) { return proto::VarType_Type_LOD_TENSOR_ARRAY; - } else if (type.hash_code() == typeid(SelectedRows).hash_code()) { + } else if (IsType(type)) { return proto::VarType_Type_SELECTED_ROWS; - } else if (type.hash_code() == typeid(ReaderHolder).hash_code()) { + } else if (IsType(type)) { return proto::VarType_Type_READER; - } else if (type.hash_code() == typeid(ChannelHolder).hash_code()) { + } else if (IsType(type)) { return proto::VarType_Type_CHANNEL; } else { PADDLE_THROW("ToVarType:Unsupported type %s", type.name()); diff --git a/paddle/fluid/inference/analysis/helper.h b/paddle/fluid/inference/analysis/helper.h index fff1621d3f..f1064cd20f 100644 --- a/paddle/fluid/inference/analysis/helper.h +++ b/paddle/fluid/inference/analysis/helper.h @@ -16,6 +16,7 @@ limitations under the License. */ #include #include +#include #include #include @@ -41,7 +42,7 @@ int AccuDims(Vec &&vec, int size) { return res; } -#define SET_TYPE(type__) dic_[typeid(type__).hash_code()] = #type__; +#define SET_TYPE(type__) dic_[std::type_index(typeid(type__))] = #type__; /* * Map typeid to representation. */ @@ -53,14 +54,14 @@ struct DataTypeNamer { template const std::string &repr() const { - auto x = typeid(T).hash_code(); + auto x = std::type_index(typeid(T)); PADDLE_ENFORCE(dic_.count(x), "unknown type for representation"); return dic_.at(x); } - const std::string &repr(size_t &hash) const { // NOLINT - PADDLE_ENFORCE(dic_.count(hash), "unknown type for representation"); - return dic_.at(hash); + const std::string &repr(const std::type_index &type) const { // NOLINT + PADDLE_ENFORCE(dic_.count(type), "unknown type for representation"); + return dic_.at(type); } private: @@ -71,9 +72,7 @@ struct DataTypeNamer { SET_TYPE(void *); } - std::unordered_map - dic_; + std::unordered_map dic_; }; #undef SET_TYPE diff --git a/paddle/fluid/inference/analysis/node.cc b/paddle/fluid/inference/analysis/node.cc index d9d265d225..f2e918f3ff 100644 --- a/paddle/fluid/inference/analysis/node.cc +++ b/paddle/fluid/inference/analysis/node.cc @@ -23,9 +23,9 @@ namespace analysis { template <> std::string &NodeAttr::As() { if (data_.empty()) { - type_hash_ = typeid(std::string).hash_code(); + type_index_ = std::type_index(typeid(std::string)); } - PADDLE_ENFORCE_EQ(type_hash_, typeid(std::string).hash_code()); + PADDLE_ENFORCE_EQ(type_index_, std::type_index(typeid(std::string))); return data_; } diff --git a/paddle/fluid/inference/analysis/node.h b/paddle/fluid/inference/analysis/node.h index 8ecd1ae730..47e524bc5c 100644 --- a/paddle/fluid/inference/analysis/node.h +++ b/paddle/fluid/inference/analysis/node.h @@ -25,6 +25,7 @@ limitations under the License. */ #include #include +#include "paddle/fluid/framework/var_type.h" #include "paddle/fluid/inference/analysis/device.h" #include "paddle/fluid/inference/analysis/dot.h" #include "paddle/fluid/inference/analysis/helper.h" @@ -57,12 +58,12 @@ struct NodeAttr { // init storage in the first usage. if (data_.empty()) { VLOG(4) << "resize data to " << sizeof(T); - type_hash_ = typeid(T).hash_code(); + type_index_ = std::type_index(typeid(T)); data_.resize(sizeof(T)); } - PADDLE_ENFORCE(type_hash_ == typeid(T).hash_code(), + PADDLE_ENFORCE(framework::IsType(type_index_), "type not matched, origin is %s, want %s", - DataTypeNamer::Global().repr(type_hash_), + DataTypeNamer::Global().repr(type_index_), DataTypeNamer::Global().repr()); PADDLE_ENFORCE_EQ(data_.size(), sizeof(T), "Node attr type recast error"); return *reinterpret_cast(&data_[0]); @@ -70,7 +71,7 @@ struct NodeAttr { private: std::string data_; - size_t type_hash_{std::numeric_limits::max()}; + std::type_index type_index_{typeid(NodeAttr)}; }; /* diff --git a/paddle/fluid/operators/conditional_block_op.cc b/paddle/fluid/operators/conditional_block_op.cc index 5984f80d04..8cc1d94260 100644 --- a/paddle/fluid/operators/conditional_block_op.cc +++ b/paddle/fluid/operators/conditional_block_op.cc @@ -14,6 +14,7 @@ limitations under the License. */ #include #include "paddle/fluid/framework/executor.h" #include "paddle/fluid/framework/op_registry.h" +#include "paddle/fluid/framework/var_type.h" namespace paddle { namespace operators { @@ -47,7 +48,7 @@ class ConditionalOp : public framework::OperatorBase { if (!(ips.size() == 1UL && ips[0]->IsInitialized())) { PADDLE_THROW("should have one initialized input as condition"); } - if (!(ips[0]->type().hash_code() == typeid(bool).hash_code() && // NOLINT + if (!(framework::IsType(ips[0]->type()) && // NOLINT ips[0]->numel() == 1)) { PADDLE_THROW( "condition input's data type should be bool, " diff --git a/paddle/fluid/operators/print_op.cc b/paddle/fluid/operators/print_op.cc index db7634918a..cceac40295 100644 --- a/paddle/fluid/operators/print_op.cc +++ b/paddle/fluid/operators/print_op.cc @@ -16,6 +16,7 @@ #include #include "paddle/fluid/framework/op_registry.h" +#include "paddle/fluid/framework/var_type.h" #include "paddle/fluid/framework/variable.h" namespace paddle { @@ -62,7 +63,7 @@ struct Formater { } } void PrintDtype() { - if (dtype.hash_code() != typeid(const char).hash_code()) { + if (!framework::IsType(dtype)) { CLOG << "\tdtype: " << dtype.name() << std::endl; } } @@ -83,15 +84,15 @@ struct Formater { void PrintData(size_t size) { PADDLE_ENFORCE_NOT_NULL(data); // print float - if (dtype.hash_code() == typeid(const float).hash_code()) { + if (framework::IsType(dtype)) { Display(size); - } else if (dtype.hash_code() == typeid(const double).hash_code()) { + } else if (framework::IsType(dtype)) { Display(size); - } else if (dtype.hash_code() == typeid(const int).hash_code()) { + } else if (framework::IsType(dtype)) { Display(size); - } else if (dtype.hash_code() == typeid(const int64_t).hash_code()) { + } else if (framework::IsType(dtype)) { Display(size); - } else if (dtype.hash_code() == typeid(const bool).hash_code()) { + } else if (framework::IsType(dtype)) { Display(size); } else { CLOG << "\tdata: unprintable type: " << dtype.name() << std::endl; diff --git a/paddle/fluid/operators/while_op.cc b/paddle/fluid/operators/while_op.cc index f440058e8d..733157ea05 100644 --- a/paddle/fluid/operators/while_op.cc +++ b/paddle/fluid/operators/while_op.cc @@ -17,6 +17,7 @@ limitations under the License. */ #include "paddle/fluid/framework/lod_tensor_array.h" #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/framework/operator.h" +#include "paddle/fluid/framework/var_type.h" #include "paddle/fluid/operators/detail/safe_ref.h" namespace paddle { @@ -135,15 +136,14 @@ class WhileGradOp : public framework::OperatorBase { auto &og_inside = detail::Ref(cur_scope.Var(inside_og_name), "Cannot find inside gradient %s", inside_og_name); - if (og_outside.Type().hash_code() == - typeid(framework::LoDTensor).hash_code()) { + if (framework::IsType(og_outside.Type())) { auto &outside_tensor = og_outside.Get(); auto &inside_tensor = detail::Ref(og_inside.GetMutable()); inside_tensor.set_lod(outside_tensor.lod()); inside_tensor.ShareDataWith(outside_tensor); - } else if (og_outside.Type().hash_code() == - typeid(framework::LoDTensorArray).hash_code()) { + } else if (framework::IsType( + og_outside.Type())) { auto &outside_array = og_outside.Get(); auto &inside_array = detail::Ref(og_inside.GetMutable()); From 37410a0c752cc87751bad8810971fa049f101d74 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Mon, 2 Jul 2018 14:46:09 +0800 Subject: [PATCH 100/130] update by comment --- paddle/fluid/framework/executor.cc | 16 ++++++---------- .../fluid/operators/distributed/grpc_client.cc | 2 ++ paddle/fluid/operators/distributed/rpc_server.cc | 4 ++-- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/paddle/fluid/framework/executor.cc b/paddle/fluid/framework/executor.cc index 3928750138..84f67fafa1 100644 --- a/paddle/fluid/framework/executor.cc +++ b/paddle/fluid/framework/executor.cc @@ -47,19 +47,15 @@ Executor::Executor(const platform::Place& place) : place_(place) {} #ifdef PADDLE_WITH_DISTRIBUTE void Executor::BeginPass() { - auto client = ::paddle::operators::distributed::RPCClient::GetInstance< - ::paddle::operators::distributed::GRPCClient>(); - - client->SendBeginPass(); - client->Wait(); + ::paddle::operators::distributed::RPCClient::GetInstance< + ::paddle::operators::distributed::GRPCClient>() + ->SendBeginPass(); } void Executor::EndPass() { - auto client = ::paddle::operators::distributed::RPCClient::GetInstance< - ::paddle::operators::distributed::GRPCClient>(); - - client->SendEndPass(); - client->Wait(); + ::paddle::operators::distributed::RPCClient::GetInstance< + ::paddle::operators::distributed::GRPCClient>() + ->SendEndPass(); } #endif diff --git a/paddle/fluid/operators/distributed/grpc_client.cc b/paddle/fluid/operators/distributed/grpc_client.cc index 5d2e368879..4a09f3870d 100644 --- a/paddle/fluid/operators/distributed/grpc_client.cc +++ b/paddle/fluid/operators/distributed/grpc_client.cc @@ -40,6 +40,7 @@ void GRPCClient::SendBeginPass() { VLOG(3) << "send begin pass to: " << it.first; this->AsyncSendBeginPass(it.first); } + this->Wait(); } void GRPCClient::SendEndPass() { @@ -47,6 +48,7 @@ void GRPCClient::SendEndPass() { VLOG(3) << "send end pass to " << it.first; this->AsyncSendEndPass(it.first); } + this->Wait(); } GRPCClient::~GRPCClient() { diff --git a/paddle/fluid/operators/distributed/rpc_server.cc b/paddle/fluid/operators/distributed/rpc_server.cc index 5f4c134837..d49ee34eea 100644 --- a/paddle/fluid/operators/distributed/rpc_server.cc +++ b/paddle/fluid/operators/distributed/rpc_server.cc @@ -67,7 +67,7 @@ void RPCServer::IncreaseBatchBarrier(const std::string rpc_name) { void RPCServer::BeginPass() { VLOG(4) << "RPCServer begin increase pass barrier"; { - std::unique_lock locl(mutex_); + std::unique_lock lock(mutex_); client_num_++; VLOG(4) << "increase client_num to: " << client_num_; } @@ -77,7 +77,7 @@ void RPCServer::BeginPass() { void RPCServer::EndPass() { VLOG(4) << "RPCServer begin increase pass barrier"; { - std::unique_lock locl(mutex_); + std::unique_lock lock(mutex_); client_num_--; VLOG(4) << "decrease client_num to: " << client_num_; if (cur_cond_.load() == rpc_cond_map_[kRequestGet]) { From 1ce478f100efe6e35e164e294bf8e6682b360fdd Mon Sep 17 00:00:00 2001 From: yuyang18 Date: Mon, 2 Jul 2018 16:13:52 +0800 Subject: [PATCH 101/130] Polish reshape op --- paddle/fluid/framework/op_registry.h | 84 ++++++++++++++++--- paddle/fluid/operators/reshape_op.cc | 74 ++++++++++++++-- .../{reshape_op.cu => reshape_op.cu.cc} | 18 ++-- paddle/fluid/operators/reshape_op.h | 71 +++------------- 4 files changed, 157 insertions(+), 90 deletions(-) rename paddle/fluid/operators/{reshape_op.cu => reshape_op.cu.cc} (51%) diff --git a/paddle/fluid/framework/op_registry.h b/paddle/fluid/framework/op_registry.h index 43ab227a94..f0278cc49c 100644 --- a/paddle/fluid/framework/op_registry.h +++ b/paddle/fluid/framework/op_registry.h @@ -76,6 +76,19 @@ class OpRegistry { template struct OpKernelRegistrarFunctor; +template +inline void RegisterKernelClass(const char* op_type, const char* library_type) { + std::string library(library_type); + std::string data_layout = "ANYLAYOUT"; + if (library == "MKLDNN") { + data_layout = "MKLDNNLAYOUT"; + } + OpKernelType key(ToDataType(std::type_index(typeid(T))), PlaceType(), + StringToDataLayout(data_layout), + StringToLibraryType(library_type)); + OperatorWithKernel::AllOpKernels()[op_type][key].reset(new KernelType()); +} + template struct OpKernelRegistrarFunctor { using KERNEL_TYPE = @@ -83,16 +96,7 @@ struct OpKernelRegistrarFunctor { void operator()(const char* op_type, const char* library_type) const { using T = typename KERNEL_TYPE::ELEMENT_TYPE; - std::string library(library_type); - std::string data_layout = "ANYLAYOUT"; - if (library == "MKLDNN") { - data_layout = "MKLDNNLAYOUT"; - } - OpKernelType key(ToDataType(std::type_index(typeid(T))), PlaceType(), - StringToDataLayout(data_layout), - StringToLibraryType(library_type)); - OperatorWithKernel::AllOpKernels()[op_type][key].reset(new KERNEL_TYPE); - + RegisterKernelClass(op_type, library_type); constexpr auto size = std::tuple_size>::value; OpKernelRegistrarFunctor func; @@ -116,6 +120,47 @@ class OpKernelRegistrar : public Registrar { } }; +template +struct OpKernelRegistrarFunctorEx; + +template +class OpKernelRegistrarEx : public Registrar { + public: + explicit OpKernelRegistrarEx(const char* op_type, const char* library_type) { + OpKernelRegistrarFunctorEx + func; + func(op_type, library_type); + } +}; + +template +struct OpKernelRegistrarFunctorEx { + void operator()(const char* op_type, const char* library_type) const {} +}; + +template +struct OpKernelRegistrarFunctorEx { + using KERNEL_TYPE = + typename std::tuple_element>::type; + using T = + typename std::tuple_element>::type; + + void operator()(const char* op_type, const char* library_type) const { + RegisterKernelClass(op_type, library_type); + + constexpr auto size = + std::tuple_size>::value; + OpKernelRegistrarFunctorEx= size, I + 2, + DataTypeAndKernelType...> + func; + func(op_type, library_type); + } +}; + /** * check if MACRO is used in GLOBAL NAMESPACE. */ @@ -174,6 +219,25 @@ class OpKernelRegistrar : public Registrar { #define REGISTER_OP_CPU_KERNEL(op_type, ...) \ REGISTER_OP_KERNEL(op_type, CPU, ::paddle::platform::CPUPlace, __VA_ARGS__) +#define REGISTER_OP_KERNEL_EX(op_type, library_type, place_class, ...) \ + STATIC_ASSERT_GLOBAL_NAMESPACE( \ + __reg_op_kernel_##op_type##_##library_type##__, \ + "REGISTER_OP_KERNEL_EX must be called in global namespace"); \ + static ::paddle::framework::OpKernelRegistrarEx \ + __op_kernel_registrar_##op_type##_##library_type##__(#op_type, \ + #library_type); \ + int TouchOpKernelRegistrar_##op_type##_##library_type() { \ + __op_kernel_registrar_##op_type##_##library_type##__.Touch(); \ + return 0; \ + } + +#define REGISTER_OP_CUDA_KERNEL_EX(op_type, ...) \ + REGISTER_OP_KERNEL_EX(p_type, CUDA, ::paddle::platform::CUDAPlace, \ + __VA_ARGS__) + +#define REGISTER_OP_CPU_KERNEL_EX(op_type, ...) \ + REGISTER_OP_KERNEL_EX(op_type, CPU, ::paddle::platform::CPUPlace, __VA_ARGS__) + /** * Macro to mark what Operator and Kernel * we will use and tell the compiler to diff --git a/paddle/fluid/operators/reshape_op.cc b/paddle/fluid/operators/reshape_op.cc index 7f743f577f..ed07e6c2f7 100644 --- a/paddle/fluid/operators/reshape_op.cc +++ b/paddle/fluid/operators/reshape_op.cc @@ -107,19 +107,75 @@ class ReshapeGradOp : public framework::OperatorWithKernel { } }; +void ReshapeKernel::Compute(const framework::ExecutionContext &ctx) const { + auto *out = ctx.Output("Out"); + auto *in = ctx.Input("X"); + + auto *shape_tensor = ctx.HasInput("Shape") + ? ctx.Input("Shape") + : nullptr; + + framework::DDim out_dims = out->dims(); + + if (shape_tensor) { + auto *shape_data = shape_tensor->data(); + framework::Tensor cpu_shape_tensor; + if (platform::is_gpu_place(ctx.GetPlace())) { + TensorCopySync(*shape_tensor, platform::CPUPlace(), &cpu_shape_tensor); + shape_data = cpu_shape_tensor.data(); + } + auto shape = + std::vector(shape_data, shape_data + shape_tensor->numel()); + out_dims = ReshapeOp::ValidateShape(shape, in->dims()); + } + if (!in->lod().empty()) { + PADDLE_ENFORCE_EQ(out_dims[0], in->dims()[0], + "Reshape operator cannot reshape an input sequence batch " + "into an output sequence batch that has a different " + "number of time steps. Please consider using " + "sequence_reshape op."); + } + + bool inplace = ctx.Attr("inplace"); + out->Resize(out_dims); + if (!inplace) { + out->mutable_data(ctx.GetPlace(), in->type()); + framework::TensorCopySync(*in, ctx.GetPlace(), out); + out->Resize(out_dims); + } else { + out->ShareDataWith(*in); + out->Resize(out_dims); + } +} +void ReshapeGradKernelBase::Compute( + const framework::ExecutionContext &ctx) const { + auto *d_out = ctx.Input(framework::GradVarName("Out")); + auto *d_x = ctx.Output(framework::GradVarName("X")); + + d_x->mutable_data(ctx.GetPlace(), d_out->type()); + bool inplace = ctx.Attr("inplace"); + + auto in_dims = d_x->dims(); + if (!inplace) { + framework::TensorCopy(*d_out, ctx.GetPlace(), ctx.device_context(), d_x); + ctx.device_context().Wait(); + d_x->Resize(in_dims); + } else { + d_x->ShareDataWith(*d_out); + d_x->Resize(in_dims); + } +} } // namespace operators } // namespace paddle namespace ops = paddle::operators; -using CPU = paddle::platform::CPUDeviceContext; REGISTER_OPERATOR(reshape, ops::ReshapeOp, ops::ReshapeOpMaker, paddle::framework::DefaultGradOpDescMaker); REGISTER_OPERATOR(reshape_grad, ops::ReshapeGradOp); -REGISTER_OP_CPU_KERNEL(reshape, ops::ReshapeKernel, - ops::ReshapeKernel, - ops::ReshapeKernel, - ops::ReshapeKernel); -REGISTER_OP_CPU_KERNEL(reshape_grad, ops::ReshapeGradKernel, - ops::ReshapeGradKernel, - ops::ReshapeGradKernel, - ops::ReshapeGradKernel); +REGISTER_OP_CPU_KERNEL_EX(reshape, float, ops::ReshapeKernel, double, + ops::ReshapeKernel, int, ops::ReshapeKernel, int64_t, + ops::ReshapeKernel); +REGISTER_OP_CPU_KERNEL(reshape_grad, ops::ReshapeGradKernel, + ops::ReshapeGradKernel, + ops::ReshapeGradKernel, + ops::ReshapeGradKernel); diff --git a/paddle/fluid/operators/reshape_op.cu b/paddle/fluid/operators/reshape_op.cu.cc similarity index 51% rename from paddle/fluid/operators/reshape_op.cu rename to paddle/fluid/operators/reshape_op.cu.cc index c628c634e2..8a09321eef 100644 --- a/paddle/fluid/operators/reshape_op.cu +++ b/paddle/fluid/operators/reshape_op.cu.cc @@ -13,14 +13,12 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "paddle/fluid/operators/reshape_op.h" -using CUDA = paddle::platform::CUDADeviceContext; - -REGISTER_OP_CUDA_KERNEL(reshape, paddle::operators::ReshapeKernel, - paddle::operators::ReshapeKernel, - paddle::operators::ReshapeKernel, - paddle::operators::ReshapeKernel); +namespace ops = paddle::operators; +REGISTER_OP_CUDA_KERNEL_EX(reshape, float, ops::ReshapeKernel, double, + ops::ReshapeKernel, int, ops::ReshapeKernel, int64_t, + ops::ReshapeKernel); REGISTER_OP_CUDA_KERNEL(reshape_grad, - paddle::operators::ReshapeGradKernel, - paddle::operators::ReshapeGradKernel, - paddle::operators::ReshapeGradKernel, - paddle::operators::ReshapeGradKernel); + paddle::operators::ReshapeGradKernel, + paddle::operators::ReshapeGradKernel, + paddle::operators::ReshapeGradKernel, + paddle::operators::ReshapeGradKernel); diff --git a/paddle/fluid/operators/reshape_op.h b/paddle/fluid/operators/reshape_op.h index 3dd8c7c11e..c0b57d11d3 100644 --- a/paddle/fluid/operators/reshape_op.h +++ b/paddle/fluid/operators/reshape_op.h @@ -118,72 +118,21 @@ class ReshapeOp : public framework::OperatorWithKernel { } }; -template -class ReshapeKernel : public framework::OpKernel { +class ReshapeKernel : public framework::OpKernelBase { public: - void Compute(const framework::ExecutionContext &ctx) const { - auto *out = ctx.Output("Out"); - auto *in = ctx.Input("X"); - - auto *shape_tensor = ctx.HasInput("Shape") - ? ctx.Input("Shape") - : nullptr; - - framework::DDim out_dims = out->dims(); - - if (shape_tensor) { - auto *shape_data = shape_tensor->data(); - framework::Tensor cpu_shape_tensor; - if (platform::is_gpu_place(ctx.GetPlace())) { - TensorCopySync(*shape_tensor, platform::CPUPlace(), &cpu_shape_tensor); - shape_data = cpu_shape_tensor.data(); - } - auto shape = - std::vector(shape_data, shape_data + shape_tensor->numel()); - out_dims = ReshapeOp::ValidateShape(shape, in->dims()); - } - if (!in->lod().empty()) { - PADDLE_ENFORCE_EQ( - out_dims[0], in->dims()[0], - "Reshape operator cannot reshape an input sequence batch " - "into an output sequence batch that has a different " - "number of time steps. Please consider using " - "sequence_reshape op."); - } + void Compute(const framework::ExecutionContext &ctx) const final; +}; - bool inplace = ctx.Attr("inplace"); - out->Resize(out_dims); - if (!inplace) { - out->mutable_data(ctx.GetPlace()); - framework::TensorCopySync(*in, ctx.GetPlace(), out); - out->Resize(out_dims); - } else { - out->ShareDataWith(*in); - out->Resize(out_dims); - } - } +class ReshapeGradKernelBase : public framework::OpKernelBase { + public: + void Compute(const framework::ExecutionContext &ctx) const; }; -template -class ReshapeGradKernel : public framework::OpKernel { +template +class ReshapeGradKernel : public ReshapeGradKernelBase { public: - void Compute(const framework::ExecutionContext &ctx) const { - auto *d_out = ctx.Input(framework::GradVarName("Out")); - auto *d_x = ctx.Output(framework::GradVarName("X")); - - d_x->mutable_data(ctx.GetPlace()); - bool inplace = ctx.Attr("inplace"); - - auto in_dims = d_x->dims(); - if (!inplace) { - framework::TensorCopy(*d_out, ctx.GetPlace(), ctx.device_context(), d_x); - ctx.device_context().Wait(); - d_x->Resize(in_dims); - } else { - d_x->ShareDataWith(*d_out); - d_x->Resize(in_dims); - } - } + // Tell register element type. + using ELEMENT_TYPE = T; }; } // namespace operators } // namespace paddle From 3b00ed81a996b8a1b89fe81aa6e4b1a95c65e9e5 Mon Sep 17 00:00:00 2001 From: yuyang18 Date: Mon, 2 Jul 2018 16:19:52 +0800 Subject: [PATCH 102/130] Make Kernel registed as a function --- paddle/fluid/framework/op_registry.h | 5 ++++- paddle/fluid/framework/operator.cc | 2 +- paddle/fluid/framework/operator.h | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/paddle/fluid/framework/op_registry.h b/paddle/fluid/framework/op_registry.h index 43ab227a94..674159b732 100644 --- a/paddle/fluid/framework/op_registry.h +++ b/paddle/fluid/framework/op_registry.h @@ -91,7 +91,10 @@ struct OpKernelRegistrarFunctor { OpKernelType key(ToDataType(std::type_index(typeid(T))), PlaceType(), StringToDataLayout(data_layout), StringToLibraryType(library_type)); - OperatorWithKernel::AllOpKernels()[op_type][key].reset(new KERNEL_TYPE); + OperatorWithKernel::AllOpKernels()[op_type][key] = + [](const framework::ExecutionContext& ctx) { + KERNEL_TYPE().Compute(ctx); + }; constexpr auto size = std::tuple_size>::value; OpKernelRegistrarFunctor diff --git a/paddle/fluid/framework/operator.cc b/paddle/fluid/framework/operator.cc index 71cd5a3908..3cf8e8696d 100644 --- a/paddle/fluid/framework/operator.cc +++ b/paddle/fluid/framework/operator.cc @@ -651,7 +651,7 @@ void OperatorWithKernel::RunImpl(const Scope& scope, dev_ctx = pool.Get(expected_kernel_key.place_); } - kernel_iter->second->Compute(ExecutionContext(*this, exec_scope, *dev_ctx)); + kernel_iter->second(ExecutionContext(*this, exec_scope, *dev_ctx)); if (!transfered_inplace_vars.empty()) { // there is inplace variable has been transfered. diff --git a/paddle/fluid/framework/operator.h b/paddle/fluid/framework/operator.h index 1550d5df17..01d750efbb 100644 --- a/paddle/fluid/framework/operator.h +++ b/paddle/fluid/framework/operator.h @@ -347,9 +347,9 @@ class OpKernel : public OpKernelBase { class OperatorWithKernel : public OperatorBase { public: + using OpKernelFunc = std::function; using OpKernelMap = - std::unordered_map, - OpKernelType::Hash>; + std::unordered_map; OperatorWithKernel(const std::string& type, const VariableNameMap& inputs, const VariableNameMap& outputs, const AttributeMap& attrs) From 82866d4a1810f8a1c3a8a9b7e866a133c4fe5c4b Mon Sep 17 00:00:00 2001 From: yuyang18 Date: Mon, 2 Jul 2018 16:54:41 +0800 Subject: [PATCH 103/130] Add register kernel functor and shrink reshape op * Shrink reshape_op library size * User can register a standard C++ functor as a op kernel --- paddle/fluid/framework/op_registry.h | 13 +++++-------- paddle/fluid/operators/reshape_op.cc | 18 +++++++++--------- paddle/fluid/operators/reshape_op.cu.cc | 16 ++++++++-------- paddle/fluid/operators/reshape_op.h | 14 ++++---------- 4 files changed, 26 insertions(+), 35 deletions(-) diff --git a/paddle/fluid/framework/op_registry.h b/paddle/fluid/framework/op_registry.h index 751e150845..3314e41cc5 100644 --- a/paddle/fluid/framework/op_registry.h +++ b/paddle/fluid/framework/op_registry.h @@ -146,7 +146,7 @@ struct OpKernelRegistrarFunctorEx struct OpKernelRegistrarFunctorEx { - using KERNEL_TYPE = + using Functor = typename std::tuple_element>::type; using T = @@ -154,10 +154,7 @@ struct OpKernelRegistrarFunctorEx>::type; void operator()(const char* op_type, const char* library_type) const { - RegisterKernelClass( - op_type, library_type, [](const framework::ExecutionContext& ctx) { - KERNEL_TYPE().Compute(ctx); - }); + RegisterKernelClass(op_type, library_type, Functor()); constexpr auto size = std::tuple_size>::value; @@ -238,11 +235,11 @@ struct OpKernelRegistrarFunctorEx("Out"); auto *in = ctx.Input("X"); @@ -147,7 +147,7 @@ void ReshapeKernel::Compute(const framework::ExecutionContext &ctx) const { out->Resize(out_dims); } } -void ReshapeGradKernelBase::Compute( +void ReshapeGradKernel::operator()( const framework::ExecutionContext &ctx) const { auto *d_out = ctx.Input(framework::GradVarName("Out")); auto *d_x = ctx.Output(framework::GradVarName("X")); @@ -172,10 +172,10 @@ namespace ops = paddle::operators; REGISTER_OPERATOR(reshape, ops::ReshapeOp, ops::ReshapeOpMaker, paddle::framework::DefaultGradOpDescMaker); REGISTER_OPERATOR(reshape_grad, ops::ReshapeGradOp); -REGISTER_OP_CPU_KERNEL_EX(reshape, float, ops::ReshapeKernel, double, - ops::ReshapeKernel, int, ops::ReshapeKernel, int64_t, - ops::ReshapeKernel); -REGISTER_OP_CPU_KERNEL(reshape_grad, ops::ReshapeGradKernel, - ops::ReshapeGradKernel, - ops::ReshapeGradKernel, - ops::ReshapeGradKernel); +REGISTER_OP_CPU_KERNEL_FUNCTOR(reshape, float, ops::ReshapeKernel, double, + ops::ReshapeKernel, int, ops::ReshapeKernel, + int64_t, ops::ReshapeKernel); +REGISTER_OP_CPU_KERNEL_FUNCTOR(reshape_grad, float, ops::ReshapeGradKernel, + double, ops::ReshapeGradKernel, int, + ops::ReshapeGradKernel, int64_t, + ops::ReshapeGradKernel); diff --git a/paddle/fluid/operators/reshape_op.cu.cc b/paddle/fluid/operators/reshape_op.cu.cc index 8a09321eef..374b2dbc6a 100644 --- a/paddle/fluid/operators/reshape_op.cu.cc +++ b/paddle/fluid/operators/reshape_op.cu.cc @@ -14,11 +14,11 @@ limitations under the License. */ #include "paddle/fluid/operators/reshape_op.h" namespace ops = paddle::operators; -REGISTER_OP_CUDA_KERNEL_EX(reshape, float, ops::ReshapeKernel, double, - ops::ReshapeKernel, int, ops::ReshapeKernel, int64_t, - ops::ReshapeKernel); -REGISTER_OP_CUDA_KERNEL(reshape_grad, - paddle::operators::ReshapeGradKernel, - paddle::operators::ReshapeGradKernel, - paddle::operators::ReshapeGradKernel, - paddle::operators::ReshapeGradKernel); + +REGISTER_OP_CUDA_KERNEL_FUNCTOR(reshape, float, ops::ReshapeKernel, double, + ops::ReshapeKernel, int, ops::ReshapeKernel, + int64_t, ops::ReshapeKernel); +REGISTER_OP_CUDA_KERNEL_FUNCTOR(reshape_grad, float, ops::ReshapeGradKernel, + double, ops::ReshapeGradKernel, int, + ops::ReshapeGradKernel, int64_t, + ops::ReshapeGradKernel); diff --git a/paddle/fluid/operators/reshape_op.h b/paddle/fluid/operators/reshape_op.h index c0b57d11d3..68e1690a53 100644 --- a/paddle/fluid/operators/reshape_op.h +++ b/paddle/fluid/operators/reshape_op.h @@ -118,21 +118,15 @@ class ReshapeOp : public framework::OperatorWithKernel { } }; -class ReshapeKernel : public framework::OpKernelBase { +class ReshapeKernel { public: - void Compute(const framework::ExecutionContext &ctx) const final; + void operator()(const framework::ExecutionContext &ctx) const; }; -class ReshapeGradKernelBase : public framework::OpKernelBase { +class ReshapeGradKernel { public: - void Compute(const framework::ExecutionContext &ctx) const; + void operator()(const framework::ExecutionContext &ctx) const; }; -template -class ReshapeGradKernel : public ReshapeGradKernelBase { - public: - // Tell register element type. - using ELEMENT_TYPE = T; -}; } // namespace operators } // namespace paddle From 6038a6312034f8914071c6428c7cd62dd3fed594 Mon Sep 17 00:00:00 2001 From: yuyang18 Date: Mon, 2 Jul 2018 17:02:51 +0800 Subject: [PATCH 104/130] Fix fc mkldnn op --- paddle/fluid/operators/fc_mkldnn_op.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/paddle/fluid/operators/fc_mkldnn_op.cc b/paddle/fluid/operators/fc_mkldnn_op.cc index 847b7b0c12..99fa659a35 100644 --- a/paddle/fluid/operators/fc_mkldnn_op.cc +++ b/paddle/fluid/operators/fc_mkldnn_op.cc @@ -115,6 +115,7 @@ class MKLDNNMemory { template class FCMKLDNNOpKernel : public paddle::framework::OpKernel { + public: void Compute(const paddle::framework::ExecutionContext& ctx) const override { PADDLE_ENFORCE(paddle::platform::is_cpu_place(ctx.GetPlace()), "It must use CPUPlace."); From adfaf9a6657b677fab796ea223640e1375150fde Mon Sep 17 00:00:00 2001 From: Wu Yi Date: Mon, 2 Jul 2018 17:04:29 +0800 Subject: [PATCH 105/130] make transpiler test reliable (#11848) * make transpiler test reliable * add more * follow comments --- .../tests/unittests/test_dist_transpiler.py | 247 ++++++++++++++++-- .../unittests/test_simple_dist_transpiler.py | 80 ------ .../fluid/tests/unittests/transpiler_test.py | 73 ------ .../fluid/transpiler/distribute_transpiler.py | 19 +- 4 files changed, 235 insertions(+), 184 deletions(-) delete mode 100644 python/paddle/fluid/tests/unittests/test_simple_dist_transpiler.py delete mode 100644 python/paddle/fluid/tests/unittests/transpiler_test.py diff --git a/python/paddle/fluid/tests/unittests/test_dist_transpiler.py b/python/paddle/fluid/tests/unittests/test_dist_transpiler.py index b4379ad447..75b4b4e50d 100644 --- a/python/paddle/fluid/tests/unittests/test_dist_transpiler.py +++ b/python/paddle/fluid/tests/unittests/test_dist_transpiler.py @@ -15,51 +15,248 @@ import unittest import paddle.fluid as fluid from paddle.fluid.transpiler.distribute_transpiler import delete_ops +import traceback -from transpiler_test import TranspilerTest - -class TestDistTranspiler(TranspilerTest): +class TranspilerTest(unittest.TestCase): def setUp(self): - self.current_pserver_ep = "127.0.0.1:6174" + self.trainer_id = 0 + self.trainers = 2 + self.pservers = 2 + # NOTE: we do not actually bind this port + self.pserver_eps = "127.0.0.1:6174,127.0.0.1:6175" + self.pserver1_ep = "127.0.0.1:6174" + self.pserver2_ep = "127.0.0.1:6175" + self.slice_var_up = True + self.sync_mode = True + self.transpiler = None + + def net_conf(self): + x = fluid.layers.data(name='x', shape=[1000], dtype='float32') + y_predict = fluid.layers.fc(input=x, + size=1000, + act=None, + param_attr=fluid.ParamAttr(name='fc_w'), + bias_attr=fluid.ParamAttr(name='fc_b')) + y = fluid.layers.data(name='y', shape=[1], dtype='float32') + cost = fluid.layers.square_error_cost(input=y_predict, label=y) + avg_cost = fluid.layers.mean(cost) + sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.1) + sgd_optimizer.minimize(avg_cost) + return + + def get_main_program(self): + main = fluid.Program() + with fluid.program_guard(main): + self.net_conf() + self.origin_prog = main.clone() + return main + + def get_trainer(self): + t = self._transpiler_instance() + return t.get_trainer_program() + + def get_pserver(self, ep): + t = self._transpiler_instance() + pserver = t.get_pserver_program(ep) + startup = t.get_startup_program(ep, pserver) + return pserver, startup + + def _transpiler_instance(self): + if not self.transpiler: + main = self.get_main_program() + self.transpiler = fluid.DistributeTranspiler() + self.transpiler.transpile( + self.trainer_id, + program=main, + pservers=self.pserver_eps, + trainers=self.trainers, + slice_var_up=self.slice_var_up, + sync_mode=self.sync_mode) + return self.transpiler + +class TestBasicModel(TranspilerTest): def test_transpiler(self): + pserver, startup = self.get_pserver(self.pserver1_ep) + pserver2, startup2 = self.get_pserver(self.pserver2_ep) + trainer = self.get_trainer() - pserver, startup = self.get_pserver(self.current_pserver_ep) - self.assertEqual([op.type for op in trainer.global_block().ops], - self.get_expect_trainer_ops()) + + self.assertEqual([op.type for op in trainer.global_block().ops], [ + 'mul', 'elementwise_add', 'elementwise_sub', 'square', 'mean', + 'fill_constant', 'mean_grad', 'square_grad', 'elementwise_sub_grad', + 'elementwise_add_grad', 'send', 'mul_grad', 'split_byref', 'send', + 'send_barrier', 'recv', 'recv', 'fetch_barrier', 'concat' + ]) self.assertEqual(len(pserver.blocks), 3) # block0: listen_and_serv self.assertEqual([op.type for op in pserver.blocks[0].ops], ["listen_and_serv"]) - # block2: optimize pass + # block1~2: optimize pass self.assertEqual([op.type for op in pserver.blocks[1].ops], ["sum", "scale", "sgd"]) - # confirm startup program - - self.assertEqual([op.type for op in startup.global_block().ops], [ - "fill_constant", "fill_constant", "uniform_random", "uniform_random" - ]) - + self.assertEqual([op.type for op in startup.global_block().ops], + ["fill_constant", "fill_constant", "uniform_random"]) # the variable #fc_w will be split into two blocks fc_w_var = startup.global_block().var("fc_w.block1") self.assertEqual(fc_w_var.shape, (500, 1000)) + # all parameters should be optimized on pserver + + pserver_params = [] + for prog in [pserver, pserver2]: + for blk in prog.blocks: + for op in blk.ops: + if "Param" in op.input_names: + param_name = op.input("Param")[0] + is_block_idx = param_name.find(".block") + if is_block_idx != -1: + origin_param_name = param_name[:is_block_idx] + else: + origin_param_name = param_name + pserver_params.append(origin_param_name) + trainer_params = [] + for op in self.origin_prog.global_block().ops: + if "Param" in op.input_names: + trainer_params.append(op.input("Param")[0]) + self.assertEqual(set(pserver_params), set(trainer_params)) + + +class TestNoSliceVar(TranspilerTest): + def setUp(self): + super(TestNoSliceVar, self).setUp() + self.slice_var_up = False + + def test_transpiler(self): + _, startup = self.get_pserver(self.pserver1_ep) + _, startup2 = self.get_pserver(self.pserver2_ep) + + if startup.global_block().vars.has_key("fc_w"): + fc_w_var = startup.global_block().vars["fc_w"] + elif startup2.global_block().vars.has_key("fc_w"): + fc_w_var = startup2.global_block().vars["fc_w"] + + self.assertEqual(fc_w_var.shape, (1000, 1000)) - def get_expect_trainer_ops(self): - trainer = fluid.Program() - with fluid.program_guard(trainer): - optimize_ops, params_grads = self.net_conf() +class TestLRDecay(TranspilerTest): + def net_conf(self): + x = fluid.layers.data(name='x', shape=[1000], dtype='float32') + y_predict = fluid.layers.fc(input=x, + size=1000, + act=None, + param_attr=fluid.ParamAttr(name='fc_w'), + bias_attr=fluid.ParamAttr(name='fc_b')) + y = fluid.layers.data(name='y', shape=[1], dtype='float32') + cost = fluid.layers.square_error_cost(input=y_predict, label=y) + avg_cost = fluid.layers.mean(cost) + sgd_optimizer = fluid.optimizer.SGD( + learning_rate=fluid.layers.exponential_decay( + learning_rate=1.0, + decay_steps=2100, + decay_rate=0.1, + staircase=True)) + sgd_optimizer.minimize(avg_cost) + return + + def test_transpiler(self): + pserver, startup = self.get_pserver(self.pserver1_ep) + trainer = self.get_trainer() + + self.assertEqual(len(pserver.blocks), 4) + lr_decay_ops = [op.type for op in pserver.blocks[1].ops] + self.assertEqual(lr_decay_ops, [ + "increment", "cast", "fill_constant", "elementwise_div", "floor", + "fill_constant", "elementwise_pow", "fill_constant", + "elementwise_mul" + ]) + + +class TestLRDecayConditional(TranspilerTest): + def net_conf(self): + x = fluid.layers.data(name='x', shape=[1000], dtype='float32') + y_predict = fluid.layers.fc(input=x, + size=1000, + act=None, + param_attr=fluid.ParamAttr(name='fc_w'), + bias_attr=fluid.ParamAttr(name='fc_b')) + y = fluid.layers.data(name='y', shape=[1], dtype='float32') + cost = fluid.layers.square_error_cost(input=y_predict, label=y) + avg_cost = fluid.layers.mean(cost) + sgd_optimizer = fluid.optimizer.SGD( + learning_rate=fluid.layers.piecewise_decay([10000, 20000], + [1.0, 0.5, 1.0])) + sgd_optimizer.minimize(avg_cost) + return + + def test_transpiler(self): + pserver, startup = self.get_pserver(self.pserver1_ep) + trainer = self.get_trainer() + + serv_op = pserver.blocks[0].ops[0] + sub_blocks = [] + optimize_blocks = [] + for b in serv_op.attrs["optimize_blocks"]: + optimize_blocks.append(b.idx) + for b in pserver.blocks: + if b.idx not in optimize_blocks: + sub_blocks.append(b.idx) + + self.assertEqual(len(pserver.blocks), 7) + lr_decay_ops = [op.type for op in pserver.blocks[1].ops] + self.assertEqual(lr_decay_ops, [ + "increment", "cast", "fill_constant", "fill_constant", "less_than", + "logical_not", "conditional_block", "fill_constant", + "fill_constant", "less_than", "logical_not", "logical_and", + "logical_and", "conditional_block", "fill_constant", + "conditional_block" + ]) + # test the condition blocks + for b in sub_blocks: + if b == 0: + continue + block = pserver.blocks[b] + self.assertEqual([op.type for op in block.ops], ["assign"]) + + +class TestL2Decay(TranspilerTest): + def net_conf(self): + x = fluid.layers.data(name='x', shape=[1000], dtype='float32') + y_predict = fluid.layers.fc( + input=x, + size=1000, + act=None, + param_attr=fluid.ParamAttr( + name='fc_w', + regularizer=fluid.regularizer.L2Decay(), + gradient_clip=fluid.clip.GradientClipByValue(0.1)), + bias_attr=fluid.ParamAttr(name='fc_b')) + y = fluid.layers.data(name='y', shape=[1], dtype='float32') + cost = fluid.layers.square_error_cost(input=y_predict, label=y) + avg_cost = fluid.layers.mean(cost) + sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.1) + sgd_optimizer.minimize(avg_cost) + return + + def test_transpiler(self): + pserver, startup = self.get_pserver(self.pserver1_ep) + trainer = self.get_trainer() + + self.assertEqual(len(pserver.blocks), 3) + self.assertEqual([op.type for op in pserver.blocks[1].ops], + ["sum", "scale", "clip", "sgd"]) + self.assertEqual( + [op.type for op in pserver.blocks[2].ops], + ["sum", "scale", "clip", "scale", "elementwise_add", "sgd"]) + # TODO(typhoonzero): test clipping and L2Decay ops are removed from trainer + - delete_ops(trainer.global_block(), optimize_ops) - ops = [op.type for op in trainer.global_block().ops] + [ - "split_byref", "send", "send_barrier", "recv", "recv", - "fetch_barrier", "concat" - ] - ops.insert(ops.index("elementwise_add_grad") + 1, "send") - return ops + # FIXME(typhoonzero): need to add test for async case: + # see https://github.com/PaddlePaddle/Paddle/issues/11691 +class TestAsyncSGD(TranspilerTest): + pass if __name__ == "__main__": diff --git a/python/paddle/fluid/tests/unittests/test_simple_dist_transpiler.py b/python/paddle/fluid/tests/unittests/test_simple_dist_transpiler.py deleted file mode 100644 index f4aa7426bc..0000000000 --- a/python/paddle/fluid/tests/unittests/test_simple_dist_transpiler.py +++ /dev/null @@ -1,80 +0,0 @@ -# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import numpy as np - -import paddle.fluid as fluid -from paddle.fluid.transpiler.distribute_transpiler import delete_ops - -from transpiler_test import TranspilerTest - - -class TestSimpleDistTranspiler(TranspilerTest): - def setUp(self): - self.current_pserver_ep = "127.0.0.1:6175" - - def test_simple_transpiler(self): - np.random.seed(1) - - trainer = self.get_trainer() - pserver, startup = self.get_pserver(self.current_pserver_ep) - self.assertEqual([op.type for op in trainer.global_block().ops], - self.get_expect_trainer_ops()) - - self.assertEqual(len(pserver.blocks), 2) - # block0: listen_and_serv - self.assertEqual([op.type for op in pserver.blocks[0].ops], - ["listen_and_serv"]) - # block1: optimize pass - self.assertEqual([op.type for op in pserver.blocks[1].ops], - ["sum", "scale", "sgd"]) - - # confirm startup program - self.assertEqual([op.type for op in startup.global_block().ops], - ["fill_constant", "uniform_random", "uniform_random"]) - - # the variable #fc_w will NOT be splited - fc_w_var = startup.global_block().var("fc_w@GRAD") - self.assertEqual(fc_w_var.shape, (1000, 1000)) - - fc_w_var = startup.global_block().var("fc_w@GRAD.trainer_0") - self.assertEqual(fc_w_var.shape, (1000, 1000)) - - def get_expect_trainer_ops(self): - trainer = fluid.Program() - - with fluid.program_guard(trainer): - optimize_ops, params_grads = self.net_conf() - - delete_ops(trainer.global_block(), optimize_ops) - ops = [op.type for op in trainer.global_block().ops] + [ - "send", "send_barrier", "recv", "recv", "fetch_barrier" - ] - ops.insert(ops.index("elementwise_add_grad") + 1, "send") - return ops - - def _transpiler_instance(self): - main = self.get_main_program() - t = fluid.DistributeTranspiler() - t.transpile( - self.trainer_id, - program=main, - pservers=self.pserver_eps, - trainers=self.trainers, - slice_var_up=False) - return t - - -if __name__ == "__main__": - unittest.main() diff --git a/python/paddle/fluid/tests/unittests/transpiler_test.py b/python/paddle/fluid/tests/unittests/transpiler_test.py deleted file mode 100644 index d84c5d9c41..0000000000 --- a/python/paddle/fluid/tests/unittests/transpiler_test.py +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest -import numpy as np - -import paddle.fluid as fluid -import paddle.fluid.core as core -import paddle.fluid.layers as layers - - -class TranspilerTest(unittest.TestCase): - @classmethod - def setUpClass(self): - self.trainer_id = 0 - self.trainers = 2 - self.pservers = 2 - self.pserver_eps = "127.0.0.1:6174,127.0.0.1:6175" - - def net_conf(self): - x = fluid.layers.data(name='x', shape=[1000], dtype='float32') - - y_predict = fluid.layers.fc(input=x, - size=1000, - act=None, - param_attr=fluid.ParamAttr(name='fc_w')) - - y = fluid.layers.data(name='y', shape=[1], dtype='float32') - - cost = fluid.layers.square_error_cost(input=y_predict, label=y) - avg_cost = fluid.layers.mean(cost) - sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.1) - - optimize_ops, params_grads = sgd_optimizer.minimize(avg_cost) - return optimize_ops, params_grads - - def get_main_program(self): - main = fluid.Program() - - with fluid.program_guard(main): - self.net_conf() - - return main - - def get_trainer(self): - return self._transpiler_instance().get_trainer_program() - - def get_pserver(self, ep): - t = self._transpiler_instance() - pserver = t.get_pserver_program(ep) - startup = t.get_startup_program(ep, pserver) - return pserver, startup - - def _transpiler_instance(self): - main = self.get_main_program() - t = fluid.DistributeTranspiler() - t.transpile( - self.trainer_id, - program=main, - pservers=self.pserver_eps, - trainers=self.trainers) - return t diff --git a/python/paddle/fluid/transpiler/distribute_transpiler.py b/python/paddle/fluid/transpiler/distribute_transpiler.py index 343901cda3..05fed72ee6 100644 --- a/python/paddle/fluid/transpiler/distribute_transpiler.py +++ b/python/paddle/fluid/transpiler/distribute_transpiler.py @@ -455,6 +455,8 @@ class DistributeTranspiler(object): __append_optimize_op__(op, per_opt_block, grad_to_block_id, merged_var, lr_ops) + # dedup grad to ids list + grad_to_block_id = list(set(grad_to_block_id)) # append global ops if global_ops: opt_state_block = pserver_program.create_block( @@ -960,8 +962,6 @@ class DistributeTranspiler(object): if not block_map.has_key(varname): block_map[varname] = [] block_map[varname].append((long(offset), long(size))) - # Do not remove this important debug message: - print("block map: %s" % block_map) for varname, splited in block_map.iteritems(): orig_var = program.global_block().var(varname) @@ -1401,6 +1401,16 @@ class DistributeTranspiler(object): break return lr_ops + def _is_opt_role_op(self, op): + # NOTE: depend on oprole to find out whether this op is for + # optimize + op_maker = core.op_proto_and_checker_maker + optimize_role = core.op_proto_and_checker_maker.OpRole.Optimize + if op_maker.kOpRoleAttrName() in op.attrs and \ + int(op.attrs[op_maker.kOpRoleAttrName()]) == int(optimize_role): + return True + return False + def _get_optimize_pass(self): """ Get optimizer operators, paramters and gradients from origin_program @@ -1413,10 +1423,7 @@ class DistributeTranspiler(object): params_grads = [] origin_var_dict = self.origin_program.global_block().vars for op in block.ops: - # NOTE(Yancey1989): we can not use op role to distinguish an optimizer op - # or not, because all ops in optimizer sub-graph would - # sign the optimizer op role - if self._is_optimizer_op(op): + if self._is_opt_role_op(op): opt_ops.append(op) # HACK(wuyi): if we find grad vars from input of optimize # ops, we may get the output of clip op. Use syntax "@GRAD" From 550ab8d7236b30d716ce4a44d2a679cee16434a5 Mon Sep 17 00:00:00 2001 From: yuyang18 Date: Mon, 2 Jul 2018 17:23:42 +0800 Subject: [PATCH 106/130] Use single file than multiple files --- paddle/fluid/operators/reshape_op.cc | 216 ++++++++++++++++++------ paddle/fluid/operators/reshape_op.cu.cc | 24 --- paddle/fluid/operators/reshape_op.h | 132 --------------- 3 files changed, 164 insertions(+), 208 deletions(-) delete mode 100644 paddle/fluid/operators/reshape_op.cu.cc delete mode 100644 paddle/fluid/operators/reshape_op.h diff --git a/paddle/fluid/operators/reshape_op.cc b/paddle/fluid/operators/reshape_op.cc index 6e384e9060..918f3be533 100644 --- a/paddle/fluid/operators/reshape_op.cc +++ b/paddle/fluid/operators/reshape_op.cc @@ -12,14 +12,108 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/fluid/operators/reshape_op.h" - #include #include +#include "paddle/fluid/framework/op_registry.h" namespace paddle { namespace operators { +class ReshapeOp : public framework::OperatorWithKernel { + public: + ReshapeOp(const std::string &type, const framework::VariableNameMap &inputs, + const framework::VariableNameMap &outputs, + const framework::AttributeMap &attrs) + : OperatorWithKernel(type, inputs, outputs, attrs) {} + + void InferShape(framework::InferShapeContext *ctx) const override { + PADDLE_ENFORCE(ctx->HasInput("X"), + "Input(X) of ReshapeOp should not be null."); + PADDLE_ENFORCE(ctx->HasOutput("Out"), + "Output(Out) of ReshapeOp should not be null."); + + const std::vector &shape = ctx->Attrs().Get>("shape"); + PADDLE_ENFORCE(!shape.empty(), + "The shape information must be set by Attr(shape)."); + + if (ctx->HasInput("Shape") && ctx->IsRuntime()) { + // If true, set the shape of Output(Out) according to Input(Shape) in + // ReshapeKernel with ExecutionContext. Also check LoD in ReshapeKernel. + ctx->ShareLoD("X", /*->*/ "Out"); + return; + } + + auto x_dims = ctx->GetInputDim("X"); + auto out_dims = ValidateShape(shape, x_dims); + ctx->SetOutputDim("Out", out_dims); + if (x_dims[0] == out_dims[0]) { + // Only pass LoD when the first dimension of output and Input(X) + // are the same. + ctx->ShareLoD("X", /*->*/ "Out"); + } + } + + static framework::DDim ValidateShape(const std::vector shape, + const framework::DDim &in_dims) { + const int64_t in_size = framework::product(in_dims); + // only one dimension can be set to -1, whose size will be automatically + // infered. + const int64_t unk_dim_val = -1; + const int64_t copy_dim_val = 0; + + std::vector output_shape(shape.size(), 0); + int64_t capacity = 1; + int unk_dim_idx = -1; + for (size_t i = 0; i < shape.size(); ++i) { + if (shape[i] == unk_dim_val) { + PADDLE_ENFORCE( + unk_dim_idx == -1, + "Only one input dimension of Attr(shape) can be unknown."); + unk_dim_idx = i; + } else if (shape[i] == copy_dim_val) { + PADDLE_ENFORCE( + static_cast(i) < in_dims.size(), + "The index of dimension to copy from input shape must be less " + "than the size of input shape."); + } else { + PADDLE_ENFORCE( + shape[i] > 0, + "Each input dimension of Attr(shape) must not be negtive except " + "one unknown dimension."); + } + + capacity *= (shape[i] ? shape[i] : in_dims[i]); + output_shape[i] = + (shape[i] ? static_cast(shape[i]) : in_dims[i]); + } + + if (unk_dim_idx != -1) { + if (in_size > 0) { + // in_size < 0 and is un-determinate in compile time, skip the check, + // for example, in_dims = [-1, 8, 1, 1], shape = [-1, 3, 8], + // capacity = -24, in_size = -8, output_shape[0] = 0 + // the following check will fail. + output_shape[unk_dim_idx] = -in_size / capacity; + PADDLE_ENFORCE_EQ(output_shape[unk_dim_idx] * capacity, -in_size, + "Invalid shape is given."); + } else { + output_shape[unk_dim_idx] = -1; + } + } else { + PADDLE_ENFORCE_EQ(capacity, in_size, "Invalid shape is given."); + } + return framework::make_ddim(output_shape); + } + + protected: + framework::OpKernelType GetExpectedKernelType( + const framework::ExecutionContext &ctx) const override { + return framework::OpKernelType( + framework::ToDataType(ctx.Input("X")->type()), + ctx.device_context()); + } +}; + class ReshapeOpMaker : public framework::OpProtoAndCheckerMaker { public: void Make() override { @@ -107,64 +201,72 @@ class ReshapeGradOp : public framework::OperatorWithKernel { } }; -void ReshapeKernel::operator()(const framework::ExecutionContext &ctx) const { - auto *out = ctx.Output("Out"); - auto *in = ctx.Input("X"); +class ReshapeKernel { + public: + void operator()(const framework::ExecutionContext &ctx) const { + auto *out = ctx.Output("Out"); + auto *in = ctx.Input("X"); - auto *shape_tensor = ctx.HasInput("Shape") - ? ctx.Input("Shape") - : nullptr; + auto *shape_tensor = ctx.HasInput("Shape") + ? ctx.Input("Shape") + : nullptr; - framework::DDim out_dims = out->dims(); + framework::DDim out_dims = out->dims(); - if (shape_tensor) { - auto *shape_data = shape_tensor->data(); - framework::Tensor cpu_shape_tensor; - if (platform::is_gpu_place(ctx.GetPlace())) { - TensorCopySync(*shape_tensor, platform::CPUPlace(), &cpu_shape_tensor); - shape_data = cpu_shape_tensor.data(); + if (shape_tensor) { + auto *shape_data = shape_tensor->data(); + framework::Tensor cpu_shape_tensor; + if (platform::is_gpu_place(ctx.GetPlace())) { + TensorCopySync(*shape_tensor, platform::CPUPlace(), &cpu_shape_tensor); + shape_data = cpu_shape_tensor.data(); + } + auto shape = + std::vector(shape_data, shape_data + shape_tensor->numel()); + out_dims = ReshapeOp::ValidateShape(shape, in->dims()); + } + if (!in->lod().empty()) { + PADDLE_ENFORCE_EQ( + out_dims[0], in->dims()[0], + "Reshape operator cannot reshape an input sequence batch " + "into an output sequence batch that has a different " + "number of time steps. Please consider using " + "sequence_reshape op."); } - auto shape = - std::vector(shape_data, shape_data + shape_tensor->numel()); - out_dims = ReshapeOp::ValidateShape(shape, in->dims()); - } - if (!in->lod().empty()) { - PADDLE_ENFORCE_EQ(out_dims[0], in->dims()[0], - "Reshape operator cannot reshape an input sequence batch " - "into an output sequence batch that has a different " - "number of time steps. Please consider using " - "sequence_reshape op."); - } - bool inplace = ctx.Attr("inplace"); - out->Resize(out_dims); - if (!inplace) { - out->mutable_data(ctx.GetPlace(), in->type()); - framework::TensorCopySync(*in, ctx.GetPlace(), out); - out->Resize(out_dims); - } else { - out->ShareDataWith(*in); + bool inplace = ctx.Attr("inplace"); out->Resize(out_dims); + if (!inplace) { + out->mutable_data(ctx.GetPlace(), in->type()); + framework::TensorCopySync(*in, ctx.GetPlace(), out); + out->Resize(out_dims); + } else { + out->ShareDataWith(*in); + out->Resize(out_dims); + } } -} -void ReshapeGradKernel::operator()( - const framework::ExecutionContext &ctx) const { - auto *d_out = ctx.Input(framework::GradVarName("Out")); - auto *d_x = ctx.Output(framework::GradVarName("X")); - - d_x->mutable_data(ctx.GetPlace(), d_out->type()); - bool inplace = ctx.Attr("inplace"); - - auto in_dims = d_x->dims(); - if (!inplace) { - framework::TensorCopy(*d_out, ctx.GetPlace(), ctx.device_context(), d_x); - ctx.device_context().Wait(); - d_x->Resize(in_dims); - } else { - d_x->ShareDataWith(*d_out); - d_x->Resize(in_dims); +}; + +class ReshapeGradKernel { + public: + void operator()(const framework::ExecutionContext &ctx) const { + auto *d_out = ctx.Input(framework::GradVarName("Out")); + auto *d_x = ctx.Output(framework::GradVarName("X")); + + d_x->mutable_data(ctx.GetPlace(), d_out->type()); + bool inplace = ctx.Attr("inplace"); + + auto in_dims = d_x->dims(); + if (!inplace) { + framework::TensorCopy(*d_out, ctx.GetPlace(), ctx.device_context(), d_x); + ctx.device_context().Wait(); + d_x->Resize(in_dims); + } else { + d_x->ShareDataWith(*d_out); + d_x->Resize(in_dims); + } } -} +}; + } // namespace operators } // namespace paddle namespace ops = paddle::operators; @@ -179,3 +281,13 @@ REGISTER_OP_CPU_KERNEL_FUNCTOR(reshape_grad, float, ops::ReshapeGradKernel, double, ops::ReshapeGradKernel, int, ops::ReshapeGradKernel, int64_t, ops::ReshapeGradKernel); + +#ifdef PADDLE_WITH_CUDA +REGISTER_OP_CUDA_KERNEL_FUNCTOR(reshape, float, ops::ReshapeKernel, double, + ops::ReshapeKernel, int, ops::ReshapeKernel, + int64_t, ops::ReshapeKernel); +REGISTER_OP_CUDA_KERNEL_FUNCTOR(reshape_grad, float, ops::ReshapeGradKernel, + double, ops::ReshapeGradKernel, int, + ops::ReshapeGradKernel, int64_t, + ops::ReshapeGradKernel); +#endif diff --git a/paddle/fluid/operators/reshape_op.cu.cc b/paddle/fluid/operators/reshape_op.cu.cc deleted file mode 100644 index 374b2dbc6a..0000000000 --- a/paddle/fluid/operators/reshape_op.cu.cc +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. */ - -#include "paddle/fluid/operators/reshape_op.h" -namespace ops = paddle::operators; - -REGISTER_OP_CUDA_KERNEL_FUNCTOR(reshape, float, ops::ReshapeKernel, double, - ops::ReshapeKernel, int, ops::ReshapeKernel, - int64_t, ops::ReshapeKernel); -REGISTER_OP_CUDA_KERNEL_FUNCTOR(reshape_grad, float, ops::ReshapeGradKernel, - double, ops::ReshapeGradKernel, int, - ops::ReshapeGradKernel, int64_t, - ops::ReshapeGradKernel); diff --git a/paddle/fluid/operators/reshape_op.h b/paddle/fluid/operators/reshape_op.h deleted file mode 100644 index 68e1690a53..0000000000 --- a/paddle/fluid/operators/reshape_op.h +++ /dev/null @@ -1,132 +0,0 @@ -/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. */ - -#pragma once - -#include -#include - -#include "paddle/fluid/framework/eigen.h" -#include "paddle/fluid/framework/op_registry.h" - -namespace paddle { -namespace operators { - -class ReshapeOp : public framework::OperatorWithKernel { - public: - ReshapeOp(const std::string &type, const framework::VariableNameMap &inputs, - const framework::VariableNameMap &outputs, - const framework::AttributeMap &attrs) - : OperatorWithKernel(type, inputs, outputs, attrs) {} - - void InferShape(framework::InferShapeContext *ctx) const override { - PADDLE_ENFORCE(ctx->HasInput("X"), - "Input(X) of ReshapeOp should not be null."); - PADDLE_ENFORCE(ctx->HasOutput("Out"), - "Output(Out) of ReshapeOp should not be null."); - - const std::vector &shape = ctx->Attrs().Get>("shape"); - PADDLE_ENFORCE(!shape.empty(), - "The shape information must be set by Attr(shape)."); - - if (ctx->HasInput("Shape") && ctx->IsRuntime()) { - // If true, set the shape of Output(Out) according to Input(Shape) in - // ReshapeKernel with ExecutionContext. Also check LoD in ReshapeKernel. - ctx->ShareLoD("X", /*->*/ "Out"); - return; - } - - auto x_dims = ctx->GetInputDim("X"); - auto out_dims = ValidateShape(shape, x_dims); - ctx->SetOutputDim("Out", out_dims); - if (x_dims[0] == out_dims[0]) { - // Only pass LoD when the first dimension of output and Input(X) - // are the same. - ctx->ShareLoD("X", /*->*/ "Out"); - } - } - - static framework::DDim ValidateShape(const std::vector shape, - const framework::DDim &in_dims) { - const int64_t in_size = framework::product(in_dims); - // only one dimension can be set to -1, whose size will be automatically - // infered. - const int64_t unk_dim_val = -1; - const int64_t copy_dim_val = 0; - - std::vector output_shape(shape.size(), 0); - int64_t capacity = 1; - int unk_dim_idx = -1; - for (size_t i = 0; i < shape.size(); ++i) { - if (shape[i] == unk_dim_val) { - PADDLE_ENFORCE( - unk_dim_idx == -1, - "Only one input dimension of Attr(shape) can be unknown."); - unk_dim_idx = i; - } else if (shape[i] == copy_dim_val) { - PADDLE_ENFORCE( - static_cast(i) < in_dims.size(), - "The index of dimension to copy from input shape must be less " - "than the size of input shape."); - } else { - PADDLE_ENFORCE( - shape[i] > 0, - "Each input dimension of Attr(shape) must not be negtive except " - "one unknown dimension."); - } - - capacity *= (shape[i] ? shape[i] : in_dims[i]); - output_shape[i] = - (shape[i] ? static_cast(shape[i]) : in_dims[i]); - } - - if (unk_dim_idx != -1) { - if (in_size > 0) { - // in_size < 0 and is un-determinate in compile time, skip the check, - // for example, in_dims = [-1, 8, 1, 1], shape = [-1, 3, 8], - // capacity = -24, in_size = -8, output_shape[0] = 0 - // the following check will fail. - output_shape[unk_dim_idx] = -in_size / capacity; - PADDLE_ENFORCE_EQ(output_shape[unk_dim_idx] * capacity, -in_size, - "Invalid shape is given."); - } else { - output_shape[unk_dim_idx] = -1; - } - } else { - PADDLE_ENFORCE_EQ(capacity, in_size, "Invalid shape is given."); - } - return framework::make_ddim(output_shape); - } - - protected: - framework::OpKernelType GetExpectedKernelType( - const framework::ExecutionContext &ctx) const override { - return framework::OpKernelType( - framework::ToDataType(ctx.Input("X")->type()), - ctx.device_context()); - } -}; - -class ReshapeKernel { - public: - void operator()(const framework::ExecutionContext &ctx) const; -}; - -class ReshapeGradKernel { - public: - void operator()(const framework::ExecutionContext &ctx) const; -}; - -} // namespace operators -} // namespace paddle From 89970d87b9aca6097f3e736ad607cf9d43ae7b93 Mon Sep 17 00:00:00 2001 From: minqiyang Date: Mon, 2 Jul 2018 20:45:39 +0800 Subject: [PATCH 107/130] Change WITH_ANAKIN to OFF --- paddle/scripts/paddle_build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paddle/scripts/paddle_build.sh b/paddle/scripts/paddle_build.sh index b66a05aaeb..d8f0b76b7b 100755 --- a/paddle/scripts/paddle_build.sh +++ b/paddle/scripts/paddle_build.sh @@ -106,7 +106,7 @@ function cmake_gen() { -DWITH_FLUID_ONLY=${WITH_FLUID_ONLY:-OFF} -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWITH_CONTRIB=${WITH_CONTRIB:-ON} - -DWITH_ANAKIN=${WITH_ANAKIN:-ON} + -DWITH_ANAKIN=${WITH_ANAKIN:-OFF} -DWITH_INFERENCE_DEMO=${WITH_INFERENCE_DEMO:-ON} ======================================== EOF @@ -135,7 +135,7 @@ EOF -DWITH_FLUID_ONLY=${WITH_FLUID_ONLY:-OFF} \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DWITH_CONTRIB=${WITH_CONTRIB:-ON} \ - -DWITH_ANAKIN=${WITH_ANAKIN:-ON} \ + -DWITH_ANAKIN=${WITH_ANAKIN:-OFF} \ -DWITH_INFERENCE_DEMO=${WITH_INFERENCE_DEMO:-ON} } From 6335889e97b9f6a24dd2af33ed91cf5cee97f1b7 Mon Sep 17 00:00:00 2001 From: minqiyang Date: Mon, 2 Jul 2018 21:20:27 +0800 Subject: [PATCH 108/130] Change Sprintf back --- paddle/fluid/string/printf.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/fluid/string/printf.h b/paddle/fluid/string/printf.h index e0f6202506..062095a1c3 100644 --- a/paddle/fluid/string/printf.h +++ b/paddle/fluid/string/printf.h @@ -84,7 +84,7 @@ void Fprintf(std::ostream& out, const char* fmt, const Args&... args) { } template -std::string Sprintf(const char* fmt = "", const Args&... args) { +std::string Sprintf(const char* fmt, const Args&... args) { std::ostringstream oss; Fprintf(oss, fmt, args...); return oss.str(); From 3fab4f65a46f6393de1238b808445dbbb0c3fc33 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Tue, 3 Jul 2018 00:01:45 +0800 Subject: [PATCH 109/130] Add EOFException to represent EOF in C++ reader --- .../details/data_balance_op_handle.cc | 2 +- .../details/threaded_ssa_graph_executor.cc | 21 ++++++++++++++++--- .../details/threaded_ssa_graph_executor.h | 2 +- paddle/fluid/operators/read_op.cc | 2 +- paddle/fluid/platform/enforce.h | 16 +++++++++++++- paddle/fluid/pybind/exception.cc | 3 +++ .../tests/unittests/test_data_balance.py | 6 ++---- .../tests/unittests/test_multi_file_reader.py | 3 +-- .../tests/unittests/test_multi_pass_reader.py | 3 +-- .../tests/unittests/test_recordio_reader.py | 3 +-- 10 files changed, 44 insertions(+), 17 deletions(-) diff --git a/paddle/fluid/framework/details/data_balance_op_handle.cc b/paddle/fluid/framework/details/data_balance_op_handle.cc index b914851fe0..d07235df58 100644 --- a/paddle/fluid/framework/details/data_balance_op_handle.cc +++ b/paddle/fluid/framework/details/data_balance_op_handle.cc @@ -62,7 +62,7 @@ std::vector> DataBalanceOpHandle::GetBalancePlan( } if (total_size < device_num) { // No enough data. - PADDLE_THROW("There is no next data."); + PADDLE_THROW_EOF(); } std::sort(size_device_vec.begin(), size_device_vec.end(), [](const std::array &a, const std::array &b) { diff --git a/paddle/fluid/framework/details/threaded_ssa_graph_executor.cc b/paddle/fluid/framework/details/threaded_ssa_graph_executor.cc index b1706eb12d..99b10254a7 100644 --- a/paddle/fluid/framework/details/threaded_ssa_graph_executor.cc +++ b/paddle/fluid/framework/details/threaded_ssa_graph_executor.cc @@ -98,9 +98,18 @@ FeedFetchList ThreadedSSAGraphExecutor::Run( if (timeout) { std::lock_guard l(exception_mu_); if (exception_) { - auto exp = *exception_; - exception_.reset(); - throw exp; + std::exception *exp = exception_.get(); + if (dynamic_cast(exp)) { + auto e = *static_cast(exp); + exception_.reset(); + throw e; + } else if (dynamic_cast(exp)) { + auto e = *static_cast(exp); + exception_.reset(); + throw e; + } else { + LOG(FATAL) << "Unknown exception."; + } } else { continue; } @@ -199,6 +208,12 @@ void ThreadedSSAGraphExecutor::RunOp( running_ops_--; ready_var_q->Extend(op->Outputs()); VLOG(10) << op << " " << op->Name() << "Signal posted"; + } catch (platform::EOFException ex) { + std::lock_guard l(exception_mu_); + // EOFException will not cover up existing EnforceNotMet. + if (exception_.get() == nullptr) { + exception_.reset(new platform::EOFException(ex)); + } } catch (platform::EnforceNotMet ex) { std::lock_guard l(exception_mu_); exception_.reset(new platform::EnforceNotMet(ex)); diff --git a/paddle/fluid/framework/details/threaded_ssa_graph_executor.h b/paddle/fluid/framework/details/threaded_ssa_graph_executor.h index 90430be996..c69e0487e2 100644 --- a/paddle/fluid/framework/details/threaded_ssa_graph_executor.h +++ b/paddle/fluid/framework/details/threaded_ssa_graph_executor.h @@ -57,7 +57,7 @@ class ThreadedSSAGraphExecutor : public SSAGraphExecutor { std::vector places_; platform::DeviceContextPool fetch_ctxs_; std::mutex exception_mu_; - std::unique_ptr exception_; + std::unique_ptr exception_; std::atomic running_ops_; void InsertPendingOp(std::unordered_map *pending_ops, diff --git a/paddle/fluid/operators/read_op.cc b/paddle/fluid/operators/read_op.cc index 60e4eb7576..695d7ea83d 100644 --- a/paddle/fluid/operators/read_op.cc +++ b/paddle/fluid/operators/read_op.cc @@ -68,7 +68,7 @@ class ReadOp : public framework::OperatorBase { reader->ReadNext(&ins); if (ins.empty()) { if (Attr("throw_eof_exp")) { - PADDLE_THROW("There is no next data."); + PADDLE_THROW_EOF(); } else { ins.resize(out_arg_names.size()); for (auto& tensor : ins) { diff --git a/paddle/fluid/platform/enforce.h b/paddle/fluid/platform/enforce.h index 70bc9c4e83..3790dd1352 100644 --- a/paddle/fluid/platform/enforce.h +++ b/paddle/fluid/platform/enforce.h @@ -73,7 +73,7 @@ struct EnforceNotMet : public std::exception { } catch (const std::exception& exp) { std::ostringstream sout; - sout << string::Sprintf("%s at [%s:%d]", exp.what(), f, l) << std::endl; + sout << string::Sprintf("'%s' at [%s:%d]", exp.what(), f, l) << std::endl; sout << "PaddlePaddle Call Stacks: " << std::endl; void* call_stack[TRACE_STACK_LIMIT]; @@ -102,6 +102,15 @@ struct EnforceNotMet : public std::exception { const char* what() const noexcept { return err_str_.c_str(); } }; +struct EOFException : public std::exception { + std::string err_str_; + EOFException(const char* err_msg, const char* f, int l) { + err_str_ = string::Sprintf("'%s' at [%s:%d]", err_msg, f, l); + } + + const char* what() const noexcept { return err_str_.c_str(); } +}; + // Because most enforce conditions would evaluate to true, we can use // __builtin_expect to instruct the C++ compiler to generate code that // always forces branch prediction of true. @@ -242,6 +251,11 @@ inline void throw_on_error(T e) { #define PADDLE_ENFORCE(...) ::paddle::platform::throw_on_error(__VA_ARGS__); #endif +#define PADDLE_THROW_EOF() \ + do { \ + throw ::paddle::platform::EOFException("There is no next data.", __FILE__, \ + __LINE__); \ + } while (false) /* * Some enforce helpers here, usage: * int a = 1; diff --git a/paddle/fluid/pybind/exception.cc b/paddle/fluid/pybind/exception.cc index 08a2f185e1..831f30e35f 100644 --- a/paddle/fluid/pybind/exception.cc +++ b/paddle/fluid/pybind/exception.cc @@ -18,10 +18,13 @@ namespace paddle { namespace pybind { void BindException(pybind11::module* m) { + static pybind11::exception eof(*m, "EOFException"); static pybind11::exception exc(*m, "EnforceNotMet"); pybind11::register_exception_translator([](std::exception_ptr p) { try { if (p) std::rethrow_exception(p); + } catch (const platform::EOFException& e) { + eof(e.what()); } catch (const platform::EnforceNotMet& e) { exc(e.what()); } diff --git a/python/paddle/fluid/tests/unittests/test_data_balance.py b/python/paddle/fluid/tests/unittests/test_data_balance.py index b558d7c2ea..cffa3329ac 100644 --- a/python/paddle/fluid/tests/unittests/test_data_balance.py +++ b/python/paddle/fluid/tests/unittests/test_data_balance.py @@ -118,8 +118,7 @@ class TestDataBalance(unittest.TestCase): try: image_val, label_val = parallel_exe.run(fetch_list, return_numpy=True) - except fluid.core.EnforceNotMet as ex: - self.assertIn("There is no next data.", ex.message) + except fluid.core.EOFException: break ins_num = image_val.shape[0] broadcasted_label = np.ones( @@ -162,8 +161,7 @@ class TestDataBalance(unittest.TestCase): try: ins_tensor, label_tensor = parallel_exe.run( fetch_list, return_numpy=False) - except fluid.core.EnforceNotMet as ex: - self.assertIn("There is no next data.", ex.message) + except fluid.core.EOFException: break ins_val = np.array(ins_tensor) diff --git a/python/paddle/fluid/tests/unittests/test_multi_file_reader.py b/python/paddle/fluid/tests/unittests/test_multi_file_reader.py index 3f940203b9..dbd510e64f 100644 --- a/python/paddle/fluid/tests/unittests/test_multi_file_reader.py +++ b/python/paddle/fluid/tests/unittests/test_multi_file_reader.py @@ -64,8 +64,7 @@ class TestMultipleReader(unittest.TestCase): while True: try: img_val, = exe.run(fetch_list=[img]) - except fluid.core.EnforceNotMet as ex: - self.assertIn("There is no next data.", ex.message) + except fluid.core.EOFException: break batch_count += 1 self.assertLessEqual(img_val.shape[0], self.batch_size) diff --git a/python/paddle/fluid/tests/unittests/test_multi_pass_reader.py b/python/paddle/fluid/tests/unittests/test_multi_pass_reader.py index 52e7cc1ffb..7fc9f55044 100644 --- a/python/paddle/fluid/tests/unittests/test_multi_pass_reader.py +++ b/python/paddle/fluid/tests/unittests/test_multi_pass_reader.py @@ -59,8 +59,7 @@ class TestMultipleReader(unittest.TestCase): while True: try: img_val, = exe.run(fetch_list=[img]) - except fluid.core.EnforceNotMet as ex: - self.assertIn("There is no next data.", ex.message) + except fluid.core.EOFException: break batch_count += 1 self.assertLessEqual(img_val.shape[0], self.batch_size) diff --git a/python/paddle/fluid/tests/unittests/test_recordio_reader.py b/python/paddle/fluid/tests/unittests/test_recordio_reader.py index f32050014d..69a522e273 100644 --- a/python/paddle/fluid/tests/unittests/test_recordio_reader.py +++ b/python/paddle/fluid/tests/unittests/test_recordio_reader.py @@ -68,8 +68,7 @@ class TestRecordIO(unittest.TestCase): while True: try: tmp, = exe.run(fetch_list=[avg_loss]) - except fluid.core.EnforceNotMet as ex: - self.assertIn("There is no next data.", ex.message) + except fluid.core.EOFException: break avg_loss_np.append(tmp) From 8553ac6a9568b9cb7739707368a587e089535f43 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Tue, 3 Jul 2018 10:24:18 +0800 Subject: [PATCH 110/130] fix unittests --- paddle/fluid/platform/enforce.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paddle/fluid/platform/enforce.h b/paddle/fluid/platform/enforce.h index 3790dd1352..566485cd3c 100644 --- a/paddle/fluid/platform/enforce.h +++ b/paddle/fluid/platform/enforce.h @@ -73,7 +73,7 @@ struct EnforceNotMet : public std::exception { } catch (const std::exception& exp) { std::ostringstream sout; - sout << string::Sprintf("'%s' at [%s:%d]", exp.what(), f, l) << std::endl; + sout << string::Sprintf("%s at [%s:%d]", exp.what(), f, l) << std::endl; sout << "PaddlePaddle Call Stacks: " << std::endl; void* call_stack[TRACE_STACK_LIMIT]; @@ -105,7 +105,7 @@ struct EnforceNotMet : public std::exception { struct EOFException : public std::exception { std::string err_str_; EOFException(const char* err_msg, const char* f, int l) { - err_str_ = string::Sprintf("'%s' at [%s:%d]", err_msg, f, l); + err_str_ = string::Sprintf("%s at [%s:%d]", err_msg, f, l); } const char* what() const noexcept { return err_str_.c_str(); } From ed4b2475f547a88f14f1b4d0d15f7411bf70b5f2 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Tue, 3 Jul 2018 11:01:03 +0800 Subject: [PATCH 111/130] add an unittest --- paddle/fluid/platform/enforce_test.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/paddle/fluid/platform/enforce_test.cc b/paddle/fluid/platform/enforce_test.cc index 57d751cc00..0e8684581a 100644 --- a/paddle/fluid/platform/enforce_test.cc +++ b/paddle/fluid/platform/enforce_test.cc @@ -210,3 +210,14 @@ TEST(ENFORCE_USER_DEFINED_CLASS, NE) { Dims a{{1, 2, 3, 4}}, b{{5, 6, 7, 8}}; ASSERT_THROW(PADDLE_ENFORCE_EQ(a, b), paddle::platform::EnforceNotMet); } + +TEST(EOF_EXCEPTION, THROW_EOF) { + bool caught_eof = false; + try { + PADDLE_THROW_EOF(); + } catch (paddle::platform::EOFException error) { + caught_eof = true; + EXPECT_TRUE(HasPrefix(StringPiece(error.what()), "There is no next data.")); + } + EXPECT_TRUE(caught_eof); +} From aa2f76fd9bb635f921a889b03ec4032e92d6df41 Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Mon, 2 Jul 2018 11:25:16 +0800 Subject: [PATCH 112/130] move trainer --- .../cluster_train/large_model_dist_train.md | 2 +- doc/v2/design/mkl/mkldnn.md | 40 +++++++++--------- doc/v2/dev/new_layer_en.rst | 2 +- paddle/CMakeLists.txt | 2 +- paddle/legacy/api/ConfigParser.cpp | 2 +- paddle/legacy/api/PaddleAPIPrivate.h | 2 +- paddle/legacy/api/ParameterUpdater.cpp | 6 +-- paddle/legacy/api/Trainer.cpp | 6 +-- paddle/legacy/capi/Main.cpp | 2 +- .../capi/tests/test_GradientMachine.cpp | 2 +- paddle/legacy/gserver/tests/MKLDNNTester.cpp | 2 +- .../gserver/tests/test_CompareSparse.cpp | 2 +- .../gserver/tests/test_CompareTwoNets.cpp | 2 +- .../legacy/gserver/tests/test_Evaluator.cpp | 2 +- .../gserver/tests/test_NetworkCompare.cpp | 2 +- .../tests/test_RecurrentGradientMachine.cpp | 4 +- paddle/{ => legacy}/trainer/CMakeLists.txt | 0 paddle/{ => legacy}/trainer/MergeModel.cpp | 0 .../trainer/NewRemoteParameterUpdater.cpp | 0 .../trainer/NewRemoteParameterUpdater.h | 0 paddle/{ => legacy}/trainer/ParamUtil.cpp | 0 paddle/{ => legacy}/trainer/ParamUtil.h | 0 .../{ => legacy}/trainer/ParameterUpdater.cpp | 0 .../{ => legacy}/trainer/ParameterUpdater.h | 0 .../trainer/RemoteParameterUpdater.cpp | 0 .../trainer/RemoteParameterUpdater.h | 0 paddle/{ => legacy}/trainer/Tester.cpp | 0 paddle/{ => legacy}/trainer/Tester.h | 0 paddle/{ => legacy}/trainer/TesterConfig.h | 0 .../trainer/ThreadParameterUpdater.cpp | 0 .../trainer/ThreadParameterUpdater.h | 0 paddle/{ => legacy}/trainer/Trainer.cpp | 0 paddle/{ => legacy}/trainer/Trainer.h | 0 .../{ => legacy}/trainer/TrainerBenchmark.cpp | 0 .../trainer/TrainerConfigHelper.cpp | 0 .../trainer/TrainerConfigHelper.h | 0 .../{ => legacy}/trainer/TrainerInternal.cpp | 0 paddle/{ => legacy}/trainer/TrainerInternal.h | 0 .../trainer/TrainerInternalConfig.cpp | 0 .../trainer/TrainerInternalConfig.h | 0 paddle/{ => legacy}/trainer/TrainerMain.cpp | 0 paddle/{ => legacy}/trainer/tests/.gitignore | 0 .../{ => legacy}/trainer/tests/CMakeLists.txt | 4 +- paddle/{ => legacy}/trainer/tests/__init__.py | 0 .../trainer/tests/config_parser_test.py | 4 +- .../trainer/tests/fake_file_list.list | 0 paddle/{ => legacy}/trainer/tests/picojson.h | 0 .../test_pydata_provider_wrapper.data | 0 .../test_pydata_provider_wrapper.list | 1 + .../tests/rnn_gen_test_model_dir/r1.test.beam | 0 .../tests/rnn_gen_test_model_dir/r1.test.nest | 0 .../rnn_gen_test_model_dir/r1.test.nobeam | 0 .../rnn_gen_test_model_dir/t1/transtable | Bin .../tests/rnn_gen_test_model_dir/t1/wordvec | Bin .../trainer/tests/sample_data.txt | 0 .../legacy/trainer/tests/sample_filelist.txt | 1 + .../trainer/tests/sample_trainer_config.conf | 4 +- .../tests/sample_trainer_config_hsigmoid.conf | 2 +- .../tests/sample_trainer_config_parallel.conf | 4 +- .../tests/sample_trainer_nest_rnn_gen.conf | 4 +- .../trainer/tests/sample_trainer_rnn_gen.conf | 4 +- .../tests/simple_sparse_neural_network.py | 2 +- .../tests/simple_sparse_neural_network_dp.py | 0 .../trainer/tests/testPyDataWrapper.py | 0 .../trainer/tests/test_Compare.cpp | 5 ++- .../tests/test_PyDataProviderWrapper.cpp | 2 +- .../trainer/tests/test_Trainer.cpp | 9 ++-- .../trainer/tests/test_TrainerOnePass.cpp | 11 ++--- .../trainer/tests/test_config.conf | 2 +- .../trainer/tests/test_gen_dict.txt | 0 .../test_recurrent_machine_generation.cpp | 16 ++++--- .../test_pydata_provider_wrapper.list | 1 - paddle/trainer/tests/sample_filelist.txt | 1 - python/paddle/trainer/config_parser.py | 2 +- python/setup.py.in | 4 +- tools/codestyle/cpplint_pre_commit.hook | 2 +- 76 files changed, 85 insertions(+), 80 deletions(-) rename paddle/{ => legacy}/trainer/CMakeLists.txt (100%) rename paddle/{ => legacy}/trainer/MergeModel.cpp (100%) rename paddle/{ => legacy}/trainer/NewRemoteParameterUpdater.cpp (100%) rename paddle/{ => legacy}/trainer/NewRemoteParameterUpdater.h (100%) rename paddle/{ => legacy}/trainer/ParamUtil.cpp (100%) rename paddle/{ => legacy}/trainer/ParamUtil.h (100%) rename paddle/{ => legacy}/trainer/ParameterUpdater.cpp (100%) rename paddle/{ => legacy}/trainer/ParameterUpdater.h (100%) rename paddle/{ => legacy}/trainer/RemoteParameterUpdater.cpp (100%) rename paddle/{ => legacy}/trainer/RemoteParameterUpdater.h (100%) rename paddle/{ => legacy}/trainer/Tester.cpp (100%) rename paddle/{ => legacy}/trainer/Tester.h (100%) rename paddle/{ => legacy}/trainer/TesterConfig.h (100%) rename paddle/{ => legacy}/trainer/ThreadParameterUpdater.cpp (100%) rename paddle/{ => legacy}/trainer/ThreadParameterUpdater.h (100%) rename paddle/{ => legacy}/trainer/Trainer.cpp (100%) rename paddle/{ => legacy}/trainer/Trainer.h (100%) rename paddle/{ => legacy}/trainer/TrainerBenchmark.cpp (100%) rename paddle/{ => legacy}/trainer/TrainerConfigHelper.cpp (100%) rename paddle/{ => legacy}/trainer/TrainerConfigHelper.h (100%) rename paddle/{ => legacy}/trainer/TrainerInternal.cpp (100%) rename paddle/{ => legacy}/trainer/TrainerInternal.h (100%) rename paddle/{ => legacy}/trainer/TrainerInternalConfig.cpp (100%) rename paddle/{ => legacy}/trainer/TrainerInternalConfig.h (100%) rename paddle/{ => legacy}/trainer/TrainerMain.cpp (100%) rename paddle/{ => legacy}/trainer/tests/.gitignore (100%) rename paddle/{ => legacy}/trainer/tests/CMakeLists.txt (89%) rename paddle/{ => legacy}/trainer/tests/__init__.py (100%) rename paddle/{ => legacy}/trainer/tests/config_parser_test.py (87%) rename paddle/{ => legacy}/trainer/tests/fake_file_list.list (100%) rename paddle/{ => legacy}/trainer/tests/picojson.h (100%) rename paddle/{ => legacy}/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.data (100%) create mode 100644 paddle/legacy/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.list rename paddle/{ => legacy}/trainer/tests/rnn_gen_test_model_dir/r1.test.beam (100%) rename paddle/{ => legacy}/trainer/tests/rnn_gen_test_model_dir/r1.test.nest (100%) rename paddle/{ => legacy}/trainer/tests/rnn_gen_test_model_dir/r1.test.nobeam (100%) rename paddle/{ => legacy}/trainer/tests/rnn_gen_test_model_dir/t1/transtable (100%) rename paddle/{ => legacy}/trainer/tests/rnn_gen_test_model_dir/t1/wordvec (100%) rename paddle/{ => legacy}/trainer/tests/sample_data.txt (100%) create mode 100644 paddle/legacy/trainer/tests/sample_filelist.txt rename paddle/{ => legacy}/trainer/tests/sample_trainer_config.conf (95%) rename paddle/{ => legacy}/trainer/tests/sample_trainer_config_hsigmoid.conf (96%) rename paddle/{ => legacy}/trainer/tests/sample_trainer_config_parallel.conf (95%) rename paddle/{ => legacy}/trainer/tests/sample_trainer_nest_rnn_gen.conf (94%) rename paddle/{ => legacy}/trainer/tests/sample_trainer_rnn_gen.conf (94%) rename paddle/{ => legacy}/trainer/tests/simple_sparse_neural_network.py (95%) rename paddle/{ => legacy}/trainer/tests/simple_sparse_neural_network_dp.py (100%) rename paddle/{ => legacy}/trainer/tests/testPyDataWrapper.py (100%) rename paddle/{ => legacy}/trainer/tests/test_Compare.cpp (97%) rename paddle/{ => legacy}/trainer/tests/test_PyDataProviderWrapper.cpp (99%) rename paddle/{ => legacy}/trainer/tests/test_Trainer.cpp (91%) rename paddle/{ => legacy}/trainer/tests/test_TrainerOnePass.cpp (96%) rename paddle/{ => legacy}/trainer/tests/test_config.conf (97%) rename paddle/{ => legacy}/trainer/tests/test_gen_dict.txt (100%) rename paddle/{ => legacy}/trainer/tests/test_recurrent_machine_generation.cpp (90%) delete mode 100644 paddle/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.list delete mode 100644 paddle/trainer/tests/sample_filelist.txt diff --git a/doc/v2/design/cluster_train/large_model_dist_train.md b/doc/v2/design/cluster_train/large_model_dist_train.md index 0c4b5bc24c..edb0245ea0 100644 --- a/doc/v2/design/cluster_train/large_model_dist_train.md +++ b/doc/v2/design/cluster_train/large_model_dist_train.md @@ -52,7 +52,7 @@ In `trainer_internal.cpp:L93 trainOneBatch`: When doing actual network forward and backward, at the beginning of each batch, the trainer will try to download one row of data from pserver. -In `trainer/RemoteParameterUpdater.cpp`: `parameterUpdater_->getParametersRemote();`: +In `legacy/trainer/RemoteParameterUpdater.cpp`: `parameterUpdater_->getParametersRemote();`: ```c++ if (fullSize) { diff --git a/doc/v2/design/mkl/mkldnn.md b/doc/v2/design/mkl/mkldnn.md index bd5bcf6f67..4876de0045 100644 --- a/doc/v2/design/mkl/mkldnn.md +++ b/doc/v2/design/mkl/mkldnn.md @@ -18,20 +18,20 @@ Figure 1. PaddlePaddle on IA 具体的完成状态可以参见[这里](https://github.com/PaddlePaddle/Paddle/projects/21)。 ## Contents - -- [Overview](#overview) -- [Actions](#actions) - - [CMake](#cmake) - - [Matrix](#matrix) - - [Layers](#layers) - - [Activations](#activations) - - [Parameters](#parameters) - - [Gradients](#gradients) - - [Unit Tests](#unit-tests) - - [Python API](#python-api) - - [Benchmarking](#benchmarking) - - [Others](#others) -- [Design Concerns](#design-concerns) + +- [Overview](#overview) +- [Actions](#actions) + - [CMake](#cmake) + - [Matrix](#matrix) + - [Layers](#layers) + - [Activations](#activations) + - [Parameters](#parameters) + - [Gradients](#gradients) + - [Unit Tests](#unit-tests) + - [Python API](#python-api) + - [Benchmarking](#benchmarking) + - [Others](#others) +- [Design Concerns](#design-concerns) ## Overview @@ -218,20 +218,20 @@ if use_mkldnn 我们总结出一些特别需要注意的点: 1. 使用**deviceId_**。为了尽可能少的在父类Layer中添加变量或者函数, -我们决定使用已有的`deviceId_`变量来区分layer的属性,定义`-2`为`MKLDNNLayer`特有的设备ID。 -2. 重写父类Layer的**init**函数,修改`deviceId_`为`-2`,代表这个layer是用于跑在MKL-DNN的环境下。 +我们决定使用已有的`deviceId_`变量来区分layer的属性,定义`-2`为`MKLDNNLayer`特有的设备ID。 +2. 重写父类Layer的**init**函数,修改`deviceId_`为`-2`,代表这个layer是用于跑在MKL-DNN的环境下。 3. 创建`MKLDNNBase`,定义一些除了layer和memory相关的类和函数。 -包括MKL-DNN会用到`MKLDNNStream`和`CPUEngine`,和未来可能还会用到`FPGAEngine`等。 +包括MKL-DNN会用到`MKLDNNStream`和`CPUEngine`,和未来可能还会用到`FPGAEngine`等。 4. 如果MKL-DNN layer的后面接有cpu device,那么就会使`output_.value`与`extOutVal_`共享内存, 同时数据格式就是`NCHW`,这样下一个cpu device就能拿到正确的数据。 在有普通的CPU layer时, `extOutVal_`和`extOutGrad_`的格式始终是`NCHW`或者`NC`。 ## References 1. [MKL small library](https://github.com/01org/mkl-dnn#linking-your-application)是[Intel MKL](https://software.intel.com/en-us/mkl)的一个子集。 -主要包括了深度学习相关的数学原语与操作,一般由MKL-DNN在发布[新版本](https://github.com/01org/mkl-dnn/releases)时一起更新。 +主要包括了深度学习相关的数学原语与操作,一般由MKL-DNN在发布[新版本](https://github.com/01org/mkl-dnn/releases)时一起更新。 2. [MKL-DNN System Requirements](https://github.com/01org/mkl-dnn#system-requirements)。 目前在PaddlePaddle中,仅会在支持AVX2指令集及以上的机器才使用MKL-DNN。 3. [原来的方案](https://github.com/PaddlePaddle/Paddle/pull/3096)会引入**nextLayer**的信息。 -但是在PaddlePaddle中,无论是重构前的layer还是重构后的op,都不会想要知道next layer/op的信息。 +但是在PaddlePaddle中,无论是重构前的layer还是重构后的op,都不会想要知道next layer/op的信息。 4. MKL-DNN的高性能格式与PaddlePaddle原有的`NCHW`不同(PaddlePaddle中的cuDNN部分使用的也是`NCHW`,所以不存在这个问题)。 -所以需要引入一个转换方法,并且只需要在必要的时候转换这种格式,才能更好的发挥MKL-DNN的性能。 +所以需要引入一个转换方法,并且只需要在必要的时候转换这种格式,才能更好的发挥MKL-DNN的性能。 diff --git a/doc/v2/dev/new_layer_en.rst b/doc/v2/dev/new_layer_en.rst index 6a848a020d..ad72373880 100644 --- a/doc/v2/dev/new_layer_en.rst +++ b/doc/v2/dev/new_layer_en.rst @@ -339,7 +339,7 @@ If you are creating a new file for the test, such as :code:`paddle/legacy/gserve Implement Python Wrapper ======================== -Implementing Python wrapper allows us to use the added layer in configuration files. All the Python wrappers are in file :code:`python/paddle/trainer/config_parser.py`. An example of the Python wrapper for fully connected layer is listed below. It has the following steps: +Implementing Python wrapper allows us to use the added layer in configuration files. All the Python wrappers are in file :code:`python/paddle/legacy/trainer/config_parser.py`. An example of the Python wrapper for fully connected layer is listed below. It has the following steps: - Use :code:`@config_layer('fc')` at the decorator for all the Python wrapper class. :code:`fc` is the identifier of the layer. - Implements :code:`__init__` constructor function. diff --git a/paddle/CMakeLists.txt b/paddle/CMakeLists.txt index 7a4bd9183a..e1f65e505e 100644 --- a/paddle/CMakeLists.txt +++ b/paddle/CMakeLists.txt @@ -10,7 +10,7 @@ if(NOT WITH_FLUID_ONLY) add_subdirectory(legacy/capi) else() add_subdirectory(legacy/pserver) - add_subdirectory(trainer) + add_subdirectory(legacy/trainer) add_subdirectory(scripts) if(WITH_C_API) diff --git a/paddle/legacy/api/ConfigParser.cpp b/paddle/legacy/api/ConfigParser.cpp index d362a1e7cf..016d6da4e2 100644 --- a/paddle/legacy/api/ConfigParser.cpp +++ b/paddle/legacy/api/ConfigParser.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "PaddleAPI.h" #include "PaddleAPIPrivate.h" -#include "paddle/trainer/Trainer.h" +#include "paddle/legacy/trainer/Trainer.h" struct ParameterConfigPrivate { paddle::ParameterPtr parameter; diff --git a/paddle/legacy/api/PaddleAPIPrivate.h b/paddle/legacy/api/PaddleAPIPrivate.h index 2e1c504d2e..3ee192c31d 100644 --- a/paddle/legacy/api/PaddleAPIPrivate.h +++ b/paddle/legacy/api/PaddleAPIPrivate.h @@ -17,7 +17,7 @@ limitations under the License. */ #include "paddle/legacy/gserver/evaluators/Evaluator.h" #include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" #include "paddle/legacy/parameter/ParameterUpdaterBase.h" -#include "paddle/trainer/TrainerConfigHelper.h" +#include "paddle/legacy/trainer/TrainerConfigHelper.h" struct GradientMachinePrivate { std::shared_ptr machine; diff --git a/paddle/legacy/api/ParameterUpdater.cpp b/paddle/legacy/api/ParameterUpdater.cpp index 63c000c959..44af3f4635 100644 --- a/paddle/legacy/api/ParameterUpdater.cpp +++ b/paddle/legacy/api/ParameterUpdater.cpp @@ -16,10 +16,10 @@ limitations under the License. */ #include "PaddleAPIPrivate.h" #ifndef PADDLE_WITHOUT_GOLANG -#include "paddle/trainer/NewRemoteParameterUpdater.h" +#include "paddle/legacy/trainer/NewRemoteParameterUpdater.h" #endif -#include "paddle/trainer/RemoteParameterUpdater.h" -#include "paddle/trainer/ThreadParameterUpdater.h" +#include "paddle/legacy/trainer/RemoteParameterUpdater.h" +#include "paddle/legacy/trainer/ThreadParameterUpdater.h" ParameterUpdater::ParameterUpdater() : m(new ParameterUpdaterPrivate()) {} diff --git a/paddle/legacy/api/Trainer.cpp b/paddle/legacy/api/Trainer.cpp index 6506acb738..8b39b962ee 100644 --- a/paddle/legacy/api/Trainer.cpp +++ b/paddle/legacy/api/Trainer.cpp @@ -20,9 +20,9 @@ limitations under the License. */ #include #include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" -#include "paddle/trainer/ParamUtil.h" -#include "paddle/trainer/Trainer.h" -#include "paddle/trainer/TrainerInternal.h" +#include "paddle/legacy/trainer/ParamUtil.h" +#include "paddle/legacy/trainer/Trainer.h" +#include "paddle/legacy/trainer/TrainerInternal.h" #include "paddle/utils/Flags.h" using paddle::real; diff --git a/paddle/legacy/capi/Main.cpp b/paddle/legacy/capi/Main.cpp index 0a289dede6..fd9275058a 100644 --- a/paddle/legacy/capi/Main.cpp +++ b/paddle/legacy/capi/Main.cpp @@ -18,7 +18,7 @@ limitations under the License. */ #include #include "capi_private.h" #include "main.h" -#include "paddle/trainer/TrainerConfigHelper.h" +#include "paddle/legacy/trainer/TrainerConfigHelper.h" #include "paddle/utils/Excepts.h" #include "paddle/utils/PythonUtil.h" diff --git a/paddle/legacy/capi/tests/test_GradientMachine.cpp b/paddle/legacy/capi/tests/test_GradientMachine.cpp index 2c02669ccf..b86d2f2049 100644 --- a/paddle/legacy/capi/tests/test_GradientMachine.cpp +++ b/paddle/legacy/capi/tests/test_GradientMachine.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include #include -#include +#include #include #include #include diff --git a/paddle/legacy/gserver/tests/MKLDNNTester.cpp b/paddle/legacy/gserver/tests/MKLDNNTester.cpp index bed58f94bb..b550ba9c72 100644 --- a/paddle/legacy/gserver/tests/MKLDNNTester.cpp +++ b/paddle/legacy/gserver/tests/MKLDNNTester.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "MKLDNNTester.h" #include "paddle/legacy/gserver/layers/MKLDNNBase.h" #include "paddle/legacy/gserver/layers/MKLDNNLayer.h" -#include "paddle/trainer/Trainer.h" +#include "paddle/legacy/trainer/Trainer.h" namespace paddle { diff --git a/paddle/legacy/gserver/tests/test_CompareSparse.cpp b/paddle/legacy/gserver/tests/test_CompareSparse.cpp index 51433c9aaa..26b23eac7c 100644 --- a/paddle/legacy/gserver/tests/test_CompareSparse.cpp +++ b/paddle/legacy/gserver/tests/test_CompareSparse.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include -#include "paddle/trainer/Trainer.h" +#include "paddle/legacy/trainer/Trainer.h" #include #include diff --git a/paddle/legacy/gserver/tests/test_CompareTwoNets.cpp b/paddle/legacy/gserver/tests/test_CompareTwoNets.cpp index 3ac86ce516..6e8f855c6b 100644 --- a/paddle/legacy/gserver/tests/test_CompareTwoNets.cpp +++ b/paddle/legacy/gserver/tests/test_CompareTwoNets.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include #include -#include "paddle/trainer/Trainer.h" +#include "paddle/legacy/trainer/Trainer.h" using namespace paddle; // NOLINT using namespace std; // NOLINT diff --git a/paddle/legacy/gserver/tests/test_Evaluator.cpp b/paddle/legacy/gserver/tests/test_Evaluator.cpp index 4a8843f3af..8aab50d23e 100644 --- a/paddle/legacy/gserver/tests/test_Evaluator.cpp +++ b/paddle/legacy/gserver/tests/test_Evaluator.cpp @@ -15,8 +15,8 @@ limitations under the License. */ #include #include #include "ModelConfig.pb.h" +#include "paddle/legacy/trainer/Trainer.h" #include "paddle/testing/TestUtil.h" -#include "paddle/trainer/Trainer.h" using namespace paddle; // NOLINT using namespace std; // NOLINT diff --git a/paddle/legacy/gserver/tests/test_NetworkCompare.cpp b/paddle/legacy/gserver/tests/test_NetworkCompare.cpp index 5a6b224583..e07922b58c 100644 --- a/paddle/legacy/gserver/tests/test_NetworkCompare.cpp +++ b/paddle/legacy/gserver/tests/test_NetworkCompare.cpp @@ -18,8 +18,8 @@ limitations under the License. */ #include #include +#include "paddle/legacy/trainer/Trainer.h" #include "paddle/testing/TestUtil.h" -#include "paddle/trainer/Trainer.h" #include "paddle/utils/Stat.h" using namespace paddle; // NOLINT diff --git a/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp b/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp index 9f9fee7ef6..279f2c2fbb 100644 --- a/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp +++ b/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp @@ -15,8 +15,8 @@ limitations under the License. */ #include #include #include -#include -#include +#include +#include #include #include #include diff --git a/paddle/trainer/CMakeLists.txt b/paddle/legacy/trainer/CMakeLists.txt similarity index 100% rename from paddle/trainer/CMakeLists.txt rename to paddle/legacy/trainer/CMakeLists.txt diff --git a/paddle/trainer/MergeModel.cpp b/paddle/legacy/trainer/MergeModel.cpp similarity index 100% rename from paddle/trainer/MergeModel.cpp rename to paddle/legacy/trainer/MergeModel.cpp diff --git a/paddle/trainer/NewRemoteParameterUpdater.cpp b/paddle/legacy/trainer/NewRemoteParameterUpdater.cpp similarity index 100% rename from paddle/trainer/NewRemoteParameterUpdater.cpp rename to paddle/legacy/trainer/NewRemoteParameterUpdater.cpp diff --git a/paddle/trainer/NewRemoteParameterUpdater.h b/paddle/legacy/trainer/NewRemoteParameterUpdater.h similarity index 100% rename from paddle/trainer/NewRemoteParameterUpdater.h rename to paddle/legacy/trainer/NewRemoteParameterUpdater.h diff --git a/paddle/trainer/ParamUtil.cpp b/paddle/legacy/trainer/ParamUtil.cpp similarity index 100% rename from paddle/trainer/ParamUtil.cpp rename to paddle/legacy/trainer/ParamUtil.cpp diff --git a/paddle/trainer/ParamUtil.h b/paddle/legacy/trainer/ParamUtil.h similarity index 100% rename from paddle/trainer/ParamUtil.h rename to paddle/legacy/trainer/ParamUtil.h diff --git a/paddle/trainer/ParameterUpdater.cpp b/paddle/legacy/trainer/ParameterUpdater.cpp similarity index 100% rename from paddle/trainer/ParameterUpdater.cpp rename to paddle/legacy/trainer/ParameterUpdater.cpp diff --git a/paddle/trainer/ParameterUpdater.h b/paddle/legacy/trainer/ParameterUpdater.h similarity index 100% rename from paddle/trainer/ParameterUpdater.h rename to paddle/legacy/trainer/ParameterUpdater.h diff --git a/paddle/trainer/RemoteParameterUpdater.cpp b/paddle/legacy/trainer/RemoteParameterUpdater.cpp similarity index 100% rename from paddle/trainer/RemoteParameterUpdater.cpp rename to paddle/legacy/trainer/RemoteParameterUpdater.cpp diff --git a/paddle/trainer/RemoteParameterUpdater.h b/paddle/legacy/trainer/RemoteParameterUpdater.h similarity index 100% rename from paddle/trainer/RemoteParameterUpdater.h rename to paddle/legacy/trainer/RemoteParameterUpdater.h diff --git a/paddle/trainer/Tester.cpp b/paddle/legacy/trainer/Tester.cpp similarity index 100% rename from paddle/trainer/Tester.cpp rename to paddle/legacy/trainer/Tester.cpp diff --git a/paddle/trainer/Tester.h b/paddle/legacy/trainer/Tester.h similarity index 100% rename from paddle/trainer/Tester.h rename to paddle/legacy/trainer/Tester.h diff --git a/paddle/trainer/TesterConfig.h b/paddle/legacy/trainer/TesterConfig.h similarity index 100% rename from paddle/trainer/TesterConfig.h rename to paddle/legacy/trainer/TesterConfig.h diff --git a/paddle/trainer/ThreadParameterUpdater.cpp b/paddle/legacy/trainer/ThreadParameterUpdater.cpp similarity index 100% rename from paddle/trainer/ThreadParameterUpdater.cpp rename to paddle/legacy/trainer/ThreadParameterUpdater.cpp diff --git a/paddle/trainer/ThreadParameterUpdater.h b/paddle/legacy/trainer/ThreadParameterUpdater.h similarity index 100% rename from paddle/trainer/ThreadParameterUpdater.h rename to paddle/legacy/trainer/ThreadParameterUpdater.h diff --git a/paddle/trainer/Trainer.cpp b/paddle/legacy/trainer/Trainer.cpp similarity index 100% rename from paddle/trainer/Trainer.cpp rename to paddle/legacy/trainer/Trainer.cpp diff --git a/paddle/trainer/Trainer.h b/paddle/legacy/trainer/Trainer.h similarity index 100% rename from paddle/trainer/Trainer.h rename to paddle/legacy/trainer/Trainer.h diff --git a/paddle/trainer/TrainerBenchmark.cpp b/paddle/legacy/trainer/TrainerBenchmark.cpp similarity index 100% rename from paddle/trainer/TrainerBenchmark.cpp rename to paddle/legacy/trainer/TrainerBenchmark.cpp diff --git a/paddle/trainer/TrainerConfigHelper.cpp b/paddle/legacy/trainer/TrainerConfigHelper.cpp similarity index 100% rename from paddle/trainer/TrainerConfigHelper.cpp rename to paddle/legacy/trainer/TrainerConfigHelper.cpp diff --git a/paddle/trainer/TrainerConfigHelper.h b/paddle/legacy/trainer/TrainerConfigHelper.h similarity index 100% rename from paddle/trainer/TrainerConfigHelper.h rename to paddle/legacy/trainer/TrainerConfigHelper.h diff --git a/paddle/trainer/TrainerInternal.cpp b/paddle/legacy/trainer/TrainerInternal.cpp similarity index 100% rename from paddle/trainer/TrainerInternal.cpp rename to paddle/legacy/trainer/TrainerInternal.cpp diff --git a/paddle/trainer/TrainerInternal.h b/paddle/legacy/trainer/TrainerInternal.h similarity index 100% rename from paddle/trainer/TrainerInternal.h rename to paddle/legacy/trainer/TrainerInternal.h diff --git a/paddle/trainer/TrainerInternalConfig.cpp b/paddle/legacy/trainer/TrainerInternalConfig.cpp similarity index 100% rename from paddle/trainer/TrainerInternalConfig.cpp rename to paddle/legacy/trainer/TrainerInternalConfig.cpp diff --git a/paddle/trainer/TrainerInternalConfig.h b/paddle/legacy/trainer/TrainerInternalConfig.h similarity index 100% rename from paddle/trainer/TrainerInternalConfig.h rename to paddle/legacy/trainer/TrainerInternalConfig.h diff --git a/paddle/trainer/TrainerMain.cpp b/paddle/legacy/trainer/TrainerMain.cpp similarity index 100% rename from paddle/trainer/TrainerMain.cpp rename to paddle/legacy/trainer/TrainerMain.cpp diff --git a/paddle/trainer/tests/.gitignore b/paddle/legacy/trainer/tests/.gitignore similarity index 100% rename from paddle/trainer/tests/.gitignore rename to paddle/legacy/trainer/tests/.gitignore diff --git a/paddle/trainer/tests/CMakeLists.txt b/paddle/legacy/trainer/tests/CMakeLists.txt similarity index 89% rename from paddle/trainer/tests/CMakeLists.txt rename to paddle/legacy/trainer/tests/CMakeLists.txt index 12c9ea8cef..08548bea4c 100644 --- a/paddle/trainer/tests/CMakeLists.txt +++ b/paddle/legacy/trainer/tests/CMakeLists.txt @@ -5,7 +5,7 @@ add_custom_target(copy_trainer_conf ALL DEPENDS sample_trainer_config.conf) set(PYTHON_PATH ${PADDLE_SOURCE_DIR}/paddle/.set_python_path.sh -d - ${PADDLE_BINARY_DIR}/python/:${PADDLE_BINARY_DIR}/paddle/trainer/tests) + ${PADDLE_BINARY_DIR}/python/:${PADDLE_BINARY_DIR}/paddle/legacy/trainer/tests) function(trainer_test TARGET) add_unittest_without_exec(${TARGET} ${TARGET}.cpp) add_test(NAME ${TARGET} @@ -33,5 +33,5 @@ endif() #################### test_config_parser ######################### add_test(NAME test_config_parser COMMAND ${PYTHON_PATH} ${PYTHON_EXECUTABLE} - ${PADDLE_SOURCE_DIR}/paddle/trainer/tests/config_parser_test.py + ${PADDLE_SOURCE_DIR}/paddle/legacy/trainer/tests/config_parser_test.py WORKING_DIRECTORY ${PADDLE_BINARY_DIR}/paddle/) diff --git a/paddle/trainer/tests/__init__.py b/paddle/legacy/trainer/tests/__init__.py similarity index 100% rename from paddle/trainer/tests/__init__.py rename to paddle/legacy/trainer/tests/__init__.py diff --git a/paddle/trainer/tests/config_parser_test.py b/paddle/legacy/trainer/tests/config_parser_test.py similarity index 87% rename from paddle/trainer/tests/config_parser_test.py rename to paddle/legacy/trainer/tests/config_parser_test.py index 88646e11f7..0d3d82cbda 100644 --- a/paddle/trainer/tests/config_parser_test.py +++ b/paddle/legacy/trainer/tests/config_parser_test.py @@ -15,9 +15,9 @@ from paddle.trainer.config_parser import parse_config_and_serialize if __name__ == '__main__': - parse_config_and_serialize('trainer/tests/test_config.conf', '') + parse_config_and_serialize('legacy/trainer/tests/test_config.conf', '') parse_config_and_serialize( - 'trainer/tests/sample_trainer_config.conf', + 'legacy/trainer/tests/sample_trainer_config.conf', 'extension_module_name=paddle.trainer.config_parser_extension') parse_config_and_serialize( 'legacy/gserver/tests/pyDataProvider/trainer.conf', '') diff --git a/paddle/trainer/tests/fake_file_list.list b/paddle/legacy/trainer/tests/fake_file_list.list similarity index 100% rename from paddle/trainer/tests/fake_file_list.list rename to paddle/legacy/trainer/tests/fake_file_list.list diff --git a/paddle/trainer/tests/picojson.h b/paddle/legacy/trainer/tests/picojson.h similarity index 100% rename from paddle/trainer/tests/picojson.h rename to paddle/legacy/trainer/tests/picojson.h diff --git a/paddle/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.data b/paddle/legacy/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.data similarity index 100% rename from paddle/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.data rename to paddle/legacy/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.data diff --git a/paddle/legacy/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.list b/paddle/legacy/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.list new file mode 100644 index 0000000000..11c1b1b38b --- /dev/null +++ b/paddle/legacy/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.list @@ -0,0 +1 @@ +legacy/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.data diff --git a/paddle/trainer/tests/rnn_gen_test_model_dir/r1.test.beam b/paddle/legacy/trainer/tests/rnn_gen_test_model_dir/r1.test.beam similarity index 100% rename from paddle/trainer/tests/rnn_gen_test_model_dir/r1.test.beam rename to paddle/legacy/trainer/tests/rnn_gen_test_model_dir/r1.test.beam diff --git a/paddle/trainer/tests/rnn_gen_test_model_dir/r1.test.nest b/paddle/legacy/trainer/tests/rnn_gen_test_model_dir/r1.test.nest similarity index 100% rename from paddle/trainer/tests/rnn_gen_test_model_dir/r1.test.nest rename to paddle/legacy/trainer/tests/rnn_gen_test_model_dir/r1.test.nest diff --git a/paddle/trainer/tests/rnn_gen_test_model_dir/r1.test.nobeam b/paddle/legacy/trainer/tests/rnn_gen_test_model_dir/r1.test.nobeam similarity index 100% rename from paddle/trainer/tests/rnn_gen_test_model_dir/r1.test.nobeam rename to paddle/legacy/trainer/tests/rnn_gen_test_model_dir/r1.test.nobeam diff --git a/paddle/trainer/tests/rnn_gen_test_model_dir/t1/transtable b/paddle/legacy/trainer/tests/rnn_gen_test_model_dir/t1/transtable similarity index 100% rename from paddle/trainer/tests/rnn_gen_test_model_dir/t1/transtable rename to paddle/legacy/trainer/tests/rnn_gen_test_model_dir/t1/transtable diff --git a/paddle/trainer/tests/rnn_gen_test_model_dir/t1/wordvec b/paddle/legacy/trainer/tests/rnn_gen_test_model_dir/t1/wordvec similarity index 100% rename from paddle/trainer/tests/rnn_gen_test_model_dir/t1/wordvec rename to paddle/legacy/trainer/tests/rnn_gen_test_model_dir/t1/wordvec diff --git a/paddle/trainer/tests/sample_data.txt b/paddle/legacy/trainer/tests/sample_data.txt similarity index 100% rename from paddle/trainer/tests/sample_data.txt rename to paddle/legacy/trainer/tests/sample_data.txt diff --git a/paddle/legacy/trainer/tests/sample_filelist.txt b/paddle/legacy/trainer/tests/sample_filelist.txt new file mode 100644 index 0000000000..8573f9e179 --- /dev/null +++ b/paddle/legacy/trainer/tests/sample_filelist.txt @@ -0,0 +1 @@ +legacy/trainer/tests/sample_data.txt diff --git a/paddle/trainer/tests/sample_trainer_config.conf b/paddle/legacy/trainer/tests/sample_trainer_config.conf similarity index 95% rename from paddle/trainer/tests/sample_trainer_config.conf rename to paddle/legacy/trainer/tests/sample_trainer_config.conf index 2697832840..5800b36256 100644 --- a/paddle/trainer/tests/sample_trainer_config.conf +++ b/paddle/legacy/trainer/tests/sample_trainer_config.conf @@ -16,13 +16,13 @@ from paddle.trainer_config_helpers import * TrainData(SimpleData( - files = "trainer/tests/sample_filelist.txt", + files = "legacy/trainer/tests/sample_filelist.txt", feat_dim = 3, context_len = 0, buffer_capacity = 1000000)) TestData(SimpleData( - files = "trainer/tests/sample_filelist.txt", + files = "legacy/trainer/tests/sample_filelist.txt", feat_dim = 3, context_len = 0, buffer_capacity = 1000000)) diff --git a/paddle/trainer/tests/sample_trainer_config_hsigmoid.conf b/paddle/legacy/trainer/tests/sample_trainer_config_hsigmoid.conf similarity index 96% rename from paddle/trainer/tests/sample_trainer_config_hsigmoid.conf rename to paddle/legacy/trainer/tests/sample_trainer_config_hsigmoid.conf index e4abe31d48..155c40b31f 100644 --- a/paddle/trainer/tests/sample_trainer_config_hsigmoid.conf +++ b/paddle/legacy/trainer/tests/sample_trainer_config_hsigmoid.conf @@ -17,7 +17,7 @@ from paddle.trainer_config_helpers import * TrainData(SimpleData( - files = "trainer/tests/sample_filelist.txt", + files = "legacy/trainer/tests/sample_filelist.txt", feat_dim = 3, context_len = 0, buffer_capacity = 1000000, diff --git a/paddle/trainer/tests/sample_trainer_config_parallel.conf b/paddle/legacy/trainer/tests/sample_trainer_config_parallel.conf similarity index 95% rename from paddle/trainer/tests/sample_trainer_config_parallel.conf rename to paddle/legacy/trainer/tests/sample_trainer_config_parallel.conf index e2b8b3ecda..49cdde7fa2 100644 --- a/paddle/trainer/tests/sample_trainer_config_parallel.conf +++ b/paddle/legacy/trainer/tests/sample_trainer_config_parallel.conf @@ -16,13 +16,13 @@ from paddle.trainer_config_helpers import * TrainData(SimpleData( - files = "trainer/tests/sample_filelist.txt", + files = "legacy/trainer/tests/sample_filelist.txt", feat_dim = 3, context_len = 0, buffer_capacity = 1000000)) TestData(SimpleData( - files = "trainer/tests/sample_filelist.txt", + files = "legacy/trainer/tests/sample_filelist.txt", feat_dim = 3, context_len = 0, buffer_capacity = 1000000)) diff --git a/paddle/trainer/tests/sample_trainer_nest_rnn_gen.conf b/paddle/legacy/trainer/tests/sample_trainer_nest_rnn_gen.conf similarity index 94% rename from paddle/trainer/tests/sample_trainer_nest_rnn_gen.conf rename to paddle/legacy/trainer/tests/sample_trainer_nest_rnn_gen.conf index 741a0aa71d..51ef905a5a 100644 --- a/paddle/trainer/tests/sample_trainer_nest_rnn_gen.conf +++ b/paddle/legacy/trainer/tests/sample_trainer_nest_rnn_gen.conf @@ -63,8 +63,8 @@ beam_gen_concat = recurrent_group(name="rnn_gen_concat", seqtext_printer_evaluator(input=beam_gen_concat, id_input=sent_id, - dict_file="./trainer/tests/test_gen_dict.txt", - result_file="./trainer/tests/dump_text.test") + dict_file="./legacy/trainer/tests/test_gen_dict.txt", + result_file="./legacy/trainer/tests/dump_text.test") #outputs(beam_gen_concat) # In this config, as dummy_data_input doesn't work on beam_gen (we can find dummy_memory # is read-only memory, and isn't used by other layers of step), we show the Inputs and Outputs diff --git a/paddle/trainer/tests/sample_trainer_rnn_gen.conf b/paddle/legacy/trainer/tests/sample_trainer_rnn_gen.conf similarity index 94% rename from paddle/trainer/tests/sample_trainer_rnn_gen.conf rename to paddle/legacy/trainer/tests/sample_trainer_rnn_gen.conf index 58d27f15ae..35c7f0fcd9 100644 --- a/paddle/trainer/tests/sample_trainer_rnn_gen.conf +++ b/paddle/legacy/trainer/tests/sample_trainer_rnn_gen.conf @@ -56,8 +56,8 @@ beam_gen = beam_search(name="rnn_gen", seqtext_printer_evaluator(input=beam_gen, id_input=sent_id, - dict_file="./trainer/tests/test_gen_dict.txt", - result_file="./trainer/tests/dump_text.test") + dict_file="./legacy/trainer/tests/test_gen_dict.txt", + result_file="./legacy/trainer/tests/dump_text.test") #outputs(beam_gen) # In this config, as dummy_data_input doesn't work on beam_gen (we can find dummy_memory # is read-only memory, and isn't used by other layers of step), we show the Inputs and Outputs diff --git a/paddle/trainer/tests/simple_sparse_neural_network.py b/paddle/legacy/trainer/tests/simple_sparse_neural_network.py similarity index 95% rename from paddle/trainer/tests/simple_sparse_neural_network.py rename to paddle/legacy/trainer/tests/simple_sparse_neural_network.py index 970fb466dc..9419f4d903 100644 --- a/paddle/trainer/tests/simple_sparse_neural_network.py +++ b/paddle/legacy/trainer/tests/simple_sparse_neural_network.py @@ -16,7 +16,7 @@ from paddle.trainer_config_helpers import * settings(batch_size=17, learning_method=AdaGradOptimizer(), learning_rate=1e-4) -file_list = 'trainer/tests/fake_file_list.list' +file_list = 'legacy/trainer/tests/fake_file_list.list' define_py_data_sources2( train_list=file_list, diff --git a/paddle/trainer/tests/simple_sparse_neural_network_dp.py b/paddle/legacy/trainer/tests/simple_sparse_neural_network_dp.py similarity index 100% rename from paddle/trainer/tests/simple_sparse_neural_network_dp.py rename to paddle/legacy/trainer/tests/simple_sparse_neural_network_dp.py diff --git a/paddle/trainer/tests/testPyDataWrapper.py b/paddle/legacy/trainer/tests/testPyDataWrapper.py similarity index 100% rename from paddle/trainer/tests/testPyDataWrapper.py rename to paddle/legacy/trainer/tests/testPyDataWrapper.py diff --git a/paddle/trainer/tests/test_Compare.cpp b/paddle/legacy/trainer/tests/test_Compare.cpp similarity index 97% rename from paddle/trainer/tests/test_Compare.cpp rename to paddle/legacy/trainer/tests/test_Compare.cpp index f3a964acb6..496a148bf6 100644 --- a/paddle/trainer/tests/test_Compare.cpp +++ b/paddle/legacy/trainer/tests/test_Compare.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include -#include "paddle/trainer/Trainer.h" +#include "paddle/legacy/trainer/Trainer.h" #include #include @@ -22,7 +22,8 @@ limitations under the License. */ using namespace paddle; // NOLINT using namespace std; // NOLINT -static const string& configFile = "trainer/tests/sample_trainer_config.conf"; +static const string& configFile = + "/legacy/trainer/tests/sample_trainer_config.conf"; DECLARE_int32(gpu_id); DECLARE_bool(use_gpu); diff --git a/paddle/trainer/tests/test_PyDataProviderWrapper.cpp b/paddle/legacy/trainer/tests/test_PyDataProviderWrapper.cpp similarity index 99% rename from paddle/trainer/tests/test_PyDataProviderWrapper.cpp rename to paddle/legacy/trainer/tests/test_PyDataProviderWrapper.cpp index e3cd1c904d..94eaba2e2f 100644 --- a/paddle/trainer/tests/test_PyDataProviderWrapper.cpp +++ b/paddle/legacy/trainer/tests/test_PyDataProviderWrapper.cpp @@ -26,7 +26,7 @@ limitations under the License. */ #include "picojson.h" void checkValue(std::vector& arguments, picojson::array& arr); -const std::string kDir = "./trainer/tests/pydata_provider_wrapper_dir/"; +const std::string kDir = "./legacy/trainer/tests/pydata_provider_wrapper_dir/"; TEST(PyDataProviderWrapper, SequenceData) { paddle::DataConfig conf; diff --git a/paddle/trainer/tests/test_Trainer.cpp b/paddle/legacy/trainer/tests/test_Trainer.cpp similarity index 91% rename from paddle/trainer/tests/test_Trainer.cpp rename to paddle/legacy/trainer/tests/test_Trainer.cpp index 394038cf73..9fb80762fe 100644 --- a/paddle/trainer/tests/test_Trainer.cpp +++ b/paddle/legacy/trainer/tests/test_Trainer.cpp @@ -14,18 +14,19 @@ limitations under the License. */ #include #include -#include "paddle/trainer/Trainer.h" +#include "paddle/legacy/trainer/Trainer.h" #include using namespace paddle; // NOLINT using namespace std; // NOLINT -static const string& configFile1 = "trainer/tests/sample_trainer_config.conf"; +static const string& configFile1 = + "legacy/trainer/tests/sample_trainer_config.conf"; static const string& configFile2 = - "trainer/tests/sample_trainer_config_hsigmoid.conf"; + "legacy/trainer/tests/sample_trainer_config_hsigmoid.conf"; static const string& configFile4 = - "trainer/tests/sample_trainer_config_parallel.conf"; + "legacy/trainer/tests/sample_trainer_config_parallel.conf"; DECLARE_bool(use_gpu); DECLARE_string(config); diff --git a/paddle/trainer/tests/test_TrainerOnePass.cpp b/paddle/legacy/trainer/tests/test_TrainerOnePass.cpp similarity index 96% rename from paddle/trainer/tests/test_TrainerOnePass.cpp rename to paddle/legacy/trainer/tests/test_TrainerOnePass.cpp index 1e1b2d2bf4..0e25e35443 100644 --- a/paddle/trainer/tests/test_TrainerOnePass.cpp +++ b/paddle/legacy/trainer/tests/test_TrainerOnePass.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include #include -#include "paddle/trainer/Trainer.h" -#include "paddle/trainer/TrainerInternal.h" +#include "paddle/legacy/trainer/Trainer.h" +#include "paddle/legacy/trainer/TrainerInternal.h" #include #include @@ -23,12 +23,13 @@ limitations under the License. */ using namespace paddle; // NOLINT using namespace std; // NOLINT -static const string& configFile1 = "trainer/tests/sample_trainer_config.conf"; +static const string& configFile1 = + "legacy/trainer/tests/sample_trainer_config.conf"; static const string& configFile2 = - "trainer/tests/sample_trainer_config_parallel.conf"; + "legacy/trainer/tests/sample_trainer_config_parallel.conf"; static const string& configFileSimpleSparse = - "trainer/tests/simple_sparse_neural_network.py"; + "legacy/trainer/tests/simple_sparse_neural_network.py"; DECLARE_bool(use_gpu); DECLARE_string(config); diff --git a/paddle/trainer/tests/test_config.conf b/paddle/legacy/trainer/tests/test_config.conf similarity index 97% rename from paddle/trainer/tests/test_config.conf rename to paddle/legacy/trainer/tests/test_config.conf index 2f86aaa753..bce687ad83 100644 --- a/paddle/trainer/tests/test_config.conf +++ b/paddle/legacy/trainer/tests/test_config.conf @@ -16,7 +16,7 @@ from paddle.trainer_config_helpers import * TrainData(SimpleData( - files = "trainer/tests/sample_filelist.txt", + files = "legacy/trainer/tests/sample_filelist.txt", feat_dim = 3, context_len = 0, buffer_capacity = 1000000, diff --git a/paddle/trainer/tests/test_gen_dict.txt b/paddle/legacy/trainer/tests/test_gen_dict.txt similarity index 100% rename from paddle/trainer/tests/test_gen_dict.txt rename to paddle/legacy/trainer/tests/test_gen_dict.txt diff --git a/paddle/trainer/tests/test_recurrent_machine_generation.cpp b/paddle/legacy/trainer/tests/test_recurrent_machine_generation.cpp similarity index 90% rename from paddle/trainer/tests/test_recurrent_machine_generation.cpp rename to paddle/legacy/trainer/tests/test_recurrent_machine_generation.cpp index a8fbe31c2b..bd6ee0f01d 100644 --- a/paddle/trainer/tests/test_recurrent_machine_generation.cpp +++ b/paddle/legacy/trainer/tests/test_recurrent_machine_generation.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include -#include +#include #include #include @@ -22,13 +22,15 @@ limitations under the License. */ using namespace paddle; // NOLINT using namespace std; // NOLINT -static const string& CONFIG_FILE = "trainer/tests/sample_trainer_rnn_gen.conf"; +static const string& CONFIG_FILE = + "legacy/trainer/tests/sample_trainer_rnn_gen.conf"; static const string& NEST_CONFIG_FILE = - "trainer/tests/sample_trainer_nest_rnn_gen.conf"; -static const string& OUTPUT_DIR = "trainer/tests/dump_text.test"; -static string modelDir = "trainer/tests/rnn_gen_test_model_dir/t1"; // NOLINT -static string expectFile = // NOLINT - "trainer/tests/rnn_gen_test_model_dir/r1.test"; // NOLINT + "legacy/trainer/tests/sample_trainer_nest_rnn_gen.conf"; +static const string& OUTPUT_DIR = "legacy/trainer/tests/dump_text.test"; +static string modelDir = + "legacy/trainer/tests/rnn_gen_test_model_dir/t1"; // NOLINT +static string expectFile = // NOLINT + "legacy/trainer/tests/rnn_gen_test_model_dir/r1.test"; // NOLINT DECLARE_string(config_args); diff --git a/paddle/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.list b/paddle/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.list deleted file mode 100644 index 0db50f34dd..0000000000 --- a/paddle/trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.list +++ /dev/null @@ -1 +0,0 @@ -trainer/tests/pydata_provider_wrapper_dir/test_pydata_provider_wrapper.data diff --git a/paddle/trainer/tests/sample_filelist.txt b/paddle/trainer/tests/sample_filelist.txt deleted file mode 100644 index 7db4c73535..0000000000 --- a/paddle/trainer/tests/sample_filelist.txt +++ /dev/null @@ -1 +0,0 @@ -trainer/tests/sample_data.txt diff --git a/python/paddle/trainer/config_parser.py b/python/paddle/trainer/config_parser.py index 460eb3b349..5b90facd49 100644 --- a/python/paddle/trainer/config_parser.py +++ b/python/paddle/trainer/config_parser.py @@ -67,7 +67,7 @@ extension_module_name=[MODULE_NAME], then config_parser will call MODULE_NAME.get_config_funcs(g_config) MODULE_NAME.get_config_funcs() should return a dictionary of name to functions, those functions will be available in the config file. -See trainer/tests/config_parser_test.py for example +See legacy/trainer/tests/config_parser_test.py for example To use this from paddle_trainer, paddle_trainer should be called with --config_args=extension_module_name=[MODULE_NAME] diff --git a/python/setup.py.in b/python/setup.py.in index 032784f4a2..d92abf6088 100644 --- a/python/setup.py.in +++ b/python/setup.py.in @@ -93,8 +93,8 @@ if '${CMAKE_SYSTEM_PROCESSOR}' not in ['arm', 'armv7-a', 'aarch64']: paddle_bins = '' if '${WITH_FLUID_ONLY}'== 'OFF': paddle_bin_dir = 'opt/paddle/bin' - paddle_bins = ['${PADDLE_BINARY_DIR}/paddle/trainer/paddle_trainer', - '${PADDLE_BINARY_DIR}/paddle/trainer/paddle_merge_model', + paddle_bins = ['${PADDLE_BINARY_DIR}/paddle/legacy/trainer/paddle_trainer', + '${PADDLE_BINARY_DIR}/paddle/legacy/trainer/paddle_merge_model', '${PADDLE_BINARY_DIR}/paddle/legacy/pserver/paddle_pserver_main', '${PADDLE_BINARY_DIR}/paddle/scripts/paddle'] diff --git a/tools/codestyle/cpplint_pre_commit.hook b/tools/codestyle/cpplint_pre_commit.hook index 041ba868af..f4190fb876 100755 --- a/tools/codestyle/cpplint_pre_commit.hook +++ b/tools/codestyle/cpplint_pre_commit.hook @@ -4,7 +4,7 @@ TOTAL_ERRORS=0 # The trick to remove deleted files: https://stackoverflow.com/a/2413151 for file in $(git diff --cached --name-status | awk '$1 != "D" {print $2}'); do - if [[ $file =~ ^(paddle/api/.*|paddle/capi/.*|paddle/contrib/.*|paddle/legacy/cuda/.*|paddle/legacy/function/.*|paddle/legacy/gserver/.*|paddle/legacy/math/.*|paddle/legacy/optimizer/.*|paddle/legacy/parameter/.*|paddle/legacy/pserver/.*|paddle/trainer/.*|paddle/utils/.*|paddle/testing/TestUtil.*) ]]; then + if [[ $file =~ ^(paddle/legacy/api/.*|paddle/legacy/capi/.*|paddle/contrib/.*|paddle/legacy/cuda/.*|paddle/legacy/function/.*|paddle/legacy/gserver/.*|paddle/legacy/math/.*|paddle/legacy/optimizer/.*|paddle/legacy/parameter/.*|paddle/legacy/pserver/.*|paddle/legacy/trainer/.*|paddle/utils/.*|paddle/testing/TestUtil.*) ]]; then continue; else cpplint --filter=-readability/fn_size $file; From 2df8e2931f47abef31f2a6f5a8a281946049b8ed Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Tue, 3 Jul 2018 13:22:18 +0800 Subject: [PATCH 113/130] fix --- paddle/legacy/trainer/tests/test_Compare.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/legacy/trainer/tests/test_Compare.cpp b/paddle/legacy/trainer/tests/test_Compare.cpp index 496a148bf6..9623c280eb 100644 --- a/paddle/legacy/trainer/tests/test_Compare.cpp +++ b/paddle/legacy/trainer/tests/test_Compare.cpp @@ -23,7 +23,7 @@ using namespace paddle; // NOLINT using namespace std; // NOLINT static const string& configFile = - "/legacy/trainer/tests/sample_trainer_config.conf"; + "./legacy/trainer/tests/sample_trainer_config.conf"; DECLARE_int32(gpu_id); DECLARE_bool(use_gpu); From 27d69625368a2e21aa7417908fbb4f539a4e3c91 Mon Sep 17 00:00:00 2001 From: Wu Yi Date: Tue, 3 Jul 2018 13:37:50 +0800 Subject: [PATCH 114/130] fix mac build (#11873) * fix mac build * add notes * fix_mac_build * update --- CMakeLists.txt | 1 + cmake/cblas.cmake | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 997672169f..23bb27e77b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,6 +65,7 @@ option(REPLACE_ENFORCE_GLOG "Replace PADDLE_ENFORCE with glog/CHECK for better d option(WITH_ANAKIN "Compile with Anakin library" OFF) option(WITH_GRPC "Use grpc as the default rpc framework" ${WITH_DISTRIBUTE}) option(WITH_BRPC_RDMA "Use brpc rdma as the rpc protocal" OFF) +option(WITH_SYSTEM_BLAS "Use system blas library" OFF) # CMAKE_BUILD_TYPE if(NOT CMAKE_BUILD_TYPE) diff --git a/cmake/cblas.cmake b/cmake/cblas.cmake index e3b9d94215..6ed51c6484 100644 --- a/cmake/cblas.cmake +++ b/cmake/cblas.cmake @@ -83,18 +83,20 @@ else() set(REFERENCE_CBLAS_LIB_SEARCH_PATHS ${REFERENCE_CBLAS_ROOT}/lib) endif() -find_path(REFERENCE_CBLAS_INCLUDE_DIR NAMES cblas.h PATHS +if(WITH_SYSTEM_BLAS) + find_path(REFERENCE_CBLAS_INCLUDE_DIR NAMES cblas.h PATHS ${REFERENCE_CBLAS_INCLUDE_SEARCH_PATHS}) -find_library(REFERENCE_CBLAS_LIBRARY NAMES cblas PATHS + find_library(REFERENCE_CBLAS_LIBRARY NAMES cblas PATHS ${REFERENCE_CBLAS_LIB_SEARCH_PATHS}) -if(REFERENCE_CBLAS_INCLUDE_DIR AND REFERENCE_CBLAS_LIBRARY) - set(CBLAS_FOUND ON) - set(CBLAS_PROVIDER REFERENCE) - set(CBLAS_INC_DIR ${REFERENCE_CBLAS_INCLUDE_DIR}) - set(CBLAS_LIBRARIES ${REFERENCE_CBLAS_LIBRARY}) - add_definitions(-DPADDLE_USE_REFERENCE_CBLAS) - message(STATUS "Found reference-cblas (include: ${CBLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})") + if(REFERENCE_CBLAS_INCLUDE_DIR AND REFERENCE_CBLAS_LIBRARY) + set(CBLAS_FOUND ON) + set(CBLAS_PROVIDER REFERENCE) + set(CBLAS_INC_DIR ${REFERENCE_CBLAS_INCLUDE_DIR}) + set(CBLAS_LIBRARIES ${REFERENCE_CBLAS_LIBRARY}) + add_definitions(-DPADDLE_USE_REFERENCE_CBLAS) + message(STATUS "Found reference-cblas (include: ${CBLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})") + endif() endif() if(IOS_USE_VECLIB_FOR_BLAS AND VECLIB_FOUND) From 94cb59ad097851a7806f43c308f164437d0e15d6 Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Tue, 3 Jul 2018 14:16:53 +0800 Subject: [PATCH 115/130] hide utils to legacy --- README.md | 2 ++ go/CMakeLists.txt | 2 +- go/cmd/master/master.go | 2 +- go/pserver/etcd_client.go | 2 +- paddle/CMakeLists.txt | 2 +- ...addle_inference_api_tensorrt_subgraph_engine.cc | 2 +- .../inference/tensorrt/convert/io_converter.h | 2 +- .../inference/tensorrt/convert/op_converter.h | 2 +- .../fluid/inference/tensorrt/convert/ut_helper.h | 2 +- paddle/fluid/inference/tensorrt/engine.h | 2 +- paddle/fluid/operators/positive_negative_pair_op.h | 2 +- paddle/fluid/operators/tensorrt_engine_op.cc | 2 +- paddle/fluid/platform/float16_test.cu | 2 +- paddle/legacy/api/Paddle.i | 2 +- paddle/legacy/api/PaddleAPI.h | 4 ++-- paddle/legacy/api/SequenceGenerator.cpp | 2 +- paddle/legacy/api/Trainer.cpp | 2 +- paddle/legacy/api/Util.cpp | 8 ++++---- paddle/legacy/capi/Main.cpp | 4 ++-- paddle/legacy/capi/tests/test_Arguments.cpp | 2 +- paddle/legacy/capi/tests/test_GradientMachine.cpp | 2 +- paddle/legacy/cuda/include/hl_base.h | 2 +- paddle/legacy/cuda/include/hl_gpu_gru.cuh | 2 +- paddle/legacy/cuda/include/hl_gpu_lstm.cuh | 2 +- .../legacy/cuda/include/hl_gpu_matrix_kernel.cuh | 2 +- paddle/legacy/cuda/src/hl_cuda_aggregate.cu | 2 +- paddle/legacy/cuda/src/hl_cuda_cublas.cc | 4 ++-- paddle/legacy/cuda/src/hl_cuda_cudnn.cc | 4 ++-- paddle/legacy/cuda/src/hl_cuda_device.cc | 4 ++-- paddle/legacy/cuda/src/hl_cuda_lstm.cu | 2 +- paddle/legacy/cuda/src/hl_cuda_matrix.cu | 2 +- paddle/legacy/cuda/src/hl_cuda_sequence.cu | 2 +- paddle/legacy/cuda/src/hl_cuda_sparse.cu | 2 +- paddle/legacy/cuda/src/hl_table_apply.cu | 2 +- paddle/legacy/cuda/src/hl_top_k.cu | 2 +- paddle/legacy/cuda/src/hl_warpctc_wrap.cc | 4 ++-- paddle/legacy/function/Function.h | 6 +++--- paddle/legacy/function/MulOp.cpp | 2 +- .../gserver/activations/ActivationFunction.cpp | 4 ++-- .../gserver/activations/ActivationFunction.h | 2 +- .../gserver/activations/MKLDNNActivation.cpp | 2 +- .../legacy/gserver/dataproviders/DataProvider.cpp | 8 ++++---- paddle/legacy/gserver/dataproviders/DataProvider.h | 14 +++++++------- .../gserver/dataproviders/MultiDataProvider.cpp | 4 ++-- .../gserver/dataproviders/PyDataProvider.cpp | 6 +++--- .../legacy/gserver/dataproviders/PyDataProvider.h | 2 +- .../gserver/dataproviders/PyDataProvider2.cpp | 6 +++--- .../gserver/evaluators/CTCErrorEvaluator.cpp | 2 +- .../legacy/gserver/evaluators/ChunkEvaluator.cpp | 2 +- paddle/legacy/gserver/evaluators/Evaluator.cpp | 4 ++-- paddle/legacy/gserver/evaluators/Evaluator.h | 4 ++-- .../gserver/gradientmachines/GradientMachine.cpp | 2 +- .../gserver/gradientmachines/GradientMachine.h | 2 +- .../gradientmachines/MultiGradientMachine.cpp | 4 ++-- .../gradientmachines/MultiGradientMachine.h | 4 ++-- .../gserver/gradientmachines/MultiNetwork.cpp | 4 ++-- .../legacy/gserver/gradientmachines/MultiNetwork.h | 2 +- .../gserver/gradientmachines/NeuralNetwork.cpp | 8 ++++---- .../gserver/gradientmachines/NeuralNetwork.h | 2 +- .../gradientmachines/ParallelNeuralNetwork.cpp | 4 ++-- .../gradientmachines/RecurrentGradientMachine.cpp | 6 +++--- .../gradientmachines/RecurrentGradientMachine.h | 2 +- paddle/legacy/gserver/layers/AddtoLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/AddtoLayer.h | 2 +- paddle/legacy/gserver/layers/AgentLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/AgentLayer.h | 2 +- paddle/legacy/gserver/layers/AverageLayer.cpp | 4 ++-- .../legacy/gserver/layers/BatchNormBaseLayer.cpp | 2 +- paddle/legacy/gserver/layers/BatchNormBaseLayer.h | 2 +- .../gserver/layers/BatchNormalizationLayer.cpp | 2 +- .../legacy/gserver/layers/BilinearInterpLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/BlockExpandLayer.cpp | 2 +- paddle/legacy/gserver/layers/ConcatenateLayer.cpp | 2 +- paddle/legacy/gserver/layers/ContextProjection.cpp | 2 +- paddle/legacy/gserver/layers/Conv3DLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/ConvBaseLayer.cpp | 2 +- .../legacy/gserver/layers/ConvBaseProjection.cpp | 2 +- paddle/legacy/gserver/layers/ConvProjection.cpp | 2 +- paddle/legacy/gserver/layers/ConvShiftLayer.cpp | 4 ++-- .../legacy/gserver/layers/ConvTransProjection.cpp | 2 +- .../gserver/layers/ConvexCombinationLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/CosSimLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/CosSimLayer.h | 2 +- paddle/legacy/gserver/layers/CosSimVecMatLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/CostLayer.cpp | 2 +- paddle/legacy/gserver/layers/CropLayer.cpp | 2 +- .../legacy/gserver/layers/CudnnBatchNormLayer.cpp | 2 +- paddle/legacy/gserver/layers/CudnnBatchNormLayer.h | 2 +- .../legacy/gserver/layers/CudnnConvBaseLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/CudnnPoolLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/DataNormLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/DataNormLayer.h | 2 +- paddle/legacy/gserver/layers/DeConv3DLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/DotProdLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/EosIdCheckLayer.cpp | 2 +- paddle/legacy/gserver/layers/ExpandConvLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/ExpandLayer.cpp | 4 ++-- .../gserver/layers/FactorizationMachineLayer.cpp | 4 ++-- .../gserver/layers/FactorizationMachineLayer.h | 2 +- .../gserver/layers/FeatureMapExpandLayer.cpp | 2 +- .../legacy/gserver/layers/FullMatrixProjection.h | 2 +- .../legacy/gserver/layers/FullyConnectedLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/FullyConnectedLayer.h | 2 +- .../legacy/gserver/layers/GatedRecurrentLayer.cpp | 2 +- paddle/legacy/gserver/layers/GruCompute.cpp | 2 +- paddle/legacy/gserver/layers/GruCompute.h | 2 +- paddle/legacy/gserver/layers/GruStepLayer.cpp | 2 +- .../gserver/layers/HierarchicalSigmoidLayer.cpp | 2 +- .../legacy/gserver/layers/IdentityProjection.cpp | 2 +- .../legacy/gserver/layers/InterpolationLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/L2DistanceLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/Layer.cpp | 6 +++--- paddle/legacy/gserver/layers/Layer.h | 4 ++-- paddle/legacy/gserver/layers/LstmCompute.cpp | 2 +- paddle/legacy/gserver/layers/LstmCompute.h | 2 +- paddle/legacy/gserver/layers/LstmLayer.cpp | 2 +- paddle/legacy/gserver/layers/LstmStepLayer.cpp | 2 +- paddle/legacy/gserver/layers/MKLDNNConvLayer.cpp | 2 +- paddle/legacy/gserver/layers/MKLDNNFcLayer.cpp | 2 +- paddle/legacy/gserver/layers/MKLDNNLRNLayer.cpp | 2 +- paddle/legacy/gserver/layers/MKLDNNLayer.h | 2 +- paddle/legacy/gserver/layers/MKLDNNPoolLayer.cpp | 2 +- paddle/legacy/gserver/layers/MaxLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/MaxLayer.h | 2 +- .../legacy/gserver/layers/MaxPoolWithMaskLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/MixedLayer.cpp | 2 +- paddle/legacy/gserver/layers/MultinomialSampler.h | 2 +- paddle/legacy/gserver/layers/MultiplexLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/NormLayer.cpp | 2 +- .../legacy/gserver/layers/NormProjectionLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/OuterProdLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/PadLayer.cpp | 2 +- .../legacy/gserver/layers/ParameterReluLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/ParameterReluLayer.h | 2 +- paddle/legacy/gserver/layers/Pool3DLayer.cpp | 2 +- paddle/legacy/gserver/layers/PoolLayer.cpp | 2 +- .../legacy/gserver/layers/PoolProjectionLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/PowerLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/RecurrentLayer.h | 2 +- .../legacy/gserver/layers/RecurrentLayerGroup.cpp | 2 +- paddle/legacy/gserver/layers/RowConvLayer.cpp | 2 +- .../legacy/gserver/layers/ScaleSubRegionLayer.cpp | 2 +- paddle/legacy/gserver/layers/ScalingLayer.cpp | 4 ++-- .../layers/SelectiveFullyConnectedLayer.cpp | 4 ++-- .../gserver/layers/SelectiveFullyConnectedLayer.h | 2 +- .../legacy/gserver/layers/SequenceConcatLayer.cpp | 4 ++-- .../gserver/layers/SequenceLastInstanceLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/SequencePoolLayer.cpp | 2 +- .../legacy/gserver/layers/SequenceReshapeLayer.cpp | 4 ++-- .../legacy/gserver/layers/SequenceSliceLayer.cpp | 4 ++-- .../legacy/gserver/layers/SlopeInterceptLayer.cpp | 4 ++-- .../gserver/layers/SpatialPyramidPoolLayer.h | 2 +- .../gserver/layers/SubNestedSequenceLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/SubSequenceLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/SumToOneNormLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/SwitchOrderLayer.cpp | 2 +- paddle/legacy/gserver/layers/TensorLayer.cpp | 4 ++-- paddle/legacy/gserver/layers/TensorLayer.h | 2 +- paddle/legacy/gserver/layers/TransLayer.cpp | 2 +- .../layers/TransposedFullMatrixProjection.cpp | 2 +- paddle/legacy/gserver/layers/UpsampleLayer.h | 4 ++-- paddle/legacy/gserver/layers/ValidationLayer.cpp | 2 +- paddle/legacy/gserver/tests/test_BatchNorm.cpp | 2 +- paddle/legacy/gserver/tests/test_CompareSparse.cpp | 2 +- .../legacy/gserver/tests/test_CompareTwoNets.cpp | 2 +- paddle/legacy/gserver/tests/test_ConvTrans.cpp | 2 +- paddle/legacy/gserver/tests/test_ConvUnify.cpp | 2 +- paddle/legacy/gserver/tests/test_KmaxSeqScore.cpp | 2 +- .../legacy/gserver/tests/test_LinearChainCRF.cpp | 2 +- paddle/legacy/gserver/tests/test_MKLDNN.cpp | 2 +- .../gserver/tests/test_MultinomialSampler.cpp | 4 ++-- .../legacy/gserver/tests/test_NetworkCompare.cpp | 4 ++-- .../legacy/gserver/tests/test_PyDataProvider.cpp | 2 +- .../legacy/gserver/tests/test_PyDataProvider2.cpp | 4 ++-- .../tests/test_RecurrentGradientMachine.cpp | 6 +++--- .../legacy/gserver/tests/test_RecurrentLayer.cpp | 2 +- .../legacy/gserver/tests/test_SelectiveFCLayer.cpp | 2 +- paddle/legacy/gserver/tests/test_WarpCTCLayer.cpp | 2 +- paddle/legacy/math/Allocator.h | 2 +- paddle/legacy/math/BaseMatrix.cu | 2 +- paddle/legacy/math/BaseMatrix.h | 2 +- paddle/legacy/math/CpuSparseMatrix.cpp | 2 +- paddle/legacy/math/MathFunctions.cpp | 2 +- paddle/legacy/math/MathUtils.cpp | 2 +- paddle/legacy/math/Matrix.cpp | 4 ++-- paddle/legacy/math/Matrix.h | 8 ++++---- paddle/legacy/math/MatrixBitCode.cpp | 4 ++-- paddle/legacy/math/RowBuffer.h | 2 +- paddle/legacy/math/SparseMatrix.cpp | 2 +- paddle/legacy/math/SparseRowMatrix.cpp | 6 +++--- paddle/legacy/math/SparseRowMatrix.h | 2 +- paddle/legacy/math/Storage.cpp | 4 ++-- paddle/legacy/math/Storage.h | 2 +- paddle/legacy/math/TensorAssign.h | 2 +- paddle/legacy/math/TensorEvaluate.h | 2 +- paddle/legacy/math/TensorExpression.h | 4 ++-- paddle/legacy/math/TrainingAlgorithmOp.cu | 2 +- paddle/legacy/math/TrainingAlgorithmOp.h | 2 +- paddle/legacy/math/Vector.cpp | 10 +++++----- paddle/legacy/math/Vector.h | 4 ++-- paddle/legacy/math/tests/OriginalOptimizerApi.h | 2 +- paddle/legacy/math/tests/PerfUtils.h | 2 +- paddle/legacy/math/tests/test_Allocator.cpp | 4 ++-- paddle/legacy/math/tests/test_CpuGpuVector.cpp | 2 +- paddle/legacy/math/tests/test_ExecViaCpu.cpp | 4 ++-- paddle/legacy/math/tests/test_FPException.cpp | 2 +- paddle/legacy/math/tests/test_GpuProfiler.cpp | 4 ++-- paddle/legacy/math/tests/test_SIMDFunctions.cpp | 2 +- paddle/legacy/math/tests/test_SparseMatrix.cpp | 2 +- .../legacy/math/tests/test_TrainingAlgorithm.cpp | 2 +- paddle/legacy/math/tests/test_matrixCompare.cpp | 6 +++--- paddle/legacy/math/tests/test_matrixUtil.h | 2 +- .../legacy/math/tests/test_sparseMatrixCompare.cpp | 2 +- paddle/legacy/optimizer/serialization.h | 2 +- paddle/legacy/optimizer/tensor.h | 4 ++-- paddle/legacy/parameter/Argument.h | 4 ++-- paddle/legacy/parameter/FirstOrderOptimizer.cpp | 4 ++-- paddle/legacy/parameter/LearningRateScheduler.cpp | 2 +- paddle/legacy/parameter/LearningRateScheduler.h | 2 +- paddle/legacy/parameter/Parameter.cpp | 2 +- paddle/legacy/parameter/Parameter.h | 10 +++++----- paddle/legacy/parameter/ParameterOptimizer.cpp | 2 +- .../legacy/parameter/ParameterUpdateFunctions.cpp | 2 +- paddle/legacy/parameter/ParameterUpdateFunctions.h | 2 +- paddle/legacy/parameter/ParameterUpdaterBase.cpp | 2 +- paddle/legacy/parameter/ParameterUpdaterHook.cpp | 4 ++-- paddle/legacy/parameter/Regularizer.cpp | 4 ++-- paddle/legacy/parameter/Weight.cpp | 2 +- paddle/legacy/parameter/tests/test_common.cpp | 8 ++++---- paddle/legacy/pserver/BaseClient.cpp | 2 +- paddle/legacy/pserver/BaseClient.h | 4 ++-- paddle/legacy/pserver/LightNetwork.cpp | 4 ++-- paddle/legacy/pserver/LightNetwork.h | 2 +- paddle/legacy/pserver/ParameterClient2.cpp | 6 +++--- paddle/legacy/pserver/ParameterClient2.h | 10 +++++----- paddle/legacy/pserver/ParameterServer2.cpp | 8 ++++---- paddle/legacy/pserver/ParameterServer2.h | 8 ++++---- paddle/legacy/pserver/ParameterServerController.h | 2 +- paddle/legacy/pserver/RDMANetwork.h | 2 +- paddle/legacy/pserver/SocketChannel.cpp | 2 +- paddle/legacy/pserver/SocketChannel.h | 2 +- .../legacy/pserver/SparseParameterDistribution.cpp | 4 ++-- .../legacy/pserver/SparseParameterDistribution.h | 2 +- paddle/legacy/pserver/test/SocketTest.cpp | 4 ++-- .../legacy/pserver/test/test_ParameterServer2.cpp | 4 ++-- paddle/legacy/pserver/test/test_ProtoServer.cpp | 4 ++-- paddle/legacy/trainer/MergeModel.cpp | 2 +- .../legacy/trainer/NewRemoteParameterUpdater.cpp | 2 +- paddle/legacy/trainer/NewRemoteParameterUpdater.h | 4 ++-- paddle/legacy/trainer/ParamUtil.cpp | 10 +++++----- paddle/legacy/trainer/ParamUtil.h | 2 +- paddle/legacy/trainer/ParameterUpdater.cpp | 4 ++-- paddle/legacy/trainer/ParameterUpdater.h | 4 ++-- paddle/legacy/trainer/RemoteParameterUpdater.cpp | 4 ++-- paddle/legacy/trainer/RemoteParameterUpdater.h | 4 ++-- paddle/legacy/trainer/Tester.cpp | 8 ++++---- paddle/legacy/trainer/Tester.h | 2 +- paddle/legacy/trainer/TesterConfig.h | 2 +- paddle/legacy/trainer/ThreadParameterUpdater.cpp | 4 ++-- paddle/legacy/trainer/ThreadParameterUpdater.h | 2 +- paddle/legacy/trainer/Trainer.cpp | 10 +++++----- paddle/legacy/trainer/Trainer.h | 2 +- paddle/legacy/trainer/TrainerBenchmark.cpp | 4 ++-- paddle/legacy/trainer/TrainerConfigHelper.cpp | 4 ++-- paddle/legacy/trainer/TrainerConfigHelper.h | 4 ++-- paddle/legacy/trainer/TrainerInternal.cpp | 8 ++++---- paddle/legacy/trainer/TrainerInternal.h | 2 +- paddle/legacy/trainer/TrainerInternalConfig.h | 2 +- paddle/legacy/trainer/TrainerMain.cpp | 2 +- paddle/legacy/trainer/tests/test_Compare.cpp | 2 +- .../trainer/tests/test_PyDataProviderWrapper.cpp | 2 +- paddle/legacy/trainer/tests/test_Trainer.cpp | 4 ++-- .../legacy/trainer/tests/test_TrainerOnePass.cpp | 4 ++-- .../tests/test_recurrent_machine_generation.cpp | 2 +- paddle/{ => legacy}/utils/.gitignore | 0 paddle/{ => legacy}/utils/Any.h | 0 paddle/{ => legacy}/utils/CMakeLists.txt | 0 paddle/{ => legacy}/utils/ClassRegistrar.h | 0 paddle/{ => legacy}/utils/Common.h | 0 paddle/{ => legacy}/utils/CpuId.cpp | 4 ++-- paddle/{ => legacy}/utils/CpuId.h | 0 paddle/{ => legacy}/utils/CustomStackTrace.cpp | 0 paddle/{ => legacy}/utils/CustomStackTrace.h | 0 paddle/{ => legacy}/utils/DynamicLoader.cpp | 0 paddle/{ => legacy}/utils/DynamicLoader.h | 0 paddle/{ => legacy}/utils/Error.h | 0 paddle/{ => legacy}/utils/Excepts.h | 0 paddle/{ => legacy}/utils/Flags.cpp | 0 paddle/{ => legacy}/utils/Flags.h | 0 paddle/{ => legacy}/utils/GlobalConstants.cpp | 0 paddle/{ => legacy}/utils/GlobalConstants.h | 0 paddle/{ => legacy}/utils/Locks.h | 0 paddle/{ => legacy}/utils/Logging.cpp | 0 paddle/{ => legacy}/utils/Logging.h | 0 paddle/{ => legacy}/utils/PythonUtil.cpp | 0 paddle/{ => legacy}/utils/PythonUtil.h | 2 +- paddle/{ => legacy}/utils/Queue.h | 0 paddle/{ => legacy}/utils/Stat.cpp | 0 paddle/{ => legacy}/utils/Stat.h | 0 paddle/{ => legacy}/utils/StringUtil.cpp | 0 paddle/{ => legacy}/utils/StringUtil.h | 0 paddle/{ => legacy}/utils/Thread.h | 0 paddle/{ => legacy}/utils/ThreadLocal.cpp | 0 paddle/{ => legacy}/utils/ThreadLocal.h | 0 paddle/{ => legacy}/utils/Util.cpp | 0 paddle/{ => legacy}/utils/Util.h | 0 paddle/{ => legacy}/utils/Version.cpp | 0 paddle/{ => legacy}/utils/Version.h | 0 paddle/{ => legacy}/utils/arch/linux/Locks.cpp | 4 ++-- paddle/{ => legacy}/utils/arch/osx/Excepts.cpp | 2 +- paddle/{ => legacy}/utils/arch/osx/Locks.cpp | 4 ++-- paddle/{ => legacy}/utils/enable_virtualenv.py | 0 paddle/{ => legacy}/utils/tests/CMakeLists.txt | 2 +- .../utils/tests/test_CustomStackTrace.cpp | 8 ++++---- .../utils/tests/test_CustomStackTracePrint.cpp | 6 +++--- .../utils/tests/test_CustomStackTracePrint.sh | 0 paddle/{ => legacy}/utils/tests/test_Error.cpp | 2 +- paddle/{ => legacy}/utils/tests/test_SIMDFlags.cpp | 6 +++--- paddle/{ => legacy}/utils/tests/test_SpinLock.cpp | 6 +++--- .../{ => legacy}/utils/tests/test_StringUtils.cpp | 2 +- paddle/{ => legacy}/utils/tests/test_Thread.cpp | 2 +- .../utils/tests/test_ThreadBarrier.cpp | 6 +++--- paddle/testing/TestMain.cpp | 2 +- proto/README.md | 3 +++ python/CMakeLists.txt | 2 +- tools/codestyle/cpplint_pre_commit.hook | 2 +- 326 files changed, 468 insertions(+), 463 deletions(-) rename paddle/{ => legacy}/utils/.gitignore (100%) rename paddle/{ => legacy}/utils/Any.h (100%) rename paddle/{ => legacy}/utils/CMakeLists.txt (100%) rename paddle/{ => legacy}/utils/ClassRegistrar.h (100%) rename paddle/{ => legacy}/utils/Common.h (100%) rename paddle/{ => legacy}/utils/CpuId.cpp (96%) rename paddle/{ => legacy}/utils/CpuId.h (100%) rename paddle/{ => legacy}/utils/CustomStackTrace.cpp (100%) rename paddle/{ => legacy}/utils/CustomStackTrace.h (100%) rename paddle/{ => legacy}/utils/DynamicLoader.cpp (100%) rename paddle/{ => legacy}/utils/DynamicLoader.h (100%) rename paddle/{ => legacy}/utils/Error.h (100%) rename paddle/{ => legacy}/utils/Excepts.h (100%) rename paddle/{ => legacy}/utils/Flags.cpp (100%) rename paddle/{ => legacy}/utils/Flags.h (100%) rename paddle/{ => legacy}/utils/GlobalConstants.cpp (100%) rename paddle/{ => legacy}/utils/GlobalConstants.h (100%) rename paddle/{ => legacy}/utils/Locks.h (100%) rename paddle/{ => legacy}/utils/Logging.cpp (100%) rename paddle/{ => legacy}/utils/Logging.h (100%) rename paddle/{ => legacy}/utils/PythonUtil.cpp (100%) rename paddle/{ => legacy}/utils/PythonUtil.h (99%) rename paddle/{ => legacy}/utils/Queue.h (100%) rename paddle/{ => legacy}/utils/Stat.cpp (100%) rename paddle/{ => legacy}/utils/Stat.h (100%) rename paddle/{ => legacy}/utils/StringUtil.cpp (100%) rename paddle/{ => legacy}/utils/StringUtil.h (100%) rename paddle/{ => legacy}/utils/Thread.h (100%) rename paddle/{ => legacy}/utils/ThreadLocal.cpp (100%) rename paddle/{ => legacy}/utils/ThreadLocal.h (100%) rename paddle/{ => legacy}/utils/Util.cpp (100%) rename paddle/{ => legacy}/utils/Util.h (100%) rename paddle/{ => legacy}/utils/Version.cpp (100%) rename paddle/{ => legacy}/utils/Version.h (100%) rename paddle/{ => legacy}/utils/arch/linux/Locks.cpp (97%) rename paddle/{ => legacy}/utils/arch/osx/Excepts.cpp (97%) rename paddle/{ => legacy}/utils/arch/osx/Locks.cpp (97%) rename paddle/{ => legacy}/utils/enable_virtualenv.py (100%) rename paddle/{ => legacy}/utils/tests/CMakeLists.txt (84%) rename paddle/{ => legacy}/utils/tests/test_CustomStackTrace.cpp (94%) rename paddle/{ => legacy}/utils/tests/test_CustomStackTracePrint.cpp (86%) rename paddle/{ => legacy}/utils/tests/test_CustomStackTracePrint.sh (100%) rename paddle/{ => legacy}/utils/tests/test_Error.cpp (96%) rename paddle/{ => legacy}/utils/tests/test_SIMDFlags.cpp (94%) rename paddle/{ => legacy}/utils/tests/test_SpinLock.cpp (93%) rename paddle/{ => legacy}/utils/tests/test_StringUtils.cpp (95%) rename paddle/{ => legacy}/utils/tests/test_Thread.cpp (98%) rename paddle/{ => legacy}/utils/tests/test_ThreadBarrier.cpp (94%) create mode 100644 proto/README.md diff --git a/README.md b/README.md index 63abca069a..eb99ed21d0 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ learning to many products at Baidu. Our vision is to enable deep learning for everyone via PaddlePaddle. Please refer to our [release announcement](https://github.com/PaddlePaddle/Paddle/releases) to track the latest feature of PaddlePaddle. +### Lastest PaddlePaddle Version: [Fluid](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/fluid) + ## Features - **Flexibility** diff --git a/go/CMakeLists.txt b/go/CMakeLists.txt index f3a9296c2c..839b75a259 100644 --- a/go/CMakeLists.txt +++ b/go/CMakeLists.txt @@ -20,4 +20,4 @@ add_subdirectory(master/c) add_subdirectory(master) add_subdirectory(pserver) add_subdirectory(pserver/client) -add_subdirectory(utils/networkhelper) +add_subdirectory(legacy/utils/networkhelper) diff --git a/go/cmd/master/master.go b/go/cmd/master/master.go index 537df59c86..6c1e4c7198 100644 --- a/go/cmd/master/master.go +++ b/go/cmd/master/master.go @@ -28,8 +28,8 @@ import ( log "github.com/inconshreveable/log15" "github.com/namsral/flag" + "github.com/PaddlePaddle/Paddle/go/legacy/utils/networkhelper" "github.com/PaddlePaddle/Paddle/go/master" - "github.com/PaddlePaddle/Paddle/go/utils/networkhelper" ) func main() { diff --git a/go/pserver/etcd_client.go b/go/pserver/etcd_client.go index 719013b1bb..80b1abee5e 100644 --- a/go/pserver/etcd_client.go +++ b/go/pserver/etcd_client.go @@ -21,7 +21,7 @@ import ( "strings" "time" - "github.com/PaddlePaddle/Paddle/go/utils/networkhelper" + "github.com/PaddlePaddle/Paddle/go/legacy/utils/networkhelper" "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/clientv3/concurrency" log "github.com/inconshreveable/log15" diff --git a/paddle/CMakeLists.txt b/paddle/CMakeLists.txt index e1f65e505e..6653244507 100644 --- a/paddle/CMakeLists.txt +++ b/paddle/CMakeLists.txt @@ -1,7 +1,7 @@ if(NOT WITH_FLUID_ONLY) add_subdirectory(legacy/cuda) add_subdirectory(legacy/function) - add_subdirectory(utils) + add_subdirectory(legacy/utils) add_subdirectory(legacy/math) add_subdirectory(legacy/gserver) add_subdirectory(legacy/parameter) diff --git a/paddle/contrib/inference/paddle_inference_api_tensorrt_subgraph_engine.cc b/paddle/contrib/inference/paddle_inference_api_tensorrt_subgraph_engine.cc index a11396cee9..14554545d9 100644 --- a/paddle/contrib/inference/paddle_inference_api_tensorrt_subgraph_engine.cc +++ b/paddle/contrib/inference/paddle_inference_api_tensorrt_subgraph_engine.cc @@ -15,7 +15,7 @@ #include "paddle/contrib/inference/paddle_inference_api.h" #include "paddle/contrib/inference/paddle_inference_api_impl.h" #include "paddle/fluid/inference/analysis/analyzer.h" -#include "paddle/fluid/inference/utils/singleton.h" +#include "paddle/fluid/inference/legacy/utils/singleton.h" namespace paddle { diff --git a/paddle/fluid/inference/tensorrt/convert/io_converter.h b/paddle/fluid/inference/tensorrt/convert/io_converter.h index 71c48e085d..fc8881f80c 100644 --- a/paddle/fluid/inference/tensorrt/convert/io_converter.h +++ b/paddle/fluid/inference/tensorrt/convert/io_converter.h @@ -17,7 +17,7 @@ limitations under the License. */ #include #include #include "paddle/fluid/framework/lod_tensor.h" -#include "paddle/fluid/inference/utils/singleton.h" +#include "paddle/fluid/inference/legacy/utils/singleton.h" namespace paddle { namespace inference { diff --git a/paddle/fluid/inference/tensorrt/convert/op_converter.h b/paddle/fluid/inference/tensorrt/convert/op_converter.h index 6697952051..bf4e07fed0 100644 --- a/paddle/fluid/inference/tensorrt/convert/op_converter.h +++ b/paddle/fluid/inference/tensorrt/convert/op_converter.h @@ -19,8 +19,8 @@ limitations under the License. */ #include "paddle/fluid/framework/block_desc.h" #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/framework/scope.h" +#include "paddle/fluid/inference/legacy/utils/singleton.h" #include "paddle/fluid/inference/tensorrt/engine.h" -#include "paddle/fluid/inference/utils/singleton.h" namespace paddle { namespace inference { diff --git a/paddle/fluid/inference/tensorrt/convert/ut_helper.h b/paddle/fluid/inference/tensorrt/convert/ut_helper.h index 3b1f531adc..0003b16d4e 100644 --- a/paddle/fluid/inference/tensorrt/convert/ut_helper.h +++ b/paddle/fluid/inference/tensorrt/convert/ut_helper.h @@ -25,9 +25,9 @@ limitations under the License. */ #include "paddle/fluid/framework/lod_tensor.h" #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/inference/analysis/helper.h" +#include "paddle/fluid/inference/legacy/utils/singleton.h" #include "paddle/fluid/inference/tensorrt/convert/op_converter.h" #include "paddle/fluid/inference/tensorrt/engine.h" -#include "paddle/fluid/inference/utils/singleton.h" namespace paddle { namespace inference { diff --git a/paddle/fluid/inference/tensorrt/engine.h b/paddle/fluid/inference/tensorrt/engine.h index b06a9bbc67..42a596deb1 100644 --- a/paddle/fluid/inference/tensorrt/engine.h +++ b/paddle/fluid/inference/tensorrt/engine.h @@ -20,8 +20,8 @@ limitations under the License. */ #include #include #include "paddle/fluid/inference/engine.h" +#include "paddle/fluid/inference/legacy/utils/singleton.h" #include "paddle/fluid/inference/tensorrt/helper.h" -#include "paddle/fluid/inference/utils/singleton.h" namespace paddle { namespace inference { diff --git a/paddle/fluid/operators/positive_negative_pair_op.h b/paddle/fluid/operators/positive_negative_pair_op.h index f20f33bbeb..db0a1002f4 100644 --- a/paddle/fluid/operators/positive_negative_pair_op.h +++ b/paddle/fluid/operators/positive_negative_pair_op.h @@ -14,7 +14,7 @@ limitations under the License. */ #include #include "paddle/fluid/framework/eigen.h" #include "paddle/fluid/framework/op_registry.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { namespace operators { diff --git a/paddle/fluid/operators/tensorrt_engine_op.cc b/paddle/fluid/operators/tensorrt_engine_op.cc index 647cfc0a0a..b5d0578831 100644 --- a/paddle/fluid/operators/tensorrt_engine_op.cc +++ b/paddle/fluid/operators/tensorrt_engine_op.cc @@ -18,9 +18,9 @@ #include #include "paddle/fluid/framework/op_registry.h" +#include "paddle/fluid/inference/legacy/utils/singleton.h" #include "paddle/fluid/inference/tensorrt/convert/op_converter.h" #include "paddle/fluid/inference/tensorrt/engine.h" -#include "paddle/fluid/inference/utils/singleton.h" #include "paddle/fluid/operators/tensorrt_engine_op.h" namespace paddle { diff --git a/paddle/fluid/platform/float16_test.cu b/paddle/fluid/platform/float16_test.cu index 577fc24ceb..1b9cf9b5d3 100644 --- a/paddle/fluid/platform/float16_test.cu +++ b/paddle/fluid/platform/float16_test.cu @@ -15,7 +15,7 @@ limitations under the License. */ #include "paddle/fluid/framework/lod_tensor.h" #include "paddle/fluid/framework/tensor_util.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #define ARITHMETIC_KERNEL(op_type, sign) \ __global__ void op_type(const half* in1, const half* in2, half* out) { \ diff --git a/paddle/legacy/api/Paddle.i b/paddle/legacy/api/Paddle.i index e6165fb106..7a1456a5c0 100644 --- a/paddle/legacy/api/Paddle.i +++ b/paddle/legacy/api/Paddle.i @@ -198,5 +198,5 @@ namespace std { %ignore ParameterConfigPrivate; %ignore OptimizationConfigPrivate; %ignore ParameterTraverseCallbackPrivate; -%include "utils/GlobalConstants.h" +%include "legacy/utils/GlobalConstants.h" %include "legacy/api/PaddleAPI.h" diff --git a/paddle/legacy/api/PaddleAPI.h b/paddle/legacy/api/PaddleAPI.h index ba3e815498..475984a3d5 100644 --- a/paddle/legacy/api/PaddleAPI.h +++ b/paddle/legacy/api/PaddleAPI.h @@ -20,8 +20,8 @@ limitations under the License. */ #include #include #include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" -#include "paddle/utils/Common.h" -#include "paddle/utils/GlobalConstants.h" +#include "paddle/legacy/utils/Common.h" +#include "paddle/legacy/utils/GlobalConstants.h" /// Import PaddlePaddle's enumeration into global namespace. using namespace paddle::enumeration_wrapper; // NOLINT diff --git a/paddle/legacy/api/SequenceGenerator.cpp b/paddle/legacy/api/SequenceGenerator.cpp index 96e075df50..2a73228f6d 100644 --- a/paddle/legacy/api/SequenceGenerator.cpp +++ b/paddle/legacy/api/SequenceGenerator.cpp @@ -19,7 +19,7 @@ limitations under the License. */ #include "PaddleAPI.h" #include "paddle/legacy/gserver/gradientmachines/GradientMachine.h" #include "paddle/legacy/parameter/Argument.h" -#include "paddle/utils/Flags.h" +#include "paddle/legacy/utils/Flags.h" // used to represent partial sequence struct Path { diff --git a/paddle/legacy/api/Trainer.cpp b/paddle/legacy/api/Trainer.cpp index 8b39b962ee..e7c607201b 100644 --- a/paddle/legacy/api/Trainer.cpp +++ b/paddle/legacy/api/Trainer.cpp @@ -23,7 +23,7 @@ limitations under the License. */ #include "paddle/legacy/trainer/ParamUtil.h" #include "paddle/legacy/trainer/Trainer.h" #include "paddle/legacy/trainer/TrainerInternal.h" -#include "paddle/utils/Flags.h" +#include "paddle/legacy/utils/Flags.h" using paddle::real; diff --git a/paddle/legacy/api/Util.cpp b/paddle/legacy/api/Util.cpp index d98daadbde..b458c4d90e 100644 --- a/paddle/legacy/api/Util.cpp +++ b/paddle/legacy/api/Util.cpp @@ -15,10 +15,10 @@ limitations under the License. */ #include "PaddleAPI.h" #include "paddle/legacy/parameter/Parameter.h" -#include "paddle/utils/Common.h" -#include "paddle/utils/Flags.h" -#include "paddle/utils/PythonUtil.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Common.h" +#include "paddle/legacy/utils/Flags.h" +#include "paddle/legacy/utils/PythonUtil.h" +#include "paddle/legacy/utils/Util.h" #include #include diff --git a/paddle/legacy/capi/Main.cpp b/paddle/legacy/capi/Main.cpp index fd9275058a..17d8f00a88 100644 --- a/paddle/legacy/capi/Main.cpp +++ b/paddle/legacy/capi/Main.cpp @@ -19,8 +19,8 @@ limitations under the License. */ #include "capi_private.h" #include "main.h" #include "paddle/legacy/trainer/TrainerConfigHelper.h" -#include "paddle/utils/Excepts.h" -#include "paddle/utils/PythonUtil.h" +#include "paddle/legacy/utils/Excepts.h" +#include "paddle/legacy/utils/PythonUtil.h" static void initPaddle(int argc, char** argv) { paddle::initMain(argc, argv); diff --git a/paddle/legacy/capi/tests/test_Arguments.cpp b/paddle/legacy/capi/tests/test_Arguments.cpp index bb08adf716..6fb379719d 100644 --- a/paddle/legacy/capi/tests/test_Arguments.cpp +++ b/paddle/legacy/capi/tests/test_Arguments.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include #include "capi.h" #include "gtest/gtest.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" static std::vector randomBuffer(size_t bufSize) { auto& eng = paddle::ThreadLocalRandomEngine::get(); diff --git a/paddle/legacy/capi/tests/test_GradientMachine.cpp b/paddle/legacy/capi/tests/test_GradientMachine.cpp index b86d2f2049..5d1b7cb6ca 100644 --- a/paddle/legacy/capi/tests/test_GradientMachine.cpp +++ b/paddle/legacy/capi/tests/test_GradientMachine.cpp @@ -19,7 +19,7 @@ limitations under the License. */ #include #include #include "capi.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" static std::vector randomBuffer(size_t bufSize) { auto& eng = paddle::ThreadLocalRandomEngine::get(); diff --git a/paddle/legacy/cuda/include/hl_base.h b/paddle/legacy/cuda/include/hl_base.h index 8451d2546d..bfe812a438 100644 --- a/paddle/legacy/cuda/include/hl_base.h +++ b/paddle/legacy/cuda/include/hl_base.h @@ -208,7 +208,7 @@ typedef struct { #include #include "paddle/legacy/cuda/include/hl_cuda.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" extern __thread bool g_sync_flag; extern __thread cudaStream_t default_stream; diff --git a/paddle/legacy/cuda/include/hl_gpu_gru.cuh b/paddle/legacy/cuda/include/hl_gpu_gru.cuh index 9fcad2c3bc..8d299572c7 100644 --- a/paddle/legacy/cuda/include/hl_gpu_gru.cuh +++ b/paddle/legacy/cuda/include/hl_gpu_gru.cuh @@ -18,7 +18,7 @@ limitations under the License. */ #ifdef __NVCC__ -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" /* * threads(framePerBlock, batchPerBlock) diff --git a/paddle/legacy/cuda/include/hl_gpu_lstm.cuh b/paddle/legacy/cuda/include/hl_gpu_lstm.cuh index 92517a44d2..aae011b838 100644 --- a/paddle/legacy/cuda/include/hl_gpu_lstm.cuh +++ b/paddle/legacy/cuda/include/hl_gpu_lstm.cuh @@ -18,7 +18,7 @@ limitations under the License. */ #ifdef __NVCC__ -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #include "hl_device_functions.cuh" /* diff --git a/paddle/legacy/cuda/include/hl_gpu_matrix_kernel.cuh b/paddle/legacy/cuda/include/hl_gpu_matrix_kernel.cuh index 0db023ce37..6177d23657 100644 --- a/paddle/legacy/cuda/include/hl_gpu_matrix_kernel.cuh +++ b/paddle/legacy/cuda/include/hl_gpu_matrix_kernel.cuh @@ -18,7 +18,7 @@ limitations under the License. */ #define HL_GPU_MATRIX_KERNEL_CUH_ #include -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #include "hl_base.h" #ifdef __NVCC__ diff --git a/paddle/legacy/cuda/src/hl_cuda_aggregate.cu b/paddle/legacy/cuda/src/hl_cuda_aggregate.cu index d30c264127..9831c5ecc3 100644 --- a/paddle/legacy/cuda/src/hl_cuda_aggregate.cu +++ b/paddle/legacy/cuda/src/hl_cuda_aggregate.cu @@ -18,7 +18,7 @@ limitations under the License. */ #include "hl_cuda.ph" #include "hl_matrix_base.cuh" #include "hl_thread.ph" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" /** * @brief matrix row operator. diff --git a/paddle/legacy/cuda/src/hl_cuda_cublas.cc b/paddle/legacy/cuda/src/hl_cuda_cublas.cc index 975df42878..283b8b6e9c 100644 --- a/paddle/legacy/cuda/src/hl_cuda_cublas.cc +++ b/paddle/legacy/cuda/src/hl_cuda_cublas.cc @@ -16,8 +16,8 @@ limitations under the License. */ #include #include "hl_cuda.h" #include "hl_thread.ph" -#include "paddle/utils/DynamicLoader.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/DynamicLoader.h" +#include "paddle/legacy/utils/Logging.h" namespace dynload { diff --git a/paddle/legacy/cuda/src/hl_cuda_cudnn.cc b/paddle/legacy/cuda/src/hl_cuda_cudnn.cc index dfa935dcff..b0ac5aaac2 100644 --- a/paddle/legacy/cuda/src/hl_cuda_cudnn.cc +++ b/paddle/legacy/cuda/src/hl_cuda_cudnn.cc @@ -17,8 +17,8 @@ limitations under the License. */ #include #include "hl_cuda_cudnn.ph" #include "hl_thread.ph" -#include "paddle/utils/DynamicLoader.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/DynamicLoader.h" +#include "paddle/legacy/utils/Logging.h" DEFINE_int32(cudnn_conv_workspace_limit_in_mb, 4096, diff --git a/paddle/legacy/cuda/src/hl_cuda_device.cc b/paddle/legacy/cuda/src/hl_cuda_device.cc index 3025aa4852..501e3b0f3b 100644 --- a/paddle/legacy/cuda/src/hl_cuda_device.cc +++ b/paddle/legacy/cuda/src/hl_cuda_device.cc @@ -23,8 +23,8 @@ limitations under the License. */ #include #include "hl_cuda.ph" #include "hl_thread.ph" -#include "paddle/utils/Logging.h" -#include "paddle/utils/DynamicLoader.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/DynamicLoader.h" // clang-format on namespace dynload { diff --git a/paddle/legacy/cuda/src/hl_cuda_lstm.cu b/paddle/legacy/cuda/src/hl_cuda_lstm.cu index b8c4e433a1..9ac564fd25 100644 --- a/paddle/legacy/cuda/src/hl_cuda_lstm.cu +++ b/paddle/legacy/cuda/src/hl_cuda_lstm.cu @@ -16,7 +16,7 @@ limitations under the License. */ #include "hl_base.h" #include "hl_cuda_cublas.h" #include "hl_device_functions.cuh" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" typedef hppl::Active::forward t_forward; typedef hppl::Active::backward t_backward; diff --git a/paddle/legacy/cuda/src/hl_cuda_matrix.cu b/paddle/legacy/cuda/src/hl_cuda_matrix.cu index 3e17c8090c..6fe460026b 100644 --- a/paddle/legacy/cuda/src/hl_cuda_matrix.cu +++ b/paddle/legacy/cuda/src/hl_cuda_matrix.cu @@ -20,7 +20,7 @@ limitations under the License. */ #include "hl_matrix_ops.cuh" #include "hl_sequence.h" #include "hl_sparse.ph" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" DEFINE_MATRIX_UNARY_OP(Zero, a = 0); DEFINE_MATRIX_TERNARY_PARAMETER_OP(_add, TWO_PARAMETER, c = p1 * a + p2 * b); diff --git a/paddle/legacy/cuda/src/hl_cuda_sequence.cu b/paddle/legacy/cuda/src/hl_cuda_sequence.cu index a3a5f038de..1d772b5ce2 100644 --- a/paddle/legacy/cuda/src/hl_cuda_sequence.cu +++ b/paddle/legacy/cuda/src/hl_cuda_sequence.cu @@ -14,7 +14,7 @@ limitations under the License. */ #include "hl_base.h" #include "hl_device_functions.cuh" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" __global__ void KeMaxSequenceForward(real* input, const int* sequence, diff --git a/paddle/legacy/cuda/src/hl_cuda_sparse.cu b/paddle/legacy/cuda/src/hl_cuda_sparse.cu index 432041fed5..8065a6f9f6 100644 --- a/paddle/legacy/cuda/src/hl_cuda_sparse.cu +++ b/paddle/legacy/cuda/src/hl_cuda_sparse.cu @@ -18,7 +18,7 @@ limitations under the License. */ #include "hl_matrix_ops.cuh" #include "hl_sparse.h" #include "hl_sparse.ph" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" DEFINE_MATRIX_UNARY_PARAMETER_OP(mul_scalar, ONE_PARAMETER, a = a * p); DEFINE_MATRIX_UNARY_OP(Zero, a = 0); diff --git a/paddle/legacy/cuda/src/hl_table_apply.cu b/paddle/legacy/cuda/src/hl_table_apply.cu index efa4bef02b..7411ae35d3 100644 --- a/paddle/legacy/cuda/src/hl_table_apply.cu +++ b/paddle/legacy/cuda/src/hl_table_apply.cu @@ -15,7 +15,7 @@ limitations under the License. */ #include "hl_base.h" #include "hl_cuda.h" #include "hl_device_functions.cuh" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" template __global__ void KeMatrixAddRows(real* output, diff --git a/paddle/legacy/cuda/src/hl_top_k.cu b/paddle/legacy/cuda/src/hl_top_k.cu index 14b9a7f50f..041ac419f5 100644 --- a/paddle/legacy/cuda/src/hl_top_k.cu +++ b/paddle/legacy/cuda/src/hl_top_k.cu @@ -15,7 +15,7 @@ limitations under the License. */ #include "paddle/legacy/cuda/include/hl_base.h" #include "paddle/legacy/cuda/include/hl_sparse.ph" #include "paddle/legacy/cuda/include/hl_top_k.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" // using namespace hppl; diff --git a/paddle/legacy/cuda/src/hl_warpctc_wrap.cc b/paddle/legacy/cuda/src/hl_warpctc_wrap.cc index 5111bceaff..31a8652f1f 100644 --- a/paddle/legacy/cuda/src/hl_warpctc_wrap.cc +++ b/paddle/legacy/cuda/src/hl_warpctc_wrap.cc @@ -14,8 +14,8 @@ limitations under the License. */ #include "hl_warpctc_wrap.h" #include -#include "paddle/utils/DynamicLoader.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/DynamicLoader.h" +#include "paddle/legacy/utils/Logging.h" namespace dynload { diff --git a/paddle/legacy/function/Function.h b/paddle/legacy/function/Function.h index cc6f999a0e..bc5ef7e6f2 100644 --- a/paddle/legacy/function/Function.h +++ b/paddle/legacy/function/Function.h @@ -18,9 +18,9 @@ limitations under the License. */ #include #include "BufferArg.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Any.h" -#include "paddle/utils/ClassRegistrar.h" -#include "paddle/utils/Error.h" +#include "paddle/legacy/utils/Any.h" +#include "paddle/legacy/utils/ClassRegistrar.h" +#include "paddle/legacy/utils/Error.h" namespace paddle { diff --git a/paddle/legacy/function/MulOp.cpp b/paddle/legacy/function/MulOp.cpp index 1401031752..750978fc90 100644 --- a/paddle/legacy/function/MulOp.cpp +++ b/paddle/legacy/function/MulOp.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "MulOp.h" #include "GemmFunctor.h" #include "paddle/legacy/math/SIMDFunctions.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" namespace { inline void vecAddTo(real* a, const real* b, real scaleB, size_t len) { diff --git a/paddle/legacy/gserver/activations/ActivationFunction.cpp b/paddle/legacy/gserver/activations/ActivationFunction.cpp index 69f34db5ac..ae07c7e6d7 100644 --- a/paddle/legacy/gserver/activations/ActivationFunction.cpp +++ b/paddle/legacy/gserver/activations/ActivationFunction.cpp @@ -21,8 +21,8 @@ limitations under the License. */ #include #include #include "paddle/legacy/parameter/Argument.h" -#include "paddle/utils/ClassRegistrar.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/ClassRegistrar.h" +#include "paddle/legacy/utils/Logging.h" #ifdef PADDLE_WITH_MKLDNN #include "MKLDNNActivation.h" diff --git a/paddle/legacy/gserver/activations/ActivationFunction.h b/paddle/legacy/gserver/activations/ActivationFunction.h index 8e2e144769..8bc5b0f529 100644 --- a/paddle/legacy/gserver/activations/ActivationFunction.h +++ b/paddle/legacy/gserver/activations/ActivationFunction.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include #include -#include "paddle/utils/Error.h" +#include "paddle/legacy/utils/Error.h" namespace paddle { diff --git a/paddle/legacy/gserver/activations/MKLDNNActivation.cpp b/paddle/legacy/gserver/activations/MKLDNNActivation.cpp index 672444c656..2eed7af70a 100644 --- a/paddle/legacy/gserver/activations/MKLDNNActivation.cpp +++ b/paddle/legacy/gserver/activations/MKLDNNActivation.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "MKLDNNActivation.h" #include "mkldnn.hpp" -#include "paddle/utils/ClassRegistrar.h" +#include "paddle/legacy/utils/ClassRegistrar.h" namespace paddle { diff --git a/paddle/legacy/gserver/dataproviders/DataProvider.cpp b/paddle/legacy/gserver/dataproviders/DataProvider.cpp index 580cf821c6..b67af8a326 100644 --- a/paddle/legacy/gserver/dataproviders/DataProvider.cpp +++ b/paddle/legacy/gserver/dataproviders/DataProvider.cpp @@ -16,10 +16,10 @@ limitations under the License. */ #include #include -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/StringUtil.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/StringUtil.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/gserver/dataproviders/DataProvider.h b/paddle/legacy/gserver/dataproviders/DataProvider.h index b6f74afed0..c2e1c5fdd6 100644 --- a/paddle/legacy/gserver/dataproviders/DataProvider.h +++ b/paddle/legacy/gserver/dataproviders/DataProvider.h @@ -29,13 +29,13 @@ limitations under the License. */ #include "paddle/legacy/math/SparseMatrix.h" #include "paddle/legacy/math/Vector.h" #include "paddle/legacy/parameter/Argument.h" -#include "paddle/utils/ClassRegistrar.h" -#include "paddle/utils/Common.h" -#include "paddle/utils/Locks.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Queue.h" -#include "paddle/utils/ThreadLocal.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/ClassRegistrar.h" +#include "paddle/legacy/utils/Common.h" +#include "paddle/legacy/utils/Locks.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Queue.h" +#include "paddle/legacy/utils/ThreadLocal.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/dataproviders/MultiDataProvider.cpp b/paddle/legacy/gserver/dataproviders/MultiDataProvider.cpp index f71947ef39..e5fc6d8a88 100644 --- a/paddle/legacy/gserver/dataproviders/MultiDataProvider.cpp +++ b/paddle/legacy/gserver/dataproviders/MultiDataProvider.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "MultiDataProvider.h" #include -#include "paddle/utils/Logging.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/gserver/dataproviders/PyDataProvider.cpp b/paddle/legacy/gserver/dataproviders/PyDataProvider.cpp index dadf1b4cf2..0827bd39d4 100644 --- a/paddle/legacy/gserver/dataproviders/PyDataProvider.cpp +++ b/paddle/legacy/gserver/dataproviders/PyDataProvider.cpp @@ -13,9 +13,9 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "PyDataProvider.h" -#include "paddle/utils/Common.h" -#include "paddle/utils/PythonUtil.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Common.h" +#include "paddle/legacy/utils/PythonUtil.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/gserver/dataproviders/PyDataProvider.h b/paddle/legacy/gserver/dataproviders/PyDataProvider.h index da50dd4e2e..4b8bea04a1 100644 --- a/paddle/legacy/gserver/dataproviders/PyDataProvider.h +++ b/paddle/legacy/gserver/dataproviders/PyDataProvider.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once -#include +#include #include "DataFormat.pb.h" #include "DataProvider.h" diff --git a/paddle/legacy/gserver/dataproviders/PyDataProvider2.cpp b/paddle/legacy/gserver/dataproviders/PyDataProvider2.cpp index 54ee091e8f..8e931e4061 100644 --- a/paddle/legacy/gserver/dataproviders/PyDataProvider2.cpp +++ b/paddle/legacy/gserver/dataproviders/PyDataProvider2.cpp @@ -25,9 +25,9 @@ limitations under the License. */ #include "DataProvider.h" -#include "paddle/utils/Locks.h" -#include "paddle/utils/PythonUtil.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Locks.h" +#include "paddle/legacy/utils/PythonUtil.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/evaluators/CTCErrorEvaluator.cpp b/paddle/legacy/gserver/evaluators/CTCErrorEvaluator.cpp index 04335dc7cd..c145adda5e 100644 --- a/paddle/legacy/gserver/evaluators/CTCErrorEvaluator.cpp +++ b/paddle/legacy/gserver/evaluators/CTCErrorEvaluator.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "Evaluator.h" #include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" -#include "paddle/utils/StringUtil.h" +#include "paddle/legacy/utils/StringUtil.h" namespace paddle { diff --git a/paddle/legacy/gserver/evaluators/ChunkEvaluator.cpp b/paddle/legacy/gserver/evaluators/ChunkEvaluator.cpp index ea5c609a63..0ff3f2fa8c 100644 --- a/paddle/legacy/gserver/evaluators/ChunkEvaluator.cpp +++ b/paddle/legacy/gserver/evaluators/ChunkEvaluator.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include #include "paddle/legacy/math/Vector.h" -#include "paddle/utils/StringUtil.h" +#include "paddle/legacy/utils/StringUtil.h" #include "Evaluator.h" diff --git a/paddle/legacy/gserver/evaluators/Evaluator.cpp b/paddle/legacy/gserver/evaluators/Evaluator.cpp index 436c33e43b..a956f40d02 100644 --- a/paddle/legacy/gserver/evaluators/Evaluator.cpp +++ b/paddle/legacy/gserver/evaluators/Evaluator.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "paddle/legacy/gserver/evaluators/Evaluator.h" #include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/StringUtil.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/StringUtil.h" DECLARE_int32(trainer_id); diff --git a/paddle/legacy/gserver/evaluators/Evaluator.h b/paddle/legacy/gserver/evaluators/Evaluator.h index 90989bb0b6..b3462819b1 100644 --- a/paddle/legacy/gserver/evaluators/Evaluator.h +++ b/paddle/legacy/gserver/evaluators/Evaluator.h @@ -18,8 +18,8 @@ limitations under the License. */ #include "ModelConfig.pb.h" #include "paddle/legacy/parameter/Argument.h" #include "paddle/legacy/pserver/ParameterClient2.h" -#include "paddle/utils/ClassRegistrar.h" -#include "paddle/utils/Error.h" +#include "paddle/legacy/utils/ClassRegistrar.h" +#include "paddle/legacy/utils/Error.h" namespace paddle { diff --git a/paddle/legacy/gserver/gradientmachines/GradientMachine.cpp b/paddle/legacy/gserver/gradientmachines/GradientMachine.cpp index 654024e8a4..1c4034d8bb 100644 --- a/paddle/legacy/gserver/gradientmachines/GradientMachine.cpp +++ b/paddle/legacy/gserver/gradientmachines/GradientMachine.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "GradientMachine.h" #include -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #include "NeuralNetwork.h" #include "hl_gpu.h" diff --git a/paddle/legacy/gserver/gradientmachines/GradientMachine.h b/paddle/legacy/gserver/gradientmachines/GradientMachine.h index 48f5141ce1..d4f754a9f4 100644 --- a/paddle/legacy/gserver/gradientmachines/GradientMachine.h +++ b/paddle/legacy/gserver/gradientmachines/GradientMachine.h @@ -24,7 +24,7 @@ limitations under the License. */ #include "paddle/legacy/math/Matrix.h" #include "paddle/legacy/parameter/Parameter.h" #include "paddle/legacy/parameter/ParameterUpdaterBase.h" -#include "paddle/utils/Thread.h" +#include "paddle/legacy/utils/Thread.h" #ifndef PADDLE_MOBILE_INFERENCE #include "paddle/legacy/gserver/evaluators/Evaluator.h" diff --git a/paddle/legacy/gserver/gradientmachines/MultiGradientMachine.cpp b/paddle/legacy/gserver/gradientmachines/MultiGradientMachine.cpp index b8d4d28f0f..637686e443 100644 --- a/paddle/legacy/gserver/gradientmachines/MultiGradientMachine.cpp +++ b/paddle/legacy/gserver/gradientmachines/MultiGradientMachine.cpp @@ -14,9 +14,9 @@ limitations under the License. */ #include "MultiGradientMachine.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" #include "NeuralNetwork.h" #include "ParallelNeuralNetwork.h" diff --git a/paddle/legacy/gserver/gradientmachines/MultiGradientMachine.h b/paddle/legacy/gserver/gradientmachines/MultiGradientMachine.h index eff7d5284c..674acd4124 100644 --- a/paddle/legacy/gserver/gradientmachines/MultiGradientMachine.h +++ b/paddle/legacy/gserver/gradientmachines/MultiGradientMachine.h @@ -19,8 +19,8 @@ limitations under the License. */ #include "GradientMachine.h" #include "hl_gpu.h" -#include "paddle/utils/Locks.h" -#include "paddle/utils/Queue.h" +#include "paddle/legacy/utils/Locks.h" +#include "paddle/legacy/utils/Queue.h" namespace paddle { diff --git a/paddle/legacy/gserver/gradientmachines/MultiNetwork.cpp b/paddle/legacy/gserver/gradientmachines/MultiNetwork.cpp index 5f3d09dda2..1245c44103 100644 --- a/paddle/legacy/gserver/gradientmachines/MultiNetwork.cpp +++ b/paddle/legacy/gserver/gradientmachines/MultiNetwork.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include "paddle/utils/Stat.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/Util.h" #include "MultiNetwork.h" diff --git a/paddle/legacy/gserver/gradientmachines/MultiNetwork.h b/paddle/legacy/gserver/gradientmachines/MultiNetwork.h index 495d559201..afe15cb020 100644 --- a/paddle/legacy/gserver/gradientmachines/MultiNetwork.h +++ b/paddle/legacy/gserver/gradientmachines/MultiNetwork.h @@ -17,7 +17,7 @@ limitations under the License. */ #include "GradientMachine.h" #include "NeuralNetwork.h" -#include "paddle/utils/Locks.h" +#include "paddle/legacy/utils/Locks.h" namespace paddle { diff --git a/paddle/legacy/gserver/gradientmachines/NeuralNetwork.cpp b/paddle/legacy/gserver/gradientmachines/NeuralNetwork.cpp index 339550c458..0f8048152f 100644 --- a/paddle/legacy/gserver/gradientmachines/NeuralNetwork.cpp +++ b/paddle/legacy/gserver/gradientmachines/NeuralNetwork.cpp @@ -12,13 +12,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include "NeuralNetwork.h" #include "hl_gpu.h" -#include "paddle/utils/CustomStackTrace.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/CustomStackTrace.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" #ifdef PADDLE_WITH_MKLDNN #include "paddle/legacy/gserver/layers/MKLDNNLayer.h" diff --git a/paddle/legacy/gserver/gradientmachines/NeuralNetwork.h b/paddle/legacy/gserver/gradientmachines/NeuralNetwork.h index 5a0909b99b..566157c899 100644 --- a/paddle/legacy/gserver/gradientmachines/NeuralNetwork.h +++ b/paddle/legacy/gserver/gradientmachines/NeuralNetwork.h @@ -25,7 +25,7 @@ limitations under the License. */ #include "paddle/legacy/gserver/layers/DataLayer.h" #include "paddle/legacy/gserver/layers/Layer.h" #include "paddle/legacy/parameter/Parameter.h" -#include "paddle/utils/ClassRegistrar.h" +#include "paddle/legacy/utils/ClassRegistrar.h" namespace paddle { /* diff --git a/paddle/legacy/gserver/gradientmachines/ParallelNeuralNetwork.cpp b/paddle/legacy/gserver/gradientmachines/ParallelNeuralNetwork.cpp index 85cfc59fbe..450514ca88 100644 --- a/paddle/legacy/gserver/gradientmachines/ParallelNeuralNetwork.cpp +++ b/paddle/legacy/gserver/gradientmachines/ParallelNeuralNetwork.cpp @@ -12,8 +12,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/Stat.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/Util.h" #include "ParallelNeuralNetwork.h" diff --git a/paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.cpp b/paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.cpp index e749cf61f3..e49f042404 100644 --- a/paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.cpp +++ b/paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.cpp @@ -20,9 +20,9 @@ limitations under the License. */ #include #include "NeuralNetwork.h" #include "paddle/legacy/gserver/layers/AgentLayer.h" -#include "paddle/utils/Flags.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Flags.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/Util.h" DEFINE_string(diy_beam_search_prob_so, "", "the diy beam search cost so"); diff --git a/paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.h b/paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.h index 7e943cebd3..0a13d4f6f8 100644 --- a/paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.h +++ b/paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.h @@ -18,7 +18,7 @@ limitations under the License. */ #include "GradientMachine.h" #include "NeuralNetwork.h" -#include "paddle/utils/Locks.h" +#include "paddle/legacy/utils/Locks.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/AddtoLayer.cpp b/paddle/legacy/gserver/layers/AddtoLayer.cpp index 75e17f52df..39c5603d93 100644 --- a/paddle/legacy/gserver/layers/AddtoLayer.cpp +++ b/paddle/legacy/gserver/layers/AddtoLayer.cpp @@ -14,9 +14,9 @@ limitations under the License. */ #include "AddtoLayer.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/AddtoLayer.h b/paddle/legacy/gserver/layers/AddtoLayer.h index 1f948de475..ad3cefe1a4 100644 --- a/paddle/legacy/gserver/layers/AddtoLayer.h +++ b/paddle/legacy/gserver/layers/AddtoLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/AgentLayer.cpp b/paddle/legacy/gserver/layers/AgentLayer.cpp index e2f73f88f5..bae89b2fa3 100644 --- a/paddle/legacy/gserver/layers/AgentLayer.cpp +++ b/paddle/legacy/gserver/layers/AgentLayer.cpp @@ -14,9 +14,9 @@ limitations under the License. */ #include "AgentLayer.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/AgentLayer.h b/paddle/legacy/gserver/layers/AgentLayer.h index f506db2f2d..a05eac5e70 100644 --- a/paddle/legacy/gserver/layers/AgentLayer.h +++ b/paddle/legacy/gserver/layers/AgentLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/AverageLayer.cpp b/paddle/legacy/gserver/layers/AverageLayer.cpp index b3787b1448..0539da7937 100644 --- a/paddle/legacy/gserver/layers/AverageLayer.cpp +++ b/paddle/legacy/gserver/layers/AverageLayer.cpp @@ -14,9 +14,9 @@ limitations under the License. */ #include "AverageLayer.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/BatchNormBaseLayer.cpp b/paddle/legacy/gserver/layers/BatchNormBaseLayer.cpp index a3516f9423..4dcbd8dc27 100644 --- a/paddle/legacy/gserver/layers/BatchNormBaseLayer.cpp +++ b/paddle/legacy/gserver/layers/BatchNormBaseLayer.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "BatchNormBaseLayer.h" #include "BatchNormalizationLayer.h" #include "Layer.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" #ifdef PADDLE_WITH_CUDA #include "CudnnBatchNormLayer.h" #endif diff --git a/paddle/legacy/gserver/layers/BatchNormBaseLayer.h b/paddle/legacy/gserver/layers/BatchNormBaseLayer.h index 5a446c0843..8dc1d78837 100644 --- a/paddle/legacy/gserver/layers/BatchNormBaseLayer.h +++ b/paddle/legacy/gserver/layers/BatchNormBaseLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "Layer.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/BatchNormalizationLayer.cpp b/paddle/legacy/gserver/layers/BatchNormalizationLayer.cpp index 59831dd904..0297bd44c7 100644 --- a/paddle/legacy/gserver/layers/BatchNormalizationLayer.cpp +++ b/paddle/legacy/gserver/layers/BatchNormalizationLayer.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" #ifdef PADDLE_WITH_CUDA #include "hl_batch_transpose.h" #endif diff --git a/paddle/legacy/gserver/layers/BilinearInterpLayer.cpp b/paddle/legacy/gserver/layers/BilinearInterpLayer.cpp index 9775914596..a091f51bc2 100644 --- a/paddle/legacy/gserver/layers/BilinearInterpLayer.cpp +++ b/paddle/legacy/gserver/layers/BilinearInterpLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "BilinearInterpLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/BlockExpandLayer.cpp b/paddle/legacy/gserver/layers/BlockExpandLayer.cpp index 793d24e884..24b5af67d4 100644 --- a/paddle/legacy/gserver/layers/BlockExpandLayer.cpp +++ b/paddle/legacy/gserver/layers/BlockExpandLayer.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "BlockExpandLayer.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConcatenateLayer.cpp b/paddle/legacy/gserver/layers/ConcatenateLayer.cpp index e6de329ff3..ce3f2ca950 100644 --- a/paddle/legacy/gserver/layers/ConcatenateLayer.cpp +++ b/paddle/legacy/gserver/layers/ConcatenateLayer.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "Layer.h" #include "Projection.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ContextProjection.cpp b/paddle/legacy/gserver/layers/ContextProjection.cpp index 10c3cef0da..8bcf32663e 100644 --- a/paddle/legacy/gserver/layers/ContextProjection.cpp +++ b/paddle/legacy/gserver/layers/ContextProjection.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ContextProjection.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/Conv3DLayer.cpp b/paddle/legacy/gserver/layers/Conv3DLayer.cpp index b38de86b15..d072a74234 100644 --- a/paddle/legacy/gserver/layers/Conv3DLayer.cpp +++ b/paddle/legacy/gserver/layers/Conv3DLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Conv3DLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvBaseLayer.cpp b/paddle/legacy/gserver/layers/ConvBaseLayer.cpp index d8997527fb..76120915e4 100644 --- a/paddle/legacy/gserver/layers/ConvBaseLayer.cpp +++ b/paddle/legacy/gserver/layers/ConvBaseLayer.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "ConvBaseLayer.h" #include "paddle/legacy/math/MathUtils.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { bool ConvBaseLayer::init(const LayerMap& layerMap, diff --git a/paddle/legacy/gserver/layers/ConvBaseProjection.cpp b/paddle/legacy/gserver/layers/ConvBaseProjection.cpp index 39f433b78f..ff5d3412de 100644 --- a/paddle/legacy/gserver/layers/ConvBaseProjection.cpp +++ b/paddle/legacy/gserver/layers/ConvBaseProjection.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ConvBaseProjection.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvProjection.cpp b/paddle/legacy/gserver/layers/ConvProjection.cpp index f382e6cab1..b40cdac258 100644 --- a/paddle/legacy/gserver/layers/ConvProjection.cpp +++ b/paddle/legacy/gserver/layers/ConvProjection.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ConvProjection.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvShiftLayer.cpp b/paddle/legacy/gserver/layers/ConvShiftLayer.cpp index dda1a91e45..b7ecbe556c 100644 --- a/paddle/legacy/gserver/layers/ConvShiftLayer.cpp +++ b/paddle/legacy/gserver/layers/ConvShiftLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvTransProjection.cpp b/paddle/legacy/gserver/layers/ConvTransProjection.cpp index 242ce34a60..00e34c8f2d 100644 --- a/paddle/legacy/gserver/layers/ConvTransProjection.cpp +++ b/paddle/legacy/gserver/layers/ConvTransProjection.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ConvTransProjection.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ConvexCombinationLayer.cpp b/paddle/legacy/gserver/layers/ConvexCombinationLayer.cpp index 29a71fc1d9..c38ab251f1 100644 --- a/paddle/legacy/gserver/layers/ConvexCombinationLayer.cpp +++ b/paddle/legacy/gserver/layers/ConvexCombinationLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/CosSimLayer.cpp b/paddle/legacy/gserver/layers/CosSimLayer.cpp index 4e44a5e8df..ab8d7cc1f6 100644 --- a/paddle/legacy/gserver/layers/CosSimLayer.cpp +++ b/paddle/legacy/gserver/layers/CosSimLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "CosSimLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/CosSimLayer.h b/paddle/legacy/gserver/layers/CosSimLayer.h index 2e53de414d..b08e2c6a35 100644 --- a/paddle/legacy/gserver/layers/CosSimLayer.h +++ b/paddle/legacy/gserver/layers/CosSimLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/CosSimVecMatLayer.cpp b/paddle/legacy/gserver/layers/CosSimVecMatLayer.cpp index da3ddf11dc..03de0be815 100644 --- a/paddle/legacy/gserver/layers/CosSimVecMatLayer.cpp +++ b/paddle/legacy/gserver/layers/CosSimVecMatLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/CostLayer.cpp b/paddle/legacy/gserver/layers/CostLayer.cpp index 2c0762be25..18b5b77bde 100644 --- a/paddle/legacy/gserver/layers/CostLayer.cpp +++ b/paddle/legacy/gserver/layers/CostLayer.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include #include #include -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #include "paddle/legacy/math/SparseMatrix.h" diff --git a/paddle/legacy/gserver/layers/CropLayer.cpp b/paddle/legacy/gserver/layers/CropLayer.cpp index bc97ca2f9e..d891375ecc 100644 --- a/paddle/legacy/gserver/layers/CropLayer.cpp +++ b/paddle/legacy/gserver/layers/CropLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "CropLayer.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { REGISTER_LAYER(crop, CropLayer); diff --git a/paddle/legacy/gserver/layers/CudnnBatchNormLayer.cpp b/paddle/legacy/gserver/layers/CudnnBatchNormLayer.cpp index 3f4e17c018..051155e0d2 100644 --- a/paddle/legacy/gserver/layers/CudnnBatchNormLayer.cpp +++ b/paddle/legacy/gserver/layers/CudnnBatchNormLayer.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "CudnnBatchNormLayer.h" #include "Layer.h" #include "paddle/legacy/cuda/include/hl_batch_norm.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/CudnnBatchNormLayer.h b/paddle/legacy/gserver/layers/CudnnBatchNormLayer.h index 1bb4eff8d2..3b33b983b3 100644 --- a/paddle/legacy/gserver/layers/CudnnBatchNormLayer.h +++ b/paddle/legacy/gserver/layers/CudnnBatchNormLayer.h @@ -17,7 +17,7 @@ limitations under the License. */ #include #include "BatchNormBaseLayer.h" #include "Layer.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/CudnnConvBaseLayer.cpp b/paddle/legacy/gserver/layers/CudnnConvBaseLayer.cpp index 6d0a40a607..9353cca9c8 100644 --- a/paddle/legacy/gserver/layers/CudnnConvBaseLayer.cpp +++ b/paddle/legacy/gserver/layers/CudnnConvBaseLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "CudnnConvBaseLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { REGISTER_LAYER(cudnn_conv, CudnnConvBaseLayer); diff --git a/paddle/legacy/gserver/layers/CudnnPoolLayer.cpp b/paddle/legacy/gserver/layers/CudnnPoolLayer.cpp index 9739ed9da4..c790dfd71e 100644 --- a/paddle/legacy/gserver/layers/CudnnPoolLayer.cpp +++ b/paddle/legacy/gserver/layers/CudnnPoolLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "CudnnPoolLayer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/DataNormLayer.cpp b/paddle/legacy/gserver/layers/DataNormLayer.cpp index 86da4d6f95..6820dfa4d4 100644 --- a/paddle/legacy/gserver/layers/DataNormLayer.cpp +++ b/paddle/legacy/gserver/layers/DataNormLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "DataNormLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/DataNormLayer.h b/paddle/legacy/gserver/layers/DataNormLayer.h index 556d7f4d66..7bb8e92824 100644 --- a/paddle/legacy/gserver/layers/DataNormLayer.h +++ b/paddle/legacy/gserver/layers/DataNormLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/DeConv3DLayer.cpp b/paddle/legacy/gserver/layers/DeConv3DLayer.cpp index db6d6e073c..2cd635564c 100644 --- a/paddle/legacy/gserver/layers/DeConv3DLayer.cpp +++ b/paddle/legacy/gserver/layers/DeConv3DLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "DeConv3DLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/DotProdLayer.cpp b/paddle/legacy/gserver/layers/DotProdLayer.cpp index 445361b101..06060d93f7 100644 --- a/paddle/legacy/gserver/layers/DotProdLayer.cpp +++ b/paddle/legacy/gserver/layers/DotProdLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/EosIdCheckLayer.cpp b/paddle/legacy/gserver/layers/EosIdCheckLayer.cpp index 04400f2836..38671126c6 100644 --- a/paddle/legacy/gserver/layers/EosIdCheckLayer.cpp +++ b/paddle/legacy/gserver/layers/EosIdCheckLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Layer.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/ExpandConvLayer.cpp b/paddle/legacy/gserver/layers/ExpandConvLayer.cpp index 3a84786582..8a53db3806 100644 --- a/paddle/legacy/gserver/layers/ExpandConvLayer.cpp +++ b/paddle/legacy/gserver/layers/ExpandConvLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ExpandConvLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" DEFINE_bool(use_nnpack, false, diff --git a/paddle/legacy/gserver/layers/ExpandLayer.cpp b/paddle/legacy/gserver/layers/ExpandLayer.cpp index 6b57767540..074fbab8ef 100644 --- a/paddle/legacy/gserver/layers/ExpandLayer.cpp +++ b/paddle/legacy/gserver/layers/ExpandLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ExpandLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/FactorizationMachineLayer.cpp b/paddle/legacy/gserver/layers/FactorizationMachineLayer.cpp index ddd202e1c6..6cf269fa3f 100644 --- a/paddle/legacy/gserver/layers/FactorizationMachineLayer.cpp +++ b/paddle/legacy/gserver/layers/FactorizationMachineLayer.cpp @@ -16,8 +16,8 @@ limitations under the License. */ #include #include #include "paddle/legacy/math/SparseMatrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/FactorizationMachineLayer.h b/paddle/legacy/gserver/layers/FactorizationMachineLayer.h index 1070ebd097..fc015ed727 100644 --- a/paddle/legacy/gserver/layers/FactorizationMachineLayer.h +++ b/paddle/legacy/gserver/layers/FactorizationMachineLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/FeatureMapExpandLayer.cpp b/paddle/legacy/gserver/layers/FeatureMapExpandLayer.cpp index 417756a286..a3fe1433e4 100644 --- a/paddle/legacy/gserver/layers/FeatureMapExpandLayer.cpp +++ b/paddle/legacy/gserver/layers/FeatureMapExpandLayer.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/FullMatrixProjection.h b/paddle/legacy/gserver/layers/FullMatrixProjection.h index a27aa4a123..c33d02a3ae 100644 --- a/paddle/legacy/gserver/layers/FullMatrixProjection.h +++ b/paddle/legacy/gserver/layers/FullMatrixProjection.h @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #pragma once -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" #include "Projection.h" diff --git a/paddle/legacy/gserver/layers/FullyConnectedLayer.cpp b/paddle/legacy/gserver/layers/FullyConnectedLayer.cpp index 0ffb4876f8..07f4dfbe39 100644 --- a/paddle/legacy/gserver/layers/FullyConnectedLayer.cpp +++ b/paddle/legacy/gserver/layers/FullyConnectedLayer.cpp @@ -16,8 +16,8 @@ limitations under the License. */ #include #include #include "paddle/legacy/math/SparseMatrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/FullyConnectedLayer.h b/paddle/legacy/gserver/layers/FullyConnectedLayer.h index a8a1c54e55..7e29cac043 100644 --- a/paddle/legacy/gserver/layers/FullyConnectedLayer.h +++ b/paddle/legacy/gserver/layers/FullyConnectedLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/GatedRecurrentLayer.cpp b/paddle/legacy/gserver/layers/GatedRecurrentLayer.cpp index 9d38849fdf..bdcd445cb4 100644 --- a/paddle/legacy/gserver/layers/GatedRecurrentLayer.cpp +++ b/paddle/legacy/gserver/layers/GatedRecurrentLayer.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "GatedRecurrentLayer.h" #include "Layer.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/GruCompute.cpp b/paddle/legacy/gserver/layers/GruCompute.cpp index d50c959e43..adad6285b7 100644 --- a/paddle/legacy/gserver/layers/GruCompute.cpp +++ b/paddle/legacy/gserver/layers/GruCompute.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "GruCompute.h" #include "hl_recurrent_apply.cuh" #include "paddle/legacy/function/GruFunctor.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/GruCompute.h b/paddle/legacy/gserver/layers/GruCompute.h index 50006325ce..6feea7aca8 100644 --- a/paddle/legacy/gserver/layers/GruCompute.h +++ b/paddle/legacy/gserver/layers/GruCompute.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "ModelConfig.pb.h" #include "hl_gpu.h" -#include "paddle/utils/Common.h" +#include "paddle/legacy/utils/Common.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/GruStepLayer.cpp b/paddle/legacy/gserver/layers/GruStepLayer.cpp index 114f287411..2480e42d68 100644 --- a/paddle/legacy/gserver/layers/GruStepLayer.cpp +++ b/paddle/legacy/gserver/layers/GruStepLayer.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "GruCompute.h" #include "Layer.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/HierarchicalSigmoidLayer.cpp b/paddle/legacy/gserver/layers/HierarchicalSigmoidLayer.cpp index 3e720f179e..3449599409 100644 --- a/paddle/legacy/gserver/layers/HierarchicalSigmoidLayer.cpp +++ b/paddle/legacy/gserver/layers/HierarchicalSigmoidLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "HierarchicalSigmoidLayer.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/IdentityProjection.cpp b/paddle/legacy/gserver/layers/IdentityProjection.cpp index 34e9eb9016..f707642e09 100644 --- a/paddle/legacy/gserver/layers/IdentityProjection.cpp +++ b/paddle/legacy/gserver/layers/IdentityProjection.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Projection.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/InterpolationLayer.cpp b/paddle/legacy/gserver/layers/InterpolationLayer.cpp index aabfdc55ba..ed2294e8a3 100644 --- a/paddle/legacy/gserver/layers/InterpolationLayer.cpp +++ b/paddle/legacy/gserver/layers/InterpolationLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/L2DistanceLayer.cpp b/paddle/legacy/gserver/layers/L2DistanceLayer.cpp index c8cca3762c..a3e627e570 100644 --- a/paddle/legacy/gserver/layers/L2DistanceLayer.cpp +++ b/paddle/legacy/gserver/layers/L2DistanceLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "L2DistanceLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/Layer.cpp b/paddle/legacy/gserver/layers/Layer.cpp index f580b8e697..890d33552d 100644 --- a/paddle/legacy/gserver/layers/Layer.cpp +++ b/paddle/legacy/gserver/layers/Layer.cpp @@ -12,12 +12,12 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include "CostLayer.h" #include "paddle/legacy/math/SparseMatrix.h" -#include "paddle/utils/Error.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Error.h" +#include "paddle/legacy/utils/Logging.h" #ifndef PADDLE_MOBILE_INFERENCE #include "ValidationLayer.h" diff --git a/paddle/legacy/gserver/layers/Layer.h b/paddle/legacy/gserver/layers/Layer.h index 65ec3bd03f..a7ff76dece 100644 --- a/paddle/legacy/gserver/layers/Layer.h +++ b/paddle/legacy/gserver/layers/Layer.h @@ -23,8 +23,8 @@ limitations under the License. */ #include "paddle/legacy/parameter/Argument.h" #include "paddle/legacy/parameter/Parameter.h" #include "paddle/legacy/parameter/Weight.h" -#include "paddle/utils/ClassRegistrar.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/ClassRegistrar.h" +#include "paddle/legacy/utils/Util.h" /// Macro for registering a layer type. /// Example: REGISTER_LAYER(crf_error, CRFDecodingErrorLayer); diff --git a/paddle/legacy/gserver/layers/LstmCompute.cpp b/paddle/legacy/gserver/layers/LstmCompute.cpp index ea30f6d6b1..70f08e1d4e 100644 --- a/paddle/legacy/gserver/layers/LstmCompute.cpp +++ b/paddle/legacy/gserver/layers/LstmCompute.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "LstmCompute.h" #include "hl_recurrent_apply.cuh" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/LstmCompute.h b/paddle/legacy/gserver/layers/LstmCompute.h index 80fb01cd18..ac40c35ef1 100644 --- a/paddle/legacy/gserver/layers/LstmCompute.h +++ b/paddle/legacy/gserver/layers/LstmCompute.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "ModelConfig.pb.h" #include "hl_gpu.h" -#include "paddle/utils/Common.h" +#include "paddle/legacy/utils/Common.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/LstmLayer.cpp b/paddle/legacy/gserver/layers/LstmLayer.cpp index bb40ec0585..43a55d8d49 100644 --- a/paddle/legacy/gserver/layers/LstmLayer.cpp +++ b/paddle/legacy/gserver/layers/LstmLayer.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "LstmLayer.h" #include "paddle/legacy/math/BaseMatrix.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" DECLARE_bool(prev_batch_state); diff --git a/paddle/legacy/gserver/layers/LstmStepLayer.cpp b/paddle/legacy/gserver/layers/LstmStepLayer.cpp index c44768ddb2..f02f8ad62f 100644 --- a/paddle/legacy/gserver/layers/LstmStepLayer.cpp +++ b/paddle/legacy/gserver/layers/LstmStepLayer.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "Layer.h" #include "LstmCompute.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/MKLDNNConvLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNConvLayer.cpp index 01c20d240b..b47bf14821 100644 --- a/paddle/legacy/gserver/layers/MKLDNNConvLayer.cpp +++ b/paddle/legacy/gserver/layers/MKLDNNConvLayer.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "MKLDNNConvLayer.h" #include "paddle/legacy/math/MathUtils.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" using namespace mkldnn; // NOLINT typedef memory::format format; diff --git a/paddle/legacy/gserver/layers/MKLDNNFcLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNFcLayer.cpp index 0c7e6f16e2..f3747c7db8 100644 --- a/paddle/legacy/gserver/layers/MKLDNNFcLayer.cpp +++ b/paddle/legacy/gserver/layers/MKLDNNFcLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "MKLDNNFcLayer.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" using namespace mkldnn; // NOLINT typedef memory::format format; diff --git a/paddle/legacy/gserver/layers/MKLDNNLRNLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNLRNLayer.cpp index 88513ab8bc..739482348f 100644 --- a/paddle/legacy/gserver/layers/MKLDNNLRNLayer.cpp +++ b/paddle/legacy/gserver/layers/MKLDNNLRNLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "MKLDNNLRNLayer.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" using namespace mkldnn; // NOLINT typedef memory::format format; diff --git a/paddle/legacy/gserver/layers/MKLDNNLayer.h b/paddle/legacy/gserver/layers/MKLDNNLayer.h index b8f292684c..94dc8625f6 100644 --- a/paddle/legacy/gserver/layers/MKLDNNLayer.h +++ b/paddle/legacy/gserver/layers/MKLDNNLayer.h @@ -19,7 +19,7 @@ limitations under the License. */ #include "MKLDNNBase.h" #include "mkldnn.hpp" #include "paddle/legacy/math/MKLDNNMatrix.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" DECLARE_bool(use_mkldnn); diff --git a/paddle/legacy/gserver/layers/MKLDNNPoolLayer.cpp b/paddle/legacy/gserver/layers/MKLDNNPoolLayer.cpp index 99c419be88..83d980538d 100644 --- a/paddle/legacy/gserver/layers/MKLDNNPoolLayer.cpp +++ b/paddle/legacy/gserver/layers/MKLDNNPoolLayer.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "MKLDNNPoolLayer.h" #include "paddle/legacy/math/MathUtils.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" using namespace mkldnn; // NOLINT typedef memory::format format; diff --git a/paddle/legacy/gserver/layers/MaxLayer.cpp b/paddle/legacy/gserver/layers/MaxLayer.cpp index 7ee2e0dd94..b51251b663 100644 --- a/paddle/legacy/gserver/layers/MaxLayer.cpp +++ b/paddle/legacy/gserver/layers/MaxLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "MaxLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/MaxLayer.h b/paddle/legacy/gserver/layers/MaxLayer.h index 6b3491cde5..12d0128e39 100644 --- a/paddle/legacy/gserver/layers/MaxLayer.h +++ b/paddle/legacy/gserver/layers/MaxLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "SequencePoolLayer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/MaxPoolWithMaskLayer.cpp b/paddle/legacy/gserver/layers/MaxPoolWithMaskLayer.cpp index e594e22b5e..a1cc59a719 100644 --- a/paddle/legacy/gserver/layers/MaxPoolWithMaskLayer.cpp +++ b/paddle/legacy/gserver/layers/MaxPoolWithMaskLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "MaxPoolWithMaskLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/MixedLayer.cpp b/paddle/legacy/gserver/layers/MixedLayer.cpp index 7dcb30b98d..63e658c09c 100644 --- a/paddle/legacy/gserver/layers/MixedLayer.cpp +++ b/paddle/legacy/gserver/layers/MixedLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "MixedLayer.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/MultinomialSampler.h b/paddle/legacy/gserver/layers/MultinomialSampler.h index 8cbb229f15..ed44535241 100644 --- a/paddle/legacy/gserver/layers/MultinomialSampler.h +++ b/paddle/legacy/gserver/layers/MultinomialSampler.h @@ -16,7 +16,7 @@ limitations under the License. */ #include #include -#include "paddle/utils/Common.h" +#include "paddle/legacy/utils/Common.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/MultiplexLayer.cpp b/paddle/legacy/gserver/layers/MultiplexLayer.cpp index 54a554a1a9..9ca2b24175 100644 --- a/paddle/legacy/gserver/layers/MultiplexLayer.cpp +++ b/paddle/legacy/gserver/layers/MultiplexLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/NormLayer.cpp b/paddle/legacy/gserver/layers/NormLayer.cpp index 4678f6fa9a..443e26dbc8 100644 --- a/paddle/legacy/gserver/layers/NormLayer.cpp +++ b/paddle/legacy/gserver/layers/NormLayer.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "NormLayer.h" #include "NormProjectionLayer.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { REGISTER_LAYER_CREATE_FUNC(norm, &NormLayer::create); diff --git a/paddle/legacy/gserver/layers/NormProjectionLayer.cpp b/paddle/legacy/gserver/layers/NormProjectionLayer.cpp index 3013bbdbc7..72affaa1ce 100644 --- a/paddle/legacy/gserver/layers/NormProjectionLayer.cpp +++ b/paddle/legacy/gserver/layers/NormProjectionLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "NormProjectionLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { size_t CMRProjectionNormLayer::getSize() { diff --git a/paddle/legacy/gserver/layers/OuterProdLayer.cpp b/paddle/legacy/gserver/layers/OuterProdLayer.cpp index 7988560d5a..d0928be9d4 100644 --- a/paddle/legacy/gserver/layers/OuterProdLayer.cpp +++ b/paddle/legacy/gserver/layers/OuterProdLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/PadLayer.cpp b/paddle/legacy/gserver/layers/PadLayer.cpp index b1910e108b..7b92b3de2d 100644 --- a/paddle/legacy/gserver/layers/PadLayer.cpp +++ b/paddle/legacy/gserver/layers/PadLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "PadLayer.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ParameterReluLayer.cpp b/paddle/legacy/gserver/layers/ParameterReluLayer.cpp index 12d04fc1c3..23715d1975 100644 --- a/paddle/legacy/gserver/layers/ParameterReluLayer.cpp +++ b/paddle/legacy/gserver/layers/ParameterReluLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ParameterReluLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ParameterReluLayer.h b/paddle/legacy/gserver/layers/ParameterReluLayer.h index a4abd7af75..3aac4b42f6 100644 --- a/paddle/legacy/gserver/layers/ParameterReluLayer.h +++ b/paddle/legacy/gserver/layers/ParameterReluLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/Pool3DLayer.cpp b/paddle/legacy/gserver/layers/Pool3DLayer.cpp index 3ac9eb0d81..ae3f55c27f 100644 --- a/paddle/legacy/gserver/layers/Pool3DLayer.cpp +++ b/paddle/legacy/gserver/layers/Pool3DLayer.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "Pool3DLayer.h" #include "PoolProjectionLayer.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/PoolLayer.cpp b/paddle/legacy/gserver/layers/PoolLayer.cpp index ee589e6be5..df172d9575 100644 --- a/paddle/legacy/gserver/layers/PoolLayer.cpp +++ b/paddle/legacy/gserver/layers/PoolLayer.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "PoolLayer.h" #include "MaxPoolWithMaskLayer.h" #include "PoolProjectionLayer.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #ifdef PADDLE_WITH_CUDA #include "CudnnPoolLayer.h" #endif diff --git a/paddle/legacy/gserver/layers/PoolProjectionLayer.cpp b/paddle/legacy/gserver/layers/PoolProjectionLayer.cpp index 73d320e67e..e44b1d7ba1 100644 --- a/paddle/legacy/gserver/layers/PoolProjectionLayer.cpp +++ b/paddle/legacy/gserver/layers/PoolProjectionLayer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "PoolProjectionLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/PowerLayer.cpp b/paddle/legacy/gserver/layers/PowerLayer.cpp index 26a57fcfdd..5e94c64db6 100644 --- a/paddle/legacy/gserver/layers/PowerLayer.cpp +++ b/paddle/legacy/gserver/layers/PowerLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/RecurrentLayer.h b/paddle/legacy/gserver/layers/RecurrentLayer.h index 94e633e657..287ea27a09 100644 --- a/paddle/legacy/gserver/layers/RecurrentLayer.h +++ b/paddle/legacy/gserver/layers/RecurrentLayer.h @@ -15,7 +15,7 @@ limitations under the License. */ #include #include "Layer.h" #include "SequenceToBatch.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/RecurrentLayerGroup.cpp b/paddle/legacy/gserver/layers/RecurrentLayerGroup.cpp index 4f121bdb4a..3932124599 100644 --- a/paddle/legacy/gserver/layers/RecurrentLayerGroup.cpp +++ b/paddle/legacy/gserver/layers/RecurrentLayerGroup.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include "paddle/legacy/gserver/layers/Layer.h" #include "paddle/legacy/gserver/gradientmachines/RecurrentGradientMachine.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/RowConvLayer.cpp b/paddle/legacy/gserver/layers/RowConvLayer.cpp index 63b499e486..1961557dc2 100644 --- a/paddle/legacy/gserver/layers/RowConvLayer.cpp +++ b/paddle/legacy/gserver/layers/RowConvLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "RowConvLayer.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ScaleSubRegionLayer.cpp b/paddle/legacy/gserver/layers/ScaleSubRegionLayer.cpp index 68a0ff7358..70d44d2a7e 100644 --- a/paddle/legacy/gserver/layers/ScaleSubRegionLayer.cpp +++ b/paddle/legacy/gserver/layers/ScaleSubRegionLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "ScaleSubRegionLayer.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { REGISTER_LAYER(scale_sub_region, ScaleSubRegionLayer); diff --git a/paddle/legacy/gserver/layers/ScalingLayer.cpp b/paddle/legacy/gserver/layers/ScalingLayer.cpp index e68ff8905e..a8286b6614 100644 --- a/paddle/legacy/gserver/layers/ScalingLayer.cpp +++ b/paddle/legacy/gserver/layers/ScalingLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.cpp b/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.cpp index a181f55d91..72fb068148 100644 --- a/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.cpp +++ b/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.cpp @@ -16,8 +16,8 @@ limitations under the License. */ #include #include #include "paddle/legacy/math/SparseMatrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.h b/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.h index 068da57d8d..3ba04d9b2a 100644 --- a/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.h +++ b/paddle/legacy/gserver/layers/SelectiveFullyConnectedLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SequenceConcatLayer.cpp b/paddle/legacy/gserver/layers/SequenceConcatLayer.cpp index 024ca048b4..7b598e11ac 100644 --- a/paddle/legacy/gserver/layers/SequenceConcatLayer.cpp +++ b/paddle/legacy/gserver/layers/SequenceConcatLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SequenceLastInstanceLayer.cpp b/paddle/legacy/gserver/layers/SequenceLastInstanceLayer.cpp index b00bf65997..8735d71ba3 100644 --- a/paddle/legacy/gserver/layers/SequenceLastInstanceLayer.cpp +++ b/paddle/legacy/gserver/layers/SequenceLastInstanceLayer.cpp @@ -12,11 +12,11 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #include "SequencePoolLayer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SequencePoolLayer.cpp b/paddle/legacy/gserver/layers/SequencePoolLayer.cpp index 650ab425d1..243b795db4 100644 --- a/paddle/legacy/gserver/layers/SequencePoolLayer.cpp +++ b/paddle/legacy/gserver/layers/SequencePoolLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "SequencePoolLayer.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SequenceReshapeLayer.cpp b/paddle/legacy/gserver/layers/SequenceReshapeLayer.cpp index f72acadec9..e3d40cab50 100644 --- a/paddle/legacy/gserver/layers/SequenceReshapeLayer.cpp +++ b/paddle/legacy/gserver/layers/SequenceReshapeLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SequenceSliceLayer.cpp b/paddle/legacy/gserver/layers/SequenceSliceLayer.cpp index 65b4787fed..3ed51c4ef2 100644 --- a/paddle/legacy/gserver/layers/SequenceSliceLayer.cpp +++ b/paddle/legacy/gserver/layers/SequenceSliceLayer.cpp @@ -15,8 +15,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" #include "paddle/legacy/math/Vector.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SlopeInterceptLayer.cpp b/paddle/legacy/gserver/layers/SlopeInterceptLayer.cpp index beb288e4ad..9168fd7dda 100644 --- a/paddle/legacy/gserver/layers/SlopeInterceptLayer.cpp +++ b/paddle/legacy/gserver/layers/SlopeInterceptLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SpatialPyramidPoolLayer.h b/paddle/legacy/gserver/layers/SpatialPyramidPoolLayer.h index 6cdfba33b3..6d8ed9c878 100644 --- a/paddle/legacy/gserver/layers/SpatialPyramidPoolLayer.h +++ b/paddle/legacy/gserver/layers/SpatialPyramidPoolLayer.h @@ -17,7 +17,7 @@ limitations under the License. */ #include "Layer.h" #include "PoolProjection.h" #include "paddle/legacy/math/MathUtils.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { /** diff --git a/paddle/legacy/gserver/layers/SubNestedSequenceLayer.cpp b/paddle/legacy/gserver/layers/SubNestedSequenceLayer.cpp index 4f648ec01c..f363c2ac8d 100644 --- a/paddle/legacy/gserver/layers/SubNestedSequenceLayer.cpp +++ b/paddle/legacy/gserver/layers/SubNestedSequenceLayer.cpp @@ -15,8 +15,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" #include "paddle/legacy/math/Vector.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SubSequenceLayer.cpp b/paddle/legacy/gserver/layers/SubSequenceLayer.cpp index 6b27550048..36796f0473 100644 --- a/paddle/legacy/gserver/layers/SubSequenceLayer.cpp +++ b/paddle/legacy/gserver/layers/SubSequenceLayer.cpp @@ -15,8 +15,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" #include "paddle/legacy/math/Vector.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SumToOneNormLayer.cpp b/paddle/legacy/gserver/layers/SumToOneNormLayer.cpp index 4cd173a8c7..410f4dd7c9 100644 --- a/paddle/legacy/gserver/layers/SumToOneNormLayer.cpp +++ b/paddle/legacy/gserver/layers/SumToOneNormLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/SwitchOrderLayer.cpp b/paddle/legacy/gserver/layers/SwitchOrderLayer.cpp index 704735de38..513f3df7bc 100644 --- a/paddle/legacy/gserver/layers/SwitchOrderLayer.cpp +++ b/paddle/legacy/gserver/layers/SwitchOrderLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "SwitchOrderLayer.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/TensorLayer.cpp b/paddle/legacy/gserver/layers/TensorLayer.cpp index b2271c63ef..7f874bce0f 100644 --- a/paddle/legacy/gserver/layers/TensorLayer.cpp +++ b/paddle/legacy/gserver/layers/TensorLayer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "TensorLayer.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/TensorLayer.h b/paddle/legacy/gserver/layers/TensorLayer.h index 1c30f7c889..fc491a7c9f 100644 --- a/paddle/legacy/gserver/layers/TensorLayer.h +++ b/paddle/legacy/gserver/layers/TensorLayer.h @@ -16,7 +16,7 @@ limitations under the License. */ #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/TransLayer.cpp b/paddle/legacy/gserver/layers/TransLayer.cpp index cf87ca53d1..fd1d435ea5 100644 --- a/paddle/legacy/gserver/layers/TransLayer.cpp +++ b/paddle/legacy/gserver/layers/TransLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "TransLayer.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { REGISTER_LAYER(trans, TransLayer); diff --git a/paddle/legacy/gserver/layers/TransposedFullMatrixProjection.cpp b/paddle/legacy/gserver/layers/TransposedFullMatrixProjection.cpp index 45f5977989..c8533dc7d7 100644 --- a/paddle/legacy/gserver/layers/TransposedFullMatrixProjection.cpp +++ b/paddle/legacy/gserver/layers/TransposedFullMatrixProjection.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Projection.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/UpsampleLayer.h b/paddle/legacy/gserver/layers/UpsampleLayer.h index ea12a711a8..2fe5938244 100644 --- a/paddle/legacy/gserver/layers/UpsampleLayer.h +++ b/paddle/legacy/gserver/layers/UpsampleLayer.h @@ -17,8 +17,8 @@ limitations under the License. */ #include #include "Layer.h" #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Stat.h" namespace paddle { diff --git a/paddle/legacy/gserver/layers/ValidationLayer.cpp b/paddle/legacy/gserver/layers/ValidationLayer.cpp index b626825a7b..9956fd2ed4 100644 --- a/paddle/legacy/gserver/layers/ValidationLayer.cpp +++ b/paddle/legacy/gserver/layers/ValidationLayer.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include #include "ValidationLayer.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/gserver/tests/test_BatchNorm.cpp b/paddle/legacy/gserver/tests/test_BatchNorm.cpp index c7a65a3051..e21fa16074 100644 --- a/paddle/legacy/gserver/tests/test_BatchNorm.cpp +++ b/paddle/legacy/gserver/tests/test_BatchNorm.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include #include "ModelConfig.pb.h" #include "paddle/legacy/gserver/layers/DataLayer.h" -#include "paddle/utils/GlobalConstants.h" +#include "paddle/legacy/utils/GlobalConstants.h" #include "LayerGradUtil.h" #include "paddle/legacy/cuda/include/hl_batch_norm.h" diff --git a/paddle/legacy/gserver/tests/test_CompareSparse.cpp b/paddle/legacy/gserver/tests/test_CompareSparse.cpp index 26b23eac7c..11b633a588 100644 --- a/paddle/legacy/gserver/tests/test_CompareSparse.cpp +++ b/paddle/legacy/gserver/tests/test_CompareSparse.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include +#include #include "paddle/legacy/trainer/Trainer.h" diff --git a/paddle/legacy/gserver/tests/test_CompareTwoNets.cpp b/paddle/legacy/gserver/tests/test_CompareTwoNets.cpp index 6e8f855c6b..e19c34abbd 100644 --- a/paddle/legacy/gserver/tests/test_CompareTwoNets.cpp +++ b/paddle/legacy/gserver/tests/test_CompareTwoNets.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include +#include #include #include diff --git a/paddle/legacy/gserver/tests/test_ConvTrans.cpp b/paddle/legacy/gserver/tests/test_ConvTrans.cpp index 41a03f3b44..4ea0a3d379 100644 --- a/paddle/legacy/gserver/tests/test_ConvTrans.cpp +++ b/paddle/legacy/gserver/tests/test_ConvTrans.cpp @@ -18,7 +18,7 @@ limitations under the License. */ #include "ModelConfig.pb.h" #include "paddle/legacy/gserver/layers/DataLayer.h" #include "paddle/legacy/math/MathUtils.h" -#include "paddle/utils/GlobalConstants.h" +#include "paddle/legacy/utils/GlobalConstants.h" #include "LayerGradUtil.h" #include "paddle/testing/TestUtil.h" diff --git a/paddle/legacy/gserver/tests/test_ConvUnify.cpp b/paddle/legacy/gserver/tests/test_ConvUnify.cpp index a01a2b6937..d4ca158352 100644 --- a/paddle/legacy/gserver/tests/test_ConvUnify.cpp +++ b/paddle/legacy/gserver/tests/test_ConvUnify.cpp @@ -18,7 +18,7 @@ limitations under the License. */ #include "ModelConfig.pb.h" #include "paddle/legacy/gserver/layers/DataLayer.h" #include "paddle/legacy/math/MathUtils.h" -#include "paddle/utils/GlobalConstants.h" +#include "paddle/legacy/utils/GlobalConstants.h" #include "LayerGradUtil.h" #include "paddle/testing/TestUtil.h" diff --git a/paddle/legacy/gserver/tests/test_KmaxSeqScore.cpp b/paddle/legacy/gserver/tests/test_KmaxSeqScore.cpp index 6a1cfdc705..e15b4e5038 100644 --- a/paddle/legacy/gserver/tests/test_KmaxSeqScore.cpp +++ b/paddle/legacy/gserver/tests/test_KmaxSeqScore.cpp @@ -18,7 +18,7 @@ limitations under the License. */ #include #include "ModelConfig.pb.h" #include "paddle/legacy/gserver/layers/DataLayer.h" -#include "paddle/utils/GlobalConstants.h" +#include "paddle/legacy/utils/GlobalConstants.h" #include "LayerGradUtil.h" #include "paddle/testing/TestUtil.h" diff --git a/paddle/legacy/gserver/tests/test_LinearChainCRF.cpp b/paddle/legacy/gserver/tests/test_LinearChainCRF.cpp index 1c95492551..7082c1363a 100644 --- a/paddle/legacy/gserver/tests/test_LinearChainCRF.cpp +++ b/paddle/legacy/gserver/tests/test_LinearChainCRF.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include #include #include "paddle/legacy/gserver/layers/LinearChainCRF.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" using namespace paddle; // NOLINT using namespace std; // NOLINT diff --git a/paddle/legacy/gserver/tests/test_MKLDNN.cpp b/paddle/legacy/gserver/tests/test_MKLDNN.cpp index a20ccfb772..c79ccd1956 100644 --- a/paddle/legacy/gserver/tests/test_MKLDNN.cpp +++ b/paddle/legacy/gserver/tests/test_MKLDNN.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include +#include #include #include #include "MKLDNNTester.h" diff --git a/paddle/legacy/gserver/tests/test_MultinomialSampler.cpp b/paddle/legacy/gserver/tests/test_MultinomialSampler.cpp index ca1a588d83..25b1a1191d 100644 --- a/paddle/legacy/gserver/tests/test_MultinomialSampler.cpp +++ b/paddle/legacy/gserver/tests/test_MultinomialSampler.cpp @@ -18,10 +18,10 @@ limitations under the License. */ #include #undef PADDLE_DISABLE_TIMER -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" #include "paddle/legacy/gserver/layers/MultinomialSampler.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" using namespace paddle; // NOLINT using namespace std; // NOLINT diff --git a/paddle/legacy/gserver/tests/test_NetworkCompare.cpp b/paddle/legacy/gserver/tests/test_NetworkCompare.cpp index e07922b58c..c9f9f3e61b 100644 --- a/paddle/legacy/gserver/tests/test_NetworkCompare.cpp +++ b/paddle/legacy/gserver/tests/test_NetworkCompare.cpp @@ -14,13 +14,13 @@ limitations under the License. */ #undef PADDLE_DISABLE_TIMER #include -#include +#include #include #include #include "paddle/legacy/trainer/Trainer.h" +#include "paddle/legacy/utils/Stat.h" #include "paddle/testing/TestUtil.h" -#include "paddle/utils/Stat.h" using namespace paddle; // NOLINT using namespace std; // NOLINT diff --git a/paddle/legacy/gserver/tests/test_PyDataProvider.cpp b/paddle/legacy/gserver/tests/test_PyDataProvider.cpp index 9cde4ecca5..0209e6818a 100644 --- a/paddle/legacy/gserver/tests/test_PyDataProvider.cpp +++ b/paddle/legacy/gserver/tests/test_PyDataProvider.cpp @@ -18,7 +18,7 @@ limitations under the License. */ #include #include "paddle/legacy/gserver/dataproviders/PyDataProvider.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include "paddle/testing/TestUtil.h" diff --git a/paddle/legacy/gserver/tests/test_PyDataProvider2.cpp b/paddle/legacy/gserver/tests/test_PyDataProvider2.cpp index 7f5a087b9a..de313ba82c 100644 --- a/paddle/legacy/gserver/tests/test_PyDataProvider2.cpp +++ b/paddle/legacy/gserver/tests/test_PyDataProvider2.cpp @@ -16,8 +16,8 @@ limitations under the License. */ #include #include #include "paddle/legacy/gserver/dataproviders/DataProvider.h" -#include "paddle/utils/PythonUtil.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/PythonUtil.h" +#include "paddle/legacy/utils/Util.h" DEFINE_string(train_list, "unittest.list", "file list for unittest"); diff --git a/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp b/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp index 279f2c2fbb..153c3e7f36 100644 --- a/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp +++ b/paddle/legacy/gserver/tests/test_RecurrentGradientMachine.cpp @@ -17,9 +17,9 @@ limitations under the License. */ #include #include #include -#include -#include -#include +#include +#include +#include DECLARE_int32(seed); diff --git a/paddle/legacy/gserver/tests/test_RecurrentLayer.cpp b/paddle/legacy/gserver/tests/test_RecurrentLayer.cpp index 852a08d493..71198cb6a1 100644 --- a/paddle/legacy/gserver/tests/test_RecurrentLayer.cpp +++ b/paddle/legacy/gserver/tests/test_RecurrentLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include +#include #include #include "ModelConfig.pb.h" #include "paddle/legacy/gserver/layers/DataLayer.h" diff --git a/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp b/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp index 160d95f158..1975d9196d 100644 --- a/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp +++ b/paddle/legacy/gserver/tests/test_SelectiveFCLayer.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include #include -#include +#include #include #include #include diff --git a/paddle/legacy/gserver/tests/test_WarpCTCLayer.cpp b/paddle/legacy/gserver/tests/test_WarpCTCLayer.cpp index 34b88e6893..b1697e1616 100644 --- a/paddle/legacy/gserver/tests/test_WarpCTCLayer.cpp +++ b/paddle/legacy/gserver/tests/test_WarpCTCLayer.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include +#include #include "ModelConfig.pb.h" #include "paddle/legacy/gserver/layers/CTCLayer.h" #include "paddle/legacy/gserver/layers/DataLayer.h" diff --git a/paddle/legacy/math/Allocator.h b/paddle/legacy/math/Allocator.h index c43a83891e..ffb5ec1cad 100644 --- a/paddle/legacy/math/Allocator.h +++ b/paddle/legacy/math/Allocator.h @@ -17,7 +17,7 @@ limitations under the License. */ #include #include #include "hl_gpu.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/math/BaseMatrix.cu b/paddle/legacy/math/BaseMatrix.cu index 7b57419e5a..7e7cdc57a9 100644 --- a/paddle/legacy/math/BaseMatrix.cu +++ b/paddle/legacy/math/BaseMatrix.cu @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include +#include #include #include #include "BaseMatrix.h" diff --git a/paddle/legacy/math/BaseMatrix.h b/paddle/legacy/math/BaseMatrix.h index 1958629aa0..4627f847d3 100644 --- a/paddle/legacy/math/BaseMatrix.h +++ b/paddle/legacy/math/BaseMatrix.h @@ -16,7 +16,7 @@ limitations under the License. */ #include #include #include "TensorExpression.h" -#include "paddle/utils/Common.h" +#include "paddle/legacy/utils/Common.h" namespace paddle { diff --git a/paddle/legacy/math/CpuSparseMatrix.cpp b/paddle/legacy/math/CpuSparseMatrix.cpp index 88683ec984..20c65a3a1d 100644 --- a/paddle/legacy/math/CpuSparseMatrix.cpp +++ b/paddle/legacy/math/CpuSparseMatrix.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include "float.h" #include "hl_gpu.h" #include "paddle/legacy/math/MathUtils.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/math/MathFunctions.cpp b/paddle/legacy/math/MathFunctions.cpp index 152aeb5d64..bbf34a32f3 100644 --- a/paddle/legacy/math/MathFunctions.cpp +++ b/paddle/legacy/math/MathFunctions.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "paddle/legacy/math/MathFunctions.h" #include "hl_matrix_apply.cuh" #include "hl_matrix_ops.cuh" -#include "paddle/utils/DynamicLoader.h" +#include "paddle/legacy/utils/DynamicLoader.h" namespace dynload { diff --git a/paddle/legacy/math/MathUtils.cpp b/paddle/legacy/math/MathUtils.cpp index b2afdbcd51..47ac9c187c 100644 --- a/paddle/legacy/math/MathUtils.cpp +++ b/paddle/legacy/math/MathUtils.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "MathUtils.h" #include #include "Vector.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/math/Matrix.cpp b/paddle/legacy/math/Matrix.cpp index 50b0bc5011..e53f95006c 100644 --- a/paddle/legacy/math/Matrix.cpp +++ b/paddle/legacy/math/Matrix.cpp @@ -26,11 +26,11 @@ limitations under the License. */ #include "hl_gpu.h" #include "hl_table_apply.h" #include "hl_top_k.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #include "NEONFunctions.h" #include "paddle/legacy/function/GemmFunctor.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/ThreadLocal.h" #include "SIMDFunctions.h" diff --git a/paddle/legacy/math/Matrix.h b/paddle/legacy/math/Matrix.h index 74dc690792..ff4f4cfc2a 100644 --- a/paddle/legacy/math/Matrix.h +++ b/paddle/legacy/math/Matrix.h @@ -18,16 +18,16 @@ limitations under the License. */ #include #include -#include "paddle/utils/Logging.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/ThreadLocal.h" #include #include "BaseMatrix.h" #include "MemoryHandle.h" #include "Vector.h" -#include "paddle/utils/Common.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/Common.h" +#include "paddle/legacy/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/math/MatrixBitCode.cpp b/paddle/legacy/math/MatrixBitCode.cpp index f7a949294b..f35f266a30 100644 --- a/paddle/legacy/math/MatrixBitCode.cpp +++ b/paddle/legacy/math/MatrixBitCode.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Matrix.h" #include "hl_gpu.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/math/RowBuffer.h b/paddle/legacy/math/RowBuffer.h index 6950afaa21..9dfd5eff06 100644 --- a/paddle/legacy/math/RowBuffer.h +++ b/paddle/legacy/math/RowBuffer.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include #include "MemoryHandle.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/math/SparseMatrix.cpp b/paddle/legacy/math/SparseMatrix.cpp index 1faa343dbc..6f68252b0a 100644 --- a/paddle/legacy/math/SparseMatrix.cpp +++ b/paddle/legacy/math/SparseMatrix.cpp @@ -18,7 +18,7 @@ limitations under the License. */ #include #include "hl_gpu.h" #include "hl_top_k.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/math/SparseRowMatrix.cpp b/paddle/legacy/math/SparseRowMatrix.cpp index 4254175aab..39bcdf2298 100644 --- a/paddle/legacy/math/SparseRowMatrix.cpp +++ b/paddle/legacy/math/SparseRowMatrix.cpp @@ -17,12 +17,12 @@ limitations under the License. */ #include -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #include "SIMDFunctions.h" -#include "paddle/utils/Thread.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Thread.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/math/SparseRowMatrix.h b/paddle/legacy/math/SparseRowMatrix.h index cf6779e8b0..e206747a41 100644 --- a/paddle/legacy/math/SparseRowMatrix.h +++ b/paddle/legacy/math/SparseRowMatrix.h @@ -21,7 +21,7 @@ limitations under the License. */ #include #include "Matrix.h" #include "RowBuffer.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/math/Storage.cpp b/paddle/legacy/math/Storage.cpp index 5982bf2e56..65d53aeaa9 100644 --- a/paddle/legacy/math/Storage.cpp +++ b/paddle/legacy/math/Storage.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "Storage.h" #include "Allocator.h" -#include "paddle/utils/StringUtil.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/StringUtil.h" +#include "paddle/legacy/utils/Util.h" #ifndef PADDLE_MOBILE_INFERENCE DEFINE_int32(pool_limit_size, diff --git a/paddle/legacy/math/Storage.h b/paddle/legacy/math/Storage.h index 61a9aa2a07..bd22dde2c8 100644 --- a/paddle/legacy/math/Storage.h +++ b/paddle/legacy/math/Storage.h @@ -17,7 +17,7 @@ limitations under the License. */ #include #include #include "PoolAllocator.h" -#include "paddle/utils/Locks.h" +#include "paddle/legacy/utils/Locks.h" namespace paddle { diff --git a/paddle/legacy/math/TensorAssign.h b/paddle/legacy/math/TensorAssign.h index 7d4726ddba..efbfce6c4f 100644 --- a/paddle/legacy/math/TensorAssign.h +++ b/paddle/legacy/math/TensorAssign.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/math/TensorEvaluate.h b/paddle/legacy/math/TensorEvaluate.h index 2a722016e7..3029dd35fb 100644 --- a/paddle/legacy/math/TensorEvaluate.h +++ b/paddle/legacy/math/TensorEvaluate.h @@ -16,7 +16,7 @@ limitations under the License. */ #include #include "hl_base.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/math/TensorExpression.h b/paddle/legacy/math/TensorExpression.h index f6da9adfca..1c6cf07831 100644 --- a/paddle/legacy/math/TensorExpression.h +++ b/paddle/legacy/math/TensorExpression.h @@ -16,8 +16,8 @@ limitations under the License. */ #include #include #include "hl_tensor_ops.h" -#include "paddle/utils/Common.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Common.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/math/TrainingAlgorithmOp.cu b/paddle/legacy/math/TrainingAlgorithmOp.cu index b844768d3b..9e1eaa0f45 100644 --- a/paddle/legacy/math/TrainingAlgorithmOp.cu +++ b/paddle/legacy/math/TrainingAlgorithmOp.cu @@ -14,7 +14,7 @@ limitations under the License. */ #include "BaseMatrix.h" #include "TrainingAlgorithmOp.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #if __cplusplus > 199711L diff --git a/paddle/legacy/math/TrainingAlgorithmOp.h b/paddle/legacy/math/TrainingAlgorithmOp.h index fe40fc2d36..921c2742cf 100644 --- a/paddle/legacy/math/TrainingAlgorithmOp.h +++ b/paddle/legacy/math/TrainingAlgorithmOp.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "BaseMatrix.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/math/Vector.cpp b/paddle/legacy/math/Vector.cpp index 2a47ed7ef8..87f48bb162 100644 --- a/paddle/legacy/math/Vector.cpp +++ b/paddle/legacy/math/Vector.cpp @@ -13,17 +13,17 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Vector.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include #include "Matrix.h" #include "hl_gpu.h" #include "hl_matrix.h" #include "hl_table_apply.h" -#include "paddle/utils/Flags.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Thread.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/Flags.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Thread.h" +#include "paddle/legacy/utils/ThreadLocal.h" namespace paddle { diff --git a/paddle/legacy/math/Vector.h b/paddle/legacy/math/Vector.h index 964b42cae5..63cb4651c5 100644 --- a/paddle/legacy/math/Vector.h +++ b/paddle/legacy/math/Vector.h @@ -21,8 +21,8 @@ limitations under the License. */ #include "BaseMatrix.h" #include "MemoryHandle.h" -#include "paddle/utils/Common.h" -#include "paddle/utils/Thread.h" +#include "paddle/legacy/utils/Common.h" +#include "paddle/legacy/utils/Thread.h" namespace paddle { diff --git a/paddle/legacy/math/tests/OriginalOptimizerApi.h b/paddle/legacy/math/tests/OriginalOptimizerApi.h index 1f942e28f4..f386e19958 100644 --- a/paddle/legacy/math/tests/OriginalOptimizerApi.h +++ b/paddle/legacy/math/tests/OriginalOptimizerApi.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "paddle/legacy/math/Vector.h" -#include "paddle/utils/GlobalConstants.h" +#include "paddle/legacy/utils/GlobalConstants.h" using namespace paddle; // NOLINT diff --git a/paddle/legacy/math/tests/PerfUtils.h b/paddle/legacy/math/tests/PerfUtils.h index bee2351e2f..eaf4869e4c 100644 --- a/paddle/legacy/math/tests/PerfUtils.h +++ b/paddle/legacy/math/tests/PerfUtils.h @@ -21,7 +21,7 @@ limitations under the License. */ #else -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" using namespace paddle; // NOLINT #define EXPRESSION_PERFORMANCE(expression) \ diff --git a/paddle/legacy/math/tests/test_Allocator.cpp b/paddle/legacy/math/tests/test_Allocator.cpp index 710b55f57e..122be9082a 100644 --- a/paddle/legacy/math/tests/test_Allocator.cpp +++ b/paddle/legacy/math/tests/test_Allocator.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include "paddle/utils/Logging.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Util.h" #define private public #include "paddle/legacy/math/Allocator.h" #include "paddle/legacy/math/MemoryHandle.h" diff --git a/paddle/legacy/math/tests/test_CpuGpuVector.cpp b/paddle/legacy/math/tests/test_CpuGpuVector.cpp index 3807158200..010fef534d 100644 --- a/paddle/legacy/math/tests/test_CpuGpuVector.cpp +++ b/paddle/legacy/math/tests/test_CpuGpuVector.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include #include "paddle/legacy/math/Vector.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include "test_matrixUtil.h" using namespace paddle; // NOLINT diff --git a/paddle/legacy/math/tests/test_ExecViaCpu.cpp b/paddle/legacy/math/tests/test_ExecViaCpu.cpp index 55a3f5f505..b2ce0bc7ed 100644 --- a/paddle/legacy/math/tests/test_ExecViaCpu.cpp +++ b/paddle/legacy/math/tests/test_ExecViaCpu.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include -#include +#include +#include #include #include "paddle/legacy/math/SparseMatrix.h" diff --git a/paddle/legacy/math/tests/test_FPException.cpp b/paddle/legacy/math/tests/test_FPException.cpp index 6fd17f2969..aa6aea71c8 100644 --- a/paddle/legacy/math/tests/test_FPException.cpp +++ b/paddle/legacy/math/tests/test_FPException.cpp @@ -31,7 +31,7 @@ limitations under the License. */ #include #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Common.h" +#include "paddle/legacy/utils/Common.h" using namespace paddle; // NOLINT diff --git a/paddle/legacy/math/tests/test_GpuProfiler.cpp b/paddle/legacy/math/tests/test_GpuProfiler.cpp index 450c9a035e..ee27109f21 100644 --- a/paddle/legacy/math/tests/test_GpuProfiler.cpp +++ b/paddle/legacy/math/tests/test_GpuProfiler.cpp @@ -17,9 +17,9 @@ limitations under the License. */ #include #include "paddle/legacy/math/Matrix.h" #include "paddle/legacy/math/SparseMatrix.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/Util.h" #include "paddle/testing/TestUtil.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/Util.h" using namespace paddle; // NOLINT using namespace std; // NOLINT diff --git a/paddle/legacy/math/tests/test_SIMDFunctions.cpp b/paddle/legacy/math/tests/test_SIMDFunctions.cpp index eef281b3f7..c6490f70e3 100644 --- a/paddle/legacy/math/tests/test_SIMDFunctions.cpp +++ b/paddle/legacy/math/tests/test_SIMDFunctions.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "paddle/legacy/math/SIMDFunctions.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include diff --git a/paddle/legacy/math/tests/test_SparseMatrix.cpp b/paddle/legacy/math/tests/test_SparseMatrix.cpp index dbcbeb8d50..30896a945e 100644 --- a/paddle/legacy/math/tests/test_SparseMatrix.cpp +++ b/paddle/legacy/math/tests/test_SparseMatrix.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include +#include #include #include "test_matrixUtil.h" diff --git a/paddle/legacy/math/tests/test_TrainingAlgorithm.cpp b/paddle/legacy/math/tests/test_TrainingAlgorithm.cpp index 3ae9cf111a..214ae8971a 100644 --- a/paddle/legacy/math/tests/test_TrainingAlgorithm.cpp +++ b/paddle/legacy/math/tests/test_TrainingAlgorithm.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include "PerfUtils.h" #include "TensorCheck.h" #include "paddle/legacy/math/TrainingAlgorithmOp.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" using namespace paddle; // NOLINT diff --git a/paddle/legacy/math/tests/test_matrixCompare.cpp b/paddle/legacy/math/tests/test_matrixCompare.cpp index 98521aeb04..a43adde46f 100644 --- a/paddle/legacy/math/tests/test_matrixCompare.cpp +++ b/paddle/legacy/math/tests/test_matrixCompare.cpp @@ -21,10 +21,10 @@ limitations under the License. */ #include "paddle/legacy/math/MathUtils.h" #include "paddle/legacy/math/Matrix.h" #include "paddle/legacy/math/SparseMatrix.h" +#include "paddle/legacy/utils/DynamicLoader.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/Util.h" #include "paddle/testing/TestUtil.h" -#include "paddle/utils/DynamicLoader.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/Util.h" using namespace paddle; // NOLINT using namespace std; // NOLINT diff --git a/paddle/legacy/math/tests/test_matrixUtil.h b/paddle/legacy/math/tests/test_matrixUtil.h index bb80172b1e..58c93f746e 100644 --- a/paddle/legacy/math/tests/test_matrixUtil.h +++ b/paddle/legacy/math/tests/test_matrixUtil.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once #include -#include +#include #include "paddle/legacy/math/SparseMatrix.h" namespace paddle { diff --git a/paddle/legacy/math/tests/test_sparseMatrixCompare.cpp b/paddle/legacy/math/tests/test_sparseMatrixCompare.cpp index 959c9d40b0..492aa0a689 100644 --- a/paddle/legacy/math/tests/test_sparseMatrixCompare.cpp +++ b/paddle/legacy/math/tests/test_sparseMatrixCompare.cpp @@ -19,7 +19,7 @@ limitations under the License. */ #include #include "paddle/legacy/math/Matrix.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include "test_matrixUtil.h" using namespace paddle; // NOLINT diff --git a/paddle/legacy/optimizer/serialization.h b/paddle/legacy/optimizer/serialization.h index bf12eed15f..2067a8d8cf 100644 --- a/paddle/legacy/optimizer/serialization.h +++ b/paddle/legacy/optimizer/serialization.h @@ -19,7 +19,7 @@ #include #include #include "OptimizerConfig.pb.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #include "tensor.h" namespace paddle { diff --git a/paddle/legacy/optimizer/tensor.h b/paddle/legacy/optimizer/tensor.h index d2cef99074..2e58577d4d 100644 --- a/paddle/legacy/optimizer/tensor.h +++ b/paddle/legacy/optimizer/tensor.h @@ -18,8 +18,8 @@ #include #include -#include "paddle/utils/Common.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Common.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { namespace optimizer { diff --git a/paddle/legacy/parameter/Argument.h b/paddle/legacy/parameter/Argument.h index f936d944cb..ea8634896c 100644 --- a/paddle/legacy/parameter/Argument.h +++ b/paddle/legacy/parameter/Argument.h @@ -16,8 +16,8 @@ limitations under the License. */ #include "paddle/legacy/math/Matrix.h" #include "paddle/legacy/math/Vector.h" #include "paddle/legacy/parameter/Parameter.h" -#include "paddle/utils/Locks.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Locks.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/parameter/FirstOrderOptimizer.cpp b/paddle/legacy/parameter/FirstOrderOptimizer.cpp index 89bb840f82..4f82a115f7 100644 --- a/paddle/legacy/parameter/FirstOrderOptimizer.cpp +++ b/paddle/legacy/parameter/FirstOrderOptimizer.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "FirstOrderOptimizer.h" #include "paddle/legacy/math/TrainingAlgorithmOp.h" -#include "paddle/utils/Flags.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Flags.h" +#include "paddle/legacy/utils/Util.h" #include diff --git a/paddle/legacy/parameter/LearningRateScheduler.cpp b/paddle/legacy/parameter/LearningRateScheduler.cpp index d57d2189a4..68c44a7ec4 100644 --- a/paddle/legacy/parameter/LearningRateScheduler.cpp +++ b/paddle/legacy/parameter/LearningRateScheduler.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "LearningRateScheduler.h" -#include "paddle/utils/StringUtil.h" +#include "paddle/legacy/utils/StringUtil.h" namespace paddle { diff --git a/paddle/legacy/parameter/LearningRateScheduler.h b/paddle/legacy/parameter/LearningRateScheduler.h index 3fad970402..fc7e380a6a 100644 --- a/paddle/legacy/parameter/LearningRateScheduler.h +++ b/paddle/legacy/parameter/LearningRateScheduler.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "TrainerConfig.pb.h" -#include "paddle/utils/ClassRegistrar.h" +#include "paddle/legacy/utils/ClassRegistrar.h" namespace paddle { // NOLINTNEXTLINES_4 diff --git a/paddle/legacy/parameter/Parameter.cpp b/paddle/legacy/parameter/Parameter.cpp index d00019027b..666d808f0c 100644 --- a/paddle/legacy/parameter/Parameter.cpp +++ b/paddle/legacy/parameter/Parameter.cpp @@ -25,7 +25,7 @@ limitations under the License. */ #include "paddle/legacy/math/CpuSparseMatrix.h" #include "paddle/legacy/math/MathUtils.h" #include "paddle/legacy/math/SparseRowMatrix.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" DEFINE_int32(enable_grad_share, (100 * 1024 * 1024), diff --git a/paddle/legacy/parameter/Parameter.h b/paddle/legacy/parameter/Parameter.h index 75cfb3f4aa..43b567dad0 100644 --- a/paddle/legacy/parameter/Parameter.h +++ b/paddle/legacy/parameter/Parameter.h @@ -26,11 +26,11 @@ limitations under the License. */ #include "ParameterUpdaterHook.h" #include "paddle/legacy/math/Matrix.h" #include "paddle/legacy/math/Vector.h" -#include "paddle/utils/Common.h" -#include "paddle/utils/GlobalConstants.h" -#include "paddle/utils/Locks.h" -#include "paddle/utils/ThreadLocal.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Common.h" +#include "paddle/legacy/utils/GlobalConstants.h" +#include "paddle/legacy/utils/Locks.h" +#include "paddle/legacy/utils/ThreadLocal.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/parameter/ParameterOptimizer.cpp b/paddle/legacy/parameter/ParameterOptimizer.cpp index 638daa58f1..b9dffa5afb 100644 --- a/paddle/legacy/parameter/ParameterOptimizer.cpp +++ b/paddle/legacy/parameter/ParameterOptimizer.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #include diff --git a/paddle/legacy/parameter/ParameterUpdateFunctions.cpp b/paddle/legacy/parameter/ParameterUpdateFunctions.cpp index db1153c2d6..72c9841acf 100644 --- a/paddle/legacy/parameter/ParameterUpdateFunctions.cpp +++ b/paddle/legacy/parameter/ParameterUpdateFunctions.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #ifdef __AVX__ #include #include diff --git a/paddle/legacy/parameter/ParameterUpdateFunctions.h b/paddle/legacy/parameter/ParameterUpdateFunctions.h index 3dbde93b91..a7cc1c4c47 100644 --- a/paddle/legacy/parameter/ParameterUpdateFunctions.h +++ b/paddle/legacy/parameter/ParameterUpdateFunctions.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "paddle/legacy/math/Vector.h" -#include "paddle/utils/Common.h" +#include "paddle/legacy/utils/Common.h" namespace paddle { diff --git a/paddle/legacy/parameter/ParameterUpdaterBase.cpp b/paddle/legacy/parameter/ParameterUpdaterBase.cpp index 7815856b45..7d9d3fad63 100644 --- a/paddle/legacy/parameter/ParameterUpdaterBase.cpp +++ b/paddle/legacy/parameter/ParameterUpdaterBase.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include "ParameterUpdaterBase.h" #include #include "hl_gpu.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/parameter/ParameterUpdaterHook.cpp b/paddle/legacy/parameter/ParameterUpdaterHook.cpp index e4677f894a..bfb9769fb6 100644 --- a/paddle/legacy/parameter/ParameterUpdaterHook.cpp +++ b/paddle/legacy/parameter/ParameterUpdaterHook.cpp @@ -24,8 +24,8 @@ limitations under the License. */ #include "paddle/legacy/math/Vector.h" #include "paddle/legacy/parameter/Parameter.h" -#include "paddle/utils/Flags.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Flags.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/parameter/Regularizer.cpp b/paddle/legacy/parameter/Regularizer.cpp index d223fd2df6..c1d5f4fa68 100644 --- a/paddle/legacy/parameter/Regularizer.cpp +++ b/paddle/legacy/parameter/Regularizer.cpp @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Regularizer.h" -#include "paddle/utils/Flags.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Flags.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/parameter/Weight.cpp b/paddle/legacy/parameter/Weight.cpp index ba4ddce69f..9d94050a5c 100644 --- a/paddle/legacy/parameter/Weight.cpp +++ b/paddle/legacy/parameter/Weight.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "Weight.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/parameter/tests/test_common.cpp b/paddle/legacy/parameter/tests/test_common.cpp index 3c4ee11934..8de9d6da98 100644 --- a/paddle/legacy/parameter/tests/test_common.cpp +++ b/paddle/legacy/parameter/tests/test_common.cpp @@ -12,14 +12,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include +#include #include #include #include -#include -#include -#include +#include +#include +#include using namespace paddle; // NOLINT diff --git a/paddle/legacy/pserver/BaseClient.cpp b/paddle/legacy/pserver/BaseClient.cpp index a6204ef47e..13bb8a1cc5 100644 --- a/paddle/legacy/pserver/BaseClient.cpp +++ b/paddle/legacy/pserver/BaseClient.cpp @@ -16,7 +16,7 @@ limitations under the License. */ #include #include #include -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" DECLARE_string(pservers); diff --git a/paddle/legacy/pserver/BaseClient.h b/paddle/legacy/pserver/BaseClient.h index 92bb0a8b6a..66e8f39cd6 100644 --- a/paddle/legacy/pserver/BaseClient.h +++ b/paddle/legacy/pserver/BaseClient.h @@ -17,8 +17,8 @@ limitations under the License. */ #include "ParameterService.pb.h" #include "paddle/legacy/math/Matrix.h" #include "paddle/legacy/pserver/ProtoServer.h" -#include "paddle/utils/Common.h" -#include "paddle/utils/Queue.h" +#include "paddle/legacy/utils/Common.h" +#include "paddle/legacy/utils/Queue.h" namespace paddle { diff --git a/paddle/legacy/pserver/LightNetwork.cpp b/paddle/legacy/pserver/LightNetwork.cpp index 4c0da2217e..469c95853e 100644 --- a/paddle/legacy/pserver/LightNetwork.cpp +++ b/paddle/legacy/pserver/LightNetwork.cpp @@ -27,8 +27,8 @@ limitations under the License. */ #include "LightNetwork.h" #include "RDMANetwork.h" -#include "paddle/utils/StringUtil.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/StringUtil.h" +#include "paddle/legacy/utils/Util.h" /// quick ack can reduce the latency of small message DEFINE_bool(small_messages, diff --git a/paddle/legacy/pserver/LightNetwork.h b/paddle/legacy/pserver/LightNetwork.h index bcfc9655e9..380f86832f 100644 --- a/paddle/legacy/pserver/LightNetwork.h +++ b/paddle/legacy/pserver/LightNetwork.h @@ -21,7 +21,7 @@ limitations under the License. */ #include #include -#include "paddle/utils/Thread.h" +#include "paddle/legacy/utils/Thread.h" struct sxi_socket; diff --git a/paddle/legacy/pserver/ParameterClient2.cpp b/paddle/legacy/pserver/ParameterClient2.cpp index 98b3966250..4c544ddc28 100644 --- a/paddle/legacy/pserver/ParameterClient2.cpp +++ b/paddle/legacy/pserver/ParameterClient2.cpp @@ -16,9 +16,9 @@ limitations under the License. */ #include "ParameterClient2.h" #include "paddle/legacy/math/SparseRowMatrix.h" -#include "paddle/utils/Flags.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/StringUtil.h" +#include "paddle/legacy/utils/Flags.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/StringUtil.h" DEFINE_string(pservers, "127.0.0.1", "Comma separated addresses of pservers"); DEFINE_int32(parallel_thread_num, 1, "Thread number for parameter send"); diff --git a/paddle/legacy/pserver/ParameterClient2.h b/paddle/legacy/pserver/ParameterClient2.h index 2bc0e47866..9320e19c4d 100644 --- a/paddle/legacy/pserver/ParameterClient2.h +++ b/paddle/legacy/pserver/ParameterClient2.h @@ -23,11 +23,11 @@ limitations under the License. */ #include "paddle/legacy/math/Vector.h" #include "paddle/legacy/parameter/Parameter.h" #include "paddle/legacy/pserver/BaseClient.h" -#include "paddle/utils/Common.h" -#include "paddle/utils/Flags.h" -#include "paddle/utils/Locks.h" -#include "paddle/utils/Queue.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Common.h" +#include "paddle/legacy/utils/Flags.h" +#include "paddle/legacy/utils/Locks.h" +#include "paddle/legacy/utils/Queue.h" +#include "paddle/legacy/utils/Util.h" #include "ParameterService.pb.h" diff --git a/paddle/legacy/pserver/ParameterServer2.cpp b/paddle/legacy/pserver/ParameterServer2.cpp index 293fc7ca69..8533a322d9 100644 --- a/paddle/legacy/pserver/ParameterServer2.cpp +++ b/paddle/legacy/pserver/ParameterServer2.cpp @@ -26,10 +26,10 @@ limitations under the License. */ #include "paddle/legacy/parameter/ParameterUpdateFunctions.h" #include "paddle/legacy/parameter/Regularizer.h" #include "paddle/legacy/parameter/ThreadLocalBuffer.h" -#include "paddle/utils/Flags.h" -#include "paddle/utils/GlobalConstants.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/StringUtil.h" +#include "paddle/legacy/utils/Flags.h" +#include "paddle/legacy/utils/GlobalConstants.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/StringUtil.h" DEFINE_int32(pserver_num_threads, 1, "number of threads for sync op exec"); DEFINE_double(async_lagged_ratio_min, diff --git a/paddle/legacy/pserver/ParameterServer2.h b/paddle/legacy/pserver/ParameterServer2.h index 040699878d..069e730ea4 100644 --- a/paddle/legacy/pserver/ParameterServer2.h +++ b/paddle/legacy/pserver/ParameterServer2.h @@ -29,10 +29,10 @@ limitations under the License. */ #include "paddle/legacy/math/Vector.h" #include "paddle/legacy/parameter/Parameter.h" #include "paddle/legacy/parameter/ParameterOptimizer.h" -#include "paddle/utils/Common.h" -#include "paddle/utils/Locks.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/ThreadLocal.h" +#include "paddle/legacy/utils/Common.h" +#include "paddle/legacy/utils/Locks.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/ThreadLocal.h" #include "ParameterService.pb.h" diff --git a/paddle/legacy/pserver/ParameterServerController.h b/paddle/legacy/pserver/ParameterServerController.h index 1308d62fb1..b90d0cbcea 100644 --- a/paddle/legacy/pserver/ParameterServerController.h +++ b/paddle/legacy/pserver/ParameterServerController.h @@ -17,7 +17,7 @@ limitations under the License. */ #include "ParameterServer2.h" #include "ParameterServerConfig.pb.h" #include "RDMANetwork.h" -#include "paddle/utils/StringUtil.h" +#include "paddle/legacy/utils/StringUtil.h" namespace paddle { diff --git a/paddle/legacy/pserver/RDMANetwork.h b/paddle/legacy/pserver/RDMANetwork.h index 83db6b9df7..c87056f72c 100644 --- a/paddle/legacy/pserver/RDMANetwork.h +++ b/paddle/legacy/pserver/RDMANetwork.h @@ -19,7 +19,7 @@ limitations under the License. */ #else #define PROMPT_ERR() LOG(FATAL) << "Paddle is not compiled with rdma" #endif -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #include struct sxi_sock; diff --git a/paddle/legacy/pserver/SocketChannel.cpp b/paddle/legacy/pserver/SocketChannel.cpp index 72e6943408..79c763c62b 100644 --- a/paddle/legacy/pserver/SocketChannel.cpp +++ b/paddle/legacy/pserver/SocketChannel.cpp @@ -22,7 +22,7 @@ limitations under the License. */ #include #include "RDMANetwork.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/pserver/SocketChannel.h b/paddle/legacy/pserver/SocketChannel.h index 8b45ac5609..a7b3cd42f0 100644 --- a/paddle/legacy/pserver/SocketChannel.h +++ b/paddle/legacy/pserver/SocketChannel.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include diff --git a/paddle/legacy/pserver/SparseParameterDistribution.cpp b/paddle/legacy/pserver/SparseParameterDistribution.cpp index bb247f389c..3f17b228f0 100644 --- a/paddle/legacy/pserver/SparseParameterDistribution.cpp +++ b/paddle/legacy/pserver/SparseParameterDistribution.cpp @@ -14,9 +14,9 @@ limitations under the License. */ #include -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" -#include "paddle/utils/Flags.h" +#include "paddle/legacy/utils/Flags.h" #include "SparseParameterDistribution.h" diff --git a/paddle/legacy/pserver/SparseParameterDistribution.h b/paddle/legacy/pserver/SparseParameterDistribution.h index e168f36c75..ee78029958 100644 --- a/paddle/legacy/pserver/SparseParameterDistribution.h +++ b/paddle/legacy/pserver/SparseParameterDistribution.h @@ -16,7 +16,7 @@ limitations under the License. */ #include #include -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/legacy/pserver/test/SocketTest.cpp b/paddle/legacy/pserver/test/SocketTest.cpp index bb9ee355dd..3a781fcbf6 100644 --- a/paddle/legacy/pserver/test/SocketTest.cpp +++ b/paddle/legacy/pserver/test/SocketTest.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include #include @@ -23,7 +23,7 @@ limitations under the License. */ #include #include "paddle/legacy/math/Vector.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" struct MessageHeader { int64_t dataLength; diff --git a/paddle/legacy/pserver/test/test_ParameterServer2.cpp b/paddle/legacy/pserver/test/test_ParameterServer2.cpp index 60419f3a4a..542e80e046 100644 --- a/paddle/legacy/pserver/test/test_ParameterServer2.cpp +++ b/paddle/legacy/pserver/test/test_ParameterServer2.cpp @@ -15,8 +15,8 @@ limitations under the License. */ #include #include #include -#include -#include +#include +#include using namespace paddle; // NOLINT using namespace std; // NOLINT diff --git a/paddle/legacy/pserver/test/test_ProtoServer.cpp b/paddle/legacy/pserver/test/test_ProtoServer.cpp index 8d5e26f995..f7ab2e8af4 100644 --- a/paddle/legacy/pserver/test/test_ProtoServer.cpp +++ b/paddle/legacy/pserver/test/test_ProtoServer.cpp @@ -17,8 +17,8 @@ limitations under the License. */ #include "ParameterService.pb.h" #include "paddle/legacy/math/Vector.h" #include "paddle/legacy/pserver/ProtoServer.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/Util.h" DEFINE_string(server_addr, "127.0.0.1", "Server address"); DEFINE_int64(dim, 50000000, "Data size"); diff --git a/paddle/legacy/trainer/MergeModel.cpp b/paddle/legacy/trainer/MergeModel.cpp index 6624d6d27b..8a3601f192 100644 --- a/paddle/legacy/trainer/MergeModel.cpp +++ b/paddle/legacy/trainer/MergeModel.cpp @@ -17,7 +17,7 @@ limitations under the License. */ #include "ParamUtil.h" #include "Trainer.h" #include "paddle/legacy/pserver/ParameterServer2.h" -#include "paddle/utils/PythonUtil.h" +#include "paddle/legacy/utils/PythonUtil.h" DEFINE_string(model_dir, "", "Directory for separated model files"); DEFINE_string(config_file, "", "Config file for the model"); diff --git a/paddle/legacy/trainer/NewRemoteParameterUpdater.cpp b/paddle/legacy/trainer/NewRemoteParameterUpdater.cpp index 410ac6d95c..cdd832acd1 100644 --- a/paddle/legacy/trainer/NewRemoteParameterUpdater.cpp +++ b/paddle/legacy/trainer/NewRemoteParameterUpdater.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "NewRemoteParameterUpdater.h" #include "Trainer.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/Stat.h" DECLARE_int32(trainer_id); DECLARE_string(save_dir); diff --git a/paddle/legacy/trainer/NewRemoteParameterUpdater.h b/paddle/legacy/trainer/NewRemoteParameterUpdater.h index 33c1fa7bdf..707e9ceb9b 100644 --- a/paddle/legacy/trainer/NewRemoteParameterUpdater.h +++ b/paddle/legacy/trainer/NewRemoteParameterUpdater.h @@ -20,8 +20,8 @@ limitations under the License. */ #include "ParameterUpdater.h" #include "libpaddle_pserver_cclient.h" #include "paddle/legacy/pserver/ParameterClient2.h" -#include "paddle/utils/Queue.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Queue.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/trainer/ParamUtil.cpp b/paddle/legacy/trainer/ParamUtil.cpp index b577e3e868..b5aba32dee 100644 --- a/paddle/legacy/trainer/ParamUtil.cpp +++ b/paddle/legacy/trainer/ParamUtil.cpp @@ -23,12 +23,12 @@ limitations under the License. */ #include #include -#include +#include -#include "paddle/utils/GlobalConstants.h" -#include "paddle/utils/PythonUtil.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/GlobalConstants.h" +#include "paddle/legacy/utils/PythonUtil.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/Util.h" #include "TesterConfig.h" #include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" diff --git a/paddle/legacy/trainer/ParamUtil.h b/paddle/legacy/trainer/ParamUtil.h index c34e079b90..0778696776 100644 --- a/paddle/legacy/trainer/ParamUtil.h +++ b/paddle/legacy/trainer/ParamUtil.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include diff --git a/paddle/legacy/trainer/ParameterUpdater.cpp b/paddle/legacy/trainer/ParameterUpdater.cpp index 4e9e890c85..549fb0332d 100644 --- a/paddle/legacy/trainer/ParameterUpdater.cpp +++ b/paddle/legacy/trainer/ParameterUpdater.cpp @@ -14,9 +14,9 @@ limitations under the License. */ #include "ParameterUpdater.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" -#include "paddle/utils/Thread.h" +#include "paddle/legacy/utils/Thread.h" namespace paddle { diff --git a/paddle/legacy/trainer/ParameterUpdater.h b/paddle/legacy/trainer/ParameterUpdater.h index 0070254d1c..acddc3702d 100644 --- a/paddle/legacy/trainer/ParameterUpdater.h +++ b/paddle/legacy/trainer/ParameterUpdater.h @@ -14,8 +14,8 @@ limitations under the License. */ #pragma once -#include "paddle/utils/Thread.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Thread.h" +#include "paddle/legacy/utils/Util.h" #include "paddle/legacy/parameter/AverageOptimizer.h" #include "paddle/legacy/parameter/FirstOrderOptimizer.h" diff --git a/paddle/legacy/trainer/RemoteParameterUpdater.cpp b/paddle/legacy/trainer/RemoteParameterUpdater.cpp index 7314266cb2..5de1cc7827 100644 --- a/paddle/legacy/trainer/RemoteParameterUpdater.cpp +++ b/paddle/legacy/trainer/RemoteParameterUpdater.cpp @@ -14,8 +14,8 @@ limitations under the License. */ #include "RemoteParameterUpdater.h" #include "Trainer.h" -#include "paddle/utils/GlobalConstants.h" -#include "paddle/utils/Stat.h" +#include "paddle/legacy/utils/GlobalConstants.h" +#include "paddle/legacy/utils/Stat.h" DECLARE_int32(trainer_id); DECLARE_string(save_dir); diff --git a/paddle/legacy/trainer/RemoteParameterUpdater.h b/paddle/legacy/trainer/RemoteParameterUpdater.h index 7a9b687ac2..6846853298 100644 --- a/paddle/legacy/trainer/RemoteParameterUpdater.h +++ b/paddle/legacy/trainer/RemoteParameterUpdater.h @@ -18,8 +18,8 @@ limitations under the License. */ #include #include "ParameterUpdater.h" #include "paddle/legacy/pserver/ParameterClient2.h" -#include "paddle/utils/Queue.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Queue.h" +#include "paddle/legacy/utils/Util.h" namespace paddle { diff --git a/paddle/legacy/trainer/Tester.cpp b/paddle/legacy/trainer/Tester.cpp index f7daf1327b..d977ca9657 100644 --- a/paddle/legacy/trainer/Tester.cpp +++ b/paddle/legacy/trainer/Tester.cpp @@ -24,10 +24,10 @@ limitations under the License. */ #include -#include "paddle/utils/GlobalConstants.h" -#include "paddle/utils/PythonUtil.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/GlobalConstants.h" +#include "paddle/legacy/utils/PythonUtil.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/Util.h" #include "TesterConfig.h" #include "paddle/legacy/gserver/gradientmachines/GradientMachineMode.h" diff --git a/paddle/legacy/trainer/Tester.h b/paddle/legacy/trainer/Tester.h index bce9775a09..a298602d1d 100644 --- a/paddle/legacy/trainer/Tester.h +++ b/paddle/legacy/trainer/Tester.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include diff --git a/paddle/legacy/trainer/TesterConfig.h b/paddle/legacy/trainer/TesterConfig.h index ef10c7dbf7..6c78f7cda3 100644 --- a/paddle/legacy/trainer/TesterConfig.h +++ b/paddle/legacy/trainer/TesterConfig.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include diff --git a/paddle/legacy/trainer/ThreadParameterUpdater.cpp b/paddle/legacy/trainer/ThreadParameterUpdater.cpp index 39e63c333e..0601bdf24e 100644 --- a/paddle/legacy/trainer/ThreadParameterUpdater.cpp +++ b/paddle/legacy/trainer/ThreadParameterUpdater.cpp @@ -14,11 +14,11 @@ limitations under the License. */ #include "ThreadParameterUpdater.h" -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" #include "paddle/legacy/math/SparseRowMatrix.h" #include "paddle/legacy/parameter/ThreadLocalBuffer.h" -#include "paddle/utils/Thread.h" +#include "paddle/legacy/utils/Thread.h" DECLARE_int32(trainer_count); diff --git a/paddle/legacy/trainer/ThreadParameterUpdater.h b/paddle/legacy/trainer/ThreadParameterUpdater.h index bd0ce99078..172287d4eb 100644 --- a/paddle/legacy/trainer/ThreadParameterUpdater.h +++ b/paddle/legacy/trainer/ThreadParameterUpdater.h @@ -20,7 +20,7 @@ limitations under the License. */ #include "paddle/legacy/parameter/OptimizerWithRegularizer.h" #include "paddle/legacy/parameter/Parameter.h" #include "paddle/legacy/parameter/Regularizer.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include #include diff --git a/paddle/legacy/trainer/Trainer.cpp b/paddle/legacy/trainer/Trainer.cpp index edfd72197e..2db754793c 100644 --- a/paddle/legacy/trainer/Trainer.cpp +++ b/paddle/legacy/trainer/Trainer.cpp @@ -23,11 +23,11 @@ limitations under the License. */ #include -#include "paddle/utils/Common.h" -#include "paddle/utils/GlobalConstants.h" -#include "paddle/utils/PythonUtil.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Common.h" +#include "paddle/legacy/utils/GlobalConstants.h" +#include "paddle/legacy/utils/PythonUtil.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/Util.h" #include "RemoteParameterUpdater.h" #include "TesterConfig.h" diff --git a/paddle/legacy/trainer/Trainer.h b/paddle/legacy/trainer/Trainer.h index 58acec1781..b467f9af0c 100644 --- a/paddle/legacy/trainer/Trainer.h +++ b/paddle/legacy/trainer/Trainer.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include diff --git a/paddle/legacy/trainer/TrainerBenchmark.cpp b/paddle/legacy/trainer/TrainerBenchmark.cpp index 173653c816..7f5bd23354 100644 --- a/paddle/legacy/trainer/TrainerBenchmark.cpp +++ b/paddle/legacy/trainer/TrainerBenchmark.cpp @@ -15,8 +15,8 @@ limitations under the License. */ #undef PADDLE_DISABLE_TIMER #include "Trainer.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/Util.h" DECLARE_int32(test_period); diff --git a/paddle/legacy/trainer/TrainerConfigHelper.cpp b/paddle/legacy/trainer/TrainerConfigHelper.cpp index 2b68d89e48..4d31ba8d71 100644 --- a/paddle/legacy/trainer/TrainerConfigHelper.cpp +++ b/paddle/legacy/trainer/TrainerConfigHelper.cpp @@ -15,8 +15,8 @@ limitations under the License. */ #include "TrainerConfigHelper.h" #include "ParamUtil.h" #include "TrainerConfig.pb.h" -#include "paddle/utils/Flags.h" -#include "paddle/utils/PythonUtil.h" +#include "paddle/legacy/utils/Flags.h" +#include "paddle/legacy/utils/PythonUtil.h" DECLARE_string(config); DECLARE_string(init_model_path); diff --git a/paddle/legacy/trainer/TrainerConfigHelper.h b/paddle/legacy/trainer/TrainerConfigHelper.h index b21dda964e..0e428bea2c 100644 --- a/paddle/legacy/trainer/TrainerConfigHelper.h +++ b/paddle/legacy/trainer/TrainerConfigHelper.h @@ -14,8 +14,8 @@ limitations under the License. */ #pragma once -#include -#include +#include +#include #include namespace paddle { diff --git a/paddle/legacy/trainer/TrainerInternal.cpp b/paddle/legacy/trainer/TrainerInternal.cpp index b4b1a87cd5..ee3dea6340 100644 --- a/paddle/legacy/trainer/TrainerInternal.cpp +++ b/paddle/legacy/trainer/TrainerInternal.cpp @@ -26,10 +26,10 @@ limitations under the License. */ #include "paddle/legacy/gserver/gradientmachines/NeuralNetwork.h" #include "paddle/legacy/gserver/layers/ValidationLayer.h" -#include "paddle/utils/GlobalConstants.h" -#include "paddle/utils/PythonUtil.h" -#include "paddle/utils/Stat.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/GlobalConstants.h" +#include "paddle/legacy/utils/PythonUtil.h" +#include "paddle/legacy/utils/Stat.h" +#include "paddle/legacy/utils/Util.h" #include "RemoteParameterUpdater.h" #include "ThreadParameterUpdater.h" diff --git a/paddle/legacy/trainer/TrainerInternal.h b/paddle/legacy/trainer/TrainerInternal.h index ecc87966dc..93919a68fc 100644 --- a/paddle/legacy/trainer/TrainerInternal.h +++ b/paddle/legacy/trainer/TrainerInternal.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include #include diff --git a/paddle/legacy/trainer/TrainerInternalConfig.h b/paddle/legacy/trainer/TrainerInternalConfig.h index 29d588e1be..b91b539323 100644 --- a/paddle/legacy/trainer/TrainerInternalConfig.h +++ b/paddle/legacy/trainer/TrainerInternalConfig.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #include diff --git a/paddle/legacy/trainer/TrainerMain.cpp b/paddle/legacy/trainer/TrainerMain.cpp index 115e5d88a2..911aeba192 100644 --- a/paddle/legacy/trainer/TrainerMain.cpp +++ b/paddle/legacy/trainer/TrainerMain.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include #include "paddle/legacy/pserver/ParameterServerController.h" -#include "paddle/utils/PythonUtil.h" +#include "paddle/legacy/utils/PythonUtil.h" #include "ParamUtil.h" #include "Trainer.h" diff --git a/paddle/legacy/trainer/tests/test_Compare.cpp b/paddle/legacy/trainer/tests/test_Compare.cpp index 9623c280eb..9bbb0a6013 100644 --- a/paddle/legacy/trainer/tests/test_Compare.cpp +++ b/paddle/legacy/trainer/tests/test_Compare.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include +#include #include "paddle/legacy/trainer/Trainer.h" diff --git a/paddle/legacy/trainer/tests/test_PyDataProviderWrapper.cpp b/paddle/legacy/trainer/tests/test_PyDataProviderWrapper.cpp index 94eaba2e2f..847adcfaba 100644 --- a/paddle/legacy/trainer/tests/test_PyDataProviderWrapper.cpp +++ b/paddle/legacy/trainer/tests/test_PyDataProviderWrapper.cpp @@ -18,7 +18,7 @@ limitations under the License. */ #include #include #include -#include +#include #include #include #include diff --git a/paddle/legacy/trainer/tests/test_Trainer.cpp b/paddle/legacy/trainer/tests/test_Trainer.cpp index 9fb80762fe..14ad0a2652 100644 --- a/paddle/legacy/trainer/tests/test_Trainer.cpp +++ b/paddle/legacy/trainer/tests/test_Trainer.cpp @@ -12,8 +12,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include -#include +#include +#include #include "paddle/legacy/trainer/Trainer.h" #include diff --git a/paddle/legacy/trainer/tests/test_TrainerOnePass.cpp b/paddle/legacy/trainer/tests/test_TrainerOnePass.cpp index 0e25e35443..3e5c5ea723 100644 --- a/paddle/legacy/trainer/tests/test_TrainerOnePass.cpp +++ b/paddle/legacy/trainer/tests/test_TrainerOnePass.cpp @@ -12,8 +12,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include -#include +#include +#include #include "paddle/legacy/trainer/Trainer.h" #include "paddle/legacy/trainer/TrainerInternal.h" diff --git a/paddle/legacy/trainer/tests/test_recurrent_machine_generation.cpp b/paddle/legacy/trainer/tests/test_recurrent_machine_generation.cpp index bd6ee0f01d..47b4e82cd3 100644 --- a/paddle/legacy/trainer/tests/test_recurrent_machine_generation.cpp +++ b/paddle/legacy/trainer/tests/test_recurrent_machine_generation.cpp @@ -15,7 +15,7 @@ limitations under the License. */ #include #include -#include +#include #include diff --git a/paddle/utils/.gitignore b/paddle/legacy/utils/.gitignore similarity index 100% rename from paddle/utils/.gitignore rename to paddle/legacy/utils/.gitignore diff --git a/paddle/utils/Any.h b/paddle/legacy/utils/Any.h similarity index 100% rename from paddle/utils/Any.h rename to paddle/legacy/utils/Any.h diff --git a/paddle/utils/CMakeLists.txt b/paddle/legacy/utils/CMakeLists.txt similarity index 100% rename from paddle/utils/CMakeLists.txt rename to paddle/legacy/utils/CMakeLists.txt diff --git a/paddle/utils/ClassRegistrar.h b/paddle/legacy/utils/ClassRegistrar.h similarity index 100% rename from paddle/utils/ClassRegistrar.h rename to paddle/legacy/utils/ClassRegistrar.h diff --git a/paddle/utils/Common.h b/paddle/legacy/utils/Common.h similarity index 100% rename from paddle/utils/Common.h rename to paddle/legacy/utils/Common.h diff --git a/paddle/utils/CpuId.cpp b/paddle/legacy/utils/CpuId.cpp similarity index 96% rename from paddle/utils/CpuId.cpp rename to paddle/legacy/utils/CpuId.cpp index 7186feef04..66e7c6606f 100644 --- a/paddle/utils/CpuId.cpp +++ b/paddle/legacy/utils/CpuId.cpp @@ -9,8 +9,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/CpuId.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/CpuId.h" +#include "paddle/legacy/utils/Util.h" #ifdef _WIN32 diff --git a/paddle/utils/CpuId.h b/paddle/legacy/utils/CpuId.h similarity index 100% rename from paddle/utils/CpuId.h rename to paddle/legacy/utils/CpuId.h diff --git a/paddle/utils/CustomStackTrace.cpp b/paddle/legacy/utils/CustomStackTrace.cpp similarity index 100% rename from paddle/utils/CustomStackTrace.cpp rename to paddle/legacy/utils/CustomStackTrace.cpp diff --git a/paddle/utils/CustomStackTrace.h b/paddle/legacy/utils/CustomStackTrace.h similarity index 100% rename from paddle/utils/CustomStackTrace.h rename to paddle/legacy/utils/CustomStackTrace.h diff --git a/paddle/utils/DynamicLoader.cpp b/paddle/legacy/utils/DynamicLoader.cpp similarity index 100% rename from paddle/utils/DynamicLoader.cpp rename to paddle/legacy/utils/DynamicLoader.cpp diff --git a/paddle/utils/DynamicLoader.h b/paddle/legacy/utils/DynamicLoader.h similarity index 100% rename from paddle/utils/DynamicLoader.h rename to paddle/legacy/utils/DynamicLoader.h diff --git a/paddle/utils/Error.h b/paddle/legacy/utils/Error.h similarity index 100% rename from paddle/utils/Error.h rename to paddle/legacy/utils/Error.h diff --git a/paddle/utils/Excepts.h b/paddle/legacy/utils/Excepts.h similarity index 100% rename from paddle/utils/Excepts.h rename to paddle/legacy/utils/Excepts.h diff --git a/paddle/utils/Flags.cpp b/paddle/legacy/utils/Flags.cpp similarity index 100% rename from paddle/utils/Flags.cpp rename to paddle/legacy/utils/Flags.cpp diff --git a/paddle/utils/Flags.h b/paddle/legacy/utils/Flags.h similarity index 100% rename from paddle/utils/Flags.h rename to paddle/legacy/utils/Flags.h diff --git a/paddle/utils/GlobalConstants.cpp b/paddle/legacy/utils/GlobalConstants.cpp similarity index 100% rename from paddle/utils/GlobalConstants.cpp rename to paddle/legacy/utils/GlobalConstants.cpp diff --git a/paddle/utils/GlobalConstants.h b/paddle/legacy/utils/GlobalConstants.h similarity index 100% rename from paddle/utils/GlobalConstants.h rename to paddle/legacy/utils/GlobalConstants.h diff --git a/paddle/utils/Locks.h b/paddle/legacy/utils/Locks.h similarity index 100% rename from paddle/utils/Locks.h rename to paddle/legacy/utils/Locks.h diff --git a/paddle/utils/Logging.cpp b/paddle/legacy/utils/Logging.cpp similarity index 100% rename from paddle/utils/Logging.cpp rename to paddle/legacy/utils/Logging.cpp diff --git a/paddle/utils/Logging.h b/paddle/legacy/utils/Logging.h similarity index 100% rename from paddle/utils/Logging.h rename to paddle/legacy/utils/Logging.h diff --git a/paddle/utils/PythonUtil.cpp b/paddle/legacy/utils/PythonUtil.cpp similarity index 100% rename from paddle/utils/PythonUtil.cpp rename to paddle/legacy/utils/PythonUtil.cpp diff --git a/paddle/utils/PythonUtil.h b/paddle/legacy/utils/PythonUtil.h similarity index 99% rename from paddle/utils/PythonUtil.h rename to paddle/legacy/utils/PythonUtil.h index 6f8d7e0930..b0c8612c37 100644 --- a/paddle/utils/PythonUtil.h +++ b/paddle/legacy/utils/PythonUtil.h @@ -14,7 +14,7 @@ limitations under the License. */ #pragma once // clang-format off -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" #ifndef PADDLE_NO_PYTHON // must include the following two blocks, otherwise, diff --git a/paddle/utils/Queue.h b/paddle/legacy/utils/Queue.h similarity index 100% rename from paddle/utils/Queue.h rename to paddle/legacy/utils/Queue.h diff --git a/paddle/utils/Stat.cpp b/paddle/legacy/utils/Stat.cpp similarity index 100% rename from paddle/utils/Stat.cpp rename to paddle/legacy/utils/Stat.cpp diff --git a/paddle/utils/Stat.h b/paddle/legacy/utils/Stat.h similarity index 100% rename from paddle/utils/Stat.h rename to paddle/legacy/utils/Stat.h diff --git a/paddle/utils/StringUtil.cpp b/paddle/legacy/utils/StringUtil.cpp similarity index 100% rename from paddle/utils/StringUtil.cpp rename to paddle/legacy/utils/StringUtil.cpp diff --git a/paddle/utils/StringUtil.h b/paddle/legacy/utils/StringUtil.h similarity index 100% rename from paddle/utils/StringUtil.h rename to paddle/legacy/utils/StringUtil.h diff --git a/paddle/utils/Thread.h b/paddle/legacy/utils/Thread.h similarity index 100% rename from paddle/utils/Thread.h rename to paddle/legacy/utils/Thread.h diff --git a/paddle/utils/ThreadLocal.cpp b/paddle/legacy/utils/ThreadLocal.cpp similarity index 100% rename from paddle/utils/ThreadLocal.cpp rename to paddle/legacy/utils/ThreadLocal.cpp diff --git a/paddle/utils/ThreadLocal.h b/paddle/legacy/utils/ThreadLocal.h similarity index 100% rename from paddle/utils/ThreadLocal.h rename to paddle/legacy/utils/ThreadLocal.h diff --git a/paddle/utils/Util.cpp b/paddle/legacy/utils/Util.cpp similarity index 100% rename from paddle/utils/Util.cpp rename to paddle/legacy/utils/Util.cpp diff --git a/paddle/utils/Util.h b/paddle/legacy/utils/Util.h similarity index 100% rename from paddle/utils/Util.h rename to paddle/legacy/utils/Util.h diff --git a/paddle/utils/Version.cpp b/paddle/legacy/utils/Version.cpp similarity index 100% rename from paddle/utils/Version.cpp rename to paddle/legacy/utils/Version.cpp diff --git a/paddle/utils/Version.h b/paddle/legacy/utils/Version.h similarity index 100% rename from paddle/utils/Version.h rename to paddle/legacy/utils/Version.h diff --git a/paddle/utils/arch/linux/Locks.cpp b/paddle/legacy/utils/arch/linux/Locks.cpp similarity index 97% rename from paddle/utils/arch/linux/Locks.cpp rename to paddle/legacy/utils/arch/linux/Locks.cpp index 409af8bce3..32d351e332 100644 --- a/paddle/utils/arch/linux/Locks.cpp +++ b/paddle/legacy/utils/arch/linux/Locks.cpp @@ -12,10 +12,10 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/Locks.h" +#include "paddle/legacy/utils/Locks.h" #include #include -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { class SemaphorePrivate { diff --git a/paddle/utils/arch/osx/Excepts.cpp b/paddle/legacy/utils/arch/osx/Excepts.cpp similarity index 97% rename from paddle/utils/arch/osx/Excepts.cpp rename to paddle/legacy/utils/arch/osx/Excepts.cpp index ac44461578..2b7d6dca84 100644 --- a/paddle/utils/arch/osx/Excepts.cpp +++ b/paddle/legacy/utils/arch/osx/Excepts.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/Excepts.h" +#include "paddle/legacy/utils/Excepts.h" #if defined(__APPLE__) || defined(__OSX__) #if defined(__arm__) || defined(__arm64__) diff --git a/paddle/utils/arch/osx/Locks.cpp b/paddle/legacy/utils/arch/osx/Locks.cpp similarity index 97% rename from paddle/utils/arch/osx/Locks.cpp rename to paddle/legacy/utils/arch/osx/Locks.cpp index f3905091bd..b68c48f0c3 100644 --- a/paddle/utils/arch/osx/Locks.cpp +++ b/paddle/legacy/utils/arch/osx/Locks.cpp @@ -12,11 +12,11 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/Locks.h" +#include "paddle/legacy/utils/Locks.h" #include #include #include -#include "paddle/utils/Logging.h" +#include "paddle/legacy/utils/Logging.h" namespace paddle { diff --git a/paddle/utils/enable_virtualenv.py b/paddle/legacy/utils/enable_virtualenv.py similarity index 100% rename from paddle/utils/enable_virtualenv.py rename to paddle/legacy/utils/enable_virtualenv.py diff --git a/paddle/utils/tests/CMakeLists.txt b/paddle/legacy/utils/tests/CMakeLists.txt similarity index 84% rename from paddle/utils/tests/CMakeLists.txt rename to paddle/legacy/utils/tests/CMakeLists.txt index c770ce1698..4af01db5c8 100644 --- a/paddle/utils/tests/CMakeLists.txt +++ b/paddle/legacy/utils/tests/CMakeLists.txt @@ -13,6 +13,6 @@ add_executable( link_paddle_exe(test_CustomStackTracePrint) if(NOT APPLE) add_test(NAME test_CustomStackTracePrint - COMMAND ${PADDLE_SOURCE_DIR}/paddle/utils/tests/test_CustomStackTracePrint.sh + COMMAND ${PADDLE_SOURCE_DIR}/paddle/legacy/utils/tests/test_CustomStackTracePrint.sh WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) endif() diff --git a/paddle/utils/tests/test_CustomStackTrace.cpp b/paddle/legacy/utils/tests/test_CustomStackTrace.cpp similarity index 94% rename from paddle/utils/tests/test_CustomStackTrace.cpp rename to paddle/legacy/utils/tests/test_CustomStackTrace.cpp index 4d5540b24c..2a418e3ae2 100644 --- a/paddle/utils/tests/test_CustomStackTrace.cpp +++ b/paddle/legacy/utils/tests/test_CustomStackTrace.cpp @@ -15,10 +15,10 @@ limitations under the License. */ #include // NOLINT #include // NOLINT -#include "paddle/utils/CustomStackTrace.h" -#include "paddle/utils/Locks.h" -#include "paddle/utils/StringUtil.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/CustomStackTrace.h" +#include "paddle/legacy/utils/Locks.h" +#include "paddle/legacy/utils/StringUtil.h" +#include "paddle/legacy/utils/Util.h" DEFINE_int32(test_thread_num, 10, "testing thread number"); diff --git a/paddle/utils/tests/test_CustomStackTracePrint.cpp b/paddle/legacy/utils/tests/test_CustomStackTracePrint.cpp similarity index 86% rename from paddle/utils/tests/test_CustomStackTracePrint.cpp rename to paddle/legacy/utils/tests/test_CustomStackTracePrint.cpp index 360c61c88a..78886a3ed9 100644 --- a/paddle/utils/tests/test_CustomStackTracePrint.cpp +++ b/paddle/legacy/utils/tests/test_CustomStackTracePrint.cpp @@ -12,9 +12,9 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/CustomStackTrace.h" -#include "paddle/utils/StringUtil.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/CustomStackTrace.h" +#include "paddle/legacy/utils/StringUtil.h" +#include "paddle/legacy/utils/Util.h" int main(int argc, char** argv) { paddle::initMain(argc, argv); diff --git a/paddle/utils/tests/test_CustomStackTracePrint.sh b/paddle/legacy/utils/tests/test_CustomStackTracePrint.sh similarity index 100% rename from paddle/utils/tests/test_CustomStackTracePrint.sh rename to paddle/legacy/utils/tests/test_CustomStackTracePrint.sh diff --git a/paddle/utils/tests/test_Error.cpp b/paddle/legacy/utils/tests/test_Error.cpp similarity index 96% rename from paddle/utils/tests/test_Error.cpp rename to paddle/legacy/utils/tests/test_Error.cpp index 6f311fa6b8..250c4d58a6 100644 --- a/paddle/utils/tests/test_Error.cpp +++ b/paddle/legacy/utils/tests/test_Error.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/Error.h" +#include "paddle/legacy/utils/Error.h" #include diff --git a/paddle/utils/tests/test_SIMDFlags.cpp b/paddle/legacy/utils/tests/test_SIMDFlags.cpp similarity index 94% rename from paddle/utils/tests/test_SIMDFlags.cpp rename to paddle/legacy/utils/tests/test_SIMDFlags.cpp index a808d456a6..6362210acd 100644 --- a/paddle/utils/tests/test_SIMDFlags.cpp +++ b/paddle/legacy/utils/tests/test_SIMDFlags.cpp @@ -11,9 +11,9 @@ limitations under the License. */ #include -#include "paddle/utils/CpuId.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/CpuId.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Util.h" using namespace paddle; // NOLINT diff --git a/paddle/utils/tests/test_SpinLock.cpp b/paddle/legacy/utils/tests/test_SpinLock.cpp similarity index 93% rename from paddle/utils/tests/test_SpinLock.cpp rename to paddle/legacy/utils/tests/test_SpinLock.cpp index cc34eb1f86..4cd7836d6a 100644 --- a/paddle/utils/tests/test_SpinLock.cpp +++ b/paddle/legacy/utils/tests/test_SpinLock.cpp @@ -17,9 +17,9 @@ limitations under the License. */ #include #include -#include "paddle/utils/Locks.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Locks.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Util.h" DEFINE_int32(test_thread_num, 100, "testing thread number"); diff --git a/paddle/utils/tests/test_StringUtils.cpp b/paddle/legacy/utils/tests/test_StringUtils.cpp similarity index 95% rename from paddle/utils/tests/test_StringUtils.cpp rename to paddle/legacy/utils/tests/test_StringUtils.cpp index 248f58a7f2..61d2815f09 100644 --- a/paddle/utils/tests/test_StringUtils.cpp +++ b/paddle/legacy/utils/tests/test_StringUtils.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/utils/StringUtil.h" +#include "paddle/legacy/utils/StringUtil.h" #include diff --git a/paddle/utils/tests/test_Thread.cpp b/paddle/legacy/utils/tests/test_Thread.cpp similarity index 98% rename from paddle/utils/tests/test_Thread.cpp rename to paddle/legacy/utils/tests/test_Thread.cpp index 6e2580c491..5e07da3236 100644 --- a/paddle/utils/tests/test_Thread.cpp +++ b/paddle/legacy/utils/tests/test_Thread.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include +#include #include using paddle::AsyncThreadPool; // NOLINT diff --git a/paddle/utils/tests/test_ThreadBarrier.cpp b/paddle/legacy/utils/tests/test_ThreadBarrier.cpp similarity index 94% rename from paddle/utils/tests/test_ThreadBarrier.cpp rename to paddle/legacy/utils/tests/test_ThreadBarrier.cpp index 554b1c1d4a..9c8851ae21 100644 --- a/paddle/utils/tests/test_ThreadBarrier.cpp +++ b/paddle/legacy/utils/tests/test_ThreadBarrier.cpp @@ -18,9 +18,9 @@ limitations under the License. */ #include #include -#include "paddle/utils/Locks.h" -#include "paddle/utils/Logging.h" -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Locks.h" +#include "paddle/legacy/utils/Logging.h" +#include "paddle/legacy/utils/Util.h" DEFINE_int32(test_thread_num, 100, "testing thread number"); diff --git a/paddle/testing/TestMain.cpp b/paddle/testing/TestMain.cpp index 3e14532d18..1811dbbd1a 100644 --- a/paddle/testing/TestMain.cpp +++ b/paddle/testing/TestMain.cpp @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include -#include "paddle/utils/Util.h" +#include "paddle/legacy/utils/Util.h" int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); diff --git a/proto/README.md b/proto/README.md new file mode 100644 index 0000000000..dda7ed7b3c --- /dev/null +++ b/proto/README.md @@ -0,0 +1,3 @@ +## protos in this folder are legacy v2 protos. + +## Please refer to paddle/fluid for latest version. diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index ea25f3ab35..797c0fbcc4 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -1,4 +1,4 @@ -file(GLOB UTILS_PY_FILES . ./paddle/utils/*.py) +file(GLOB UTILS_PY_FILES . ./paddle/legacy/utils/*.py) file(GLOB_RECURSE FLUID_PY_FILES ./paddle/fluid/*.py) set(PY_FILES paddle/__init__.py ${UTILS_PY_FILES} diff --git a/tools/codestyle/cpplint_pre_commit.hook b/tools/codestyle/cpplint_pre_commit.hook index f4190fb876..2c65222c8a 100755 --- a/tools/codestyle/cpplint_pre_commit.hook +++ b/tools/codestyle/cpplint_pre_commit.hook @@ -4,7 +4,7 @@ TOTAL_ERRORS=0 # The trick to remove deleted files: https://stackoverflow.com/a/2413151 for file in $(git diff --cached --name-status | awk '$1 != "D" {print $2}'); do - if [[ $file =~ ^(paddle/legacy/api/.*|paddle/legacy/capi/.*|paddle/contrib/.*|paddle/legacy/cuda/.*|paddle/legacy/function/.*|paddle/legacy/gserver/.*|paddle/legacy/math/.*|paddle/legacy/optimizer/.*|paddle/legacy/parameter/.*|paddle/legacy/pserver/.*|paddle/legacy/trainer/.*|paddle/utils/.*|paddle/testing/TestUtil.*) ]]; then + if [[ $file =~ ^(paddle/legacy/api/.*|paddle/legacy/capi/.*|paddle/contrib/.*|paddle/legacy/cuda/.*|paddle/legacy/function/.*|paddle/legacy/gserver/.*|paddle/legacy/math/.*|paddle/legacy/optimizer/.*|paddle/legacy/parameter/.*|paddle/legacy/pserver/.*|paddle/legacy/trainer/.*|paddle/legacy/utils/.*|paddle/testing/TestUtil.*) ]]; then continue; else cpplint --filter=-readability/fn_size $file; From d70a38d8ec08e6dd1093672ddcd47d36a4578a5e Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Tue, 3 Jul 2018 15:09:29 +0800 Subject: [PATCH 116/130] fix --- go/CMakeLists.txt | 2 +- go/cmd/master/master.go | 2 +- go/pserver/etcd_client.go | 2 +- .../inference/paddle_inference_api_tensorrt_subgraph_engine.cc | 2 +- paddle/fluid/inference/tensorrt/convert/io_converter.h | 2 +- paddle/fluid/inference/tensorrt/convert/op_converter.h | 2 +- paddle/fluid/inference/tensorrt/convert/ut_helper.h | 2 +- paddle/fluid/inference/tensorrt/engine.h | 2 +- paddle/fluid/operators/tensorrt_engine_op.cc | 2 +- paddle/legacy/trainer/tests/test_Compare.cpp | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/go/CMakeLists.txt b/go/CMakeLists.txt index 839b75a259..f3a9296c2c 100644 --- a/go/CMakeLists.txt +++ b/go/CMakeLists.txt @@ -20,4 +20,4 @@ add_subdirectory(master/c) add_subdirectory(master) add_subdirectory(pserver) add_subdirectory(pserver/client) -add_subdirectory(legacy/utils/networkhelper) +add_subdirectory(utils/networkhelper) diff --git a/go/cmd/master/master.go b/go/cmd/master/master.go index 6c1e4c7198..537df59c86 100644 --- a/go/cmd/master/master.go +++ b/go/cmd/master/master.go @@ -28,8 +28,8 @@ import ( log "github.com/inconshreveable/log15" "github.com/namsral/flag" - "github.com/PaddlePaddle/Paddle/go/legacy/utils/networkhelper" "github.com/PaddlePaddle/Paddle/go/master" + "github.com/PaddlePaddle/Paddle/go/utils/networkhelper" ) func main() { diff --git a/go/pserver/etcd_client.go b/go/pserver/etcd_client.go index 80b1abee5e..719013b1bb 100644 --- a/go/pserver/etcd_client.go +++ b/go/pserver/etcd_client.go @@ -21,7 +21,7 @@ import ( "strings" "time" - "github.com/PaddlePaddle/Paddle/go/legacy/utils/networkhelper" + "github.com/PaddlePaddle/Paddle/go/utils/networkhelper" "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/clientv3/concurrency" log "github.com/inconshreveable/log15" diff --git a/paddle/contrib/inference/paddle_inference_api_tensorrt_subgraph_engine.cc b/paddle/contrib/inference/paddle_inference_api_tensorrt_subgraph_engine.cc index 14554545d9..a11396cee9 100644 --- a/paddle/contrib/inference/paddle_inference_api_tensorrt_subgraph_engine.cc +++ b/paddle/contrib/inference/paddle_inference_api_tensorrt_subgraph_engine.cc @@ -15,7 +15,7 @@ #include "paddle/contrib/inference/paddle_inference_api.h" #include "paddle/contrib/inference/paddle_inference_api_impl.h" #include "paddle/fluid/inference/analysis/analyzer.h" -#include "paddle/fluid/inference/legacy/utils/singleton.h" +#include "paddle/fluid/inference/utils/singleton.h" namespace paddle { diff --git a/paddle/fluid/inference/tensorrt/convert/io_converter.h b/paddle/fluid/inference/tensorrt/convert/io_converter.h index fc8881f80c..71c48e085d 100644 --- a/paddle/fluid/inference/tensorrt/convert/io_converter.h +++ b/paddle/fluid/inference/tensorrt/convert/io_converter.h @@ -17,7 +17,7 @@ limitations under the License. */ #include #include #include "paddle/fluid/framework/lod_tensor.h" -#include "paddle/fluid/inference/legacy/utils/singleton.h" +#include "paddle/fluid/inference/utils/singleton.h" namespace paddle { namespace inference { diff --git a/paddle/fluid/inference/tensorrt/convert/op_converter.h b/paddle/fluid/inference/tensorrt/convert/op_converter.h index bf4e07fed0..6697952051 100644 --- a/paddle/fluid/inference/tensorrt/convert/op_converter.h +++ b/paddle/fluid/inference/tensorrt/convert/op_converter.h @@ -19,8 +19,8 @@ limitations under the License. */ #include "paddle/fluid/framework/block_desc.h" #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/framework/scope.h" -#include "paddle/fluid/inference/legacy/utils/singleton.h" #include "paddle/fluid/inference/tensorrt/engine.h" +#include "paddle/fluid/inference/utils/singleton.h" namespace paddle { namespace inference { diff --git a/paddle/fluid/inference/tensorrt/convert/ut_helper.h b/paddle/fluid/inference/tensorrt/convert/ut_helper.h index 0003b16d4e..3b1f531adc 100644 --- a/paddle/fluid/inference/tensorrt/convert/ut_helper.h +++ b/paddle/fluid/inference/tensorrt/convert/ut_helper.h @@ -25,9 +25,9 @@ limitations under the License. */ #include "paddle/fluid/framework/lod_tensor.h" #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/inference/analysis/helper.h" -#include "paddle/fluid/inference/legacy/utils/singleton.h" #include "paddle/fluid/inference/tensorrt/convert/op_converter.h" #include "paddle/fluid/inference/tensorrt/engine.h" +#include "paddle/fluid/inference/utils/singleton.h" namespace paddle { namespace inference { diff --git a/paddle/fluid/inference/tensorrt/engine.h b/paddle/fluid/inference/tensorrt/engine.h index 42a596deb1..b06a9bbc67 100644 --- a/paddle/fluid/inference/tensorrt/engine.h +++ b/paddle/fluid/inference/tensorrt/engine.h @@ -20,8 +20,8 @@ limitations under the License. */ #include #include #include "paddle/fluid/inference/engine.h" -#include "paddle/fluid/inference/legacy/utils/singleton.h" #include "paddle/fluid/inference/tensorrt/helper.h" +#include "paddle/fluid/inference/utils/singleton.h" namespace paddle { namespace inference { diff --git a/paddle/fluid/operators/tensorrt_engine_op.cc b/paddle/fluid/operators/tensorrt_engine_op.cc index b5d0578831..647cfc0a0a 100644 --- a/paddle/fluid/operators/tensorrt_engine_op.cc +++ b/paddle/fluid/operators/tensorrt_engine_op.cc @@ -18,9 +18,9 @@ #include #include "paddle/fluid/framework/op_registry.h" -#include "paddle/fluid/inference/legacy/utils/singleton.h" #include "paddle/fluid/inference/tensorrt/convert/op_converter.h" #include "paddle/fluid/inference/tensorrt/engine.h" +#include "paddle/fluid/inference/utils/singleton.h" #include "paddle/fluid/operators/tensorrt_engine_op.h" namespace paddle { diff --git a/paddle/legacy/trainer/tests/test_Compare.cpp b/paddle/legacy/trainer/tests/test_Compare.cpp index 9bbb0a6013..e37e546be8 100644 --- a/paddle/legacy/trainer/tests/test_Compare.cpp +++ b/paddle/legacy/trainer/tests/test_Compare.cpp @@ -23,7 +23,7 @@ using namespace paddle; // NOLINT using namespace std; // NOLINT static const string& configFile = - "./legacy/trainer/tests/sample_trainer_config.conf"; + "legacy/trainer/tests/sample_trainer_config.conf"; DECLARE_int32(gpu_id); DECLARE_bool(use_gpu); From 2d0e5592b5438c9b6ba88723f1d5fd7e4436d4b5 Mon Sep 17 00:00:00 2001 From: yuyang18 Date: Tue, 3 Jul 2018 16:07:12 +0800 Subject: [PATCH 117/130] Use std::map for Place <--> DeviceContext --- paddle/fluid/framework/details/op_handle_base.cc | 10 ++-------- paddle/fluid/framework/details/op_handle_base.h | 6 ++---- .../fluid/framework/details/reduce_and_gather.h | 3 +-- paddle/fluid/platform/device_context.cc | 3 ++- paddle/fluid/platform/device_context.h | 8 +++----- paddle/fluid/platform/place.h | 15 +++------------ 6 files changed, 13 insertions(+), 32 deletions(-) diff --git a/paddle/fluid/framework/details/op_handle_base.cc b/paddle/fluid/framework/details/op_handle_base.cc index 3560fabb42..d80bdcf15d 100644 --- a/paddle/fluid/framework/details/op_handle_base.cc +++ b/paddle/fluid/framework/details/op_handle_base.cc @@ -124,16 +124,10 @@ void OpHandleBase::RunAndRecordEvent(const std::function &callback) { #ifdef PADDLE_WITH_CUDA if (!events_.empty()) { // Use event std::function method = callback; - // NOTE(zcd): device context must be ordered here because RecordEvent - // will use a mutex to ensure the safe of multi-threads. - std::map ordered_ctxes; for (auto &p : dev_ctxes_) { - ordered_ctxes.emplace(p.second, p.first); - } - for (auto &p : ordered_ctxes) { method = [method, p, this]() { - static_cast(p.first)->RecordEvent( - events_.at(boost::get(p.second).device), + static_cast(p.second)->RecordEvent( + events_.at(boost::get(p.first).device), method); }; } diff --git a/paddle/fluid/framework/details/op_handle_base.h b/paddle/fluid/framework/details/op_handle_base.h index fbd90a3296..6aec178831 100644 --- a/paddle/fluid/framework/details/op_handle_base.h +++ b/paddle/fluid/framework/details/op_handle_base.h @@ -13,9 +13,9 @@ // limitations under the License. #pragma once +#include #include #include - #include "paddle/fluid/framework/details/var_handle.h" #include "paddle/fluid/platform/device_context.h" #include "paddle/fluid/platform/macros.h" @@ -92,9 +92,7 @@ class OpHandleBase { std::vector inputs_; std::vector outputs_; - std::unordered_map - dev_ctxes_; + std::map dev_ctxes_; #ifdef PADDLE_WITH_CUDA std::unordered_map events_; diff --git a/paddle/fluid/framework/details/reduce_and_gather.h b/paddle/fluid/framework/details/reduce_and_gather.h index a6ffb37313..c0cd873a1d 100644 --- a/paddle/fluid/framework/details/reduce_and_gather.h +++ b/paddle/fluid/framework/details/reduce_and_gather.h @@ -54,8 +54,7 @@ struct ReduceLoDTensor { inline void GatherSelectedRows( const std::vector &src_selecte_rows_, const std::vector &in_places, - const std::unordered_map &dev_ctxes, + const std::map &dev_ctxes, const platform::Place &out_place, SelectedRows *dst_selecte_rows) { PADDLE_ENFORCE(!src_selecte_rows_.empty()); diff --git a/paddle/fluid/platform/device_context.cc b/paddle/fluid/platform/device_context.cc index 6c50ab2685..2cc26da013 100644 --- a/paddle/fluid/platform/device_context.cc +++ b/paddle/fluid/platform/device_context.cc @@ -10,6 +10,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "paddle/fluid/platform/device_context.h" +#include #include #include #include @@ -35,7 +36,7 @@ DeviceContextPool::DeviceContextPool( const std::vector& places) { PADDLE_ENFORCE_GT(places.size(), 0); using PtrType = std::unique_ptr; - std::unordered_set set; + std::set set; for (auto& p : places) { set.insert(p); } diff --git a/paddle/fluid/platform/device_context.h b/paddle/fluid/platform/device_context.h index 292ffef1ae..88e0383146 100644 --- a/paddle/fluid/platform/device_context.h +++ b/paddle/fluid/platform/device_context.h @@ -27,12 +27,12 @@ limitations under the License. */ #include #endif +#include +#include "glog/logging.h" #include "paddle/fluid/platform/enforce.h" #include "paddle/fluid/platform/place.h" #include "unsupported/Eigen/CXX11/Tensor" -#include "glog/logging.h" - namespace paddle { namespace platform { @@ -201,9 +201,7 @@ class DeviceContextPool { private: static DeviceContextPool* pool; - std::unordered_map, PlaceHash> - device_contexts_; + std::map> device_contexts_; DISABLE_COPY_AND_ASSIGN(DeviceContextPool); }; diff --git a/paddle/fluid/platform/place.h b/paddle/fluid/platform/place.h index ad54a87899..e3ee504f3d 100644 --- a/paddle/fluid/platform/place.h +++ b/paddle/fluid/platform/place.h @@ -30,6 +30,7 @@ struct CPUPlace { // needed for variant equality comparison inline bool operator==(const CPUPlace &) const { return true; } inline bool operator!=(const CPUPlace &) const { return false; } + inline bool operator<(const CPUPlace &) const { return false; } }; struct CUDAPlace { @@ -42,6 +43,7 @@ struct CUDAPlace { return device == o.device; } inline bool operator!=(const CUDAPlace &o) const { return !(*this == o); } + inline bool operator<(const CUDAPlace &o) const { return device < o.device; } int device; }; @@ -52,6 +54,7 @@ struct CUDAPinnedPlace { // needed for variant equality comparison inline bool operator==(const CUDAPinnedPlace &) const { return true; } inline bool operator!=(const CUDAPinnedPlace &) const { return false; } + inline bool operator<(const CUDAPinnedPlace &) const { return false; } }; struct IsCUDAPlace : public boost::static_visitor { @@ -89,18 +92,6 @@ bool is_cuda_pinned_place(const Place &); bool places_are_same_class(const Place &, const Place &); bool is_same_place(const Place &, const Place &); -struct PlaceHash { - std::size_t operator()(const Place &p) const { - constexpr size_t num_dev_bits = 4; - std::hash ihash; - size_t dev_id = 0; - if (is_gpu_place(p)) { - dev_id = boost::get(p).device; - } - return ihash(dev_id << num_dev_bits | p.which()); - } -}; - std::ostream &operator<<(std::ostream &, const Place &); template From 0cefe857c48ca469f19164936531d52ba1278ecc Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Tue, 3 Jul 2018 17:03:29 +0800 Subject: [PATCH 118/130] add two versions of paddle.tgz for develop branch --- doc/v2/howto/capi/compile_paddle_lib_cn.md | 9 +++++++-- doc/v2/howto/capi/compile_paddle_lib_en.md | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/doc/v2/howto/capi/compile_paddle_lib_cn.md b/doc/v2/howto/capi/compile_paddle_lib_cn.md index e223fd33a8..2c87e9afc6 100644 --- a/doc/v2/howto/capi/compile_paddle_lib_cn.md +++ b/doc/v2/howto/capi/compile_paddle_lib_cn.md @@ -18,7 +18,7 @@ cpu_avx_openblas -暂无 +paddle.tgz cpu_noavx_openblas @@ -35,7 +35,12 @@ cuda8.0_cudnn7_avx_mkl paddle.tgz - + + +cuda9.0_cudnn7_avx_mkl +paddle.tgz + + ### 从源码编译 diff --git a/doc/v2/howto/capi/compile_paddle_lib_en.md b/doc/v2/howto/capi/compile_paddle_lib_en.md index 6212a30811..3fa8a18a9f 100644 --- a/doc/v2/howto/capi/compile_paddle_lib_en.md +++ b/doc/v2/howto/capi/compile_paddle_lib_en.md @@ -17,7 +17,7 @@ cpu_avx_openblas -- +paddle.tgz cpu_noavx_openblas @@ -34,7 +34,12 @@ cuda8.0_cudnn7_avx_mkl paddle.tgz - + + +cuda9.0_cudnn7_avx_mkl +paddle.tgz + + ### From source From 93da8e27110c8ec045a65e76d18f4eac9fa6bad8 Mon Sep 17 00:00:00 2001 From: Xin Pan Date: Tue, 3 Jul 2018 20:12:04 +0800 Subject: [PATCH 119/130] update develop version --- python/setup.py.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/setup.py.in b/python/setup.py.in index d92abf6088..51380149d0 100644 --- a/python/setup.py.in +++ b/python/setup.py.in @@ -5,7 +5,7 @@ class BinaryDistribution(Distribution): return True MAJOR = 0 -MINOR = 11 +MINOR = 14 PATCH = 0 RC = 0 ISTAGED = False From 26ff5a53eeaf44856052b69b9b5d5bf6999376f1 Mon Sep 17 00:00:00 2001 From: Wu Yi Date: Tue, 3 Jul 2018 23:03:34 +0800 Subject: [PATCH 120/130] Add note when import core.so error (#11918) * add note when import core.so error * update --- python/paddle/fluid/framework.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/python/paddle/fluid/framework.py b/python/paddle/fluid/framework.py index 9dcd907451..93cd6b621a 100644 --- a/python/paddle/fluid/framework.py +++ b/python/paddle/fluid/framework.py @@ -19,7 +19,16 @@ import re import numpy as np import proto.framework_pb2 as framework_pb2 -from . import core +try: + from . import core +except ImportError, e: + raise ImportError( + """NOTE: You may need to run \"export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH\" + if you encounters \"libmkldnn.so not found\" errors. If you have python + installed in other directory, replace \"/usr/local/lib\" with your own + directory. The original error is: """ % str(e)) +except Exception, e: + raise e import unique_name __all__ = [ From a1e88c467a65ec5499b70e1774c54f02ec3cfb61 Mon Sep 17 00:00:00 2001 From: yuyang18 Date: Wed, 4 Jul 2018 11:35:56 +0800 Subject: [PATCH 121/130] Fix import error --- python/paddle/fluid/framework.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/paddle/fluid/framework.py b/python/paddle/fluid/framework.py index 93cd6b621a..ea3117e02b 100644 --- a/python/paddle/fluid/framework.py +++ b/python/paddle/fluid/framework.py @@ -26,7 +26,7 @@ except ImportError, e: """NOTE: You may need to run \"export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH\" if you encounters \"libmkldnn.so not found\" errors. If you have python installed in other directory, replace \"/usr/local/lib\" with your own - directory. The original error is: """ % str(e)) + directory. The original error is: \n""" + e.message) except Exception, e: raise e import unique_name From 94e3cff26a4e888666b9533fcb55ef398a1bff62 Mon Sep 17 00:00:00 2001 From: yuyang18 Date: Wed, 4 Jul 2018 13:56:36 +0800 Subject: [PATCH 122/130] Check API changes --- paddle/scripts/paddle_build.sh | 15 +++++++++++++++ tools/diff_api.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 tools/diff_api.py diff --git a/paddle/scripts/paddle_build.sh b/paddle/scripts/paddle_build.sh index d8f0b76b7b..09bbe4185e 100755 --- a/paddle/scripts/paddle_build.sh +++ b/paddle/scripts/paddle_build.sh @@ -312,6 +312,20 @@ EOF fi } +function assert_api_not_changed() { + mkdir -p ${PADDLE_ROOT}/build/.check_api_workspace + cd ${PADDLE_ROOT}/build/.check_api_workspace + virtualenv .env + source .env/bin/activate + pip install ${PADDLE_ROOT}/build/python/dist/*whl + curl ${PADDLE_API_SPEC_URL:-https://raw.githubusercontent.com/reyoung/FluidAPISpec/master/API.spec} \ + > origin.spec + python ${PADDLE_ROOT}/tools/print_signatures.py paddle.fluid > new.spec + python ${PADDLE_ROOT}/tools/diff_api.py origin.spec new.spec + deactivate +} + + function single_test() { TEST_NAME=$1 if [ -z "${TEST_NAME}" ]; then @@ -550,6 +564,7 @@ function main() { cicheck) cmake_gen ${PYTHON_ABI:-""} build + assert_api_not_changed run_test gen_capi_package gen_fluid_inference_lib diff --git a/tools/diff_api.py b/tools/diff_api.py new file mode 100644 index 0000000000..cf9f2c72cb --- /dev/null +++ b/tools/diff_api.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python +from __future__ import print_function +import difflib +import sys + +with open(sys.argv[1], 'r') as f: + origin = f.read() + origin = origin.splitlines() + +with open(sys.argv[2], 'r') as f: + new = f.read() + new = new.splitlines() + +differ = difflib.Differ() +result = differ.compare(origin, new) + +error = False +print('API Difference is: ') +for each_diff in result: + if each_diff[0] in ['-', '?']: # delete or change API is not allowed + error = True + elif each_diff[0] == '+': + # only new layers is allowed. + if not each_diff.startswith('+ paddle.fluid.layers.'): + error = True + + if each_diff[0] != ' ': + print(each_diff) + +if error: + sys.exit(1) From 36d9e4be34f8a1e1177e50514c557ba99f4c5dbf Mon Sep 17 00:00:00 2001 From: yuyang18 Date: Wed, 4 Jul 2018 14:28:43 +0800 Subject: [PATCH 123/130] Try to change API --- python/paddle/fluid/io.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/python/paddle/fluid/io.py b/python/paddle/fluid/io.py index 5c8f4f6507..9b46d1ae2d 100644 --- a/python/paddle/fluid/io.py +++ b/python/paddle/fluid/io.py @@ -27,10 +27,14 @@ __all__ = [ 'get_inference_program', 'save_checkpoint', 'load_checkpoint', 'clean_checkpoint', 'load_persist_vars_without_grad', 'load_lookup_table_vars', 'save_persist_vars_without_grad', - 'get_latest_checkpoint_serial' + 'get_latest_checkpoint_serial', 'foo' ] +def foo(): + pass + + def is_parameter(var): """ Check whether the given variable is an instance of Parameter. From 26d128037147270f8abc90e211fed615c3b38a14 Mon Sep 17 00:00:00 2001 From: yuyang18 Date: Wed, 4 Jul 2018 14:49:47 +0800 Subject: [PATCH 124/130] Revert "Try to change API" This reverts commit 36d9e4be34f8a1e1177e50514c557ba99f4c5dbf. --- python/paddle/fluid/io.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/python/paddle/fluid/io.py b/python/paddle/fluid/io.py index 9b46d1ae2d..5c8f4f6507 100644 --- a/python/paddle/fluid/io.py +++ b/python/paddle/fluid/io.py @@ -27,14 +27,10 @@ __all__ = [ 'get_inference_program', 'save_checkpoint', 'load_checkpoint', 'clean_checkpoint', 'load_persist_vars_without_grad', 'load_lookup_table_vars', 'save_persist_vars_without_grad', - 'get_latest_checkpoint_serial', 'foo' + 'get_latest_checkpoint_serial' ] -def foo(): - pass - - def is_parameter(var): """ Check whether the given variable is an instance of Parameter. From 285e7ac531908992b43b97dc831a9ba6e2e2b91c Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Wed, 4 Jul 2018 18:13:09 +0800 Subject: [PATCH 125/130] merge fluid lookup table into abacus one --- .../distributed_lookup_table_design.md | 27 ++++++++++ .../design/dist_train/prefetch_parameter.md | 50 ------------------ .../src/fluid_lookup_remote_table.graffle | Bin 0 -> 14069 bytes .../src/fluid_lookup_remote_table.png | Bin 0 -> 324447 bytes .../dist_train/src/lookup_local_table.graffle | Bin 11311 -> 0 bytes .../dist_train/src/lookup_local_table.png | Bin 303842 -> 0 bytes .../src/lookup_remote_table.graffle | Bin 10636 -> 0 bytes .../dist_train/src/lookup_remote_table.png | Bin 290825 -> 0 bytes .../dist_train/src/split_parameter.graffle | Bin 7065 -> 0 bytes .../design/dist_train/src/split_parameter.png | Bin 78741 -> 0 bytes 10 files changed, 27 insertions(+), 50 deletions(-) delete mode 100644 doc/fluid/design/dist_train/prefetch_parameter.md create mode 100644 doc/fluid/design/dist_train/src/fluid_lookup_remote_table.graffle create mode 100644 doc/fluid/design/dist_train/src/fluid_lookup_remote_table.png delete mode 100644 doc/fluid/design/dist_train/src/lookup_local_table.graffle delete mode 100644 doc/fluid/design/dist_train/src/lookup_local_table.png delete mode 100644 doc/fluid/design/dist_train/src/lookup_remote_table.graffle delete mode 100644 doc/fluid/design/dist_train/src/lookup_remote_table.png delete mode 100644 doc/fluid/design/dist_train/src/split_parameter.graffle delete mode 100644 doc/fluid/design/dist_train/src/split_parameter.png diff --git a/doc/fluid/design/dist_train/distributed_lookup_table_design.md b/doc/fluid/design/dist_train/distributed_lookup_table_design.md index 9887291389..b8fa6b46d7 100644 --- a/doc/fluid/design/dist_train/distributed_lookup_table_design.md +++ b/doc/fluid/design/dist_train/distributed_lookup_table_design.md @@ -119,6 +119,33 @@ optimization algorithm $f$ runs on the storage service. - Con: the storage service needs to be able to run the optimization algorithm. +## Distributed Sparse Table in Fluid + +For another design, we can implement a distributed sparse table in Fluid, +and don't need to maintain an external storage component while training. + +Prior to reading this design, it would be useful for the reader to make themselves +familiar with Fluid [Distributed Training Architecture](./distributed_architecture.md) +and [Parameter Server](./parameter_server.md). + +![fluid lookup remote table](./src/fluid_lookup_remote_table.png) + +Partition a large table into multiple pserver instances +1. `DistributeTranspiler` would split the table partitioned into some small +table blocks with some partitioned algorithms such as +[RoundRobin](https://en.wikipedia.org/wiki/Round-robin_scheduling), +[Hash](https://en.wikipedia.org/wiki/Hash) and etc... +1. For some cases, the range of input `Ids` is very wide and unpredictable, so the sparse +table would be able to fill a new value for the id that didn't appear before with +zero, uniform random or Gaussian distribution. + +For each Trainer's training process: +1. In the forward pass, we use `pre-fetch` op to pre-fetch parameter blocks according to the +input `Ids` from PServers instead of the local `lookup_table` op, and then merge the blocks +into a parameter `W`. +1. Compute `GRAD@W'` in the backward pass using the pre-fetched `W` and send it to PServer to +execute the optimize pass. + ## Conclusion Let us do the "storage service does not optimize" solution first, as a diff --git a/doc/fluid/design/dist_train/prefetch_parameter.md b/doc/fluid/design/dist_train/prefetch_parameter.md deleted file mode 100644 index 7cea942279..0000000000 --- a/doc/fluid/design/dist_train/prefetch_parameter.md +++ /dev/null @@ -1,50 +0,0 @@ -# Design Doc: Lookup Remote Table while Distributed training - -## Abstract - -We propose an approach to pre-fetch the parameters from a Parameter Server while distributed training so that Fluid can train a model with the very large parameter that cannot be stored in one trainer's memory. - -## Background - -For an embedding layer, the trainable parameter may be very large, and it is likely that it may not be able to be stored in one trainer's memory. In Fluid distributed training, -the [Distributed Transpiler](./parameter_server.md#distributed-transpiler) would split every parameter into some small parameters that stored on the Parameter Server. Hence, we can pre-fetch the parameter from the specified Parameter Server using the input `Ids`. - -## Design - -Prior to reading this design, it would be useful for the reader to make themselves familiar with Fluid [Distributed Training Architecture](./distributed_architecture.md) and -[Parameter Server](./parameter_server.md). - -The execution of `lookup local table` is as follows: - - - -For some cases, the parameter(`weight`) may be very large, such as 10 billion features, the entire -data could not be stored in one trainer's memory, so we need to partition this parameter and -pre-fetch it at the beginning of each mini-batch, and we call it `lookup remote table`: - - - -The processing flow of `lookup remote table` is as follows: - -1. partitioned parameter - - - - - **Distributed Transpiler** would split the large parameters - (`weight`) into some partitioned parameters (`weight_0`, `weight_1`, `weight_2`) as shown in the figure above. - - We can use some algorithms to distribute the partitioned parameters, such as `round-robin` or `hash-name`. - -1. pre-fetching parameter at the beginning of each mini-batch - - - `prefetch_rpc` operator would prefetch the parameter from different Parameter - Servers using the input `Ids`. We use [SelectedRows](../../../design/selected_rows.md) - as the received variable type. - - `merge_selected_rows` operator would merge the received parameters into one - `SelectedRows` variable. - -## TODO - -- `prefetch_rpc` operator to send rows index and receive SelectedRows variables. -- `lookup_table` need to support `SelectedRows` variable type as input `Weight`. -- Async Update, To avoid slow-node, Async update is important for distributed training, - we need a design doc and implement it in future. diff --git a/doc/fluid/design/dist_train/src/fluid_lookup_remote_table.graffle b/doc/fluid/design/dist_train/src/fluid_lookup_remote_table.graffle new file mode 100644 index 0000000000000000000000000000000000000000..96ca6d48f43bd9f49c6861dab006e2037873db87 GIT binary patch literal 14069 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 rAtUFCopO@hT@p~ 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⋘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 W>WW?il1VGz9}^=B!(x5MGyehp9xhb? literal 0 HcmV?d00001 diff --git a/doc/fluid/design/dist_train/src/lookup_local_table.graffle b/doc/fluid/design/dist_train/src/lookup_local_table.graffle deleted file mode 100644 index 180004cec944783468158ebcacd430e14a4fb2bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11311 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 DP$N6u diff --git a/doc/fluid/design/dist_train/src/lookup_local_table.png b/doc/fluid/design/dist_train/src/lookup_local_table.png deleted file mode 100644 index e5719f39e5f33fa0dca8d42c9765b3b5b0dd77eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 303842 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

?G?HtU@uzoMnK{Ea` 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%0Dyg%uTGWzXP{sYxt8{&2c6X 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

7L z)XNqA_DXcV%NyIDJtTsKXDR#nHG~u)jaybPC~$Z|5hd#5s{K|q_ns1^Hc=Xk^q!|I z+`sEE<(`!0k~P&=_dcY`z(;l5Fdw(OTF9Z`hw-SOZ`Nop2hi~Ye|qwd1JqElvsY_O zf#SfwnK)USDwh7tjRb!|G)jeaNS#5V`zHgOc^L)Yo`A167zADuTzRE!#onT>MMY|j zZ5d#u*5-Ytpmx_$V)~JJ3is`@&|iCJ19D7Om#i|J1(jHtEfry|!gc)h=d73A_p0C+ zcZSa~RN3&Zo8FNcfMW3n z6`ab>W&^>q25Q;;*4fQrNQFCBaZn*>yW^n`nuo}I{bz3Ts-^qh=nmiU04MnR3GJcp z=D>_&tU#mvg8otJ-LG<#H1>z7y{@Bp#pq*9f6WAqTj%nhX@y&nhPet4Ctbt6J!+-A z^7U7Jl}&Z4tprp@L*MG@F~|6a7#x0f#&~^>O9sq6IpiR{Lh5Lj#aWP5mP^TXMKxM( zz&)(pg$C8ZU2crD2`;8!9(|z4 z%0A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%0D6iTUEKD86mD}1 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

wOI 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

_%yJS$tS}dIX!2ejp_5^2&Juge13htAlIzz|C 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

DoUb$;_{O>rWM6so%r(+e@?6(q6z1@NSn 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 x{iZbQFiK-SqE@e!lA# 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≫P@ciP{~0@#0F98f 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 diff --git a/doc/fluid/design/dist_train/src/split_parameter.graffle b/doc/fluid/design/dist_train/src/split_parameter.graffle deleted file mode 100644 index db1f8dc2c7888d0f71337142bcccd0faeb09efe8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7065 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

o0oqNL~|h~I|13=pNSSXi%P6wpE5H;Bsa40dA? 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 From e343afb1a9b6131f0e652685708aeb3babe4a5ff Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Wed, 4 Jul 2018 19:26:05 +0800 Subject: [PATCH 126/130] polish sentense --- .../design/dist_train/distributed_lookup_table_design.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/fluid/design/dist_train/distributed_lookup_table_design.md b/doc/fluid/design/dist_train/distributed_lookup_table_design.md index b8fa6b46d7..97f890c88e 100644 --- a/doc/fluid/design/dist_train/distributed_lookup_table_design.md +++ b/doc/fluid/design/dist_train/distributed_lookup_table_design.md @@ -124,9 +124,8 @@ optimization algorithm $f$ runs on the storage service. For another design, we can implement a distributed sparse table in Fluid, and don't need to maintain an external storage component while training. -Prior to reading this design, it would be useful for the reader to make themselves -familiar with Fluid [Distributed Training Architecture](./distributed_architecture.md) -and [Parameter Server](./parameter_server.md). +You may need to read Fluid [Distributed Training Architecture](./distributed_architecture.md) +and [Parameter Server](./parameter_server.md) before going on. ![fluid lookup remote table](./src/fluid_lookup_remote_table.png) From a0fefc27d7d3df2553e49229343b94ad59ed1b3e Mon Sep 17 00:00:00 2001 From: Wu Yi Date: Wed, 4 Jul 2018 21:01:43 +0800 Subject: [PATCH 127/130] Add NCCL2 dist train design doc (#11885) * add_nccl2_dist_design * update * update by comments --- .../design/dist_train/dist_train_nccl2.md | 35 ++++++++++++++++++ .../design/dist_train/src/ncc2_design.graffle | Bin 0 -> 6823 bytes .../design/dist_train/src/ncc2_design.png | Bin 0 -> 93754 bytes 3 files changed, 35 insertions(+) create mode 100644 doc/fluid/design/dist_train/dist_train_nccl2.md create mode 100644 doc/fluid/design/dist_train/src/ncc2_design.graffle create mode 100644 doc/fluid/design/dist_train/src/ncc2_design.png diff --git a/doc/fluid/design/dist_train/dist_train_nccl2.md b/doc/fluid/design/dist_train/dist_train_nccl2.md new file mode 100644 index 0000000000..aa7455ec5d --- /dev/null +++ b/doc/fluid/design/dist_train/dist_train_nccl2.md @@ -0,0 +1,35 @@ +# Distributed Training with NCCL2 + +We design a pattern that can enable training with `ParallelExecutor` and +using [NCCL2](https://developer.nvidia.com/nccl) as it's collective +communication library. + +In `ParallelExecutor` we can use `AllReduce` or `Reduce` and `Broadcast` +to do multi GPU training. And if we initialize NCCL2 communicators as +ranks in a distributed environment, we can simply run the `ParallelExecutor` +as a distributed program! The only thing that may be different than in +the single node version is that we need to broadcast the NCCL unique ID +to all the nodes, and initialize communicators using that ID, so NCCL2 +will know each other as ranks. + +To achieve this feature, we introduce a new operator: `gen_nccl_id` op, +so we are ***not*** "bind to" running NCCL2 with MPI, we can run it in +what ever platform you like. + +It have two running modes: + +1. Generate and broadcast mode, which should be used on trainer 0; +1. Listen and fetch mode, which should be used on trainers other than 0. + +In both two modes, this op can save the NCCL ID into current scope as a +persistable variable, Then we can insert this op at the end of +"startup program" of fluid, so that all workers can get the same ID to +initialize NCCL communicator objects. + + + +The above figure indicates the general process when training with NCCL2 +distributed. Each trainer have the number of communicators equal to the +number of GPUs, but the ranks should match the global ranks number: here +we have total 8 GPUs, so `nranks==8`, for each trainer, the ranks should +be from 0 ~ 3 on trainer 0 and 4 ~ 7 on trainer 1. diff --git a/doc/fluid/design/dist_train/src/ncc2_design.graffle b/doc/fluid/design/dist_train/src/ncc2_design.graffle new file mode 100644 index 0000000000000000000000000000000000000000..7d2753bbb03bc28c7a0054bb0aa424deb072ffbf GIT binary patch literal 6823 zcmV;Y8d&8YiwFP!000030PUS=m!e3z$6rr<3U9x;GdH_ZR+paYz9-le7Zh0(Po6V} zO+*kBP}Dj7-EV-Hsi~Qjl{HnjW{T|7CCfja2qK>67ZDK3r~ln8{mRykVmAza{{_8A zeyP}j8Cq`O{Qip~a~~VO{O=zhKK&Onpk-~yR#v_nCzYW>^?17S%g1UJtX95VtuiuG z8TNQdu0R{rDl7a_`DLCYtKX{CG)?dIOm%OD%S;$ohf%n)qh#NM#y-LX_f}&40<$?< zzbFnoYPn|e$A`as^6dQ|S$3|eC-A&_lzpmZ$Kh!`iu7#bFQ4Khg601MW_KSh1J{Yd z&FX#tw_1@toB4MAQ?-zssnG^`kHMng2!_}3GsUOs$#Px-IZ<6r27GC9Q z&V=S>X$Q&kT5^NLcI@a6l=xIVZJ*L@T+5Doq3PMy^L&KCRW7+&bz|4?uZpFy(sMn( z)E%1+H!#oWx-?gX>A8XTlJ)Dt^mQk&lP}T7uo%+ZhKVj6sQM^@K`<*^?K5qSBEKQE z-$?v+TOSSCU(ne7aBF96*VY5ex8HnGLYUZZuYy73I&Sc0`4F}q1-;gb-=Kv%2_MYD zM`;nlML8uZOpOmW?+aKzXzkj`?d0stdoEKTKOj&j5L3(p!GWb=Y`)Fc4%LZZ<#4ZI?^0QV0=&O!B&rN z6z|F&&zu`OT_JXPu|=aL`=^fM@)D1Nc&=MvdZxIL95qa&r|0GW%WW^oPgJimNTSfQ zzexsX+vl6dR*vmy7%t!F6vw(}T-c#!1F`tn@17+-H9U&mldz?0_vB?mpILb^E%Ivx zc`?-mfS=OfILr>m8?U9yA^@`S#-(DnE;aNw%K-SUb1P!d7gI*rhD_`GBrtaUkA~;>Btdh#_m3(7&eOZOu$Jw;wEcp}pu6_6_PR{}rCGq

HFtEcYT&dOHE~ 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 VpQ@|u$6o&U@P9sET+a`#0055AlOq5C literal 0 HcmV?d00001 diff --git a/doc/fluid/design/dist_train/src/ncc2_design.png b/doc/fluid/design/dist_train/src/ncc2_design.png new file mode 100644 index 0000000000000000000000000000000000000000..da0d5ee81f5dfeb4ca1356601b0bb5870456e3d6 GIT binary patch literal 93754 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 nP!h!1uWC_#V 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 WYEkQvizfj7o+)cQDOG&+{(k^tRck*0 literal 0 HcmV?d00001 From 4f555909cedc4af94e74f3ad5c5a5c09ebc4792d Mon Sep 17 00:00:00 2001 From: Yan Chunwei Date: Thu, 5 Jul 2018 09:18:02 +0800 Subject: [PATCH 128/130] analysis/code clean (#11964) --- paddle/fluid/inference/analysis/README.md | 3 ++- paddle/fluid/inference/analysis/pass.h | 13 ------------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/paddle/fluid/inference/analysis/README.md b/paddle/fluid/inference/analysis/README.md index 6fd73958bc..70adb4a974 100644 --- a/paddle/fluid/inference/analysis/README.md +++ b/paddle/fluid/inference/analysis/README.md @@ -54,4 +54,5 @@ It can be used as a helper class that draws the modified graph after each pass. There is some helper legacy/function/class for analysis. - [dot.h](./dot.h) give a easy to use interface for generating `DOT` codes, -- [graph_traits.h](./graph_traits.h) contains the graph traversal algorithms, it uses `iterator` to make the algorithms easy to share across different passes. +- [graph_traits.h](./graph_traits.h) contains the interfaces of the graph traversal algorithms, it uses `iterator`to make the algorithms easy to share across different passes, +there are some implementations in [data_flow_graph.cc](./data_flow_graph.cc) , such as BFS and DFS.. diff --git a/paddle/fluid/inference/analysis/pass.h b/paddle/fluid/inference/analysis/pass.h index 25c566ebfa..6b4dbb3bb5 100644 --- a/paddle/fluid/inference/analysis/pass.h +++ b/paddle/fluid/inference/analysis/pass.h @@ -32,19 +32,6 @@ class Pass { public: Pass() = default; virtual ~Pass() = default; - // Virtual method overridden by subclasses to do only necessary initialization - // before any pass is run. - // virtual bool Initialize() { return false; } - // There is some passes such as FlowToDataFlowGraphPass that needs a - // ProgramDesc. Here use the native ProgramDesc ProtoBuf message, so that it - // only couple with the proto file. - // virtual bool Initialize(const framework::proto::ProgramDesc &desc) { return - // false; } - // There are some Passes such as DataFlowGraphToFluidPass that will output a - // ProgramDesc. - // virtual bool Initialize(framework::proto::ProgramDesc *desc) { return - // false; } - // Mutable Pass. virtual bool Initialize(Argument *argument) { return false; } // Readonly Pass. From 99a99ec7e3b9596eee460be2900ed75b7dcdc1d9 Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Thu, 5 Jul 2018 13:02:47 +0800 Subject: [PATCH 129/130] "remove lapack" (#11966) --- paddle/fluid/operators/math/blas.h | 17 ----------------- paddle/fluid/operators/math/math_function.h | 17 ----------------- paddle/fluid/platform/dynload/dynamic_loader.cc | 10 ---------- paddle/fluid/platform/dynload/dynamic_loader.h | 1 - 4 files changed, 45 deletions(-) diff --git a/paddle/fluid/operators/math/blas.h b/paddle/fluid/operators/math/blas.h index a907d6a71b..363cddffa5 100644 --- a/paddle/fluid/operators/math/blas.h +++ b/paddle/fluid/operators/math/blas.h @@ -23,23 +23,6 @@ #ifdef PADDLE_USE_OPENBLAS #include -#ifdef LAPACK_FOUND -#include -#endif -#endif - -#ifndef LAPACK_FOUND -extern "C" { -#include // NOLINT -int LAPACKE_sgetrf(int matrix_layout, int m, int n, float* a, int lda, - int* ipiv); -int LAPACKE_dgetrf(int matrix_layout, int m, int n, double* a, int lda, - int* ipiv); -int LAPACKE_sgetri(int matrix_layout, int n, float* a, int lda, - const int* ipiv); -int LAPACKE_dgetri(int matrix_layout, int n, double* a, int lda, - const int* ipiv); -} #endif namespace paddle { diff --git a/paddle/fluid/operators/math/math_function.h b/paddle/fluid/operators/math/math_function.h index 56a039d3ce..7ec78d9ef8 100644 --- a/paddle/fluid/operators/math/math_function.h +++ b/paddle/fluid/operators/math/math_function.h @@ -19,23 +19,6 @@ limitations under the License. */ #ifdef PADDLE_USE_OPENBLAS #include -#ifdef LAPACK_FOUND -#include -#endif -#endif - -#ifndef LAPACK_FOUND -extern "C" { -#include // NOLINT -int LAPACKE_sgetrf(int matrix_layout, int m, int n, float* a, int lda, - int* ipiv); -int LAPACKE_dgetrf(int matrix_layout, int m, int n, double* a, int lda, - int* ipiv); -int LAPACKE_sgetri(int matrix_layout, int n, float* a, int lda, - const int* ipiv); -int LAPACKE_dgetri(int matrix_layout, int n, double* a, int lda, - const int* ipiv); -} #endif #include diff --git a/paddle/fluid/platform/dynload/dynamic_loader.cc b/paddle/fluid/platform/dynload/dynamic_loader.cc index 198d8566b1..93bf7c1351 100644 --- a/paddle/fluid/platform/dynload/dynamic_loader.cc +++ b/paddle/fluid/platform/dynload/dynamic_loader.cc @@ -36,8 +36,6 @@ DEFINE_string(cuda_dir, "", DEFINE_string(warpctc_dir, "", "Specify path for loading libwarpctc.so."); -DEFINE_string(lapack_dir, "", "Specify path for loading liblapack.so."); - DEFINE_string(nccl_dir, "", "Specify path for loading nccl library, such as libcublas, " "libcurand. For instance, /usr/local/cuda/lib64. If default, " @@ -189,14 +187,6 @@ void* GetWarpCTCDsoHandle() { #endif } -void* GetLapackDsoHandle() { -#if defined(__APPLE__) || defined(__OSX__) - return GetDsoHandleFromSearchPath(FLAGS_lapack_dir, "liblapacke.dylib"); -#else - return GetDsoHandleFromSearchPath(FLAGS_lapack_dir, "liblapacke.so"); -#endif -} - void* GetNCCLDsoHandle() { #if defined(__APPLE__) || defined(__OSX__) return GetDsoHandleFromSearchPath(FLAGS_nccl_dir, "libnccl.dylib"); diff --git a/paddle/fluid/platform/dynload/dynamic_loader.h b/paddle/fluid/platform/dynload/dynamic_loader.h index ca87dc47f3..84fd2ce998 100644 --- a/paddle/fluid/platform/dynload/dynamic_loader.h +++ b/paddle/fluid/platform/dynload/dynamic_loader.h @@ -23,7 +23,6 @@ void* GetCUDNNDsoHandle(); void* GetCUPTIDsoHandle(); void* GetCurandDsoHandle(); void* GetWarpCTCDsoHandle(); -void* GetLapackDsoHandle(); void* GetNCCLDsoHandle(); void* GetTensorRtDsoHandle(); void* GetMKLMLDsoHandle(); From 4ed0b62476031f668d3797c664731b11b0055344 Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Thu, 5 Jul 2018 13:03:21 +0800 Subject: [PATCH 130/130] Move fluid::framework::InitDevices into fluid::platform (#11757) * move to platform * "move init from framework to platform" * "remove used init" * "fix ci" * "fix ci" * "fix generic" * "fix ci" * "fix ci" * "fix ci" * "disable fragile test" --- cmake/generic.cmake | 8 ++++---- .../inference/paddle_inference_api_impl.h | 2 +- paddle/fluid/framework/CMakeLists.txt | 20 +++++++++---------- .../framework/data_device_transform_test.cu | 2 +- paddle/fluid/framework/lod_tensor_test.cu | 2 +- paddle/fluid/framework/operator_test.cc | 2 +- paddle/fluid/inference/CMakeLists.txt | 2 +- paddle/fluid/inference/io.h | 2 +- .../operators/distributed/CMakeLists.txt | 2 +- paddle/fluid/operators/math/CMakeLists.txt | 6 +++--- paddle/fluid/operators/nccl_op_test.cu.cc | 2 +- paddle/fluid/platform/CMakeLists.txt | 10 ++++++---- paddle/fluid/platform/device_context_test.cu | 16 --------------- paddle/fluid/platform/float16_test.cc | 2 +- paddle/fluid/{framework => platform}/init.cc | 2 +- paddle/fluid/{framework => platform}/init.h | 0 .../{framework => platform}/init_test.cc | 2 +- paddle/fluid/pybind/CMakeLists.txt | 4 ++-- paddle/fluid/pybind/pybind.cc | 2 +- paddle/fluid/train/demo/demo_trainer.cc | 2 +- paddle/testing/CMakeLists.txt | 2 +- paddle/testing/paddle_gtest_main.cc | 2 +- 22 files changed, 40 insertions(+), 54 deletions(-) rename paddle/fluid/{framework => platform}/init.cc (98%) rename paddle/fluid/{framework => platform}/init.h (100%) rename paddle/fluid/{framework => platform}/init_test.cc (96%) diff --git a/cmake/generic.cmake b/cmake/generic.cmake index fd7fc16bff..eafb11b6f2 100644 --- a/cmake/generic.cmake +++ b/cmake/generic.cmake @@ -257,8 +257,8 @@ function(cc_test TARGET_NAME) set(multiValueArgs SRCS DEPS ARGS) cmake_parse_arguments(cc_test "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) add_executable(${TARGET_NAME} ${cc_test_SRCS}) - target_link_libraries(${TARGET_NAME} ${cc_test_DEPS} paddle_gtest_main memory gtest gflags glog) - add_dependencies(${TARGET_NAME} ${cc_test_DEPS} paddle_gtest_main memory gtest gflags glog) + target_link_libraries(${TARGET_NAME} ${cc_test_DEPS} paddle_gtest_main lod_tensor memory gtest gflags glog) + add_dependencies(${TARGET_NAME} ${cc_test_DEPS} paddle_gtest_main lod_tensor memory gtest gflags glog) add_test(NAME ${TARGET_NAME} COMMAND ${TARGET_NAME} ${cc_test_ARGS} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) @@ -324,8 +324,8 @@ function(nv_test TARGET_NAME) set(multiValueArgs SRCS DEPS) cmake_parse_arguments(nv_test "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) cuda_add_executable(${TARGET_NAME} ${nv_test_SRCS}) - target_link_libraries(${TARGET_NAME} ${nv_test_DEPS} paddle_gtest_main memory gtest gflags glog) - add_dependencies(${TARGET_NAME} ${nv_test_DEPS} paddle_gtest_main memory gtest gflags glog) + target_link_libraries(${TARGET_NAME} ${nv_test_DEPS} paddle_gtest_main lod_tensor memory gtest gflags glog) + add_dependencies(${TARGET_NAME} ${nv_test_DEPS} paddle_gtest_main lod_tensor memory gtest gflags glog) add_test(${TARGET_NAME} ${TARGET_NAME}) if (nv_test_SERIAL) set_property(TEST ${TARGET_NAME} PROPERTY SERIAL 1) diff --git a/paddle/contrib/inference/paddle_inference_api_impl.h b/paddle/contrib/inference/paddle_inference_api_impl.h index ba266b608d..f9ec6f5544 100644 --- a/paddle/contrib/inference/paddle_inference_api_impl.h +++ b/paddle/contrib/inference/paddle_inference_api_impl.h @@ -22,9 +22,9 @@ #include "paddle/contrib/inference/paddle_inference_api.h" #include "paddle/fluid/framework/ddim.h" -#include "paddle/fluid/framework/init.h" #include "paddle/fluid/framework/lod_tensor.h" #include "paddle/fluid/inference/io.h" +#include "paddle/fluid/platform/init.h" #include "paddle/fluid/platform/profiler.h" namespace paddle { diff --git a/paddle/fluid/framework/CMakeLists.txt b/paddle/fluid/framework/CMakeLists.txt index 6286dda4a5..397c9f7394 100644 --- a/paddle/fluid/framework/CMakeLists.txt +++ b/paddle/fluid/framework/CMakeLists.txt @@ -21,10 +21,10 @@ endif() cc_test(eigen_test SRCS eigen_test.cc DEPS tensor) -nv_test(mixed_vector_test SRCS mixed_vector_test.cu DEPS place memory device_context init) +nv_test(mixed_vector_test SRCS mixed_vector_test.cu DEPS place memory device_context tensor) cc_library(lod_tensor SRCS lod_tensor.cc DEPS ddim place tensor framework_proto recordio) cc_test(lod_tensor_test SRCS lod_tensor_test.cc DEPS lod_tensor memory) -nv_test(lod_tensor_gpu_test SRCS lod_tensor_test.cu DEPS lod_tensor init) +nv_test(lod_tensor_gpu_test SRCS lod_tensor_test.cu DEPS lod_tensor) cc_library(reader SRCS reader.cc DEPS lod_tensor ddim) @@ -38,7 +38,7 @@ cc_test(scope_test SRCS scope_test.cc DEPS scope) cc_library(data_device_transform SRCS data_device_transform.cc DEPS tensor) nv_test(data_device_transform_test SRCS data_device_transform_test.cu - DEPS operator op_registry init math_function) + DEPS operator op_registry device_context math_function) if(WITH_GPU) nv_library(data_type_transform SRCS data_type_transform.cu DEPS tensor) @@ -63,7 +63,7 @@ cc_library(op_info SRCS op_info.cc DEPS attribute framework_proto) cc_library(shape_inference SRCS shape_inference.cc DEPS ddim attribute device_context) cc_library(operator SRCS operator.cc DEPS op_info device_context tensor scope glog shape_inference data_transform lod_tensor profiler) -cc_test(operator_test SRCS operator_test.cc DEPS operator op_registry init) +cc_test(operator_test SRCS operator_test.cc DEPS operator op_registry device_context) cc_library(proto_desc SRCS var_desc.cc op_desc.cc block_desc.cc program_desc.cc DEPS shape_inference op_info operator glog) cc_library(op_registry SRCS op_registry.cc DEPS op_proto_maker op_info operator glog proto_desc) @@ -101,14 +101,14 @@ cc_test(var_type_inference_test SRCS var_type_inference_test.cc DEPS op_registry cc_library(selected_rows SRCS selected_rows.cc DEPS tensor) cc_test(selected_rows_test SRCS selected_rows_test.cc DEPS selected_rows) -cc_library(init SRCS init.cc DEPS gflags device_context place stringpiece operator) -cc_test(init_test SRCS init_test.cc DEPS init) - cc_test(op_kernel_type_test SRCS op_kernel_type_test.cc DEPS place device_context framework_proto) cc_test(cow_ptr_tests SRCS details/cow_ptr_test.cc) # cc_test(channel_test SRCS channel_test.cc) cc_test(tuple_test SRCS tuple_test.cc ) -cc_test(concurrency_test SRCS concurrency_test.cc DEPS go_op channel_close_op channel_create_op - channel_send_op channel_recv_op sum_op select_op elementwise_add_op compare_op - conditional_block_op while_op assign_op print_op executor proto_desc) + +# disable test temporarily. +# TODO https://github.com/PaddlePaddle/Paddle/issues/11971 +# cc_test(concurrency_test SRCS concurrency_test.cc DEPS go_op channel_close_op channel_create_op +# channel_send_op channel_recv_op sum_op select_op elementwise_add_op compare_op +# conditional_block_op while_op assign_op print_op executor proto_desc) diff --git a/paddle/fluid/framework/data_device_transform_test.cu b/paddle/fluid/framework/data_device_transform_test.cu index a91fe5c99d..f2c55e533a 100644 --- a/paddle/fluid/framework/data_device_transform_test.cu +++ b/paddle/fluid/framework/data_device_transform_test.cu @@ -14,13 +14,13 @@ limitations under the License. */ #include "gtest/gtest.h" -#include "paddle/fluid/framework/init.h" #include "paddle/fluid/framework/lod_tensor.h" #include "paddle/fluid/framework/op_info.h" #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/operators/elementwise_op_function.h" #include "paddle/fluid/operators/math/math_function.h" #include "paddle/fluid/platform/device_context.h" +#include "paddle/fluid/platform/init.h" namespace paddle { namespace framework { diff --git a/paddle/fluid/framework/lod_tensor_test.cu b/paddle/fluid/framework/lod_tensor_test.cu index e3efbe4c46..b9950627ca 100644 --- a/paddle/fluid/framework/lod_tensor_test.cu +++ b/paddle/fluid/framework/lod_tensor_test.cu @@ -17,9 +17,9 @@ #include #include "gtest/gtest.h" -#include "paddle/fluid/framework/init.h" #include "paddle/fluid/framework/lod_tensor.h" #include "paddle/fluid/platform/assert.h" +#include "paddle/fluid/platform/init.h" #include "paddle/fluid/platform/place.h" __global__ void test(size_t* a, int size) { diff --git a/paddle/fluid/framework/operator_test.cc b/paddle/fluid/framework/operator_test.cc index 74043b5d79..e211c678f8 100644 --- a/paddle/fluid/framework/operator_test.cc +++ b/paddle/fluid/framework/operator_test.cc @@ -13,10 +13,10 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "gtest/gtest.h" -#include "paddle/fluid/framework/init.h" #include "paddle/fluid/framework/op_info.h" #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/framework/operator.h" +#include "paddle/fluid/platform/init.h" namespace paddle { namespace framework { diff --git a/paddle/fluid/inference/CMakeLists.txt b/paddle/fluid/inference/CMakeLists.txt index 7071eea19c..1895aea7f9 100644 --- a/paddle/fluid/inference/CMakeLists.txt +++ b/paddle/fluid/inference/CMakeLists.txt @@ -1,4 +1,4 @@ -set(FLUID_CORE_MODULES proto_desc memory lod_tensor executor init) +set(FLUID_CORE_MODULES proto_desc memory lod_tensor executor ) # TODO(panyx0718): Should this be called paddle_fluid_inference_api_internal? cc_library(paddle_fluid_api diff --git a/paddle/fluid/inference/io.h b/paddle/fluid/inference/io.h index caf599b1a6..01b50b3670 100644 --- a/paddle/fluid/inference/io.h +++ b/paddle/fluid/inference/io.h @@ -18,9 +18,9 @@ limitations under the License. */ #include #include #include "paddle/fluid/framework/executor.h" -#include "paddle/fluid/framework/init.h" #include "paddle/fluid/framework/program_desc.h" #include "paddle/fluid/framework/scope.h" +#include "paddle/fluid/platform/init.h" namespace paddle { namespace inference { diff --git a/paddle/fluid/operators/distributed/CMakeLists.txt b/paddle/fluid/operators/distributed/CMakeLists.txt index 312f80e090..675ca36774 100644 --- a/paddle/fluid/operators/distributed/CMakeLists.txt +++ b/paddle/fluid/operators/distributed/CMakeLists.txt @@ -5,7 +5,7 @@ if(WITH_GRPC) set(DISTRIBUTE_COMPILE_FLAGS "-Wno-non-virtual-dtor -Wno-error=non-virtual-dtor -Wno-error=delete-non-virtual-dtor") set_source_files_properties(grpc_serde_test.cc rpc_server_test.cc PROPERTIES COMPILE_FLAGS ${DISTRIBUTE_COMPILE_FLAGS}) cc_test(serde_test SRCS grpc_serde_test.cc variable_response.cc DEPS grpc++_unsecure grpc_unsecure gpr - cares zlib protobuf sendrecvop_grpc SERIAL) + cares zlib protobuf sendrecvop_grpc scope profiler math_function SERIAL) cc_test(grpc_server_test SRCS rpc_server_test.cc DEPS sendrecvop_grpc grpc++_unsecure grpc_unsecure gpr cares zlib protobuf executor proto_desc lookup_table_op SERIAL) diff --git a/paddle/fluid/operators/math/CMakeLists.txt b/paddle/fluid/operators/math/CMakeLists.txt index 53a478c1ac..5571ff9a71 100644 --- a/paddle/fluid/operators/math/CMakeLists.txt +++ b/paddle/fluid/operators/math/CMakeLists.txt @@ -54,13 +54,13 @@ math_library(softmax DEPS math_function) math_library(unpooling) math_library(vol2col) -cc_test(math_function_test SRCS math_function_test.cc) +cc_test(math_function_test SRCS math_function_test.cc DEPS math_function) cc_test(selected_rows_functor_test SRCS selected_rows_functor_test.cc DEPS selected_rows_functor) cc_test(im2col_test SRCS im2col_test.cc DEPS im2col) cc_test(vol2col_test SRCS vol2col_test.cc DEPS vol2col) cc_test(sequence_padding_test SRCS sequence_padding_test.cc DEPS sequence_padding) if(WITH_GPU) - nv_test(math_function_gpu_test SRCS math_function_test.cu) - nv_test(selected_rows_functor_gpu_test SRCS selected_rows_functor_test.cu DEPS selected_rows_functor) + nv_test(math_function_gpu_test SRCS math_function_test.cu DEPS math_function) + nv_test(selected_rows_functor_gpu_test SRCS selected_rows_functor_test.cu DEPS selected_rows_functor math_function) endif() cc_test(concat_test SRCS concat_test.cc DEPS concat) diff --git a/paddle/fluid/operators/nccl_op_test.cu.cc b/paddle/fluid/operators/nccl_op_test.cu.cc index ef54d79fdf..d5fb7a12e5 100644 --- a/paddle/fluid/operators/nccl_op_test.cu.cc +++ b/paddle/fluid/operators/nccl_op_test.cu.cc @@ -19,7 +19,6 @@ limitations under the License. */ #include // NOLINT #include -#include "paddle/fluid/framework/init.h" #include "paddle/fluid/framework/op_desc.h" #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/framework/program_desc.h" @@ -27,6 +26,7 @@ limitations under the License. */ #include "paddle/fluid/platform/device_context.h" #include "paddle/fluid/platform/enforce.h" #include "paddle/fluid/platform/gpu_info.h" +#include "paddle/fluid/platform/init.h" #include "paddle/fluid/platform/place.h" USE_NO_KERNEL_OP(ncclInit); diff --git a/paddle/fluid/platform/CMakeLists.txt b/paddle/fluid/platform/CMakeLists.txt index b29035bafd..edd5a84aa2 100644 --- a/paddle/fluid/platform/CMakeLists.txt +++ b/paddle/fluid/platform/CMakeLists.txt @@ -42,10 +42,12 @@ ENDIF() # memcpy depends on device_context, here add deps individually for # avoiding cycle dependencies -cc_library(device_context SRCS device_context.cc DEPS malloc - place eigen3 ${GPU_CTX_DEPS} ${MKLDNN_CTX_DEPS}) +cc_library(device_context SRCS device_context.cc init.cc DEPS malloc + place eigen3 stringpiece ${GPU_CTX_DEPS} ${MKLDNN_CTX_DEPS}) nv_test(device_context_test SRCS device_context_test.cu DEPS device_context gpu_info) +cc_test(init_test SRCS init_test.cc DEPS device_context) + nv_test(cudnn_helper_test SRCS cudnn_helper_test.cc DEPS dynload_cuda) nv_test(transform_test SRCS transform_test.cu DEPS memory place device_context) @@ -53,5 +55,5 @@ cc_library(device_tracer SRCS device_tracer.cc DEPS boost profiler_proto framewo cc_library(profiler SRCS profiler.cc DEPS device_context device_tracer) cc_test(profiler_test SRCS profiler_test.cc DEPS profiler) -nv_test(float16_gpu_test SRCS float16_test.cu) -cc_test(float16_test SRCS float16_test.cc) +nv_test(float16_gpu_test SRCS float16_test.cu DEPS lod_tensor) +cc_test(float16_test SRCS float16_test.cc DEPS lod_tensor) diff --git a/paddle/fluid/platform/device_context_test.cu b/paddle/fluid/platform/device_context_test.cu index fa806aba6d..171d2979a0 100644 --- a/paddle/fluid/platform/device_context_test.cu +++ b/paddle/fluid/platform/device_context_test.cu @@ -69,19 +69,3 @@ TEST(Device, DeviceContextPool) { ASSERT_NE(dev_ctx, nullptr); } } - -int main(int argc, char** argv) { - std::vector places; - - places.emplace_back(paddle::platform::CPUPlace()); - int count = paddle::platform::GetCUDADeviceCount(); - for (int i = 0; i < count; ++i) { - places.emplace_back(paddle::platform::CUDAPlace(i)); - } - - VLOG(0) << " DeviceCount " << count; - paddle::platform::DeviceContextPool::Init(places); - - testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/paddle/fluid/platform/float16_test.cc b/paddle/fluid/platform/float16_test.cc index a589e32b61..ede294be1e 100644 --- a/paddle/fluid/platform/float16_test.cc +++ b/paddle/fluid/platform/float16_test.cc @@ -13,8 +13,8 @@ limitations under the License. */ #include #include "gtest/gtest.h" -#include "paddle/fluid/framework/init.h" #include "paddle/fluid/framework/lod_tensor.h" +#include "paddle/fluid/platform/init.h" namespace paddle { namespace platform { diff --git a/paddle/fluid/framework/init.cc b/paddle/fluid/platform/init.cc similarity index 98% rename from paddle/fluid/framework/init.cc rename to paddle/fluid/platform/init.cc index a1094976f6..475437785f 100644 --- a/paddle/fluid/framework/init.cc +++ b/paddle/fluid/platform/init.cc @@ -16,10 +16,10 @@ limitations under the License. */ #include #include -#include "paddle/fluid/framework/init.h" #include "paddle/fluid/framework/operator.h" #include "paddle/fluid/operators/math/blas.h" #include "paddle/fluid/platform/device_context.h" +#include "paddle/fluid/platform/init.h" #include "paddle/fluid/platform/place.h" #include "paddle/fluid/string/piece.h" diff --git a/paddle/fluid/framework/init.h b/paddle/fluid/platform/init.h similarity index 100% rename from paddle/fluid/framework/init.h rename to paddle/fluid/platform/init.h diff --git a/paddle/fluid/framework/init_test.cc b/paddle/fluid/platform/init_test.cc similarity index 96% rename from paddle/fluid/framework/init_test.cc rename to paddle/fluid/platform/init_test.cc index 928e2d14ab..eef1470a90 100644 --- a/paddle/fluid/framework/init_test.cc +++ b/paddle/fluid/platform/init_test.cc @@ -13,8 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "gtest/gtest.h" -#include "paddle/fluid/framework/init.h" #include "paddle/fluid/platform/device_context.h" +#include "paddle/fluid/platform/init.h" TEST(InitDevices, CPU) { using paddle::framework::InitDevices; diff --git a/paddle/fluid/pybind/CMakeLists.txt b/paddle/fluid/pybind/CMakeLists.txt index 4fef351c21..89ca4f7812 100644 --- a/paddle/fluid/pybind/CMakeLists.txt +++ b/paddle/fluid/pybind/CMakeLists.txt @@ -2,13 +2,13 @@ if(WITH_PYTHON) if(WITH_AMD_GPU) hip_library(paddle_pybind SHARED SRCS pybind.cc exception.cc protobuf.cc const_value.cc recordio.cc - DEPS pybind python proto_desc memory executor prune init profiler feed_fetch_method + DEPS pybind python proto_desc memory executor prune profiler feed_fetch_method parallel_executor ${GLOB_OP_LIB}) else() cc_library(paddle_pybind SHARED SRCS pybind.cc exception.cc protobuf.cc const_value.cc recordio.cc - DEPS pybind python proto_desc memory executor prune init profiler feed_fetch_method + DEPS pybind python proto_desc memory executor prune profiler feed_fetch_method parallel_executor ${GLOB_OP_LIB}) if(NOT APPLE AND NOT ANDROID) diff --git a/paddle/fluid/pybind/pybind.cc b/paddle/fluid/pybind/pybind.cc index 3191f29fc3..7a8bb71245 100644 --- a/paddle/fluid/pybind/pybind.cc +++ b/paddle/fluid/pybind/pybind.cc @@ -24,7 +24,6 @@ limitations under the License. */ #include "paddle/fluid/framework/executor.h" #include "paddle/fluid/framework/feed_fetch_method.h" #include "paddle/fluid/framework/framework.pb.h" -#include "paddle/fluid/framework/init.h" #include "paddle/fluid/framework/lod_rank_table.h" #include "paddle/fluid/framework/lod_tensor.h" #include "paddle/fluid/framework/lod_tensor_array.h" @@ -36,6 +35,7 @@ limitations under the License. */ #include "paddle/fluid/operators/activation_op.h" #include "paddle/fluid/operators/reader/lod_tensor_blocking_queue.h" #include "paddle/fluid/platform/enforce.h" +#include "paddle/fluid/platform/init.h" #include "paddle/fluid/platform/place.h" #include "paddle/fluid/platform/profiler.h" #include "paddle/fluid/pybind/const_value.h" diff --git a/paddle/fluid/train/demo/demo_trainer.cc b/paddle/fluid/train/demo/demo_trainer.cc index 813d838686..4425f062ef 100644 --- a/paddle/fluid/train/demo/demo_trainer.cc +++ b/paddle/fluid/train/demo/demo_trainer.cc @@ -15,11 +15,11 @@ #include #include "paddle/fluid/framework/executor.h" -#include "paddle/fluid/framework/init.h" #include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/framework/program_desc.h" #include "paddle/fluid/framework/tensor_util.h" #include "paddle/fluid/platform/device_context.h" +#include "paddle/fluid/platform/init.h" #include "paddle/fluid/platform/place.h" namespace paddle { diff --git a/paddle/testing/CMakeLists.txt b/paddle/testing/CMakeLists.txt index a1f446817e..2264481899 100644 --- a/paddle/testing/CMakeLists.txt +++ b/paddle/testing/CMakeLists.txt @@ -6,6 +6,6 @@ if(WITH_TESTING) add_library(paddle_test_util STATIC TestUtil.cpp) add_dependencies(paddle_test_util paddle_proto ${external_project_dependencies}) if(NOT MOBILE_INFERENCE) - cc_library(paddle_gtest_main SRCS paddle_gtest_main.cc DEPS init memory gtest gflags) + cc_library(paddle_gtest_main SRCS paddle_gtest_main.cc DEPS device_context memory gtest gflags) endif() endif() diff --git a/paddle/testing/paddle_gtest_main.cc b/paddle/testing/paddle_gtest_main.cc index 555be3d00e..cfea2059c3 100644 --- a/paddle/testing/paddle_gtest_main.cc +++ b/paddle/testing/paddle_gtest_main.cc @@ -16,8 +16,8 @@ limitations under the License. */ #include "gflags/gflags.h" #include "gtest/gtest.h" -#include "paddle/fluid/framework/init.h" #include "paddle/fluid/memory/memory.h" +#include "paddle/fluid/platform/init.h" int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv);